Founding Member: $499/mes de por vida
Micare
Productividad

Marca de tu última respuesta para el aviso de caché

Hook que, al cerrar cada respuesta del asistente, guarda por sesión la hora de ese momento. Es la mitad grabadora del aviso de caché: deja la línea base para que su hook compañero mida tu inactividad y te avise cuando la caché venció y el turno saldría más caro.

HookPremiumProductividadsesiones y foco

🌱 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 UserPromptSubmit es 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 +x porque se ejecuta con python3 <ruta>. Requiere python3 disponible en el sistema (verifícalo con python3 --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. 🌱

¿Quieres implementarla con acompañamiento?

Agenda una asesoría directa con JP y aterrízala en tu caso · desde $600 MXN.

Agendar una asesoría