1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code のセッションが「作業中」か「回答待ち」かを hooks で検知する

1
Posted at

複数の Claude Code を同時に動かしていると、「どのセッションが動いていて、どれが自分の返事を待っているのか」が分からなくなります。ターミナルのタブを順番に覗くのは地味につらいです。

Claude Code の hooks を使うと、出力を解析しなくても「作業中」「許可・質問待ち」「ターン終了」を確実に検知できます。この記事では、その仕組みを最小構成で作る方法を紹介します。

方針: hook で目印ファイルを作る

画面出力(BEL など)から状態を推測すると、コマンドのログで誤検知します。そこで、Claude Code が発火する hook から空の目印ファイルを作り、それを監視する形にします。

セッションを起動するときに、環境変数 ATTN に目印ファイルのパスを渡します。

export ATTN=/tmp/attn/session-1
claude --settings "$(cat attn-settings.json)"

--settings で渡す設定は、そのセッションにだけ効きます。ユーザーの settings.json は変更しません。

使う hook

状態 hook 作る目印
作業中 UserPromptSubmit, PreToolUse .busy
許可・質問待ち PermissionRequest, Notification .ask
質問に回答した PostToolUse(AskUserQuestion) .answered
ターン終了 Stop .turn

設定ファイル

{
  "hooks": {
    "Stop": [{ "hooks": [{ "type": "command", "command": "[ -z \"$ATTN\" ] || true > \"$ATTN.turn\"" }] }],
    "PermissionRequest": [{ "hooks": [{ "type": "command", "command": "[ -z \"$ATTN\" ] || true > \"$ATTN.ask\"" }] }],
    "Notification": [{
      "matcher": "permission_prompt|elicitation_dialog|elicitation_url_dialog|agent_needs_input",
      "hooks": [{ "type": "command", "command": "[ -z \"$ATTN\" ] || true > \"$ATTN.ask\"" }]
    }],
    "PostToolUse": [{ "matcher": "AskUserQuestion", "hooks": [{ "type": "command", "command": "[ -z \"$ATTN\" ] || true > \"$ATTN.answered\"" }] }],
    "UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "[ -z \"$ATTN\" ] || true > \"$ATTN.busy\"" }] }],
    "PreToolUse": [{ "hooks": [{ "type": "command", "command": "[ -z \"$ATTN\" ] || true > \"$ATTN.busy\"" }] }]
  }
}

[ -z "$ATTN" ] || を付けておくと、ATTN が無い普通の起動では何もしません。

目印を状態に変換する

目印は作られた順番で解釈します。

  • .busy → 作業中
  • .ask → 回答待ち(作業中の表示は消さない)
  • .answered → 回答待ちを消して作業中に戻す
  • .turn → 作業中を消す

同じ時刻に複数の目印があるときは、.busy を先に処理すると、同時に起きたターン終了が残ります。

注意点

  • Notification は許可・質問の通知だけに絞ります。idle_prompt はターン終了の約 60 秒後に来るだけなので、回答待ちとは別物です。
  • Claude Code は許可・質問の通知を数秒遅らせて出します。その間に答えれば通知は出ないので、許可のダイアログ表示の瞬間を拾える PermissionRequest も併用しています。
  • 目印ファイルは、他のユーザーから見えない専用ディレクトリに置いてください。

画面に出す

目印ファイルの変化を数秒おきに(または fs.watch で)見て、セッション一覧に「作業中は点滅、回答待ちは別の色」で出すだけです。複数のプロジェクトで何本も動かしていても、止まっているセッションを放置せずに済みます。

おわりに

私はこの仕組みを、複数案件のエージェントセッションをまとめて見る個人開発のデスクトップアプリ PMDesk に組み込んでいます(筆者が開発しています)。

hooks の仕様は Claude Code のバージョンで変わる可能性があるので、利用時は公式ドキュメントで確認してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?