Skip to main content

Global options

These flags apply to all subcommands:
FlagDescription
--debugEnable DEBUG-level logging (default is INFO)
-h, --helpPrint help
-V, --versionPrint version
Fabro loads environment variables from ~/.fabro/.env.

Configuration

CLI defaults can be set in ~/.fabro/cli.toml so you don’t have to pass common flags every time:
cli.toml
[exec]
provider = "anthropic"
model = "claude-opus-4-6"
permissions = "read-write"
output_format = "text"

[llm]
model = "claude-sonnet-4-5"
CLI flags always override cli.toml values, which override hardcoded defaults.

fabro run

Launch a workflow from a .fabro workflow file or .toml task config.
fabro run <WORKFLOW>
fabro run run.toml
fabro run --run-branch arc/run/abc123
Argument / FlagDescription
<WORKFLOW>Path to a .fabro workflow file or .toml task config. Not required when using --run-branch.
--run-dir <DIR>Run output directory
--dry-runExecute with a simulated LLM backend
--preflightValidate run configuration without executing
--auto-approveAuto-approve all human gates
--resume <FILE>Resume from a checkpoint file
--run-branch <BRANCH>Resume from a git run branch (reads checkpoint and graph from metadata branch)
--model <MODEL>Override default LLM model
--provider <PROVIDER>Override default LLM provider
-v, --verboseEnable verbose output
--sandbox <SANDBOX>Sandbox for agent tools: local, docker, daytona, ssh, or exe
--label <KEY=VALUE>Attach a label to this run (repeatable)
--goal <GOAL>Override the workflow goal (exposed as $goal in prompts)
--goal-file <FILE>Read the goal from a file instead of inline text
--no-retroSkip retro generation after the run
--sshCreate SSH access to the sandbox (Daytona or exe.dev) and print the connection command
--preserve-sandboxKeep the sandbox alive after the run finishes (for debugging)
--preflight conflicts with --resume, --run-branch, and --dry-run. --run-branch conflicts with --resume.

fabro ps

List workflow runs stored in ~/.fabro/runs.
fabro ps
fabro ps --workflow deploy --label env=prod
fabro ps --json
FlagDescription
--before <DATE>Only show runs started before this date (YYYY-MM-DD prefix match)
--workflow <NAME>Filter by workflow name (substring match)
--label <KEY=VALUE>Filter by label (repeatable, AND semantics)
--orphansInclude orphan directories (no manifest.json)
--jsonOutput as JSON

fabro system prune

Delete old workflow runs. Dry-run by default — pass --yes to actually delete.
fabro system prune --before 2026-01-01
fabro system prune --before 2026-01-01 --yes
fabro system prune --orphans --yes
FlagDescription
--before <DATE>Only prune runs started before this date (YYYY-MM-DD prefix match)
--workflow <NAME>Filter by workflow name (substring match)
--label <KEY=VALUE>Filter by label (repeatable, AND semantics)
--orphansInclude orphan directories (no manifest.json)
--yesActually delete (default is dry-run)

fabro exec

Run an agentic coding session. The agent operates in the current directory using file, search, and shell tools.
fabro exec "Add input validation to the signup form"
fabro exec "Fix the failing test" --provider openai --model gpt-5.2-codex
fabro exec "Refactor the auth module" --permissions full --auto-approve
Argument / FlagDescriptionDefault
<PROMPT>Task prompt (required)
--provider <PROVIDER>LLM provideranthropic
--model <MODEL>Model namePer provider (see below)
--permissions <LEVEL>Permission level: read-only, read-write, or fullread-write
--auto-approveSkip interactive prompts; deny tools outside permission level
--debugPrint LLM request/response debug info to stderr
--verbosePrint full LLM request/response JSON to stderr
--skills-dir <DIR>Directory containing skill files (overrides default discovery)
--output-format <FORMAT>Output format: text (human-readable) or json (NDJSON event stream)text
--mode <MODE>standalone (default) or server — in server mode, routes through the Fabro API’s /completions endpointstandalone
--server-url <URL>Fabro API server URL (overrides server.base_url from cli.toml)
Permission levels control which tools are auto-approved: read-only allows read tools (read_file, grep, glob, list_dir) and subagent tools; read-write adds write tools (write_file, edit_file, apply_patch); full allows all tools including shell commands. Tools outside the permission level are either interactively prompted (if a TTY is present) or denied (with --auto-approve). See default models by provider.

fabro llm prompt

