Documentación de equipo

Reglas permanentes para agentes de IA, arquitectura y modelos

Manual para compartir: cómo se inyectan CLAUDE.md, AGENTS.md y archivos propios de cada herramienta en el contexto. No es una guía solo de Cursor. Cubre Claude Code, OpenCode, Copilot, VS Code, Cline, Roo, Aider, Windsurf, Codex, Amazon Q, Gemini CLI, Junie, Zed, Goose y otras. Qué ocurre en cada tipo de chat, cómo anclar arquitectura, qué modelo elegir, y casos reales. Basada en documentación pública (septiembre 2026).

Septiembre 2026 · Los nombres de modelos cambian; la lógica no. Este documento no describe un producto de cliente ni un portfolio concreto.

Empezá por un click.

Cada tarjeta lleva el número de arriba

Índice: guia-inicio.html. Fichas legacy / nuevo (HTML práctico, no solo este manual): casos-practicos-legacy-y-nuevos.html.

Introducción

Cómo usar este documento (5 minutos)

Importante — claves 1 y 3. Lista completa: Puntos clave.

Los capítulos 1–19 siguen siendo el manual. Este bloque es el atajo: elegí tu rol, abrí esos anclas, y para el chat de hoy copiá un prompt.

Prompts listos para pegar: docs/casos/prompts-base.md.

Esta guía no reemplaza la documentación oficial de Cursor, Claude Code, OpenCode, Copilot ni de ningún proveedor. Si un detalle de producto choca con lo escrito aquí, prevalece el enlace en Referencias. El foro no es contrato. Los nombres de modelos cambian; la lógica (planear con uno capaz, ejecutar con uno rápido, MD corto) no.

También: tokens (MD corto, no pegar el repo, no duplicar AGENTS.md + .mdc) · catálogo de chats · glosario.

Introducción

1. Para qué sirve y a quién

Un agente de IA (el asistente que lee y modifica código) arranca cada conversación casi en blanco respecto de este repositorio. Sin instrucciones fijas, cada persona vuelve a explicar la estructura, las convenciones y lo prohibido. En un equipo eso produce arquitectura inconsistente, cambios que se apartan de los patrones y tiempo perdido.

La propuesta: dejar ese conocimiento en el repo, en archivos que la herramienta lee sola. Quedan como documentación viva para la IA y para quien entra al equipo. Complementan —no reemplazan— linters, CI, revisiones de código y controles de seguridad.

Esto es contexto (información que el modelo tiene en cuenta), no un candado. El Markdown no bloquea por sí solo una acción peligrosa. Si algo no debe ocurrir nunca (secretos, producción, datos reales), hace falta otro mecanismo: permisos, hooks o política del equipo. Anthropic lo deja explícito: para bloquear una acción, un hook (por ejemplo PreToolUse), no solo el CLAUDE.md. Ver How Claude remembers your project.

Alcance y límites

Esta guía resume docs públicas de septiembre 2026. No reemplaza las páginas oficiales: si un detalle de producto choca, vale el enlace en Referencias. El comportamiento exacto depende de la versión de cada herramienta (Claude Code, OpenCode, Copilot, Cline, Cursor, etc.). Ejemplo Cursor/Claude: exclusiones de reglas on-demand antes de v2.1.211, o /init leyendo AGENTS.md solo con un flag. Si algo no coincide: en Claude Code usá /context y /doctor; en Cursor, Customize → Rules. AGENTS.md no es universal: es la convención portable (agents.md); varias herramientas tienen archivo propio. Ver Otras herramientas. La duplicación AGENTS.md + .mdc always-on está reportada en el foro, no como contrato de Rules. Los nombres de modelos son heurística, no garantía.

Archivo de reglas

2. Qué es el archivo de reglas

Un .md (Markdown) es texto plano. CLAUDE.md y AGENTS.md cubren el mismo tipo de instrucciones, pero no las lee la misma herramienta:

  • CLAUDE.md — lo que lee Claude Code. Anthropic: Claude Code no lee AGENTS.md salvo que lo importes (@AGENTS.md) o haya un symlink. Documentación CLAUDE.md.
  • AGENTS.md — convención portable (agents.md). La leen Codex, OpenCode, Cline, Roo, Junie, Zed, Goose (por defecto), VS Code (setting) y otras; no Claude Code ni Amazon Q ni Continue (archivo propio). Cursor: alternativa simple a .cursor/rules. Tabla: 11.3.

Cursor también puede leer CLAUDE.md en la raíz (compatibilidad). En la ayuda de Cursor, CLAUDE.md se aplica a la conversación de forma persistente; si hace falta una regla condicional, usá .cursor/rules con glob. Confirmá el comportamiento en tu versión (ver Alcance y límites). Dentro del archivo no va el código de la aplicación: van instrucciones permanentes (mapa, comandos de build/test, patrones del equipo, prohibiciones).

Consultar: CLAUDE.md (Anthropic) — Claude Code no lee AGENTS.md salvo import · Cursor RulesAGENTS.md vs .mdc · lista completa.

DóndeQué vaQuién lo ve
Raíz: AGENTS.md / CLAUDE.md Lo que vale en todo el repo, en cada chat Todo el equipo (Git)
Subcarpeta o regla con paths / glob Solo esa zona (API, UI, tests) Cuando se trabaja esa zona
CLAUDE.local.md / reglas de usuario Gustos de una persona No se comparte (gitignore / cuenta)

Cómo funciona el chat

3. Cómo funciona la IA con esas reglas (en profundidad)

La IA no “escanea el proyecto buscando Markdown”. La herramienta (Cursor o Claude Code) inyecta ciertos archivos en la ventana de contexto de la sesión: la memoria de trabajo de ese chat (instrucciones + archivos leídos + el hilo). Esa ventana es limitada. Cada línea del MD ocupa tokens (unidades de texto que cuestan y desplazan otra información). Anthropic recomienda archivos cortos (~200 líneas) porque más texto reduce el cumplimiento. Fuente: CLAUDE.md.

Detalle: inyección, tokens y tipos de regla

3.1 Qué se inyecta y qué no

FuenteHerramientaCuándo entra
CLAUDE.md o .claude/CLAUDE.md en la raíz (y padres) Claude Code; Cursor también puede leerlo Al inicio de la sesión
AGENTS.md en la raíz Cursor (y otras herramientas compatibles) Al inicio de la sesión
CLAUDE.md / AGENTS.md en subcarpetas Ambas (con matices) Bajo demanda: cuando el agente lee archivos de esa carpeta
.claude/rules/*.md sin paths Claude Code Al inicio, como el CLAUDE.md del proyecto
.claude/rules/* con paths: Claude Code Cuando trabaja archivos que coinciden
.cursor/rules/*.mdc Cursor Según tipo: always / glob / agent-requested / manual @regla
README.md, notas.md, docs sueltas No, salvo que se pidan o se importen con @ruta

Claude Code carga CLAUDE.md y CLAUDE.local.md del directorio de trabajo y de los padres. Los concatenan; no se pisan. Lo más cercano al directorio de trabajo se lee al final. Los de subdirectorios no van al arranque: se incluyen cuando Claude lee archivos ahí. Detalle: How CLAUDE.md files load.

Cursor: AGENTS.md en raíz y anidados; .cursor/rules con metadatos. Un .md plano dentro de .cursor/rules se ignora (hace falta .mdc con frontmatter). Fuente: cursor.com/docs/rules.

3.2 Inicio de sesión vs. cada turno

En Claude Code, los CLAUDE.md de la raíz y de los directorios padres se leen al inicio de la sesión y se entregan como mensaje de usuario (no van “dentro” del system prompt). No se releen del disco en cada turno ni se recortan. Si editás el archivo a mitad de conversación, el cambio entra en la próxima sesión, o en la actual con /compact o abriéndolo en /memory. Fuente: Help Center. /context lista qué archivos de memoria cargó esta sesión. Pedirle al agente que lea el path es un parche: trae el texto al hilo, pero no es la inyección automática.

3.3 Contexto frente a candado

El modelo puede ignorar una regla vaga o contradictoria. Dos reglas opuestas: puede elegir cualquiera. Un hook sí puede negar una herramienta (por ejemplo, impedir un comando). Seguridad, secretos y producción no se delegan solo al Markdown.

3.4 Tokens y duplicación

Cursor trata AGENTS.md y .cursor/rules/*.mdc como fuentes distintas (se combinan; no se deduce que un symlink sea “el mismo” archivo). En el foro oficial se reportó que el mismo texto en ambos se inyecta dos veces. No está en la página de Rules como garantía de producto: tratalo como riesgo práctico. Elegí una fuente para lo always-on. Cursor: reglas de proyecto < ~500 líneas; Anthropic: CLAUDE.md < ~200 líneas (un archivo > 4 MiB se omite). Team Rules (planes Team/Enterprise), si existen, se mezclan con las demás; Cursor documenta precedencia Team → Project → User cuando hay conflicto. Práctica del equipo (coste, chat nuevo, capturas): Cuidar los tokens. Rules.

3.5 Claude Code: /init, /context, /memory, /compact

  • /init — explora el repo y propone un CLAUDE.md (si ya existe, sugiere mejoras; no lo pisa). Hay que revisar, borrar lo inventado y commitear. Puede tomar partes de .cursor/rules. Con CLAUDE_CODE_NEW_INIT=1 también puede leer AGENTS.md de otros agentes. Docs.
  • /context — qué archivos de memoria entraron en esta sesión (lista Memory files). Si no aparece, no se inyectó.
  • /memory — ver y editar CLAUDE.md, local y la auto memory (notas que escribe Claude; no es la fuente de verdad del equipo). Pedir “remember” puede anexar una regla al MD. Help: Give Claude context.
  • /compact — resume el hilo. El CLAUDE.md de la raíz del proyecto se relee de disco y se reinyecta. Anidados y reglas con paths: vuelven cuando Claude lee archivos que coinciden. Lo que solo se dijo en el chat puede perderse. Instructions seem lost after /compact.
  • /clear — chat limpio; el MD del proyecto sigue (Help Center: una tarea por conversación).

3.6 Cursor: always, glob, agent-requested, @regla

TipoCuándo entraUso
alwaysApply: true Todos los chats Pocas reglas universales (equivalente práctico al AGENTS.md corto)
Glob (p. ej. src/api/**/*.java) Cuando hay archivos que coinciden en juego Convenciones de API, no de CSS
Agent-requested El agente decide si es relevante Temas ocasionales
Manual @nombre Cuando la persona lo menciona Playbooks que no deben estar siempre

Consultar: tipos de regla Cursor (always / glob / inteligente / @) · carga de CLAUDE.md y /compact · Referencias.

Prácticas

4. Mejores prácticas al escribir los MD

4.1 Corto, concreto, verificable

Anthropic: instrucciones específicas se cumplen mejor. Cada línea debe poder comprobarse en una revisión.

Vago (malo)Concreto (bueno)
Mantener el código ordenado Los handlers HTTP viven en src/api/handlers/. No crear src/controllers/ nueva.
Seguir buenas prácticas La regla de negocio no va en el @RestController ni en el componente Angular. Va en dominio o caso de uso.
Probar los cambios Antes de dar por cerrado un cambio de API: ./mvnw test. Un cambio de UI: tests del feature tocado.
No romper producción No ejecutar migraciones destructivas. No apuntar a credenciales de prod. No hacer push sin pedido explícito.

4.2 Raíz vs. carpeta vs. personal

  • Raíz: mapa de capas, “quién habla con quién”, Git, “no inventar”, “no agrandar el ticket”.
  • Por carpeta / glob: MVVM en Android, módulos Angular, JPA solo en infraestructura, estilo de tests.
  • Personal: atajos, sandbox propio. No commitear gustos individuales como si fueran del equipo.

