Human in the loop:あなたにしかできない作業を見失わない Claude Code ヒューマンインザループ Mod
あなたにしかできない作業を Claude がタスクとして割り当て、My tasks ペインに溜めて、プロンプトの下に件数を表示します。
権限
- ツール呼び出しを傍受Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- プロンプトを読み取る入力内容と会話のトランスクリプトを参照できます(prompt.* / session.append / session.messages)。
- UI を変更Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
- コマンド・ツールを追加あなたや Claude が呼び出せる新しいスラッシュコマンドやツールを登録します($.command.register / $.tool.register)。
- データを保存プラグイン専用のストアにセッションをまたいでデータを保持します($.store.*)。
- 検証バージョン
- v2.1.310
- 最終検証日
- 必要バージョン
- Claude Code ≥ 2.1.287
- 表示先
- ペイン、ステータス、トースト、トランスクリプト
Claude Code 内でインストール:
/plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loopこのModでできること
Human in the loop は Tzafrir Rehan(tzafrir)によるコミュニティ Mod で、Claude Code ヒューマンインザループを実現します。想定する場面は、Claude があなたにしかできないこと(.env へのキーの設定、ステージングでの承認、あなたのマシンでのコマンド実行、判断など)を必要とするときです。普通は返信の途中で一言触れるだけで、その依頼はすぐ流れてしまいます。この Mod があると、Claude は依頼をタスクとして割り当てます。
Mod は assign_task、list_tasks、withdraw_task の 3 つのツールを登録し、あなたにしかできないこと(作業のレビューを含む)には assign_task を使うよう、システムプロンプトに数行を加えます。タスクにはタイトル、1 文の理由、任意の「完了条件」、種類があります。種類は do(あなたがやって完了にする)、answer(Claude があなたの言葉を必要とする)、choose(2〜4 個の選択肢から選ぶ)です。未完了のタスクは My tasks ペインで待ち、プロンプト下のステータス行に ☐ 1 task for you · /my-tasks のように件数が出ます。完了、選択肢、回答、理由付きの却下で応答できます。
タスクは Claude を止めません。Claude は別の作業を続け、あなたの応答は返したときにメッセージとして届きます。コード上の制限は、未完了は最大 5 件、同じ依頼は 1 件にまとめられ、タスクを割り当てられるのはメインエージェントだけです。
デモ
録画では、小さなデモプロジェクトで Mod を読み込んだ Claude Code を起動し、assign_task で .env に STRIPE_KEY を設定するタスクを 1 つ割り当てるよう Claude に頼みます。Claude がツールを呼ぶと、トランスクリプトに黄色の ☐ Assigned you a task: Put your STRIPE_KEY in the .env file の行が表示され、続いてタスクが #1 で未完了は 5 件中 1 件であるというツール結果が出ます。プロンプト下のステータス行は ☐ 1 task for you · /my-tasks となり、フッター右側にはトースト human-in-the-loop: Claude assigned you a task: Put your STRIPE_KEY in the .env file. See /my-tasks が出ます。この幅の狭い録画ではペインは自動で開かず(トーストはそのためのものです)、ペインやタスクへの回答は映っていません。
インストール
インストール欄のどの方法でも、作者自身のマーケットプレイスから直接インストールされます。インストール後は新しいセッションを始めるか、/reload-plugins を実行してください。/my-tasks でペインが開きます。
$ install human-in-the-loop
Claude Code 2.1.287 以上が必要
作者のマーケットプレイスからインストール: tzafrir/human-in-the-loop
1.Claude Code 内で1行
/plugin install human-in-the-loop --marketplace tzafrir/human-in-the-loop実行中のセッション(v2.1.275 以降)に貼り付けます。最初に Claude Code がマーケットプレイスの追加を確認します。
2.シェルから
claude plugin marketplace add tzafrir/human-in-the-loop claude plugin install human-in-the-loop@human-in-the-loopその後、すでに開いているセッションでは /reload-plugins を実行してください。
3.インストールせずに試す
git clone https://github.com/tzafrir/human-in-the-loop claude --plugin-dir ./human-in-the-loopその1セッションだけ Mod を読み込みます。設定には何も追加されません。
仕組み
フックのモジュールは hooks/register.tsx だけです。assign_task のハンドラーは引数を検査し、重複と 6 件目の未完了タスクを拒否し、タスクを保存してペインを開きます。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) }
})タスクは $.state と、プロジェクトフォルダ配下のセッションごとの $.store キーに保存されます。書き込みは 60 秒間隔のハートビートで行われ、終了したセッションや応答のないセッションのタスクを次のセッションが引き継げるようにしています。応答は、Claude がアイドルなら $.prompt.submit で、作業中なら $.session.append で行として追加されます。prompt.compose フックが誘導の文章を加え、prompt.context フックが会話の開始時とコンパクション後に未完了タスクを一覧にします。
カスタマイズ
オプションはありません。ペインのボタンとキーで操作します。d で完了、1〜4 で選択肢、r で回答、x で却下、送信のタイミングは Save for later と Send now です。長い回答は自分のプロンプト欄から入力し、Long answer… が ↳ Answer to #3: で始まる状態にしてくれます。上限を変えるには、MAX_OPEN と MAX_TITLE が hooks/tasks.ts に、BATCH_MS が hooks/register.tsx にあります。
権限と安全性
何かを実行する前に、プラグインが読み込むすべてのファイルを読みました。.claude-plugin/plugin.json、hooks/hooks.json、hooks/register.tsx、pane.ts、project.ts、tasks.ts、text.ts、型宣言、テストです。package.json、インストールスクリプト、バンドル済みまたは minify 済みのコードはなく、PNG と GIF の画像以外のバイナリもありません。LICENSE ファイル(MIT)があります。
- ネットワーク、プロセス、ファイル、環境変数: いずれもなし。フック内で
fetch、child_process、$.process、$.http、eval、動的import()は見つかりませんでした。保存先は$.storeと$.stateだけで、データモデルはdocs/privacy.mdに書かれています。テレメトリーはなく、作者のプライバシーポリシーはデータがマシンの外に出ないと述べています。 - デーモン: なし。
$.clock.everyのハートビートはセッションが動いている間だけ動きます。 - モデルへの影響: ここが注目点です。Mod は 3 つのツール、システムプロンプト末尾の 3 行(
STEERING)、未完了タスクを並べたhumanInTheLoopコンテキストブロック、次のプロンプトに付くタスク更新のダイジェストを加えます。また 3 つのツールを遅延ではなく常に表示します。文章は平易で README と一致しており、コードとマニフェストに隠し文字やゼロ幅文字は見つかりませんでした(絵文字のテスト文字列にあるのみ)。 - ゲートするフック:
tool.callフックは Mod 自身の 3 つのツールにだけ応答します。prompt.submitはプロンプトを読み、長い回答(↳ Answer to #N:)を認識し、未送信の応答を添付します。秘密情報に見える回答は送信されず通知が出ます。ほかのツール呼び出しはそのまま通ります。validateは、これらのフックに.catchがないと注記しています。 - 送信するプロンプト: あなたの言葉でのタスクへの応答と、固定の 1 行
I answered a task while you were finishing your reply; my answer is above.のみです。 - 要件: Claude Code で function hooks が有効であること(README は先行公開機能としています)。外部バイナリやアカウントは不要です。
claude plugin validate はエラー・警告なしで通り、作者のテストも Claude Code 2.1.310 で全件通りました(192 件成功、0 件失敗)。
- ツール呼び出しを傍受
- Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- プロンプトを読み取る
- 入力内容と会話のトランスクリプトを参照できます(prompt.* / session.append / session.messages)。
- UI を変更
- Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
- コマンド・ツールを追加
- あなたや Claude が呼び出せる新しいスラッシュコマンドやツールを登録します($.command.register / $.tool.register)。
- データを保存
- プラグイン専用のストアにセッションをまたいでデータを保持します($.store.*)。
互換性とトラブルシューティング
macOS 上の Claude Code 2.1.310 で確認しました(validate、テスト、録画)。何も起きない場合:
- function hooks が有効で、
/pluginでプラグインが読み込まれている。 - インストール後に新しいセッションを始めるか
/reload-pluginsを実行した。 - Claude がタスクを割り当てるのは、システムプロンプトに誘導の文章があるときだけです。
-p(print)や bare モードでは追加されません。 - 幅の狭いターミナルでは、ペインは勝手に開きません。
/my-tasksを実行し、クリックするかctrl+x tabでキー操作に切り替えます。 - モバイルアプリには回答欄がないため、完了、選択肢、即時の却下だけが使えます。
よくある質問
- タスクは AskUserQuestion と何が違いますか?
- AskUserQuestion は答えるまで Claude を止めます。タスクは止めません。待っている間も Claude は作業を続け、あなたの応答は、返したときにメッセージとして Claude に届きます。ツールの説明は、セッション中のどこかで必要になるものにはタスクを使うよう Claude に伝えています。
- Claude はいつ回答を受け取りますか?
- Claude がアイドルなら、すぐに届きます。作業中なら回答は保存され、ターンの終了時に送られます。未完了のタスクが残っている場合は、すべて片付いた時点でほかの回答とまとめて届きます。「Send now」で即時送信でき、次に入力するプロンプトにも同梱されます。
- /clear、新しいセッション、コンパクション後もタスクは残りますか?
- 残ります。未完了のタスクはプラグイン自身のストアにプロジェクトフォルダごとに保存され、そのフォルダの次のセッションが引き継ぎます。会話の開始時とコンパクション後に、Claude は再度それを知らされます。
- 秘密情報を答えに書いたらどうなりますか?
- キー、トークン、秘密鍵に見える回答は警告とともに保留され、「Send anyway」を押さない限り送信されません。ツールの説明は、秘密情報は貼り付けず、置くべき場所に置いて Done を押すよう Claude からユーザーに頼むことを求めています。
- ネットワークに何か送信しますか?
- いいえ。コード内にネットワーク、プロセス、ファイルシステムの呼び出しは見つかりませんでした。タスクは $.store に保存され、あなたの応答はあなた自身の言葉としてプロンプトで Claude に送られるだけです。
# 関連する Mod
おすすめ完了トースト
Claude の長いターンが終わると「Done in 2m 14s」のトーストと短いチャイムでお知らせ。デスクトップ通知にも対応します。
- トースト
- コマンドを実行
- UI を変更
- 音を再生
v2.1.310 で検証済み
おすすめNext Steps
各ターンの後、Claude Code の入力欄の上に次に送りそうなプロンプトを 2〜3 件表示します。1、2、3 で下書き入力。
- プロンプト上部
- モデルを呼び出す(利用枠を消費)
- プロンプトを読み取る
- UI を変更
v2.1.291 で検証済み
同じカテゴリの Mod: タイマー、ToDo、スタンドアップ、Claude に追加するツール。