Non-destructive run forking
You can now branch a new run from any checkpoint in an existing run withfabro fork. Unlike fabro rewind, which rewinds the original run in place, fabro fork creates an independent copy — the original run stays intact. This is useful for exploring alternate paths from a checkpoint without losing the work that came after it.
Self-update with fabro upgrade
Fabro can now update itself.fabro upgrade downloads the latest release from GitHub, verifies its SHA256 checksum, and atomically replaces the binary. Downgrade protection prevents accidentally installing an older version (override with --force). A daily background check notifies you when a new version is available — disable it with upgrade_check = false in ~/.fabro/cli.toml or --no-upgrade-check.
Docker-style process listing
fabro ps has been rebuilt to behave like docker ps. It now shows a table with run ID, status, workflow name, goal, and timing — making it easy to see what’s running at a glance. Run status is tracked via a proper state machine, so status transitions are reliable and fabro ps always reflects the current state.
More
CLI
CLI
- Added
fabro asset listto view run artifacts andfabro asset cpto copy them locally with optional--treedirectory structure - Added
fabro rmcommand to remove runs by ID with sandbox cleanup - Added
-pshort alias for--prettyinfabro logs - Added progress spinner during
run --preflight
Workflows
Workflows
- Added
selection="random"node attribute for weighted-random edge selection in workflow graphs - GitHub App installation tokens are now automatically injected into sandboxes as
GITHUB_TOKEN - Workflow PRs now open as ready-for-review by default (control with
[pull_request] draft = false) - Metadata branch renamed from
refs/fabro/{run_id}tofabro/meta/{run_id}for cleaner ref namespace - Added granular git checkpoint events and retro lifecycle events (
RetroStarted,RetroCompleted,RetroFailed) goalfield now included inWorkflowRunStartedevent and rendered infabro logs --pretty- Run completion events now include final status and usage totals
Improvements
Improvements
- Asset collection now enforces a 100-file limit and excludes
.venv,venv,.cache,.tox,.pytest_cache,.mypy_cache, anddistdirectories - Unified dry-run behavior across all handler types — wait and human-in-the-loop nodes now properly simulate without side effects
Fixes
Fixes
- Fixed
--dry-runexecuting command/script nodes instead of simulating them - Fixed
--dry-runpushing branches to remote - Fixed
--goal-filenot expanding~to the home directory - Fixed race condition between
fabro run --detachandfabro logs -f - Fixed dry-run runs cluttering
fabro ps -aoutput (now uses temp directory)