Una sola copia de cada instrucción, leída por tres harnesses
El repo tiene una única fuente de reglas, AGENTS.md con sus secciones en
.agents/instructions/, y una única carpeta de workflows,
.agents/skills/. Claude Code, OpenCode y Codex leen las dos.
AGENTS.md es el núcleo que carga en cada sesión; cada sección se lee
cuando el pedido la necesita. Claude Code entra por CLAUDE.md, que es
solo un import de una línea (@AGENTS.md), y por
.claude/skills, un alias generado. Nada se duplica: lo que difiere entre
harnesses (formato de MCP, API de hooks) vive en adaptadores finos.
La segunda idea es la del nombre de la casa, Planos: el agente escribe un plan antes de escribir código. Un plan de implementación por historia, un plan maestro de diseño, un desglose de épica. El plan se revisa, después se construye.
El detalle de cómo una fuente alimenta a los tres harnesses está en la página publicada Una fuente, tres harnesses.
Maneras de empezar
| Camino | Cuándo | Qué corrés |
|---|---|---|
| Scaffolder (recomendado) | Proyecto nuevo, sin historia de git que conservar | bunx create-agentic-dev@latest <repo> |
| Use this template en GitHub | Querés el repo creado desde la UI de GitHub | clonar, después bun install y bun setup |
| Clonar el boilerplate | Vas a contribuir al boilerplate mismo | bun install y bun setup |
| App existente | Ya tenés una aplicación andando y querés sumarle la capa agentic sin pisar nada |
bunx create-agentic-dev --adopt dentro de la app, después
/project-adoption en una sesión del agente
|
bun setup es el instalador: primero un chequeo previo que no escribe
nada, después elegís los harnesses, cablea el .env para cada servidor que
declara .mcp.json, instala las skills de la comunidad y genera las
superficies por harness. Cuando la terminal tiene pantalla, la corrida se ve en una
página local que abre sola: las fases en una línea de tiempo, cada pregunta como una
tarjeta y un reporte final con lo que quedó pendiente. La terminal muestra siempre el
log completo, y bun setup --headless deja todo en la terminal. Si algo
queda a medias, bun run setup:doctor te dice qué falta y dónde se
arregla. Para abrir el agente corré su propio binario en la carpeta del proyecto
(claude, opencode o codex) o usá su app de
escritorio. No hay script envoltorio: nada carga el .env en el proceso
del agente, así que ningún secreto llega al shell de la IA. Cada servidor MCP lo lee
por su cuenta con el loader de .env.
Un proyecto creado desde el boilerplate se mantiene al día con
bun sync. El updater sincroniza lo que es del boilerplate y nunca pisa lo
que es del proyecto: junta todas tus respuestas antes de escribir el primer archivo, y
su reporte final (en la misma página local, o en la terminal con
--headless) trae la tabla por superficie y un prompt de paridad para las
filas que necesitan tu decisión.
Antes del primer bun setup necesitás Bun y al menos uno de Claude Code,
OpenCode o Codex. El resto, el instalador te lo señala cuando lo necesita. Guía de
problemas del instalador:
INSTALLER.md.
Skills con modos, scripts y variables
Lo que el agente sabe hacer
Un workflow en .agents/skills/<nombre>/. Se invoca por su nombre;
si tiene varios modos, por nombre más modo.
Lo que la máquina ejecuta
Comandos deterministas en package.json: sync con Jira, gates, setup.
Las skills los llaman; vos también podés.
Lo que es de tu proyecto
.agents/project.yaml guarda la identidad y la política del proyecto;
.env guarda las credenciales. Ninguna skill las inventa.
Cómo se invoca una skill
| Harness | Forma |
|---|---|
| Claude Code | /project-context data |
| OpenCode, Codex | en prosa: "cargá project-context, modo data" |
No hay archivos de comando. Una skill con varios modos los lista en su propia sección
## Mode routing, y esa sección es la única lista. Muchas skills se cargan
solas cuando tu pedido coincide con su descripción: "abrí un PR" carga
/git-flow-master sin que la nombres. La decisión está registrada en
ADR-0006.
El catálogo no está en esta página
La lista de skills cambia con cada release, así que no se copia acá. El catálogo es
.agents/skills/REGISTRY.md, generado por
bun run skills:registry: una entrada por skill con su propósito y sus
reglas compactas. En tu proyecto, abrí tu propia copia; la del boilerplate está en
GitHub. El ruteo por tarea (qué skill para qué pedido) está en
.agents/instructions/agent-context-map.md y
.agents/instructions/agent-skills-and-mcps.md.
Para leer el registro conviene saber que hay cuatro clases de skill: de
workflow (conducen una fase entera, como /sprint-development), de
contexto (guardan un mapa del negocio), utilitarias (envuelven una CLI,
como /acli) y el núcleo agentic-dev-core, que no se
invoca: guarda la doctrina que citan las demás.
De la idea al producto mantenido
| Fase | Cadencia | Skill | Deja |
|---|---|---|---|
| Fundación | una vez | /project-foundation |
modelo de negocio, PRD, SRS, glosario de dominio, primeros ADR, mapas del
negocio (delegados a /project-context)
|
| Sistema de diseño | una vez (tokens) y por historia (pantallas) | /design-system |
DESIGN.md; después, mockups por historia encargados a una
herramienta de diseño y ratificados por un humano
|
| Scaffolding | una vez | /project-bootstrap |
backend, frontend, OpenAPI, auth, entornos, tipos de Supabase |
| Backlog | continuo | /product-management |
épicas e historias en Jira con criterios de aceptación refinados |
| Sprint | por historia | /sprint-development |
plan, código, PR revisado, deploy a staging, historia en Ready For QA |
| Mantenimiento | cuando cambia algo |
/project-context (modos data, features,
api, master-plan, dev-roadmap)
|
mapas del negocio, plan maestro y roadmap al día |
Alrededor del ciclo hay skills de apoyo que no son una fase:
/unit-testing para TDD dentro de una historia,
/testability-guide para la página que recibe QA,
/pr-review-lead para revisar el PR de otra persona,
/project-adoption para que el agente entienda una app que ya existía,
/jira-administration para la configuración de Jira y
/autonomous-delivery para corridas programadas sin nadie en la línea. Qué
hace cada una, en REGISTRY.md.
Cinco etapas, y la última tiene una puerta
- ETAPA 1PlanPlan de implementación, publicado en el campo de Jira de la historia.
- ETAPA 2ImplementaciónCódigo, tests, tipos y lint en verde.
- ETAPA 3Code reviewPR abierto; un revisor independiente marca severidades.
- ETAPA 4StagingMerge con tu OK y deploy verificado por SHA.
- ETAPA 5 · PUERTAProducciónSolo con QA en verde y aprobación del negocio.
Lo conduce /sprint-development. Cada etapa alimenta a la siguiente, así
que nunca corren en paralelo; el paralelismo vive adentro de una etapa. El merge nunca
es automático: lo pedís vos. Bajo una estrategia sin rama de integración (como
solo-main), el "staging" de la etapa 4 es el Preview deployment de la
rama del PR.
Los estados que ve el equipo en Jira
El fin de la etapa 1 mueve la historia a In Progress; abrir el PR la lleva a
In Review; el deploy verde a staging la deja en Ready For QA. Si la
automatización de Jira no dispara la transición, la skill la dispara y vuelve a leer
el estado. Ninguna skill de desarrollo mueve una historia más allá de Ready For QA:
probarla y liberarla es de QA y de quien hace el release. La tabla completa por tipo
de issue vive en
.agents/skills/agentic-dev-core/references/artifact-lifecycle.md.
Dónde se entrega a QA. Lo que QA recibe (la página /qa con el SHA
del build, el deploy de staging, la historia en Ready For QA) está descrito en
Cómo el dev le entrega trabajo a QA. La metodología de testing completa vive en el repo hermano,
agentic-qa-boilerplate.
Una conversación que dirige, subagentes que ejecutan
La sesión con la que hablás es el centro de mando. Leer muchos archivos, editar
varios, correr verificaciones o hablar con Jira se delega a subagentes, cada uno con
un briefing completo: objetivo, documentos a leer, reglas del proyecto resueltas desde
REGISTRY.md, skills a cargar, instrucciones exactas, formato del reporte
y reglas críticas. La plantilla es
.agents/skills/agentic-dev-core/references/briefing-template.md. Un
subagente ve solo su briefing, así que una regla que no viaja ahí no lo obliga.
| Subagente (por defecto) | Worker supervisado (opcional) | |
|---|---|---|
| Vive | dentro del turno | hasta que se lo cierra |
| Contexto | se pierde al reportar | persiste; podés seguir hablándole |
| Git | el índice de la sesión principal | su propio worktree y rama, una historia por worker |
| Sirve para | leer, mapear, verificar | una historia entera hasta el PR |
Los workers supervisados los coordina /orca-orchestration y solo existen
si el runtime de Orca está disponible; si no, el repo ni los menciona y el trabajo
corre en subagentes. Dos piezas más para trabajo largo:
-
Worktrees. Para aislar trabajo en paralelo:
git worktree add, despuésbun run worktree:provision(copia.env, instala dependencias, crea el alias de skills), y antes de borrarlobun run worktree:auditcon--rescue. -
Relevo de sesión. Cuando la ventana de contexto se llena,
/session-handoffescribe un documento de relevo y lanza la sesión sucesora en el mismo worktree y el mismo harness.
Primero la respuesta, después el menú
| Capa | Gobierna | En la práctica |
|---|---|---|
| Concisión | cuántas palabras | sin relleno ni cortesías, sin plugin: sale de estas reglas y del OUTPUT STYLE; el código, los commits y los avisos de seguridad se escriben completos |
| Butler | la granularidad | un titular que resuelve tu pregunta y un menú de temas atómicos para que tires del que te importe |
| PM Voice | el registro | el titular habla del valor para el usuario, no del archivo tocado; pasa a registro técnico ante rutas, errores, seguridad o deploys |
| Visual Mapping | la forma | tablas, flujos y árboles cuando reemplazan a un párrafo |
El titular abre directo con el valor, sin frase de enganche antes. El agente responde en el idioma en que le escribís; el código, los commits, los PR y los tickets van siempre en inglés. Para volver a un tono detallado alcanza con pedirlo ("habla normal"). El espejo humano del contrato es docs/ai-personality.md, y hay un deck sobre la capa comportamental.
La estrategia es una variable, no un párrafo
Cómo se ramifica, se integra y se publica lo decide el bloque
git_strategy de .agents/project.yaml. Toda operación de git
pasa por /git-flow-master, que lee ese bloque y adapta ramas, commits,
pushes y PR. El bloque llega con solo-main como valor por defecto; si
nadie lo eligió para tu proyecto, la skill te ofrece la configuración inicial la
primera vez que hagas algo con git.
-
Push a una rama protegida: lo resuelve
git_strategy.policy.direct_push_to_protected. Conforbiddenva por PR, conconfirmpregunta cada vez, conallowedempuja sin preguntar. -
Política contra el host:
bun run git:policy verifycompara lo declarado con lo que GitHub aplica de verdad (protección clásica y rulesets). -
Commits forenses: todo commit de un agente termina con
Worktree:ySession:, que dicen qué checkout y qué sesión lo produjeron. Ninguna línea nombra a una herramienta de IA. - Historia intocable: nunca se reescribe lo que ya está pusheado, nunca se fuerza un push sobre una rama compartida, y un PR nunca se mergea solo.
Las skills piden capacidades; el harness las provee
Una skill no pide "el servidor X": declara la capacidad que necesita
(library-docs, web-search, db,
automation-flows, diagrams) y el agente la resuelve por el
sufijo del nombre de la herramienta, con el prefijo que sea. Los servidores
comprometidos en el repo son los que declara .mcp.json, con su
equivalente en opencode.jsonc y .codex/config.toml. La
búsqueda web se conecta a nivel del harness, nunca en esos archivos.
Si falta una capacidad, el agente se detiene. Te dice cuál es, qué servidor la
suele proveer y cómo habilitarla. Lo mismo ante un 401 o 403 de un MCP: el fallo de
credenciales es silencioso en todos los harnesses, así que el agente no improvisa un
desvío. Arreglás el .env y reiniciás la sesión.
Las credenciales viven en .env (plantilla en .env.example).
Cada servidor MCP que las necesita arranca con el loader de .env (varlock run --filter), que lee el .env al arrancar el servidor y le pasa solo sus variables,
también en un lanzamiento sin línea de comandos (app de escritorio, worker
supervisado). Nada se copia a otro archivo. El host de Atlassian no es una variable de
entorno: vive en issue_tracker.atlassian_url del
project.yaml y se imprime con bun run jira:url.
Jira es la verdad; el repo guarda lo que no está en Jira
| Lugar | Qué guarda | Cómo se mantiene |
|---|---|---|
.context/PBI/ |
caché local de épicas, historias y planes de Jira |
gitignored; se reconstruye con bun run context:hydrate. Nunca se
edita a mano: se escribe en Jira y se sincroniza
|
.context/PRD/, .context/SRS/,
.context/business/
|
definición del producto, arquitectura, glosario de dominio | los crea /project-foundation; el glosario solo crece |
.context/ADR/ |
decisiones de arquitectura difíciles de revertir | se agregan, se reemplazan, nunca se borran |
skills business-*-context |
mapas del negocio en HTML: datos, features, API |
se leen con bun run context:map <skill>; los genera
/project-context
|
.context/design/master-design-plan.md |
especificación por pantalla y mapa historia → pantalla | la fase de pantallas de /design-system |
Y hay una memoria que cruza sesiones: Engram, instalado por
bun setup, guarda decisiones, bugs resueltos y hallazgos para que la
próxima sesión no arranque a ciegas. El deck
la caché PBI de Jira
explica por qué .context/PBI/ no se commitea.
Pedidos frecuentes
| Quiero | Pedile al agente |
|---|---|
| definir un producto nuevo | /project-foundation |
| fijar paleta, tipografía y tokens | /design-system |
| un mockup para una historia que no tiene pantalla | /design-system, fase de pantallas |
| montar backend, frontend y auth | /project-bootstrap |
| crear una épica o refinar criterios de aceptación | /product-management |
| implementar una historia de Jira | /sprint-development con la clave de la historia |
| escribir tests unitarios con TDD | /unit-testing |
| abrir un PR, resolver un conflicto, partir un PR enorme | /git-flow-master (se carga solo ante un pedido de git) |
| revisar el PR de alguien | /pr-review-lead |
| la página que QA necesita para probar | /testability-guide |
| refrescar el mapa de datos del negocio | /project-context data |
| saber cómo se guarda una entidad | bun run context:map business-data-context |
| alinear los Components de Jira con los módulos reales | /jira-administration components |
| varias historias en paralelo, una sesión por historia | /orca-orchestration |
| seguir este trabajo en una sesión nueva | /session-handoff |
| traer los cambios del boilerplate | bun sync |
Cuando algo no anda
| Script | Responde |
|---|---|
bun run setup:doctor |
qué falta en la instalación: credenciales, harnesses, contrato multi-harness |
bun run repo:check |
el gate completo del repo: formato, lint, tipos, variables, docs, skills |
bun run agents:compat:check |
si las superficies generadas por harness siguen en regla |
bun run docs:check |
links muertos y hechos volátiles en la documentación |
bun run skills:check |
que cada skill respete su contrato |
bun run vars:check |
que cada {{VARIABLE}} resuelva contra project.yaml
|
bun run jira:check |
que el manifiesto de Jira coincida con el catálogo de la instancia |
bun run harness:env:check |
que no quede ninguna copia en texto plano de credenciales MCP de una instalación vieja |
Los comandos exactos los define package.json. Si una guía y
package.json no coinciden, gana package.json.
Siguiente lectura según lo que necesites
Las reglas del agente
Lo que el agente carga en cada sesión, con el router a sus secciones. Denso, escrito para máquinas.
→ AGENTS.md