Todas as chaves de configuração

As 25 configurações que o AutoDev lê de config.json, no projeto e na máquina, com o padrão de cada uma, sua variável de ambiente quando tem uma e o que ela faz.

Como um valor é escolhido #

As configurações persistem em um config.json, que autodev config set <key> <value> grava e autodev config unset <key> edita. Em qual dos dois arquivos cada chave fica está mais abaixo. O arquivo do projeto fica no seu repositório, então uma configuração viaja com o projeto e é revisada em um pull request.

Uma variável de ambiente vence o arquivo quando está definida. Um valor que não serve à chave, como um número negativo ou um provedor que não existe, é ignorado no ambiente, e o valor do arquivo prevalece. Um config.json que não pode ser lido, ou que falha na validação, é lido como uma configuração vazia. Só as chaves planas têm variável de ambiente: as chaves aninhadas, notify e capability, são lidas apenas do arquivo.

Os números devem ser positivos. Os booleanos aceitam true, false, 1, 0, on ou off em autodev config set, e o ambiente aceita também yes e no. Uma chave sem padrão não tem nada definido até você defini-la.

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

O projeto e a máquina #

Dois arquivos guardam configurações.

ArquivoGuarda
.autodev/config.json, no repositórioToda chave desta página, exceto as da linha seguinte. Viaja com um clone.
~/.autodev/config.json, na máquinasuspendOnCompletion e o bloco notify inteiro.

autodev config set grava cada chave no arquivo dela, e autodev config mostra o valor em vigor e de onde ele vem.

suspendOnCompletion é da máquina porque suspender interrompe todas as execuções da máquina. Com dois projetos trabalhando ao mesmo tempo, uma configuração por projeto os deixaria discordar sobre se a máquina pode dormir, e o primeiro a terminar poria o outro para dormir no meio do trabalho.

notify é da máquina por dois motivos. O celular que ele alcança é seu, não do projeto, então um clone ou um worktree novo não notificaria ninguém. E o tópico em notify.url funciona como uma senha, que não deve ficar num arquivo que viaja com um repositório.

Um valor que um AutoDev mais antigo gravou para uma dessas chaves no config.json de um projeto ainda é lido quando a máquina não tem um valor próprio, e autodev config unset limpa os dois, para que ele não volte.

Execução #

ChavePadrãoVariável de ambienteO que faz
providerclaudeAUTODEV_PROVIDERA CLI de agente em que um participante roda quando o arquivo dele não indica nenhuma, ou indica uma que esta máquina não tem: claude, codex ou antigravity. O binário da terceira é agy.
modelsem padrãoAUTODEV_MODELMantida por compatibilidade. Nenhum turno de participante a lê: o modelo de um participante vem do arquivo dele.
effortsem padrãoAUTODEV_EFFORTMantida por compatibilidade, como model: o esforço de um participante vem do arquivo dele.
claudeArgssem padrãoAUTODEV_CLAUDE_ARGSArgumentos extras passados à CLI claude, separados por espaços.
codexArgssem padrãoAUTODEV_CODEX_ARGSSubstitui os argumentos padrão da CLI codex e o padrão de sandbox dela. Separados por espaços.
antigravityArgssem padrãoAUTODEV_ANTIGRAVITY_ARGSSubstitui os argumentos padrão da CLI agy. Separados por espaços.
autocompact300000AUTODEV_AUTOCOMPACTO tamanho em que o claude compacta o contexto de uma sessão: auto, ou uma contagem de tokens de 100000 a 1000000. auto deixa a escolha com o claude e com o que você configurou nele. Só o claude aceita, e o AutoDev repassa o valor como foi escrito, sem verificar. O padrão é menor que a janela que o claude usa sozinho, então uma execução longa compacta mais cedo.

Cada participante responde pelo seu próprio provider, modelo e esforço, no arquivo dele: autodev team pin define o modelo e o esforço, e o provider é aquele com que o participante foi adicionado. As três chaves acima, no nível da execução, são o que sobrou do tempo em que um projeto tinha um único agente. A tela Config do painel as deixa de fora, e autodev config ainda as lista.

