Skip to main content
Fabro no longer terminates inbound TLS or mTLS itself. Keep the Fabro listener on plain HTTP or a Unix socket, then terminate HTTPS or mTLS at a reverse proxy, load balancer, or platform ingress.To migrate:
  1. Remove direct TLS listener settings from Fabro.
  2. Put the TLS-terminating proxy in front of Fabro.
  3. Set server.api.url and server.web.url to the external HTTPS origin.

Browse changed files from a run

Run detail pages now include a Files view backed by server-side file metadata and diffs. Instead of leaving the web app to infer output from terminal logs or downloaded artifacts, Fabro can show the changed files, empty states, loading states, errors, and refresh behavior directly in the run UI. The same data is available through the API:
GET /api/v1/runs/{id}/files
The server reads the run’s sandbox path when available and can fall back to final patch data for failed runs, so file review still works across more failure modes.

Archive terminal runs

Terminal runs - succeeded, failed, and dead - can now be archived after review. Archived runs are hidden from default listings and are read-only; if you try to mutate one, Fabro returns an actionable error asking you to unarchive it first.
fabro archive <run-id> [<run-id> ...]
fabro unarchive <run-id> [<run-id> ...]
Both commands are idempotent in their respective directions, which makes retries and mixed batches safe. fabro ps -a shows active, terminal, and archived runs together, while the default fabro ps view stays focused on active work.

Browser-based server setup

Starting a server without an existing settings file now enters install mode and opens a browser wizard. The wizard walks through server URL, object storage defaults, LLM credentials, and GitHub integration instead of requiring a long manual settings.toml edit before first use.
fabro server start
The install flow is also available in the embedded web app, so Docker and hosted deployments can complete setup from the same server process they will keep running.

More

  • New GET /api/v1/runs/{id}/files endpoint returns paginated run file data and diff metadata
  • New POST /api/v1/runs/{id}/archive and POST /api/v1/runs/{id}/unarchive endpoints manage archived terminal runs
  • GET /api/v1/runs accepts include_archived=true for listing archived runs
  • GitHub webhook handling added explicit source IP allowlisting with GitHub webhook range refresh (removed on 2026-05-27)
  • Added fabro archive and fabro unarchive for bulk archiving terminal runs
  • fabro ps -a now includes archived runs alongside active and terminal runs
  • Added run.archived and run.unarchived events for archive state changes
  • Captured final_patch on failed runs so Run Files can still show changed files when finalization degrades
  • Added machine-readable sandbox git helpers for Run Files extraction
  • Promoted Settings to the top-level web navigation and added page headers for settings pages
  • Tightened run detail layout, graph toolbar behavior, billing presentation, and stage sidebar ergonomics
  • Added a shared empty, loading, and error state primitive for web run views
  • Canonicalized paginated run list responses across real and demo mode
  • Fixed Run Files path normalization for Unicode paths and tightened denylist handling for sandbox, artifact, and blob paths
  • Fixed archive and unarchive bulk failure grammar in CLI output
  • Fixed archived run mutation handling so archived runs return the correct actionable error
  • Fixed install wizard edge cases around GitHub App setup, unsupported providers, and demo status parsing