Skip to main content

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>]​

KeyTypeMeaning
kindstring, requiredcodex, claude-code, or command.
argvstring arrayRequired and non-empty for command; use {prompt} where that harness expects the prompt.
extra_argsstring arrayAdditional arguments for a built-in harness adapter.
modelstringRequested model pin for this bridge.
namestringDisplay name for a command bridge; defaults to command.
confinementstringOptional 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]​

KeyMeaning
workerNamed bridge for implementation turns.
judgeNamed bridge for review turns.
analystOptional named bridge for frontier fileset prediction.
coordinatorOptional 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]​

KeyTypeMeaning
argvstring arrayRequired when a worker is configured; mechanical evidence command.
gatestring arrayIntegrated-candidate gate; falls back to argv when empty.
test_patternstringAccepted for compatibility but currently not consulted.

[fleet]​

KeyTypeDefault when absent
worktree_rootstring path../autodev-fleet-worktrees, resolved from the repository root.
max_wave_sizenon-negative integer4 in the current CLI; zero withholds all dispatch.
max_open_wavesnon-negative integer2 in the current CLI; zero withholds all dispatch. Parked or stranded holds are not counted.
max_concurrent_turnsintegerEffective max_wave_size; an explicit zero clamps to one.
max_concurrent_judgesintegerEffective max_concurrent_turns, then max_open_waves; an explicit zero clamps to one.
attempt_limitinteger2 retries after the initial turn, permitting up to three attempts.
turn_deadline_secondsinteger3600 in the current CLI.
disk_floor_gbintegerNo enforced floor.
transcript_budget_bytesintegerStore 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.

KeyTypeDefault when absent
interval_secondsinteger300. Elapsed wall clock between cycles, measured from the start of the previous one — not a tick count, because the drive interval is independently tuned.
runstringcoordinator.tick. The workflow one cycle executes; it must be installed.
workflowslistEmpty. 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:

KeyTypeMeaning
levelintegerCeremony level metadata; defaults to 0.
statesstring array, requiredWorkflow vocabulary.
initialstring, requiredInitial state.
terminalstring arrayTerminal 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:

VariableEffect
AUTODEV_ALLOW_UNSANDBOXED_ROLE=1Accept a worker/judge/analyst role whose harness does not enforce its own sandbox.
AUTODEV_ALLOW_UNCONFINED_VALIDATION=1Accept 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:

ValueBehavior
unset or fileDefault 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
memoryKeeps 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.