Saltar al contenido
claudemods

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

Instalar dentro de Claude Code:

/plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loop
Todas las opciones de instalación ↓

¿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. 1.Una línea, dentro de Claude Code

    /plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loop

    Pégala en una sesión abierta (v2.1.275+). Claude Code te pedirá primero añadir el marketplace.

  2. 2.Desde tu shell

    claude plugin marketplace add tzafrir/human-in-the-loop
    claude plugin install human-in-the-loop@human-in-the-loop

    Después ejecuta /reload-plugins en cualquier sesión que ya esté abierta.

  3. 3.Pruébalo sin instalarlo

    git clone https://github.com/tzafrir/human-in-the-loop
    claude --plugin-dir ./human-in-the-loop

    Carga 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, eval ni import() dinámico. El único almacenamiento es $.store y $.state, con el modelo de datos descrito en docs/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.every solo 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 contexto humanInTheLoop con 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.call solo responden a las tres herramientas del propio mod, y prompt.submit lee 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. validate señ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-plugins tras 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-tasks y haz clic o pulsa ctrl+x tab para 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.
Aviso de finalización funcionando en Claude CodeDestacado

Aviso 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

Next Steps funcionando en Claude CodeDestacado

Next 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.