Volver a Guías
Builders

CLAUDE.md explicado: enséñale tu proyecto a Claude Code una sola vez

13 min de lectura


Cada sesión nueva de Claude Code empieza con la cabeza vacía. Le dices que use pnpm, no npm. Le dices dónde están las pruebas. Le dices que no toque la carpeta generada. Mañana le vuelves a decir todo eso.

CLAUDE.md es el lugar donde escribes lo que de otro modo tendrías que volver a explicar.

Es un archivo de texto plano en Markdown. Claude Code lo lee al inicio de cada sesión, así que lo que contiene ya se sabe antes de tu primer prompt. Esta guía te muestra dónde va el archivo, cómo escribir uno que Claude siga y qué dejar fuera.

Qué es CLAUDE.md y qué no es

Cada sesión de Claude Code comienza con una ventana de contexto nueva. Dos mecanismos llevan el conocimiento de una sesión a la siguiente:

CLAUDE.mdMemoria automática (auto memory)
Quién lo escribeTúClaude
Qué contieneInstrucciones y reglasAprendizajes y patrones que va detectando
Cuándo se cargaEn cada sesiónEn cada sesión (primeras 200 líneas o 25 KB)
Ideal paraEstándares de código, flujos de trabajo, estructura del proyectoTus correcciones y preferencias

Ambos se cargan como contexto. Esa palabra importa: Claude lee CLAUDE.md e intenta seguirlo, pero no es una configuración que se imponga por la fuerza. Una línea vaga o contradictoria puede ignorarse. Volvemos a eso en la sección de solución de problemas, porque define cómo debes escribir el archivo.

¿Ya tienes un AGENTS.md?

Si tu repositorio tiene un AGENTS.md escrito para otros agentes de código, Claude Code puede leerlo en lugar de un CLAUDE.md, siempre que no haya un CLAUDE.md ni un CLAUDE.local.md en tu directorio de trabajo ni por encima de él. Si existen ambos, Claude lee solo los archivos CLAUDE.md. Para usar los dos, importa el AGENTS.md desde tu CLAUDE.md. Leer AGENTS.md directamente requiere Claude Code 2.1.277 o posterior.

Dónde va el archivo

Hay cuatro lugares y se apilan. Claude los carga del alcance más amplio al más específico, así que lo que está más cerca de tu proyecto se lee al final.

OrganizaciónSolo tú, este proyecto

  1. Política administradaLa define TI para todos en la organización
  2. Usuario~/.claude/CLAUDE.md, tus preferencias en todos los proyectos
  3. Proyecto./CLAUDE.md o ./.claude/CLAUDE.md, compartido con tu equipo en git
  4. Local./CLAUDE.local.md, personal para este proyecto, fuera de git
Los archivos se suman, no se reemplazan. Nada anula a nada, así que las contradicciones entre capas confunden a Claude.

Los dos que usarás son el archivo de proyecto y el de usuario.

  • Archivo de proyecto. Pon CLAUDE.md en la raíz de tu proyecto, o en una carpeta .claude en la raíz. Súbelo al repositorio, para que todos los que trabajan en el proyecto reciban las mismas instrucciones. Escribe lo que es cierto para cualquiera: comandos de compilación, convenciones, estructura del proyecto.
  • Archivo de usuario. ~/.claude/CLAUDE.md te acompaña a todos los proyectos. Úsalo para hábitos personales, como la forma en que prefieres que se redacten las explicaciones.
  • Archivo local. CLAUDE.local.md es para notas tuyas y específicas de un proyecto, como la URL de un entorno de pruebas. Agrégalo a tu .gitignore para que no se suba.

Claude también busca en la carpeta desde la que lo abriste y en todas las carpetas superiores. Si empiezas en foo/bar/, carga foo/bar/CLAUDE.md y foo/CLAUDE.md. Los archivos de carpetas más abajo se cargan después, bajo demanda, la primera vez que Claude lee o edita un archivo de esa subcarpeta.

Empieza con /init

No tienes que escribir la primera versión a mano. Dentro de una sesión, ejecuta:

