Completions API with SSE streaming
Fabro now exposes aPOST /completions endpoint for single-turn LLM completions. You can use it for structured output via JSON Schema, one-off prompts, or building custom frontends on top of Fabro’s model routing. Streaming uses Anthropic-style SSE events (message_start, content_block_delta, message_stop, etc.), so you get tokens as they’re generated rather than waiting for the full response.
The CLI’s fabro llm commands can now target the server instead of calling providers directly:
Two new sandbox providers: exe.dev and Sprites
Fabro now supports three sandbox environments for running agent stages. In addition to Daytona, you can now use exe.dev VMs or Sprites (powered by Fly.io). exe.dev (beta) manages ephemeral VMs through SSH with separate management and data plane connections. Sprites uses thesprite CLI to provision Fly.io VMs with full sandbox lifecycle support.
run.toml
Sandbox environment variables
You can now pass environment variables to sandboxes directly from your workflow config using the new[sandbox.env] section. This is useful for passing API keys, feature flags, or other configuration that agents need inside the sandbox — without baking them into Dockerfiles or snapshot images.
run.toml
More
API
API
- New
POST /completionsendpoint for single-turn LLM completions with SSE streaming and structured output via JSON Schema - New
GET /modelsendpoint exposes the full LLM model catalog with pagination - New
POST /models/{id}/testendpoint for testing model connectivity in server mode - Session endpoints for interactive LLM chat via
fabro llm chat --mode server - Verification API reorganized:
/verificationssplit into/verification/criteriaand/verification/controls
CLI
CLI
fabro llm prompt --mode serverroutes prompts through the Fabro serverfabro llm chat --mode serverenables interactive chat sessions through the serverfabro model list --mode standalone|servercontrols whether model list comes from local config or server- Added
--goalarg tofabro run startto override the workflow goal from the command line - Turn and tool-call counts now display correctly in non-TTY mode
Workflows
Workflows
[sandbox.env]passes environment variables from workflow config to sandbox executionproject_memoryattribute for prompt nodes provides persistent context across turns@filereferences in DOT prompts are now inlined at prepare time, including untracked filesdockerfile = { path = "..." }in snapshot config lets you specify a custom Dockerfile location- Checkpoint exclude globs skip bulky artifacts from git checkpoint commits
- Metadata branch pushed to origin after checkpoint in Remote (Daytona) mode
- Stage logs now stream in real-time while CLI agents are working
- Sub-workflow context diffs no longer leak child engine-internal keys into the parent run
- Configurable git author identity for checkpoint commits via
[git.author]in config
Improvements
Improvements
- Auto-install agent CLIs (like
claudeorcodex) in sandboxes at runtime when missing - Default OpenAI model upgraded from gpt-5.3 to gpt-5.4
- New models added to catalog:
gpt-5.3-codex-sparkandclaude-sonnet-4-6 apply_patchparser now accepts bare@@hunk headers (compatibility with GPT-5.4 output)- imagegen tool for Gemini-based image generation
Fixes
Fixes
- Fixed stall watchdog killing agents during long LLM reasoning turns — streaming events now correctly reset the timer
- Fixed OpenAI reasoning SSE events being silently swallowed, causing stall watchdog to fire during extended reasoning phases
- Fixed orphaned OpenAI reasoning items after context compaction causing “item provided without required following item” errors
- Fixed push credentials for public repos in Daytona sandboxes
- Fixed Daytona CLI installation with rootless Node.js install and better error messages