4.3 Qué va en el MD y qué no

MecanismoPara qué
MD de reglas Arquitectura, “dónde va X”, prohibiciones de alcance, comandos de proyecto que el agente no adivina
Linter / formateador Espacios, imports, estilo mecánico. No copiar la guía de estilo entera al MD. Cursor Learn lo dice: el linter complementa; no sustituirlo con un tratado.
CI Que el build y los tests pasen en el remoto, aunque el agente se salte algo en local
Hooks Bloquear de verdad (secretos, comandos peligrosos)

4.4 Cuándo actualizar

Según Anthropic, agregar una regla cuando: el agente comete el mismo error dos veces; una review muestra algo que debería haber sabido; se está tipeando la misma corrección en cada chat; una persona nueva necesitaría ese dato para ser productiva. No documentar “por si acaso” procedimientos de diez pasos: eso va a un skill o a una regla por ruta. Fuente: When to add to CLAUDE.md.

4.5 Imports (@AGENTS.md)

Claude Code puede importar archivos con @ruta (relativa al archivo que importa). Sirve para un CLAUDE.md de una línea que apunta a AGENTS.md y no duplicar. Los imports se expanden al lanzar la sesión. Para mencionar una ruta sin importarla, va entre backticks. Fuente: Import additional files.

# CLAUDE.md
@AGENTS.md

# Solo Claude Code
- Antes de terminar, correr /context si hay duda de qué reglas cargaron.

4.6 No volcar guías enteras

Un MD de 800 líneas se cumple peor y empuja código útil fuera del contexto. Extraer: un párrafo de arquitectura en la raíz; detalles de API en regla con paths; el resto en el linter o en un doc que el agente lea cuando se lo pidan. Práctica de coste y contexto: Cuidar los tokens.

Tokens / contexto

Cuidar los tokens

Importante — clave 5. Lista: Puntos clave.

Un token es una unidad de texto: se cobra y se descuenta de la ventana de contexto (memoria de trabajo de este chat). El MD, el hilo, los archivos leídos, las capturas y los logs compiten por el mismo espacio. Glosario: Token.

Esto no es un tutorial de facturación. Es cómo el equipo deja sitio para el diff del ticket.

Por qué importa

  • Coste. Cada chat vuelve a inyectar el MD de raíz (y lo always-on). Un tratado de 800 líneas se paga en todos los tickets, también en un typo.
  • Velocidad. Más contexto → más lento. Un modelo que “piensa” encima genera tokens de razonamiento: para un rename, es desperdicio.
  • El medio se ignora. Con un contexto enorme, el modelo atiende peor el centro: la regla del medio del AGENTS.md o el archivo 12 de 40. Anthropic recomienda MD cortos (~200 líneas) porque más texto reduce el cumplimiento. CLAUDE.md. Cursor: reglas de proyecto < ~500 líneas. Rules.

Recortar tokens no es un candado de seguridad. Un MD corto sigue siendo contexto. Secretos, prod y push se cubren con hooks, permisos y CI.

Prácticas (baratas)

HacerNo hacer
Raíz corta: mapa, quién habla con quién, prohibiciones. Detalle de React o JPA en frontend/AGENTS.md, api/AGENTS.md, glob / paths, o un skill que se carga on-demand. 400 líneas de Angular en la raíz “para que siempre las vea” en un ticket de SQL.
Dejar que el agente lea el archivo del síntoma. En el prompt: path y síntoma. Pegar el repo, el Jenkinsfile o cinco clases “por si acaso”. Eso no sustituye la herramienta de lectura y llena el hilo.
Una fuente always-on: AGENTS.md o un .mdc con alwaysApply, no el mismo párrafo en los dos. Claude Code: CLAUDE.md con @AGENTS.md, sin copiar el tratado. Catálogo I. Symlink AGENTS.md → .mdc always-on (riesgo de doble inyección en Cursor; foro, no contrato de Rules).
Chat nuevo cuando el hilo es enorme, cambió el tema, o se editó el MD. Un ticket por conversación. Un chat eterno “para no perder contexto”: el contexto ya está sucio; el modelo prioriza el final y olvida el mapa.
Claude Code: /compact si querés seguir el mismo ticket y releer el MD de raíz. Lo que solo se dijo en el chat puede perderse. Anidados y paths vuelven al tocar esos archivos. Catálogo K. Creer que /compact recarga todos los anidados de una vez, o usarlo para no abrir chat nuevo cuando el ticket ya es otro.
Reglas con glob / paths / anidadas: entran al trabajar esa zona. Always-on: pocas líneas universales. Always-on con el estilo de tests, JPA y CSS juntos. Gasta tokens en cada chat y se cumple peor. Tabla: §3.6.
Capturas y logs: recortar al síntoma. Una imagen del botón, no el PDF del Figma. Un stack de 30 líneas, no el catalina.out. Adjuntar 15 screenshots o un dump con PII. La imagen cuesta contexto; el log enorme empuja el MD fuera.
Modelo rápido (Composer, Grok, Haiku) para el parche chico: menos tokens de “pensar”. El capaz, en otro chat, para el mapa. Opus/Fable para un rename o un reset de page. Pensar también se cobra.

Path-scoped vs. always-on (resumen)

  • Always-on (AGENTS.md de raíz, alwaysApply: true, Team Rules enforced): cada sesión. Reservalo al cauce y a “no inventar / no agrandar / no commit”.
  • Por ruta (anidado, glob Cursor, paths: en Claude): cuando el agente lee o edita archivos que coinciden. El detalle de @RestController no debe viajar a un .tsx.
  • Skills / reglas manuales @: playbooks que casi nunca hacen falta. No los copies al MD de raíz.

AGENTS.md gordo vs. raíz fina + anidados / glob

Ventajas de raíz corta + on-demand

  • Cabe en ~200 líneas (Claude) / deja margen bajo ~500 (Cursor).
  • Un GET de Spring no arrastra reglas de Tailwind.
  • Mejor cumplimiento: menos texto en el medio que el modelo ignora.
  • Un solo always-on: no duplicás con un .mdc idéntico.

Desventajas del MD gordo (y del anidado mal usado)

  • El gordo se paga en todos los chats y se cumple peor.
  • Hay que tocar frontend/ para que entre el anidado (Claude: on-demand).
  • Workspace que no es la raíz: no carga padres + hijos. Catálogo E.
  • Dos copias del mismo párrafo (AGENTS + always-on) = doble de tokens, cero candado extra. I.

Consultar: Anthropic ~200 líneas, /compact, anidados on-demand · Cursor Rules (tamaño, nested, tipos) · no duplicar AGENTS.md + .mdc · prompts (no pegar el MD).

Cómo funciona el chat

5. Qué ocurre al abrir un chat (flujo general)

  1. Se abre la carpeta del proyecto en la herramienta.
  2. Se abre un chat nuevo (sesión nueva).
  3. La herramienta mira rutas fijas, no “todos los .md”.
  4. Copia ese texto al contexto de esta conversación.
  5. La persona escribe el pedido. El modelo responde con reglas + pedido.
  6. Los mensajes siguientes no releen el MD de la raíz, salvo recarga explícita.

Analogía: nota en la puerta. Quien entra la ve. Quien ya está adentro, no, hasta salir y volver a entrar. El detalle de cada variante está en el catálogo siguiente.

Consultar: qué pasa al abrir la sesión y si editás el MD a mitad · Memory · Referencias.

Arquitectura y patrones

7. Arquitectura y patrones (capítulo principal)

Este capítulo es el ancla del documento. El MD no “inventa” una arquitectura: escribe la que el equipo ya eligió para que el agente no la renegocie en cada chat. Las capas y patrones de abajo son ejemplos frecuentes (consultora Java/Angular/Android), no un estándar obligatorio. Si el repo es un monolito MVC o un Next.js sin “dominio”, el MD debe decir eso, no un libro de texto.

Capas, patrones y snippets

7.1 Arquitectura, patrón, convención, guía de estilo

TérminoQué decideEjemplo¿Va al MD?
Arquitectura Partes del sistema y quién puede hablar con quién UI no accede a la base. El dominio no importa Spring. Sí, en la raíz, en 10–20 líneas
Patrón Forma repetida de resolver un tipo de problema MVVM en Android; REST + DTO en la API; caso de uso por acción Sí, el que el repo ya usa
Convención Dónde vive un archivo y cómo se nombra *Controller en web/; features Angular en features/pedidos/ Sí, si el agente se equivoca de carpeta
Guía de estilo Formato mecánico 2 espacios, imports, no any Casi no: linter / CI

7.2 Capas típicas y quién habla con quién

Esquema frecuente en equipos web y móvil (nombres varían; la flecha no):

UI (Angular / Android)
  → solo habla con Application / API (HTTP, casos de uso)
Application (casos de uso)
  → habla con Domain (reglas) y con puertos (interfaces)
Domain (entidades, reglas)
  → no habla con HTTP, JPA, Angular ni Android
Infrastructure / datos
  → implementa puertos (JPA, REST client, disco)
  → el dominio no la importa

Regla útil para el MD: las dependencias apuntan hacia adentro. La UI y los controladores HTTP dependen del caso de uso. El dominio no depende de frameworks. Si el agente pone un EntityManager en una clase de dominio, rompió el mapa.

CapaPuede conocerNo puede conocer
UI DTOs, servicios/fachadas, navegación SQL, entidades JPA, reglas de facturación embebidas en el componente
API HTTP Request/Response, validación de forma, invocar un caso de uso Consultas SQL, “if negocio” largos
Dominio Reglas, invariantes, IDs, dinero, estados @Entity, HttpServletRequest, HttpClient
Datos Tablas, mappers, implementaciones de repositorio Decidir si un pedido se puede cancelar (eso es dominio)

7.3 Patrones habituales en Android, Angular y Java/Spring

MVC, MVP, MVVM (móvil y a veces web)

  • MVC: la vista notifica al controlador; el controlador actualiza el modelo. En Android clásico suele mezclarse con Activities gordas: el agente tiende a meter lógica en la Activity si no se lo prohíben.
  • MVP: el Presenter habla con una interfaz de vista. Útil en pantallas legacy. El MD debe decir: “esta app usa MVP en feature X; no introducir ViewModel ahí sin pedido”.
  • MVVM: la vista observa un ViewModel (LiveData/StateFlow/signals). El ViewModel no conoce Views de Android. En Angular, el análogo sano es: componente flaco + servicio/fachada, no HTTP en el .ts de la plantilla.

REST

Recursos, verbos HTTP, cuerpos DTO. El agente suele devolver la entidad JPA o inventar URLs. El MD debe fijar: prefijo (/api/v1), “nunca exponer *Entity”, errores con código estable.

Hexagonal / puertos y adaptadores (alto nivel)

El dominio define puertos (interfaces). La infraestructura es el adaptador (JPA, un cliente HTTP). El agente “ayuda” creando un servicio único que habla con el repositorio JPA desde el controlador. La regla: “nuevo acceso a datos = interfaz en dominio/aplicación + implementación en infraestructura. No inyectar JpaRepository en el controlador.”

Módulos por feature vs. por capa

Por capasPor feature
Carpetas controllers/, services/, repos/ pedidos/, usuarios/ con sus capas adentro
Riesgo del agente Poner un pedido nuevo en services/ genérico eterno Crear un feature paralelo (orders/) cuando ya existe pedidos/
Qué escribir “Este repo es por capas; no crear features/ “Un feature = una carpeta. No crear common-services-2

El MD debe elegir uno (el que ya está en el disco). El fallo clásico es que el agente introduzca el otro “porque es más moderno”.

7.4 Qué poner en el MD para que respete la arquitectura

