~/.config/graph/config.toml(global)./.graph/config.toml(project)- Environment variables (
GRAPH_STORAGE,GRAPH_LOG) - CLI flags
${VAR} in any string value resolves from the environment at load time. An unset variable never silently becomes an empty string — but when it errors depends on where it sits:
- Inside
[providers.*]or[mcp.*]the error is deferred to the moment that provider or server is actually used: the value keeps its literal${VAR}text, everything that doesn’t need the secret (plan authoring, listing,graph mcp serve, key-free plans) keeps working, and the first call that does need it fails naming the variable and the config path that references it. - Anywhere else (paths, prompts, settings) an unset variable still fails the load immediately — a
data_dircarrying literal${VAR}text would be silently wrong everywhere.
[settings]
[providers.*]
bedrock roadmap status — is covered in Models & providers.
[models] — per-role assignment
Each pipeline role resolves to a model, falling back to default:
Where each role fires, and the usual cost setup, are in Models & providers.
fallbacks — provider failover
Any model entry (a role or a named model) can carry an ordered list of failover candidates, used when its provider is having an outage:
temperature optionally overrides. Every referenced provider must exist under [providers] (checked at startup). When failover triggers, what carries over, and where fallbacks apply are in Models & providers.
[models.named] — named models
Beyond the fixed roles, any number of named models — referenceable wherever a model name is accepted: a prompt tool’s model field, or builtin__infer’s model input.
description is a planner-facing routing signal, and names resolve in exactly three places — the full story, including the no-shadowing and no-silent-fallback rules, is in Models & providers.
[mcp.*]
See MCP servers for full detail.
[plans] and [tools]
packs enables the opt-in built-in tool packs — tool definitions that ship inside the binary, served under the builtin__ namespace. The llm and data packs are always on; packs adds the rest (github, slack).
[storage]
[user]
Injected into the agent’s and planner’s context:
[prompts]
System-prompt overrides. Each field replaces the built-in text wholesale; leave a field unset (or delete it) to keep the default. For additive context, use [user].context instead.
graph config init writes this section out pre-filled with the built-in defaults, so the usual starting point is editing those in place. A field left in the file pins that prompt at the written text — delete it to track the shipped default across releases.
workbench override is the agent’s only description of the workbench__* tools — how to draft, edit, validate, run, and save the plan in the side pane. Start from the built-in text (written into the file by graph config init) rather than writing from scratch, or the agent will stop using the workbench correctly.
[workbench]
GRAPH_WORKBENCH_LOG environment variable overrides both.