メインコンテンツへスキップ
Hooks を使うと、QoderWork の実行フローにおける重要なポイントで、コードを変更することなくカスタムロジックを挿入できます。JSON 設定ファイルを編集するだけで、たとえば次のようなことを実現できます。
  • ツール実行前に危険な操作をブロック
  • ファイル書き込みのたびに自動で lint を実行し、コードスタイルを統一
  • Agent のタスク完了時にデスクトップ通知を送り、画面に張り付く必要をなくす
Prompt による指示とは異なり、Hooks は確定的に動作します。イベントが発火すればスクリプトは必ず実行され、モデルの解釈に結果が左右されることはありません。

クイックスタート

以下の例では、rm -rf のような危険なコマンドをブロックする方法を紹介します。
1

スクリプトを作成

2

設定を追加

~/.qoderwork/settings.json に以下を追加します:
3

動作を確認

QoderWork を開き、Agent に rm -rf を含むコマンドを実行させてみてください。Hook が実行をブロックし、エラーメッセージを Agent にフィードバックします。

Hooks の設定

設定ファイルの場所

QoderWork はユーザーレベルの設定ファイルから Hook 設定を読み込みます:
ホットリロードはまだサポートされていません — Hook 設定を変更した後は QoderWork を再起動してください。

設定フォーマット

1 つのイベントに複数の matcher グループを定義でき、各グループに複数の Hook コマンドを含めることができます。

matcher ルール

matcher は Hook の発火範囲を決定します。何にマッチするかはイベントによって異なります(各イベントの説明を参照)。

Hook スクリプトの作成

Hook スクリプトは stdin 経由で JSON 入力を受け取り、exit code と stdout で動作を制御します。このセクションではすべてのイベントに共通の入出力フォーマットを説明します。イベント固有のフィールドについては Hook イベントを参照してください。
QoderWork は現在、Hook スクリプトに環境変数を注入しません。すべてのデータは stdin JSON 経由で渡されます。セッション ID、作業ディレクトリ、ツール情報が必要な場合は、stdin JSON 入力から解析してください。

入力

Hook スクリプトは stdin 経由で JSON データを受け取ります。すべてのイベントに以下の共通フィールドが含まれます: 各イベントはこれらに加えて固有のフィールドを追加します(各 Hook イベントの説明を参照)。 jq で入力を解析:

出力

Hook は exit code と stdout で動作を制御します。 exit code が基本動作を決定します:0 は成功、2 はブロック(stderr の内容が会話に注入され、ブロック可能なイベントでのみ有効)、その他の値は非ブロックエラーです。 stdout JSON(exit 0 の場合のみ解析)は一部のイベントに精細な制御を提供します。サポートされるフィールドは各イベントの説明を参照してください。exit code が 0 以外の場合、stdout は無視されます。

Hook イベント

SessionStart

セッション開始時に発火します。 matcher: セッションソース 追加入力フィールド:

SessionEnd

セッション終了時に発火します。 matcher: 終了理由 追加入力フィールド:

UserPromptSubmit

ユーザーが Prompt を送信した後、Agent が処理する前に発火します。 追加入力フィールド:

PreToolUse

ツール実行前に発火します。ツール実行をブロックできます。 matcher: ツール名(例:BashWriteEditReadGlobGrep、MCP ツール名は mcp__server__tool 形式) 追加入力フィールド:
ツール実行のブロック: exit code 2、stderr の内容がエラーとして Agent に返されます。完全な例はクイックスタートを参照してください。

PostToolUse

ツール実行の成功後に発火します。 matcher: ツール名 追加入力フィールド:

PostToolUseFailure

ツール実行の失敗後に発火します。 matcher: ツール名 追加入力フィールド:

Stop

Agent がレスポンスを完了した後に発火します(メイン Agent、保留中のツール呼び出しがない場合)。Agent の停止をブロックして作業を続行させることができます。 Agent の停止をブロック: exit code 2、stderr の内容がメッセージとして会話に注入され、Agent は作業を続行します。

SubagentStart / SubagentStop

サブ Agent の起動・完了時に発火します。SubagentStop は Stop と同様、サブ Agent の停止をブロックできます。 matcher: Agent タイプ名 追加入力フィールド:

PreCompact

コンテキスト圧縮前に発火します。 matcher: トリガー方法 追加入力フィールド:

Notification

通知イベント発火時(権限リクエスト、タスク完了等)。 matcher: 通知タイプ 追加入力フィールド:

PermissionRequest

ツール実行にユーザー認可が必要な時に発火します。 matcher: ツール名 追加入力フィールド:

シナリオ例

デスクトップ通知

Agent がタスクを完了した時や権限が必要な時に、デスクトップ通知を表示します。 スクリプト ~/.qoderwork/hooks/notify.sh(macOS):
設定:

ファイル書き込み後の自動 Lint

Agent がファイルを書き込み・編集するたびに、自動で lint を実行します。 スクリプト ${project}/.qoderwork/hooks/auto-lint.sh
設定:イベント PostToolUse、matcher Write|Edit、command .qoderwork/hooks/auto-lint.sh

Agent を継続させる

Agent が停止する際に未完了タスクがないかチェックし、コミットされていない git 変更がある場合は Agent の停止をブロックします。 スクリプト ~/.qoderwork/hooks/check-continue.sh
設定:イベント Stop、command ~/.qoderwork/hooks/check-continue.sh

次のステップ

スキル

スキルで QoderWork の能力を拡張する

スケジュールタスク

タスクを計画的に自動実行する