Módulo 3: CLAUDE.md y el sistema de memoria

CLAUDE.local.md y User CLAUDE.md: Preferencias Personales Sin Afectar al Equipo

CLAUDE.local.md y User CLAUDE.md: Preferencias Personales Sin Afectar al Equipo

Descripción

CLAUDE.md es compartido. Todo el equipo lo ve, lo usa, y lo commitea al repositorio. Pero hay cosas que son tuyas — preferencias de estilo, configuración de tu entorno local, reglas experimentales que estás probando, o simplemente la forma en que te gusta interactuar con Claude Code.

Claude Code tiene dos mecanismos para preferencias personales:

  1. CLAUDE.local.md (project-local): en la raíz del proyecto, NO se commitea. Aplica solo a ese proyecto.
  2. ~/.claude/CLAUDE.md (user scope): en tu home directory. Aplica a TODOS tus proyectos.

En esta cápsula aprenderás cuándo usar cada uno, qué poner en ellos, cómo interactúan con la jerarquía de memoria, y los patterns comunes que maximizan su utilidad. Al final del módulo, tendrás un sistema de memoria completo: CLAUDE.md para el proyecto, CLAUDE.local.md para ti-en-ese-proyecto, ~/.claude/CLAUDE.md para ti-en-todo, settings para permisos, y auto memory para correcciones.


User Scope: ~/.claude/CLAUDE.md

Antes de entrar en CLAUDE.local.md, mencionemos el User scope — un archivo CLAUDE.md personal que aplica a todos tus proyectos.

Ubicación: ~/.claude/CLAUDE.md

Cuándo usar:

  • Preferencias de estilo que no dependen del proyecto (idioma de respuesta, verbosidad, preferencia de ejemplos)
  • Tu workflow personal (como te gusta que Claude proponga cambios, cuándo pedir confirmación)
  • Atajos personales que usas en todos tus proyectos
  • Shortcuts de comandos que prefieres

Ejemplo de ~/.claude/CLAUDE.md:

# Mis preferencias personales

## Idioma
- Responde en español conversacional
- Código y nombres en inglés

## Estilo
- Sé directo y conciso — no resumas lo obvio
- Cuando expliques código, incluye un ejemplo corto
- No generes comentarios de código que describan QUÉ hace (solo POR QUÉ cuando sea no obvio)

## Workflow
- Antes de escribir código, confirma qué entendiste
- Si vas a hacer más de 3 cambios, muéstrame el plan primero
- Para cambios arriesgados, prefiero que uses plan mode

User scope vs CLAUDE.local.md:

AspectoUser (~/.claude/CLAUDE.md)Local (CLAUDE.local.md)
AlcanceTodos tus proyectosSolo el proyecto actual
Ubicación~/.claude/CLAUDE.mdEn raíz del proyecto
GitNo va a git (está en tu home)Va a .gitignore del proyecto
Cuándo usarPreferencias generales que aplican en todos ladosPreferencias específicas del proyecto actual
WorktreesSe aplica en todosExiste solo en el worktree donde lo creaste

Tip para worktrees: Si trabajas con múltiples git worktrees del mismo repo, CLAUDE.local.md solo existe en el worktree donde lo creaste. Para compartir preferencias personales entre worktrees, importa un archivo de tu home:

# Individual Preferences
- @~/.claude/my-project-instructions.md


Qué Es CLAUDE.local.md

Definición

CLAUDE.local.md es un archivo Markdown que:

  • Ubicación: Raíz de tu proyecto (junto a CLAUDE.md)
  • Nombre: Siempre CLAUDE.local.md
  • Formato: Markdown estándar (misma estructura que CLAUDE.md)
  • Propósito: Preferencias personales que NO se comparten con el equipo
  • Cuándo se lee: Al inicio de cada sesión, automáticamente (igual que CLAUDE.md)
  • Git: Debe estar en .gitignore
  • Prioridad: Mayor que CLAUDE.md, menor que la conversación
my-project/
├── CLAUDE.md              ← Reglas del proyecto (git tracked)
├── CLAUDE.local.md        ← Tus preferencias (git ignored)
├── .gitignore             ← Incluye CLAUDE.local.md
├── package.json
└── src/

