Referencia de configuración
Cada clave de emet.config.json, con su valor por defecto y su significado. La fuente de verdad es emet/schema/emet.config.schema.json. Los términos siguen GLOSSARY.md. Volver al README.
emet init escribe el archivo. emet preflight y emet doctor lo validan. Una clave marcada como solo prosa la leen los prompts de /emet, no la CLI. Una clave marcada como obsoleta aún se acepta. El esquema también permite una clave de texto libre "//" para notas (nunca leída por ninguna herramienta) y "version", que siempre es 1.
pr
Cómo se fusiona el PR de una oleada.
{ "pr": { "autoMerge": true, "mergeMethod": "squash", "maxCiFixAttempts": 2 } }autoMerge(por defectotrue): espera los checks del PR y lo fusiona; sin checks, lo fusiona de inmediato. Un check que falla se corrige y se sube, hastamaxCiFixAttemptsveces, y luego el PR se deja abierto para una persona. Una oleada con cualquier cosa marcada nunca se fusiona automáticamente.mergeMethod(por defectosquash):squash,mergeorebase, que se pasa agh pr merge.maxCiFixAttempts(por defecto2, mínimo0): cuántas veces puede intentar el coordinador corregir un check que falla antes de dejar el PR abierto para una persona.
handoff
Qué ocurre después de que se cierra una oleada, y los límites de tamaño de la nota de handoff de un worker. Validado por emet preflight.
{ "handoff": { "autoChain": false, "launcher": "auto", "permissionMode": "bypassPermissions" }}-
maxLines(por defecto60): máximo de líneas que puede tener una nota.emet/handoff-<ticket>.mdantes de queemet handoff --checkla rechace. -
maxChars(por defecto8000, unos 2k tokens): máximo de caracteres que puede tener una nota de handoff. -
autoChain(por defectofalse): tras una oleada limpia y fusionada con más oleadas pendientes, lanza la siguiente conclaude --bgen lugar de imprimir/emet:run --dispatch <spec-id>. Inspecciónala conclaude agentsoclaude attach emet-<spec-id>-w<n>. Requisitos:claudeen el PATH, con compatibilidad con--bg.- Un espacio de trabajo de confianza.
--bgse ejecuta sin interacción, así que el diálogo de confianza nunca aparece; abreclaudede forma interactiva en el repositorio una vez y acéptalo. - La advertencia de bypass aceptada una vez en una sesión interactiva (
skipDangerousModePermissionPrompt), ya que la siguiente oleada se ejecuta enhandoff.permissionMode, no en el modo de la sesión que la lanza.
Solo se lanza cuando el PR se fusionó y nada quedó marcado, y se omite si ya hay una sesión
emet-<spec-id>-*activa (claude agents --json). Si el lanzamiento falla, recurre a imprimir/emet:run --dispatch <spec-id>. -
launcher(por defectoauto, uno deauto,orca,bg): abre además la oleada en una pestaña de Orca que ejecutaclaude attach.autoconsulta el runtime de Orca (orca status), por lo que también funciona desde sesionesclaude --bg, que no tienenTERM_PROGRAM;orcasiempre lo intenta;bgnunca. La oleada se ejecuta en segundo plano de cualquier forma, y una pestaña que no logra abrirse nunca detiene la cadena.emet launch <spec-id> --wave <n>hace todo el lanzamiento; consultaemet launch. -
permissionMode(por defectobypassPermissions, uno debypassPermissions,auto,acceptEdits): modo de permisos de la sesión encadenada. No se hereda de la sesión que la lanza, porque el clasificador del modoautopuede denegar un paso comogh pr mergey dejar una oleada a medias. Tus reglaspermissions.denysiguen aplicándose, pero la advertencia de bypass debe haberse aceptado una vez de forma interactiva (skipDangerousModePermissionPrompt).
budgets
Todos opcionales.
{ "budgets": { "workerAttempts": 2, "reviewRounds": 2, "stallNudgeCap": 6 } }workerAttempts(por defecto2, mínimo1): cuántas veces puede fallar un ticket enverifyantes de que la compuerta respondadefer. El ticket recibe la etiqueta de diferido y el resto de la oleada continúa. Un fallo del entorno, como que el comando de pruebas termine con 126/127 o una caída del proveedor, pausa la ejecución sin gastar un intento.reviewRounds(por defecto2, mínimo1): cuántas rondas de revisión/corrección recibe un ticket antes de una escalada al siguiente nivel de modelo. Lo que siga abierto después de eso recibe un dictamen.stallNudgeCap(por defecto6, mínimo1): cuántas veces se empuja a un worker detenido. El conteo nunca se reinicia.
models
Modelo y esfuerzo por rol. Todas las claves son opcionales; omitir la sección mantiene el worker en sonnet/medium y el revisor en opus/medium. El esfuerzo es uno de low, medium, high, xhigh, max.
{ "models": { "worker": { "model": "sonnet", "effort": "medium" }, "reviewer": { "medium": { "model": "opus", "effort": "medium" }, "high": { "model": "opus", "effort": "medium" } }, "triage": "haiku" }}worker.model(por defectosonnet),worker.effort(por defectomedium): el worker. La líneaModel:de un ticket reemplaza aworkersolo para ese worker.reviewer.mediumyreviewer.high(por defectoopus,mediumcada uno): el revisor para cada nivel de riesgo que devuelveemet assess. Subereviewer.high.effort(por ejemplo ahigh) para más escrutinio en las oleadas riesgosas.triage(por defectohaiku): el modelo económico para el triaje de logs de CI y la revisión de nivel pasivo. Un check que falla se entrega a un agente con este modelo, que devuelve como máximo unos 2k tokens con punterosfile:line.escalation(por defecto{ "sonnet": "opus" }): el siguiente nivel de modelo por nombre de modelo, usado cuando un ticket alcanza su tope de correcciones.
review
{ "review": { "highRiskPaths": [] } }highRiskPaths(por defecto[]): subcadenas de ruta adicionales, sin distinguir mayúsculas, que fuerzan el nivel de revisiónhighenemet assess, además del conjunto integrado (autenticación, seguridad, pagos, webhooks, CI, el instalador, lockfiles, migraciones y puntos sensibles peligrosos como SQL sin procesar o pipe-to-shell).
landing
mode(por defectopr):prabre un pull request (requieregh).mergefusiona la rama de integración en la rama troncal local conemet landy nunca hace push, concommands.selfChecken lugar de la CI. Independiente del tracker. Consulta el ADR-0010.
tracker
Con qué issue tracker habla /emet. La CLI lee kind para decidir qué comprobaciones de dependencias aplican; el resto documenta el adaptador que sigue el comando /emet (consulta docs/agents/issue-tracker.md).
kind(obligatorio):linear,githubolocal. Paralocal, consulta Tracker local y el ADR-0011.transitions.onStart,transitions.onPrOpen,transitions.onPrMerge: quién escribe cada transición de estado del ticket:worker,coordinatoroautomatic(lo hace la integración del tracker, por ejemplo la integración de GitHub de Linear al abrir o fusionar un PR). El coordinador nunca escribe una transición marcada comoautomatic.github.priorityLabels: asigna un nivel de prioridad ("1"= P0 la más alta a"4"= P3) a un nombre de etiqueta de GitHub, por ejemplo{"1":"P0","2":"P1"}. Si no se declara ninguno, los tickets se ordenan porcreatedAtascendente yemet doctorlo indica.github.stateLabels: asigna un estado del flujo de trabajo (todo,in-progress,in-review) a un nombre de etiqueta de GitHub, por ejemplo{"todo":"status:todo"}.doneycanceledse infieren del estado cerrado de la issue y destate_reason.linear: ajustes específicos de Linear (clave del equipo, nombres de los estados del flujo). Solo los lee el modelo que siguedocs/agents/issue-tracker.md, nunca la CLI.local.idPrefix(obsoleto): los ids de tickets locales ahora son<feature-slug>-<NN>.readyLabel,triageLabels,prReference(obsoletos): plantillas de etiquetas y de referencia al PR, por ejemploCloses #{number}(github) oRefs: {id}(linear).
preflight
requiredFiles(por defecto ninguno): archivos queemet preflightexige en la raíz del repositorio antes de que se despache una oleada, cada uno{ "path", "why" };whyaparece en el mensaje de fallo. Vacío significa que la comprobación no se ejecuta.requiredCommands(por defecto ninguno): binarios que deben resolverse en el PATH antes del despacho.emet preflightfalla con código 1 nombrando los que no, yemet doctorlos informa. Es la lista propia del repositorio, separada de las comprobaciones de dependencias dirigidas por el tracker;ghya tiene una comprobación dedicada, por lo que listarlo es opcional. Adiciones habituales:rgysg.
specs
dir(por defectodocs/specs): directorio, relativo al repositorio, de las specs vivas, escrito poremet spec-merge.
map
path(por defectodocs/agents/codebase.md): ruta, relativa al repositorio, del mapa que generaemet map.
concurrency
waveSize(por defecto4, mínimo1): máximo de llamadas a Agent despachadas juntas en una oleada.maxLiveWorkers(por defectoauto): tope global compartido por todos los coordinadores/emetque se ejecutan en este host, en todos los repositorios. El pool de slots vive en~/.local/state/emet/slots, no en ningún repositorio concreto.autoderiva el tope del número de CPU y de la RAM del host; un entero positivo lo fija. Una comprobación separada de margen de memoria (EMET_MEM_RESERVE_GIB, por defecto 8 GiB) deniega una adquisición cuando la memoria disponible es demasiado baja, independientemente de este tope. La variable de entornoEMET_MAX_LIVE_WORKERSreemplaza este campo y también aceptaauto.runIdleThresholdMs(por defecto5400000, 90 minutos): cuánto tiempo una ejecución sin ancla viva sigue clasificándose como inactiva en lugar de muerta, basándose solo en la frescura de la transcripción. La variable de entornoEMET_RUN_IDLE_THRESHOLD_MSla reemplaza.
Consulta Variables de entorno.
ticket
idPattern: fuente de una regex anclada que debe cumplir el id de un ticket, por ejemplo^PROJ-\d+$. Un patrón inválido es un error de configuración grave.branchPrefix: prefijo en minúsculas (^[a-z0-9-]+$) para la rama local de un worker. Las ramas son<branchPrefix>-<number>-<slug>, ycleanupbarre el glob<branchPrefix>-*.idExample(obsoleto, solo prosa): un id de ejemplo que cumpleidPattern.branchPattern(obsoleto, solo prosa): plantilla completa del nombre de rama.
commands
Todos son solo prosa.
selfCheck: comandos que un worker ejecuta antes de dar por terminado su cambio, por ejemplo["npm run check"]. Conlanding.modeenmergehace las veces de la CI.workerScopedSuite: comando que un worker ejecuta para probar solo el área que tocó.emet verifyexige que pase.fullSuite.run: comando de la suite de todo el repositorio, ejecutado una vez en la rama de integración después de fusionar las ramas de una oleada. Una ejecución en rojo bloquea el PR yautoChain.fullSuite.singleton:truesi solo un worktree puede ejecutar la suite a la vez.fullSuite.runInBackground,fullSuite.reset(obsoletos): bandera de segundo plano y comandos de restablecimiento de estado.
worktree
lockReason: plantilla del motivo degit worktree lockque un worker escribe al arrancar, completada poremet lock-reason. El valor por defecto esemet run={runId} ticket={ticket} anchor={anchorPid} slug={coordinatorSlug} at={iso}. Reemplázala solo para añadir campos:emet lock-reasonrechaza una plantilla que omita el token literalemet, o cualquiera derun=,ticket=,anchor=,at=oslug=.copyFromMain(solo prosa): rutas copiadas del checkout troncal a un worktree nuevo antes del bootstrap, por ejemplo archivos de entorno sin seguimiento.bootstrap(solo prosa): comandos de shell que se ejecutan una vez en un worktree nuevo antes de que arranque un worker, por ejemplo["npm ci"]. Los ejecuta la fase 6 de/emet, nunca la CLI.stateDir(obsoleto, solo prosa): directorio para los logs locales de la ejecución, por ejemplo.emet.
usage
oversizedReadLines(por defecto400, mínimo1): un Read sin offset ni límite sobre un archivo con más de esta cantidad de líneas cuenta como sobredimensionado enemet usage.stalledMinutes(por defecto10, mínimo1): umbral--minutespor defecto deemet usage --stalled.
sizing
inlineMaxLines(por defecto100, mínimo1): el cuerpo de ticket más grande, en líneas, que se mantiene en línea en el prompt de un worker.
schema
Solo prosa. La propiedad del esquema de datos de este repositorio, usada por la regla de evitación de conflictos de la fase 3 al dividir tickets. Vacío u omitido omite la regla.
ownedPaths: rutas que definen el esquema compartido, por ejemplo["prisma/schema.prisma"]. A lo sumo un worker por oleada puede tocarlas.sharedDatabase(obsoleto):truesi los workers comparten una misma base de datos física.
commit
Solo prosa.
trailer: clave del trailer de git que un worker añade a los commits que referencian el ticket, por ejemploRefs.trailerPosition:bodyofooter.
repo
trunk: la rama hacia la que se fusionan los cambios de todos los workers, y la base de cada comparación de git de cleanup y preflight, por ejemplomain.remote(por defectoorigin): el remoto de git en el que vivetrunk.integrationBranch(obsoleto, solo prosa): rama opcional de larga vida sobre la que se integra una oleada antes de la rama troncal.commitTypes(obsoleto, solo prosa): tipos de Conventional Commit permitidos para los commits de los workers.
design
Opcional, solo prosa. null u omitido omite el paso de diseño/revisión de UI.
canvasIndex(obsoleto): ruta a un archivo de lienzo de diseño que los workers consultan antes de cambios de UI.