TIPS 09 · PROVA

Cuando dice «hecho» y no es verdad

La línea que hay que poner en el CLAUDE.md para que Claude deje de decir «hecho» sin una prueba, y los cuatro controles con los que compruebo que la cumple.

Qué es y por qué importa

Le pides un cambio. Al rato Claude escribe «hecho». Abres la app y no funciona, o funciona solo a medias. Al principio pasa a menudo, y la primera reacción es pensar que te ha mentido.

No es así. Claude se para cuando el trabajo parece terminado, y para él muchas veces el trabajo termina cuando ha escrito el código. Si nadie le ha pedido que lo pruebe, «parece hecho» es la única señal que tiene. Así que el control te toca a ti, después, cuando a lo mejor ya estás pensando en otra cosa.

La solución es una sola línea, en el archivo que Claude Code lee al empezar cada sesión: el CLAUDE.md. La línea cambia el significado de «hecho». Ya no quiere decir «he escrito el código», quiere decir «lo he visto funcionar y te enseño la prueba». Yo lo llamo el recibo.

Importa porque un recibo lo revisas en poco tiempo. Repetir tú todas las pruebas cada vez cuesta mucho más, y a la larga dejas de hacerlo.

1. La línea en el CLAUDE.md

El CLAUDE.md es un archivo de texto con las reglas que quieres que Claude respete en cada sesión. El del proyecto está en la carpeta principal del proyecto: CLAUDE.md, o .claude/CLAUDE.md. Si no existe, créalo.

La forma más sencilla es desde dentro de Claude Code: escribe /memory. Te enseña los archivos de memoria, también los que todavía no existen. Elige el del proyecto: si no existe, lo crea y te lo abre en el editor. Si el proyecto aún no tiene un CLAUDE.md, también puedes lanzar /init: Claude mira el código y te prepara uno de partida. Luego le añades la línea.

La línea
Nunca digas "hecho" sin prueba: los tests que has lanzado con su resultado, una captura de pantalla si hay una interfaz, el comando que has usado para probarlo. Si no has podido probarlo, escríbeme "no verificado" y por qué.

Cada parte tiene un motivo:

  • Los tests con el resultado: te dice qué ha comprobado y cómo ha ido, no solo que los ha lanzado.
  • La captura si hay una interfaz: un test puede pasar aunque un botón haya acabado fuera de la pantalla.
  • El comando que ha usado: así puedes repetir tú la misma prueba, igual.
  • «No verificado» y por qué: es la salida. Sin ella, le empujas a decir «hecho» de todos modos. Con ella, sabes enseguida dónde tienes que mirar tú.

Sobre la captura: Claude Code puede mirar imágenes, pero para hacer una él mismo necesita una forma de ver la app, por ejemplo un navegador conectado a Claude Code o un simulador. Si no la tiene, para esa parte escribirá «no verificado». Está bien así: por lo menos lo sabes.

2. Cómo la compruebo

Una sesión nueva y una pregunta

Guardo el archivo y abro una sesión nueva, porque el CLAUDE.md se lee al empezar la sesión. Luego pregunto:

El prompt
¿Cuándo está algo hecho para ti? Respóndeme con las reglas que tienes en el CLAUDE.md.

Si no repite la regla, el archivo no es el correcto o no está en la carpeta del proyecto. Para comprobarlo, escribe /context: debajo de Memory files ves qué archivos de memoria ha cargado. Si tu CLAUDE.md no aparece ahí, Claude no lo ve.

Un trabajo pequeño

Le doy algo pequeño y fácil de comprobar, por ejemplo:

El prompt
Arregla el mensaje de error del login cuando el email está vacío.

Cuando dice «hecho», compruebo que estén las tres cosas: tests y resultado, captura, comando. Si falta una y no pone «no verificado» con el motivo, el recibo está incompleto.

Repito su comando

Copio el comando que ha escrito y lo lanzo yo en el terminal. Si a mí me sale un resultado distinto, el recibo no vale. No hace falta hacerlo cada vez, pero las primeras veces sí: así es como sabes si te puedes fiar de sus recibos.

Miro la captura

