當 Claude Code 需要你在幾個選項中做選擇時,它會呼叫名為 AskUserQuestion 的工具並等待你選擇。比對 AskUserQuestion 的 PreToolUse hook 可以代替你回答,方法是回傳該問題並填入 answers 欄位。從手機回答 Claude Code 問題的原理就是這樣:hook 把問題和選項傳到手機,等你選擇後再交回去。Claude Code Notifier 透過 ccn 工具與手機 app,在 Mac、Windows 和 Linux 上實現這件事。
01AskUserQuestion 是什麼
有時 Claude 會遇到不該自己決定的岔路。要用哪個框架?保留舊 API 還是移除?該修測試還是修程式碼?與其亂猜,它會提出一個簡短的選擇題。在 terminal 中你會看到問題和幾個附說明的選項,用鍵盤選一個即可。
和其他工具呼叫一樣,AskUserQuestion 會先經過 Claude Code 的 hook。這正是遠端回答切入的地方。
問題和權限 prompt 不同。權限 prompt 是針對單一操作問「是或否」,由 PermissionRequest hook 回應(請參閱從手機核准 Claude Code 的權限請求)。問題則是要你做選擇,答案是一個選項標籤,而不是「是」。
02hook 如何提供答案
PreToolUse hook 會從標準輸入接收 JSON 格式的工具輸入。以 AskUserQuestion 來說,輸入中包含 questions 陣列。每個問題都有 question(問題文字)、header(簡短標籤)、options(每個都有 label 和 description)以及 multiSelect。
對這個工具來說,只回傳 "allow" 是不夠的,因為答案總得有個來源。Anthropic 的 hooks 參考文件指出,hook 必須在 updatedInput 中原樣回傳 questions,並加上 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 中。
註冊 hook
{
"hooks": {
"PreToolUse": [
{
"matcher": "AskUserQuestion",
"hooks": [
{ "type": "command", "command": "/path/to/your-answer-script" }
]
}
]
}
}
將以下內容加入 ~/.claude/settings.json,即可套用到所有專案。各個 hook 事件及其適用情境,請參閱 Claude Code hooks 詳解。
關於非互動式執行
Anthropic 的文件指出,在 claude -p 執行中,只有當該次執行有可接收 prompt 的權限 host(例如 Agent SDK 的 canUseTool callback)時,才會提供 AskUserQuestion。在單純的腳本執行中,Claude 可能根本不會發問。本指南談的是互動式 session。
03怎樣才算好的手機回答體驗
JSON 是簡單的部分。設計上要考慮的問題和權限 prompt 相同:
- 顯示完整問題。header、問題本身和每個選項的說明都很重要。在鎖定畫面上只看到標籤(「選項 B」)根本沒幫助。
- 保持 terminal 可用。如果你人就在電腦前,應該能直接在那裡回答,而不是等一個正在等你手機的 hook。
- 乾淨地放棄。如果沒收到答案,hook 應在逾時前什麼都不回傳,讓 terminal 的 prompt 出現。
- 文字要完全一致。
answers的鍵必須是 Claude 原本寫的問題文字,值則必須是選項標籤。
04使用 Claude Code Notifier
Claude Code Notifier 是 TouchTap Ltd 開發的獨立工具,並非 Anthropic 出品。它的命令列工具 ccn 除了其他 hook 之外,也會在 AskUserQuestion 上安裝 PreToolUse hook。當 Claude 發問而你不在電腦前時,手機會顯示問題和選項。點選其中一個,hook 就會提供答案,Claude 便繼續工作。
在 Mac 或 Linux 上安裝:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
或在 Windows 的 PowerShell 中安裝(beta):
irm https://claudecodenotifier.com/install.ps1 | iex
接著掃描 QR code 或輸入 app 上的 6 位數代碼來配對手機。將手機連接到 Claude Code 會逐一說明各作業系統的步驟。
依你是否在場決定在哪裡回答
ccn 對問題採用和權限相同的在場判斷規則。如果你在過去 30 秒內有打字,terminal 會照常發問,手機最多只收到一則通知。如果你不在,terminal 會等待手機回應,最長到你設定的上限(hold_ceiling_seconds,30 到 3600,預設 600),而且只要你一碰鍵盤就會停止等待。
選擇哪些內容要傳到手機
提問有自己的設定 notify_on_question,與 notify_on_permission 和 notify_on_done 分開,所以可以保留某一類、關閉另一類。ccn config show 會列出目前生效的設定,大部分設定也能在手機 App 上針對個別電腦調整。
勿擾時段同樣適用,例如 ccn config set quiet_hours 22:00-08:00。請參閱勿擾時段與勿擾模式。
即使沒有配對手機,Claude 提問時 ccn 仍會在電腦上顯示免費的桌面通知,提醒你回來處理。要從手機回答則需要 App,App 可免費下載,但需訂閱或買斷才能使用。請參閱價格方案。
05提問、後續指示與完成
提問是 Claude 等你回應的三種時刻之一,另外兩種是權限 prompt 和一輪回合結束。Claude 一完成,Claude Code Notifier 也讓你從手機送出下一個指示,由 Stop hook 交回給 Claude 作為下一步指示。這三者涵蓋了長時間任務卡住等待的大多數情況。讓 Claude Code 持續執行,你可以放心離開會把它們整合成一套流程。
06常見問題
可以輸入自由文字回答,而不是選擇選項嗎?
官方文件記載的 hook 做法是透過 answers 欄位以選項標籤作答。在 Claude Code Notifier 中,你是在手機上從選項中挑選。如果沒有合適的選項,可以留到 terminal 回答,或等 Claude 完成後再用後續指示引導它。
為什麼我的 PreToolUse hook 回傳「allow」卻沒有回答問題?
因為 AskUserQuestion 需要的是答案,而不只是權限。請如上所示,回傳包含原始 questions 與 answers 物件的 updatedInput。
如果 Claude 一次問好幾個問題呢?
questions 陣列可以包含多個問題。answers 物件必須為每個問題各提供一筆項目,並以問題的完整原文作為 key。
在 VS Code、Cursor 或 JetBrains 中也能用嗎?
這個 hook 屬於 Claude Code,而不是 terminal,所以在 IDE 內建的 terminal 中也會觸發。請參閱在 VS Code、Cursor 與 JetBrains terminal 中接收 Claude Code 通知。