Every config key

The 25 settings AutoDev reads from config.json, on the project and on the machine, with each default, its environment variable where it has one, and what it does.

How a value is chosen #

Settings persist to a config.json, which autodev config set <key> <value> writes and autodev config unset <key> edits. Which of the two files a key lives in is below. The project's file is in your repository, so a setting travels with the project and is reviewed in a pull request.

An environment variable wins over the file when it is set. A value that does not fit its key, such as a negative number or a provider that does not exist, is ignored in the environment, and the file's value stands. A config.json that does not parse, or that fails validation, is read as an empty config. Only the flat keys have an environment variable: the nested keys, notify and capability, are read from the file alone.

Numbers must be positive. Booleans take true, false, 1, 0, on or off in autodev config set, and the environment also takes yes and no. A key with no default has nothing set until you set it.

powershell
autodev config set maxSpendUsd 25
autodev config set notify.url https://ntfy.sh/<topic>
autodev config unset maxSpendUsd

The project and the machine #

Two files hold settings.

FileHolds
.autodev/config.json, in the repositoryEvery key on this page except the ones in the next row. It travels with a clone.
~/.autodev/config.json, on the machinesuspendOnCompletion and the whole notify block.

autodev config set writes each key to its own file, and autodev config shows the value in force and where it came from.

suspendOnCompletion is the machine's because suspending stops every run on the box. With two projects working at once, a setting per project would let them disagree about whether the machine may sleep, and the first to finish would put the other to sleep in the middle of its work.

notify is the machine's for two reasons. The phone it reaches is yours and not the project's, so a fresh clone or worktree would otherwise notify nobody. And the topic in notify.url works like a password, which must not sit in a file that travels with a repository.

A value an older AutoDev wrote for one of these keys into a project's config.json is still read when the machine has none of its own, and autodev config unset clears both, so it cannot come back.

Run #

KeyDefaultEnv varWhat it does
providerclaudeAUTODEV_PROVIDERThe agent CLI a participant runs on when its file names none, or names one this machine lacks: claude, codex or antigravity. The binary of the third is agy.
modelunsetAUTODEV_MODELKept for compatibility. No participant's turn reads it: a participant's model comes from its own file.
effortunsetAUTODEV_EFFORTKept for compatibility, like model: a participant's effort comes from its own file.
claudeArgsunsetAUTODEV_CLAUDE_ARGSExtra arguments passed to the claude CLI, separated by spaces.
codexArgsunsetAUTODEV_CODEX_ARGSOverrides the default arguments of the codex CLI, and replaces its sandbox default. Separated by spaces.
antigravityArgsunsetAUTODEV_ANTIGRAVITY_ARGSOverrides the default arguments of the agy CLI. Separated by spaces.
autocompact300000AUTODEV_AUTOCOMPACTThe size at which claude compacts a session's context: auto, or a token count from 100000 to 1000000. auto leaves the choice to claude and to whatever you configured there. Only claude takes it, and AutoDev passes the value as written, without checking it. The default is smaller than the window claude uses on its own, so a long run compacts sooner.

Each participant answers for its own provider, model and effort, in its file: autodev team pin sets the model and the effort, and the provider is the one the participant was added with. The three run-level keys above are what is left of a time when a project had one agent. The panel's Config screen leaves them out, and autodev config still lists them.

model and effort are free-form strings. There is deliberately no fixed list: model aliases drift, and a list AutoDev kept would be wrong the morning a new model ships. In a participant's file, the suggested values for effort are low, medium, high, xhigh and max.

autocompact is a free-form string, like model and effort: AutoDev does not check it, and claude rejects a value it does not accept.

The three Args keys are split on whitespace, so an argument that contains a space cannot be written in them.

Guardrails #

These settings pause the loop cleanly when they are reached.

KeyDefaultEnv varWhat it does
maxIterations1000AUTODEV_MAX_ITERATIONSThe safety cap on loop iterations. A positive integer. A wait for a usage limit does not count.
maxSpendUsdunsetAUTODEV_MAX_USDThe global estimated-spend cap, in USD. It pauses the loop.
maxRuntimeMinunsetAUTODEV_MAX_RUNTIME_MINThe wall-clock run budget, in minutes. It is re-anchored on each daemon run, and time spent waiting is not charged to it.
perCallBudgetUsdunsetAUTODEV_PER_CALL_USDA per-call <cli> --max-budget-usd passthrough, in USD: a hard cap for API users. Only claude takes it.
maxWaitMin240AUTODEV_MAX_WAIT_MINThe cap on one wait a participant asked for, in minutes. A longer wait pauses the run instead of going on.
waitRecheckMaxMin30AUTODEV_WAIT_RECHECK_MAX_MINThe ceiling of the interval at which a wait is checked again, in minutes. The intervals run 2, 4, 8 and 16, then this ceiling.
maxAcceptChecks3AUTODEV_MAX_ACCEPT_CHECKSHow many times the completion audit may reopen the run before it pauses.
maxTalkTurns4AUTODEV_MAX_TALK_TURNSHow many posts in a row may be something other than verified work. After them the thread restricts the next turn to work, and a restricted turn that still produces none pauses the run.
suspendOnCompletionfalseAUTODEV_SUSPEND_ON_COMPLETIONSuspends the machine when a run is over and the machine is idle. A machine key. Suspending the machine has the conditions.