Send a one-shot prompt to an LLM. Accepts a prompt as an argument, via stdin, or both (stdin is prepended).
fabro llm prompt "Explain quicksort in one paragraph"
echo "Summarize this:" | fabro llm prompt
fabro llm prompt "Translate to French" -m claude-sonnet-4-5 -o temperature=0.3
fabro llm prompt -S '{"type":"object","properties":{"name":{"type":"string"}}}' "Extract the name from: John Smith"
Argument / FlagDescription
[PROMPT]The prompt text (also accepts stdin)
-m, --model <MODEL>Model to use
-s, --system <SYSTEM>System prompt
--no-streamDo not stream output
-u, --usageShow token usage
-S, --schema <SCHEMA>JSON schema for structured output (inline JSON string)
-o, --option <KEY=VALUE>Generation options: temperature, max_tokens, top_p, or provider-specific keys

fabro llm chat

Start an interactive multi-turn chat session. In server mode, the session is backed by the Fabro server’s session endpoints.
fabro llm chat
fabro llm chat -m claude-opus-4-6 -s "You are a helpful coding assistant"
fabro llm chat --mode server
FlagDescription
-m, --model <MODEL>Model to use
-s, --system <SYSTEM>System prompt
--mode <MODE>standalone (default) or server — in server mode, routes through the Fabro API

fabro model list

List available LLM models from the built-in catalog. Running fabro model with no subcommand also lists models.
fabro model list
fabro model list -p anthropic
fabro model list -q sonnet
fabro model list --mode server
FlagDescription
-p, --provider <PROVIDER>Filter by provider
-q, --query <QUERY>Search for models matching this string (checks ID, display name, and aliases)
--mode <MODE>standalone (default) or server — in server mode, fetches the catalog from the Fabro API

fabro model test

Test model availability by sending a simple prompt to each model and reporting the result.
fabro model test
fabro model test -p anthropic
fabro model test -m claude-sonnet-4-5
FlagDescription
-p, --provider <PROVIDER>Filter by provider
-m, --model <MODEL>Test a specific model

fabro serve

Start the HTTP API server that exposes the REST API for launching and managing workflow runs.
fabro serve
fabro serve --port 8080 --host 0.0.0.0
fabro serve --sandbox daytona --max-concurrent-runs 4
FlagDescriptionDefault
--port <PORT>Port to listen on3000
--host <HOST>Host address to bind to127.0.0.1
--model <MODEL>Override default LLM model
--provider <PROVIDER>Override default LLM provider
--dry-runExecute with simulated LLM backend
--sandbox <SANDBOX>Sandbox for agent tools: local, docker, daytona, ssh, or exe
--max-concurrent-runs <N>Maximum number of concurrent run executions
--config <PATH>Path to server config file~/.fabro/server.toml
Demo mode is per-request: send the X-Fabro-Demo: 1 header to get static demo data with auth disabled. If no LLM provider API keys are configured, the server automatically falls back to dry-run mode.

fabro cp

Copy files between a run’s sandbox and the local filesystem. The run must have a persisted sandbox record (Daytona, exe.dev, or a preserved local/Docker sandbox).
fabro cp <run-id>:/path/in/sandbox ./local-dir     # download
fabro cp ./local-file <run-id>:/path/in/sandbox     # upload
fabro cp -r <run-id>:/output ./results              # recursive download
Argument / FlagDescription
<SRC>Source: <run-id>:<path> for sandbox, or a local path
<DST>Destination: <run-id>:<path> for sandbox, or a local path
-r, --recursiveRecurse into directories
Run IDs support prefix matching — you can use the first few characters instead of the full ID.

fabro pr

Manage GitHub pull requests created by workflow runs. Requires a GitHub App to be configured.

fabro pr create

Create a GitHub pull request from a completed workflow run. Uses the run’s persisted manifest, conclusion, and diff.
fabro pr create <run-id>
fabro pr create <run-id> --model claude-opus-4-6
Argument / FlagDescription
<RUN_ID>Run ID or prefix (required)
--model <MODEL>LLM model for generating the PR description
The run must have completed successfully (or with partial success) and have a final.patch with changes.

fabro pr list

List all pull requests created by workflow runs. Shows PR number, title, status, and the associated run ID.
fabro pr list
fabro pr list --all
FlagDescription
--allInclude closed and merged PRs (default: open only)

fabro pr view

Show details of a pull request from a specific run.
fabro pr view <run-id>
ArgumentDescription
<RUN_ID>Run ID or prefix (required)

fabro pr merge

Merge a pull request from a specific run.
fabro pr merge <run-id>
fabro pr merge <run-id> --method rebase
Argument / FlagDescription
<RUN_ID>Run ID or prefix (required)
--method <METHOD>Merge method: squash (default), merge, or rebase