model e effort são strings livres. Não há uma lista fixa, de propósito: os aliases de modelo mudam, e uma lista mantida pelo AutoDev estaria errada na manhã em que um modelo novo sair. No arquivo de um participante, os valores sugeridos para effort são low, medium, high, xhigh e max.

autocompact é uma string livre, como model e effort: o AutoDev não a verifica, e o claude recusa um valor que não aceita.

As três chaves Args são divididas por espaço em branco, então um argumento que contém um espaço não pode ser escrito nelas.

Limites de segurança #

Estas configurações pausam o loop com limpeza quando são atingidas.

ChavePadrãoVariável de ambienteO que faz
maxIterations1000AUTODEV_MAX_ITERATIONSO teto de segurança de iterações do loop. Um inteiro positivo. Uma espera por limite de uso não conta.
maxSpendUsdsem padrãoAUTODEV_MAX_USDO teto global de gasto estimado, em USD. Pausa o loop.
maxRuntimeMinsem padrãoAUTODEV_MAX_RUNTIME_MINO orçamento de tempo real da execução, em minutos. É reancorado a cada execução do daemon, e o tempo gasto esperando não é cobrado dele.
perCallBudgetUsdsem padrãoAUTODEV_PER_CALL_USDUm repasse de <cli> --max-budget-usd por chamada, em USD: um teto rígido para quem usa API. Só o claude aceita.
maxWaitMin240AUTODEV_MAX_WAIT_MINO teto de uma espera que um participante pediu, em minutos. Uma espera maior pausa a execução em vez de seguir.
waitRecheckMaxMin30AUTODEV_WAIT_RECHECK_MAX_MINO limite do intervalo com que uma espera é verificada de novo, em minutos. Os intervalos são 2, 4, 8 e 16, depois esse limite.
maxAcceptChecks3AUTODEV_MAX_ACCEPT_CHECKSQuantas vezes a auditoria de conclusão pode reabrir a execução antes de pausar.
maxTalkTurns4AUTODEV_MAX_TALK_TURNSQuantos posts seguidos podem ser algo que não seja trabalho verificado. Depois deles a thread restringe o próximo turno a trabalho, e um turno restrito que ainda assim não produz nenhum pausa a execução.
suspendOnCompletionfalseAUTODEV_SUSPEND_ON_COMPLETIONSuspende a máquina quando uma execução termina e a máquina está ociosa. Uma chave da máquina. Suspender a máquina traz as condições.

O teto de gasto é flexível. O AutoDev o verifica entre as tarefas, então uma execução pode ultrapassá-lo em cerca de o custo de uma tarefa antes de pausar.

maxAcceptChecks conta a auditoria. Quando um participante diz que o objetivo foi cumprido, uma auditoria independente lê a afirmação contra o objetivo, e uma lacuna que ela encontra volta para o time como um post. A execução pausa quando a auditoria encontrou lacunas mais vezes do que essa chave permite, e uma mensagem sua a retoma.

Quando uma execução espera ou desiste #

Uma execução pode esperar por três motivos, e cada um tem seu limite.

Dois limites fixos param uma execução que não vai a lugar nenhum, e também não têm chave: 5 passos seguidos que falham do lado do AutoDev pausam a execução como erro, e 10 iterações seguidas sem trabalho verificado a pausam como travada.

Gates #

ChavePadrãoVariável de ambienteO que faz
gateModeautoAUTODEV_GATE_MODEA postura diante de ações irreversíveis: auto aprova automaticamente os gates declarados, e gated pausa para um humano.
gateAutoApprovesem padrãoAUTODEV_GATE_AUTO_APPROVEPadrões de substring aprovados sem pausar, separados por vírgulas. Vale nos dois modos.
gateAutoDenysem padrãoAUTODEV_GATE_AUTO_DENYPadrões de substring negados sem pausar, separados por vírgulas. Vale nos dois modos.

