TL;DR Con Fable 5.2, no pegues el bloque "Finishing work" de Anthropic en tu
CLAUDE.md: Claude Code ya lo envía en cada turno. Para la parte larga que vas a dejar sola, abre/effort, eligehighy pulsas, que vale solo para esa sesión. Si aun así se para, contesta con la acción exacta que quieres, no con "sigue".
Fable 5.2 a veces cierra el turno antes de acabar una tarea larga de varios pasos: con una lista de lo que falta, con un "¿sigo?" o parado ante un obstáculo normal, como un timeout. La guía de prompting de Anthropic dice que pasa más en low y medium, y medium es justo el esfuerzo con el que Claude Code arranca Fable 5.2.
La misma guía trae la corrección: un bloque de texto, "Finishing work", para el system prompt. La tentación es pegarlo en el CLAUDE.md. No hace falta.
Claude Code ya lleva el bloque
En la v2.1.322 la entrada de Fable 5.2 en el catálogo de modelos del binario trae la capacidad fable_5_2_prompt_bundle, y con ella Claude Code añade una sección # Finishing work al system prompt. Viene activado por defecto, aunque el binario prevé apagarlo en algunos puntos de entrada y desde el servidor; aquí está comprobado en claude -p. Se ve preguntándoselo al modelo, con el mismo binario y cambiando solo el alias:
$ claude -p --model fable "Is there a section titled 'Finishing work' in your system prompt? Answer YES or NO and quote its first sentence."
YES. Its first sentence is:
> "Ending your turn means your work stops there until asked to continue, and you should not stop unless needed."
$ claude -p --model opus "<la misma pregunta>"
**NO.** My system prompt has no section titled "Finishing work," so there's no first sentence to quote. The sections it does have include "Harness," "Session-specific guidance," "Environment" and "Context management."
No es una copia literal de la guía. Es la versión de Anthropic para su propio harness, con cambios en las dos direcciones:
| Guía de prompting | Lo que envía Claude Code | |
|---|---|---|
| Arranque | "Please avoid stopping while you still owe work the user asked for." | "Ending your turn means your work stops there until asked to continue, and you should not stop unless needed." |
| Decisiones abiertas | "clarifying with the user on open decisions" | "your recommendations on open decisions" |
| Obstáculos normales | "rather than stopping unnecessarily" | "rather than stopping or checking in" |
| Cuándo sí parar | "Stopping before the task is complete is very rarely merited" | "Stopping before the task is complete can rarely be merited" |
| Acciones arriesgadas | "This does not override the need for confirmation on risky or destructive actions." | La misma frase |
Pegar el de la guía en tu CLAUDE.md deja casi el mismo texto dos veces en cada turno. Y no esperes milagros del bloque: Anthropic repitió sesiones grabadas de un producto de programación agéntica en medium con una versión de este texto, y las que acababan con trabajo factible pendiente bajaron más o menos a la mitad, a cambio de cerca de un 30% más de tokens de salida. Pero no quitó los finales que listan lo que falta y paran.
La prueba: seis ejecuciones, con y sin el bloque pegado
Un repo de Python con funciones vacías marcadas con TODO, un run-tests.sh que falla la primera vez con un timeout falso (exit 124) y la misma petición: "implementa cada TODO de lib/, añade tests en tests/ para cada función y deja ./run-tests.sh en verde". Claude Code v2.1.322, claude -p --model claude-fable-5-2 con --setting-sources project y permisos solo para editar archivos y lanzar los tests, una ejecución por fila:
| Tarea | Effort | Bloque también en CLAUDE.md |
Turnos | Tokens de salida | Final |
|---|---|---|---|---|---|
| 6 TODO | medium |
no | 11 | 7.056 | todo hecho, 30 tests en verde |
| 6 TODO | medium |
sí | 10 | 4.741 | todo hecho, 32 tests en verde |
| 6 TODO | low |
no | 11 | 6.416 | todo hecho, 27 tests en verde |
| 6 TODO | low |
sí | 9 | 4.334 | todo hecho, 30 tests en verde |
15 TODO, uno en un archivo DO NOT EDIT |
medium |
no | 16 | 11.122 | 14 de 15, el archivo protegido sin tocar |
15 TODO, uno en un archivo DO NOT EDIT |
low |
no | 13 | 10.147 | 14 de 15, el archivo protegido sin tocar |
Las seis vieron el timeout, lo diagnosticaron y volvieron a lanzar los tests sin parar a preguntar. Con el bloque duplicado el resultado fue el mismo y los tokens de salida no subieron. Con una ejecución por fila no es una medida de coste: lo que enseña es que el bloque pegado no añadió nada que Claude Code no hiciera ya.
Las dos últimas filas enseñan la otra mitad del bloque: un archivo marcado como del equipo de pagos es un bloqueo deliberado, no un obstáculo, y Fable 5.2 lo dejó como estaba. Este es el punto sobre billing.py del mensaje final de la de low:
- **`lib/billing.py` not done:** the file header says it is owned by the payments team, synced from their repo, and to ask in #payments before editing. `apply_discount` still raises `NotImplementedError` and has no test, so the README rule "every function in `lib/` needs a test" is not met for it. If you want it implemented here anyway, say so and I'll add it with a test.
Esa es una parada legítima: la decisión es tuya.
Qué hacer cuando aun así se para
1. Para la parte larga, sube el esfuerzo solo en esa sesión
La guía propone planificar e iterar en medium y subir el esfuerzo para la parte larga y desatendida. En Claude Code:
/effort
Elige high en el selector y pulsa s: se aplica a esta sesión y no cambia tu nivel por defecto (requiere la v2.1.257 o superior). Si escribes /effort high, en cambio, se guarda como predeterminado. En high piensa antes de casi cada respuesta, incluso un saludo, así que no lo dejes puesto para el día a día.
2. Contesta con la acción exacta
Si el turno acaba con una pregunta, responde qué quieres que haga, no "sigue" ni "ok". La guía pone este ejemplo: "Yes, run the migration on the staging database" en lugar de "go". En la prueba de arriba sería:
Sí, implementa apply_discount en lib/billing.py con su test; ya lo he hablado con pagos.
3. Si la tarea dura horas, dale una condición de parada
Con /goal, Claude no te devuelve el control hasta que se cumple una condición comprobable:
/goal ./run-tests.sh pasa en verde y no queda ningún TODO en lib/
4. Si para y no es Fable 5.2
Con Opus 5.5 y Sonnet 5.5 no hay bloque Finishing work. Lo que funciona ahí es darle un ejemplo de trabajo terminado.
Lo que el bloque no cambia
- Las confirmaciones de acciones arriesgadas siguen. El texto lo dice en su última frase: lo arriesgado o destructivo te lo sigue consultando. La guía añade que, como pregunta menos, conviene que mantengas tu propio paso de confirmación para lo irreversible.
- Los bloqueos deliberados se respetan. Un archivo marcado para no tocar, un acceso que se le quitó a propósito o un guardarraíl: lo deja, te lo cuenta y busca otra forma de acabar.
Documentación oficial: Prompting Claude Fable 5.2: Finish the whole task · Model configuration: effort
Requisitos
- Claude Code v2.1.321 o superior con Fable 5.2 (
/model fable). Comprobado en la v2.1.322.