メインコンテンツへスキップ
フックを使用すると、エージェントのライフサイクル内のイベントに応じてカスタムロジックを実行できます。フックは、ポリシーの適用、前提情報の追加、アクションの記録、権限の変更、外部システムとの連携に利用できます。 フックは JSON 形式で設定します。これらをプロジェクトの .devin/ ディレクトリ (またはユーザーレベルの設定) に配置すると、Devin CLI はマッチングするライフサイクルイベントで実行します。.claude/ ディレクトリ内の既存のフックも自動的に検出されます。詳しくは Where Hooks Live を参照してください。

Hooksでできること

ポリシーを強制

危険なコマンドをブロックしたり、特定のアクションで確認を必須にしたり、ファイルへのアクセスを制限したりできます。

前提情報を追加

特定のツールが呼び出されたときに、追加の指示や情報を渡します。

付随処理を実行

イベント発生時に、スクリプトを実行したり、通知を送信したり、イベントを記録したりできます。

権限を変更

状況に応じて、権限を動的に付与または制限できます。

簡単な例

プロジェクト内に .devin/hooks.v1.json を作成します:
シェルコマンドを実行する前に、毎回 ./scripts/check-command.sh が実行されます。このスクリプトは stdin でイベントデータを受け取り、ゼロ以外の終了コードを返すことでそのアクションをブロックできます。

Hook Events

フックは、以下のライフサイクルイベントに応答できます。 各イベントと利用可能なデータの詳細については、ライフサイクルフックを参照してください。

フックの形式

各フックには、type (command または prompt) 、任意の matcher (フックイベントの tool_name に対する正規表現) 、および各種設定があります。

コマンドフック

コマンドフックでは、シェルコマンドを実行します。イベントデータは stdin 経由で JSON として渡され、コマンドは stdout に JSON を返すことで結果を制御できます (以下の出力形式を参照) 。 入力 (stdin) :
DEVIN_PROJECT_DIR 環境変数は、プロジェクトのルートディレクトリに自動的に設定されます。 一致対象にできる組み込みツール名と MCP ツール名の形式については、Matcher の使用 を参照してください。

出力形式

コマンドフックは、結果を制御するために stdout に JSON オブジェクトを出力できます。 アクションを承認またはブロックするには、トップレベルの decision (必要に応じて reason も) を返します:
エージェントの前提情報にテキストを追加するには、イベント名を付けた hookSpecificOutput オブジェクト内で additionalContext を返します:
実行前にツールの入力を透過的に書き換えるには、PreToolUsehookSpecificOutput 内で updatedInput を返します。updatedInput 内のフィールドはツールの引数にマージされるため、一部の項目だけを更新できます (例: command のみ):

終了コード


フックの格納場所

Devin CLI は、以下の場所にあるフックを読み取ります。いずれも同じ JSON 形式です。

プロジェクトレベル

ユーザーレベル (グローバル)

.devin/hooks.v1.json では、hooks オブジェクトがファイル全体にあたります (ラッパーキーは不要です) 。それ以外の場所では、hooks は設定ファイル内の "hooks" キーの下にネストされます。
.claude/ 配下のパスにある hooks は、read_config_from.claude が有効な場合 (デフォルト) に読み込まれます。必要に応じて、ユーザー設定でこれを無効にできます。

フックの確認

現在読み込まれているすべてのフックとそのソースファイルを確認するには、/hooks スラッシュコマンドを利用します:

次のステップ

ライフサイクルフック

各イベントタイプと利用可能なデータについて詳しく解説します。

設定

Devin CLI がフックの読み込み元とする設定場所を制御します。