Um gate pendente espera por autodev approve ou autodev deny.

Checkpoints #

ChavePadrãoVariável de ambienteO que faz
checkpointstrueAUTODEV_CHECKPOINTSCheckpoint e rollback com git no repositório de destino.

Uso do computador #

As chaves do bloco capability.computerUse deixam os participantes ver e operar páginas da web, em um navegador que o AutoDev mantém durante a execução. Ficam no arquivo do projeto e não têm variável de ambiente.

ChavePadrãoO que faz
capability.computerUse.enabledfalseLiga as ferramentas de navegador. Fica desligada até você ligar: uma capacidade que opera interfaces não é um padrão. O participante vê capturas de tela do que opera, enviadas ao próprio modelo como o código que ele lê.
capability.computerUse.headlesstruefalse mostra a janela do navegador enquanto ele trabalha. Um navegador dura a execução toda e fecha quando ela termina. Mudar isso no meio da execução troca o navegador na próxima chamada, e é melhor não mexer na janela enquanto uma chamada está rodando.
capability.computerUse.browserProfilesem padrãoUma pasta para usar como perfil do navegador. Só pode ser escrita no arquivo, e autodev config set a recusa. Sem valor, vale um perfil do próprio AutoDev, guardado na máquina. Um caminho aqui é o perfil do seu próprio navegador, e leva todos os cookies que você tem para uma sessão automatizada.

Com o perfil padrão, você faz login em um site uma vez e todas as execuções seguintes têm esse login: autodev browser login <url> abre a página, e o painel tem a mesma ação. autodev browser login traz os detalhes.

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

Notificações #

As chaves do bloco notify mandam uma mensagem ao seu celular quando uma execução termina, para sozinha ou precisa de você. Ficam no arquivo da máquina e não têm variável de ambiente.

ChavePadrãoO que faz
notify.urlsem padrãoPara onde fazer o POST. Sem valor, fica desligada. A URL de um tópico ntfy, ou um webhook seu. Deve começar com http:// ou https://. O tópico na URL funciona como uma senha: quem o conhece fica sabendo quando suas execuções param. O painel mostra apenas se ela está definida, e autodev config set imprime (hidden) no lugar dela.
notify.formatntfyO corpo do POST. ntfy é texto puro, com o título em um cabeçalho Title. json é { "title", "body", "project", "kind", "at" }, para um webhook seu. O Discord e o Slack esperam cada um um formato próprio e recusam este.

A mensagem é enviada uma vez para cada coisa que precisa de você, em qualquer projeto da máquina, e é de um destes três tipos:

TipoCorpoQuando
decisionAutoDev is waiting on a decision only you can make.Um gate espera sua aprovação, um aviso de um participante segura uma capacidade até você responder, ou a thread lhe perguntou algo.
stoppedAutoDev stopped and will not resume on its own.A execução pausou ou deu erro, e você não pediu a pausa.
finishedAutoDev finished.A execução foi concluída.

O título é AutoDev · <project>. Uma execução que você mesmo para ou pausa não envia nada. O POST tem um tempo limite de 5 segundos e é tentado mais uma vez se falhar, e o log registra notify.sent, notify.failed ou notify.off, nunca o endereço. O editor aplica a mesma regra à sua própria notificação, então um evento que um dos dois anunciou não é anunciado de novo pelo outro.

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

Suspender a máquina #

Com suspendOnCompletion ligada, o AutoDev põe a máquina para dormir quando uma execução não precisa mais dela, para que a execução de uma noite não deixe a máquina acordada até de manhã. Vem desligada, só age no Windows, e dorme em vez de hibernar.

Ele só suspende quando todas estas condições valem:

Quando elas valem, o AutoDev mostra na tela uma mensagem dizendo que a máquina vai suspender, espera 60 segundos e verifica todas as condições de novo. Encostar no mouse ou no teclado nesse minuto cancela. O log registra o motivo de cada recusa.

Um exemplo #

~/.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 } }
}