Cómo funciona con CLAUDE.md

Cuando inicias una sesión, Claude Code lee ambos archivos:

1. Claude lee CLAUDE.md          → Reglas del proyecto
2. Claude lee CLAUDE.local.md    → Tus overrides personales
3. CLAUDE.local.md gana          → Si hay conflicto
┌────────────────────────────────────────┐
│  Sesión de Claude Code                 │
│                                        │
│  CLAUDE.md:                            │
│  "Comentarios en inglés"               │
│                                        │
│  CLAUDE.local.md:                      │
│  "Responde en español"                 │
│  "Comentarios en español"              │
│                                        │
│  → Claude responde en español          │
│  → Comentarios en español              │
│  → CLAUDE.local.md tiene prioridad     │
│                                        │
│  Tu compañero (sin CLAUDE.local.md):   │
│  → Respuestas en inglés               │
│  → Comentarios en inglés               │
│  → Solo CLAUDE.md aplica               │
└────────────────────────────────────────┘

Lo que NO es CLAUDE.local.md

  • ❌ No es un reemplazo de CLAUDE.md (es un complemento)
  • ❌ No es para reglas que todo el equipo debe seguir
  • ❌ No debería contradecir reglas críticas del proyecto
  • ❌ No es un dump de toda tu configuración personal

La Convención de .gitignore

Por qué CLAUDE.local.md no se commitea

CLAUDE.local.md es personal por diseño. Tus preferencias no deberían afectar al resto del equipo:

  • Tú prefieres respuestas en español; tu compañero en inglés
  • Tú usas PostgreSQL local en puerto 5433; tu compañero en 5432
  • Tú quieres verbose logging; tu compañero quiere output limpio
  • Tú estás experimentando con un pattern; tu compañero no

Si commiteas CLAUDE.local.md, tus preferencias personales se imponen a todo el equipo. Eso rompe el propósito.

Cómo configurar .gitignore

echo "CLAUDE.local.md" >> .gitignore
git add .gitignore
git commit -m "chore: ignore CLAUDE.local.md"

Verifica que está ignorado:

git status
# CLAUDE.local.md NO debería aparecer como untracked

¿Y si quiero un template?

Si quieres que tu equipo sepa que CLAUDE.local.md existe y cómo usarlo, crea un template:

# Crea un template que SÍ se commitea
cat > CLAUDE.local.md.example << 'EOF'
# CLAUDE.local.md (Personal Preferences)
# Copia este archivo como CLAUDE.local.md y personaliza.
# NO commitees CLAUDE.local.md al repo.

## Idioma
# Responde en [tu idioma preferido]

## Estilo
# [Tus preferencias de estilo de código]

## Entorno local
# [Tu configuración local]
EOF

git add CLAUDE.local.md.example
git commit -m "docs: add CLAUDE.local.md template"

Casos de Uso

1. Preferencias de idioma

# CLAUDE.local.md

## Idioma
- Responde siempre en español
- Comentarios de código en español
- Nombres de variables y funciones en inglés (sigue CLAUDE.md)
- Commit messages en inglés (sigue CLAUDE.md)

El proyecto puede tener CLAUDE.md en inglés, pero tú quieres que Claude te responda en español. CLAUDE.local.md lo resuelve sin afectar al equipo.

2. Entorno local específico

# CLAUDE.local.md

## Mi entorno local
- Base de datos: localhost:5433 (mi PostgreSQL corre en puerto no estándar)
- Redis: localhost:6380 (tengo otro Redis en 6379 para otro proyecto)
- El frontend dev server está en http://localhost:3001 (no 3000)
- Python virtualenv: ~/envs/invoice-api/

Cada developer tiene su entorno configurado diferente. Estas diferencias van en CLAUDE.local.md.

3. Estilo de interacción

# CLAUDE.local.md

## Cómo interactuar conmigo
- Siempre explica tu razonamiento antes de escribir código
- Muestra el diff en vez del archivo completo cuando sea posible
- No uses emojis en las respuestas
- Sé conciso — prefiero respuestas cortas y directas
- Cuando hay múltiples opciones, dame una tabla comparativa