my-website
> /initAnalizando tu código base...Se creó CLAUDE.md con los comandos de compilación, las instrucciones de pruebas y las convenciones que encontró.
Ilustración del flujo. La salida exacta depende de tu versión y tu proyecto.

Claude Code lee tu proyecto y escribe un CLAUDE.md con los comandos de compilación y pruebas y las convenciones que descubre. Si ya existe un CLAUDE.md, /init sugiere mejoras en lugar de sobrescribirlo. Toma el resultado como un primer borrador. Tu trabajo es agregar lo que Claude no pudo averiguar por su cuenta.

Para confirmar que el archivo se cargó, ejecuta /context en una sesión y busca en Memory files.

Qué debe ir en el archivo

Una buena prueba, antes de escribir cualquier línea, tiene dos preguntas:

  1. 1

    ¿Claude podría encontrar esto leyendo el código?

    La estructura de carpetas, el framework de pruebas, la forma en que están hechos los componentes existentes: Claude lee esto en segundos. Escribirlo agrega peso y ningún valor.

  2. 2

    ¿De verdad iría a buscarlo?

    Algunos datos están en el repositorio pero tardan minutos en encontrarse, y Claude los volvería a buscar en cada sesión. Esos sí valen una línea.

Si las dos respuestas son sí, deja la línea fuera. Lo que queda es información que nunca estuvo en el código, o que cuesta tiempo real volver a descubrir:

  • Los comandos exactos para compilar, probar y revisar el estilo, con las opciones que usas

  • Una decisión que tu equipo tomó en una reunión y que el código no muestra

  • La variable de entorno o el servicio local que necesitan tus pruebas

  • Una convención distinta de la predeterminada de la herramienta, y por qué

  • Cosas que nunca se deben tocar, como una carpeta generada

Agrega una línea cuando Claude cometa el mismo error por segunda vez, cuando una revisión de código detecte algo que debió saber, o cuando escribas la misma corrección que escribiste la sesión pasada. Esa es la señal de que el dato pertenece al archivo.

Un ejemplo que vale la pena copiar

Aquí tienes un archivo de proyecto corto. Fíjate en que cada línea es algo que podrías verificar, y en lo poco que describe la arquitectura.

# Project notes

## Commands
- Install: pnpm install (never npm or yarn)
- Dev server: pnpm dev (port 3000)
- Tests: pnpm test -- --run, run before every commit
- Typecheck: pnpm typecheck, must pass before a pull request

## Conventions
- 2-space indentation, double quotes
- API handlers live in src/api/handlers/
- Do not edit anything in src/gen/, it is generated by pnpm codegen

## Gotchas
- Integration tests need a local Redis: docker compose up redis
- Dates are stored in UTC, formatted only in the UI layer

Son 15 líneas, y cada una se gana su lugar.

Cómo escribir líneas que Claude sí siga

Como CLAUDE.md es contexto y no configuración, la forma de redactar una línea decide si se sigue. Escribe instrucciones lo bastante concretas como para poder verificarlas.

VagoConcreto
Da formato correcto al códigoUsa sangría de 2 espacios
Prueba tus cambiosEjecuta npm test antes de hacer commit
Mantén los archivos ordenadosLos manejadores de la API viven en src/api/handlers/
Ten cuidado con la base de datosNunca ejecutes migraciones en producción, usa la URL de staging en .env.staging

Luego mantén el archivo en forma:

  • Corto. Apunta a menos de 200 líneas por archivo. Los archivos más largos gastan más contexto y Claude los sigue con menos confiabilidad.
  • Ordenado. Agrupa las líneas relacionadas bajo encabezados y viñetas de Markdown. Claude sigue mejor la estructura que los párrafos densos.
  • Coherente. Si dos líneas se contradicen, Claude puede elegir una al azar. Lee tus archivos de vez en cuando, incluidos los de las subcarpetas, y borra lo que esté desactualizado.

Gritar no ayuda