Tres bloques en la raíz suelen bastar:

  1. Diagrama en texto de capas y flechas.
  2. Lista de “no” (carpetas nuevas, frameworks en dominio, microservicios, rewrites).
  3. Dónde va un cambio típico (un endpoint, una pantalla, un test).
## Arquitectura (la de *este* repo; no un estándar universal)

Capas: UI → application → domain ← infrastructure.

- Un endpoint nuevo: Controller (web) + UseCase (application) + puerto si hace falta.
- No crear paquetes `modules/`, `hexagon/` ni un microservicio nuevo.
- Domain sin Spring, JPA ni Angular.
- Controllers sin SQL ni reglas de negocio.
- Android: MVVM; el ViewModel no importa Activities/Fragments.
- Angular: el componente no usa HttpClient; pasa por un repositorio/fachada.

Si un pedido requiere romper esto: detenerse y explicarlo. No hacerlo en silencio.

Vago: “respetar clean architecture”. El agente puede interpretar cualquier árbol de carpetas como “clean”.

7.5 Reglas anidadas: ejemplos

Raíz AGENTS.md — solo el mapa y Git.

# frontend/AGENTS.md
- Standalone components. Estado local: signals.
- HTTP solo en `*.repository.ts` o `*-api.ts`.
- No agregar NgRx salvo pedido explícito.
# backend/AGENTS.md
- Controllers delgados: mapear request → input, llamar use case, mapear output.
- Tests de dominio sin Spring.
- Persistencia: solo `infrastructure/persistence`.
---
paths:
  - "src/test/**/*.java"
---
# Tests
- Un test verifica comportamiento, no la implementación línea a línea.
- No mockear el dominio para “afirmar que se llamó al mock”.
---
description: API HTTP Java
globs: src/main/java/**/web/**/*.java
alwaysApply: false
---
No devolver entidades JPA. Usar *Response. Validación de forma aquí; invariantes en dominio.

7.6 Cómo rompe la arquitectura un agente

  • Reescribe capas: “pasé todo a hexagonal” en un monolito por capas que ya compilaba.
  • Carpetas nuevas: src/core/, src/modules/, un segundo árbol paralelo.
  • UI + negocio: cálculo de descuento en el componente o en el Activity.
  • Microservicios imaginarios: extrae un jar/servicio nuevo sin ticket de infra.
  • Framework en el dominio: @Entity o @Service en la clase de regla.
  • HTTP desde la vista: HttpClient en el componente; Retrofit en el Fragment.
  • Un “Util” eterno: PedidoHelper con reglas que debían ser un caso de uso.

El MD debe nombrar estas tentaciones. El modelo de arquitectura (Opus/GPT) las evita mejor; Composer las ejecuta más rápido si el prompt fue “mejorá la estructura”.

7.7 Modelos: decidir arquitectura vs. implementar

TrabajoModeloPor qué
¿Este cambio respeta el mapa? ¿Hay que tocar tres capas? Claude Opus 5 (u Opus reciente), GPT-5.5, GPT-5.6 Sol Razonan sobre dependencias; explican el porqué
Migración larga, rearmar módulos Claude Fable 5 u Opus con más esfuerzo Horizonte largo; Composer se queda corto
Plan ya escrito: un endpoint, una pantalla, un test Composer 2.5, Grok 4.6/4.5, Sonnet 5 Velocidad; el MD ya fijó el patrón
Auto Rutinario No usarlo para “rediseñá” o “¿hexagonal?”

Mismo MD, distinto modelo: ver caso L. Flujo: plan con Opus/GPT → implementación con Composer/Grok/Sonnet. El archivo no sustituye esa elección; la hace estable.

7.8 Casos de arquitectura (antes / después)

Arquitectura 1

El controlador habla con la base

Síntoma

Ticket: “filtrar pedidos por estado”. Stack Java/Spring ya por capas.

El agente: inyecta PedidoRepository (JPA) en el @RestController y escribe la consulta ahí. Compila. Rompe el mapa.

Regla

“Controllers: solo HTTP + un use case. Cero repositorios JPA. La consulta vive en infraestructura, detrás de un puerto.”

Resultado: ListarPedidosUseCase + puerto + query en persistencia. El review deja de pelear la capa.

Arquitectura 2

HttpClient en el componente Angular

Síntoma

“Mostrá el detalle del pedido en la ficha.”

El agente: pega this.http.get(...) en el componente. Duplica URLs. Impide reusar y testear.

Regla

“Prohibido HttpClient en componentes. Usar PedidosRepository existente en data/.”

Resultado: el componente llama a la fachada; un test de componente no mockea HTTP crudo.

Arquitectura 3

ViewModel que importa la Activity

Síntoma

App Android en MVVM. “Al tocar confirmar, mostrar un diálogo.”

El agente: el ViewModel recibe un Context y abre el diálogo. Impide test unitario y rompe MVVM.

Regla

“ViewModel sin Android UI. Emite un evento (SharedFlow). La Fragment/Activity muestra el diálogo.”

Resultado: el ViewModel se testea sin Robolectric de UI.

Arquitectura 4

Microservicios sobre un monolito

Síntoma

“El módulo de notificaciones está acoplado.” El repo es un solo deploy.

El agente (Composer, ticket vago): crea notifications-service/, Docker Compose y un REST interno. El equipo no pidió infra.

Regla

“Un solo artefacto desplegable. Extraer un servicio solo con pedido explícito de arquitectura. Preferir un paquete notifications dentro del monolito.”

Resultado: Opus, con esa línea, propone un paquete y un puerto. No un repo nuevo.

Arquitectura 5

Segundo árbol de carpetas “más clean”

Síntoma

El repo usa web/, application/, domain/, infra/.

El agente: crea src/core/usecases y deja las clases viejas. Dos arquitecturas a la vez.

Regla

“No crear src/core, hexagon ni modules. Extender las carpetas existentes. Si el mapa no alcanza: parar y preguntar.”

Resultado: el diff entra donde el equipo ya busca archivos.

Modelos

8. Mapa de modelos por situación

Importante — clave 4. Lista: Puntos clave.

No hay un modelo “el mejor”. Cambia si hace falta pensar, hacer rápido o mirar una imagen. Los nombres y el catálogo cambian con la herramienta; la lógica (planificar con uno capaz, ejecutar con uno rápido) se mantiene. Auto, cuando exista, depende del plan y de la UI; no asumas Opus. Útil en lo rutinario. Confirmá en el selector qué hay hoy.

SituaciónModelosPor qué
Arquitectura, patrones, refactor grande Claude Opus 5 / Opus reciente, GPT-5.5, GPT-5.6 Sol; Fable 5 si es muy largo Razonan el mapa; no conviene el más rápido
Día a día: un archivo, seguir un plan Composer 2.5, Grok 4.6/4.5, Haiku 4.5, Gemini Flash Rápidos; malos para diseñar el sistema
Bug difícil, muchos archivos, sin rediseñar Opus, Sonnet, GPT-5.5, GPT-5.6 Sol Cambiar de familia a veces desbloquea
Mails, docs, explicar a no técnicos GPT-5.5/5.6, Claude Sonnet Composer/Grok están más orientados a editar código
Captura, diseño, repo enorme Gemini 3.1 Pro; también GPT u Opus Imagen + mucho contexto
Trivial Haiku, Flash, GPT mini/nano, Composer Opus/Fable es desperdicio

Casos de uso

9. Casos de uso (cómo aplicar esto en el trabajo)

Cada caso une quién, el MD, el chat y el modelo. No son tickets de un cliente concreto. Complementan el catálogo de chats (qué carga la herramienta) con el flujo de trabajo.

Los 12 casos de uso
Uso 1

Onboarding / primer día en el repo

Quién: desarrollador que entra al equipo. Contexto: el repo ya tiene AGENTS.md o CLAUDE.md en Git. Objetivo: entender el mapa y hacer un cambio chico sin preguntar lo mismo diez veces.

MD + chat + modelo

El MD de la raíz es el briefing (Anthropic: como el primer día). Chat nuevo en la raíz del repo. Modelo: Sonnet o GPT para preguntar; Composer solo cuando el ticket ya está claro.

Pasos

  1. Clonar, abrir el workspace en la raíz, chat nuevo (inyección automática; no pegar el MD).
  2. Claude Code: /context y confirmar Memory files. Cursor: Customize → Rules.
  3. Pedir: “explicá las capas según el MD y señalá un archivo canónico de cada una”.
  4. Tomar un ticket de una sola capa. No rediseñar el primer día.

Se espera: el mapa coincide con el disco; el primer PR no inventa carpetas.

Fallo: abrir solo un submódulo como proyecto y no cargar el MD de la raíz; o pedir “mejorá la arquitectura” el día uno.

Uso 2

Bug chico en una app por capas

Quién: dev del equipo. Contexto: null pointer / validación en un endpoint o pantalla ya existentes. Objetivo: un diff mínimo que respete capas.

MD + chat + modelo

El MD ya dice dónde va el arreglo (controller vs. dominio). Chat nuevo, un ticket. Composer o Grok (o Auto). Si el bug cruza tres capas sin un plan, subir a Opus.

Pasos

  1. Pegar el error textual (Help Center: el stack trace, no un resumen).
  2. Acotar: “solo este síntoma; no refactors”.
  3. Revisar que el cambio no metió SQL en el controller ni HTTP en el componente.

Se espera: 1–3 archivos, test si hay invariante, sin carpetas nuevas.

Fallo: Composer “limpia” el paquete entero. El MD debió prohibir el alcance extra.

Uso 3

Review de arquitectura: “¿esto rompe el patrón?”

Quién: senior o quien revisa el PR. Contexto: un diff grande o una duda de diseño. Objetivo: un veredicto, no un rewrite.

MD + chat + modelo

El MD es el mapa de referencia. Chat nuevo (o Ask). Opus o GPT-5.x, no Composer. Pedir que cite el MD y los archivos.

Pasos

  1. “Según AGENTS.md, ¿este PR viola quién-habla-con-quién? Listá sí/no por capa.”
  2. Si hay que cambiar el mapa, eso es decisión de equipo: actualizar el MD en otro PR, no en silencio.

Se espera: lista de violaciones o “alineado”, con paths.

Fallo: el modelo propone hexagonal “mejor” y reescribe. El MD debe decir: parar y preguntar.

Uso 4

Feature que cruza frontend + API

Quién: full-stack o pareja front/back. Contexto: un campo nuevo en ficha + endpoint. Objetivo: contrato primero, UI después, cada MD anidado en su zona.

MD + chat + modelo

Raíz: quién habla con quién. frontend/AGENTS.md y backend/AGENTS.md (o rules con glob). Plan con Opus/GPT; implementación por frente con Composer/Sonnet. Abrir el workspace en la raíz para que carguen padres + anidados on-demand.

Pasos

  1. Plan: DTO, URL, quién valida qué. Sin código, o Plan Mode (Claude Code: Shift+Tab).
  2. Chat (o tramo) de API: tocar Java/Spring; debe entrar el MD de backend.
  3. Chat de UI: Angular o React; HTTP solo en el repositorio/capa de datos.

Se espera: un contrato estable; la vista no arma la URL a mano si el MD lo prohíbe.

Fallo: un solo chat con Composer crea el endpoint y pega fetch en el componente.

Uso 5

Mail, ticket o documentación

Quién: cualquiera que escriba para humanos. Contexto: explicar un cambio o pedir ayuda. Objetivo: texto usable, sin inventar cifras.

MD + chat + modelo

El MD de “no inventar” aplica igual. Sonnet o GPT, no Composer (está afinado a editar código). Chat nuevo o Ask.

Pasos

  1. Dar hechos (qué se tocó, qué no). Prohibir métricas que no estén en el mensaje.
  2. Revisar nombres de sistemas: si el MD dice “no inventar clientes”, el texto no inventa.