Tiene que enseñar la pantalla correcta, no una página cualquiera. En el caso del login: el campo del email vacío y el mensaje de error debajo. Si enseña la página de inicio, no prueba nada.

3. Si el proyecto no tiene tests

Sin tests, la primera parte del recibo no existe. Antes de nada, pídele esto:

El prompt
Escribe un test para lo que acabas de hacer, lánzalo y enséñame que pasa. Luego rompe el código a propósito y enséñame que el test falla.

La segunda parte es la que cuenta. Un test que no falla nunca no prueba nada: pasa tanto si el código funciona como si no. Si al romper el código el test se pone en rojo, entonces está comprobando algo de verdad.

Luego haz que deje el código como estaba:

El prompt
Ahora deja el código como estaba, vuelve a lanzar el test y enséñame que pasa otra vez.

Y para que la próxima vez no tenga que adivinar cómo se lanzan los tests, haz que lo escriba en el CLAUDE.md:

El prompt
Añade al CLAUDE.md el comando exacto para lanzar los tests de este proyecto.

4. Si dice «hecho» sin prueba

Pasa incluso con la regla. Responde solo:

El prompt
¿Prueba?

Normalmente basta. Si vuelve a pasar:

El prompt
Vuelve a leer las reglas del CLAUDE.md y dame otra vez el "hecho", con el recibo.

Si sigue saltándosela, mira lo largo que es tu CLAUDE.md. En un archivo lleno de reglas, las importantes se pierden: mantenlo corto y quita lo que Claude entiende solo leyendo el código. Si una sola línea se le sigue escapando, puedes destacarla, por ejemplo escribiendo IMPORTANTE delante. Solo esa: si lo destacas todo, no destaca nada.

Errores comunes

  • Poner la regla en un archivo que Claude no lee, como el README o una nota aparte. Va en el CLAUDE.md del proyecto, y con /context compruebas que está cargado.
  • Quitar «no verificado» para tener siempre un «hecho». Déjalo: es la parte que hace que sea sincero cuando no consigue probarlo.
  • Leer el recibo sin comprobarlo. Las primeras veces, lanza tú el comando y mira bien la captura.
  • Aceptar tests que pasan siempre. Haz que rompa el código a propósito y mira que el test falle.
  • Esperar que la regla valga enseguida en la sesión que ya tienes abierta. Abre una sesión nueva y haz la pregunta de control.
  • Llenar el CLAUDE.md de reglas hasta que la de la prueba se pierde. Mantenlo corto y concreto.

Lista de comprobación

  • La línea está en el CLAUDE.md del proyecto
  • En una sesión nueva, Claude repite la regla
  • Cada «hecho» llega con tests y resultado, captura y comando
  • He lanzado yo su comando al menos una vez
  • El test falla cuando el código está roto
  • Cuando no puede probar, escribe «no verificado» y por qué

Preguntas frecuentes

Cuando dice «hecho» sin prueba, ¿me está mintiendo?

No. El «hecho» sin prueba no es una mentira: para él el trabajo termina cuando ha escrito el código. La regla mueve la meta al momento en que lo ha visto funcionar.

Con la regla en el CLAUDE.md, ¿puedo estar seguro de que lo hará siempre?

No. Claude lee el CLAUDE.md e intenta seguirlo, pero es una indicación, no un bloqueo. Si quieres un control que no dependa de él, existen los hooks: comandos que Claude Code ejecuta en momentos fijos, decida lo que decida Claude. Por ejemplo, uno que lanza los tests y no le deja terminar hasta que pasan. Para empezar, la línea basta.

¿Y si mi app no tiene interfaz?

Entonces la captura no hace falta: la regla solo la pide si hay una interfaz. Quedan los tests con el resultado y el comando. Para un script, la salida del comando lanzado también es una buena prueba.

¿Tengo que ponerla en cada proyecto?

Si la quieres en todas partes, ponla en ~/.claude/CLAUDE.md: es tu archivo personal, y Claude Code lo lee en todos los proyectos de tu ordenador. La del CLAUDE.md del proyecto solo vale ahí.

← Todas las guías