The spend cap is soft. AutoDev checks it between tasks, so a run can overshoot by roughly one task's cost before it pauses.

maxAcceptChecks counts the audit. When a participant says the objective is met, an independent audit reads the claim against the objective, and a gap it finds goes back to the team as a post. The run pauses once the audit has found gaps more times than this key allows, and a message from you resumes it.

When a run waits or gives up #

A run can wait for three reasons, and they are bounded in three ways.

Two fixed limits stop a run that is going nowhere, and they have no key either: 5 steps in a row that fail on AutoDev's own side pause the run as an error, and 10 iterations in a row with no verified work pause it as stuck.

Gates #

KeyDefaultEnv varWhat it does
gateModeautoAUTODEV_GATE_MODEThe posture toward irreversible actions: auto auto-approves the declared gates, and gated pauses for a human.
gateAutoApproveunsetAUTODEV_GATE_AUTO_APPROVESubstring patterns approved without pausing, separated by commas. It applies in both modes.
gateAutoDenyunsetAUTODEV_GATE_AUTO_DENYSubstring patterns denied without pausing, separated by commas. It applies in both modes.

A pending gate waits for autodev approve or autodev deny.

Checkpoints #

KeyDefaultEnv varWhat it does
checkpointstrueAUTODEV_CHECKPOINTSGit checkpoint and rollback in the target repository.

Computer use #

The keys of the capability.computerUse block let participants see and operate web pages, in a browser AutoDev keeps for the run. They live in the project's file and have no environment variable.

KeyDefaultWhat it does
capability.computerUse.enabledfalseTurns the browser tools on. It is off until you turn it on: a capability that operates interfaces is not a default. The participant sees screenshots of what it operates, sent to its own model like the code it reads.
capability.computerUse.headlesstruefalse shows the browser window while it works. One browser lasts the whole run and closes when the run ends. Changing this mid-run swaps the browser at the next call, and the window is best left alone while a call is running.
capability.computerUse.browserProfileunsetA folder to use as the browser profile. It can only be written in the file, and autodev config set refuses it. Unset means a profile of AutoDev's own, kept on the machine. A path here is your own browser profile, and it carries every cookie you have into an automated session.

With the default profile, you log in to a site once and every later run has that login: autodev browser login <url> opens the page, and the panel has the same action. autodev browser login has the details.

powershell
autodev config set capability.computerUse.enabled true
autodev config set capability.computerUse.headless false

Notifications #

The keys of the notify block send a message to your phone when a run finishes, stops on its own or needs you. They live in the machine's file, and they have no environment variable.

KeyDefaultWhat it does
notify.urlunsetWhere to POST. Unset is off. An ntfy topic URL, or a webhook of your own. It must start with http:// or https://. The topic in the URL works like a password: anyone who knows it learns when your runs stop. The panel shows only whether it is set, and autodev config set prints (hidden) in place of it.
notify.formatntfyThe body of the POST. ntfy is plain text, with the title in a Title header. json is { "title", "body", "project", "kind", "at" }, for a webhook of your own. Discord and Slack each expect a shape of their own and refuse this one.

The message is sent once for each thing that needs you, in any project on the machine, and it is one of three:

KindBodyWhen
decisionAutoDev is waiting on a decision only you can make.A gate awaits your approval, a participant's notice holds a capability until you answer it, or the thread asked you something.
stoppedAutoDev stopped and will not resume on its own.The run paused or hit an error, and you did not ask for the pause.
finishedAutoDev finished.The run completed.

The title is AutoDev · <project>. A run you stop or pause yourself sends nothing. The POST has a 5-second timeout and is tried once more if it fails, and the log records notify.sent, notify.failed or notify.off, never the address. The editor applies the same rule to its own notification, so an event that one of them announced is not announced again by the other.

powershell
autodev config set notify.url https://ntfy.sh/<topic>
autodev config set notify.format json

Suspending the machine #

With suspendOnCompletion on, AutoDev puts the machine to sleep when a run no longer needs it, so a night's run does not leave the machine awake until morning. It is off by default, it only acts on Windows, and it sleeps rather than hibernates.

It suspends only when all of these hold:

When they hold, AutoDev shows a message on screen that says the machine will suspend, waits 60 seconds, and checks every condition again. Touching the mouse or the keyboard in that minute cancels it. The log records the reason for each refusal.

An example #

~/.autodev/config.json
{
  "suspendOnCompletion": true,
  "notify": { "url": "https://ntfy.sh/<topic>", "format": "ntfy" }
}
.autodev/config.json
{
  "maxIterations": 500,
  "maxSpendUsd": 25,
  "gateMode": "gated",
  "checkpoints": true,
  "capability": { "computerUse": { "enabled": true, "headless": false } }
}