Provider-aware model selection
Model aliases used to be globally unique, which made portable model names ambiguous across direct providers and aggregators. Providers can now expose the same canonical slug and aliases: Fabro selects the highest-priority ready offering for an unqualified name, treats an explicit provider as a pin, and persists the chosen offering when the run is created. Custom offerings now nest under their provider; legacy top-level[llm.models] rows and historical built-in selectors remain accepted for compatibility.
settings.toml
Reliable interrupts and cancellation
Interrupting an agent now settles active inference, tools, and subagent waits before the stage enters a durable waiting for steering state shown in the web UI. Steering resumes from that state without orphaning child agents, while live run cancellations are durably recorded and remain visibly Cancelling… until the run reaches its terminal cancelled state.More
API
API
- LLM requests made during a run now carry
x-session-id: <run-id>so compatible gateways can group them into one trace session
Workflows
Workflows
fabro validatenow warns when handler-specific attributes are placed on node or parallel-branch types that never read them, including clearer diagnostics for multiple parallel parents, custom types, and inherited thread settings- Run manifests now bundle
@filereferences used byoutput_schema
Fixes
Fixes
- Provider-reported completion costs now survive agent and workflow event projection, and billing accumulation saturates safely
- Explicit provider pins are preserved through run materialization and request-time routing instead of being redirected to a higher-priority provider
- OpenRouter Claude requests now emit cache-control breakpoints, enabling the prompt-cache reads and writes advertised by those catalog entries
- Agent stage events are flushed before stage completion, preventing final tool and usage events from appearing after the stage is marked done
- Agent routing’s last-file fallback now accepts only
.jsonand.mdfiles whose final standalone object contains routing fields - Generated run titles update atomically and no longer overwrite a title changed while generation was in flight
- Child OpenAI plans no longer replace the root agent’s TODO list in the stage sidebar
- Run deletion failures now show delete-specific error messages
Improvements
Improvements
- OpenRouter now includes Claude Fable 5, Claude Opus 4.8, and GPT-5.6 Sol, Terra, and Luna offerings