🌱 Empieza aquí · Barra de estado consciente de tu contexto
¿Trabajas varios proyectos o clientes desde la misma carpeta y tu barra de estado siempre te muestra lo mismo, sin importar de qué estés hablando? Esta semilla arregla eso. Le enseña a tu asistente a adivinar de qué área de trabajo trata cada mensaje —por unas palabras clave que tú defines— y a dejarlo anotado, para que tu barra de estado te muestre el contexto real ("Cliente A", "Personal", "Sistema"...) en vez de la carpeta física donde abriste la terminal.
Para instalarla
Abre esta carpeta con Claude Code 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 detector de contexto de la barra de estado", "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 envía un mensaje). El hook no bloquea nada: solo lee el
mensaje, decide un área y la escribe en un archivo de estado por sesión. Una barra de
estado (statusline) puede leer ese archivo para mostrar el contexto.
Sigue estos pasos y no inventes rutas: usa $HOME siempre. Los valores entre
<...> los resuelves tú según la plataforma.
<TU-RUTA-DE-HOOKS>→ carpeta de hooks del asistente. En Claude Code:~/.claude/hooks/.<TU-ARCHIVO-DE-SETTINGS>→settings.jsondel asistente. En Claude Code (usuario):~/.claude/settings.json.
1. Copia el script del kernel
mkdir -p "$HOME/.claude/hooks"
cp kernel/domain-statusline-state.sh "$HOME/.claude/hooks/domain-statusline-state.sh"
chmod +x "$HOME/.claude/hooks/domain-statusline-state.sh"
El script usa
bash,jq,grep,sed,findytr. En macOS y Linux ya vienen.jq(lector de JSON) puede faltar; sijqno está instalado, instálalo antes (brew install jqen macOS,apt install jqen Debian/Ubuntu). En Windows usa Git Bash o WSL conjqdisponible.
2. Registra el hook UserPromptSubmit 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 existente en vez de reemplazarlo:
{
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "bash $HOME/.claude/hooks/domain-statusline-state.sh",
"timeout": 5
}
]
}
]
}
}
3. Crea el archivo de áreas (el corazón del valor)
Aquí vive TODO el jugo: sin este archivo el hook no hace nada (sale limpio). Copia el ejemplo del kernel a la ruta que el script busca por defecto y edítalo con las áreas reales del usuario:
cp kernel/statusline-areas.ejemplo.conf "$HOME/.claude/statusline-areas.conf"
Abre $HOME/.claude/statusline-areas.conf. Cada línea es Nombre del área = palabras clave. Pregúntale al usuario (o dedúcelo de su trabajo) cómo dividir su mundo: por
cliente, por proyecto, por tema. Reemplaza los ejemplos por lo suyo. Reglas de la config:
- El área con más coincidencias de palabras clave en el mensaje gana.
- En empate gana la primera área listada (ordénalas de más a menos prioritaria).
- Si un mensaje no coincide con nada, se mantiene la última área de la sesión.
- El regex es case-insensitive; separa varias palabras con
|. Usa\bpalabra\bpara exigir la palabra completa y evitar falsos positivos.
4. Conecta el estado a la barra de estado (opcional pero es el punto)
El hook solo escribe el área. Para verla, tu barra de estado debe leer el
archivo de estado de la sesión. Si el usuario aún no tiene un statusline, este es un
ejemplo mínimo: un script que Claude Code invoca con el JSON de la sesión por stdin, del
que sacamos el session_id para leer el estado correcto.
Guárdalo como $HOME/.claude/statusline.sh, dale chmod +x, y regístralo en
settings.json bajo la clave statusLine ({ "statusLine": { "type": "command", "command": "bash $HOME/.claude/statusline.sh" } }):
#!/usr/bin/env bash
INPUT="$(cat)"
SID="$(printf '%s' "$INPUT" | jq -r '.session_id // empty' 2>/dev/null)"
# Misma carpeta y valor por defecto que el hook: si el usuario cambió
# STATUSLINE_STATE_DIR, el lector lo respeta y no se desincroniza.
STATE_DIR="${STATUSLINE_STATE_DIR:-$HOME/.claude/statusline-state}"
AREA="General"
[ -n "$SID" ] && [ -f "$STATE_DIR/$SID.area" ] && \
AREA="$(cat "$STATE_DIR/$SID.area")"
printf '📍 %s' "$AREA"
Si el usuario ya tiene un statusline, solo agrégale la lógica de esas líneas (leer
session_id, resolver STATE_DIR igual que el hook, leer $STATE_DIR/$SID.area e
imprimirlo) donde quiera que aparezca.
5. Verificación post-siembra (obligatoria)
a) El clasificador decide bien. Simula un mensaje y confirma que escribe el área correcta. Reemplaza el regex del ejemplo por uno que exista en la config del usuario:
echo '{"session_id":"prueba-123","prompt":"tengo una reunión con el cliente el jueves"}' \
| bash "$HOME/.claude/hooks/domain-statusline-state.sh"; echo "EXIT=$?"
cat "$HOME/.claude/statusline-state/prueba-123.area"; echo
Salida esperada: EXIT=0 y, debajo, el nombre del área cuyas palabras clave
matchearon (con el ejemplo por defecto, Trabajo). Si sale vacío, revisa que
~/.claude/statusline-areas.conf exista y tenga palabras que coincidan con la frase.
b) El comportamiento pegajoso funciona. Un segundo mensaje sin ninguna palabra clave NO debe borrar el área anterior:
echo '{"session_id":"prueba-123","prompt":"ok, gracias"}' \
| bash "$HOME/.claude/hooks/domain-statusline-state.sh"
cat "$HOME/.claude/statusline-state/prueba-123.area"; echo
rm -f "$HOME/.claude/statusline-state/prueba-123.area"
Salida esperada: el MISMO área del paso (a) (no cambió). Al final limpiamos el estado de prueba.
c) El hook quedó registrado:
grep -q 'domain-statusline-state' "$HOME/.claude/settings.json" && echo 'REGISTRADO'
Salida esperada: REGISTRADO.
Cuando las tres pruebas den lo esperado, abre una sesión nueva, escribe un par de mensajes de distintos temas y confirma que la barra de estado va cambiando de área. Luego avísale al usuario en una línea qué gana con esto.
✅ ¿Cómo sé que funcionó?
De ahora en adelante, tu barra de estado te va a decir de qué estás hablando, no en qué carpeta estás. Si en una misma sesión saltas de un cliente a otro, o del trabajo a un pendiente personal, el rótulo cambia solito conforme escribes. Y si mandas un "sí, dale" sueltito, no se pierde el contexto: se queda en la última área que venías tratando.
No tienes que hacer nada especial en el día a día. La única vez que vale la pena volver al
archivo statusline-areas.conf es cuando arranques un proyecto o cliente nuevo: agrégale
una línea con sus palabras clave y listo. Eso es todo. 🌱
