🌱 Empieza aquí · Pulso de agenda al arrancar
¿Te ha pasado que abres el día, te clavas en lo primero que cae, y a media tarde te acuerdas de que ni siquiera miraste tu calendario? Esta semilla le pone a tu asistente un reflejo: cada vez que arrancas una sesión, primero se asoma a tu agenda de hoy. Si ve el día vacío o con huecos y tú traes pendientes importantes sin agendar, en vez de decir "tu agenda está libre" y quedarse callado, te propone cómo llenarla con bloques concretos y horarios realistas. Un empujón para que planear el día deje de ser opcional.
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 esta semilla", "pon a funcionar el pulso de agenda", "haz el setup de esto". Te entiende igual.
Para el asistente que siembra 🤖
Instala este hook (gancho de automatización) del evento SessionStart (arranque de
sesión). Su trabajo es inyectar un additionalContext que TE recuerda leer la agenda del
día vía el MCP de calendario del usuario. No inventes rutas: usa $HOME siempre.
Un detalle de comportamiento: si el arranque es un resume caliente (retomas una
sesión que abriste hace pocos minutos), el hook NO repite el pulso, porque ya lo viste al
arrancar. Lo detecta leyendo el JSON de entrada del evento (el campo source) y un sello
de tiempo propio que él mismo escribe. Ese comportamiento se ajusta con
CALPULSE_RESUME_WINDOW (ver paso 3).
0. Requisito previo (verifícalo antes de nada)
Este hook necesita un MCP de calendario conectado para tener algo que leer. El default
que verifica es mcp-ical (lectura de Apple Calendar vía EventKit, solo macOS). Si el
usuario usa otro MCP de calendario (por ejemplo uno de Google Calendar, que sí es
multiplataforma), ajusta las variables CALPULSE_MCP_NAME y CALPULSE_TOOL en el paso 3.
Comprueba qué MCP tiene conectado con:
claude mcp list
Si no hay ningún MCP de calendario conectado, avísale al usuario: la semilla se instala igual, pero no inyectará nada (hará un "skip visible") hasta que conecte uno.
1. Copia el script del kernel
mkdir -p "$HOME/.claude/hooks"
cp kernel/calendar-pulse-injector.sh "$HOME/.claude/hooks/calendar-pulse-injector.sh"
chmod +x "$HOME/.claude/hooks/calendar-pulse-injector.sh"
Windows (Git Bash / WSL): misma ruta
~/.claude/hooks/. El script usabash,datey (opcionalmente)python, que vienen con Git Bash o WSL. Recuerda que el MCPmcp-icalpor defecto es solo macOS; en Windows necesitarás un MCP de calendario multiplataforma.
2. Registra el hook en settings.json
Abre $HOME/.claude/settings.json (créalo si no existe) y agrega esta entrada dentro de
hooks.SessionStart. Si ya hay hooks de SessionStart, suma este objeto al arreglo
hooks existente en lugar de reemplazarlo (fusiona, no sobrescribas):
{
"hooks": {
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "bash $HOME/.claude/hooks/calendar-pulse-injector.sh",
"timeout": 10
}
]
}
]
}
}
El
"timeout": 10es de sobra: el hook solo consulta el estado del MCP e imprime un texto corto.
3. (Opcional) Personaliza por variables de entorno
Todo tiene un default sano, así que este paso es opcional. Si el usuario quiere ajustar
algo, agrega un bloque env en settings.json o define las variables en su shell:
| Variable | Qué controla | Default |
|---|---|---|
| CALPULSE_DISABLE | Con cualquier valor, apaga el pulso | (vacío = activo) |
| CALPULSE_MCP_NAME | Nombre del MCP de calendario a verificar | mcp-ical |
| CALPULSE_TOOL | Herramienta del MCP que lee eventos (aparece en el recordatorio) | mcp__mcp-ical__list_events |
| CALPULSE_MSG | Reemplaza por completo el texto del recordatorio | auto |
| CALPULSE_WEEKLY_HINT | Texto extra que se añade los lunes; ponlo vacío "" para quitar la pista de lunes | auto |
| CALPULSE_RESUME_WINDOW | Segundos que dura un "resume caliente": si retomas la sesión dentro de esa ventana, el pulso no se repite. Ponlo en 0 para que se inyecte también en resume | 3600 (1 hora) |
4. Verificación post-siembra (obligatoria · hazla y muestra el resultado)
a) El script existe y es ejecutable:
ls -l "$HOME/.claude/hooks/calendar-pulse-injector.sh"
Salida esperada: una línea con permisos -rwxr-xr-x (la x = ejecutable).
b) Prueba en caliente — caso "MCP conectado" (simulado): para ver el JSON que se
inyecta sin depender del estado real del MCP, engaña la verificación apuntándola a un
CLI de mentira que siempre dice "connected". Le pasamos por la entrada un arranque tipo
startup. Copia y pega este bloque completo:
tmp="$(mktemp -d)"
cat > "$tmp/claude" <<'FAKE'
#!/usr/bin/env bash
echo "mcp-ical: connected"
FAKE
chmod +x "$tmp/claude"
echo '{"source":"startup"}' | PATH="$tmp:$PATH" bash "$HOME/.claude/hooks/calendar-pulse-injector.sh"; echo "EXIT=$?"
rm -rf "$tmp"
Salida esperada: una línea JSON que empieza con {"hookSpecificOutput": y contiene
PULSO DE AGENDA: con la fecha de hoy, terminada en EXIT=0.
c) Prueba del skip visible — caso "MCP no conectado": con un CLI de mentira que dice que NO está conectado, el hook debe salir limpio y avisar por qué (sin inyectar):
tmp="$(mktemp -d)"
cat > "$tmp/claude" <<'FAKE'
#!/usr/bin/env bash
echo "otros-mcps: connected"
FAKE
chmod +x "$tmp/claude"
echo '{"source":"startup"}' | PATH="$tmp:$PATH" bash "$HOME/.claude/hooks/calendar-pulse-injector.sh"; echo "EXIT=$?"
rm -rf "$tmp"
Salida esperada: una línea [calendar-pulse-injector] SKIP visible: ... y EXIT=0
(sin ningún JSON). Así confirmas que nunca falla callado.
d) Prueba del "resume caliente" — no repetir el pulso: simulamos un sello reciente
(como si acabaras de arrancar la sesión) y un arranque tipo resume. El hook debe salir
limpio SIN inyectar JSON, porque ya viste el pulso hace un rato:
tmp="$(mktemp -d)"
cat > "$tmp/claude" <<'FAKE'
#!/usr/bin/env bash
echo "mcp-ical: connected"
FAKE
chmod +x "$tmp/claude"
mkdir -p "$HOME/.calendar-pulse"; touch "$HOME/.calendar-pulse/last-run"
echo '{"source":"resume"}' | PATH="$tmp:$PATH" bash "$HOME/.claude/hooks/calendar-pulse-injector.sh"; echo "EXIT=$?"
rm -rf "$tmp"
Salida esperada: ningún JSON y EXIT=0. (Si en cambio quisieras que el pulso también
salga en un resume, arranca con CALPULSE_RESUME_WINDOW=0.)
e) El hook quedó registrado:
grep -q 'calendar-pulse-injector' "$HOME/.claude/settings.json" && echo 'REGISTRADO'
Salida esperada: REGISTRADO.
Cuando las cinco 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ó?
De ahora en adelante, cuando abras una sesión nueva de trabajo (y tengas tu MCP de calendario conectado), tu asistente va a arrancar mirando tu agenda de hoy. Si el día está flojo y traes pendientes importantes, en vez de dejarlo pasar te va a proponer cómo llenarlo con horarios realistas. Y si el calendario no está disponible, te lo dice claro en lugar de fingir que todo está bien.
No tienes que hacer nada especial en el día a día. Solo vas a notar que tus días arrancan con un plan, no en automático. Eso es todo. 🌱