Se espera: un borrador que se puede pegar.

Fallo: Composer “completa” con un +40% o un cliente ficticio.

Uso 6

UI a partir de una captura

Quién: front. Contexto: diseño en imagen. Objetivo: maqueta en el stack del repo (React o Angular), no un HTML suelto.

MD + chat + modelo

El MD de frontend fija componentes, tokens, “no CSS modules si usamos Tailwind”, etc. Adjuntar la captura. Probar Gemini Pro primero; Opus/GPT si hay que respetar un design system complejo.

Pasos

  1. Chat nuevo en la raíz o en frontend/ para cargar el MD anidado.
  2. “Implementá esto con los componentes de components/; no instales otra librería de UI.”

Se espera: una pantalla en el árbol existente.

Fallo: crea src/pages-new/ o un proyecto Vite paralelo.

Uso 7

El agente se equivocó dos veces → actualizar el MD

Quién: quien hizo la review. Contexto: segunda vez que el agente mete JPA en el controller (o HTTP en el componente). Objetivo: que el próximo chat no lo repita. Anthropic: esa es la señal para una línea nueva. When to add.

MD + chat + modelo

Editar el MD (o pedir “agregá esta regla a AGENTS.md”). Commit. Chat nuevo (el actual sigue con la copia vieja).

Pasos

  1. Una línea verificable, no un ensayo.
  2. Avisar al canal: pull + chat nuevo.

Se espera: el tercer intento ya no viola esa capa.

Fallo: corregir solo de palabra y no persistir: el lunes vuelve el mismo error.

Uso 8

Cambiaste el MD a mitad del chat vs. chat nuevo

Quién: cualquiera. Contexto: acabás de prohibir NgRx / microservicios. Objetivo: que el modelo use la versión nueva.

MD + chat + modelo

Mismo chat = reglas viejas (no hay relectura por turno). Chat nuevo = inyección fresca. Claude Code: /compact o /memory para el MD de raíz. Ver caso D.

Pasos

  1. Guardar el MD en disco.
  2. Preferir chat nuevo. Si el hilo importa: compact o “leé AGENTS.md; prevalece el archivo”.

Se espera: el siguiente mensaje ya no propone lo prohibido.

Fallo: seguir el hilo largo y creer que “ya está en el archivo”.

Uso 9

Consultora: Android + Angular + Spring

Quién: equipo con tres frentes. Contexto: el mismo producto, tres árboles. Objetivo: un mapa común y reglas por frente, sin 400 líneas en la raíz.

MD + chat + modelo

Raíz: capas, “un artefacto / no microservicios sin pedido”, Git. android/AGENTS.md (MVVM), web/AGENTS.md (Angular o React), api/AGENTS.md (controllers delgados). Ticket de un frente: Composer. Ticket que cruza contratos: Opus/GPT para el plan.

Pasos

  1. Abrir el monorepo en la raíz.
  2. El detalle de Compose vs. XML o de signals vs. NgRx vive en el MD anidado, no en la raíz.

Se espera: un ticket Android no gasta contexto en convenciones de CSS.

Fallo: un AGENTS.md único de 800 líneas; o tres normas contradictorias (“siempre MVVM” vs. un módulo legacy MVP).

Uso 10

Tests y pases a entornos: MD vs. CI

Quién: dev + quien mantiene el pipeline. Contexto: el agente saltea tests o “despliega”. Objetivo: el MD dice qué correr en local; la CI impide merge si falla.

MD + chat + modelo

MD: comando exacto (./mvnw -pl pedidos test, npm test -- pedidos.spec.ts). “No push / no prod”. CI: la red de seguridad. Hooks si hay que bloquear un comando. Composer para el arreglo; no Auto para “subí a prod”.

Pasos

  1. Escribir en el MD solo comandos que el agente vaya a ejecutar (Help: la exactitud importa).
  2. Pases de entorno: checklist humano + pipeline; no un “deploy” inventado por el modelo.

Se espera: el agente corre el test del módulo; CI atrapa si se lo saltó.

Fallo: volcar todo el Jenkinsfile en el MD (ruido) o confiar solo en el Markdown para no tocar prod.

Uso 11

Equipo mixto: Cursor + Claude Code

Quién: el equipo comparte un repo. Contexto: unos usan Cursor, otros Claude Code. Objetivo: una fuente de verdad.

MD + chat + modelo

Canónico: AGENTS.md. CLAUDE.md = @AGENTS.md + líneas solo de Claude (plan mode, hooks). Claude Code no lee AGENTS.md solo. Cursor lee AGENTS.md; no dupliques en un .mdc alwaysApply. AGENTS.md en docs Anthropic.

Pasos

  1. Un PR con ambos archivos. Prohibido copiar el mismo bloque en tres sitios.
  2. Cada quien: chat nuevo tras el pull. Claude: /context.

Se espera: el mismo mapa en las dos herramientas.

Fallo: actualizar solo CLAUDE.md; en Cursor el equipo sigue con el AGENTS viejo (o al revés).

Uso 12

Proyecto personal vs. repo de equipo

Quién: la misma persona en dos contextos. Contexto: un side project y un repo compartido. Objetivo: no mezclar gustos personales con normas del equipo.

MD + chat + modelo

Equipo: AGENTS.md / CLAUDE.md en Git. Personal: CLAUDE.local.md (gitignore) o User Rules de Cursor (no van a Inline Edit / Ctrl+K). Side project: un MD corto en ese repo, sin copiar el de la empresa.

Pasos

  1. Tono, “vos”, atajos: usuario o local.
  2. Arquitectura del producto de equipo: solo el archivo commiteado.

Se espera: el PR del equipo no trae “respondé en rioplatense” ni URLs de un sandbox casero.

Fallo: commitear CLAUDE.local.md o User Rules como si fueran del proyecto.

React / Java y otros stacks

10. Enfoque por stack: Java, React y otros

La regla genérica: escribir el mapa del equipo, no el del libro. Si el servicio es un @RestController que llama a un JpaRepository y así está acordado, el MD lo dice. No impongas hexagonal “porque es best practice”.

Mismo esquema en cada stack: capas típicas → raíz vs. anidado → snippet → fallo del agente → modelo.

Java, React, Android y otros

10.1 Java / Spring

Árbol frecuente (no obligatorio): web (controllers) → application / servicedomain (si existe) → repository / JPA. Tests: JUnit (y Mockito) junto al módulo; tests de dominio sin levantar Spring si el equipo ya lo hace así.

