Claude Code が選択肢から選んでほしいとき、AskUserQuestion というツールを呼び出して回答を待ちます。AskUserQuestion にマッチする PreToolUse hook は、answers フィールドを埋めた質問を返すことで、あなたの代わりに回答できます。これがスマートフォンから Claude Code の質問に答える仕組みです。hook が質問と選択肢をスマートフォンに送り、選択を待って結果を返します。Claude Code Notifier は、ccn ツールとスマートフォンアプリによって、これを Mac、Windows、Linux で実現します。
01AskUserQuestion とは
Claude は、自分だけで決めるべきでない分岐点に出くわすことがあります。どのフレームワークを使うか、古い API を残すか削除するか、テストを直すかコードを直すか。推測する代わりに、短い選択式の質問をします。terminal には質問と、説明付きのいくつかの選択肢が表示され、キーボードで1つを選びます。
他のツール呼び出しと同様、AskUserQuestion もまず Claude Code の hook を通過します。ここがリモートで回答するための入り口になります。
質問は許可プロンプトとは異なります。許可プロンプトは1つの操作についてはい/いいえを尋ねるもので、PermissionRequest hook が応答します(Claude Code の許可リクエストをスマートフォンから承認するを参照)。質問は選択を求めるもので、回答は「はい」ではなくラベルです。
02hook が回答を返す仕組み
PreToolUse hook は、ツールの入力を JSON として標準入力で受け取ります。AskUserQuestion の場合、入力には questions 配列が含まれます。各質問には question(本文)、header(短いラベル)、options(それぞれ label と description を持つ)、multiSelect があります。
このツールでは "allow" を返すだけでは不十分です。回答をどこかから渡す必要があるためです。Anthropic の hooks リファレンスによると、hook は questions を updatedInput にそのまま返し、各質問の本文を選んだラベルに対応付ける answers オブジェクトを追加する必要があります。
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"updatedInput": {
"questions": [
{
"question": "Which framework?",
"header": "Framework",
"options": [
{ "label": "React", "description": "Component library" },
{ "label": "Vue", "description": "Progressive framework" }
],
"multiSelect": false
}
],
"answers": { "Which framework?": "React" }
}
}
}
複数選択の質問では、選んだラベルをカンマ区切りでつなげます。hook が何も出力しなければ、質問は通常どおり terminal に表示されます。
登録する
{
"hooks": {
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{ "type": "command", "command": "/path/to/your-answer-script" }
]
}
]
}
}
すべてのプロジェクトに適用するには、これを ~/.claude/settings.json に記述します。各 hook イベントとその用途については Claude Code の hook 解説をご覧ください。
非対話実行についての注意
Anthropic のドキュメントによると、claude -p での実行では、Agent SDK の canUseTool コールバックのようにプロンプトを受け取る permission host がある場合にのみ AskUserQuestion が提供されます。単純なスクリプト実行では、Claude は質問をしないこともあります。このガイドは対話セッションを対象としています。
03スマートフォンでの回答をうまく設計するには
JSON の部分は簡単です。設計上の課題は許可プロンプトの場合と同じです。
- 質問全体を表示する。ヘッダー、質問文、各選択肢の説明はどれも重要です。ロック画面にラベル(「Option B」)だけが出ても役に立ちません。
- terminal を使える状態に保つ。コンピューターの前にいるなら、スマートフォンを待っている hook に足止めされず、その場で回答できるべきです。
- きれいに諦める。回答が来なければ、hook はタイムアウト前に何も返さずに終了し、terminal のプロンプトが表示されるようにします。
- テキストを正確に一致させる。
answersのキーは Claude が書いたとおりの質問文、値は選択肢のラベルでなければなりません。
04Claude Code Notifier を使う
Claude Code Notifier は TouchTap Ltd による独立したツールで、Anthropic の製品ではありません。コマンドラインツールの ccn は、他の hook とあわせて AskUserQuestion 用の PreToolUse hook をインストールします。離席中に Claude が質問すると、スマートフォンに質問と選択肢が表示されます。1つをタップすると hook が回答を渡し、Claude は作業を続けます。
Mac または Linux でのインストール:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Windows の場合は PowerShell で(ベータ版):
irm https://claudecodenotifier.com/install.ps1 | iex
次に、QR コードをスキャンするか、アプリの6桁のコードを入力してスマートフォンをペアリングします。各 OS での手順はスマートフォンを Claude Code に接続するで説明しています。
在席状況で回答場所が決まる
ccn は、質問にも許可と同じ在席ルールを使います。直近30秒以内に入力していれば、terminal で通常どおり質問され、スマートフォンには通知が届く程度です。離席中なら、terminal は設定した上限(hold_ceiling_seconds、30〜3600、デフォルト600)までスマートフォンからの回答を待ち、キーボードに触れた瞬間に待機をやめます。
スマートフォンに届く内容を選ぶ
質問には専用の設定 notify_on_question があり、notify_on_permission や notify_on_done とは別になっているため、ある種類はオンのまま別の種類だけオフにできます。ccn config show で現在有効な設定を確認でき、ほとんどの設定はスマートフォンのアプリからコンピューターごとに変更することもできます。
おやすみ時間も適用されます。例: ccn config set quiet_hours 22:00-08:00。詳しくはおやすみ時間とおやすみモードをご覧ください。
スマートフォンをペアリングしていなくても、Claude が質問すると ccn がコンピューター上に無料のデスクトップ通知を表示するので、戻るタイミングがわかります。スマートフォンから回答するにはアプリが必要です。アプリのダウンロードは無料ですが、利用にはサブスクリプションまたは買い切りの購入が必要です。料金をご覧ください。
05質問、フォローアップ、完了
質問は、Claude があなたを待つ 3 つの場面のひとつです。残りの 2 つは許可のプロンプトとターンの終了です。Claude が完了した直後には、Claude Code Notifier でスマートフォンから次の指示を送ることもでき、Stop hook がそれを次の指示として Claude に返します。これらを組み合わせれば、長いタスクが止まってしまう原因のほとんどに対応できます。Claude Code を動かしたまま席を離れるでは、これらをひとつの流れにまとめています。
06よくある質問
選択肢を選ぶ代わりに自由入力で回答できますか?
ドキュメント化されている hook の方法では、answers フィールドを通じて選択肢のラベルで回答します。Claude Code Notifier では、スマートフォン上で選択肢から選びます。合うものがない場合は、質問をターミナルで答えるか、完了後にフォローアップで Claude に指示してください。
PreToolUse hook で「allow」を返しても質問に回答されないのはなぜですか?
AskUserQuestion に必要なのは許可ではなく回答だからです。上記のとおり、元の questions と answers オブジェクトを含む updatedInput を返してください。
Claude が一度に複数の質問をした場合は?
questions 配列には複数の質問が入ることがあります。answers オブジェクトには、質問の正確なテキストをキーとして、質問ごとにエントリが必要です。
VS Code、Cursor、JetBrains でも動作しますか?
hook はターミナルではなく Claude Code の機能なので、IDE の内蔵ターミナルでも動作します。VS Code、Cursor、JetBrains のターミナルでの Claude Code 通知をご覧ください。