AGENTS.md para TMF

Sistema de context files para estandarizar como trabajamos con agentes AI en todos nuestros repos

Pendiente de aprobacion 25 Marzo 2026

📋 Votacion del equipo

💡 En 30 segundos

AGENTS.md son archivos markdown que viven en nuestros repos y le dicen a los agentes AI como escribir codigo que siga nuestros patrones. Es como un README, pero para agentes.

Ponemos las reglas una vez, y cualquier agente que toque el repo las sigue automaticamente. No mas "olvidaste el tenant_id" o "eso no va en localStorage".

El problema con Claude Code

Casi todo el equipo usa Claude Code, que tiene su propio formato (CLAUDE.md) y no carga AGENTS.md automaticamente. La solucion: cada repo tiene un CLAUDE.md minimo que dice See @AGENTS.md, y Claude lo lee. Asi el contenido real vive en AGENTS.md (compatible con todas las herramientas) y Claude lo carga via referencia.

🌍 Soporte por herramienta

HerramientaArchivo nativoAGENTS.md?
Claude CodeCLAUDE.mdVia @AGENTS.md
Codex (OpenAI)AGENTS.mdNativo
OpenCodeAGENTS.mdNativo
Gemini CLIGEMINI.mdSi
Cursor.cursorrulesSi
GitHub Copilotcopilot-instructions.mdSi
Windsurf / Amp / Devin-Si

AGENTS.md es estandar de la Linux Foundation (AAIF) desde dic 2025. +60.000 repos en GitHub.

🏗️ Nuestra estrategia

AGENTS.md = Fuente de verdad

Todo el contenido de patrones y arquitectura vive aqui. Compatible con todas las herramientas.

CLAUDE.md = Puente

Minimo: solo See @AGENTS.md para que Claude Code cargue las reglas.

🌳 Estructura por niveles

Cada repositorio es su propia raiz. El AGENTS.md de la raiz define las reglas globales de ese repo, y los subdirectorios especializan:

RAIZ Raiz del repositorio

Reglas globales del repo: stack, naming, arquitectura, seguridad. Se carga SIEMPRE. Max ~100 lineas.

SUB Subdirectorio

Reglas concretas de esa parte del codigo. Solo se carga cuando tocas archivos ahi.

📝 Que poner (y que no)

✅Decisiones de arquitectura que no se ven leyendo un solo archivo
✅Como crear cosas nuevas paso a paso (nuevo servicio, nuevo hook, nuevo componente)
✅Reglas criticas tipo NEVER (no localStorage, no queries sin tenant_id)
✅Convenciones no obvias (naming de hooks, return shape, response format)
❌Lo que se ve en el codigo ("usamos Express" si ya hay package.json)
❌Archivos generados por AI (pueden ser contraproducentes)
❌Mas de 100 lineas por archivo (dividir en sub-directorios)

🎯 Ejemplo real: tmf-services

📁tmf-services/
├── 📄AGENTS.mdRAIZ
├── 📄CLAUDE.mdSee @AGENTS.md
├── 📁services/
│ └── 📄AGENTS.mdSUBComo crear un servicio nuevo
└── 📁shared/
└── 📄AGENTS.mdSUBReglas de utilidades compartidas

tmf-services/AGENTS.md RAIZ

# tmf-services

## Architecture
- Multi-tenant: EVERY query MUST .eq("tenant_id", tenantId)
- Tenant context from x-tenant-id header, extracted by middleware
- Services communicate via internal HTTP, propagating x-tenant-id
- If called service fails, log but don't fail the request (graceful degradation)

## Service structure
- src/index.ts Express app | src/config.ts Zod env | src/routes/ public + internal
- Config: always Zod parsing process.env. No dotenv, vars come from Docker
- Public routes: /api/{resource} | Internal: /internal/{resource}
- Every service MUST have openapi.yaml. Run generate:skills after API changes

## Rules
- NEVER query without tenant_id filter
- NEVER use Supabase anon key -- service role only
- /health always excluded from auth middleware
- CREATE: always { ...req.body, tenant_id: req.tenantId }
- Response format: { data, count, limit, offset }

tmf-services/services/AGENTS.md SUB

# Creating a new service

1. Copy patients-svc/ as template to tmf-{domain}-svc/
2. Update config.ts with PORT + dependent service URLs
3. Create routes/{resource}.ts with CRUD + tenant filtering
4. Create routes/internal.ts for service-to-service endpoints
5. Write openapi.yaml
6. Add to docker-compose
7. Run npm run generate:skills

Validation: Zod schemas on POST/PATCH, return error.flatten() on 400
Pagination: query params limit (default 20) + offset (default 0)

🔗 Referencias

agents.md -- Estandar oficial (Linux Foundation / AAIF)

Claude Code docs -- Documentacion de CLAUDE.md y memory

ETH Zurich paper -- Estudio sobre efectividad de context files

OpenAgentsControl -- Inspiracion original para este ADR

ADR completo en Notion -- Version detallada con todos los ejemplos