Agregar IMPORTANT o MAYÚSCULAS a una línea que Claude se sigue saltando suele hacer que aplique la regla en exceso. Si una línea de verdad no puede flexibilizarse, no pertenece a CLAUDE.md. Pertenece a un hook o a una regla de denegación, que Claude Code hace cumplir siempre, sin importar lo que decida el modelo.

Para que Claude revise tus archivos de instrucciones en busca de líneas desactualizadas o en conflicto, ejecuta /doctor prompt-audit. Informa los hallazgos y propone ediciones, y no cambia nada hasta que se lo pidas. Requiere Claude Code 2.1.283 o posterior.

Importar otros archivos

CLAUDE.md puede traer otros archivos con una @ antes de la ruta. El archivo importado se carga junto con el CLAUDE.md que lo menciona.

See @README for the project overview and @package.json for the npm commands.

# Additional instructions
- git workflow: @docs/git-instructions.md

Las rutas relativas se resuelven desde el archivo que contiene la importación. Las importaciones pueden importar otros archivos, hasta cuatro niveles de profundidad. La @ solo se lee fuera de los fragmentos de código, así que envuelve una ruta entre acentos graves si quieres mencionarla sin importarla.

Las importaciones sirven para organizar, pero no reducen el contexto: los archivos importados se cargan completos. Para instrucciones personales que quieres en varias copias del mismo repositorio, importa un archivo de tu carpeta personal, como @~/.claude/my-project-instructions.md. La primera vez que un proyecto importa un archivo de fuera del directorio de trabajo, Claude Code te pide aprobación.

Cuando un archivo se hace demasiado largo

En algún momento el archivo crece más de lo que necesita cada sesión. Tienes cuatro herramientas, cada una para un trabajo distinto.

HerramientaÚsala paraCuándo se carga
CLAUDE.mdDatos necesarios en cada sesiónEn cada sesión
Reglas en .claude/rules/Instrucciones para una parte del códigoCuando Claude toca archivos que coinciden (si tienen alcance)
Habilidades (Skills)Procedimientos de varios pasos, guías del equipoSolo cuando se usan o son relevantes
HooksCosas que siempre o nunca deben ocurrirLas ejecuta el propio Claude Code

Reglas con alcance para ciertos archivos

Pon un archivo Markdown por tema en .claude/rules/, como testing.md o api-design.md. Para que una regla aplique solo a ciertos archivos, agrega un campo paths al inicio:

---
paths:
  - "src/api/**/*.ts"
---

# API rules

- Every endpoint validates its input
- Use the standard error response format

Una regla sin paths se carga en cada sesión. Una con alcance se carga cuando Claude lee o edita un archivo que coincide, lo que mantiene las instrucciones fuera del camino el resto del tiempo.

Si un bloque de CLAUDE.md es un procedimiento de varios pasos, como preparar un lanzamiento, mejor pásalo a una habilidad. Las habilidades se cargan solo cuando se usan.

Memoria automática: las notas que Claude guarda para sí mismo

Además del archivo que escribes tú, Claude Code puede guardar notas por su cuenta. La memoria automática viene activada de forma predeterminada en las sesiones locales. Mientras trabaja, Claude guarda cuatro tipos de notas: sobre ti (rol y preferencias), retroalimentación (correcciones y enfoques que confirmaste), el proyecto (decisiones y fechas límite que no se ven en el código) y referencias (dónde encontrar cosas fuera del proyecto).

No guarda lo que puede leer del código ni lo que ya dice tu CLAUDE.md. Verás mensajes como "Saved 2 memories" en la sesión. Las notas son Markdown plano en ~/.claude/projects/, y las primeras 200 líneas o 25 KB del archivo índice se cargan al inicio de cada sesión.

Ejecuta /memory para ver todos los archivos de instrucciones y la carpeta de memoria automática, abrir cualquiera en tu editor y activar o desactivar la memoria automática. Si le dices a Claude "usa siempre pnpm, no npm", lo guarda en la memoria automática. Para que vaya a CLAUDE.md, dilo: "agrega esto a CLAUDE.md".

Dentro de Claude Tutorial

Escribir lo que de otro modo repetirías

