フック リファレンス
この記事では、VS Codeにおけるエージェントフックの設定プロパティ、および各フックイベントの入力・出力スキーマのリファレンスを提供します。フックの設定と使用方法については、エージェントフックを参照してください。
すべてのフックは、共通の入力フィールドのセットを受け取り、共通の出力フォーマットを返すことができます。各イベントセクションでドキュメント化されているフィールドは、これらの共通フィールドに追加されるものです。
フック コマンド プロパティ
各フックのエントリには、type: "command" と、少なくとも1つのコマンドプロパティが必要です
| プロパティ | タイプ | 説明 |
|---|---|---|
type |
string | "command" である必要があります |
command |
string | 実行するデフォルトのコマンド(クロスプラットフォーム) |
windows |
string | Windows固有のコマンド上書き |
linux |
string | Linux固有のコマンド上書き |
osx |
string | macOS固有のコマンド上書き |
cwd |
string | 作業ディレクトリ(リポジトリのルートからの相対パス) |
env |
object | 追加の環境変数 |
timeout |
number | タイムアウト(秒単位、デフォルト: 30) |
PreToolUse
PreToolUse フックは、エージェントがツールを呼び出す前に発火します。
PreToolUse の入力
共通フィールドに加えて、PreToolUse フックは以下を受け取ります
{
"tool_name": "editFiles",
"tool_input": { "files": ["src/main.ts"] },
"tool_use_id": "tool-123"
}
PreToolUse の出力
PreToolUse フックは、hookSpecificOutput オブジェクトを通じてツールの実行を制御できます
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "Destructive command blocked by policy",
"updatedInput": { "files": ["src/safe.ts"] },
"additionalContext": "User has read-only access to production files"
}
}
| フィールド | 値 | 説明 |
|---|---|---|
permissionDecision |
"allow", "deny", "ask" |
ツールの承認を制御します |
permissionDecisionReason |
string | ユーザーに表示される理由 |
updatedInput |
object | 変更されたツールの入力(オプション) |
additionalContext |
string | モデル用の追加コンテキスト |
権限決定の優先順位: 同じツールの呼び出しに対して複数のフックが実行される場合、最も制限の厳しい決定が優先されます
deny(最も制限が厳しい):ツールの実行をブロックしますask:ユーザーの確認を要求しますallow(最も制限が緩い):実行を自動承認します
updatedInput のフォーマット: updatedInput のフォーマットを確認するには、エージェントログを開き、記録されたツールスキーマを探してください。updatedInput が期待されるスキーマと一致しない場合、無視されます。
PostToolUse
PostToolUse フックは、ツールが正常に完了した後に発火します。
PostToolUse の入力
共通フィールドに加えて、PostToolUse フックは以下を受け取ります
{
"tool_name": "editFiles",
"tool_input": { "files": ["src/main.ts"] },
"tool_use_id": "tool-123",
"tool_response": "File edited successfully"
}
PostToolUse の出力
PostToolUse フックは、モデルに追加のコンテキストを提供するか、後続の処理をブロックすることができます
{
"decision": "block",
"reason": "Post-processing validation failed",
"hookSpecificOutput": {
"hookEventName": "PostToolUse",
"additionalContext": "The edited file has lint errors that need to be fixed"
}
}
| フィールド | 値 | 説明 |
|---|---|---|
decision |
"block" |
後続の処理をブロックします(オプション) |
reason |
string | ブロックする理由(モデルに表示されます) |
hookSpecificOutput.additionalContext |
string | 会話に注入される追加のコンテキスト |
UserPromptSubmit
UserPromptSubmit フックは、ユーザーがプロンプトを送信したときに発火します。
UserPromptSubmit の入力
共通フィールドに加えて、UserPromptSubmit フックは、ユーザーが送信したテキストを含む prompt フィールドを受け取ります。
UserPromptSubmit フックは、共通の出力フォーマットのみを使用します。
SessionStart
SessionStart フックは、新しいエージェントセッションが開始されたときに発火します。
SessionStart の入力
共通フィールドに加えて、SessionStart フックは以下を受け取ります
{
"source": "new"
}
| フィールド | タイプ | 説明 |
|---|---|---|
source |
string | セッションがどのように開始されたか。現在は常に "new" です。 |
SessionStart の出力
SessionStart フックは、エージェントの会話に追加のコンテキストを注入できます
{
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "Project: my-app v2.1.0 | Branch: main | Node: v20.11.0"
}
}
| フィールド | タイプ | 説明 |
|---|---|---|
additionalContext |
string | エージェントの会話に追加されるコンテキスト |
Stop
Stop フックは、エージェントセッションが終了したときに発火します。カスタムエージェントのスコープに含まれる場合、Stop フックは SubagentStop としても扱われます。
Stop の入力
共通フィールドに加えて、Stop フックは以下を受け取ります
{
"stop_hook_active": false
}
| フィールド | タイプ | 説明 |
|---|---|---|
stop_hook_active |
boolean | 以前のストップフックの結果としてエージェントがすでに継続している場合に true になります。エージェントが無期限に実行されるのを防ぐために、この値を確認してください。 |
Stop の出力
Stop フックはエージェントの停止を防ぐことができます
{
"hookSpecificOutput": {
"hookEventName": "Stop",
"decision": "block",
"reason": "Run the test suite before finishing"
}
}
| フィールド | 値 | 説明 |
|---|---|---|
decision |
"block" |
エージェントの停止を防ぎます |
reason |
string | decision が "block" の場合に必須です。エージェントになぜ続行すべきかを伝えます。 |
Stop フックがエージェントの停止をブロックすると、エージェントは実行を続け、追加のターンがAIクレジットを消費します。エージェントが無期限に実行されるのを防ぐため、常に stop_hook_active フィールドを確認してください。
SubagentStart
SubagentStart フックは、サブエージェントが生成されたときに発火します。
SubagentStart の入力
共通フィールドに加えて、SubagentStart フックは以下を受け取ります
{
"agent_id": "subagent-456",
"agent_type": "Plan"
}
| フィールド | タイプ | 説明 |
|---|---|---|
agent_id |
string | サブエージェントの一意の識別子 |
agent_type |
string | エージェント名(例:組み込みエージェントの場合は "Plan"、またはカスタムエージェント名) |
SubagentStart の出力
SubagentStart フックは、サブエージェントの会話に追加のコンテキストを注入できます
{
"hookSpecificOutput": {
"hookEventName": "SubagentStart",
"additionalContext": "This subagent should follow the project coding guidelines"
}
}
| フィールド | タイプ | 説明 |
|---|---|---|
additionalContext |
string | サブエージェントの会話に追加されるコンテキスト |
SubagentStop
SubagentStop フックは、サブエージェントが完了したときに発火します。
SubagentStop の入力
共通フィールドに加えて、SubagentStop フックは以下を受け取ります
{
"agent_id": "subagent-456",
"agent_type": "Plan",
"stop_hook_active": false
}
| フィールド | タイプ | 説明 |
|---|---|---|
agent_id |
string | サブエージェントの一意の識別子 |
agent_type |
string | エージェント名(例:組み込みエージェントの場合は "Plan"、またはカスタムエージェント名) |
stop_hook_active |
boolean | 以前のストップフックの結果としてサブエージェントがすでに継続している場合に true になります。サブエージェントが無期限に実行されるのを防ぐために、この値を確認してください。 |
SubagentStop の出力
SubagentStop フックはサブエージェントの停止を防ぐことができます
{
"decision": "block",
"reason": "Verify subagent results before completing"
}
| フィールド | 値 | 説明 |
|---|---|---|
decision |
"block" |
サブエージェントの停止を防ぎます |
reason |
string | decision が "block" の場合に必須です。サブエージェントになぜ続行すべきかを伝えます。 |
PreCompact
PreCompact フックは、会話コンテキストが圧縮される前に発火します。
PreCompact の入力
共通フィールドに加えて、PreCompact フックは以下を受け取ります
{
"trigger": "auto"
}
| フィールド | タイプ | 説明 |
|---|---|---|
trigger |
string | 圧縮がトリガーされた方法。会話がプロンプトの予算に対して長すぎる場合は "auto" になります。 |
PreCompact フックは、共通の出力フォーマットのみを使用します。
関連リソース
- エージェントフック - VS Codeでのフックの設定と使用
- カスタムエージェント - 特殊なエージェント設定の作成
- サブエージェント - コンテキストが分離されたサブエージェントへのタスクの委任