Zonas Prohibidas
Declaras qué partes del repositorio el agente no toca: migraciones, infraestructura, secretos, licencias. Deja de ser una advertencia enterrada en un prompt y pasa a ser una regla que se verifica sola.
P0 · se detiene
Una metodología de gobierno del contexto para equipos que construyen con AI coding agents. Se adopta con un comando.
Por Charlie Herrera, Lead Product Designerfalcux.com
# AGENTS.md
Contexto durable del proyecto. Lo lee cualquier agente,
en cualquier herramienta, al abrir la sesión.
## Zonas Prohibidas
No se modifican sin aprobación explícita:
/migrations esquema vivo en producción
/infra terraform, DNS y secretos
.env* credenciales
## Verificación
pnpm build && npx @falcux/ai-first audit
✓ Entropía: 0 / 100
## Decisiones
Toda decisión arquitectónica va como fila nueva
en ADR.md, con contexto y consecuencias.
Los agentes de código no pierden capacidad entre una sesión y la siguiente. Pierden contexto. Y no lo pierden de golpe: se degrada de a poco, en silencio, mientras el proyecto avanza.
Al principio nadie lo nota. Una decisión que no quedó escrita. Un archivo que la spec menciona y que ya no existe. Una convención que la mitad del equipo sigue y la otra mitad no. Cada una es barata por separado. Juntas son la razón por la que el mismo agente que la semana pasada entendía el proyecto hoy propone reescribir algo que ya funcionaba.
Un framework de workflow asume que tu contexto está sano. Falcux AI-First resuelve el problema anterior. No reemplaza tu forma de construir: se instala encima.
Declaras qué partes del repositorio el agente no toca: migraciones, infraestructura, secretos, licencias. Deja de ser una advertencia enterrada en un prompt y pasa a ser una regla que se verifica sola.
P0 · se detiene
Toda decisión arquitectónica deja una fila con su contexto y sus consecuencias. Seis meses después nadie tiene que reconstruir por qué se eligió esto en vez de aquello — y el agente tampoco.
P1 · requiere fila
Quién puede modificar qué, explícito y versionado junto al código. Es el documento que permite que tres personas y dos agentes trabajen sobre el mismo proyecto sin pisarse.
la lee el equipo
El nombre del problema: la distancia que se abre entre lo que el proyecto documenta y lo que el proyecto es. Se mide con verificaciones que corren en código puro —sin modelo y sin API key— y salen con exit code, así que sirven igual en un hook local y en integración continua.
la mide audit
init deja en tu repo lo que los protocolos dan por hecho, y audit comprueba que siga siendo verdad. Se instala sobre el flujo que tu equipo ya tiene, sin reemplazarlo.
Una vez, al entrar al proyecto
Escanea el repositorio y escribe el contexto base: Zonas Prohibidas sugeridas, superficies de decisión y los documentos que ya existen. Si el proyecto no está documentado y hay terminal, te entrevista para elegir las skills y adaptarlas a tu producto.
AI-FIRST.mddocs/ADR.mdskillshook + CI
El lazo, en cada push
Corre el detector y devuelve los hallazgos con su severidad y un puntaje. Código puro: sin modelo, sin API key.
reporte + score
El hook de git corre audit antes de cada push y sólo lo detiene un P0. El flujo de CI lo corre en cada pull request en modo estricto: ahí cualquier hallazgo hace fallar la verificación.
.githooks/pre-pushai-first.yml
Mientras trabajas
Le dicen al agente cómo arrancar un producto, desarrollar una feature, gestionar un cambio y cerrar la sesión. Cinco de ellas le mandan cada decisión a ADR.md como fila nueva.
Ver las skillsAGENTS.md, PRD, arquitectura, guía de diseño y los demás. Ya no se copian a mano: protocolo-arranque escribe cada documento a partir del suyo.
Ver los templatesinit lee el repositorio y escribe lo que dedujo: Zonas Prohibidas sugeridas, superficies de decisión y los documentos que ya existen, en un AI-FIRST.md para que lo revises. Instala además las skills, abre el registro de decisiones y el log de sesión, y mantiene en tu AGENTS.md un bloque entre marcas sin tocar una línea fuera de ellas. Si el proyecto no está documentado y hay terminal, antes te entrevista; si no, lo dice y sigue. Nunca sobreescribe: lo que ya existe lo salta y te lo dice.
$ npx @falcux/ai-first init
ai-first init — falcux-ai-first-site
escrito AI-FIRST.md
saltado ADR.md (ya existe)
escrito docs/SESSION_LOG.md
escrito docs/changes/CHANGE_LOG.md
escrito docs/changes/pending/.gitkeep
escrito .agents/skills/protocolo-features
escrito .agents/skills/protocolo-cambios
escrito .agents/skills/protocolo-cierre
escrito .agents/skills/version-bump
escrito .agents/skills/test-fix
saltado .claude/skills (es un directorio real, no un enlace; se deja como está)
escrito .githooks/pre-push
escrito core.hooksPath
escrito .github/workflows/ai-first.yml
escrito AGENTS.md
Sin entrevista: no hay terminal interactiva.
2 Zonas Prohibidas sugeridas: LICENSE, .env*
2 superficies de decisión: **/*.config.*, wrangler.*
3 artefactos declarados
Revisa AI-FIRST.md —sobre todo las razones de cada zona— y AGENTS.md, y luego corre `ai-first audit`.
Salida real · 0.8.1 sobre una copia de este repositorio
Sin API key, sin tokens y sin esperar. Son verificaciones sobre git y el sistema de archivos que salen con exit code, así que el mismo comando sirve en un hook local y en integración continua.
5verificaciones
Cada una emite su propia severidad.
0tokens
Corre sin modelo y sin conexión.
3severidades
En el hook sólo P0 corta el push; P1 y P2 avisan y dejan seguir.
P0
Se tocó una Zona Prohibida.
Migraciones, infraestructura, secretos. Es la única severidad que no admite seguir de largo.
corta el flujo · exit 1
Avisan, y dejan seguir
P1
Se tomó una decisión arquitectónica sin fila nueva en ADR.
La decisión existe en el código y no existe en el registro.
P1
Se tocaron más archivos de los que la spec declaraba.
El alcance creció y nadie lo midió.
P2
Hay un artefacto huérfano: referenciado y inexistente.
Un documento apunta a un archivo que ya nadie mantiene.
P2
Cambió la librería de componentes sin actualizar su inventario.
La guía de diseño empezó a mentir.
Cada hallazgo trae su severidad, el archivo exacto y por qué importa. El puntaje de entropía resume qué tan lejos quedó la documentación del proyecto real, y el exit code decide si el flujo sigue.
$ npx @falcux/ai-first audit
ai-first audit — tu-proyecto
árbol de trabajo contra HEAD · 4 archivos tocados
✗ Zona Prohibida tocada
P0 Zona Prohibida «migrations/» tocada — sin aprobación explícita
migrations/0042_add_index.sql
✗ Decisión sin fila en ADR
P1 Hay señales de decisión arquitectónica y ADR.md no ganó ninguna fila
src/lib/queue.ts (superficie «src/lib/*.ts»)
– Alcance excedido — omitido: no hay «alcance.spec» declarado
✗ Artefacto huérfano
P2 PRD.md menciona specs/checkout.md, que no existe
✓ Inventario de componentes desactualizado
Entropía: 68 / 100 (1 P0 · 1 P1 · 1 P2)
exit 1
Ejemplo · formato del reporte de la 0.8.1, hallazgos inventados
Nada de esto es difícil de entender. Es difícil de sostener.
Un equipo adopta la mitad de los documentos, los mantiene dos meses, y después una semana apurada se los come. Por eso la metodología dedica más páginas a los protocolos —cuándo se actualiza qué, y quién responde— que a los formatos, y por eso el paquete los instala como skills y los vigila con un hook, en vez de confiar en que alguien se acuerde.
De la justificación económica a la adopción en equipo, y cada capítulo remite a la pieza del paquete que lo ejecuta. Se lee en orden, o entras directo por el protocolo que necesitas hoy.
La metodología está escrita y en uso; el paquete que la vuelve ejecutable está publicado en npm, con tres comandos que corren y tres mapeados sin escribir. Preferimos decir exactamente qué corre y qué no, antes de que lo descubras en la terminal.
No. Se instala encima del flujo que ya tienes. Falcux AI-First no decide cómo construyes un feature: decide qué no se toca, qué queda registrado y quién puede cambiar qué. Si ya usas un ciclo de comandos para construir, sigue igual.
El contexto durable vive en AGENTS.md, que es un formato cross-tool: lo lee cualquier agente, y lo que init escribe —AI-FIRST.md, el registro de decisiones, el log de sesión y la carpeta de cambios— tampoco depende de ninguna herramienta. Las skills se instalan en .agents/skills/, el directorio del estándar Agent Skills que leen Codex, Cursor y OpenCode, con un enlace para Claude Code. Los adaptadores por herramienta siguen mapeados y sin escribir.
El comando init lo detecta y lo declara en AI-FIRST.md como artefacto existente. Dentro de él sólo mantiene un bloque entre dos marcas, ai-first:inicio y ai-first:fin, con las skills instaladas y cuándo se invoca cada una; fuera de las marcas no cambia una letra. El resto de lo que ya existe lo salta y te lo dice. La metodología entera parte de que la documentación existente es evidencia, no ruido.
No. Corre sobre git y el sistema de archivos con expresiones regulares: sin modelo, sin conexión y sin costo por token. Sale con exit code, así que el mismo comando sirve en un hook local y en integración continua.
Escribe AI-FIRST.md, el mapa que el detector verifica; abre docs/ADR.md, el log de sesión y la carpeta de cambios; instala las skills en .agents/skills/, con un enlace para Claude Code; deja un hook de git en .githooks/pre-push y un flujo de integración continua en .github/workflows/ai-first.yml, y mantiene su bloque en AGENTS.md. Nunca sobreescribe: lo que ya existe lo salta y te lo dice.
Sirve, pero está pensado para equipos. El dolor que resuelve —que cada quien prompee distinto y que las decisiones se pierdan entre sesiones— se multiplica cuando hay más de una persona y más de un agente sobre el mismo repositorio.
Un comando en la raíz del repo. No sobreescribe nada, y el primer audit te dice dónde está parado tu contexto.
$ npx @falcux/ai-first audit
ai-first audit — falcux-ai-first-site
árbol de trabajo contra HEAD · 0 archivos tocados
✓ Zona Prohibida tocada
✓ Decisión sin fila en ADR
– Alcance excedido — omitido: no hay «alcance.spec» declarado
✓ Artefacto huérfano
– Inventario de componentes desactualizado — omitido: faltan «artefactos.inventario_componentes» o «artefactos.componentes_dir»
Entropía: 0 / 100 (0 P0 · 0 P1 · 0 P2)
exit 0
Salida real · 0.8.1 sobre este repositorio