4. Preferencias de coding style personal

# CLAUDE.local.md

## Mi estilo
- Prefiero early returns sobre nested ifs
- Me gustan los guard clauses al inicio de funciones
- Prefiero named exports sobre default exports
- Usa destructuring siempre que sea posible
- Para funciones de una línea: arrow sin braces

Estas preferencias son tuyas. Tu compañero puede preferir lo opuesto — y su CLAUDE.local.md reflejará eso.

5. Reglas experimentales

# CLAUDE.local.md

## Experimentos (temporal)
- Estoy probando el pattern Result<T, E> para error handling
  en vez de try/catch. Úsalo en código nuevo que generes.
- Estoy evaluando Drizzle ORM como reemplazo de Prisma.
  Para nuevos endpoints, usa Drizzle.

Estás probando algo nuevo. No quieres que el equipo lo adopte hasta que estés seguro. CLAUDE.local.md te permite experimentar sin afectar el CLAUDE.md del proyecto.

6. Accesibilidad

# CLAUDE.local.md

## Accesibilidad
- Usa verbose logging con timestamps para debugging
- En diffs, incluye 5 líneas de contexto antes y después
- Cuando generes tablas, no uses más de 4 columnas
- Prefiere bullet points sobre párrafos largos

7. Contexto temporal

# CLAUDE.local.md

## Contexto actual
- Estoy trabajando en el branch feature/payment-refunds
- La tarea actual es JIRA-1234: implementar reembolsos
- El endpoint POST /api/refunds está a medio implementar
  (falta la validación de montos)

Esto le da a Claude contexto sobre en qué estás trabajando ahora mismo, sin contaminar CLAUDE.md con información temporal.


Cómo Interactúa con la Jerarquía

Posición en la jerarquía de 6 niveles

CLAUDE.local.md se ubica entre CLAUDE.md del proyecto (nivel 4) y CLAUDE.md de subdirectorio (nivel 5):

6. Conversación          ← Mayor prioridad
5. CLAUDE.md subdir
4b. CLAUDE.local.md      ← AQUÍ
4a. CLAUDE.md proyecto
3. CLAUDE.md enterprise
2. System prompt
1. Training data         ← Menor prioridad

Regla de precedencia

CLAUDE.md dice:          "Comentarios en inglés"
CLAUDE.local.md dice:    "Comentarios en español"
→ Gana CLAUDE.local.md   (comentarios en español)

CLAUDE.local.md dice:    "Usa Drizzle ORM"
Subdirectorio dice:      "En tests/, usa SQLite in-memory"
→ Gana subdirectorio     (SQLite en tests/)

CLAUDE.local.md dice:    "Respuestas concisas"
Tú en la conversación:   "Dame una explicación detallada de esto"
→ Gana la conversación   (explicación detallada)

Lo que CLAUDE.local.md puede y no puede hacer

Puede:

  • Sobreescribir preferencias de estilo de CLAUDE.md
  • Agregar contexto personal (entorno, idioma, herramientas)
  • Agregar reglas personales que complementan CLAUDE.md
  • Relajar reglas no críticas para tu uso personal

No debería:

  • Desactivar reglas de seguridad del proyecto
  • Contradecir la arquitectura definida en CLAUDE.md
  • Cambiar el stack del proyecto ("usa Rust en vez de Python")
  • Redefinir la estructura de archivos

Estructura de CLAUDE.local.md

Template recomendado

# CLAUDE.local.md — Preferencias personales

## Idioma
[Tu preferencia de idioma de respuestas y comentarios]

## Estilo de interacción
[Cómo quieres que Claude interactúe contigo]

## Coding preferences
[Tu estilo personal de código]

## Entorno local
[Tu configuración local: puertos, paths, tools]

## Contexto actual (temporal)
[En qué estás trabajando ahora — actualízalo frecuentemente]

Ejemplo completo

# CLAUDE.local.md

