El Archivo CLAUDE.md
Objetivo del modulo
Dar contexto persistente a Claude para que entienda tu proyecto sin repetir informacion.
2.1 Que es CLAUDE.md
CLAUDE.md es un archivo de memoria que Claude Code lee automaticamente al iniciar cada sesion. Funciona como un contexto persistente que le dice a Claude quien eres, como trabajas y que necesita saber sobre tu proyecto.
El problema que resuelve
Sin CLAUDE.md, cada sesion con Claude empieza desde cero:
> Usa TypeScript estricto
> Los componentes van en src/components
> Usamos Vitest para tests
> El proyecto usa PostgreSQL con Prisma
> No modifiques archivos en /generated
... (repetir en cada sesion)Con CLAUDE.md, escribes esto una vez y Claude lo recuerda siempre.
Beneficios principales
1. Contexto persistente
Claude recuerda tus preferencias, convenciones y arquitectura entre sesiones. No necesitas repetir informacion.
2. Ahorro de tokens
Al evitar repetir instrucciones, reduces el consumo de tokens en cada conversacion. El contexto de CLAUDE.md se carga una sola vez al inicio de la sesion.
Nota: Si usas
/clearpara limpiar la conversacion, CLAUDE.md no se pierde. Solo se borra el historial de mensajes, pero el contexto de memoria permanece cargado.
3. Respuestas mas precisas
Con contexto especifico de tu proyecto, Claude genera codigo que:
- Sigue tus convenciones de estilo
- Usa las tecnologias correctas
- Respeta tu arquitectura
- Evita patrones que no quieres
4. Colaboracion en equipo
El archivo CLAUDE.md del proyecto se versiona en git. Todo el equipo comparte las mismas instrucciones y convenciones.
Como funciona
Cuando inicias Claude Code:
- Descubre archivos CLAUDE.md en el directorio actual y superiores
- Lee el contenido de cada archivo encontrado
- Carga las instrucciones como contexto del sistema
- Aplica las reglas en cada respuesta
Verificar que carga Claude
Usa el comando /memory para ver los archivos de memoria cargados.
2.2 Jerarquia de CLAUDE.md
Claude Code soporta multiples archivos CLAUDE.md en diferentes ubicaciones. Cada nivel tiene un proposito especifico y todos se combinan para formar el contexto completo.
Los 4 niveles de memoria
| Nivel | Ubicacion | Proposito | Compartido |
|---|---|---|---|
| Politica gestionada | Sistema operativo | Reglas de la organizacion | Todos los usuarios |
| Usuario | ~/.claude/CLAUDE.md | Preferencias personales | Solo tu (todos los proyectos) |
| Proyecto | ./CLAUDE.md | Instrucciones del equipo | Equipo (via git) |
| Local del proyecto | ./CLAUDE.local.md | Preferencias personales del proyecto | Solo tu (proyecto actual) |
Nivel 1: Politica gestionada (organizacion)
Configurado por IT/DevOps para aplicar reglas a toda la organizacion.
| Sistema | Ubicacion |
|---|---|
| Linux | /etc/claude-code/CLAUDE.md |
| macOS | /Library/Application Support/ClaudeCode/CLAUDE.md |
| Windows | C:\Program Files\ClaudeCode\CLAUDE.md |
Nivel 2: Usuario (global personal)
~/.claude/CLAUDE.mdAplica a todos tus proyectos. Ideal para:
- Tu estilo de codigo preferido
- Herramientas que siempre usas
- Preferencias de comunicacion
Ejemplo:
# Preferencias personales
## Estilo de codigo
- Prefiero codigo conciso sobre verboso
- Usar comentarios solo cuando el codigo no es auto-explicativo
- Nombrar variables de forma descriptiva
## Comunicacion
- Respuestas en espanol
- Explicar el "por que" ademas del "como"
## Herramientas
- Usar pnpm en lugar de npm cuando sea posible
- Preferir Vitest sobre JestNivel 3: Proyecto (compartido con el equipo)
Dos ubicaciones validas:
./CLAUDE.mdo
./.claude/CLAUDE.mdSe versiona en git. Todo el equipo comparte las mismas instrucciones.
Nivel 4: Local del proyecto (personal por proyecto)
./CLAUDE.local.mdNo se versiona en git (se anade automaticamente a .gitignore). Ideal para:
- Rutas locales especificas de tu maquina
- Configuraciones de desarrollo personal
- Notas temporales del proyecto
Orden de aplicacion
Todos los archivos se combinan. No hay "prioridad" que sobrescriba — se suman:
Politica gestionada (empresa)
+
Usuario (~/.claude/CLAUDE.md)
+
Proyecto (./CLAUDE.md)
+
Subdirectorios (src/CLAUDE.md)
+
Local (./CLAUDE.local.md)
=
Contexto combinado2.3 Que incluir en CLAUDE.md
Un buen CLAUDE.md es conciso, especifico y contiene informacion que realmente impacta en como Claude genera codigo.
Principios de contenido efectivo
| Caracteristica | Descripcion |
|---|---|
| Estable | No cambia frecuentemente |
| Repetitivo | Lo dirias en cada sesion |
| Accionable | Afecta directamente al codigo generado |
| Especifico | "Usa 2 espacios" en lugar de "formatea bien" |
Secciones recomendadas
1. Descripcion del proyecto
# Proyecto: E-commerce API
Backend REST para tienda online. Maneja catalogo,
carrito, pagos y envios.2. Stack tecnologico
## Stack
- Backend: Node.js + Express + TypeScript
- Base de datos: PostgreSQL
- ORM: Prisma
- Cache: Redis
- Tests: Vitest3. Convenciones de codigo
## Convenciones de codigo
- TypeScript en modo estricto
- Variables y funciones en camelCase
- Clases y tipos en PascalCase
- Interfaces con prefijo I (IUser, IProduct)
- 2 espacios de indentacion
- Punto y coma obligatorio4. Estructura de carpetas
## Estructura
/src
/controllers -> Handlers de rutas
/services -> Logica de negocio
/models -> Modelos de Prisma
/middlewares -> Middlewares de Express
/utils -> Funciones utilitarias
/types -> Tipos e interfaces5. Comandos importantes
## Comandos
- `npm run dev` -> Desarrollo con hot reload
- `npm run test` -> Ejecutar tests
- `npm run build` -> Build de produccion
- `npm run lint` -> Verificar estilo6. Restricciones y reglas
## Reglas
- NO modificar archivos en /generated
- NO usar console.log, usar el logger del proyecto
- NO commitear .env o credenciales
- Siempre crear tests para nuevas funciones
- Siempre validar input con ZodUso de imports con @
Para contenido extenso, usa referencias en lugar de incluir todo:
# Proyecto: Mi App
Ver @README.md para descripcion completa
Ver @package.json para scripts disponibles
## Documentacion adicional
- Arquitectura: @docs/architecture.md
- API: @docs/api-reference.mdQue NO incluir
| Evitar | Razon |
|---|---|
| Codigo fuente extenso | Consume demasiados tokens |
| Documentacion completa | Mejor usar @archivo |
| Informacion volatil | Requiere actualizacion constante |
| Secretos/credenciales | Riesgo de seguridad |
| Historial de cambios | No afecta al codigo |
Reglas modulares con .claude/rules/
Para proyectos grandes, organiza reglas en archivos separados:
.claude/rules/
├── code-style.md # Estilo de codigo
├── testing.md # Convenciones de tests
├── api.md # Diseno de API
└── security.md # Reglas de seguridad2.4 Buenas practicas
Mantenerlo actualizado con cambios arquitectonicos
| Evento | Accion en CLAUDE.md |
|---|---|
| Nueva dependencia importante | Anadir al stack |
| Cambio de estructura de carpetas | Actualizar seccion de estructura |
| Nueva convencion del equipo | Documentar la regla |
| Deprecacion de patron | Marcar como obsoleto o eliminar |
| Migracion tecnologica | Reflejar el nuevo stack |
Incluir decisiones tecnicas importantes
Las decisiones de diseno que no son obvias merecen documentarse:
## Decisiones tecnicas
### Autenticacion
Usamos JWT con refresh tokens en lugar de sesiones.
Razon: Necesitamos soporte para multiples clientes (web, movil, API).
### Base de datos
PostgreSQL en lugar de MongoDB.
Razon: Necesitamos transacciones ACID para operaciones financieras.Documentar gotchas y trampas comunes
Los "gotchas" son comportamientos inesperados o errores comunes:
## Gotchas
### Prisma y transacciones
Prisma no hace rollback automatico en errores de validacion.
Siempre envuelve operaciones multiples en `$transaction()`.
### Variables de entorno
En produccion, las variables se cargan desde AWS Secrets Manager.
NO usar process.env directamente, usar el helper `getConfig()`.
### Fechas y zonas horarias
Todas las fechas en la DB estan en UTC.
El frontend convierte a la zona del usuario.
NO usar `new Date()` en el servidor, usar `dayjs.utc()`.Anadir ejemplos de codigo cuando sea util
Patron de servicio:
// src/services/user.service.ts
import { db } from '@/lib/db';
import { AppError } from '@/utils/errors';
import type { IUser, ICreateUser } from '@/types';
export async function createUser(data: ICreateUser): Promise<IUser> {
const existing = await db.user.findUnique({
where: { email: data.email }
});
if (existing) {
throw new AppError('EMAIL_EXISTS', 'El email ya esta registrado');
}
return db.user.create({ data });
}Checklist de calidad
- Refleja el estado actual del proyecto?
- Las decisiones tecnicas estan documentadas con razones?
- Los gotchas mas comunes estan listados?
- Los patrones tienen ejemplos de codigo?
- Es lo suficientemente conciso para no desperdiciar tokens?
Practica del modulo
Objetivos
- Crear CLAUDE.md global con preferencias personales
- Crear CLAUDE.md para un proyecto existente
- Probar como mejora la calidad de respuestas
Ejercicio 1: CLAUDE.md global
Paso 1.1: Crear el archivo
touch ~/.claude/CLAUDE.mdPaso 1.2: Definir tus preferencias personales
# Preferencias globales
## Idioma y comunicacion
- Responde siempre en espanol
- Se conciso y directo
- Explica el "por que" de las decisiones importantes
## Estilo de codigo preferido
- Usa TypeScript siempre que sea posible
- Prefiero funciones arrow sobre function declarations
- Usa async/await en lugar de .then()
## Convenciones de nombres
- Variables y funciones: camelCase
- Clases e interfaces: PascalCase
- Constantes globales: UPPER_SNAKE_CASE
- Archivos: kebab-case
## Herramientas favoritas
- Testing: Vitest
- Linting: ESLint + Prettier
- Git: commits convencionales (feat:, fix:, docs:)Ejercicio 2: CLAUDE.md de proyecto
Paso 2.1: Analizar el proyecto
claudePregunta:
Analiza la estructura de este proyecto y dame un resumen de:
1. Que tecnologias usa
2. Como esta organizado
3. Que comandos principales tienePaso 2.2: Crear CLAUDE.md del proyecto
# Proyecto: [Nombre del proyecto]
[Descripcion breve de que hace el proyecto]
## Stack
- [Lenguaje/Framework principal]
- [Base de datos si aplica]
## Estructura
/[carpeta1] -> [que contiene]
/[carpeta2] -> [que contiene]
## Comandos
- `[comando1]` -> [que hace]
- `[comando2]` -> [que hace]
## Convenciones
- [Convencion 1]
- [Convencion 2]
## Reglas
- NO [cosa que no debe hacerse]
- Siempre [cosa que debe hacerse]Ejercicio 3: Comparar calidad de respuestas
Crea un proyecto simple sin CLAUDE.md, pide codigo, luego anade CLAUDE.md con convenciones especificas y pide lo mismo. Compara como el codigo generado sigue (o no) las convenciones.
Checklist de validacion
- Existe
~/.claude/CLAUDE.mdcon mis preferencias personales -
/memorymuestra el CLAUDE.md global cuando inicio Claude Code - Tengo un proyecto con CLAUDE.md especifico
-
/memorymuestra ambos archivos (global + proyecto) - Compare respuestas con y sin CLAUDE.md y note la diferencia