fabro pr close

Close a pull request from a specific run without merging.
fabro pr close <run-id>
ArgumentDescription
<RUN_ID>Run ID or prefix (required)

fabro system df

Show disk usage of Fabro’s data directory, including run logs, worktrees, server logs, and databases.
fabro system df
fabro system df -v
FlagDescription
-v, --verboseShow per-run breakdown

fabro graph

Render a workflow DOT graph as SVG or PNG. Requires Graphviz (dot) to be installed.
fabro graph workflow.fabro
fabro graph workflow.fabro --format png -o diagram.png
fabro graph run.toml --format svg
Argument / FlagDescription
<WORKFLOW>Path to a .fabro workflow file or .toml run config (required)
--format <FORMAT>Output format: svg (default) or png
-o, --output <FILE>Output file path. Defaults to stdout.

fabro skill install

Install the built-in fabro-create-workflow skill for AI assistants (Claude Code, Codex). The skill teaches AI assistants Fabro’s DOT syntax, node types, and run configuration format.
# Install into the current project (.claude/skills/ or .agents/skills/)
fabro skill install --for project --dir claude

# Install for all projects (user-level, ~/.claude/skills/)
fabro skill install --for user --dir claude
FlagDescription
--for <SCOPE>user (default) — installs to ~/<dir>/skills/. project — installs to ./<dir>/skills/.
--dir <DIR>Directory convention: claude (.claude/skills/) or agents (.agents/skills/). Required.
--forceOverwrite an existing installation without prompting.

fabro validate

Validate a workflow file without executing it. Reports errors and warnings. Accepts both .fabro workflow files and .toml run configs.
fabro validate workflow.fabro
fabro validate run.toml
ArgumentDescription
<WORKFLOW>Path to a .fabro workflow file or .toml run config (required)

fabro parse

Parse a DOT file and print its AST as JSON. Useful for debugging workflow definitions.
fabro parse workflow.fabro
ArgumentDescription
<WORKFLOW>Path to the .fabro workflow file (required)

fabro init

Initialize a new Fabro project in the current git repository. Creates an fabro.toml project config and a sample hello workflow.
fabro init
The command must be run inside a git repository. It creates:
  • fabro.toml — project configuration with comments and a link to docs
  • fabro/workflows/hello/workflow.fabro — a simple greeting workflow
  • fabro/workflows/hello/workflow.toml — run config for the hello workflow

fabro diff

Show the diff from a workflow run. Displays the final.patch for completed runs, or connects to the sandbox for a live diff from in-progress runs.
fabro diff <run-id>
fabro diff <run-id> --node work
fabro diff <run-id> --stat
Argument / FlagDescription
<RUN>Run ID or prefix (required)
--node <NODE>Show diff for a specific node instead of the full run
--statShow diffstat instead of full patch (live diffs only)
--shortstatShow only files-changed/insertions/deletions summary (live diffs only)
Output is colorized when writing to a terminal.

fabro ssh

SSH into a Daytona sandbox from a completed or in-progress run. Creates temporary SSH credentials and connects directly, or prints the command with --print.
fabro ssh <run-id>
fabro ssh <run-id> --print
fabro ssh <run-id> --ttl 120
Argument / FlagDescription
<RUN>Run ID or prefix (required)
--ttl <MINUTES>SSH credential expiry in minutes (default: 60)
--printPrint the SSH command instead of connecting
See SSH Access for more details on SSH workflows.

fabro preview

Generate a preview URL for a port exposed by a Daytona sandbox. Useful for accessing web servers, dev tools, or APIs running inside the sandbox.
fabro preview <run-id> <port>
fabro preview <run-id> 3000 --signed
fabro preview <run-id> 3000 --open
Argument / FlagDescription
<RUN>Run ID or prefix (required)
<PORT>Port number to preview (required)
--signedGenerate a signed URL (self-contained, no headers needed)
--ttl <SECONDS>Signed URL expiry in seconds (default: 3600, requires --signed)
--openOpen the URL in a browser (implies --signed)
Without --signed, the command prints the URL, token, and a curl example. See Preview for more details.

fabro doctor

Check environment and integration health. Verifies system dependencies, API keys, and optional services. Probes live services (LLM providers, sandbox, GitHub App) by default.
fabro doctor
fabro doctor -v
fabro doctor --dry-run
FlagDescription
-v, --verboseShow detailed information for each check
--dry-runSkip live service probes (LLM, sandbox, API, web, Brave Search)

fabro install

Interactive setup wizard that walks you through configuring API keys and validating your environment. Runs fabro doctor with live probes after setup to validate the configuration.
fabro install