フック リファレンス

この記事では、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 モデル用の追加コンテキスト

権限決定の優先順位: 同じツールの呼び出しに対して複数のフックが実行される場合、最も制限の厳しい決定が優先されます

  1. deny(最も制限が厳しい):ツールの実行をブロックします
  2. ask:ユーザーの確認を要求します
  3. 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 フックは、共通の出力フォーマットのみを使用します。

© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.