Todas las claves de configuración
Los 25 ajustes que AutoDev lee de config.json, en el proyecto y en la máquina, con el valor predeterminado de cada uno, su variable de entorno cuando la tiene y lo que hace.
Cómo se elige un valor #
Los ajustes se guardan en un config.json, que autodev config set <key> <value> escribe y autodev config unset <key> edita. En cuál de los dos archivos vive cada clave se explica más abajo. El archivo del proyecto está en tu repositorio, así que un ajuste viaja con el proyecto y se revisa en un pull request.
Una variable de entorno gana al archivo cuando está definida. Un valor que no sirve para la clave, como un número negativo o un proveedor que no existe, se ignora en el entorno, y prevalece el valor del archivo. Un config.json que no se puede leer, o que no supera la validación, se lee como una configuración vacía. Solo las claves planas tienen variable de entorno: las claves anidadas, notify y capability, se leen únicamente del archivo.
Los números deben ser positivos. Los booleanos admiten true, false, 1, 0, on u off en autodev config set, y el entorno admite también yes y no. Una clave sin valor predeterminado no tiene nada definido hasta que la defines.
autodev config set maxSpendUsd 25 autodev config set notify.url https://ntfy.sh/<topic> autodev config unset maxSpendUsd
El proyecto y la máquina #
Dos archivos guardan ajustes.
| Archivo | Guarda |
|---|---|
.autodev/config.json, en el repositorio | Todas las claves de esta página, salvo las de la fila siguiente. Viaja con un clon. |
~/.autodev/config.json, en la máquina | suspendOnCompletion y todo el bloque notify. |
autodev config set escribe cada clave en su propio archivo, y autodev config muestra el valor vigente y de dónde viene.
suspendOnCompletion es de la máquina porque suspender detiene todas las ejecuciones de la máquina. Con dos proyectos trabajando a la vez, un ajuste por proyecto los dejaría discrepar sobre si la máquina puede dormir, y el primero en terminar pondría a dormir al otro en mitad de su trabajo.
notify es de la máquina por dos motivos. El teléfono al que llega es tuyo y no del proyecto, así que un clon o un worktree nuevo no avisaría a nadie. Y el tema de notify.url funciona como una contraseña, que no debe estar en un archivo que viaja con un repositorio.
Un valor que un AutoDev anterior escribió para una de estas claves en el config.json de un proyecto se sigue leyendo cuando la máquina no tiene uno propio, y autodev config unset borra los dos, para que no vuelva.
Ejecución #
| Clave | Predeterminado | Variable de entorno | Qué hace |
|---|---|---|---|
provider | claude | AUTODEV_PROVIDER | La CLI de agente en la que corre un participante cuando su archivo no nombra ninguna, o nombra una que esta máquina no tiene: claude, codex o antigravity. El binario de la tercera es agy. |
model | sin predeterminado | AUTODEV_MODEL | Se conserva por compatibilidad. Ningún turno de un participante la lee: el modelo de un participante sale de su propio archivo. |
effort | sin predeterminado | AUTODEV_EFFORT | Se conserva por compatibilidad, como model: el esfuerzo de un participante sale de su propio archivo. |
claudeArgs | sin predeterminado | AUTODEV_CLAUDE_ARGS | Argumentos adicionales que se pasan a la CLI claude, separados por espacios. |
codexArgs | sin predeterminado | AUTODEV_CODEX_ARGS | Sustituye los argumentos predeterminados de la CLI codex y su valor de sandbox. Separados por espacios. |
antigravityArgs | sin predeterminado | AUTODEV_ANTIGRAVITY_ARGS | Sustituye los argumentos predeterminados de la CLI agy. Separados por espacios. |
autocompact | 300000 | AUTODEV_AUTOCOMPACT | El tamaño en el que claude compacta el contexto de una sesión: auto, o un número de tokens de 100000 a 1000000. auto deja la elección a claude y a lo que hayas configurado en él. Solo claude lo admite, y AutoDev pasa el valor tal como está escrito, sin comprobarlo. El valor predeterminado es menor que la ventana que claude usa por sí solo, así que una ejecución larga compacta antes. |
Cada participante responde de su propio proveedor, modelo y esfuerzo, en su archivo: autodev team pin fija el modelo y el esfuerzo, y el proveedor es el que tenía el participante al añadirlo. Las tres claves de arriba, a nivel de la ejecución, son lo que queda de cuando un proyecto tenía un solo agente. La pantalla Config del panel las omite, y autodev config todavía las lista.
model y effort son cadenas libres. No hay una lista fija, a propósito: los alias de modelo cambian, y una lista mantenida por AutoDev estaría equivocada la mañana en que salga un modelo nuevo. En el archivo de un participante, los valores sugeridos para effort son low, medium, high, xhigh y max.
autocompact es una cadena libre, como model y effort: AutoDev no la comprueba, y claude rechaza un valor que no acepta.
Las tres claves Args se dividen por espacios en blanco, así que un argumento que contiene un espacio no se puede escribir en ellas.
Límites de seguridad #
Estos ajustes pausan el bucle con limpieza cuando se alcanzan.
| Clave | Predeterminado | Variable de entorno | Qué hace |
|---|---|---|---|
maxIterations | 1000 | AUTODEV_MAX_ITERATIONS | El tope de seguridad de iteraciones del bucle. Un entero positivo. Una espera por un límite de uso no cuenta. |
maxSpendUsd | sin predeterminado | AUTODEV_MAX_USD | El tope global de gasto estimado, en USD. Pausa el bucle. |
maxRuntimeMin | sin predeterminado | AUTODEV_MAX_RUNTIME_MIN | El presupuesto de tiempo real de la ejecución, en minutos. Se reancla en cada ejecución del daemon, y el tiempo que pasa esperando no se le cobra. |
perCallBudgetUsd | sin predeterminado | AUTODEV_PER_CALL_USD | Un traspaso de <cli> --max-budget-usd por llamada, en USD: un tope estricto para quien usa API. Solo claude lo admite. |
maxWaitMin | 240 | AUTODEV_MAX_WAIT_MIN | El tope de una espera que un participante pidió, en minutos. Una espera mayor pausa la ejecución en lugar de seguir. |
waitRecheckMaxMin | 30 | AUTODEV_WAIT_RECHECK_MAX_MIN | El límite del intervalo con que se vuelve a comprobar una espera, en minutos. Los intervalos son 2, 4, 8 y 16, y luego ese límite. |
maxAcceptChecks | 3 | AUTODEV_MAX_ACCEPT_CHECKS | Cuántas veces la auditoría de finalización puede reabrir la ejecución antes de pausar. |
maxTalkTurns | 4 | AUTODEV_MAX_TALK_TURNS | Cuántas publicaciones seguidas pueden ser algo distinto de trabajo verificado. Después de ellas el hilo restringe el siguiente turno a trabajo, y un turno restringido que aun así no produce ninguno pausa la ejecución. |
suspendOnCompletion | false | AUTODEV_SUSPEND_ON_COMPLETION | Suspende la máquina cuando una ejecución termina y la máquina está inactiva. Una clave de la máquina. Suspender la máquina trae las condiciones. |
El tope de gasto es flexible. AutoDev lo comprueba entre tareas, así que una ejecución puede pasarse en aproximadamente el costo de una tarea antes de pausar.
maxAcceptChecks cuenta la auditoría. Cuando un participante dice que el objetivo se cumplió, una auditoría independiente lee la afirmación frente al objetivo, y una brecha que encuentra vuelve al equipo como una publicación. La ejecución se pausa cuando la auditoría ha encontrado brechas más veces de las que esta clave permite, y un mensaje tuyo la retoma.
Cuándo una ejecución espera o se rinde #
Una ejecución puede esperar por tres motivos, y cada uno tiene su límite.
- Un límite de uso. El motor de un participante, que es un proveedor con su modelo y su esfuerzo, informa de un límite. El turno pasa al siguiente motor de la cadena
failoverdel participante. Cuando todos los motores están limitados, la ejecución espera al primero que vuelva. Ninguna clave limita esta espera, porque termina sola, y no cuenta como iteración ni como tiempo de ejecución. - Una espera que un participante pidió. Un participante que tiene que esperar, por ejemplo mientras otra sesión termina, publica un
wait. La ejecución vuelve a comprobar a intervalos crecientes, ymaxWaitMinywaitRecheckMaxMinla limitan. Cuando se agotamaxWaitMin, la ejecución se pausa, y un mensaje tuyo oautodev startla continúa. - Un fallo de infraestructura. La CLI se cayó o superó el tiempo, o informó de un límite antes de que AutoDev pudiera leer cuándo termina. El primer reintento es inmediato. Los siguientes esperan 1, 2, 4, 8, 15 y 30 minutos, y después una hora cada uno. Tras el duodécimo fallo seguido la ejecución se rinde, después de haber esperado unas cinco horas, y se pausa. Nunca espera más allá del momento en que un motor limitado vuelve, porque el siguiente intento ya va hacia él.
autodev startlo intenta de nuevo. Ninguna clave cambia este calendario.
Dos límites fijos detienen una ejecución que no va a ninguna parte, y tampoco tienen clave: 5 pasos seguidos que fallan por parte de AutoDev pausan la ejecución como error, y 10 iteraciones seguidas sin trabajo verificado la pausan como atascada.
Gates #
| Clave | Predeterminado | Variable de entorno | Qué hace |
|---|---|---|---|
gateMode | auto | AUTODEV_GATE_MODE | La postura ante las acciones irreversibles: auto aprueba automáticamente los gates declarados, y gated pausa para un humano. |
gateAutoApprove | sin predeterminado | AUTODEV_GATE_AUTO_APPROVE | Patrones de subcadena aprobados sin pausar, separados por comas. Vale en ambos modos. |
gateAutoDeny | sin predeterminado | AUTODEV_GATE_AUTO_DENY | Patrones de subcadena denegados sin pausar, separados por comas. Vale en ambos modos. |
Un gate pendiente espera a autodev approve o autodev deny.
Checkpoints #
| Clave | Predeterminado | Variable de entorno | Qué hace |
|---|---|---|---|
checkpoints | true | AUTODEV_CHECKPOINTS | Checkpoint y rollback con git en el repositorio de destino. |
Uso del ordenador #
Las claves del bloque capability.computerUse permiten que los participantes vean y operen páginas web, en un navegador que AutoDev mantiene durante la ejecución. Están en el archivo del proyecto y no tienen variable de entorno.
| Clave | Predeterminado | Qué hace |
|---|---|---|
capability.computerUse.enabled | false | Activa las herramientas de navegador. Está apagada hasta que la enciendes: una capacidad que opera interfaces no es un valor predeterminado. El participante ve capturas de pantalla de lo que opera, enviadas a su propio modelo como el código que lee. |
capability.computerUse.headless | true | false muestra la ventana del navegador mientras trabaja. Un navegador dura toda la ejecución y se cierra cuando esta termina. Cambiarlo a mitad de la ejecución cambia el navegador en la siguiente llamada, y conviene no tocar la ventana mientras una llamada está corriendo. |
capability.computerUse.browserProfile | sin predeterminado | Una carpeta para usar como perfil del navegador. Solo se puede escribir en el archivo, y autodev config set la rechaza. Sin valor, se usa un perfil propio de AutoDev, guardado en la máquina. Una ruta aquí es el perfil de tu propio navegador, y lleva todas las cookies que tienes a una sesión automatizada. |
Con el perfil predeterminado, inicias sesión en un sitio una vez y todas las ejecuciones siguientes tienen ese inicio de sesión: autodev browser login <url> abre la página, y el panel tiene la misma acción. autodev browser login trae los detalles.
autodev config set capability.computerUse.enabled true autodev config set capability.computerUse.headless false
Notificaciones #
Las claves del bloque notify envían un mensaje a tu teléfono cuando una ejecución termina, se detiene sola o te necesita. Están en el archivo de la máquina y no tienen variable de entorno.
| Clave | Predeterminado | Qué hace |
|---|---|---|
notify.url | sin predeterminado | A dónde hacer el POST. Sin valor, está apagada. La URL de un tema de ntfy, o un webhook tuyo. Debe empezar por http:// o https://. El tema de la URL funciona como una contraseña: quien lo conoce se entera de cuándo se detienen tus ejecuciones. El panel muestra solo si está definida, y autodev config set imprime (hidden) en su lugar. |
notify.format | ntfy | El cuerpo del POST. ntfy es texto plano, con el título en una cabecera Title. json es { "title", "body", "project", "kind", "at" }, para un webhook tuyo. Discord y Slack esperan cada uno un formato propio y rechazan este. |
El mensaje se envía una vez por cada cosa que te necesita, en cualquier proyecto de la máquina, y es de uno de estos tres tipos:
| Tipo | Cuerpo | Cuándo |
|---|---|---|
decision | AutoDev is waiting on a decision only you can make. | Un gate espera tu aprobación, un aviso de un participante retiene una capacidad hasta que lo respondas, o el hilo te preguntó algo. |
stopped | AutoDev stopped and will not resume on its own. | La ejecución se pausó o dio un error, y no pediste tú la pausa. |
finished | AutoDev finished. | La ejecución se completó. |
El título es AutoDev · <project>. Una ejecución que detienes o pausas tú mismo no envía nada. El POST tiene un tiempo límite de 5 segundos y se intenta una vez más si falla, y el log registra notify.sent, notify.failed o notify.off, nunca la dirección. El editor aplica la misma regla a su propia notificación, así que un evento que uno de los dos anunció no lo vuelve a anunciar el otro.
autodev config set notify.url https://ntfy.sh/<topic> autodev config set notify.format json
Suspender la máquina #
Con suspendOnCompletion activada, AutoDev pone la máquina a dormir cuando una ejecución ya no la necesita, para que la ejecución de una noche no deje la máquina despierta hasta la mañana. Viene apagada, solo actúa en Windows, y duerme en lugar de hibernar.
Solo suspende cuando se cumplen todas estas condiciones:
- La ejecución terminó porque se completó, sin gate ni propuesta pendiente, o porque se detuvo y te espera: pausada por el sistema, detenida en un gate o en una propuesta, preguntándote algo, o con un error.
- No detuviste ni pausaste tú la ejecución.
- Ningún otro proyecto de la máquina tiene una ejecución viva, porque suspender detiene todas.
- Ningún teléfono puede responder por el servidor. Un servidor en marcha con un teléfono emparejado o emparejándose lo impide, y también uno que no sabe decirlo. Un servidor sin teléfono no lo impide.
- La máquina lleva 20 minutos inactiva, es decir, sin teclado ni ratón.
Cuando se cumplen, AutoDev muestra en pantalla un mensaje que dice que la máquina va a suspenderse, espera 60 segundos y comprueba todas las condiciones de nuevo. Tocar el ratón o el teclado en ese minuto lo cancela. El log registra el motivo de cada rechazo.
Un ejemplo #
{
"suspendOnCompletion": true,
"notify": { "url": "https://ntfy.sh/<topic>", "format": "ntfy" }
}{
"maxIterations": 500,
"maxSpendUsd": 25,
"gateMode": "gated",
"checkpoints": true,
"capability": { "computerUse": { "enabled": true, "headless": false } }
}