コンテンツにスキップ

ユーザーへの確認を受け止める

tier 3(必要になったら)確認 1 か月前(2026年8月23日)

どこまで来たら使えたと言えるか

面: 両方で同じ

段達成したと言える状態
1. 触るcanUseTool コールバックを実装し、未解決のツール呼び出しで実際に呼ばれることを確認した
2. 入れる許可・拒否のレスポンスを正しい形で返し、拒否時の message が次の行動に効いていることを確認した
3. 効かせるAskUserQuestion の扱いと updatedPermissions によるルール保存を含めて、承認フローを自分のアプリに載せられる

何のためのものか

Claude がツール使用許可や作業方針の確認を必要とする場合に、canUseTool コールバックを通じてユーザーとやり取りする機能。SDK でアプリを作るなら、承認 UI はここに繋ぐ。

触る

発火条件を確かめる。

状況発火するか
allow ルール・パーミッションモードで自動承認済みしない
パーミッションフローで未解決のツール呼び出しする
AskUserQuestion ツール呼び出しする
dontAsk モードしない(拒否される)

コールバックは戻り値を返すまで実行を一時停止する。 SDK はクエリがキャンセルされるまで待ち続ける。

入れる

レスポンスの形を守る。

種別PythonTypeScript
許可PermissionResultAllow(updated_input=input_data){ behavior: "allow", updatedInput: input }
拒否PermissionResultDeny(message="理由"){ behavior: "deny", message: "理由" }
  • 許可時に updated_input / updatedInput を省略しない。 Claude Code v2.1.207 以前では拒否扱いになる
  • 拒否時の message は Claude に渡され、次の行動の判断に使われる。 「なぜ駄目か」と「代わりに何ならよいか」を書く

引数から何が読めるかも押さえる。Bash なら command / description / timeout、Write なら file_path / content、Edit なら file_path / old_string / new_string。

効かせる

  • 同じ確認を繰り返さない。 updatedPermissions / updated_permissions に suggestions の要素を返すと、次回以降の同パターン呼び出しを承認するルールを保存できる。destination == "localSettings" の提案を返すと .claude/settings.local.json に書き込まれる
  • AskUserQuestion は方針の確認。 toolName == "AskUserQuestion" で識別して、選択肢を出す UI に繋ぐ
  • プロセスを終了して後で再開したいなら defer フックデシジョンを返す

落とし穴

  • ツールを絞っているなら AskUserQuestion を明示的に含める。 読み取り専用エージェントで tools を列挙していると、確認そのものができなくなる
  • dontAsk モードではコールバックが呼ばれない。 承認フローを前提にした実装がそのまま無効になる
  • Python で updatedPermissions を使うなら claude-agent-sdk 0.1.80 以降が要る

根拠と前後

このページが書ける範囲は、根拠にした facts に書かれていることだけです。 仕様そのものはそちらを読んでください。