fabro/docs/public/reference/cli.mdx
Bryan Helmkamp 5fc9157017
refactor(workflow): remove retro stage (#230)
## Summary

Removes Fabro's automatic retro generation stage so workflow runs go
directly from execution to finalization and optional PR creation. This
drops the retro-specific crate, events, projection fields, config/API
knobs, and user-facing docs in favor of the existing durable run
observability surfaces.

## What Changed

- Deleted the `fabro-retro` crate and the workflow `retro` pipeline
phase, with finalization now consuming `Executed` state directly.
- Removed retro configuration and API surface area, including
`--no-retro`, `[run.execution].retros`, manifest `no_retro`,
`features.retros`, and run projection `retro*` fields.
- Retired typed `retro.*` events while keeping historical event logs
readable by deserializing retired retro event names as `Unknown`.
- Stopped appending retro sections to generated PR bodies and updated
docs, marketing copy, screenshots, and navigation to point users toward
observability/event-stream inspection.

## Testing

Not run during PR creation; this branch already contained the
implementation commit.

---

[![Compound
Engineering](https://img.shields.io/badge/Compound_Engineering-6366f1)](https://github.com/EveryInc/compound-engineering-plugin)
🤖 Generated with GPT-5 (unknown context, reasoning unspecified) via
[Codex](https://openai.com/codex)
2026-05-09 10:18:20 -04:00

1415 lines
34 KiB
Text

---
title: "CLI Reference"
description: "Fabro command-line interface reference"
---
## Global options
These flags apply to all subcommands:
| Flag | Description |
|---|---|
| `--json` | Output machine-readable JSON when the command supports it |
| `--debug` | Enable DEBUG-level logging (default is INFO) |
| `--no-upgrade-check` | Skip the automatic background upgrade check |
| `--quiet` | Suppress non-essential output |
| `--verbose` | Enable verbose output |
| `-h, --help` | Print help |
| `-V, --version` | Print version |
Connection-target flags like `--storage-dir` and `--server` are command-specific, not global. Fabro no longer auto-loads `~/.fabro/.env`; persist server-owned credentials with `fabro provider login` / `fabro secret set`, or provide environment variables in the invoking shell.
## Configuration
CLI defaults can be set in `~/.fabro/settings.toml` so you don't have to pass common flags every time:
```toml title="settings.toml"
_version = 1
[cli.exec.model]
provider = "anthropic"
name = "claude-opus-4-6"
[cli.exec.agent]
permissions = "read-write"
[cli.output]
format = "text"
[run.model]
name = "claude-sonnet-4-5"
[cli.target]
type = "http"
url = "https://fabro.example.com/api/v1"
```
`[cli.exec]` config applies to `fabro exec`. `[run.model]` sets the default workflow model/provider for commands like `fabro run` and `fabro preflight`. `[cli.target]` stores connection info for commands that can target a remote Fabro server.
`fabro model` uses `[cli.target]` by default when no explicit `--storage-dir` is passed. `fabro exec` remains a local session unless you pass `--server`, even if `[cli.target]` is configured.
Explicit `http(s)://...` targets are always treated as remote servers. They do not inherit identity from a local daemon, a local storage dir, or `~/.fabro/dev-token`. For remote URLs, use `fabro auth login --server ...` or a stored CLI auth session.
CLI flags always override `settings.toml` values, which override hardcoded defaults.
{/* generated:cli */}
## `fabro`
```bash
fabro [OPTIONS] [COMMAND]
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro archive` | Mark terminal runs as archived (reviewed, no further action needed). Archived runs are hidden from default listings |
| `fabro artifact` | Inspect and copy run artifacts (screenshots, reports, traces) |
| `fabro attach` | Attach to a running or finished workflow run |
| `fabro auth` | Manage CLI authentication state |
| `fabro completion` | Generate shell completions |
| `fabro create` | Create a workflow run (allocate run dir, persist spec) |
| `fabro discord` | Open the Discord community in the browser |
| `fabro docs` | Open the docs website in the browser |
| `fabro doctor` | Check environment and integration health |
| `fabro dump` | Export a run's durable state to a directory |
| `fabro events` | View the event log of a workflow run |
| `fabro fork` | Fork a workflow run from an earlier checkpoint into a new run |
| `fabro graph` | Render a workflow graph as SVG |
| `fabro inspect` | Show detailed information about a workflow run |
| `fabro install` | Set up the Fabro environment (LLMs, certs, GitHub) |
| `fabro logs` | View the raw worker tracing log of a workflow run |
| `fabro model` | List and test LLM models |
| `fabro pr` | Pull request operations |
| `fabro preflight` | Validate run configuration without executing |
| `fabro provider` | Provider operations |
| `fabro repo` | Repository commands |
| `fabro resume` | Resume an interrupted workflow run |
| `fabro rewind` | Rewind a workflow run to an earlier checkpoint |
| `fabro rm` | Remove one or more workflow runs |
| `fabro run` | Launch a workflow run |
| `fabro sandbox` | Sandbox operations (cp, ssh, preview) |
| `fabro secret` | Manage server-owned secrets |
| `fabro server` | Server operations |
| `fabro settings` | Inspect effective settings |
| `fabro start` | Start a created workflow run on the server |
| `fabro steer` | Steer a running agent mid-execution |
| `fabro system` | System maintenance commands |
| `fabro unarchive` | Restore archived runs to their prior terminal status |
| `fabro uninstall` | Uninstall Fabro from this machine |
| `fabro upgrade` | Upgrade fabro to the latest version |
| `fabro validate` | Validate a workflow |
| `fabro version` | Show client and server version information |
| `fabro wait` | Block until a workflow run completes |
| `fabro workflow` | Workflow operations |
### `fabro archive`
Mark terminal runs as archived (reviewed, no further action needed). Archived runs are hidden from default listings
```bash
fabro archive [OPTIONS] <RUNS>...
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUNS` | Run IDs or workflow names to archive |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro artifact`
Inspect and copy run artifacts (screenshots, reports, traces)
```bash
fabro artifact [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro artifact cp` | Copy artifacts from a workflow run |
| `fabro artifact list` | List artifacts for a workflow run |
#### `fabro artifact cp`
Copy artifacts from a workflow run
```bash
fabro artifact cp [OPTIONS] <SOURCE> [DEST]
```
#### Arguments
| Name | Description |
| --- | --- |
| `SOURCE` | Source: RUN_ID (all artifacts) or RUN_ID:path (specific artifact) |
| `DEST` | Destination directory (defaults to current directory)<br />Default: `.` |
#### Options
| Option | Description |
| --- | --- |
| `--node <node>` | Filter to artifacts from a specific node |
| `--retry <retry>` | Filter to artifacts from a specific retry attempt |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--tree` | Preserve {node_slug}/retry_{N}/ directory structure |
#### `fabro artifact list`
List artifacts for a workflow run
```bash
fabro artifact list [OPTIONS] <RUN_ID>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID (or prefix) |
#### Options
| Option | Description |
| --- | --- |
| `--node <node>` | Filter to artifacts from a specific node |
| `--retry <retry>` | Filter to artifacts from a specific retry attempt |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro attach`
Attach to a running or finished workflow run
```bash
fabro attach [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro auth`
Manage CLI authentication state
```bash
fabro auth [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro auth login` | Log in to a Fabro server |
| `fabro auth logout` | Log out from a Fabro server |
| `fabro auth status` | Show offline CLI auth status |
#### `fabro auth login`
Log in to a Fabro server
```bash
fabro auth login [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--dev-token <dev_token>` | Log in with a dev-token instead of browser OAuth |
| `--no-browser` | Print the browser URL instead of opening it automatically |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--timeout <timeout>` | Timeout in seconds waiting for the browser flow to complete<br />Default: `300` |
#### `fabro auth logout`
Log out from a Fabro server
```bash
fabro auth logout [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--all` | Log out from every stored server |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
#### `fabro auth status`
Show offline CLI auth status
```bash
fabro auth status [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro completion`
Generate shell completions
```bash
fabro completion [OPTIONS] <SHELL>
```
#### Arguments
| Name | Description |
| --- | --- |
| `SHELL` | Shell to generate completions for<br />Values: `bash`, `elvish`, `fish`, `powershell`, `zsh` |
### `fabro create`
Create a workflow run (allocate run dir, persist spec)
```bash
fabro create [OPTIONS] <WORKFLOW>
```
#### Arguments
| Name | Description |
| --- | --- |
| `WORKFLOW` | Path to a .fabro workflow file or .toml task config |
#### Options
| Option | Description |
| --- | --- |
| `--auto-approve` | Auto-approve all human gates |
| `-d, --detach` | Run the workflow in the background and print the run ID |
| `--dry-run` | Execute with simulated LLM backend |
| `--goal <goal>` | Override the workflow goal (available as {{ goal }} in prompts) |
| `--goal-file <goal_file>` | Read the workflow goal from a file |
| `--in-place` | Run directly in the source checkout without git checkpoints |
| `--label <key=value>` | Attach a label to this run (repeatable, format: KEY=VALUE) |
| `--model <model>` | Override default LLM model |
| `--preserve-sandbox` | Keep the sandbox alive after the run finishes (for debugging) |
| `--provider <provider>` | Override default LLM provider |
| `--sandbox <sandbox>` | Sandbox for agent tools<br />Values: `local`, `docker`, `daytona` |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `-I, --input <key=value>` | Override a workflow input value (repeatable, format: KEY=VALUE) |
| `-v, --verbose` | Enable verbose output |
### `fabro discord`
Open the Discord community in the browser
```bash
fabro discord [OPTIONS]
```
### `fabro docs`
Open the docs website in the browser
```bash
fabro docs [OPTIONS]
```
### `fabro doctor`
Check environment and integration health
```bash
fabro doctor [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `-v, --verbose` | Show detailed information for each check |
### `fabro dump`
Export a run's durable state to a directory
```bash
fabro dump [OPTIONS] --output <OUTPUT> <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name |
#### Options
| Option | Description |
| --- | --- |
| `-o, --output <output>` | Output directory (must not exist or be empty) |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro events`
View the event log of a workflow run
```bash
fabro events [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name (most recent run) |
#### Options
| Option | Description |
| --- | --- |
| `-f, --follow` | Follow event output |
| `-p, --pretty` | Formatted colored output with rendered assistant text |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--since <since>` | Events since timestamp or relative (e.g. "42m", "2h", "2026-01-02T13:00:00Z") |
| `-n, --tail <tail>` | Lines from end (default: all) |
### `fabro fork`
Fork a workflow run from an earlier checkpoint into a new run
```bash
fabro fork [OPTIONS] <RUN_ID> [TARGET]
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID (or unambiguous prefix) |
| `TARGET` | Target checkpoint: node name, node@visit, or @ordinal (omit to fork from latest) |
#### Options
| Option | Description |
| --- | --- |
| `--list` | Show the checkpoint timeline instead of forking |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro graph`
Render a workflow graph as SVG
```bash
fabro graph [OPTIONS] <WORKFLOW>
```
#### Arguments
| Name | Description |
| --- | --- |
| `WORKFLOW` | Path to the .fabro workflow file, .toml task config, or project workflow name |
#### Options
| Option | Description |
| --- | --- |
| `-d, --direction <direction>` | Graph layout direction (overrides the DOT file's rankdir)<br />Values: `lr`, `tb` |
| `--format <format>` | Output format<br />Values: `svg`<br />Default: `svg` |
| `-o, --output <output>` | Output file path (defaults to stdout) |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro inspect`
Show detailed information about a workflow run
```bash
fabro inspect [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name (most recent run) |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro install`
Set up the Fabro environment (LLMs, certs, GitHub)
```bash
fabro install [OPTIONS] [COMMAND]
```
#### Options
| Option | Description |
| --- | --- |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
| `--web-url <web_url>` | Base URL for the web UI (used for OAuth callback URLs and generated settings)<br />Default: `http://127.0.0.1:32276` |
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro install github` | Configure GitHub integration (token or GitHub App) |
#### `fabro install github`
Configure GitHub integration (token or GitHub App)
```bash
fabro install github [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--owner <owner>` | GitHub App owner: `personal` or `org:<slug>` (app only, requires --non-interactive) |
| `--strategy <strategy>` | GitHub authentication strategy (requires --non-interactive)<br />Values: `token`, `app` |
### `fabro logs`
View the raw worker tracing log of a workflow run
```bash
fabro logs [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name (most recent run) |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `-n, --tail <tail>` | Lines from end (default: all) |
### `fabro model`
List and test LLM models
```bash
fabro model [OPTIONS] [COMMAND]
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro model list` | List available models |
| `fabro model test` | Test model availability by sending a simple prompt |
#### `fabro model list`
List available models
```bash
fabro model list [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `-p, --provider <provider>` | Filter by provider |
| `-q, --query <query>` | Search for models matching this string |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
#### `fabro model test`
Test model availability by sending a simple prompt
```bash
fabro model test [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--deep` | Run a multi-turn tool-use test (catches reasoning round-trip bugs) |
| `-j, --jobs <jobs>` | Number of model tests to run concurrently in bulk mode<br />Default: `4` |
| `-m, --model <model>` | Test a specific model |
| `-p, --provider <provider>` | Filter by provider |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro pr`
Pull request operations
```bash
fabro pr [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro pr close` | Close a pull request |
| `fabro pr create` | Create a pull request from a completed run |
| `fabro pr merge` | Merge a pull request |
| `fabro pr view` | View pull request details |
#### `fabro pr close`
Close a pull request
```bash
fabro pr close [OPTIONS] <RUN_ID>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID or prefix |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
#### `fabro pr create`
Create a pull request from a completed run
```bash
fabro pr create [OPTIONS] <RUN_ID>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID or prefix |
#### Options
| Option | Description |
| --- | --- |
| `-f, --force` | Create PR even if the run status is not succeeded/partially_succeeded |
| `--model <model>` | LLM model for generating PR description |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
#### `fabro pr merge`
Merge a pull request
```bash
fabro pr merge [OPTIONS] <RUN_ID>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID or prefix |
#### Options
| Option | Description |
| --- | --- |
| `--method <method>` | Merge method: merge, squash, or rebase<br />Values: `merge`, `squash`, `rebase`<br />Default: `squash` |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
#### `fabro pr view`
View pull request details
```bash
fabro pr view [OPTIONS] <RUN_ID>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID or prefix |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro preflight`
Validate run configuration without executing
```bash
fabro preflight [OPTIONS] <WORKFLOW>
```
#### Arguments
| Name | Description |
| --- | --- |
| `WORKFLOW` | Path to a .fabro workflow file or .toml task config |
#### Options
| Option | Description |
| --- | --- |
| `--goal <goal>` | Override the workflow goal (available as {{ goal }} in prompts) |
| `--goal-file <goal_file>` | Read the workflow goal from a file |
| `--model <model>` | Override default LLM model |
| `--provider <provider>` | Override default LLM provider |
| `--sandbox <sandbox>` | Sandbox for agent tools<br />Values: `local`, `docker`, `daytona` |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `-I, --input <key=value>` | Override a workflow input value (repeatable, format: KEY=VALUE) |
| `-v, --verbose` | Enable verbose output |
### `fabro provider`
Provider operations
```bash
fabro provider [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro provider login` | Log in to an LLM provider |
#### `fabro provider login`
Log in to an LLM provider
```bash
fabro provider login [OPTIONS] --provider <PROVIDER>
```
#### Options
| Option | Description |
| --- | --- |
| `--api-key-stdin` | Read an API key from stdin instead of prompting |
| `--provider <provider>` | LLM provider to authenticate with |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro repo`
Repository commands
```bash
fabro repo [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro repo deinit` | Remove .fabro/ project directory |
| `fabro repo init` | Initialize a new project |
#### `fabro repo deinit`
Remove .fabro/ project directory
```bash
fabro repo deinit [OPTIONS]
```
#### `fabro repo init`
Initialize a new project
```bash
fabro repo init [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro resume`
Resume an interrupted workflow run
```bash
fabro resume [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID or unambiguous prefix |
#### Options
| Option | Description |
| --- | --- |
| `-d, --detach` | Run in the background and print the run ID |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro rewind`
Rewind a workflow run to an earlier checkpoint
```bash
fabro rewind [OPTIONS] <RUN_ID> [TARGET]
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID (or unambiguous prefix) |
| `TARGET` | Target checkpoint: node name, node@visit, or @ordinal (omit with --list) |
#### Options
| Option | Description |
| --- | --- |
| `--list` | Show the checkpoint timeline instead of rewinding |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro rm`
Remove one or more workflow runs
```bash
fabro rm [OPTIONS] <RUNS>...
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUNS` | Run IDs or workflow names to remove |
#### Options
| Option | Description |
| --- | --- |
| `-f, --force` | Force removal of active runs |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro run`
Launch a workflow run
```bash
fabro run [OPTIONS] <WORKFLOW>
```
#### Arguments
| Name | Description |
| --- | --- |
| `WORKFLOW` | Path to a .fabro workflow file or .toml task config |
#### Options
| Option | Description |
| --- | --- |
| `--auto-approve` | Auto-approve all human gates |
| `-d, --detach` | Run the workflow in the background and print the run ID |
| `--dry-run` | Execute with simulated LLM backend |
| `--goal <goal>` | Override the workflow goal (available as {{ goal }} in prompts) |
| `--goal-file <goal_file>` | Read the workflow goal from a file |
| `--in-place` | Run directly in the source checkout without git checkpoints |
| `--label <key=value>` | Attach a label to this run (repeatable, format: KEY=VALUE) |
| `--model <model>` | Override default LLM model |
| `--preserve-sandbox` | Keep the sandbox alive after the run finishes (for debugging) |
| `--provider <provider>` | Override default LLM provider |
| `--sandbox <sandbox>` | Sandbox for agent tools<br />Values: `local`, `docker`, `daytona` |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `-I, --input <key=value>` | Override a workflow input value (repeatable, format: KEY=VALUE) |
| `-v, --verbose` | Enable verbose output |
### `fabro sandbox`
Sandbox operations (cp, ssh, preview)
```bash
fabro sandbox [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro sandbox cp` | Copy files to/from a run's sandbox |
| `fabro sandbox preview` | Get a preview URL for a port on a run's sandbox |
| `fabro sandbox ssh` | SSH into a run's sandbox |
#### `fabro sandbox cp`
Copy files to/from a run's sandbox
```bash
fabro sandbox cp [OPTIONS] <SRC> <DST>
```
#### Arguments
| Name | Description |
| --- | --- |
| `SRC` | Source: `<run-id>:<path>` or local path |
| `DST` | Destination: `<run-id>:<path>` or local path |
#### Options
| Option | Description |
| --- | --- |
| `-r, --recursive` | Recurse into directories |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
#### `fabro sandbox preview`
Get a preview URL for a port on a run's sandbox
```bash
fabro sandbox preview [OPTIONS] <RUN> <PORT>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID or prefix |
| `PORT` | Port number |
#### Options
| Option | Description |
| --- | --- |
| `--open` | Open URL in browser (implies --signed) |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--signed` | Generate a signed URL (embeds auth token, no headers needed) |
| `--ttl <ttl>` | Signed URL expiry in seconds (default 3600, requires --signed)<br />Default: `3600` |
#### `fabro sandbox ssh`
SSH into a run's sandbox
```bash
fabro sandbox ssh [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID or prefix |
#### Options
| Option | Description |
| --- | --- |
| `--print` | Print the SSH command instead of connecting |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--ttl <ttl>` | SSH access expiry in minutes (default 60)<br />Default: `60` |
### `fabro secret`
Manage server-owned secrets
```bash
fabro secret [OPTIONS] <COMMAND>
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro secret list` | List secret names |
| `fabro secret rm` | Remove a secret |
| `fabro secret set` | Set a secret value |
#### `fabro secret list`
List secret names
```bash
fabro secret list [OPTIONS]
```
#### `fabro secret rm`
Remove a secret
```bash
fabro secret rm [OPTIONS] <KEY>
```
#### Arguments
| Name | Description |
| --- | --- |
| `KEY` | Name of the secret to remove |
#### `fabro secret set`
Set a secret value
```bash
fabro secret set [OPTIONS] <KEY> [VALUE]
```
#### Arguments
| Name | Description |
| --- | --- |
| `KEY` | Name of the secret |
| `VALUE` | Value to store (omit to enter interactively) |
#### Options
| Option | Description |
| --- | --- |
| `--description <description>` | Optional human-readable description |
| `--type <type>` | Secret storage type<br />Values: `environment`, `file`<br />Default: `environment` |
| `--value-stdin` | Read the secret value from stdin |
### `fabro server`
Server operations
```bash
fabro server [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro server restart` | Stop and restart the HTTP API server |
| `fabro server start` | Start the HTTP API server |
| `fabro server status` | Show server status |
| `fabro server stop` | Stop the HTTP API server |
#### `fabro server restart`
Stop and restart the HTTP API server
```bash
fabro server restart [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--bind <bind>` | Address to bind to (IP or IP:port for TCP, or path containing / for Unix socket) |
| `--config <config>` | Path to server config file (default: ~/.fabro/settings.toml) |
| `--foreground` | Run in the foreground instead of daemonizing |
| `--max-concurrent-runs <max_concurrent_runs>` | Maximum number of concurrent run executions |
| `--model <model>` | Override default LLM model |
| `--no-web` | Disable the embedded web UI, browser auth routes, and web-only helper endpoints |
| `--provider <provider>` | Override default LLM provider |
| `--sandbox <sandbox>` | Sandbox for agent tools |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
| `--timeout <timeout>` | Seconds to wait for graceful shutdown before SIGKILL<br />Default: `10` |
| `--watch-web` | Run `bun run dev` in apps/fabro-web to watch/recompile web assets (debug only) |
| `--web` | Enable the embedded web UI and browser auth routes |
#### `fabro server start`
Start the HTTP API server
```bash
fabro server start [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--bind <bind>` | Address to bind to (IP or IP:port for TCP, or path containing / for Unix socket) |
| `--config <config>` | Path to server config file (default: ~/.fabro/settings.toml) |
| `--foreground` | Run in the foreground instead of daemonizing |
| `--max-concurrent-runs <max_concurrent_runs>` | Maximum number of concurrent run executions |
| `--model <model>` | Override default LLM model |
| `--no-web` | Disable the embedded web UI, browser auth routes, and web-only helper endpoints |
| `--provider <provider>` | Override default LLM provider |
| `--sandbox <sandbox>` | Sandbox for agent tools |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
| `--watch-web` | Run `bun run dev` in apps/fabro-web to watch/recompile web assets (debug only) |
| `--web` | Enable the embedded web UI and browser auth routes |
#### `fabro server status`
Show server status
```bash
fabro server status [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--json` | Output as JSON |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
#### `fabro server stop`
Stop the HTTP API server
```bash
fabro server stop [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
| `--timeout <timeout>` | Seconds to wait for graceful shutdown before SIGKILL<br />Default: `10` |
### `fabro settings`
Inspect effective settings
```bash
fabro settings [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro start`
Start a created workflow run on the server
```bash
fabro start [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro steer`
Steer a running agent mid-execution
```bash
fabro steer [OPTIONS] <RUN> [TEXT]
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix to steer |
| `TEXT` | Steer message text (omit when --text-stdin is used) |
#### Options
| Option | Description |
| --- | --- |
| `--interrupt` | Cancel the in-flight LLM stream / tool calls and deliver the message as the next user turn (default: append to the steering queue) |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--text-stdin` | Read steer text from stdin instead of a positional arg |
### `fabro system`
System maintenance commands
```bash
fabro system [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro system df` | Show disk usage |
| `fabro system events` | Stream run events from the server |
| `fabro system info` | Show server runtime information |
| `fabro system prune` | Delete old workflow runs |
| `fabro system repair` | Inspect and repair durable server data |
#### `fabro system df`
Show disk usage
```bash
fabro system df [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
| `-v, --verbose` | Show per-run breakdown |
#### `fabro system events`
Stream run events from the server
```bash
fabro system events [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--run-id <run_ids>` | Filter by run ID (repeatable) |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
#### `fabro system info`
Show server runtime information
```bash
fabro system info [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
#### `fabro system prune`
Delete old workflow runs
```bash
fabro system prune [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--before <before>` | Only include runs started before this date (YYYY-MM-DD prefix match) |
| `--label <key=value>` | Filter by label (KEY=VALUE, repeatable, AND semantics) |
| `--older-than <duration>` | Only prune runs older than this duration (e.g. 24h, 7d). Default: 24h when no explicit filters are set |
| `--orphans` | Include orphan directories (no matching durable run) |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
| `--workflow <workflow>` | Filter by workflow name (substring match) |
| `--yes` | Actually delete (default is dry-run) |
#### `fabro system repair`
Inspect and repair durable server data
```bash
fabro system repair [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro system repair runs` | List runs that cannot be loaded from durable storage |
##### `fabro system repair runs`
List runs that cannot be loaded from durable storage
```bash
fabro system repair runs [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--storage-dir <storage_dir>` | Local storage directory (default: ~/.fabro/storage) |
### `fabro unarchive`
Restore archived runs to their prior terminal status
```bash
fabro unarchive [OPTIONS] <RUNS>...
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUNS` | Run IDs or workflow names to unarchive |
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro uninstall`
Uninstall Fabro from this machine
```bash
fabro uninstall [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--yes` | Skip confirmation prompt |
### `fabro upgrade`
Upgrade fabro to the latest version
```bash
fabro upgrade [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--dry-run` | Preview what would happen without making changes |
| `--force` | Upgrade even if already on the target version |
| `--prerelease` | Include prereleases (alpha, beta, rc) when selecting the latest version |
### `fabro validate`
Validate a workflow
```bash
fabro validate [OPTIONS] <WORKFLOW>
```
#### Arguments
| Name | Description |
| --- | --- |
| `WORKFLOW` | Path to the .fabro workflow file |
### `fabro version`
Show client and server version information
```bash
fabro version [OPTIONS]
```
#### Options
| Option | Description |
| --- | --- |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro wait`
Block until a workflow run completes
```bash
fabro wait [OPTIONS] <RUN>
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name (most recent run) |
#### Options
| Option | Description |
| --- | --- |
| `--interval <ms>` | Poll interval in milliseconds<br />Default: `1000` |
| `--server <server>` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--timeout <seconds>` | Maximum time to wait in seconds |
### `fabro workflow`
Workflow operations
```bash
fabro workflow [OPTIONS] <COMMAND>
```
#### Subcommands
| Command | Description |
| --- | --- |
| `fabro workflow create` | Create a new workflow |
| `fabro workflow list` | List available workflows |
#### `fabro workflow create`
Create a new workflow
```bash
fabro workflow create [OPTIONS] <NAME>
```
#### Arguments
| Name | Description |
| --- | --- |
| `NAME` | Name of the workflow |
#### Options
| Option | Description |
| --- | --- |
| `-g, --goal <goal>` | Goal description for the workflow |
#### `fabro workflow list`
List available workflows
```bash
fabro workflow list [OPTIONS]
```
{/* /generated:cli */}