🌱 Empieza aquí · Marca de tu última respuesta para el aviso de caché
Esta semilla instala una pieza pequeñita pero clave: cada vez que tu asistente termina de responder, anota la hora exacta en que terminó. Nada más. Esa hora anotada es la línea base que hace posible que, más adelante, tu asistente sepa "llevas 70 minutos sin escribir, la caché de tu conversación ya venció y este turno te va a salir más caro". Sin esta anotación, ese aviso no puede calcularse.
Para instalarla
Abre esta carpeta con Claude Code o Cowork y dile a tu asistente:
"Siembra esta semilla 🌱"
Con eso basta de tu parte. Tu asistente hace todo lo técnico y al final te dice cómo comprobar que quedó funcionando. Vas a ver algunas palabras en inglés en la pantalla; ni caso, él te guía.
¿Otras formas de pedírselo? "instala este hook", "pon a funcionar la marca de caché", "haz el setup de esto". Te entiende igual.
Para el asistente que siembra 🤖
Instala este hook (gancho de automatización) del evento Stop (fin de respuesta).
Su único trabajo es grabar la marca de tiempo de la última respuesta, por sesión,
en un archivo de estado. No imprime nada, no bloquea y nunca falla ruidosamente.
Sigue estos pasos y no inventes rutas: usa $HOME siempre.
Contexto honesto (léelo): esta semilla es la mitad grabadora de un sistema de dos piezas. Ella deja la línea base; una pieza compañera del evento
UserPromptSubmites la que LEE esa línea base y muestra el aviso "tu caché venció". Si la persona no tiene esa pieza compañera, este hook igual queda bien instalado y sin efectos secundarios: simplemente deja el estado listo para el día que sume el avisador. Ambas piezas deben mirar la MISMA carpeta de estado (ver el paso 3). No incluyas aquí el código del avisador: es un componente aparte.
1. Copia el script del kernel (el corazón de la semilla)
Copia kernel/cache-warn-stop.py a la carpeta de hooks del usuario:
Claude Code / Cowork (macOS o Linux):
mkdir -p "$HOME/.claude/hooks"
cp kernel/cache-warn-stop.py "$HOME/.claude/hooks/cache-warn-stop.py"
Es un script de Python: no necesita
chmod +xporque se ejecuta conpython3 <ruta>. Requierepython3disponible en el sistema (verifícalo conpython3 --version).
Windows (Git Bash / WSL): misma ruta ~/.claude/hooks/. Asegúrate de que
python3 esté en el PATH; si la persona solo tiene el lanzador py, usa py
en lugar de python3 en el registro del paso 2.
2. Registra el hook en settings.json
Abre $HOME/.claude/settings.json (créalo si no existe) y agrega esta entrada dentro
de hooks.Stop. Si ya hay hooks de Stop, suma este objeto al arreglo hooks
existente en lugar de reemplazarlo:
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "python3 $HOME/.claude/hooks/cache-warn-stop.py",
"timeout": 5
}
]
}
]
}
}
3. (Opcional) Elige dónde vive el estado
Por defecto el estado se guarda en $HOME/.claude-memory/cache-warn/<session_id>.json.
Si la persona quiere otra carpeta (o si va a emparejar esto con la pieza avisadora y
esta usa otra ruta), exporta la variable de entorno CACHE_WARN_DIR con la ruta
deseada antes de que corra el hook, y usa esa MISMA ruta en el avisador. Sin esa
variable, ambas piezas usan la carpeta por defecto y se entienden solas.
4. Verificación post-siembra (obligatoria)
Como el hook no imprime nada, se verifica por su efecto: que escribe el archivo de
estado con la marca de tiempo y que conserva warned_gaps en corridas sucesivas.
# a) Primera corrida: debe crear el archivo de estado con last_stop_time.
echo '{"session_id":"prueba-semilla"}' | python3 "$HOME/.claude/hooks/cache-warn-stop.py"; echo "EXIT=$?"
cat "$HOME/.claude-memory/cache-warn/prueba-semilla.json"; echo
Salida esperada: EXIT=0 y un JSON con session_id, un last_stop_time en
formato ISO (fecha y hora) y warned_gaps en [].
# b) Preserva warned_gaps: inyectamos un valor y volvemos a correr.
python3 -c "import json,os; p=os.path.expanduser('~/.claude-memory/cache-warn/prueba-semilla.json'); d=json.load(open(p)); d['warned_gaps']=['12345']; json.dump(d, open(p,'w'))"
echo '{"session_id":"prueba-semilla"}' | python3 "$HOME/.claude/hooks/cache-warn-stop.py"
cat "$HOME/.claude-memory/cache-warn/prueba-semilla.json"; echo
rm -f "$HOME/.claude-memory/cache-warn/prueba-semilla.json"
Salida esperada: el JSON conserva "warned_gaps": ["12345"] y trae un
last_stop_time actualizado. Eso prueba que la lógica de "avisar una sola vez"
sobrevive entre turnos.
# c) Confirma que el hook quedó registrado en settings.json.
grep -q 'cache-warn-stop' "$HOME/.claude/settings.json" && echo 'REGISTRADO'
Salida esperada: REGISTRADO.
Cuando las tres pruebas den lo esperado, avísale al usuario que ya quedó y explícale en una línea qué gana con esto.
✅ ¿Cómo sé que funcionó?
A partir de ahora, tu asistente lleva por dentro un pequeño reloj: cada vez que termina de responderte, anota la hora. Tú no ves ni haces nada; es plomería silenciosa. Ese registro es lo que le permite (junto con su pieza avisadora) darse cuenta cuando dejas la conversación en pausa mucho rato y avisarte antes de gastar de más al retomar. Es de esas cositas que trabajan por ti sin pedir aplausos. 🌱
