セッションフック
hooks を使うと、Copilot セッションの各ライフサイクルで処理を差し込めます。ツール実行制御、監査ログ、プロンプト補強、エラーハンドリングなどを、コア実装を変更せずに追加できます。
フックの流れ
基本的な使い方
利用可能なフック
null を返すとデフォルト動作が継続されます。
代表的なユースケース
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)
PreToolUseHookInput
PreToolUseHookOutput
PostToolUseHookInput
PostToolUseHookOutput
UserPromptSubmittedHookInput
UserPromptSubmittedHookOutput
SessionStartHookInput
SessionStartHookOutput
SessionEndHookInput
SessionEndHookOutput
ErrorOccurredHookInput
ErrorOccurredHookOutput
ToolResultObject
ツール実行結果の標準オブジェクトです。ベストプラクティス
- 重い同期処理はフック内で直接実行しすぎない。必要なら非同期化する。
- 変更不要なときは
nullを返してデフォルト動作に任せる。 permissionDecisionは可能な限り明示する。- クリティカルエラーは抑制しすぎず、ログ/通知経路を持つ。
- セッション単位の状態は session id ベースで管理し、
onSessionEndで掃除する。
最新情報は GitHub リポジトリ を参照してください。