Convertir la misma corrección en una instrucción permanente es un hábito que rinde en cualquier tipo de trabajo con Claude, no solo en el código, y es uno que la app enseña paso a paso.

Muy pronto
Descárgalo en elApp Store
DISPONIBLE ENGoogle Play

Cuando Claude no lo sigue

Revisa estos puntos en orden. Resuelven la mayoría de los casos.

  1. 1

    Comprueba que el archivo sí se cargó

    Ejecuta /context y busca en Memory files. Si tu archivo no aparece ahí, Claude no puede verlo. Un CLAUDE.md en una subcarpeta no aparecerá al iniciar porque se carga bajo demanda.

  2. 2

    Haz la línea más específica

    Cambia "da buen formato al código" por "usa sangría de 2 espacios". Una línea que puedes verificar es una línea que Claude puede seguir.

  3. 3

    Busca contradicciones

    Dos archivos que dicen cosas distintas sobre el mismo comportamiento dejan a Claude adivinando. Revisa juntos el archivo de proyecto, el de usuario y las reglas.

  4. 4

    Recorta la extensión

    Un archivo largo diluye cada línea. Pasa la parte de un área a una regla con alcance y quita lo que Claude podría leer por sí mismo.

  5. 5

    Hazlo cumplir si tiene que ocurrir

    Si una instrucción debe ejecutarse en un punto fijo, como antes de cada commit, escríbela como un hook. Un hook lo ejecuta Claude Code, así que el modelo no puede saltárselo.

Vale la pena conocer dos casos más. Después de un /compact, el CLAUDE.md de la raíz de tu proyecto se vuelve a leer del disco, así que sobrevive. Una instrucción que diste solo en la conversación no sobrevive, así que pásala al archivo. Y cuando un CLAUDE.md de una subcarpeta es muy largo (más de unos 40,000 caracteres en una ventana de contexto más pequeña), Claude recibe solo el inicio, así que mantenlos cortos.

Preguntas frecuentes

¿Dónde pongo CLAUDE.md?

En la raíz de tu proyecto (./CLAUDE.md) o en ./.claude/CLAUDE.md. Pon las preferencias personales para todos los proyectos en ~/.claude/CLAUDE.md. Usa ./CLAUDE.local.md, agregado a .gitignore, para notas privadas de un solo proyecto.

¿Qué tan largo debe ser un CLAUDE.md?

Apunta a menos de 200 líneas. Si te pasas, Claude Code muestra una advertencia al iniciar y en /status. Mueve las partes de un área a reglas con alcance y recorta lo que Claude puede leer del código.

¿CLAUDE.md es lo mismo que un mensaje del sistema?

No. CLAUDE.md se entrega como un mensaje posterior al mensaje del sistema. Claude intenta seguirlo, pero no hay garantía de cumplimiento estricto. Para instrucciones que deben cumplirse siempre, usa un hook o una regla de permisos.

¿Debo subir CLAUDE.md a git?

Sí para el archivo de proyecto, para que todo el equipo lo comparta y mejore con cada corrección. No para CLAUDE.local.md, que es personal.

¿Claude lee el CLAUDE.md de las subcarpetas?

Sí, bajo demanda. Carga el archivo de una subcarpeta la primera vez que Claude lee o edita un archivo de esa carpeta, y muestra una línea Loaded con la ruta.

¿Cuál es la diferencia entre CLAUDE.md y una habilidad?

CLAUDE.md es para datos necesarios en cada sesión. Una habilidad es un procedimiento o guía que se carga solo cuando se invoca o es relevante, así que no ocupa espacio el resto del tiempo.

Tu lista de verificación de CLAUDE.md

  • El archivo está en la raíz del proyecto y subido al repositorio, con un archivo local aparte en .gitignore para todo lo personal

  • Contiene tus comandos de compilación, pruebas y estilo tal como los ejecutas

  • Cada línea pasa la prueba: Claude no podría aprenderla del código, o perdería tiempo volviéndola a descubrir

  • Ningún par de líneas se contradice y el archivo tiene menos de 200 líneas

  • /context lista el archivo en Memory files

Sigue leyendo