2Modulo 2

El Archivo CLAUDE.md

35 min

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 /clear para 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:

  1. Descubre archivos CLAUDE.md en el directorio actual y superiores
  2. Lee el contenido de cada archivo encontrado
  3. Carga las instrucciones como contexto del sistema
  4. 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

NivelUbicacionPropositoCompartido
Politica gestionadaSistema operativoReglas de la organizacionTodos los usuarios
Usuario~/.claude/CLAUDE.mdPreferencias personalesSolo tu (todos los proyectos)
Proyecto./CLAUDE.mdInstrucciones del equipoEquipo (via git)
Local del proyecto./CLAUDE.local.mdPreferencias personales del proyectoSolo tu (proyecto actual)

Nivel 1: Politica gestionada (organizacion)

Configurado por IT/DevOps para aplicar reglas a toda la organizacion.

SistemaUbicacion
Linux/etc/claude-code/CLAUDE.md
macOS/Library/Application Support/ClaudeCode/CLAUDE.md
WindowsC:\Program Files\ClaudeCode\CLAUDE.md

Nivel 2: Usuario (global personal)

~/.claude/CLAUDE.md

Aplica 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 Jest

Nivel 3: Proyecto (compartido con el equipo)

Dos ubicaciones validas:

./CLAUDE.md

o

./.claude/CLAUDE.md

Se versiona en git. Todo el equipo comparte las mismas instrucciones.

Nivel 4: Local del proyecto (personal por proyecto)

./CLAUDE.local.md

No 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 combinado

2.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

CaracteristicaDescripcion
EstableNo cambia frecuentemente
RepetitivoLo dirias en cada sesion
AccionableAfecta 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: Vitest

3. 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 obligatorio

4. 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 interfaces

5. 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 estilo

6. 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 Zod

Uso 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.md

Que NO incluir

EvitarRazon
Codigo fuente extensoConsume demasiados tokens
Documentacion completaMejor usar @archivo
Informacion volatilRequiere actualizacion constante
Secretos/credencialesRiesgo de seguridad
Historial de cambiosNo 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 seguridad

2.4 Buenas practicas

Mantenerlo actualizado con cambios arquitectonicos

EventoAccion en CLAUDE.md
Nueva dependencia importanteAnadir al stack
Cambio de estructura de carpetasActualizar seccion de estructura
Nueva convencion del equipoDocumentar la regla
Deprecacion de patronMarcar como obsoleto o eliminar
Migracion tecnologicaReflejar 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.md

Paso 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

claude

Pregunta:

Analiza la estructura de este proyecto y dame un resumen de:
1. Que tecnologias usa
2. Como esta organizado
3. Que comandos principales tiene

Paso 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.md con mis preferencias personales
  • /memory muestra el CLAUDE.md global cuando inicio Claude Code
  • Tengo un proyecto con CLAUDE.md especifico
  • /memory muestra ambos archivos (global + proyecto)
  • Compare respuestas con y sin CLAUDE.md y note la diferencia