~/.fabro/settings.toml. The file is optional. If it does not exist, Fabro falls back to built-in defaults.
The CLI and server each read the sections relevant to their own process. On a remote deployment, the CLI machine and the server machine each have their own settings.toml.
Fabro only reads
settings.toml. Older cli.toml, user.toml, and server.toml filenames are no longer part of the supported config surface.File location
The default path is~/.fabro/settings.toml.
Use fabro server start --config /path/to/settings.toml if the server should read a different file.
Schema version
Every Fabro config file must declare its schema version with a top-level_version key:
settings.toml
_version are treated as version 1. The legacy top-level version key is no longer accepted and raises a targeted rename hint.
Who reads what
settings.toml uses the same schema as .fabro/project.toml and workflow.toml, but each process only reads the fields it understands. The top-level schema is strictly namespaced — the only allowed domains are [project], [workflow], [run], [llm], [cli], and [server].
[cli.*] and [server.*] stanzas are owner-specific: they are only consumed from ~/.fabro/settings.toml (plus process-local flags and env overrides). The same stanzas in .fabro/project.toml or workflow.toml remain schema-valid but runtime-inert.
fabro run and fabro create do not copy the CLI machine’s [run] or
[environments] tables into an intent request. They warn with only the file
path and affected key names when those tables are present. Put workflow-owned
behavior in workflow.toml and configure placement in environments managed by
the target server. The server may still use its own active settings.toml
independently.
See Server Configuration for the server-owned sections.
Precedence
For CLI-created workflow runs, sparse CLI flags override immutableworkflow.toml behavior. The CLI does not layer local project or machine run
defaults into the request. A target server resolves its own server-side policy
and environment catalog during admission.
Owner-specific domains ([cli.*], [server.*]) use a narrower trust boundary — only CLI flags, env overrides, ~/.fabro/settings.toml, and built-in defaults apply.
Full example
settings.toml
The
[run] schemas below remain valid for a server’s own active configuration,
but they are not CLI-side defaults for fabro run or fabro create. Put
automatic pull-request settings and other workflow-owned behavior in
workflow.toml; there is no compatibility request field or CLI global default.[cli.target]
Connection info for commands that target a remote Fabro server.
settings.toml
[llm]
The [llm] table is a lithos-llm catalog
overlay. Fabro builds its model catalog from two layers: the lithos built-in
providers and models, and this table. Later layers win; tables merge key by
key and every other value replaces. Fabro does not interpret the table itself.
lithos validates it when the catalog is built, and rejects unknown provider or
model fields.
Several built-in providers ship with enabled = false. Turn one on by setting
enabled = true on its provider table.
settings.toml
OPENAI_API_KEY for
openai, MODAL_TOKEN_ID and MODAL_TOKEN_SECRET for modal, and
<PROVIDER>_API_KEY (upper case, - and . as _) for a provider you
define, so the gateway above reads PROXY_API_KEY. Store it in the server
vault with fabro secret set, or export it for fabro exec and SDK use.
[llm.providers.<id>]
Define or override an LLM provider. The keys are the lithos provider record.
[llm.providers.<id>.metadata.agent]
Which coding harness the provider’s models expect. Pebble reads the same
namespace. Every key is optional; a model row overrides the provider.
[llm.providers.<provider>.models.<model-id>]
Define or override one provider’s offering of a model. The table key is the
model id Fabro users reference. An offering’s identity is the pair
(provider, model id), so different providers may use the same id and
aliases. api_model is the string sent to the provider and defaults to the id.
[llm.providers.<provider>.models.<model-id>.metadata.agent]
The same keys as the provider-level metadata.agent table, applied to one
model. profile here is how a Kimi or GPT-5.6 model keeps its own harness on
a gateway whose other models use the provider default.
[cli.updates]
[cli.updates] — upgrade check toggle
settings.toml
[cli.output]
[cli.output] — generic CLI output defaults
settings.toml
[cli.exec]
[cli.exec] — fabro exec defaults
settings.toml
[cli.exec.model]
settings.toml
[cli.exec.agent]
settings.toml
[run.model]
[run.model] — provider-neutral default model selection
settings.toml
[cli.logging]
[cli.logging] — process-owned logging configuration for the CLI
settings.toml
[run.git.author]
settings.toml
[run.pull_request]
[run.pull_request] — provider-neutral PR behavior
settings.toml
[run.agent]
[run.agent] — agent knobs only (Fabro tools and MCPs)
settings.toml
[run.agent.mcps.<name>]
Configure MCP servers for workflow agents. For fabro exec-only MCPs, use [cli.exec.agent.mcps.<name>] with the same shape.
settings.toml
See MCP for transport-specific examples.