---
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 approve` | Approve pending workflow runs.
Controls permission to start a run. For human interview gates during execution, use the questions API. |
| `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 ask` | Ask Fabro a read-only question about a run |
| `fabro attach` | Attach to a running or finished workflow run |
| `fabro auth` | Manage CLI authentication state |
| `fabro completion` | Generate shell completions |
| `fabro create` | Register a workflow version and create a submitted run |
| `fabro deny` | Deny pending workflow runs.
Controls permission to start a run. For human interview gates during execution, use the questions API. |
| `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 mcp` | Model Context Protocol server |
| `fabro model` | List and test LLM models |
| `fabro parent` | Manage run parent links |
| `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` | Register a workflow version, create a run, and start it |
| `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 variable` | Manage server-owned variables |
| `fabro version` | Show client and server version information |
| `fabro wait` | Block until a workflow run completes |
| `fabro workflow` | Workflow operations |
### `fabro approve`
Approve pending workflow runs.
Controls permission to start a run. For human interview gates during execution, use the questions API.
```bash
fabro approve [OPTIONS] ...
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUNS` | Run IDs or workflow names to approve |
#### Options
| Option | Description |
| --- | --- |
| `--server ` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro archive`
Mark terminal runs as archived (reviewed, no further action needed). Archived runs are hidden from default listings
```bash
fabro archive [OPTIONS] ...
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUNS` | Run IDs or workflow names to archive |
#### Options
| Option | Description |
| --- | --- |
| `--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]
```
#### 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] [DEST]
```
#### Arguments
| Name | Description |
| --- | --- |
| `SOURCE` | Source: RUN_ID (all artifacts) or RUN_ID:path (specific artifact) |
| `DEST` | Destination directory (defaults to current directory) Default: `.` |
#### Options
| Option | Description |
| --- | --- |
| `--node ` | Filter to artifacts from a specific node |
| `--retry ` | Filter to artifacts from a specific retry attempt |
| `--server ` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--stage ` | Filter to artifacts from a specific stage visit (node@visit) |
| `--tree` | Preserve node[/visit_{N}]/retry_{N}/ directory structure |
#### `fabro artifact list`
List artifacts for a workflow run
```bash
fabro artifact list [OPTIONS]
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN_ID` | Run ID (or prefix) |
#### Options
| Option | Description |
| --- | --- |
| `--node ` | Filter to artifacts from a specific node |
| `--retry ` | Filter to artifacts from a specific retry attempt |
| `--server ` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--stage ` | Filter to artifacts from a specific stage visit (node@visit) |
### `fabro ask`
Ask Fabro a read-only question about a run
```bash
fabro ask [OPTIONS] --prompt
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name |
#### Options
| Option | Description |
| --- | --- |
| `--model ` | Optional model name |
| `-p, --prompt ` | Question to ask |
| `--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]
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUN` | Run ID prefix or workflow name |
#### Options
| Option | Description |
| --- | --- |
| `--server ` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro auth`
Manage CLI authentication state
```bash
fabro auth [OPTIONS]
```
#### 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 ` | Log in with a dev-token instead of browser OAuth |
| `--no-browser` | Print the browser URL instead of opening it automatically |
| `--server ` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--timeout ` | Timeout in seconds waiting for the browser flow to complete 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 ` | 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 ` | Fabro server target: http(s) URL or absolute Unix socket path |
### `fabro completion`
Generate shell completions
```bash
fabro completion [OPTIONS]
```
#### Arguments
| Name | Description |
| --- | --- |
| `SHELL` | Shell to generate completions for Values: `bash`, `elvish`, `fish`, `powershell`, `zsh` |
### `fabro create`
Register a workflow version and create a submitted run
```bash
fabro create [OPTIONS]
```
#### Arguments
| Name | Description |
| --- | --- |
| `WORKFLOW` | Workflow name, path, or OWNER/REPO[@REF]:WORKFLOW |
#### 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` | Simulate execution; workflow source may still be fetched and uploaded |
| `--environment ` | Named environment for agent tools |
| `--goal ` | Override the workflow goal (available as {{ goal }} in prompts) |
| `--goal-file ` | Read a per-run goal value from a local file |
| `--label ` | Attach a label to this run (repeatable, format: KEY=VALUE) |
| `--model ` | Override default LLM model |
| `--parent ` | Link this run to an existing orchestration parent run |
| `--preserve-sandbox` | Keep the sandbox alive after the run finishes (for debugging) |
| `--provider ` | Override default LLM provider |
| `--server ` | Fabro server target: http(s) URL or absolute Unix socket path |
| `--target-branch ` | Target working branch (default: remote default branch), pinned to its observed commit |
| `--target-from ` | Observe this target directory instead of cwd; Folder targets require server filesystem access |
| `--target-repo ` | Target GitHub OWNER/REPO; the execution sandbox still needs its own clone credentials |
| `--target ` | Target GitHub repository and optional working branch |
| `-I, --input ` | Override a workflow input value (repeatable, format: KEY=VALUE) |
| `-v, --verbose` | Enable verbose output |
| `--workflow-ref ` | Workflow branch, tag, HEAD (default), or full commit SHA; qualify ambiguous names |
| `--workflow-repo ` | Acquire workflow source locally from a GitHub OWNER/REPO using native Git credentials |
### `fabro deny`
Deny pending workflow runs.
Controls permission to start a run. For human interview gates during execution, use the questions API.
```bash
fabro deny [OPTIONS] ...
```
#### Arguments
| Name | Description |
| --- | --- |
| `RUNS` | Run IDs or workflow names to deny |
#### Options
| Option | Description |
| --- | --- |
| `--reason ` | Reason for denying execution |
| `--server ` | Fabro server target: http(s) URL or absolute Unix socket path |
### `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 ` | 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