Configuration reference
autodev reads repository configuration from .autodev/. The parsed configuration files deny
unknown fields, so a misspelling fails visibly rather than loading a configuration nobody wrote — a
typo refuses the file and names the accepted vocabulary.
.autodev/fleet.toml
[bridges.<name>]
| Key | Type | Meaning |
|---|---|---|
kind | string, required | codex, claude-code, or command. |
argv | string array | Required and non-empty for command; use {prompt} where that harness expects the prompt. |
extra_args | string array | Additional arguments for a built-in harness adapter. |
model | string | Requested model pin for this bridge. |
name | string | Display name for a command bridge; defaults to command. |
confinement | string | Optional fleet-built harness boundary. The only accepted value is fleet. |
Legacy singular [bridge] and [judge] definitions use the same keys.
Every bridge launches a local CLI process; there is no direct model-provider API bridge in the
current release. For command, every {prompt} occurrence in every argv element is replaced with
the turn prompt, the child runs in the worktree, and stdin is closed. The generic adapter does not
translate model or [models] into CLI flags and does not parse harness-specific usage. Pin a model
in argv using that CLI's syntax when required; usage remains unknown unless a native adapter
parses it. See Connect coding-agent CLIs.
Do not use Codex sandbox-bypass or profile flags in extra_args. The current capability validation
does not detect every flag that can weaken or redirect confinement.
[roles]
| Key | Meaning |
|---|---|
worker | Named bridge for implementation turns. |
judge | Named bridge for review turns. |
analyst | Optional named bridge for frontier fileset prediction. |
coordinator | Optional named bridge for the coordinator cycle fleet drive runs between ticks. |
A named role must resolve to a declared bridge. An absent analyst preserves area-based scheduling; an absent judge causes work that needs review to hold rather than inventing a verdict. An absent coordinator means fleet drive runs no coordinator cycle; a coordinator bound here with no .autodev/coordinator.yaml present is reported at the start of the drive and runs nothing.
[validation]
| Key | Type | Meaning |
|---|---|---|
argv | string array | Required when a worker is configured; mechanical evidence command. |
gate | string array | Integrated-candidate gate; falls back to argv when empty. |
test_pattern | string | Accepted for compatibility but currently not consulted. |
[fleet]
| Key | Type | Default when absent |
|---|---|---|
worktree_root | string path | ../autodev-fleet-worktrees, resolved from the repository root. |
max_wave_size | non-negative integer | 4 in the current CLI; zero withholds all dispatch. |
max_open_waves | non-negative integer | 2 in the current CLI; zero withholds all dispatch. Parked or stranded holds are not counted. |
max_concurrent_turns | integer | Effective max_wave_size; an explicit zero clamps to one. |
max_concurrent_judges | integer | Effective max_concurrent_turns, then max_open_waves; an explicit zero clamps to one. |
attempt_limit | integer | 2 retries after the initial turn, permitting up to three attempts. |
turn_deadline_seconds | integer | 3600 in the current CLI. |
disk_floor_gb | integer | No enforced floor. |
transcript_budget_bytes | integer | Store default, currently 2 MiB. |
Defaults describe binary behavior, not good sizing for every machine.
[env] and [env.set]
env.pass_through is an array of parent environment variable names. PATH and HOME are already
included by the default-deny policy. env.set is a string-to-string table of explicit values.
Every absolute existing directory named there is mounted read-only during confined validation;
declaring a directory is never write intent. The mount plan is printed before launch.
[models]
Accepted keys are default, low, medium, and high, each a model ID string. Complexity-specific entries override the default; the worker bridge's model is the final fallback.
[pricing."<model-id>"]
Accepted numeric rate keys are:
input_per_mtok;output_per_mtok;cache_read_per_mtok;cache_creation_per_mtok.
Rates are USD per million tokens. A repository model entry replaces the built-in entry for that model; missing rates stay unknown.
.autodev/coordinator.yaml
Absent by default, and its absence is the opt-in: a drive over a repository without this file runs no
coordinator. Present, it configures the coordinator loop alongside a coordinator role in [roles].
Both are required before fleet drive or the standalone fleet coordinate process runs a cycle.
| Key | Type | Default when absent |
|---|---|---|
interval_seconds | integer | 300. Elapsed wall clock between cycles, measured from the start of the previous one — not a tick count, because the drive interval is independently tuned. |
run | string | coordinator.tick. The workflow one cycle executes; it must be installed. |
workflows | list | Empty. Workflow definitions, each optionally extending a built-in by id. |
Run autodev workflow list for the installed workflows and autodev workflow show <id> for one
resolved graph with every default written out.
.autodev/workflows.toml
Each [workflow.<name>] accepts:
| Key | Type | Meaning |
|---|---|---|
level | integer | Ceremony level metadata; defaults to 0. |
states | string array, required | Workflow vocabulary. |
initial | string, required | Initial state. |
terminal | string array | Terminal states. |
[workflow.<name>.gates] maps gate IDs to check, evidence, judge, or human.
Each [[workflow.<name>.edge]] accepts from, to, and an optional gates array. A configured workflow shadows a built-in workflow of the same name. Features select feature; bugfixes, chores, and spikes select their named workflow when present and otherwise fall back to bugfix.
The loader denies unknown keys at every level — file, workflow, and edge — so a misspelled
terminal or a singular gate refuses the file instead of silently loading a weaker workflow. It
also refuses a workflow whose route to done carries neither an evidence nor a judge gate, naming
the bypass path it found. That floor is narrow in two ways worth knowing: it is satisfied by evidence
or review, not both, and it looks for the state literally named done, so a workflow whose
terminal state is spelled otherwise is not checked. Review every path to a terminal state yourself
rather than treating the load succeeding as a review of the workflow.
Driver-only risk acceptances
These environment variables deliberately cannot be set in repository TOML:
| Variable | Effect |
|---|---|
AUTODEV_ALLOW_UNSANDBOXED_ROLE=1 | Accept a worker/judge/analyst role whose harness does not enforce its own sandbox. |
AUTODEV_ALLOW_UNCONFINED_VALIDATION=1 | Accept validation without Bubblewrap filesystem/network confinement. |
Values true and yes are also accepted. Both switches materially weaken isolation. Set them only in the driver's environment after evaluating the host and harness boundary.
Service and credential-store configuration
The central daemon's bind and bearer token are process options, not repository configuration:
autodev daemon start --address 127.0.0.1:7788
Workspace registration and the endpoint record live in the platform data directory. Use
autodev workspace register|list|import; do not add daemon coordinates or store paths to
fleet.toml.
The daemon's client surface binds the connector credential store selected by
AUTODEV_CREDENTIAL_STORE:
| Value | Behavior |
|---|---|
unset or file | Default file store under the platform data directory; durable, mode-restricted, and not encrypted |
file:<absolute-path> | Durable file store at an explicit path outside the served repository |
memory | Keeps secrets only for the process lifetime and forgets all of them at restart |
The file store refuses a relative path, a path inside the repository, or permissions wider than its security contract. It never falls back silently to memory when binding fails.