Cuando ejecutas varias sesiones de Claude Code a la vez, un simple aviso de "Claude necesita tu atención" no basta, porque no sabes qué sesión lo ha enviado. La solución es incluir el proyecto o la carpeta de la sesión en cada notificación. Cada hook recibe el cwd y el session_id de la sesión en JSON, así que tu hook puede leerlos y poner el nombre del proyecto en el aviso. Dales nombres claros a las sesiones con claude -n <name> o /rename, y usa claude --worktree <name> para que cada sesión paralela sobre un mismo repositorio tenga su propia carpeta, que luego aparece en el aviso.
01Por qué las sesiones en paralelo generan confusión
Tener dos o tres sesiones de Claude Code en paralelo ya es una forma normal de trabajar: una arregla un bug, otra escribe tests y otra explora un refactor. Cada sesión se detiene a su ritmo. Los problemas son siempre los mismos:
- llega un aviso y no sabes de qué pestaña del terminal viene;
- una sesión lleva veinte minutos esperando en un prompt de permisos mientras tú mirabas otra;
- respondes en la ventana equivocada.
Los tres se reducen a identificar. Cada aviso debería decir de dónde viene, y cada respuesta debería volver a la sesión que preguntó.
02Primero, separa bien las sesiones
Usa worktrees para el mismo repositorio
Dos sesiones editando el mismo checkout se pisarán los cambios. El flag --worktree de Claude Code (-w en corto) crea un git worktree aislado e inicia la sesión en él:
claude --worktree feature-auth
claude --worktree fix-login
Por defecto, cada worktree se crea en .claude/worktrees/<name>/ en la raíz del repositorio, en una rama nueva llamada worktree-<name>. Ejecuta cada comando en su propio terminal. Añade .claude/worktrees/ a tu .gitignore para que los worktrees no aparezcan como archivos sin seguimiento.
Al salir, Claude Code revisa el worktree. Si está limpio y nunca le pusiste nombre a la sesión, Claude Code elimina el worktree y su rama; si no, te pregunta si quieres conservarlo. Para volver más tarde a un worktree conservado, ejecuta el comando claude --worktree <name> --resume que muestra al salir. Si prefieres gestionar los worktrees tú mismo, git worktree add ../project-feature-a -b feature-a también funciona; inicia claude dentro de esa carpeta.
Un efecto secundario útil para las notificaciones: ahora cada sesión tiene su propio nombre de carpeta, como feature-auth, que es justo lo que quieres ver en un aviso.
Ponles nombre a tus sesiones
Los nombres facilitan encontrar y reanudar sesiones:
claude -n auth-refactor
Dentro de una sesión en curso, /rename auth-refactor hace lo mismo, y el nombre aparece en la barra del prompt. Más tarde, claude --resume auth-refactor te lleva directamente de vuelta. En el selector de sesiones (claude --resume sin nombre), Ctrl+W amplía la lista a todos los worktrees del repositorio.
03Incluye el proyecto en cada aviso hecho por ti
Cada hook de comando recibe JSON por la entrada estándar con campos comunes a todos los eventos, como session_id, cwd, transcript_path y hook_event_name. En una sesión con worktree, cwd es la raíz del worktree, y sigue a Claude si cambia de directorio. Léelo en tu hook y usa la última parte de la ruta como etiqueta.
En Mac y Linux, guarda esto como ~/.claude/hooks/notify-session.sh y hazlo ejecutable con chmod +x. Necesita jq.
#!/bin/sh
input=$(cat)
project=$(basename "$(printf '%s' "$input" | jq -r '.cwd')")
event=$(printf '%s' "$input" | jq -r '.hook_event_name')
case "$event" in
Stop) msg="Claude has finished" ;;
*) msg="Claude needs you" ;;
esac
notify-send "Claude Code: $project" "$msg"
En Mac, cambia la última línea por una notificación con osascript, como se muestra en la guía de macOS. En Windows, lee el mismo JSON en PowerShell con ConvertFrom-Json; la guía de Windows tiene un ejemplo completo.
Luego regístralo para los eventos que te interesen en ~/.claude/settings.json:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
],
"Notification": [
{ "matcher": "permission_prompt", "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
]
}
}
Dos apuntes sobre rutas. Pon entre comillas variables como "$input", porque los nombres de carpeta pueden tener espacios. Y si referencias un script con ${CLAUDE_PROJECT_DIR}, recuerda que apunta siempre a la carpeta donde empezó la sesión, incluso después de que Claude pase a un worktree. Lee cwd del input cuando necesites la carpeta actual.
Si trabajas en tmux, el panel o la ventana suele ser mejor etiqueta que la carpeta. La guía de tmux explica cómo encontrar el panel correcto y cambiar a él.
04Lo difícil: responder en la sesión correcta
Una alerta con etiqueta te dice qué sesión te necesita, pero aún tienes que ir a esa terminal para responder. Con tres sesiones, eso significa buscar la pestaña correcta, desplazarte hasta el prompt y escribir. Un hook hecho por ti no puede devolver tu respuesta fácilmente, porque solo el hook que está esperando dentro de esa sesión puede devolverle una decisión a Claude Code.
Ese es el hueco que cubre Claude Code Notifier. Es una herramienta independiente, no creada por Anthropic. Su herramienta de línea de comandos, ccn, se instala como hooks de Claude Code en Mac, Windows y Linux, así que cubre todas las sesiones que inicies, en cualquier terminal, sin configurar nada por sesión. Cada notificación incluye el nombre y la carpeta del proyecto, para que en tu iPhone o tu móvil Android veas qué sesión la envió. Como el hook que envió la solicitud es el que espera tu respuesta, una aprobación, una elección o una instrucción de seguimiento desde el móvil vuelve a la sesión que preguntó.
Algunos detalles importantes cuando tienes varias sesiones:
- Varios ordenadores. Un móvil puede vincularse con varios ordenadores, y un ordenador con varios móviles.
ccn devicesmuestra los móviles vinculados a este ordenador. - Presencia. Si has escrito en los últimos 30 segundos, no se espera al móvil y la terminal pregunta como siempre. Si no estás, la sesión espera la respuesta del móvil hasta el límite que elijas (
hold_ceiling_seconds) y deja de esperar en cuanto tocas el teclado. - Notificaciones de escritorio sin móvil. Antes de vincular un móvil,
ccnmuestra una notificación de escritorio en el ordenador cuando cualquier sesión termina, necesita un permiso o hace una pregunta.
Si solo usas una sesión a la vez y estás en tu mesa, probablemente te baste con una alerta de escritorio con etiqueta. La guía comparativa pone las opciones una al lado de otra.
05Preguntas frecuentes
¿Cómo sé qué sesión de Claude Code envió una notificación?
Lee el campo cwd del JSON de entrada del hook y pon el nombre de la carpeta en el título de la alerta. Con worktrees, cada sesión tiene su propia carpeta, así que el nombre es distinto para cada una. Herramientas como Claude Code Notifier incluyen el nombre y la carpeta del proyecto en cada notificación por ti.
¿Puedo tener dos sesiones de Claude Code en el mismo repositorio?
Sí, pero dale a cada una su propio worktree para que sus cambios no choquen. claude --worktree <name> crea uno en .claude/worktrees/<name>/ en una rama nueva e inicia la sesión ahí.
¿Cómo le pongo nombre a una sesión de Claude Code?
Iníciala con claude -n <name>, o ejecuta /rename <name> dentro de una sesión. Retómala más tarde con claude --resume <name>.
¿Los hooks se ejecutan por separado en cada sesión?
Sí. Cada sesión ejecuta sus propios hooks cuando se disparan sus eventos, y pasa en el input el session_id y el cwd de esa sesión. Los hooks de ~/.claude/settings.json se aplican a todas las sesiones que inicies.
¿Se mezclarán las notificaciones de distintos ordenadores?
Con ccn, no. Cada ordenador se vincula con tu móvil por separado y tiene su propio nombre, y cada notificación indica el proyecto del que viene.