Skip to main content
Fabro loads CLI defaults from ~/.fabro/cli.toml so you don’t have to pass common flags every time. The file is optional — if it doesn’t exist, built-in defaults are used.

File location

The default path is ~/.fabro/cli.toml. Fabro silently skips loading if the file is missing.

Precedence

CLI flags always take the highest priority:
  1. CLI flags — always win
  2. cli.toml — used when no flag is provided
  3. Built-in defaults — used when neither flag nor config is set

Full example

cli.toml
verbose = true
mode = "server"

[server]
base_url = "https://fabro.example.com:3000"

[server.tls]
cert = "~/.fabro/tls/client.crt"
key = "~/.fabro/tls/client.key"
ca = "~/.fabro/tls/ca.crt"

[exec]
provider = "anthropic"
model = "claude-opus-4-6"
permissions = "read-write"
output_format = "text"

[llm]
model = "claude-sonnet-4-5"

[log]
level = "info"

[git.author]
name = "fabro-bot"
email = "fabro-bot@company.com"

[pull_request]
enabled = true

[mcp_servers.filesystem]
type = "stdio"
command = ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
startup_timeout_secs = 15
tool_timeout_secs = 90

[mcp_servers.filesystem.env]
NODE_ENV = "production"

[mcp_servers.sentry]
type = "http"
url = "https://mcp.sentry.dev/mcp"

[mcp_servers.sentry.headers]
Authorization = "Bearer sk-xxx"
All fields are optional. You can include just the sections and keys you want to override.

verbose

Enable verbose output by default for fabro run start and fabro doctor, without passing -v every time.
ValueDescription
trueVerbose output on by default
falseNormal output (default)
The -v / --verbose CLI flag always takes effect regardless of this setting.

[exec] section

Defaults for fabro exec sessions.
KeyDescriptionValuesDefault
providerLLM provider"anthropic", "openai", "gemini", etc."anthropic"
modelModel nameAny model ID from fabro model listPer provider
permissionsTool permission level"read-only", "read-write", "full""read-write"
output_formatOutput format"text", "json""text"

Permission levels

  • read-only — auto-approves 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 interactively prompted (if a TTY is present) or denied (with --auto-approve).

Output formats

  • text — human-readable terminal output
  • json — NDJSON event stream

[llm] section

Defaults for fabro llm prompt and fabro llm chat.
KeyDescriptionValuesDefault
modelModel nameAny model ID from fabro model listPer provider
The [llm] section only sets the default model. Use [exec] to configure provider, permissions, and output format for fabro exec.

[log] section

Configure the default log level. Precedence: FABRO_LOG env var > --debug flag > [log] level > "info".
KeyDescriptionValuesDefault
levelLog level"error", "warn", "info", "debug", "trace""info"

[git] section

[git.author]

Customize the git author identity used for checkpoint commits. Overrides the server default when set.
KeyDescriptionDefault
nameGit author name"fabro"
emailGit author email"fabro@local"

mode

Controls whether commands run in-process or delegate to a running Fabro API server.
ValueDescription
"standalone"Execute locally (default)
"server"Delegate to an Fabro API server
Override with the --mode CLI flag:
fabro --mode server models list

[server] section

Configuration for server mode.
KeyDescriptionDefault
base_urlServer URL"http://localhost:3000"
Override the URL with the --server-url CLI flag:
fabro --mode server --server-url https://fabro.example.com:3000 models list

[server.tls] section

Optional mTLS configuration for authenticating with the server. When present, the CLI presents a client certificate during the TLS handshake.
KeyDescription
certPath to client certificate PEM file
keyPath to client private key PEM file
caPath to CA certificate PEM file (to verify the server)
Paths support ~/ expansion. Example:
cli.toml
[server.tls]
cert = "~/.fabro/tls/client.crt"
key = "~/.fabro/tls/client.key"
ca = "~/.fabro/tls/ca.crt"

[pull_request]

Enable auto-PR globally so workflows open a GitHub pull request on successful completion — even when running with a .fabro file instead of a run.toml.
cli.toml
[pull_request]
enabled = true
KeyDescriptionDefault
enabledAutomatically create a PR after successful runsfalse
Precedence: run.toml > fabro.toml (project config) > cli.toml > server.toml > built-in default (false).

[mcp_servers] section

Configure MCP servers to connect to during fabro exec sessions. Each server is a named TOML table under [mcp_servers]. MCP servers can also be configured per-workflow in run config TOML.

Stdio transport

Spawn a local process and communicate over stdin/stdout:
cli.toml
[mcp_servers.filesystem]
type = "stdio"
command = ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
startup_timeout_secs = 15
tool_timeout_secs = 90

[mcp_servers.filesystem.env]
NODE_ENV = "production"
KeyDescriptionDefault
typeMust be "stdio"
commandArray: executable + arguments
envAdditional environment variables for the child process{}
startup_timeout_secsMax seconds for the MCP handshake10
tool_timeout_secsMax seconds for a single tool call60

HTTP transport

Connect to a remote MCP server over Streamable HTTP:
cli.toml
[mcp_servers.sentry]
type = "http"
url = "https://mcp.sentry.dev/mcp"

[mcp_servers.sentry.headers]
Authorization = "Bearer sk-xxx"
KeyDescriptionDefault
typeMust be "http"
urlThe MCP server endpoint URL
headersOptional HTTP headers (e.g., for authentication){}
startup_timeout_secsMax seconds for the MCP handshake10
tool_timeout_secsMax seconds for a single tool call60

Sandbox transport

Run an MCP server inside the workflow’s sandbox and connect via preview URL. Only available with remote sandbox providers (Daytona) that support port previews. Typically configured in run config TOML rather than cli.toml.
run.toml
[mcp_servers.playwright]
type = "sandbox"
command = ["npx", "@playwright/mcp@latest", "--port", "3100", "--headless"]
port = 3100
startup_timeout_secs = 60
tool_timeout_secs = 120
KeyDescriptionDefault
typeMust be "sandbox"
commandArray: the command to run inside the sandbox
portPort the server listens on inside the sandbox
envAdditional environment variables for the server process{}
startup_timeout_secsMax seconds for startup + MCP handshake10
tool_timeout_secsMax seconds for a single tool call60
See MCP — Sandbox transport for how Fabro launches and connects to sandbox MCP servers.