Raíz: “un deploy; no extraer microservicio sin pedido”; “controller sin SQL”; comando ./mvnw test. Anidado / glob src/main/java/**: DTOs, no devolver *Entity, validación de forma vs. invariante.

# api/AGENTS.md (ejemplo; adaptá a *vuestras* carpetas)
- Controller: request → use case/service → response. Sin EntityManager.
- No crear notifications-service/ ni un segundo Spring Boot.
- Test de regla de negocio: JUnit en domain, sin @SpringBootTest
  salvo que el ticket sea de slice web.

Fallo típico: consulta JPQL en el controller; o “pasar a microservicios”. Modelo: endpoint chico → Composer/Grok; ¿rompe capas? → Opus/GPT.

10.2 React (y contraste con Angular)

React: componente + hooks; datos en un módulo de API/query (fetch, React Query, etc.), no URLs sueltas en cada JSX. Angular (si el repo lo usa): componente flaco + servicio/repositorio; HttpClient no en el .ts de la plantilla. No mezclar ambos “por si acaso” en el mismo MD si el producto es uno solo.

Next.js vs. SPA: el MD debe fijar el que está en el disco. App Router: rutas en app/, APIs en app/api/ si ya es así. Pages Router: pages/. Una SPA Vite: src/features/.... Cursor Learn usa el ejemplo: tests Vitest (no Jest), Tailwind, APIs en app/api/ — solo si el equipo lo usa. Customizing agents.

# web/AGENTS.md
- Este front es React + Vite (no Next). No crear app/ ni pages/.
- Fetch solo en src/data/* o *Api.ts. Prohibido URL hardcoded en componentes.
- Un feature = src/features/<nombre>/. No crear src/screens-2/.
# Si fuera Next.js (otro repo; no copies esto “por las dudas”)
- App Router. Rutas nuevas en app/(marketing)/ o app/(app)/ según lo existente.
- Route handlers: app/api/<recurso>/route.ts. No pages/api en este repo.

Fallo: instala Next en una SPA; o pega fetch('/api/...') en diez componentes. Modelo: UI de captura → Gemini; feature con contrato → plan Opus, UI Composer.

10.3 Android (Kotlin/Java, MVVM)

Alineado al cap. 7. Raíz: “Android nativo, no wrapper”. Anidado: ViewModel sin widgets; UI observa estado; red en data source/repository.

# android/AGENTS.md
- MVVM en features nuevas. Un módulo legacy en MVP: no migrar a ViewModel
  sin pedido.
- ViewModel sin android.view.* ni Context para diálogos.
- Retrofit/OkHttp solo en data/.

Fallo: diálogo desde el ViewModel; o Compose “porque es moderno” en una pantalla XML. Modelo: bug de UI → Composer; cambio de navegación/arquitectura → Opus.

10.4 Node (Nest o Express)

Nest: módulos, controllers delgados, providers. Express: routers + services si el equipo los tiene; no un index.js de 2 000 líneas “mejorado” a Nest en un ticket de un bug.

# server/AGENTS.md
- Express + routers en src/routes. Lógica en src/services.
- No migrar a Nest/Fastify en este ticket.
- No devolver el documento Mongo crudo; usar un mapper.

Fallo: reescribe Express a Nest. Modelo: ruta nueva → Composer; “¿módulo Nest?” → Opus y decisión humana.

10.5 Python (FastAPI / Django)

Un párrafo: FastAPI suele separar routers, schemas (Pydantic) y servicios. Django: views/servicios vs. models; no meter SQL crudo en la view si el equipo usa el ORM. El MD nombra vuestros paquetes.

# api-py/AGENTS.md
- FastAPI: routers en app/api/; reglas en app/services/; schemas en app/schemas/.
- No crear un segundo app Django. Tests: pytest en tests/.

Fallo: mete lógica de negocio en el router; o cambia FastAPI por Django. Modelo: endpoint → Composer; rediseño de paquetes → Opus.

10.6 Plantilla genérica

# AGENTS.md (cualquier lenguaje)
- Este repo se organiza así: [pegar el árbol real de 8 líneas].
- Un cambio de <tipo> va en <carpeta>. No crear <carpeta que no existe>.
- No inventar microservicios, frameworks nuevos ni métricas.
- Tests: [comando real]. No commit/push sin pedido.

Si no podés llenar los corchetes mirando el disco, no publiques el MD: primero acordá el mapa con el equipo.

Herramientas y pesos abiertos

11. OpenCode, modelos abiertos y otras herramientas

Esta guía no es solo de Cursor. El mapa del repo (quién habla con quién, qué no hacer) se puede usar en Claude Code, OpenCode, Copilot, Cline, VS Code, Gemini CLI y otros. Cursor queda como un IDE más: Agent + AGENTS.md y/o .cursor/rules (Rules).

AGENTS.md es la convención portable (agents.md, Agentic AI Foundation / Linux Foundation). No todas las herramientas la leen solas: varias tienen archivo propio. CLAUDE.md es de Claude Code (importá AGENTS si el equipo es mixto). Práctica: un AGENTS.md canónico; adaptadores cortos, no tres tratados.

11.1 OpenCode

OpenCode es un agente de código open source (CLI / entorno propio). No es Cursor (IDE comercial con Agent + rules .mdc) ni Claude Code (CLI de Anthropic centrado en CLAUDE.md). Podés apuntarlo a distintos proveedores de modelos (cerrados o abiertos), según la config del producto.

Documentación oficial de reglas: opencode.ai/docs/rules.

  • /init recorre el repo y crea o mejora un AGENTS.md (comandos, arquitectura no obvia, convenciones; no lo pisa a ciegas).
  • Proyecto: AGENTS.md en la raíz. Personal: ~/.config/opencode/AGENTS.md (no se comparte en Git).
  • Compatibilidad Claude: si no hay AGENTS.md, puede usar CLAUDE.md del proyecto; en global, ~/.claude/CLAUDE.md si no existe el AGENTS de OpenCode. Si hay ambos, gana AGENTS.md. Se puede desactivar con OPENCODE_DISABLE_CLAUDE_CODE (y variantes).
  • opencode.json admite instructions (archivos locales, globs, URL remotas). Se combinan con AGENTS.md. Timeout de URLs: 5 s (doc actual).

Hay una línea V2 (opencode.ai/v2/docs/instructions) que, en 2026, describe descubrimiento solo de AGENTS.md (sin fallback CLAUDE.md ni resolución de instructions en json). No inventes paridad: mirá qué binario usás. Ver Alcance y límites.

Agentes Build/Plan y markdown en .opencode/agents/: docs/agents. Eso es config de OpenCode, no reemplaza el AGENTS.md del repo.

Consultar: Rules · Referencias.

11.2 Modelos abiertos (open-weight, local o por API)

Familias que suele verse en coding (nombres y calidad cambian rápido; no es un ranking):

  • Llama (Meta) — pesos abiertos; variantes “instruct” / code según el host.
  • Qwen (Alibaba) — suele usarse en tareas de código vía API o local.
  • DeepSeek — modelos con sesgo fuerte a código/razonamiento; hay pesos y APIs.
  • Mistral / Codestral — Mistral para general; Codestral orientado a código.
  • Gemma (Google) — pesos abiertos, más livianos; útiles en local o hardware chico.

Cuándo alcanzan: un archivo, un rename, un test, un repo que no puede salir de la red (privacidad, air-gap), coste bajo, prototipos. El MD corto y concreto ayuda más acá: el modelo tiene menos “juicio” de arquitectura y se apoya en las reglas.

Cuándo sigue siendo más seguro un frontier cerrado (Opus, GPT-5.x, etc.): “¿rompemos el patrón?”, migraciones, diffs de muchas capas, review de diseño. No afirmamos que un peso abierto iguale a Opus en arquitectura. A veces un DeepSeek/Qwen grande se acerca en un ticket acotado; no lo des por sentado. Probá en vuestro repo.

Dónde corren: Ollama, vLLM, APIs de terceros, o el selector de OpenCode/Continue/Cline. Adaptar pesos (LoRA) no es escribir un MD: ver Entrenar o adaptar un modelo propio. La herramienta inyecta el MD; el modelo lo interpreta peor o mejor. Mismo AGENTS.md, distinto techo.

Tabla: otras herramientas (no Cursor)

11.3 Otras herramientas (no Cursor)

Tabla de cómo obtienen instrucciones de proyecto. No es un ranking. “Lee AGENTS.md” solo si la doc lo dice. Cursor: una línea — IDE con Agent; AGENTS.md y/o .cursor/rules (Rules).

Herramienta Qué es Instrucciones de proyecto (doc) Enlace
Claude Code CLI / agente de Anthropic CLAUDE.md (no lee AGENTS.md solo; usá @AGENTS.md). Anidados on-demand. .claude/rules con paths. CLAUDE.md
OpenCode Agente OSS (CLI) AGENTS.md de proyecto + ~/.config/opencode/AGENTS.md. Fallback CLAUDE.md si no hay AGENTS (doc estable). V2 puede diferir. Rules
VS Code + Copilot Chat Editor Microsoft + chat/agente (no es Cursor) .github/copilot-instructions.md; AGENTS.md en raíz (setting chat.useAgentsMdFile); anidados experimentales; también puede CLAUDE.md (chat.useClaudeMdFile). VS Code custom instructions
GitHub Copilot (GitHub.com / cloud agent) Chat, review y agentes en GitHub .github/copilot-instructions.md; .github/instructions/*.instructions.md + applyTo. Cloud agent también lista **/AGENTS.md, CLAUDE.md, GEMINI.md en best practices. Custom instructions · cloud agent
Continue Extensión OSS de chat/agente en el IDE .continue/rules/*.md (globs, alwaysApply). La doc de rules no presenta AGENTS.md como nativo. No aplica a autocomplete. Continue Rules
Cline Agente en el editor (VS Code, etc.) Primario: .clinerules/. También detecta .cursorrules, .windsurfrules, y AGENTS.md / ~/.agents/AGENTS.md. Condicionales con paths en frontmatter. Cline Rules
Roo Code Agente en VS Code (ecosistema Cline) Preferido: .roo/rules/ (y ~/.roo/rules/ global). Fallback: .roorules. También carga AGENTS.md (o AGENT.md) de la raíz; se desactiva con roo-cline.useAgentRules. Custom Instructions
Aider Agente en terminal (git-centric) FAQ de agents.md: .aider.conf.ymlread: AGENTS.md. Histórico: CONVENTIONS.md. agents.md (FAQ Aider)
Windsurf / Devin Desktop (Cascade) IDE con agente Cascade Rules: .devin/rules/ (preferido) o .windsurf/rules/; legado .windsurfrules. AGENTS.md entra al mismo motor (raíz = always-on; subcarpeta = glob). Memories automáticas ≠ reglas de equipo. Memories & Rules
OpenAI Codex / ChatGPT coding agent CLI, TUI y agentes de OpenAI (2026) Lee AGENTS.md (y AGENTS.override.md) al arrancar: global ~/.codex/ + cadena desde la raíz del repo hasta el cwd. Anidados: el más cercano pisa. /init genera un scaffold. Límite por defecto ~32 KiB. Codex: AGENTS.md
Amazon Q Developer Asistente de AWS en IDE / GitHub / GitLab Markdown en .amazonq/rules/. La doc de Q no pone AGENTS.md como archivo primario. Project rules
Gemini CLI CLI de Google Por defecto GEMINI.md (global ~/.gemini/, proyecto, JIT). Se puede poner context.fileName a AGENTS.md (o una lista). /memory show / reload. GEMINI.md
JetBrains AI Assistant / Junie Chat y agentes en IntelliJ y familia Agentes (Junie, Codex…): AGENTS.md (Claude Agent: CLAUDE.md). Junie CLI: .junie/AGENTS.md, o raíz AGENTS.md + .junie/playbook.md / .junie/rules/; legado .junie/guidelines.md. Global: ~/.junie/AGENTS.md. El chat de AI Assistant también tiene Project rules en el IDE (no viajan con el repo igual que el MD). Agent instructions · Junie guidelines
Zed AI Editor Zed + agente nativo Personal: ~/.config/zed/AGENTS.md. En el proyecto usa el primer archivo de esta lista: .rules, .cursorrules, .windsurfrules, .clinerules, .github/copilot-instructions.md, AGENT.md, AGENTS.md, CLAUDE.md, GEMINI.md. Zed Instructions
Goose (Block / AAIF) Agente OSS (desktop + CLI) Hints: .goosehints y/o AGENTS.md. Default de CONTEXT_FILE_NAMES: [".goosehints", "AGENTS.md"]. Se puede ampliar a CLAUDE.md, etc. Algunas páginas también nombran AGENT.md. Goosehints · env vars

Recetas de symlink a diez nombres (blogs, agentssync): no oficiales. El contrato es la doc de cada fila.

AGENTS.md no es un lector universal. Es el formato portable. Claude Code, Amazon Q, Continue y (sin config) Gemini CLI usan otro archivo. En Zed gana el primer nombre de una lista (un .cursorrules viejo puede tapar el AGENTS.md). Un adaptador corto o un import vale más que copiar el tratado.

11.4 Qué conviene versionar

  • AGENTS.md — mapa del equipo. Lo leen (doc 2026): OpenCode, Codex, Cline, Roo, Windsurf/Devin, Junie, Zed (si es el primer match), Goose (default), VS Code Copilot Chat (setting), Aider (si lo configurás).
  • CLAUDE.md@AGENTS.md + 5 líneas de Claude Code. OpenCode puede usarlo de fallback si no hay AGENTS.
  • .cursor/rules — solo globs / always de Cursor. No las dupliques con el AGENTS.
  • Copilot: .github/copilot-instructions.md si el flujo de GitHub no toma AGENTS. Continue: .continue/rules/. Amazon Q: .amazonq/rules/. Gemini CLI: GEMINI.md o context.fileName.

Casos de uso

12. Casos reales (antes / después)

Situaciones de equipo de software, genéricas. No son un producto de cliente ni un sitio personal.

Antes / después
Caso 1

Inventa métricas y clientes en un texto

Síntoma

Se pide un párrafo para un comunicado interno. El agente agrega “+40% de adopción” y un nombre de cliente que nadie dio.

Sin regla: el texto no se puede publicar. Hay que reescribirlo a mano.

Regla

“No inventar cifras, clientes, certificaciones ni resultados. Si falta un dato, omitir o preguntar.”

Resultado: el borrador es corto y usable. El hueco se ve; no se disimula con un número.

Caso 2

Agranda el ticket

Síntoma

“Agregá validación al email del formulario.” El agente suma login social, notificaciones y un panel.

Sin regla: el diff es inrevisable. El ticket de un día se vuelve una semana.

Regla

“Solo lo pedido. Prohibido login, pagos, admin o refactors extra. Si hace falta, proponerlo en una frase y esperar.”

Resultado: un archivo de validación. El review dura minutos.

Caso 3

Saltea tests porque “el cambio es chico”

Síntoma

Cambio de regla de cancelación de pedido. El agente toca dominio y no agrega test.

Sin regla: CI rojo o un bug en el siguiente release.

Regla en tests (paths)

“Todo cambio de invariante de dominio lleva test en domain sin Spring. No cerrar sin eso.”

Resultado: el caso “pedido enviado no se cancela” queda escrito.

Caso 4

Commit y push sin que se lo pidan

Síntoma

“Arreglá el null pointer.” El agente commitea y pushea a la rama compartida.

Sin regla: historial sucio; a veces un hook de secretos o un push a main.

Regla

“No commit, push, rebase ni --no-verify sin pedido explícito.” Complementar con hook si hace falta candado.

Resultado: el diff queda local hasta que alguien lo pide.

Caso 5

El MD se editó y el chat no se enteró

Síntoma

Se agregó “no usar NgRx”. El mismo chat sigue proponiendo un store.

Causa: no hay relectura por turno. Ver caso D.

Práctica

Chat nuevo, o “leé AGENTS.md”. Avisar al equipo: pull + chat nuevo.

Resultado: el siguiente hilo ya no propone NgRx.

Casos de uso y flujo de trabajo

13. Cómo se trabaja un proyecto (flujo real y modelos)

Esto no es un mega AGENTS.md. Los bloques para pegar viven en docs/casos/prompts-base.md (prompts de chat) y en las fichas (qué va en el MD). Acá: cómo se usa el chat, qué suele hacer cada familia de modelos, y ventajas / desventajas de cada caso.

13.1 Flujo real (día 0 en adelante)

  1. Día 0: acordar el mapa del disco (no el del libro). Escribir y commitear AGENTS.md corto en la raíz. Chat nuevo en esa raíz.
  2. Ticket chico: modelo rápido (Composer, Grok, Haiku). Un síntoma. Prohibido login/admin si no está en el ticket.
  3. Pregunta de arquitectura: chat nuevo, Opus o GPT. “¿Esto rompe el patrón?” Sin reescribir carpetas.
  4. Misma falla dos veces en review: una línea en el MD. Commit. Chat nuevo (el hilo viejo no relee el disco solo).
  5. Front vs API: detalle en frontend/AGENTS.md y api/AGENTS.md. Workspace en la raíz para que carguen padres + anidados.

Pares anidados vs. un solo archivo, y rápido vs. pensar: #vd-nested · #vd-fast-vs-think. Resumen: tabla.

Casos reales React

13.2 Casos reales (React)

Producto tipo catálogo B2B. No hay que inventar un panel de admin. Fichas: bug, feature, carpetas.

React · bug

Bug en un componente que ya existe (filtro no resetea página)

Setup

FilterBar + ProductList + Pagination. Al cambiar categoría, sigue page=4 y la grilla queda vacía. Chat nuevo, ticket de un síntoma.

Pasos en la herramienta

  1. Pegar el síntoma textual. Acotar: “no login, no store nuevo”.
  2. Modelo rápido. Si hay spec de la lista, extenderlo.
  3. DoD: categoría con página > 1 vuelve a página 1; sin pantallas nuevas.

Cómo suele actuar el modelo

Composer / Grok / Haiku cierran el bug en pocos archivos si el MD nombra los componentes; sin MD, inventan store o login. Opus / GPT explican el dueño del estado; lentos para un reset de página. Sonnet alcanza si el estado está duplicado. Gemini solo si hay captura de la grilla vacía. Auto / local: rutinario; no para “rearmar el catálogo”.

Fallo esperado: Zustand “para el filtro” o una ruta de admin.

Ventajas

  • Diff revisable: tres componentes que el equipo ya conoce.
  • El modelo rápido alcanza si el mapa está escrito.
  • Un spec existente cubre la regresión sin una suite nueva.
  • No toca el contrato HTTP.

Desventajas

  • Sin acotar el alcance, el rápido “mejora” media app.
  • Opus acá es lento y puede proponer un rediseño de estado.
  • Si el filtro vive en tres padres, el bug deja de ser local (subir de modelo).
  • Haiku no elige dueño de estado cuando hay duplicación.
React · feature

Pantalla (o botón) nueva + cliente HTTP

Setup

Export CSV de pedidos: misma lista, mismos filtros, GET ya definido. Hay ordersApi.ts y useOrders.

Pasos

  1. Plan (Opus/GPT/Sonnet): ¿se extiende el cliente existente?
  2. Chat nuevo, Composer: botón + api; sin fetch en el JSX.
  3. Review de capas con Opus: “¿algún componente llama HTTP?”

Cómo suele actuar el modelo

Composer pega fetch en el onClick si no hay anidado de front. Opus describe bien el flujo y igual puede dejar HTTP en el componente si el MD no lo prohíbe. Gemini ayuda con una captura del botón; no decide el cliente. Local: solo si el plan ya está escrito y el api module es obvio.

Fallo esperado: src/features/export/ con store y URL duplicada.

Ventajas

  • Reutiliza filtros y cliente; el contrato no se inventa.
  • Separar plan e implementación baja el riesgo de fetch en la vista.
  • El MD anidado de front entra al tocar frontend/.
  • Un test de click (mock del api) cierra el DoD.

Desventajas

  • Un solo chat rápido hace endpoint + JSX sucio.
  • Hay que mantener dos capas (UI y api) en el mismo ticket.
  • Gemini no sustituye el mapa de quién habla con quién.
  • Si el GET no existe, el agente “adapta” el back en el mismo hilo.
React · arquitectura

El agente reescribe carpetas o mete fetch en cualquier componente

Setup

Ticket: badge de stock en ProductCard. El agente mueve a src/features/ y deja fetch en la card.

Pasos

  1. No seguir ese hilo. Chat nuevo + regla “no crear árboles nuevos”.
  2. Review con Opus: listar violaciones sí/no. Implementar el revert + badge con Composer.

Cómo suele actuar el modelo

Composer / Grok priorizan un árbol “más limpio”. Opus en el mismo chat sigue el árbol nuevo; hace falta chat nuevo. Auto: no; elige rápido y multiplica el atajo.

Fallo esperado: el review valida un rediseño cuando el ticket era un badge.

Ventajas

  • Una línea en el MD (“el árbol del disco es sagrado”) corta el hábito.
  • Opus en review detecta el segundo árbol mejor que Composer.
  • El revert cabe en el mismo PR que el badge.
  • Queda una regla reusable para el próximo squad.

Desventajas

  • El hilo que ya movió archivos no se “convence” bien.
  • Composer no es el revisor de su propio rewrite.
  • Sin la regla, Opus también puede “ordenar” src/ si el prompt es vago.
  • CI puede ponerse rojo por imports un PR más tarde.
React · tests

El agente saltea tests “porque el cambio es chico”

Setup

Hay Vitest en la lista. El agente arregla el filtro y no toca el spec. DoD del equipo: el caso de regresión en el mismo archivo de test.

Cómo suele actuar el modelo

Composer / Haiku cierran el JSX y declaran listo. Opus / Sonnet agregan el caso si el MD lo exige. Local: peor aún; hay que poner el comando de test en el MD.

Ventajas

  • El spec existente es más barato que una suite nueva.
  • CI atrapa al agente si el MD no alcanzó (candado real).
  • El review ve rojo→verde en un archivo, no un rewrite de tests.

Desventajas

  • El MD no ejecuta Vitest: hace falta el comando o CI.
  • El agente puede reescribir tests verdes para que pasen con un refactor.
  • Pedir “cobertura 100%” genera tests inútiles.
Casos reales Java / Spring

13.3 Casos reales (Java / Spring)

Un Spring Boot, un deploy. Fichas: endpoint, legacy, capas.

Java · endpoint

GET nuevo por capas + JUnit

Setup

GET /api/shipments/{id}/events. Ya hay ShipmentController y repository. Controller → service → repository → DTO.

Cómo suele actuar el modelo

Composer mete @Query en el controller o saltea JUnit. Opus propone hexagonal completo si el MD no dice “este repo es controller + @Service + JPA”. Sonnet suele respetar el trío si hay un endpoint hermano.

Fallo esperado: devolver *Entity o un segundo @SpringBootApplication.

Ventajas

  • El patrón ya está en el módulo: copiar el GET vecino.
  • Composer alcanza si el MD nombra las tres capas.
  • Un test de service (Mockito) o WebMvcTest cierra el contrato.
  • No hay que inventar un bounded context.

Desventajas

  • El atajo (SQL en el controller) compila y pasa review distraído.
  • Opus sin mapa rediseña el servicio “bien”.
  • Haiku olvida el 404 que el módulo ya usa.
  • Sin JUnit en el MD, el GET queda “probado a mano”.
Java · legacy

Cambio seguro en el monolito (no microservicios)

Setup

Campo notes en el DTO de factura y en la tabla existente. Un JAR. El código mezcla un poco las capas; el backlog no pide split.

Cómo suele actuar el modelo

Composer extrae un módulo Maven. Opus / GPT dibujan Kafka si el prompt dice “mejorá”. Local: no diseña el split, pero deja el campo en un mapper y se olvida del DTO.

Ventajas

  • Una línea “un deploy” evita un proyecto de infra fantasma.
  • El campo llega en un PR revisable.
  • Se puede mejorar un mapper sin migrar el monolito.
  • GPT sirve para explicar por qué no conviene el split ahora.

Desventajas

  • El código legacy sigue mezclado; el MD no lo “limpia”.
  • Un prompt vago (“mejorá facturación”) autoriza el rediseño.
  • Opus es peligroso acá si no le parás el mapa.
  • No hay métrica mágica de “cuándo sí extraer”: es decisión de equipo.
Java · capas

El controller habla con el repository

Setup

Filtrar facturas por estado. El atajo: InvoiceRepository inyectado en el @RestController.

Cómo suele actuar el modelo

Composer / Haiku lo hacen porque es un archivo. Opus a veces lo marca, a veces lo deja “porque es un GET”. El MD tiene que decir “nunca repository en el controller”, no “preferí capas”.

Ventajas

  • La regla de negocio no se esconde en el HTTP.
  • Opus en review lista violaciones por path.
  • El GET sigue pasando por el service que el módulo ya tiene.
  • DTO, no entidad, en la respuesta.

Desventajas

  • El atajo es el diff más corto; el review tiene que buscarlo.
  • Composer no es el revisor de su atajo.
  • Auto suele repetir el patrón rápido.
  • Hay que corregir en chat nuevo, no discutir el hilo sucio.
Java · JUnit

JUnit ausente en un cambio de regla

Setup

Invariante: factura pagada no se anula. El agente toca el service y no agrega test. El MD debe exigir JUnit del service (sin Spring) o el slice que el módulo ya usa.

Ventajas

  • El caso “pagada no se anula” queda escrito y repetible.
  • CI es el candado; el MD solo recuerda el comando.
  • Mockito del repository evita levantar toda la app.

Desventajas

  • El modelo rápido declara “es un GET/PATCH chico” y saltea.
  • @SpringBootTest de más pone lento el módulo si no era la convención.
  • Tests que repiten la implementación no atrapan el invariante.
Ventajas y desventajas por modelo

13.4 Modelos: ventajas y desventajas (en estos casos)

Nombres de catálogo cambian. La lógica no. No hay porcentajes de acierto: es heurística de equipo.

Composer / Grok

Implementar un plan ya escrito

Ventajas

  • Diff rápido en 1–3 archivos (bug de filtro, campo DTO).
  • Sigue un plan de Opus si el plan nombra paths.
  • Barato para el día a día cuando el MD ya fijó el cauce.

Desventajas

  • Ignora arquitectura si el ticket es ambiguo (“mejorá”).
  • Mete fetch/SQL en la vista o el controller “para ir más rápido”.
  • No es el revisor de su propio rewrite de carpetas.
  • Puede saltear tests si el MD no lo exige.
Opus

¿Rompe el patrón? Plan de capas

Ventajas

  • Lee el mapa y lista violaciones con paths.
  • Mejor techo para “¿controller → repository?” y para no extraer microservicios.
  • Útil en review, no para tipear el parche de un badge.

Desventajas

  • Lento y excesivo en un reset de paginación.
  • Sin MD, propone hexagonal o un split convincente.
  • En el mismo chat que ya reescribió src/, sigue ese árbol.
  • No sustituye CI ni hooks.
Sonnet

Medio: bug difícil sin rediseñar

Ventajas

  • Equilibrio cuando el estado/filtro está duplicado.
  • Prosa razonable para un plan corto y luego implementar.
  • Menos tentación de “reescribir el módulo” que un rápido sin mapa.

Desventajas

  • No es el techo de Opus en un mapa de muchas capas.
  • Tampoco la velocidad de Composer en un one-liner.
  • Sigue pudiendo pegar HTTP en el componente si el MD no lo dice.
Haiku / Flash / mini

Trivial

Ventajas

  • Rename, un test de una línea, un typo.
  • No gasta un modelo de arquitectura.
  • Útil si el MD y el archivo abierto ya muestran el patrón.

Desventajas

  • Copia atajos del archivo abierto (fetch en la card, repo en el controller).
  • Olvida 404, DTO o el spec.
  • No elige dueño de estado ni de capa.
GPT

Prosa + alternativa de diseño

Ventajas

  • Explica a no técnicos y arma un plan en capas.
  • Buena pareja de Opus para “¿rompemos el patrón?”.
  • Mails y docs sin inflar métricas si el MD lo prohíbe.

Desventajas

  • Puede ofrecer una arquitectura “mejor” que el disco.
  • Menos sesgo a editar código que Composer.
  • Fine-tune de plataforma OpenAI es producto aparte (y en 2026, con deprecations).
Gemini

Captura / UI

Ventajas

  • Lee una captura del botón o de la grilla vacía.
  • Útil para alinear layout con un diseño existente.
  • Repo grande + imagen: un caso de uso real.

Desventajas

  • No decide el cliente HTTP ni las capas Spring.
  • Puede crear src/pages-new/ si el MD no fija el árbol.
  • Una captura no es verificación de comportamiento.
Auto

Rutinario

Ventajas

  • Ahorra elegir modelo en un rename o un test chico.
  • Útil cuando el plan ya está escrito y el ticket es estrecho.

Desventajas

  • No asumas que elige Opus para un rediseño.
  • Suele caer en el modelo rápido y repetir atajos de capa.
  • Malo para “¿hexagonal?” o extraer servicios.
Abierto / local

Ollama, vLLM, llama.cpp, pesos open

Ventajas

  • Datos que no pueden salir de la red.
  • Coste bajo en edits chicos si el MD es concreto.
  • El mismo AGENTS.md se puede inyectar; el techo lo pone el peso.

Desventajas

  • No afirmar que iguala a Opus en un mapa nuevo.
  • Peor en “¿rompe el patrón?” y en diffs de muchas capas.
  • Un Modelfile SYSTEM es instrucción, no entrenamiento. Ver #entrenamiento.

MD anidado vs. un solo archivo en la raíz

Ventajas del anidado

  • React no contamina un chat de JPA (y al revés).
  • Archivos cortos: mejor cumplimiento (Anthropic: ~200 líneas).
  • Portable: dos copias de stack, no un tratado único. ficha.

Desventajas del anidado

  • Workspace tiene que ser la raíz si el ticket cruza frentes.
  • On-demand: si no abrís frontend/, esas reglas no entran.
  • Un solo root enorme “para que siempre las vea” gasta tokens y se cumple peor.

Modelo rápido implementando vs. modelo que piensa el plan

Ventajas de separar

  • Opus/GPT fijan capas; Composer ejecuta el path nombrado.
  • El review de arquitectura no se mezcla con un diff de 40 archivos.
  • Chat nuevo entre plan e implementación evita arrastrar un árbol inventado.

Desventajas de no separar

  • Un rápido con “mejorá la estructura” crea src/features/ o un JAR nuevo.
  • Un pensar que también implementa puede reescribir de más.
  • Auto en el medio elige mal el rol.
  • Dos chats piden un poco más de disciplina del equipo.

Entrenamiento / modelos propios

14. Entrenar o adaptar un modelo propio

AGENTS.md no entrena. Es instrucción inyectada en la ventana de contexto. Los pesos del modelo no cambian. RAG tampoco entrena: recupera texto al vuelo y lo pega al prompt. Fine-tune / LoRA sí toca (o añade) parámetros. Glosario Anthropic: fine-tuning y RAG.

Familias open y dónde corren: capítulo 11. Esto no es receta de cluster ni números de GPU inventados.

Instruct vs RAG vs LoRA

14.1 Instruct vs. recuperar vs. entrenar

QuéCambia pesosPara qué
AGENTS.md, prompts, system de un Modelfile No Mapa, prohibiciones, comandos. Barato de actualizar.
RAG (docs internas al contexto) No Hechos que cambian: runbooks, tickets. Calidad = lo que se recupera.
Fine-tune / LoRA / QLoRA Sí (adapter o full) Estilo, jerga, formato rígido. Coste de datos, eval y legal.
Entrenar desde cero Sí, todo Casi nunca un equipo de producto: datos, coste, GPUs, gente.

Ollama: SYSTEM en el Modelfile es lo mismo de familia que el MD (instrucción). ADAPTER es un LoRA ya entrenado sobre la misma base; si la base no coincide, el comportamiento es errático (doc Ollama).

14.2 Qué sí podés hacer (realista)

  • Fine-tune o LoRA para tono de casa, términos de dominio, un idioma, un estilo de código que se repite (no para “entender Spring”).
  • Continuar pretrain o instruct-tune con docs internas: solo con visto bueno legal/privacidad. Nada de secretos, PII de clientes ni tickets con datos reales en el dataset.
  • Destilar un modelo chico para Tab/autocomplete, no para decidir arquitectura.
  • Un eval harness sobre vuestro repo (diffs de tickets ya cerrados): esa es la unidad de “¿sirvió el entrenamiento?”.
  • Servir local o privado: Ollama, vLLM, llama.cpp, o una API privada. vLLM documenta serving e incluso multi-LoRA; no es el loop de entrenamiento.

Herramientas típicas de adaptación (open): PEFT (LoRA), TRL SFTTrainer. Papers: LoRA, QLoRA.

14.3 Qué no va a hacer

  • Reemplazar el juicio de Opus (o un senior) en un diseño nuevo.
  • Grabar “no inventar métricas” tan fiable como un MD de cinco líneas + review humano.
  • Magia con 20 ejemplos: overfit al formato, no al mapa de capas.
  • La API de Claude, según el glosario Anthropic, no ofrece fine-tune; hay canales de partner (p. ej. Bedrock) que son otro producto.
  • OpenAI documenta fine-tune y, en 2026, un cierre de plataforma self-serve para usuarios nuevos. No lo trates como default del equipo.

14.4 Cuándo tiene sentido vs. solo AGENTS.md + un frontier

Empezá por MD + modelo de frontera. Pasa a LoRA cuando el eval del repo muestra un fallo estable de estilo o formato que el MD no mueve (y tenés datos limpios). No pases a LoRA porque “queremos un modelo de la empresa”.

Solo AGENTS.md + modelo de frontera

Ventajas

  • Se actualiza con un commit; chat nuevo y listo.
  • El mapa de capas y las prohibiciones viven en Git, visibles al review.
  • Opus/GPT siguen disponibles para diseño; Composer para el parche.
  • Cero dataset, cero riesgo de filtrar secretos a un job de train.

Desventajas

  • Cada chat gasta tokens en el mismo texto.
  • El modelo puede ignorar la regla (no es candado).
  • No “aprende” jerga rara si no está en el MD o en el código abierto.
  • Tab/autocomplete de un IDE no lee el AGENTS.md igual que el Agent.

RAG sobre docs internas

Ventajas

  • Los runbooks pueden cambiar sin reentrenar.
  • Podés citar la fuente recuperada (si el diseño lo pide).
  • No toca pesos; el MD sigue anclando capas.

Desventajas

  • Si recupera el doc equivocado, el modelo alucina con seguridad.
  • No enseña “quién habla con quién” mejor que 15 líneas de mapa.
  • Índice + permisos + PII: proyecto de plataforma, no un MD.
  • Sigue sin ser candado sobre commit/push o SQL en el controller.

Fine-tune / LoRA sobre un base open

Ventajas

  • Estilo y formato repetibles (commits, comentarios, JSON de casa).
  • Adapter chico, portable; la base se puede compartir con varios adapters (PEFT).
  • QLoRA baja el listón de memoria vs. full fine-tune (paper QLoRA).
  • Sirve para un modelo de Tab, no para reemplazar el Agent de arquitectura.

Desventajas

  • Datos, licencia de la base, eval y gente: no es un sprint de un MD.
  • Un dataset con secretos o clientes los deja en los pesos.
  • No graba reglas de arquitectura tan bien como un MD corto + review.
  • 20 ejemplos no alcanzan; overfit al tono, no al cauce.
  • Hay que volver a evalar cada vez que cambia el repo de verdad.

14.5 Camino mínimo de equipo (alto nivel)

  1. Definir el trabajo (estilo, jerga, autocomplete). Si es “respetar capas”, parar: eso es MD.
  2. Licencia de la base (Llama, Qwen, Gemma, etc.): qué podés adaptar y redistribuir.
  3. Dataset: calidad > cantidad. Sin secretos, sin PII, sin tickets de cliente. Separar train y eval.
  4. Eval = tickets reales de vuestro repo (held-out). Si no hay eval, no hay “éxito”.
  5. LoRA/QLoRA con PEFT; no entrenar desde cero.
  6. Servir con Ollama (ADAPTER) o vLLM. Comparar contra frontier + AGENTS.md en el mismo eval. Si no gana, no desplegar.

Consultar: referencias de fine-tune / LoRA · modelos abiertos · Anthropic glossary.

Casos de uso y flujo de trabajo

15. Tabla: caso → ventaja → desventaja

Una línea por caso. El detalle está en el ancla. No hay cifras.

Tabla completa
CasoVentaja (una línea)Desventaja (una línea)
Catálogo A · MD ya en GitEl mapa llega solo.No es candado; el workspace mal abierto no carga.
Catálogo E · anidadoUI y API no se ensucian entre sí.On-demand: hay que tocar esa carpeta.
Catálogo I · texto duplicadoDoble de tokens; peor contexto.
Catálogo L · mismo MD, otro modeloEl ancla sirve para plan y para ejecutar.El modelo rápido igual rompe el mapa si el ticket es vago.
React · bug acotadoDiff de componentes existentes.El rápido inventa store/login sin alcance.
React · UI + API clientReusa el cliente y los filtros.Un solo chat pega fetch en el JSX.
React · reescribe carpetasOpus en review ve el segundo árbol.El hilo sucio sigue el árbol nuevo.
React · testsEl spec del módulo cubre la regresión.El MD no corre Vitest.
Java · endpointCopiar el GET vecino por capas.SQL en el controller compila igual.
Java · legacy“Un deploy” evita un split fantasma.Prompt vago autoriza microservicios.
Java · controller→DBLa regla vive en el service.El atajo es el diff más corto.
Java · JUnitEl invariante queda escrito.El rápido saltea “porque es chico”.
ComposerEjecuta un plan con paths.Ignora capas si le pedís “mejorá”.
OpusLee el mapa; buen revisor.Lento; rediseña sin MD.
SonnetMedio para bugs que cruzan archivos.Ni el techo de Opus ni la velocidad del rápido.
Haiku / FlashTrivial barato.Copia atajos del archivo abierto.
GPTPlan y prosa; pareja de review.Ofrece arquitectura “mejor” que el disco.
GeminiCaptura / UI.No decide HTTP ni Spring.
AutoRutinario sin elegir modelo.No lo uses para rediseñar.
Open / localPrivacidad y edits chicos.No iguala a Opus en un diseño nuevo.
Anidado vs raízMenos tokens, regla del stack correcto.Hay que abrir la raíz en tickets cruzados.
Tokens · MD gordo vs. finoRaíz corta + glob: cabe y se cumple.El tratado se paga en cada chat y se ignora el medio.
Rápido vs pensarPlan y parche en chats distintos.Un solo chat rápido reescribe el árbol.
Solo MD + frontierCommit y chat nuevo.Se puede ignorar; no entrena Tab.
RAGDocs que cambian sin reentrenar.Recuperar mal = alucinación segura.
LoRA / fine-tuneEstilo y formato de casa.Datos, licencia, eval; no reemplaza el mapa.
Equipo + MD en GitUna norma versionada; onboarding con chat nuevo.Hay que revisar el MD como docs; no es candado.
Git del MDClone → reglas; PR de código y de normas.Conflicto de merge; no commitear local/secrets.

Catálogo completo A–L: cada ficha ya tiene tarjetas verdes/ámbar debajo del fallo. Volver al catálogo.

Trabajo en equipo

16. Cómo trabajarlo en equipo con los agentes

Importante — clave 2. Tras mergear el MD: chat nuevo (clave 3). Lista: Puntos clave.

El mapa del repo no vive en el historial de chat de cada persona. Vive en Git: AGENTS.md / CLAUDE.md (y anidados). Quien clona y abre un chat nuevo ya tiene las reglas. Pegar cinco versiones distintas en cinco chats es el anti-patrón: se actualiza el archivo, se commitea, se avisa. Bloques listos para cada herramienta: docs/casos/instrucciones-por-herramienta.md.

Lista corta de adopción (después de este capítulo): §17. Flujo de un ticket: §13.

16.1 Una fuente de verdad (proyecto), no el chat

El MD de equipo se trata como documentación: branch, PR, review, merge. El chat es desechable. Si una regla solo existió en un hilo, el lunes el compañero no la tiene.

  • No cinco prompts distintos “porque a mí me funciona”. Una línea en el MD, o no es norma.
  • Tras editar el MD: chat nuevo (o lectura explícita). El hilo no relee el disco solo. CLAUDE.md.
  • Un agente por tarea. No dos agentes reescribiendo el mismo módulo a la vez (locks de archivo, diffs imposibles de revisar).

16.2 Personal vs. equipo

DóndeQuéGit
AGENTS.md / CLAUDE.md (y anidados) Mapa, capas, prohibiciones del producto
Cursor User Rules (Customize) Tono, idioma, gustos. Solo Agent Chat; no Inline Edit (Ctrl+K). Rules No (cuenta)
CLAUDE.local.md Igual: personal. Claude Code lo concatena. Docs No: gitignore
Cursor Team Rules (dashboard Team/Enterprise) Org-wide; pueden ir con glob; “Enforce” impide apagarlas. Precedencia: Team → Project → User. Aplican a todos los repos del equipo. Team Rules No están en el repo; no reemplazan el AGENTS.md del producto

Team Rules sirven para cumplimiento transversal (secreto, licencia). El mapa de este servicio sigue en Git: si no, un clone sin Cursor Team no ve el cauce.

16.3 PR: código y reglas juntos

Si el agente cometió el mismo error dos veces (SQL en el controller, fetch en el JSX), el PR que corrige el código incluye la línea nueva en el MD. El review valida ambos. No “la regla la subo después”.

Quien abre el PR es responsable del diff, también del que escribió el agente. El modelo no firma el merge.

16.4 Onboarding

  1. Clonar. Abrir el workspace en la raíz.
  2. Chat nuevo (no reusar un hilo de otro repo).
  3. Las reglas ya están: no pegar un briefing. Claude Code: /context. Cursor: Customize → Rules.
  4. Primer ticket de una sola capa. No “mejorá la arquitectura” el día uno.

16.5 Pairing humano + agente

La persona dueña de arquitectura usa un chat de review (Opus/GPT): “¿rompe el patrón?”. Quien implementa usa el modelo rápido con el MD ya mergeado. El plan se pega o se linkea; no se improvisa un segundo mapa en el hilo de Composer. Prompts de las dos fases: T8 en prompts-base.md.

16.6 Secretos y candado

Nada de passwords, tokens, .env, claves ni pesos de modelos en el MD. El Markdown no bloquea un push. Hooks, permisos de la herramienta y CI sí. Anthropic: contexto ≠ candado. Cursor: Team Rules enforced no sustituyen el control de secretos.

16.7 Cuándo tocar el MD

Segunda vez el mismo fallo en review, o cuando el mapa del disco cambió de verdad. No anticipar diez stacks que el repo no tiene. Anthropic: si dos reglas chocan, el modelo elige cualquiera — recortar, no acumular. Techo útil: ~200 líneas (Claude) / reglas Cursor < ~500. CLAUDE.md · Rules.

Este modelo de equipo vs. cada uno con Auto y sin archivo

Ventajas

  • Una norma versionada; el clone ya la trae.
  • El review discute el MD, no cinco prompts privados.
  • Onboarding: chat nuevo, sin briefing oral.
  • Pairing claro: Opus al mapa, rápido al parche.

Desventajas

  • Hay que tratar el MD como docs (PR, conflictos, techo de líneas).
  • Sigue sin ser candado: hace falta CI/hooks.
  • Auto sin archivo es más rápido el día uno y más caro el día treinta.
  • Team Rules de Cursor no viajan a quien usa Claude Code u OpenCode.

16.8 Cómo trabajarlo con Git

Clave 2 El detalle está en §16, no acá otra vez.

  • Commitear AGENTS.md / CLAUDE.md con el código que esas reglas describen. Un repo sin el MD es un mapa que solo existe en un laptop.
  • Cambio de reglas: misma rama/PR que el arreglo, o un PR de docs si solo cambia el texto. Review como cualquier documento.
  • .gitignore: CLAUDE.local.md, User-only, .env, credenciales, pesos (*.gguf, checkpoints). No “por las dudas” un adapter LoRA con datos de cliente.
  • Conflictos de merge en el MD: resolverlos como docs (leer ambos lados, no aceptar el de la IA a ciegas). Después, chat nuevo.
  • Clone nuevo → workspace en la raíz → chat nuevo: la herramienta inyecta lo que está en HEAD.
  • No commitear el historial del chat ni dumps de contexto.
# .gitignore (equipo)
CLAUDE.local.md
.env
.env.*
!.env.example
*.gguf
*.safetensors

Versionar el MD en Git

Ventajas

  • Quien clona tiene las mismas reglas en el siguiente chat.
  • El blame del MD explica por qué existe la línea (el PR del bug).
  • Un revert de código puede ir con el revert de la regla mala.
  • No hay que reenviar un prompt por Slack a cada incorporación.

Desventajas

  • Merge conflict en un archivo de 400 líneas duele: mantenelo corto.
  • Commitear CLAUDE.local.md o un .env es un incidente, no un detalle.
  • El chat abierto no se entera del merge hasta un hilo nuevo.
  • Dos PRs (código vs. reglas) dejan una ventana donde el agente vuelve a pecar.

Consultar: Cursor Rules (proyecto, user, Team) · CLAUDE.md y CLAUDE.local.md · instrucciones por herramienta.

Adopción

17. Lista de adopción para el equipo

  1. Acordar una arquitectura real (la del disco, no la ideal) y escribirla en 15 líneas en la raíz.
  2. Crear AGENTS.md o CLAUDE.md. Si hay dos herramientas: un archivo + import, sin duplicar.
  3. Opcional: /init, revisar, borrar lo inventado, commitear.
  4. Reglas por carpeta o glob solo donde el agente ya se equivocó (API, Android, tests).
  5. Prohibiciones: no inventar, no agrandar, no commit/push, no romper capas, no microservicios sin pedido.
  6. Estilo mecánico: linter/CI, no un tratado en el MD.
  7. Seguridad: hooks o permisos, no solo Markdown.
  8. Modelo: Opus/GPT para mapa y refactors; Composer/Grok/Sonnet para el plan escrito; Auto para lo chico.
  9. Tras editar el MD: chat nuevo (o compact/lectura). Avisar en el canal del equipo.
  10. Actualizar el MD en la segunda vez que el mismo error aparece en review — no antes por anticipación infinita.
  11. Revisar contradicciones cada tanto. Anthropic: si dos reglas chocan, el modelo elige cualquiera.
  12. Commitear el MD con el código. CLAUDE.local.md, .env y pesos: gitignore. Ver Git.

Glosario

18. Glosario

Agente
IA que además de responder puede leer y modificar archivos (y a veces comandos), con permiso.
Chat / sesión
Una conversación. Empieza sin el hilo anterior, salvo lo que la herramienta inyecte.
Contexto / ventana de contexto
Memoria de trabajo de la sesión. Limitada. Si se llena, el modelo atiende peor.
Inyección
Copia automática del MD al contexto al inicio (o al abrir ciertos archivos), sin pegarlo a mano.
Token
Unidad de texto cobrada y descontada del contexto. El MD, el hilo, archivos, logs y capturas compiten por el mismo cupo. Ver Cuidar los tokens.
Candado vs. contexto
El MD aconseja; un hook puede impedir una herramienta.
Markdown (.md)
Texto con títulos y listas, fácil de versionar.
Repositorio / Git / commit
Carpeta versionada; historial; un guardado en ese historial. El MD del equipo vive en Git.
Raíz
Carpeta superior del repo. Ahí va el MD general.
Frontend / backend
UI frente al usuario / lógica y datos en servidor.
API / endpoint / handler
Contrato HTTP; una puerta; el código que la atiende.
DTO
Objeto de transporte (request/response), no la entidad de persistencia.
Puerto / adaptador
Interfaz que el dominio/aplicación define / implementación técnica (JPA, HTTP).
Arquitectura / patrón / convención
Mapa de partes / receta repetida / nombres y carpetas.
MVVM / MVP / MVC
Formas de separar vista y lógica en UI (muy usadas en Android).
REST
API HTTP orientada a recursos.
Monolito
Un despliegue (o pocos), aunque por dentro haya paquetes.
Glob / paths / YAML frontmatter
Máscara de archivos; lista de rutas en Claude rules; metadatos al inicio de un .mdc.
/init /context /memory /compact
Comandos Claude Code: borrador de MD; ver carga; editar memoria; compactar y releer MD de raíz. Docs.
Instruct / RAG / fine-tune
Instrucciones en contexto (AGENTS.md) / recuperar docs al vuelo / cambiar pesos. No son lo mismo. Ver entrenamiento.
LoRA / QLoRA
Adaptar un modelo base entrenando matrices chicas (QLoRA: base cuantizada). Los pesos originales siguen congelados.
Team Rules / User Rules (Cursor)
Org-wide en el dashboard (Team/Enterprise) / preferencias de la cuenta. No sustituyen el AGENTS.md del repo. Ver equipo.
Modelo
El motor (Opus, Composer, GPT…). La herramienta inyecta reglas; el modelo las interpreta.

Consultar

19. Referencias para consultar

Páginas oficiales para contrastar esta guía. Si un detalle de producto cambia, prevalece el enlace. El foro no es contrato de producto.

Anthropic / Claude Code

  • How Claude remembers your project (CLAUDE.md) — Carga al inicio vs. anidados on-demand; tamaño (~200 líneas); imports @; Claude Code no lee AGENTS.md salvo import; .claude/rules con paths; /init, /context, /compact; contexto, no candado (hooks).
  • Memory — Misma familia: CLAUDE.md frente a auto memory (lo que Claude anota solo; no es la norma del equipo).
  • Using CLAUDE.md files — Por qué existe el archivo, tono de documentación viva, no volcar teoría.
  • Give Claude context: CLAUDE.md and better prompts — Briefing del primer día; no se relee del disco en cada turno; edición a mitad: próxima sesión, /compact o /memory; /clear; qué poner y qué no.

Cursor

  • Rules — Tipos: Always / Intelligent / Specific Files (glob) / Manual @regla; AGENTS.md vs .mdc; anidados (lo específico suele ganar). Team Rules (planes Team/Enterprise): dashboard; Enforce; glob opcional; precedencia Team → Project → User; aplican a todos los repos del equipo. User Rules no van a Inline Edit (Ctrl+K).
  • Help: Rules, AGENTS.md y CLAUDE.md — Cómo crear reglas; AGENTS.md en la raíz; CLAUDE.md en Cursor (compatibilidad; confirmá always-on en tu versión).
  • Customizing agents — Rules vs skills; no copiar guías de estilo; ejemplos (comandos, convenciones). La página de Learn resume; la de Rules es la normativa de tipos.

Otras herramientas (no Cursor) y formato AGENTS.md

Fine-tune, LoRA, hosting local (producto-específico)

Foro (no oficial)

  • Several related questions regarding the rulesForo de la comunidad, no documentación de contrato. Se discute la doble inyección si el mismo texto está en AGENTS.md y en un .mdc con alwaysApply. Úsalo como pista; verificá en Customize → Rules.

También: Alcance y límites (versiones) · cómo usar (5 min) · cuidar los tokens · capítulo 11 · tabla no-Cursor · equipo y Git · cómo se inyecta · CLAUDE vs AGENTS · al abrir un chat.