Skip to main content
リファレンス

フックリファレンス

フックのイベントタイプ、マッチングルール、実行方法、入出力、および終了コード

フックを使用すると、Qoder CLI のライフサイクルの特定のタイミングでカスタムロジックを自動実行できます。たとえば、ツール呼び出し前の検証、セッション開始時のコンテキスト注入、ファイル変更時の外部プロセスのトリガーなどが可能です。本ページはフックの完全なリファレンスです。利用ガイドについてはフックを参照してください。

イベントタイプ

フックは以下のイベントにバインドできます:
イベントトリガーされるタイミング
PreToolUseツール呼び出し前。
PostToolUseツール呼び出し成功後。
PostToolUseFailureツール呼び出し失敗後。
UserPromptSubmitユーザーがプロンプトを送信した時。
SessionStartセッション開始時。
SessionEndセッション終了時。
Stopメインエージェントが応答を停止した時。
StopFailure停止プロセスが失敗した時。
SubagentStartサブエージェント起動時。
SubagentStopサブエージェント停止時。
PreCompactコンテキスト圧縮前。
PostCompactコンテキスト圧縮後。
Notification通知生成時。
ConfigChange構成変更時。
InstructionsLoadedプロジェクト指示の読み込み後。
CwdChanged作業ディレクトリ変更時。
FileChangedファイル変更時。
WorktreeCreateワークツリー作成時。
WorktreeRemoveワークツリー削除時。
Elicitationエリシテーション開始時。
ElicitationResultエリシテーション結果返答時。
TaskCreatedタスク作成時。
TaskCompletedタスク完了時。
PermissionRequestアクセス許可の要求開始時。
PermissionDeniedアクセス拒否時。
TeammateIdle共同作業者アイドル時。
Setup初期インストール時。
各イベントのマッチャー一致フィールド、stdin の追加入力フィールド、ブロックのサポート有無、および利用可能な hookSpecificOutput フィールドについては、フックの「イベントリスト」セクションを参照してください。

フックタイプ

各フックは type を介して実行方法を指定します:
タイプ説明
commandシェルコマンドを1つ実行します。
httpHTTP リクエストを送信します。
prompt独立した単一ターンのモデル呼び出しで判定を行い、モデルは { ok, reason } を返し、ok=false はブロックします。
agentサブエージェントを起動して検証を行い、StructuredOutput を介して { ok, reason } を返し、ok=false はブロックします。
各タイプの完全なフィールド(httpurl/headers や、promptagent の返却規約など)については、フックの「フックエントリタイプ」セクションを参照してください。

定義構造

フックは settings.jsonhooks グループ内でイベントごとに構成されます。各イベントは一組のフック定義に対応します:
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          { "type": "command", "command": "./scripts/check.sh" }
        ]
      }
    ]
  }
}
フック定義(グループ)フィールド:
フィールド説明
matcher一致ルール(下文参照)。このフックグループがどのターゲットに適用されるかを決定します。
hooksフックの配列。各項目には type と対応するパラメーターが含まれます。
個々のフックエントリは、type およびタイプ固有のパラメーターに加え、nametimeoutifasync(バックグラウンドで実行され、メインプロセスをブロックしない)などのフィールドもサポートしています。完全なリストについては、フックの「フックエントリタイプ」セクションを参照してください。

一致ルール

matcher は、フックがどのターゲット(ツール名など)に適用されるかを決定します:
  • 空または *:すべてに一致します。
  • 正確な値Bash のように、そのターゲットのみに一致します。
  • パイプ記号 |Bash|Edit|Write のような複数値。
  • 正規表現:正規表現による一致をサポートします。
より粒度の細かい if 条件は "ToolName" または "ToolName(arg_glob)" として記述でき、arg_glob ではグロブパターンを使用してツールパラメーターに一致させます。

入力と終了コード

入力(stdin)

フックは stdin を介して現在のコンテキストを含む JSON を受信します(以下は各イベントの共通フィールドです。イベント固有のフィールドについては「イベントリスト」を参照してください):
フィールド説明
session_id現在のセッション ID。
transcript_pathセッション記録ファイルパス。
cwd現在の作業ディレクトリ。
hook_event_nameトリガーされたイベント名。
permission_mode現在の権限モード。
agent_idトリガーされたエージェント ID(該当する場合)。
agent_typeエージェントタイプ(該当する場合)。

終了コード

command タイプのフックは終了コードによってフローを制御します:
終了コード意味
0成功。stdout に JSON を出力して CLI で解析できます。
2ブロック。stderr の内容がフィードバックとしてエージェントに返されます(ブロックをサポートするイベントにのみ適用されます。イベントごとの説明は「イベントリスト」を参照)。
その他非ブロックエラー。記録されますが、フローは中断されません。
終了コードが 0 の場合、stdout を介して JSON を返すことでよりきめ細かな制御が可能です。完全なフィールド(continuestopReasonsuppressOutputsystemMessagedecisionreasonhookSpecificOutput)については、フックの「フックスクリプトの記述」セクションを参照してください。

プラグイン内のフック

プラグインにはフックを含めることができ、プラグインディレクトリ内の hooks/hooks.json に構成されます。形式は settings.jsonhooks グループと同じです。プラグインリファレンスを参照してください。

次のステップ

Qoder CLI を使用する