## Idioma
- Responde en español
- Comentarios de código en español
- Variables y funciones en inglés (sigue CLAUDE.md)

## Estilo de interacción
- Explica tu razonamiento antes de codear
- Sé conciso en explicaciones, detallado en código
- Cuando dudes entre dos opciones, pregunta
- No generes comentarios que repitan lo que el código dice

## Coding preferences
- Early returns siempre
- Destructuring en argumentos de función
- Prefer const sobre let, nunca var
- Arrow functions para callbacks y funciones cortas
- Named exports, no default exports
- Template literals sobre concatenación

## Entorno local
- PostgreSQL: localhost:5433
- Redis: localhost:6380
- Python: ~/envs/invoice/bin/python
- Node: v20.11 (via nvm)

## Contexto actual
- Branch: feature/payment-webhooks
- Trabajando en: integración con Stripe webhooks
- Blocker: el webhook de invoice.paid no llega en entorno local
  (posible issue con el tunnel de Stripe CLI)

Comparaciones y Decisiones

CLAUDE.md vs CLAUDE.local.md: Qué va dónde

InformaciónCLAUDE.mdCLAUDE.local.md
Stack del proyecto✅❌
Convenciones de naming✅❌ (a menos que prefieras diferente)
Estructura de archivos✅❌
Comandos del proyecto✅Solo tus comandos extras
Reglas del equipo✅❌
Idioma de respuestasSi el equipo lo define✅ Tu preferencia
Tu entorno local❌✅
Estilo de interacción❌✅
Tus coding preferences❌ (a menos que sea del equipo)✅
Experimentos❌✅
Contexto temporal❌✅

La regla simple

Si aplica a todo el equipo → CLAUDE.md Si es solo para ti → CLAUDE.local.md

¿Y si no trabajo en equipo?

Si eres el único developer, la distinción es menos importante. Pero sigue siendo útil:

  • CLAUDE.md: lo que define el proyecto (stack, estructura, comandos)
  • CLAUDE.local.md: lo que define tu estilo (interacción, preferences)

Si alguien se une al proyecto, tu CLAUDE.md les dará contexto inmediato. Tu CLAUDE.local.md seguirá siendo tuyo.


Patterns Comunes

Pattern 1: "Idioma personalizado"

# CLAUDE.local.md

## Idioma
- Todas las respuestas en español
- Los comentarios de código en español  
- Pero los identificadores (variables, funciones, clases) en inglés
- Y los commit messages en inglés (convención del equipo)

Este es probablemente el caso de uso más común de CLAUDE.local.md. Tu equipo puede trabajar en inglés, pero tú quieres que Claude te responda en tu idioma.

Pattern 2: "Razonamiento visible"

# CLAUDE.local.md

## Estilo
- Siempre explica tu razonamiento antes de escribir código
- Muestra las alternativas que consideraste y por qué elegiste esta
- Cuando modifiques un archivo existente, explica qué cambias y por qué

Algunos developers quieren entender el "por qué" detrás de cada decisión. Otros prefieren solo el código. CLAUDE.local.md te permite elegir.

Pattern 3: "Verbose para debug, conciso para producción"

# CLAUDE.local.md

## Logging en mi entorno
- En development: verbose logging con timestamps y stack traces
- Cuando trabaje en archivos de test: output detallado
- Para código de producción: seguir las reglas de CLAUDE.md (loguru, structured)

Pattern 4: "Configuración de editor/herramientas"

# CLAUDE.local.md

## Mis herramientas
- Uso tmux — cuando sugieras comandos de terminal, asume tmux
- Mi editor es Neovim — no sugieras atajos de VS Code
- Tengo fzf y ripgrep instalados — úsalos en búsquedas
- Docker Desktop corriendo en mi Mac, accesible vía CLI

Pattern 5: "Progresión de aprendizaje"

# CLAUDE.local.md

## Mi nivel
- Soy intermediate en TypeScript pero avanzado en Python
- Cuando generes TypeScript, agrega comentarios explicando 
  los generics y utility types que uses
- En Python no necesito explicaciones extra

