Human in the loop: o mod Claude Code human in the loop para tarefas que só você pode fazer
O Claude atribui a você as tarefas que só você pode fazer. Elas esperam em My tasks, contadas sob o prompt.
Permissões
- Intercepta chamadas de ferramentasVê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
- Lê seus promptsPode ver o que você digita e a transcrição da conversa (prompt.* / session.append / session.messages).
- Altera a interfaceDesenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).
- Adiciona comandos/ferramentasRegistra novos comandos de barra ou ferramentas que você ou o Claude podem acionar ($.command.register / $.tool.register).
- Armazena dadosGuarda dados entre sessões no armazenamento privado do plugin ($.store.*).
- testado com
- v2.1.310
- último teste
- requer
- Claude Code ≥ 2.1.287
- superfícies
- painel, status, notificação, transcrição
- código-fonte
- Tzafrir Rehan (tzafrir) (MIT)
Instale dentro do Claude Code:
/plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loopO que este mod faz?
Human in the loop é um mod da comunidade de Tzafrir Rehan (tzafrir), um mod Claude Code human in the loop para uma situação específica: o Claude precisa de algo que só você pode fazer, como colocar uma chave no .env, uma aprovação em staging, um comando na sua própria máquina ou uma decisão. Normalmente ele diz isso no meio de uma resposta, e o pedido se perde ao rolar a tela. Com este mod, o Claude atribui o pedido como uma tarefa.
O mod registra três ferramentas, assign_task, list_tasks e withdraw_task, e acrescenta algumas linhas ao prompt do sistema que dizem ao Claude para usar assign_task em tudo o que só você pode fazer, inclusive revisões do trabalho dele. Uma tarefa tem um título, um motivo de uma frase, um "done when" opcional e um tipo: do (você faz e marca como concluída), answer (o Claude precisa das suas palavras) ou choose (escolher uma de 2 a 4 opções). As tarefas abertas esperam em um painel My tasks e são contadas na linha de status sob o prompt, como ☐ 1 task for you · /my-tasks. Você pode responder com Done, uma opção, uma resposta ou uma recusa com motivo.
As tarefas não bloqueiam o Claude. Ele segue com outro trabalho, e sua resposta chega como mensagem quando você a dá. Limites segundo o código: no máximo 5 tarefas abertas, o mesmo pedido duas vezes é uma só tarefa e só o agente principal pode atribuí-las.
Demonstração
A gravação inicia o Claude Code com o mod carregado no pequeno projeto de demonstração e pede ao Claude que use assign_task para nos dar uma tarefa: colocar STRIPE_KEY no .env. O Claude chama a ferramenta, e a transcrição mostra uma linha amarela ☐ Assigned you a task: Put your STRIPE_KEY in the .env file, seguida do resultado da ferramenta, que informa que é a tarefa #1 e que há 1 de 5 tarefas abertas. Sob o prompt, a linha de status mostra ☐ 1 task for you · /my-tasks, e à direita do rodapé aparece um toast: human-in-the-loop: Claude assigned you a task: Put your STRIPE_KEY in the .env file. See /my-tasks. Nesta gravação estreita o painel não abriu sozinho, e é para isso que o toast serve; por isso o vídeo não mostra o painel nem a resposta a uma tarefa.
Instalação
Use qualquer um dos métodos do bloco de instalação; eles instalam direto do marketplace do próprio autor. Após instalar, inicie uma nova sessão ou execute /reload-plugins. /my-tasks abre o painel.
$ install human-in-the-loop
Requer Claude Code ≥ 2.1.287
Instala a partir do marketplace do autor: tzafrir/human-in-the-loop
1.Uma linha, dentro do Claude Code
/plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loopCole em uma sessão em andamento (v2.1.275+). O Claude Code pede primeiro para adicionar o marketplace.
2.Pelo seu shell
claude plugin marketplace add tzafrir/human-in-the-loop claude plugin install human-in-the-loop@human-in-the-loopDepois execute /reload-plugins em qualquer sessão que já esteja aberta.
3.Experimente sem instalar
git clone https://github.com/tzafrir/human-in-the-loop claude --plugin-dir ./human-in-the-loopCarrega o mod só para uma sessão. Nada é adicionado às suas configurações.
Como funciona
hooks/register.tsx é o único módulo de hooks. O tratador de assign_task valida os argumentos, recusa duplicatas e uma sexta tarefa aberta, guarda a tarefa e abre o painel. 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) }
})As tarefas ficam em $.state e em uma chave de $.store por sessão, sob a pasta do projeto, escrita por um batimento de 60 segundos, para que a próxima sessão possa assumir as tarefas de uma sessão encerrada ou inativa. Suas respostas saem com $.prompt.submit quando o Claude está ocioso, ou são anexadas como linha com $.session.append enquanto ele trabalha. Um hook prompt.compose adiciona o texto de orientação, e um hook prompt.context lista as tarefas abertas no início e após uma compactação.
Personalize
Não há opções. Você controla o mod com os botões e teclas do painel: d para Done, 1 a 4 para opções, r para responder, x para recusar, e Save for later ou Send now para o momento do envio. Respostas longas passam pela sua própria caixa de prompt: Long answer… a começa com ↳ Answer to #3:. Para mudar os limites, as constantes MAX_OPEN e MAX_TITLE estão em hooks/tasks.ts e BATCH_MS em hooks/register.tsx.
Permissões e segurança
Lemos todos os arquivos que o plugin carrega antes de executar qualquer coisa: .claude-plugin/plugin.json, hooks/hooks.json, hooks/register.tsx, pane.ts, project.ts, tasks.ts, text.ts, as declarações de tipos e os testes. Não há package.json, script de instalação, código empacotado ou minificado, nem binário além de imagens PNG e GIF. Há um arquivo LICENSE (MIT).
- Rede, processos, arquivos, ambiente: nenhum. Uma busca nos hooks não encontrou
fetch,child_process,$.process,$.http,evalnemimport()dinâmico. O único armazenamento é$.storee$.state, com o modelo de dados descrito emdocs/privacy.md. Sem telemetria; a política de privacidade do autor diz que nada sai da sua máquina. - Daemons: nenhum; o batimento de
$.clock.everysó roda enquanto a sessão dura. - Influência sobre o modelo: esta é a parte notável. O mod adiciona três ferramentas, uma seção de três linhas no fim do prompt do sistema (
STEERING), um bloco de contextohumanInTheLoopcom as tarefas abertas e um resumo de atualizações de tarefas que acompanha seu próximo prompt. Ele também deixa as três ferramentas sempre visíveis em vez de adiadas. O texto é simples e confere com o README; não encontramos caracteres ocultos nem de largura zero no código ou no manifesto (apenas em strings de teste com emojis). - Hooks de controle: os hooks
tool.callrespondem apenas às três ferramentas do próprio mod, eprompt.submitlê seu prompt para reconhecer uma resposta longa (↳ Answer to #N:) e anexar as respostas ainda não enviadas. Uma resposta que parece um segredo é descartada com um aviso em vez de enviada. Qualquer outra chamada de ferramenta passa sem alteração. Ovalidateobserva que esses hooks não têm.catch. - Prompts que ele envia: suas respostas às tarefas com suas palavras e uma linha fixa:
I answered a task while you were finishing your reply; my answer is above. - Requisitos: os function hooks precisam estar ativados no Claude Code (o README os chama de acesso antecipado). Sem binário externo nem conta.
O claude plugin validate passou sem erros e sem avisos, e os testes do autor passaram no Claude Code 2.1.310: 192 aprovados, 0 reprovados.
- Intercepta chamadas de ferramentas
- Vê cada chamada de ferramenta que o Claude faz (tool.call / tool.check) e pode bloqueá-la ou alterá-la.
- Lê seus prompts
- Pode ver o que você digita e a transcrição da conversa (prompt.* / session.append / session.messages).
- Altera a interface
- Desenha na interface do Claude Code: faixas, painéis, texto de status, notificações (ui.render / $.ui.*).
- Adiciona comandos/ferramentas
- Registra novos comandos de barra ou ferramentas que você ou o Claude podem acionar ($.command.register / $.tool.register).
- Armazena dados
- Guarda dados entre sessões no armazenamento privado do plugin ($.store.*).
Compatibilidade e solução de problemas
Verificado com o Claude Code 2.1.310 no macOS (validate, testes e gravação). Se nada acontecer:
- Os function hooks estão ativados e o plugin aparece carregado em
/plugin. - Você iniciou uma nova sessão ou executou
/reload-pluginsapós instalar. - O Claude só atribui uma tarefa quando o prompt do sistema traz o texto de orientação; ele não é adicionado no modo
-p(print) nem no modo bare. - Em um terminal estreito o painel não abre sem ser pedido. Execute
/my-taskse clique ou pressionectrl+x tabpara usar as teclas. - O app móvel não desenha campo de resposta, então lá só há Done, opções e um Reject imediato.
Perguntas frequentes
- Como uma tarefa difere do AskUserQuestion?
- O AskUserQuestion bloqueia o Claude até você responder. Uma tarefa não: o Claude continua trabalhando enquanto ela espera, e sua resposta chega a ele como uma mensagem quando você a dá. A descrição da ferramenta diz ao Claude para usar tarefas no que ele precisar em algum momento da sessão.
- Quando o Claude recebe minha resposta?
- Na hora, se o Claude estiver ocioso. Se estiver trabalhando, a resposta é salva e sai quando o turno termina; se ainda houver tarefa aberta, sai junto com suas outras respostas quando não restar nenhuma. O botão Send now envia na hora, e seu próximo prompt também a leva.
- As tarefas sobrevivem a /clear, a uma nova sessão ou a uma compactação?
- Sim. As tarefas abertas ficam no armazenamento próprio do plugin, por pasta de projeto, e a próxima sessão nessa pasta as assume. O Claude é avisado delas de novo no início de uma conversa e após uma compactação.
- E se eu responder com um segredo?
- Uma resposta que parece uma chave, um token ou uma chave privada é retida com um aviso e só é enviada se você pressionar Send anyway. A descrição da ferramenta pede ao Claude que faça você colocar o segredo onde ele deve ficar e pressionar Done, em vez de colá-lo.
- Ele envia algo pela rede?
- Não. Não encontramos chamadas de rede, de processos nem do sistema de arquivos no código. Ele guarda as tarefas com $.store e envia suas respostas ao Claude apenas como prompts, com suas próprias palavras.
# Mods relacionados
DestaqueAviso de conclusão
Um toast "Done in 2m 14s" e um som curto quando um turno longo do Claude termina, com notificação opcional no desktop.
- notificação
- Executa comandos
- Altera a interface
- Reproduz som
testado com v2.1.310
DestaqueNext Steps
Dois ou três prompts prováveis acima da entrada depois de cada turno. Pressione 1, 2 ou 3 para criar um rascunho.
- acima do prompt
- Chama o modelo (usa sua cota)
- Lê seus prompts
- Altera a interface
testado com v2.1.291
Mais em Timers, tarefas e standups, Ferramentas que você adiciona ao Claude.