Hooks là các script nhỏ chạy khi có điều gì đó xảy ra bên trong Gateway. Chúng có thể được phát hiện từ các thư mục và được kiểm tra bằngDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
openclaw hooks. Gateway chỉ tải các hook nội bộ sau khi bạn bật hook hoặc cấu hình ít nhất một mục hook, gói hook, trình xử lý cũ, hoặc thư mục hook bổ sung.
Có hai loại hook trong OpenClaw:
- Hook nội bộ (trang này): chạy bên trong Gateway khi các sự kiện agent kích hoạt, như
/new,/reset,/stop, hoặc các sự kiện vòng đời. - Webhook: các endpoint HTTP bên ngoài cho phép hệ thống khác kích hoạt công việc trong OpenClaw. Xem Webhook.
openclaw hooks list hiển thị cả hook độc lập và hook do plugin quản lý.
Bắt đầu nhanh
Loại sự kiện
| Sự kiện | Khi nào kích hoạt |
|---|---|
command:new | Lệnh /new được phát hành |
command:reset | Lệnh /reset được phát hành |
command:stop | Lệnh /stop được phát hành |
command | Bất kỳ sự kiện lệnh nào (trình lắng nghe chung) |
session:compact:before | Trước khi Compaction tóm tắt lịch sử |
session:compact:after | Sau khi Compaction hoàn tất |
session:patch | Khi thuộc tính phiên được sửa đổi |
agent:bootstrap | Trước khi các tệp bootstrap workspace được chèn vào |
gateway:startup | Sau khi các kênh khởi động và hook được tải |
gateway:shutdown | Khi quá trình tắt gateway bắt đầu |
gateway:pre-restart | Trước một lần khởi động lại gateway dự kiến |
message:received | Tin nhắn đến từ bất kỳ kênh nào |
message:transcribed | Sau khi phiên âm âm thanh hoàn tất |
message:preprocessed | Sau khi xử lý trước media và liên kết hoàn tất hoặc bị bỏ qua |
message:sent | Tin nhắn gửi đi đã được chuyển phát |
Viết hook
Cấu trúc hook
Mỗi hook là một thư mục chứa hai tệp:Định dạng HOOK.md
metadata.openclaw):
| Trường | Mô tả |
|---|---|
emoji | Emoji hiển thị cho CLI |
events | Mảng sự kiện cần lắng nghe |
export | Export được đặt tên để dùng (mặc định là "default") |
os | Nền tảng bắt buộc (ví dụ: ["darwin", "linux"]) |
requires | Các đường dẫn bins, anyBins, env, hoặc config bắt buộc |
always | Bỏ qua kiểm tra điều kiện đủ (boolean) |
install | Phương thức cài đặt |
Triển khai trình xử lý
type, action, sessionKey, timestamp, messages (push để gửi cho người dùng), và context (dữ liệu theo từng sự kiện). Ngữ cảnh hook của agent và tool plugin cũng có thể bao gồm trace, một ngữ cảnh trace chẩn đoán chỉ đọc tương thích W3C mà plugin có thể truyền vào log có cấu trúc để tương quan OTEL.
Điểm nổi bật về ngữ cảnh sự kiện
Sự kiện lệnh (command:new, command:reset): context.sessionEntry, context.previousSessionEntry, context.commandSource, context.workspaceDir, context.cfg.
Sự kiện tin nhắn (message:received): context.from, context.content, context.channelId, context.metadata (dữ liệu theo nhà cung cấp bao gồm senderId, senderName, guildId).
Sự kiện tin nhắn (message:sent): context.to, context.content, context.success, context.channelId.
Sự kiện tin nhắn (message:transcribed): context.transcript, context.from, context.channelId, context.mediaPath.
Sự kiện tin nhắn (message:preprocessed): context.bodyForAgent (nội dung cuối cùng đã được làm giàu), context.from, context.channelId.
Sự kiện bootstrap (agent:bootstrap): context.bootstrapFiles (mảng có thể thay đổi), context.agentId.
Sự kiện vá phiên (session:patch): context.sessionEntry, context.patch (chỉ các trường đã thay đổi), context.cfg. Chỉ các client đặc quyền mới có thể kích hoạt sự kiện vá.
Sự kiện Compaction: session:compact:before bao gồm messageCount, tokenCount. session:compact:after thêm compactedCount, summaryLength, tokensBefore, tokensAfter.
command:stop quan sát việc người dùng phát hành /stop; đây là vòng đời hủy/lệnh, không phải cổng hoàn tất agent. Plugin cần kiểm tra một câu trả lời cuối tự nhiên và yêu cầu agent chạy thêm một lượt nên dùng hook plugin có kiểu before_agent_finalize thay vào đó. Xem Hook Plugin.
Sự kiện vòng đời Gateway: gateway:shutdown bao gồm reason và restartExpectedMs và kích hoạt khi quá trình tắt gateway bắt đầu. gateway:pre-restart bao gồm cùng ngữ cảnh nhưng chỉ kích hoạt khi quá trình tắt là một phần của lần khởi động lại dự kiến và có giá trị restartExpectedMs hữu hạn được cung cấp. Trong khi tắt, mỗi lần chờ hook vòng đời là nỗ lực tốt nhất và có giới hạn để quá trình tắt tiếp tục nếu trình xử lý bị treo.
Phát hiện hook
Hook được phát hiện từ các thư mục này, theo thứ tự tăng dần về độ ưu tiên ghi đè:- Hook đi kèm: được phát hành cùng OpenClaw
- Hook Plugin: hook được đóng gói bên trong plugin đã cài đặt
- Hook được quản lý:
~/.openclaw/hooks/(do người dùng cài đặt, dùng chung giữa các workspace). Các thư mục bổ sung từhooks.internal.load.extraDirscó cùng mức ưu tiên này. - Hook workspace:
<workspace>/hooks/(theo từng agent, bị tắt mặc định cho đến khi được bật rõ ràng)
openclaw hooks enable <name>, cài đặt một gói hook, hoặc đặt hooks.internal.enabled=true để chọn tham gia. Khi bạn bật một hook có tên, Gateway chỉ tải trình xử lý của hook đó; hooks.internal.enabled=true, thư mục hook bổ sung, và trình xử lý cũ chọn tham gia phát hiện rộng.
Gói hook
Gói hook là các gói npm export hook quaopenclaw.hooks trong package.json. Cài đặt bằng:
Hook đi kèm
| Hook | Sự kiện | Chức năng |
|---|---|---|
| session-memory | command:new, command:reset | Lưu ngữ cảnh phiên vào <workspace>/memory/ |
| bootstrap-extra-files | agent:bootstrap | Chèn các tệp bootstrap bổ sung từ mẫu glob |
| command-logger | command | Ghi log tất cả lệnh vào ~/.openclaw/logs/commands.log |
| boot-md | gateway:startup | Chạy BOOT.md khi gateway khởi động |
Chi tiết session-memory
Trích xuất 15 tin nhắn người dùng/assistant cuối cùng, tạo một slug tên tệp mô tả bằng LLM, và lưu vào<workspace>/memory/YYYY-MM-DD-slug.md bằng ngày cục bộ của host. Yêu cầu workspace.dir được cấu hình.
Cấu hình bootstrap-extra-files
AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md, MEMORY.md).
Chi tiết command-logger
Ghi log mọi lệnh slash vào~/.openclaw/logs/commands.log.
Chi tiết boot-md
ChạyBOOT.md từ workspace đang hoạt động khi gateway khởi động.
Hook Plugin
Plugin có thể đăng ký hook có kiểu thông qua Plugin SDK để tích hợp sâu hơn: chặn lời gọi công cụ, sửa đổi prompt, kiểm soát luồng tin nhắn, và nhiều hơn nữa. Dùng hook plugin khi bạn cầnbefore_tool_call, before_agent_reply,
before_install, hoặc hook vòng đời trong tiến trình khác.
Để xem tài liệu tham chiếu đầy đủ về hook plugin, xem Hook Plugin.
Cấu hình
Định dạng cấu hình mảng
hooks.internal.handlers cũ vẫn được hỗ trợ để tương thích ngược, nhưng hook mới nên dùng hệ thống dựa trên phát hiện.Tham chiếu CLI
Thực hành tốt nhất
- Giữ trình xử lý nhanh. Hook chạy trong khi xử lý lệnh. Chạy công việc nặng kiểu fire-and-forget bằng
void processInBackground(event). - Xử lý lỗi một cách nhẹ nhàng. Bọc các thao tác rủi ro trong try/catch; đừng throw để các trình xử lý khác có thể chạy.
- Lọc sự kiện sớm. Trả về ngay nếu loại/hành động sự kiện không liên quan.
- Dùng khóa sự kiện cụ thể. Ưu tiên
"events": ["command:new"]thay vì"events": ["command"]để giảm chi phí.
Khắc phục sự cố
Hook không được phát hiện
Hook không đủ điều kiện
Hook không thực thi
- Xác minh hook đã được bật:
openclaw hooks list - Khởi động lại tiến trình gateway để hook tải lại.
- Kiểm tra log gateway:
./scripts/clawlog.sh | grep hook
Liên quan
- Tham chiếu CLI: móc
- Webhook
- Móc Plugin — các móc vòng đời Plugin trong tiến trình
- Cấu hình