Este pattern es especialmente útil si estás aprendiendo un lenguaje nuevo. Le dices a Claude que te explique más cuando trabajas en áreas donde eres menos experto.

Pattern 6: "Context temporal rotativo"

# CLAUDE.local.md

## Sprint actual (actualizar cada semana)
- Sprint 14: Integración con Stripe
- Tasks pendientes: webhooks, refunds, subscription management
- Blocker: webhook validation falla en localhost (investigar)
- PR abierto: #234 (payment-intent flow)

Actualiza esta sección cada semana o cada sprint. Le da a Claude contexto sobre tu trabajo actual sin contaminar CLAUDE.md con información efímera.


Pitfalls y Edge Cases

Pitfall 1: Poner reglas del equipo en CLAUDE.local.md

# MAL — esto debería estar en CLAUDE.md

# CLAUDE.local.md
## Reglas del proyecto
- No usar any
- Tests obligatorios
- snake_case para Python

El problema: Tu compañero no tiene estas reglas. Claude le permitirá usar any y generar código sin tests.

La solución: Reglas del proyecto → CLAUDE.md. Preferencias personales → CLAUDE.local.md.

Pitfall 2: Olvidar el .gitignore

$ git add .
$ git commit -m "update"
# Oops — CLAUDE.local.md ahora está en el repo
# Tu compañero clona y tiene tus preferencias personales

La solución: Agrega a .gitignore ANTES de crear CLAUDE.local.md:

echo "CLAUDE.local.md" >> .gitignore
git add .gitignore
git commit -m "chore: ignore CLAUDE.local.md"
# AHORA crea CLAUDE.local.md

Pitfall 3: CLAUDE.local.md que contradice reglas de seguridad

# MAL — no hagas esto

# CLAUDE.local.md
## Override
- Ignora la regla de CLAUDE.md que dice "no modificar la tabla payments"
- Puedes hacer queries SQL directas (ignora la regla del ORM)

El problema: Las reglas de seguridad del proyecto existen por una razón. CLAUDE.local.md no debería desactivarlas.

La solución: Si necesitas romper una regla de seguridad, hazlo explícitamente en la conversación para un caso específico, no como regla permanente en CLAUDE.local.md.

Pitfall 4: CLAUDE.local.md enorme

# MAL — 300 líneas de preferencias personales

# CLAUDE.local.md
## Mis 50 reglas de estilo de código
1. Siempre usar const
2. Arrow functions para todo
3. No usar for loops
...
(47 reglas más)

## Mi historial de preferencias
En enero prefería X...
En febrero cambié a Y...
(20 líneas de historia)

El problema: Consume tokens innecesariamente en cada sesión. Las primeras 200 líneas combinadas de CLAUDE.md + CLAUDE.local.md son lo que deberías apuntar como máximo.

La solución: CLAUDE.local.md debería tener 20-50 líneas. Solo lo esencial. Si tienes 50 reglas de estilo, probablemente 5-10 son las que realmente importan.

Pitfall 5: No actualizar el contexto temporal

# CLAUDE.local.md (escrito hace 3 meses)
## Contexto actual
- Trabajando en la migración a PostgreSQL
- Branch: feature/pg-migration

Pero ya terminaste la migración hace 2 meses. Claude piensa que sigues migrando.

La solución: Si usas la sección de "contexto actual", actualízala regularmente. O mejor, usa la conversación para contexto temporal en vez de CLAUDE.local.md.

Edge Case: CLAUDE.local.md sin CLAUDE.md

my-project/
├── CLAUDE.local.md        ← Existe
├── (sin CLAUDE.md)        ← No existe
├── package.json
└── src/

¿Funciona? Sí — Claude lee CLAUDE.local.md como la única fuente de contexto de archivo. Pero no es recomendable:

  • CLAUDE.md es para el proyecto → debería existir siempre
  • CLAUDE.local.md es complementario → no debería ser la fuente principal
  • Si el proyecto no tiene CLAUDE.md, créalo primero

Ejemplo Completo Integrado

Escenario: Developer en equipo con setup completo

Estructura del proyecto:

