Lifecycle hooks
You can now intercept tool calls at three points during agent execution: before a tool runs (PreToolUse), after it succeeds (PostToolUse), and after it fails (PostToolUseFailure). Each hook receives the tool name and arguments, and can modify, skip, or block the call. This makes it possible to enforce project conventions — like auto-formatting after file writes — or add guardrails without modifying agent prompts.
fabro.toml
Server mode for fabro exec
fabro exec can now run as a long-lived server that proxies requests through a /completions endpoint. Instead of running a single agent session and exiting, server mode keeps the agent process alive and accepts Anthropic-style streaming requests over HTTP. This enables integrating Fabro agents into applications that speak the standard completions API.
Auto-PR on workflow completion
Workflows can now automatically open a GitHub pull request when a run completes successfully. Fabro creates the PR from the agent’s working branch with the run summary as the description. No extra scripting or post-run steps needed — just enable the option in your run configuration.More
API
API
- Renamed
/runs/{id}/compareto/runs/{id}/fileswith standard paginated response - Added
POST /runs/{id}/pauseandPOST /runs/{id}/unpauseendpoints - Added
POST /completionsendpoint with Anthropic-style SSE streaming - Removed
List ProjectsandList Branchesendpoints
CLI
CLI
- Added
--goal-fileflag tofabro runfor reading goal from a file instead of inline text - MCP servers can now be configured in TOML via
cli.tomlinstead of JSON verbose = trueincli.tomldefaults to verbose output without needing-vgoalis now optional in run config TOML — precedence is CLI--goal> TOMLgoal> DOT graph attribute- Configurable git author identity for checkpoint commits via
[git.author] - Added
[log]config section toserver.tomlandcli.tomlfor log level and format control
Workflows
Workflows
- Script nodes now execute inside the configured sandbox instead of on the host — fixes issues where agents edited files in the sandbox but lint/test commands ran on the host
- Asset collection is now opt-in via
[assets]config with custom include globs, eliminating ~30s file scans per stage when not needed - Workflow runs now fail immediately on git checkpoint commit failure instead of silently continuing
- GitHub webhook listener via Tailscale funnel — auto-configures webhook URL on startup
[sandbox.env]support passes environment variables through to sandbox tool execution- Dockerfile path syntax (
dockerfile = { path = "..." }) in snapshot config fabro validateand the workflow validator now catch unresolved@filereferences before execution- Fixed
@filereferences with~home directory and..parent directory paths - Compaction progress now visible in non-verbose
fabro runoutput - Run ID printed at start of
fabro runand on resume for cross-referencing - Git checkpoint commit skipped for start node to reduce noise
Improvements
Improvements
- Daytona sandboxes now named
fabro-{run_id}for easy correlation with workflow runs - Logs directory naming changed from
fabro-run-YYYYMMDD-HHMMSStoYYYYMMDD-{run_id} - Truncated stage failure error display to show only the last line in
fabro runoutput apply_patcherror responses now include file contents for better debugging of failed edits- v4a patch parser/applier rewritten to match canonical OpenAI codex spec
- Accept bare
@@hunk headers in v4aapply_patchparser - Added Sprites (Fly.io) VM sandbox provider
Fixes
Fixes
- Fixed SSE streaming format mismatch in
/completionsendpoint - Exempted
/tmp/paths from sandbox read-before-write guard - Fixed sandbox file-write validation incorrectly blocking valid operations
- Fixed stall watchdog killing agent during long LLM reasoning turns
- Added 5-minute stream read timeout with 5-second retry backoff for sandbox connections
- Increased default stall watchdog timeout from 10 to 30 minutes
- Fixed subagent and system prompt handling when prompt text is empty
- Fixed parallel stage compaction bars interfering with each other