Skip to main content

Live Web UI

The Web UI now connects to real server data instead of showing static demos. The runs board updates in real time via server-sent events — new runs appear, statuses change, and timers tick without refreshing the page. Each run’s detail page has a stages tab with a live sidebar that shows the currently executing stage, elapsed time, and stage history as events stream in.

Workflow graph visualization

Run detail pages now render an interactive workflow graph with controls for switching between top-down and left-right layouts. Nodes are color-coded by status — running stages pulse, failed nodes turn red, and completed nodes are marked. The graph updates live as the workflow progresses, so you can watch execution flow through the graph in real time.

Markdown rendering in stage output

Stage detail pages now render markdown in system prompts and assistant response blocks, making agent output much easier to read. Command and script stage output is also rendered on the stage detail page, so you can inspect what each stage produced without switching to the CLI.

More

  • fabro secret set now accepts the secret value via stdin or interactive prompt instead of requiring it as an argument
  • Install output now shows the active auth method and dev token
  • Restored Run ID display in fabro run output header
  • Cloud sandboxes (Daytona) are now preserved after runs complete instead of being torn down immediately
  • Doctor output now shows the server location URL
  • Added disk_cache setting for S3-backed storage deployments
  • Fixed workflows not using configured providers for default models
  • Fixed Daytona API key not being passed through to the SDK client from vault storage
  • Fixed Web UI logout producing a React Router 500 error
  • Fixed Web UI redirecting to /start instead of /runs after login
  • Fixed run goals displaying raw markdown heading markers in the Web UI
  • Fixed stage failed events missing duration data in the sidebar display
  • Fixed Web UI not handling 404 and 501 API responses gracefully