全体像
hooks は、何かが起きたときに実行される小さなスクリプトです。種類は 2 つあります。- hooks(このページ):
/new、/reset、/stop、またはライフサイクルイベントのようなエージェントイベント発火時に、ゲートウェイ内で実行されます。 - webhook: 他のシステムから OpenClaw の処理をトリガーできる外部 HTTP webhook です。webhook を参照するか、Gmail 用ヘルパーコマンドとして
openclaw webhooksを使ってください。
- セッションをリセットしたときにメモリのスナップショットを保存する
- トラブルシューティングやコンプライアンスのためにコマンドの監査ログを残す
- セッション開始時または終了時に後続の自動化を起動する
- イベント発火時にエージェントのワークスペースへファイルを書き込んだり、外部 API を呼び出したりする
概要
hooks システムでは次のことができます。/new発行時にセッションコンテキストをメモリへ保存する- すべてのコマンドを監査用に記録する
- エージェントのライフサイクルイベントで独自の自動化を起動する
- コアコードを変更せずに OpenClaw の挙動を拡張する
はじめる
同梱 hooks
OpenClaw には、自動的に検出される 4 つの同梱 hook があります。- 💾 session-memory:
/newを実行したときに、セッションコンテキストをエージェントのワークスペース(デフォルトは~/.openclaw/workspace/memory/)へ保存します - 📎 bootstrap-extra-files:
agent:bootstrap中に、設定済みの glob/path パターンから追加のワークスペース bootstrap ファイルを注入します - 📝 command-logger: すべてのコマンドイベントを
~/.openclaw/logs/commands.logに記録します - 🚀 boot-md: ゲートウェイ起動時に
BOOT.mdを実行します(internal hooks を有効化している必要があります)
オンボーディング
オンボーディング(openclaw onboard)では、推奨 hooks を有効化するかどうかを確認されます。ウィザードは対象となる hooks を自動検出し、選択できるように表示します。
Hook の検出
hooks は 3 つのディレクトリから自動検出されます(優先順位順)。- Workspace hooks:
<workspace>/hooks/(エージェント単位、最優先) - Managed hooks:
~/.openclaw/hooks/(ユーザーがインストールし、複数ワークスペースで共有) - Bundled hooks:
<openclaw>/dist/hooks/bundled/(OpenClaw に同梱)
Hook Packs(npm / archives)
hook pack は標準的な npm パッケージで、package.json の openclaw.hooks を通じて 1 つ以上の hook を公開します。インストールは次のコマンドで行います。
@latest は stable トラックのまま扱われます。npm がそれらを prerelease に解決した場合、OpenClaw は停止し、@beta / @rc のような prerelease tag や厳密な prerelease version で明示的に opt in するよう求めます。
package.json の例:
HOOK.md と handler.ts(または index.ts)を含む hook ディレクトリを指します。
hook pack は依存関係を同梱でき、それらは ~/.openclaw/hooks/<id> 配下にインストールされます。
各 openclaw.hooks エントリは、symlink 解決後もパッケージディレクトリの内側に留まっている必要があります。外へ逃げるエントリは拒否されます。
セキュリティ上の注意: openclaw hooks install は依存関係を npm install --ignore-scripts でインストールします
(ライフサイクルスクリプトは実行されません)。hook pack の依存ツリーは “pure JS / TS” に保ち、postinstall ビルドに依存するパッケージは避けてください。
Hook の構造
HOOK.md の形式
HOOK.md ファイルには、YAML frontmatter による metadata と Markdown ドキュメントが含まれます。
Metadata フィールド
metadata.openclaw オブジェクトでは次をサポートします。
emoji: CLI に表示する emoji(例:"💾")events: リッスンするイベントの配列(例:["command:new", "command:reset"])export: 使用する名前付き export(デフォルトは"default")homepage: ドキュメント URLrequires: 任意の要件bins: PATH 上に必要なバイナリ(例:["git", "node"])anyBins: これらのバイナリのうち少なくとも 1 つが必要env: 必要な環境変数config: 必要な config パス(例:["workspace.dir"])os: 必要なプラットフォーム(例:["darwin", "linux"])
always: eligibility チェックをバイパスする(boolean)install: インストール方法(同梱 hook の場合:[{"id":"bundled","kind":"bundled"}])
Handler 実装
handler.ts ファイルは HookHandler 関数を export します。
イベントコンテキスト
各イベントには次の情報が含まれます。イベントの種類
Command イベント
エージェントコマンドが発行されたときにトリガーされます。command: すべてのコマンドイベント(一般リスナー)command:new:/newコマンド発行時command:reset:/resetコマンド発行時command:stop:/stopコマンド発行時
Session イベント
session:compact:before: compaction による履歴要約の直前session:compact:after: compaction 完了後、summary metadata とともに発火
type: "session" と action: "compact:before" / action: "compact:after" として送出されます。リスナー側では上記の結合キーを購読します。
具体的な handler 登録では、${type}:${action} のリテラルキー形式を使います。これらのイベントでは session:compact:before と session:compact:after を登録してください。
Agent イベント
agent:bootstrap: ワークスペース bootstrap ファイルが注入される前(hooks はcontext.bootstrapFilesを変更できます)
ゲートウェイイベント
ゲートウェイ起動時にトリガーされます。gateway:startup: チャンネル起動後かつ hooks 読み込み後
Message イベント
メッセージの受信または送信時にトリガーされます。message: すべてのメッセージイベント(一般リスナー)message:received: 任意のチャンネルから受信メッセージを受け取ったとき。メディア理解より前の早い段階で発火します。内容には、未処理メディア添付を表す<media:audio>のような生のプレースホルダーが含まれる場合があります。message:transcribed: 音声の文字起こしやリンク理解を含め、メッセージが完全に処理されたときに発火します。この時点では、音声メッセージの完全な文字起こしテキストがtranscriptに入っています。文字起こし済み音声の内容にアクセスしたい場合はこの hook を使います。message:preprocessed: すべてのメディア理解とリンク理解が完了した後、各メッセージごとに発火します。これにより、エージェントが見る前の fully enriched body(transcript、画像説明、リンク要約など)へ hooks がアクセスできます。message:sent: 送信メッセージが正常に送られたとき
Message イベントのコンテキスト
message event には、メッセージに関する詳細なコンテキストが含まれます。例: Message Logger Hook
Tool Result Hook(Plugin API)
これらの hooks はイベントストリームのリスナーではありません。OpenClaw がツール結果を永続化する前に、プラグインが同期的に結果を調整できるようにするためのものです。tool_result_persist: ツール結果をセッショントランスクリプトへ書き込む前に変換します。同期でなければなりません。更新済みのツール結果 payload を返すか、そのまま維持するにはundefinedを返してください。Agent Loop を参照してください。
Plugin Hook イベント
plugin hook runner から公開される compaction ライフサイクル hook:before_compaction: 件数/トークン metadata を伴って compaction 前に実行after_compaction: compaction summary metadata を伴って compaction 後に実行
今後のイベント
今後予定されているイベントの種類:session:start: 新しいセッション開始時session:end: セッション終了時agent:error: エージェントでエラーが発生したとき
カスタム hooks を作成する
1. 配置場所を選ぶ
- Workspace hooks(
<workspace>/hooks/): エージェント単位、最優先 - Managed hooks(
~/.openclaw/hooks/): ワークスペース間で共有
2. ディレクトリ構造を作成する
3. HOOK.md を作成する
4. handler.ts を作成する
5. 有効化してテストする
設定
新しい設定形式(推奨)
hook ごとの設定
hooks には独自の設定を持たせられます。追加ディレクトリ
追加ディレクトリから hooks を読み込みます。旧設定形式(引き続きサポート)
古い設定形式も後方互換性のために引き続き動作します。module はワークスペース相対パスである必要があります。絶対パスや、ワークスペース外への traversal は拒否されます。
移行: 新しい hook には、新しい discovery ベースのシステムを使ってください。legacy handler はディレクトリベースの hook の後に読み込まれます。
CLI コマンド
hooks を一覧表示する
hook 情報
適格性を確認する
有効化/無効化
同梱 hook リファレンス
session-memory
/new 実行時にセッションコンテキストをメモリへ保存します。
Events: command:new
Requirements: workspace.dir の設定が必要
Output: <workspace>/memory/YYYY-MM-DD-slug.md(デフォルトは ~/.openclaw/workspace)
動作内容:
- reset 前のセッションエントリを使って、正しい transcript を特定する
- 会話の最後の 15 行を抽出する
- LLM を使って説明的なファイル名 slug を生成する
- セッション metadata を日付付きのメモリファイルに保存する
2026-01-16-vendor-pitch.md2026-01-16-api-design.md2026-01-16-1430.md(slug 生成に失敗した場合のフォールバック timestamp)
bootstrap-extra-files
agent:bootstrap 中に追加の bootstrap ファイル(たとえば monorepo ローカルの AGENTS.md / TOOLS.md)を注入します。
Events: agent:bootstrap
Requirements: workspace.dir の設定が必要
出力: ファイルは書き込まれません。bootstrap context はメモリ上でのみ変更されます。
設定:
- パスはワークスペース相対で解決されます。
- ファイルはワークスペース内に留まる必要があります(realpath で検証されます)。
- 読み込まれるのは認識済みの bootstrap basename のみです。
- subagent allowlist は維持されます(
AGENTS.mdとTOOLS.mdのみ)。
command-logger
すべての command event を集中管理された監査ファイルへ記録します。 Events:command
Requirements: なし
Output: ~/.openclaw/logs/commands.log
動作内容:
- イベント詳細(command action、timestamp、session key、sender ID、source)を取得する
- JSONL 形式でログファイルへ追記する
- バックグラウンドで静かに実行する
boot-md
ゲートウェイ起動時(チャンネル起動後)にBOOT.md を実行します。
これを動かすには internal hooks を有効化しておく必要があります。
Events: gateway:startup
Requirements: workspace.dir の設定が必要
動作内容:
- ワークスペースから
BOOT.mdを読み込む - エージェントランナー経由でその指示を実行する
- 必要な送信メッセージを message ツール経由で送る
ベストプラクティス
Handler は高速に保つ
hooks はコマンド処理中に実行されます。できるだけ軽量に保ってください。エラーは適切に処理する
危険な操作は必ずラップしてください。イベントは早めに絞り込む
対象外のイベントなら早めに return します。具体的なイベントキーを使う
可能であれば、metadata では対象イベントを具体的に指定してください。デバッグ
Hook ログを有効にする
ゲートウェイは起動時に hook の読み込みをログ出力します。検出状態を確認する
検出された hooks をすべて一覧表示します。登録を確認する
handler 内で、呼び出されたときにログを出してください。適格性を検証する
hook が適格にならない理由を確認します。テスト
ゲートウェイログ
hook の実行を見るにはゲートウェイログを監視します。hooks を直接テストする
handler を分離してテストします。アーキテクチャ
コアコンポーネント
src/hooks/types.ts: 型定義src/hooks/workspace.ts: ディレクトリのスキャンと読み込みsrc/hooks/frontmatter.ts:HOOK.mdmetadata の解析src/hooks/config.ts: 適格性チェックsrc/hooks/hooks-status.ts: 状態レポートsrc/hooks/loader.ts: 動的モジュールローダーsrc/cli/hooks-cli.ts: CLI コマンドsrc/gateway/server-startup.ts: ゲートウェイ起動時に hooks を読み込むsrc/auto-reply/reply/commands-core.ts: command event をトリガーする
検出フロー
イベントフロー
トラブルシューティング
Hook が検出されない
-
ディレクトリ構造を確認します。
-
HOOK.md の形式を確認します。
-
検出された hooks をすべて一覧表示します。
Hook が適格ではない
要件を確認します。- バイナリ(PATH を確認)
- 環境変数
- config 値
- OS 互換性
Hook が実行されない
-
hook が有効か確認します。
- hooks が再読み込みされるようにゲートウェイプロセスを再起動します。
-
エラーがないかゲートウェイログを確認します。
Handler エラー
TypeScript/import エラーを確認します。移行ガイド
Legacy Config から Discovery への移行
移行前:-
hook ディレクトリを作成します。
-
HOOK.md を作成します。
-
config を更新します。
-
確認してゲートウェイプロセスを再起動します。
- 自動検出
- CLI 管理
- 適格性チェック
- より良いドキュメント
- 一貫した構造