← ガイドトップに戻る

エージェントのライフサイクルやツール実行時にカスタムコマンドを実行する機能です。セキュリティ検証、ログ記録、コンテキスト収集などに使用できます。

フックの種類

AgentSpawn

エージェント起動時に実行。出力は会話コンテキストに追加されます。

UserPromptSubmit

ユーザーがプロンプトを送信した時に実行。出力は会話コンテキストに追加されます。

PreToolUse

ツール実行前に実行。ツールの実行をブロックできます。

PostToolUse

ツール実行後に実行。ツールの結果にアクセスできます。

エージェント設定での定義

基本構造

{
  "description": "フック使用例",
  "hooks": [
    {
      "name": "AgentSpawn",
      "command": "echo",
      "args": ["エージェント起動"]
    }
  ]
}

ツールマッチング

特定のツールに対してのみフックを実行:

{
  "hooks": [
    {
      "name": "PreToolUse",
      "matcher": "fs_write",
      "command": "echo",
      "args": ["ファイル書き込み前チェック"]
    }
  ]
}

マッチャーの例:

終了コードの動作

タイムアウト設定

{
  "hooks": [
    {
      "name": "PreToolUse",
      "command": "long-running-script.sh",
      "timeout_ms": 60000
    }
  ]
}

デフォルト: 30秒(30,000ms)

キャッシュ設定

成功したフック結果をキャッシュ:

{
  "hooks": [
    {
      "name": "AgentSpawn",
      "command": "expensive-operation.sh",
      "cache_ttl_seconds": 3600
    }
  ]
}

実践例

セキュリティチェック

{
  "hooks": [
    {
      "name": "PreToolUse",
      "matcher": "execute_bash",
      "command": "security-check.sh",
      "args": []
    }
  ]
}

security-check.sh:

#!/bin/bash
event=$(cat)
command=$(echo "$event" | jq -r '.tool_input.command')

if [[ "$command" == *"rm -rf"* ]]; then
  echo "危険なコマンドが検出されました" >&2
  exit 2  # ツール実行をブロック
fi

exit 0

コンテキスト収集

{
  "hooks": [
    {
      "name": "AgentSpawn",
      "command": "git",
      "args": ["status", "--short"]
    }
  ]
}

ログ記録

{
  "hooks": [
    {
      "name": "PostToolUse",
      "matcher": "fs_write",
      "command": "log-file-changes.sh"
    }
  ]
}

MCPツールのフック

{
  "hooks": [
    {
      "name": "PreToolUse",
      "matcher": "@postgres/query",
      "command": "validate-sql.sh"
    }
  ]
}

注意事項

関連コマンド

/hooks                      # フック一覧表示