Human in the loop: el mod de Claude Code human in the loop para tareas que solo tú puedes hacer
Claude te asigna las tareas que solo tú puedes hacer. Esperan en My tasks, contadas bajo el prompt.
Permisos
- Intercepta llamadas a herramientasVe cada llamada a herramienta que hace Claude (tool.call / tool.check) y podría bloquearla o modificarla.
- Lee tus promptsPuede ver lo que escribes y la transcripción de la conversación (prompt.* / session.append / session.messages).
- Modifica la interfazDibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).
- Añade comandos/herramientasRegistra nuevos comandos de barra o herramientas invocables por ti o por Claude ($.command.register / $.tool.register).
- Guarda datosConserva datos entre sesiones en el almacén privado del plugin ($.store.*).
- probado con
- v2.1.310
- última prueba
- requiere
- Claude Code ≥ 2.1.287
- superficies
- panel, estado, aviso, transcripción
- código fuente
- Tzafrir Rehan (tzafrir) (MIT)
Instalar dentro de Claude Code:
/plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loop¿Qué hace este mod?
Human in the loop es un mod de la comunidad de Tzafrir Rehan (tzafrir), un mod Claude Code human in the loop para una situación concreta: Claude necesita algo que solo tú puedes hacer, como poner una clave en .env, una aprobación en staging, un comando en tu propia máquina o una decisión. Lo normal es que lo diga en medio de una respuesta y que la petición se pierda al hacer scroll. Con este mod, Claude asigna la petición como una tarea.
El mod registra tres herramientas, assign_task, list_tasks y withdraw_task, y añade unas líneas al prompt del sistema que le dicen a Claude que use assign_task para todo lo que solo tú puedes hacer, incluidas las revisiones de su trabajo. Una tarea tiene un título, una razón de una frase, un "done when" opcional y un tipo: do (tú lo haces y la marcas como hecha), answer (Claude necesita tus palabras) o choose (elegir una de 2 a 4 opciones). Las tareas abiertas esperan en un panel My tasks y se cuentan en la línea de estado bajo el prompt, como ☐ 1 task for you · /my-tasks. Puedes responder con Done, una opción, una respuesta o un rechazo con motivo.
Las tareas no bloquean a Claude. Sigue con otro trabajo y tu respuesta le llega como mensaje cuando la das. Límites según el código: como máximo 5 tareas abiertas, la misma petición dos veces es una sola tarea y solo el agente principal puede asignarlas.
Demo
La grabación inicia Claude Code con el mod cargado en el pequeño proyecto de demostración y le pide a Claude que use assign_task para darnos una tarea: poner STRIPE_KEY en .env. Claude llama a la herramienta y la transcripción muestra una fila amarilla ☐ Assigned you a task: Put your STRIPE_KEY in the .env file, seguida del resultado de la herramienta, que indica que es la tarea #1 y que hay 1 de 5 tareas abiertas. Bajo el prompt, la línea de estado dice ☐ 1 task for you · /my-tasks, y a la derecha del pie aparece un toast: human-in-the-loop: Claude assigned you a task: Put your STRIPE_KEY in the .env file. See /my-tasks. En esta grabación estrecha el panel no se abrió solo, que es para lo que sirve el toast, así que el vídeo no muestra el panel ni cómo se responde una tarea.
Instalación
Usa cualquiera de los métodos del bloque de instalación; instalan directamente desde el marketplace del propio autor. Tras instalar, inicia una sesión nueva o ejecuta /reload-plugins. /my-tasks abre el panel.
$ install human-in-the-loop
Requiere Claude Code ≥ 2.1.287
Se instala desde el marketplace del autor: tzafrir/human-in-the-loop
1.Una línea, dentro de Claude Code
/plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loopPégala en una sesión abierta (v2.1.275+). Claude Code te pedirá primero añadir el marketplace.
2.Desde tu shell
claude plugin marketplace add tzafrir/human-in-the-loop claude plugin install human-in-the-loop@human-in-the-loopDespués ejecuta /reload-plugins en cualquier sesión que ya esté abierta.
3.Pruébalo sin instalarlo
git clone https://github.com/tzafrir/human-in-the-loop claude --plugin-dir ./human-in-the-loopCarga el mod solo para una sesión. No se añade nada a tu configuración.
Cómo funciona
hooks/register.tsx es el único módulo de hooks. El manejador de assign_task comprueba los argumentos, rechaza duplicados y una sexta tarea abierta, guarda la tarea y abre el panel. De hooks/register.tsx:
on('tool.call', { tool: ASSIGN }, async ($, e) => {
if (e.agentId !== undefined) {
return { deny: 'Only the main agent assigns tasks to the user. Say what you need from the user in your result instead.' }
}
const ask = parseAsk(e as unknown as Record<string, unknown>)
if ('error' in ask) {
return { deny: ask.error }
}
// ...
return { result: assignedOf(task, active.length + 1) }
})Las tareas viven en $.state y en una clave de $.store por sesión, bajo la carpeta del proyecto, escrita por un latido de 60 segundos, de modo que la siguiente sesión pueda asumir las tareas de una sesión terminada o inactiva. Tus respuestas salen con $.prompt.submit cuando Claude está inactivo, o se añaden como fila con $.session.append mientras trabaja. Un hook prompt.compose añade el texto de orientación y un hook prompt.context lista las tareas abiertas al empezar y tras una compactación.
Personalízalo
No hay opciones. Lo controlas con los botones y teclas del panel: d para Done, 1 a 4 para opciones, r para responder, x para rechazar, y Save for later o Send now para el momento del envío. Las respuestas largas pasan por tu propia caja de prompt: Long answer… la empieza con ↳ Answer to #3:. Para cambiar los límites, las constantes MAX_OPEN y MAX_TITLE están en hooks/tasks.ts y BATCH_MS en hooks/register.tsx.
Permisos y seguridad
Leímos todos los archivos que carga el plugin antes de ejecutar nada: .claude-plugin/plugin.json, hooks/hooks.json, hooks/register.tsx, pane.ts, project.ts, tasks.ts, text.ts, las declaraciones de tipos y las pruebas. No hay package.json, script de instalación, código empaquetado o minificado, ni binarios aparte de imágenes PNG y GIF. Hay un archivo LICENSE (MIT).
- Red, procesos, archivos, entorno: ninguno. Una búsqueda en los hooks no encontró
fetch,child_process,$.process,$.http,evalniimport()dinámico. El único almacenamiento es$.storey$.state, con el modelo de datos descrito endocs/privacy.md. Sin telemetría; la política de privacidad del autor dice que nada sale de tu máquina. - Daemons: ninguno; el latido de
$.clock.everysolo corre mientras dura la sesión. - Influencia sobre el modelo: esta es la parte destacable. El mod añade tres herramientas, una sección de tres líneas al final del prompt del sistema (
STEERING), un bloque de contextohumanInTheLoopcon las tareas abiertas y un resumen de actualizaciones de tareas que acompaña a tu siguiente prompt. También hace que sus tres herramientas estén siempre visibles en lugar de diferidas. El texto es sencillo y coincide con el README; no encontramos caracteres ocultos ni de ancho cero en el código ni en el manifiesto (solo en cadenas de prueba con emojis). - Hooks de control: los hooks
tool.callsolo responden a las tres herramientas del propio mod, yprompt.submitlee tu prompt para reconocer una respuesta larga (↳ Answer to #N:) y adjuntar las respuestas aún no enviadas. Una respuesta que parece un secreto se descarta con un aviso en lugar de enviarse. Cualquier otra llamada a herramientas pasa sin cambios.validateseñala que estos hooks no tienen.catch. - Prompts que envía: tus respuestas a las tareas con tus palabras y una línea fija:
I answered a task while you were finishing your reply; my answer is above. - Requisitos: los function hooks deben estar activados en Claude Code (el README los llama acceso anticipado). Sin binarios externos ni cuentas.
claude plugin validate pasó sin errores ni advertencias, y las pruebas del autor pasaron en Claude Code 2.1.310: 192 correctas, 0 fallidas.
- Intercepta llamadas a herramientas
- Ve cada llamada a herramienta que hace Claude (tool.call / tool.check) y podría bloquearla o modificarla.
- Lee tus prompts
- Puede ver lo que escribes y la transcripción de la conversación (prompt.* / session.append / session.messages).
- Modifica la interfaz
- Dibuja en la interfaz de Claude Code: bandas, paneles, texto de estado, avisos (ui.render / $.ui.*).
- Añade comandos/herramientas
- Registra nuevos comandos de barra o herramientas invocables por ti o por Claude ($.command.register / $.tool.register).
- Guarda datos
- Conserva datos entre sesiones en el almacén privado del plugin ($.store.*).
Compatibilidad y solución de problemas
Comprobado con Claude Code 2.1.310 en macOS (validate, pruebas y grabación). Si no pasa nada:
- Los function hooks están activados y el plugin aparece cargado en
/plugin. - Iniciaste una sesión nueva o ejecutaste
/reload-pluginstras instalar. - Claude solo asigna una tarea cuando el prompt del sistema lleva el texto de orientación; no se añade en modo
-p(print) ni en modo bare. - En un terminal estrecho el panel no se abre sin pedirlo. Ejecuta
/my-tasksy haz clic o pulsactrl+x tabpara usar las teclas. - La app móvil no dibuja campo de respuesta, así que allí solo hay Done, opciones y un Reject inmediato.
Preguntas frecuentes
- ¿En qué se diferencia una tarea de AskUserQuestion?
- AskUserQuestion bloquea a Claude hasta que respondes. Una tarea no: Claude sigue trabajando mientras espera, y tu respuesta le llega como un mensaje cuando la das. La descripción de la herramienta le dice a Claude que use tareas para lo que necesite en algún momento de la sesión.
- ¿Cuándo recibe Claude mi respuesta?
- De inmediato si Claude está inactivo. Si está trabajando, la respuesta se guarda y sale al terminar el turno; si queda alguna tarea abierta, sale junto con tus otras respuestas cuando ya no quede ninguna. El botón Send now la envía al instante, y tu siguiente prompt también la lleva.
- ¿Sobreviven las tareas a /clear, a una sesión nueva o a una compactación?
- Sí. Las tareas abiertas se guardan en el almacén propio del plugin, por carpeta de proyecto, y la siguiente sesión en esa carpeta las asume. Claude vuelve a recibir aviso de ellas al empezar una conversación y tras una compactación.
- ¿Qué pasa si respondo con un secreto?
- Una respuesta que parece una clave, un token o una clave privada se retiene con una advertencia y no se envía a menos que pulses Send anyway. La descripción de la herramienta pide a Claude que te haga poner el secreto donde corresponde y pulsar Done en lugar de pegarlo.
- ¿Envía algo por la red?
- No. No encontramos llamadas de red, de procesos ni del sistema de archivos en el código. Guarda las tareas con $.store y envía tus respuestas a Claude solo como prompts, con tus propias palabras.
# Mods relacionados
DestacadoAviso de finalización
Un toast «Done in 2m 14s» y un sonido al terminar un turno largo de Claude, más un aviso de escritorio opcional.
- aviso
- Ejecuta comandos
- Modifica la interfaz
- Reproduce sonido
probado con v2.1.310
DestacadoNext Steps
Dos o tres prompts probables sobre la entrada tras cada turno. Pulsa 1, 2 o 3 para crear un borrador.
- sobre el prompt
- Llama al modelo (usa tu cuota)
- Lee tus prompts
- Modifica la interfaz
probado con v2.1.291
Más en Temporizadores, tareas y standups, Herramientas que añades a Claude.