メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt

Use this file to discover all available pages before exploring further.

各フックイベントは、エージェントのライフサイクル内の特定の時点で発火します。どのツール呼び出しでフックがトリガーされるかを絞り込むには、matcher フィールド (フックイベントの tool_name に一致する正規表現) を利用します。

PreToolUse

ツールが実行されるに呼び出されます。これを利用して、ツール呼び出しをブロックしたり、変更したり、前提情報を追加したりできます。 標準入力データ:
フィールド説明
tool_name呼び出すツールの名前exec, edit, mcp__github__create_issue
tool_inputツールに渡す引数{ "command": "rm -rf /", "shell_id": "main" }
例 — 破壊的なコマンドをブロックする:
{
  "PreToolUse": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "python3 -c \"import sys, json; data = json.load(sys.stdin); cmd = data.get('tool_input', {}).get('command', ''); sys.exit(2 if 'rm -rf' in cmd else 0)\""
        }
      ]
    }
  ]
}
例 — src/ 外への書き込みでは確認を必須にする: ツールへの入力を検査し、判定を返すスクリプトを利用します。
{
  "PreToolUse": [
    {
      "matcher": "edit",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/check-edit-path.sh",
          "timeout": 5
        }
      ]
    }
  ]
}

PostToolUse

ツールの実行完了に実行されます。ログの記録、検証、または後続アクションのトリガーに利用します。 標準入力データ:
FieldDescription
tool_name実行されたツールの名前
tool_input渡された引数
tool_responsesuccess (boolean) 、output (string) 、error (string または null) を含むオブジェクト
例 — すべてのシェルコマンドをログに記録する:
{
  "PostToolUse": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "sh -c 'cat >> ~/.devin-command-log'"
        }
      ]
    }
  ]
}

PermissionRequest

エージェントが許可するかどうかの判断を必要とするときに発生します。これを利用して、カスタムの承認ロジックを実装できます。 標準入力データ:
FieldDescription
tool_name許可を要求しているツール
tool_inputツール呼び出しの引数
例 — git コマンドを自動承認する:
{
  "PermissionRequest": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "python3 -c \"import sys, json; data = json.load(sys.stdin); cmd = data.get('tool_input', {}).get('command', ''); print(json.dumps({'decision': 'approve'})) if cmd.startswith('git ') else sys.exit(0)\""
        }
      ]
    }
  ]
}

UserPromptSubmit

ユーザーがメッセージを送信したときに発火します。これを利用して、前提情報を追加したり、ワークフローをトリガーしたりできます。 標準入力データ:
FieldDescription
promptユーザーのメッセージ本文
例 — デプロイ関連のプロンプトにプロジェクトの前提情報を追加する:
{
  "UserPromptSubmit": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/add-deploy-context.sh"
        }
      ]
    }
  ]
}

Stop

エージェントが停止する (ターンを終了する) と発生します。追加の指示を与えたり、早すぎる停止を防いだりするために利用します。 標準入力データ:
フィールド説明
stop_hook_activestop フックがすでにアクティブかどうか
例 — エージェントにテストを実行するよう促す:
{
  "Stop": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "echo '{\"decision\": \"block\", \"reason\": \"Please run the test suite before stopping.\"}'"
        }
      ]
    }
  ]
}
条件が最終的に満たされないと、処理をブロックする stop フックによってエージェントがループする可能性があるため、注意してください。

PostCompaction

前提情報の圧縮が正常に完了したに発火します。ログの記録、後続アクションのトリガー、または圧縮中に失われた可能性のある前提情報の再注入に利用します。 標準入力データ:
FieldDescription
summarycompactor が生成した要約テキスト (要約が生成されなかった場合は null になることがあります)
例 — 圧縮イベントをログに記録する:
{
  "PostCompaction": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "sh -c 'cat >> ~/.devin-compaction-log'"
        }
      ]
    }
  ]
}

SessionStart

新しいセッションが開始されると発生します。初期化、ログ記録、または開発環境のセットアップに利用します。 標準入力データ:
フィールド説明
sourceセッションがどのように開始されたか
例 — セットアップスクリプトを実行:
{
  "SessionStart": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/dev-setup.sh",
          "timeout": 10
        }
      ]
    }
  ]
}

SessionEnd

セッションが終了したときに発生します。クリーンアップや最終ログの記録に利用します。 標準入力データ:
フィールド説明
reasonセッションが終了した理由

複数のイベントへのマッチング

1 つのhooksファイルで、複数のイベント用のフックを定義できます。
{
  "PreToolUse": [
    {
      "matcher": "",
      "hooks": [
        { "type": "command", "command": "./scripts/audit.sh" }
      ]
    }
  ],
  "PostToolUse": [
    {
      "matcher": "",
      "hooks": [
        { "type": "command", "command": "./scripts/audit.sh" }
      ]
    }
  ]
}

Matcher の利用

matcher フィールドは、フックイベントの tool_name に対してマッチする regex です。利用できるのは、ツール関連のイベント PreToolUsePostToolUsePermissionRequest です。 ツール関連以外のイベント (UserPromptSubmitStopPostCompactionSessionStartSessionEnd) には tool_name がないため、その種類のすべてのイベントでフックを実行するには、"" を利用するか、matcher を省略します。
matcher は permission glob ではありません。mcp__github__* のようなパターンは permissions では有用ですが、フックの matcher は regex です。フックの matcher では mcp__github__.* を利用してください。
Matcher一致するもの
"" (空) または省略ツールイベントのすべてのツール名
"exec"exec を含むツール名
"^exec$"exec ツールのみ
"^(exec|edit)$"exec または edit のみ
"^mcp__.*"すべての MCP ツール
"^mcp__github__.*"github MCP server のすべてのツール
"^mcp__github__create_issue$"github MCP server の create_issue ツール

一致対象にできるツール名

フックのマッチャーは、フックスクリプトが stdin の tool_name として受け取るものと同じ、外部から見えるツール名に対して評価されます。利用可能な正確なツール名は、CLI モード、モデル、有効になっている統合によって異なる場合があります。 一般的な公開コアツール名は次のとおりです。
  • read
  • edit
  • grep
  • glob
  • exec
MCP server のツールは、mcp__<server>__<tool> の形式で表示されます。たとえば、github という MCP server の create_issue という名前のツールは、mcp__github__create_issue として表示されます。 その他のツールについては、フックの stdin に表示される tool_name に正確に一致させてください。現在のセッションで利用可能な完全な一覧を確認するには、matcher: "" を指定した一時的な PostToolUse フックを追加し、stdin のペイロードをログに記録してください。