invoice-api/
├── CLAUDE.md                    ← Reglas del equipo
├── CLAUDE.local.md              ← Tus preferencias (gitignored)
├── .claude/
│   ├── settings.json            ← Settings compartidos
│   └── settings.local.json      ← Tus permisos extras (gitignored)
├── .gitignore                   ← Incluye CLAUDE.local.md y settings.local.json
├── src/
│   └── ...
└── tests/
    ├── CLAUDE.md                ← Convenciones de testing
    └── ...

CLAUDE.md (compartido):

# Invoice API

API de facturación. Python 3.12, FastAPI, PostgreSQL.

## Stack
- FastAPI 0.109, SQLAlchemy 2.0, Alembic
- Pytest, Pydantic v2, loguru

## Convenciones
- snake_case, type hints obligatorias
- Comentarios en inglés
- No usar print(), usar loguru

## Comandos
- Dev: `uvicorn src.main:app --reload`
- Test: `pytest -v`

## Reglas
- NO modificar alembic/versions/ manualmente
- Ejecutar tests después de cambios

CLAUDE.local.md (solo tuyo):

# Preferencias personales

## Idioma
- Respóndeme en español
- Comentarios de código en español
- Variables y funciones: sigue CLAUDE.md (inglés)

## Estilo
- Explica tu razonamiento antes de codear
- Sé conciso, sin fluff
- Muestra diffs cuando modifiques archivos existentes
- No generes comentarios que repitan lo obvio

## Coding
- Early returns sobre nested ifs
- Guard clauses al inicio de funciones
- List comprehensions sobre loops cuando sea legible
- f-strings sobre .format()

## Mi entorno
- PostgreSQL: localhost:5433
- Redis: localhost:6380
- Virtualenv: ~/envs/invoice/

## Contexto
- Sprint 14: webhooks de Stripe
- Branch: feature/stripe-webhooks

tests/CLAUDE.md:

# Convenciones de Testing
- Fixtures en conftest.py
- any aceptable en mocks
- Factory pattern para datos de prueba
- Un assert por test cuando sea posible

Resultado: Cuando tú usas Claude Code:

  • Claude te responde en español (CLAUDE.local.md)
  • Sigue snake_case de Python (CLAUDE.md)
  • Explica razonamiento antes de codear (CLAUDE.local.md)
  • Usa tu PostgreSQL en 5433 (CLAUDE.local.md)
  • No modifica alembic/ manualmente (CLAUDE.md)
  • En tests, acepta any en mocks (tests/CLAUDE.md)

Cuando tu compañero usa Claude Code:

  • Claude le responde en inglés (CLAUDE.md dice "comentarios en inglés")
  • Sigue las mismas convenciones de proyecto (CLAUDE.md)
  • No tiene tu entorno local ni tus preferencias de estilo
  • Pero tiene las mismas reglas y restricciones del proyecto

Mismo proyecto, mismas reglas base, experiencias personalizadas.


Ejercicios Prácticos

Ejercicio 1: Crea tu CLAUDE.local.md

Crea CLAUDE.local.md en tu proyecto con al menos 4 secciones:

  1. Idioma preferido
  2. Estilo de interacción (conciso/detallado, con/sin explicación)
  3. 3-5 coding preferences personales
  4. Tu entorno local (puertos, paths, herramientas)
Template para empezar
# CLAUDE.local.md

## Idioma
- Responde en [español/inglés/otro]

## Interacción
- [Conciso o detallado]
- [Con o sin explicación del razonamiento]
- [Cómo presentar código: completo, diffs, solo cambios]

