Skip to main content

セッションフック

hooks を使うと、Copilot セッションの各ライフサイクルで処理を差し込めます。
ツール実行制御、監査ログ、プロンプト補強、エラーハンドリングなどを、コア実装を変更せずに追加できます。 これはカスタムエージェント定義内の宣言型 hooks や、ファイルベースフック読み込みとは別の機能です。エージェント単位の設定はカスタムエージェントを参照してください。

ファイルベースフックの検出

hookDirectories には、ファイルベースフックを検出する明示的なルートを指定できます。 これは検出専用で、エージェントに一般的なファイルアクセス権限を付与しません。 enableConfigDiscovery や enableFileHooks が無効でも明示ルートは利用できます。 相対パスは、指定時の有効な workingDirectory を基準に一度だけ解決されます。
  • 省略または null:他の検出元を変更しません
  • []:明示したSDKルートだけをクリアします
フックのソース無効化設定や Managed Settings は引き続き適用されます。 enableFileHooks はリポジトリ由来のファイルフック(.github/hooks/ や信頼されたリポジトリ設定のルート)を制御します。 明示的な hookDirectories やPHPコールバックの hooks は無効化しません。

フックの流れ

基本的な使い方

利用可能なフック

null を返すとデフォルト動作が継続されます。

プロンプトのブロック

onUserPromptSubmitted は decision: 'block' を返してプロンプトを拒否できます。 拒否された場合、モデルターンは開始されず、ユーザーメッセージも記録されません。 reason を指定すると、その内容が warningType: "policy_blocked" の一時的な session.warning イベントに含まれます。

代表的なユースケース

1) Permission control(実行制御)

  • onPreToolUse で許可ツールを allow-list 方式にする
  • 破壊的操作は permissionDecision: 'ask' で人間承認
  • permissionDecisionReason で拒否理由を明示
  • toolName の候補は Tools の一覧で確認する(例: view, glob, bash)

2) Auditing / compliance(監査)

  • ライフサイクルフックを組み合わせて監査イベントを収集
  • 収集データはセッションID単位で永続化

3) Prompt enrichment(入力補強)

  • onSessionStart でプロジェクト情報(言語、FW、規約)を additionalContext に追加
  • onUserPromptSubmitted でショートカット(/fix, /test)を展開

4) Result filtering(結果整形)

  • onPostToolUse で API key / token / password などをマスク
  • 長すぎる結果は要約化し、必要時のみ詳細を返す

5) Error recovery(障害復旧)

  • onErrorOccurred で model_call かつ recoverable=true のときだけ retry
  • 非回復系は userNotification で利用者向けに簡潔に通知

6) Session metrics(計測)

  • onSessionStart で開始時刻を記録
  • onPreToolUse / onUserPromptSubmitted でカウンタ更新
  • onSessionEnd で所要時間・ツール回数・終了理由を出力

Hook input / output 型

共通入力(BaseHookInput)

agentId / agentType / parentAgentId は、サブエージェントがアクターとなるフックで利用できます。 ルートエージェントのフックには含まれません。 古いランタイムでは情報がない場合にフィールド自体が省略されます。 そのため、いずれも null になることがあります。

PreToolUseHookInput

PreToolUseHookOutput

PostToolUseHookInput

PostToolUseHookOutput

UserPromptSubmittedHookInput

UserPromptSubmittedHookOutput

SessionStartHookInput

SessionStartHookOutput

SessionEndHookInput

SessionEndHookOutput

ErrorOccurredHookInput

ErrorOccurredHookOutput

ToolResultObject

ツール実行結果の標準オブジェクトです。

ベストプラクティス

  1. 重い同期処理はフック内で直接実行しすぎない。必要なら非同期化する。
  2. 変更不要なときは null を返してデフォルト動作に任せる。
  3. permissionDecision は可能な限り明示する。
  4. クリティカルエラーは抑制しすぎず、ログ/通知経路を持つ。
  5. セッション単位の状態は session id ベースで管理し、onSessionEnd で掃除する。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年10月19日