🌱 Empieza aquí · Guardián de Foco
¿Te ha pasado que arrancas algo importante y, a media tarea, "se te ocurre" otra cosa más brillante y terminas persiguiendo esa en su lugar? Esa es la trampa que tapa esta semilla. Le instala a tu asistente un guardián que vigila tu prioridad de la semana: cuando tu mensaje se va por la tangente, en vez de seguirte la corriente a ciegas, te hace una pausa amable para evaluar si de verdad vale la pena cambiar de rumbo. Nunca te bloquea. Solo te hace pensarlo dos segundos.
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 guardián de foco", "haz el setup de esto". Te entiende igual.
Para el asistente que siembra 🤖
Instala este hook (gancho de automatización) del evento UserPromptSubmit (se dispara
cada vez que el usuario manda un mensaje). Sigue estos pasos y no inventes rutas:
usa $HOME siempre.
1. Copia el script del kernel (el corazón de la semilla)
Copia kernel/focus-guard.sh a la carpeta de hooks del usuario y dale permiso de
ejecución.
Claude Code / Cowork (macOS o Linux):
mkdir -p "$HOME/.claude/hooks"
cp kernel/focus-guard.sh "$HOME/.claude/hooks/focus-guard.sh"
chmod +x "$HOME/.claude/hooks/focus-guard.sh"
Windows (Git Bash / WSL): misma ruta ~/.claude/hooks/. El script usa bash y
python3. Si el usuario corre Claude Code nativo en Windows sin bash/python3
disponibles, avísale que este hook necesita un entorno con ambos (Git Bash o WSL los
traen). Si python3 no está, el hook no rompe nada: sale en silencio.
2. Registra el hook en settings.json
Abre $HOME/.claude/settings.json (créalo si no existe) y agrega esta entrada dentro
de hooks.UserPromptSubmit. Si ya hay hooks de UserPromptSubmit, suma este
objeto al arreglo hooks existente en lugar de reemplazarlo:
{
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "bash $HOME/.claude/hooks/focus-guard.sh",
"timeout": 5
}
]
}
]
}
}
3. Crea el archivo de foco (aquí vive TODA la personalización)
El guardián no hace nada hasta que exista el archivo de foco. Créalo en
$HOME/.claude/focus-active.json con la prioridad real de la persona y su lista de
distracciones. Ayúdale a llenarlo con sus palabras:
{
"priority": "Lanzar la nueva landing page antes de fin de mes",
"status": "active",
"deadline": "2026-07-31",
"distractions": [
"rediseñar el logo",
"migrar el blog a otro CMS",
"arrancar un podcast"
]
}
priority— en qué está enfocada la persona esta semana (una frase clara).status—"active"mientras esa prioridad siga vigente. Cuando la termine, cámbialo a"done"y el guardián le recordará (una vez al día) definir la siguiente.deadline— opcional, formatoAAAA-MM-DD. Si la fecha ya pasó, cuenta como vencida y dispara el mismo recordatorio.distractions— la lista de temas que suelen sacar a la persona de su foco. El guardián toma la palabra más larga de cada tema como pista para detectarlos en los mensajes. Escribe temas concretos ("rediseñar el logo") mejor que genéricos ("diseño").
Consejo: mantén este archivo vivo. Cada lunes (o cuando cambie el foco) actualiza
priorityydistractions. Es lo único que la persona toca en el día a día.
4. (Opcional) Ajusta rutas o el prefijo de override
Todo es parametrizable por variables de entorno, por si el usuario quiere otra ubicación o palabra de escape:
FOCUS_FILE— ruta al archivo de foco (por defecto$HOME/.claude/focus-active.json).FOCUS_NAG_FLAG— archivo bandera que evita repetir el recordatorio más de una vez al día (por defecto$HOME/.claude/.focus-nag-shown).FOCUS_OK_PREFIX— el prefijo que desactiva el guardián por un mensaje (por defectofocus-ok:).
5. Verificación post-siembra (obligatoria)
Como es un hook de comportamiento, hay que probar los dos casos: que avisa cuando te distraes y que calla cuando estás en tu foco. Usa un archivo de foco de prueba:
printf '%s' '{"priority":"Terminar la propuesta","status":"active","distractions":["revisar Twitter","rediseno del logo"]}' > /tmp/foco-prueba.json
# a) Mensaje que toca una distraccion -> debe imprimir un codazo [FOCUS-GUARD]
printf '%s' '{"prompt":"oye y si mejor le entramos al rediseno del logo"}' | FOCUS_FILE=/tmp/foco-prueba.json FOCUS_NAG_FLAG=/tmp/foco-nag bash "$HOME/.claude/hooks/focus-guard.sh"; echo "EXIT=$?"
Salida esperada: un bloque que empieza con [FOCUS-GUARD] y termina en EXIT=0
(el hook informa pero nunca bloquea, por eso siempre sale 0).
# b) Mensaje alineado a la prioridad -> silencio
printf '%s' '{"prompt":"vamos a terminar la propuesta ahora mismo"}' | FOCUS_FILE=/tmp/foco-prueba.json FOCUS_NAG_FLAG=/tmp/foco-nag bash "$HOME/.claude/hooks/focus-guard.sh"; echo "EXIT=$?"
Salida esperada: sin ningún aviso y EXIT=0.
Por último, confirma que el hook quedó registrado en settings.json:
grep -q 'focus-guard' "$HOME/.claude/settings.json" && echo 'REGISTRADO'
Salida esperada: REGISTRADO.
Cuando las tres pruebas den lo esperado, borra el archivo de prueba
(/tmp/foco-prueba.json y /tmp/foco-nag), 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, cada vez que un mensaje tuyo se salga de tu prioridad de la semana, tu asistente hará una pausa breve para evaluarlo contigo: "oye, esto te aleja de tu foco; ¿es un cambio que de verdad vale la pena o es un impulso del momento?".
Tú decides siempre. Si de verdad quieres cambiar de tema, dilo y ya (o empieza tu
mensaje con focus-ok: para que ni te pregunte esa vez). Y cuando termines tu
prioridad, cambia status a "done" en el archivo de foco: tu asistente te recordará
poner la siguiente para que nunca trabajes sin un norte claro.
No tienes que hacer nada especial en el día a día. Solo vas a notar que te dispersas menos y avanzas más en lo que de verdad importa. Eso es todo. 🌱