## Coding
- [Tu preferencia de estilo #1]
- [Tu preferencia de estilo #2]
- [Tu preferencia de estilo #3]

## Entorno
- DB: localhost:[puerto]
- [Herramientas específicas que usas]
- [Paths relevantes]

No olvides:

echo "CLAUDE.local.md" >> .gitignore

Ejercicio 2: Prueba el override de prioridad

  1. En CLAUDE.md, agrega: "Comentarios de código en inglés"
  2. En CLAUDE.local.md, agrega: "Comentarios de código en español"
  3. Pide a Claude que cree una función con comentarios
  4. Verifica que los comentarios salen en español (CLAUDE.local.md gana)
  5. Elimina la línea de CLAUDE.local.md
  6. En otra sesión, pide lo mismo — verificar que ahora salen en inglés
Qué observar

Este ejercicio demuestra la jerarquía en acción:

  • Con CLAUDE.local.md: tus preferencias ganan sobre CLAUDE.md
  • Sin CLAUDE.local.md: CLAUDE.md aplica como fuente de verdad

Es importante verificar ambas direcciones para entender que CLAUDE.local.md solo override cuando existe y tiene una instrucción relevante.

Si los comentarios NO cambiaron de idioma, posibles causas:

  • CLAUDE.local.md no está en la raíz del proyecto
  • El nombre del archivo tiene un typo
  • La instrucción no es lo suficientemente clara

Ejercicio 3: Experimenta con una regla nueva

Usa CLAUDE.local.md para probar una convención nueva sin afectar al equipo:

  1. Elige una convención que quieras probar (e.g., "usa Result<T, E> para error handling en vez de try/catch")
  2. Agrégala a CLAUDE.local.md
  3. Trabaja con Claude Code durante 30 minutos usando la convención
  4. Evalúa: ¿funciona? ¿mejoró tu código?
  5. Si sí → propón agregarla a CLAUDE.md para el equipo
  6. Si no → elimínala de CLAUDE.local.md, sin consecuencias
Ideas de experimentos
  • Probar un ORM diferente al del proyecto
  • Probar un pattern diferente de error handling
  • Probar un estilo de testing diferente (BDD vs TDD)
  • Probar functional programming patterns
  • Probar types más estrictos (branded types, nominal types)
  • Probar un linter más estricto

El valor de CLAUDE.local.md para experimentar: puedes probar sin riesgo. Si falla, solo eliminas la línea.

Ejercicio 4: Setup completo del sistema de memoria

Verifica que tienes el sistema completo configurado:

  • CLAUDE.md en la raíz del proyecto
  • CLAUDE.local.md con tus preferencias (en .gitignore)
  • .claude/settings.json con permisos del equipo
  • .claude/settings.local.json con tus permisos extras (en .gitignore)
  • Auto memories acumuladas (revisa con /memory)
  • .gitignore actualizado
Checklist de verificación
# 1. CLAUDE.md existe
ls CLAUDE.md

# 2. CLAUDE.local.md existe
ls CLAUDE.local.md

# 3. CLAUDE.local.md está en .gitignore
grep "CLAUDE.local.md" .gitignore

# 4. Settings del proyecto existen
ls .claude/settings.json

# 5. Settings locales existen y están ignorados
ls .claude/settings.local.json
grep "settings.local.json" .gitignore

# 6. Verifica que nada personal está tracked
git status
# CLAUDE.local.md y settings.local.json NO deben aparecer

Si falta algo, créalo siguiendo las guías de este módulo. Al final deberías tener el sistema de memoria completo listo para trabajar profesionalmente con Claude Code.

Ejercicio 5: Simula trabajo en equipo

Si tienes un compañero que usa Claude Code (o puedes simular siendo tú mismo):

  1. Developer A (tú): CLAUDE.local.md con "responde en español, explica razonamiento"
  2. Developer B (tu compañero o tú simulando): Sin CLAUDE.local.md

Ambos piden la misma tarea en Claude Code. Comparen:

  • ¿El código generado es igual? (debería — mismas reglas de proyecto)
  • ¿La experiencia de interacción es diferente? (debería — diferentes preferencias)
  • ¿Las convenciones del proyecto se respetan en ambos casos? (debería — CLAUDE.md es compartido)
Qué observar

La diferencia clave:

  • El código debería ser idéntico o muy similar (CLAUDE.md define las reglas del proyecto)
  • La experiencia debería ser diferente (idioma, nivel de explicación, estilo de output)

Esto demuestra que CLAUDE.local.md personaliza la experiencia sin afectar la calidad del output del proyecto.

Si el código es diferente, hay un problema:

  • CLAUDE.local.md de alguien contradice reglas del proyecto → corregir
  • CLAUDE.md no es suficientemente específico → mejorar

Ejercicio 6: Migra preferencias de auto memory a CLAUDE.local.md

  1. Revisa tus auto memories: /memory
  2. Identifica las que son preferencias personales (no reglas del proyecto)
  3. Migra las más importantes a CLAUDE.local.md
  4. Elimina las auto memories migradas

Esto te da control explícito sobre tus preferencias en vez de depender de que Claude las haya interpretado correctamente.

Ejemplo de migración

Auto memories encontradas:

  1. "Prefiere respuestas concisas" → Migrar a CLAUDE.local.md
  2. "No usar any" → Ya está en CLAUDE.md, eliminar la auto memory
  3. "Arrow functions para componentes" → Migrar a CLAUDE.local.md
  4. "Usa pytest-asyncio para tests async" → Debería estar en CLAUDE.md (aplica al equipo)
  5. "Responder en español" → Migrar a CLAUDE.local.md

Después de migrar:

# CLAUDE.local.md (nuevas líneas)
## De auto memory
- Respuestas concisas, sin verbosidad
- Arrow functions para componentes React
- Responde en español

Ahora tienes control explícito sobre estas preferencias en vez de depender de auto memory implícita.


Resumen

  • CLAUDE.local.md es tu archivo de preferencias personales que NO se commitea al repositorio.
  • Mayor prioridad que CLAUDE.md, menor que CLAUDE.md de subdirectorio y la conversación.
  • Va en .gitignore siempre. Tus preferencias no deben imponerse al equipo.
  • Casos de uso principales: idioma, estilo de interacción, coding preferences, entorno local, experimentos, contexto temporal.
  • Regla de oro: Si aplica a todo el equipo → CLAUDE.md. Si es solo para ti → CLAUDE.local.md.
  • No contradigas reglas de seguridad del proyecto. CLAUDE.local.md es para preferencias, no para saltarse restricciones.
  • Tamaño ideal: 20-50 líneas. Solo lo esencial.
  • Template .example: Crea un CLAUDE.local.md.example que SÍ se commitea para que el equipo sepa que existe.
  • Actualiza el contexto temporal regularmente si usas esa sección.
  • Sistema completo: CLAUDE.md + CLAUDE.local.md + settings (3 scopes) + auto memory = control total sobre la memoria de Claude Code.

Cierre del Módulo

Has completado el Módulo 3: CLAUDE.md y el sistema de memoria. Ahora tienes:

  1. ✅ CLAUDE.md profesional — contexto del proyecto en <200 líneas
  2. ✅ Jerarquía de 6 niveles — entiendes cómo Claude prioriza cada fuente de contexto
  3. ✅ Auto memory — sabes cómo Claude aprende y cómo gestionar ese aprendizaje
  4. ✅ Settings en 3 scopes — permisos configurados para tu equipo y para ti
  5. ✅ CLAUDE.local.md — tus preferencias personales sin afectar al equipo

Este módulo es el fundamento. Todo lo que viene después — workflow agentic, skills, hooks, subagents — produce mejores resultados cuando el sistema de memoria está bien configurado. Un agente con buen contexto es dramáticamente mejor que uno sin él.

Siguiente módulo: Módulo 4 — El workflow agentic: Explore → Plan → Code. Pasamos de "configurar Claude Code" a "trabajar con Claude Code."


Recursos Adicionales

  1. Claude Code Memory — Anthropic Docs — CLAUDE.md, CLAUDE.local.md, auto memory, y jerarquía completa
  2. Claude Code Settings — Configuración de scopes y relación con CLAUDE.local.md
  3. Claude Code Best Practices — Recomendaciones oficiales para personalización y context management
  4. Claude Code Overview — Cómo CLAUDE.local.md se integra en la arquitectura general
  5. Claude Code CLI Reference — Comandos para gestionar archivos de memoria
  6. Claude Code Interactive Mode — Cómo la personalización afecta las sesiones interactivas
  7. .gitignore Documentation — Referencia para configurar exclusiones de git