Hooks
Hooks cung cấp một hệ thống mở rộng dựa trên sự kiện để tự động hóa các hành động phản hồi các lệnh và sự kiện của agent. Hooks được tự động phát hiện từ các thư mục và có thể được quản lý thông qua các lệnh CLI, tương tự như cách hoạt động của skills trong OpenClaw.Tổng quan
Hooks là các script nhỏ chạy khi có sự kiện xảy ra. Có hai loại:- Hooks (trang này): chạy bên trong Gateway khi các sự kiện của agent được kích hoạt, như
/new,/reset,/stop, hoặc các sự kiện vòng đời. - Webhooks: các webhook HTTP bên ngoài cho phép các hệ thống khác kích hoạt công việc trong OpenClaw. Xem Webhook Hooks hoặc sử dụng
openclaw webhookscho các lệnh trợ giúp Gmail.
- Lưu ảnh chụp bộ nhớ khi bạn reset một session
- Giữ lại dấu vết các lệnh để khắc phục sự cố hoặc tuân thủ
- Kích hoạt tự động hóa tiếp theo khi một session bắt đầu hoặc kết thúc
- Ghi tệp vào workspace của agent hoặc gọi các API bên ngoài khi sự kiện xảy ra
Tổng quan
Hệ thống hooks cho phép bạn:- Lưu ngữ cảnh session vào bộ nhớ khi
/newđược phát hành - Ghi lại tất cả các lệnh để kiểm toán
- Kích hoạt tự động hóa tùy chỉnh trên các sự kiện vòng đời của agent
- Mở rộng hành vi của OpenClaw mà không cần sửa đổi mã lõi
Bắt đầu
Hooks đi kèm
OpenClaw đi kèm với bốn hooks được phát hiện tự động:- 💾 session-memory: Lưu ngữ cảnh session vào workspace của agent (mặc định
~/.openclaw/workspace/memory/) khi bạn phát hành/new - 📎 bootstrap-extra-files: Chèn thêm các tệp bootstrap vào workspace từ các mẫu glob/đường dẫn được cấu hình trong
agent:bootstrap - 📝 command-logger: Ghi lại tất cả các sự kiện lệnh vào
~/.openclaw/logs/commands.log - 🚀 boot-md: Chạy
BOOT.mdkhi gateway khởi động (yêu cầu bật hooks nội bộ)
Onboarding
Trong quá trình onboarding (openclaw onboard), bạn sẽ được nhắc bật các hooks được đề xuất. Wizard tự động phát hiện các hooks đủ điều kiện và trình bày chúng để lựa chọn.
Phát hiện Hook
Hooks được tự động phát hiện từ ba thư mục (theo thứ tự ưu tiên):- Workspace hooks:
<workspace>/hooks/(mỗi agent, ưu tiên cao nhất) - Managed hooks:
~/.openclaw/hooks/(người dùng cài đặt, chia sẻ giữa các workspace) - Bundled hooks:
<openclaw>/dist/hooks/bundled/(đi kèm với OpenClaw)
Gói Hook (npm/archives)
Gói hook là các package npm tiêu chuẩn xuất một hoặc nhiều hooks quaopenclaw.hooks trong package.json. Cài đặt chúng với:
@latest vẫn ở trên track ổn định. Nếu npm giải quyết một trong số đó thành một bản phát hành trước, OpenClaw sẽ dừng lại và yêu cầu bạn chọn rõ ràng với một tag phát hành trước như @beta/@rc hoặc một phiên bản phát hành trước chính xác.
Ví dụ package.json:
HOOK.md và handler.ts (hoặc index.ts).
Gói hook có thể đi kèm với các phụ thuộc; chúng sẽ được cài đặt dưới ~/.openclaw/hooks/<id>.
Mỗi mục openclaw.hooks phải ở trong thư mục package sau khi giải quyết symlink; các mục thoát ra ngoài bị từ chối.
Lưu ý bảo mật: openclaw hooks install cài đặt các phụ thuộc với npm install --ignore-scripts (không có script vòng đời). Giữ cây phụ thuộc của gói hook “thuần JS/TS” và tránh các package phụ thuộc vào các bản dựng postinstall.
Cấu trúc Hook
Định dạng HOOK.md
TệpHOOK.md chứa metadata trong YAML frontmatter cộng với tài liệu Markdown:
Trường Metadata
Đối tượngmetadata.openclaw hỗ trợ:
emoji: Hiển thị emoji cho CLI (ví dụ:"💾")events: Mảng các sự kiện để lắng nghe (ví dụ:["command:new", "command:reset"])export: Xuất tên để sử dụng (mặc định là"default")homepage: URL tài liệurequires: Yêu cầu tùy chọnbins: Các binary yêu cầu trên PATH (ví dụ:["git", "node"])anyBins: Ít nhất một trong các binary này phải có mặtenv: Các biến môi trường yêu cầuconfig: Các đường dẫn cấu hình yêu cầu (ví dụ:["workspace.dir"])os: Các nền tảng yêu cầu (ví dụ:["darwin", "linux"])
always: Bỏ qua kiểm tra đủ điều kiện (boolean)install: Phương pháp cài đặt (cho các hooks đi kèm:[{"id":"bundled","kind":"bundled"}])
Triển khai Handler
Tệphandler.ts xuất một hàm HookHandler:
Ngữ cảnh Sự kiện
Mỗi sự kiện bao gồm:Các loại sự kiện
Sự kiện Lệnh
Kích hoạt khi các lệnh của agent được phát hành:command: Tất cả các sự kiện lệnh (người nghe chung)command:new: Khi lệnh/newđược phát hànhcommand:reset: Khi lệnh/resetđược phát hànhcommand:stop: Khi lệnh/stopđược phát hành
Sự kiện Session
session:compact:before: Ngay trước khi nén tóm tắt lịch sửsession:compact:after: Sau khi nén hoàn tất với metadata tóm tắt
type: "session" với action: "compact:before" / action: "compact:after"; người nghe đăng ký với các khóa kết hợp ở trên.
Đăng ký handler cụ thể sử dụng định dạng khóa literal ${type}:${action}. Đối với các sự kiện này, đăng ký session:compact:before và session:compact:after.
Sự kiện Agent
agent:bootstrap: Trước khi các tệp bootstrap workspace được chèn (hooks có thể thay đổicontext.bootstrapFiles)
Sự kiện Gateway
Kích hoạt khi gateway khởi động:gateway:startup: Sau khi các kênh bắt đầu và hooks được tải
Sự kiện Tin nhắn
Kích hoạt khi tin nhắn được nhận hoặc gửi:message: Tất cả các sự kiện tin nhắn (người nghe chung)message:received: Khi một tin nhắn đến được nhận từ bất kỳ kênh nào. Kích hoạt sớm trong quá trình xử lý trước khi hiểu phương tiện. Nội dung có thể chứa các placeholder thô như<media:audio>cho các tệp đính kèm phương tiện chưa được xử lý.message:transcribed: Khi một tin nhắn đã được xử lý hoàn toàn, bao gồm cả phiên âm âm thanh và hiểu liên kết. Tại thời điểm này,transcriptchứa văn bản phiên âm đầy đủ cho các tin nhắn âm thanh. Sử dụng hook này khi bạn cần truy cập vào nội dung âm thanh đã phiên âm.message:preprocessed: Kích hoạt cho mỗi tin nhắn sau khi tất cả các phương tiện + hiểu liên kết hoàn tất, cho phép hooks truy cập vào nội dung đầy đủ (phiên âm, mô tả hình ảnh, tóm tắt liên kết) trước khi agent nhìn thấy nó.message:sent: Khi một tin nhắn gửi đi được gửi thành công
Ngữ cảnh Sự kiện Tin nhắn
Các sự kiện tin nhắn bao gồm ngữ cảnh phong phú về tin nhắn:Ví dụ: Hook Ghi nhật ký Tin nhắn
Tool Result Hooks (Plugin API)
Các hooks này không phải là người nghe luồng sự kiện; chúng cho phép plugins điều chỉnh kết quả công cụ đồng bộ trước khi OpenClaw lưu trữ chúng.tool_result_persist: chuyển đổi kết quả công cụ trước khi chúng được ghi vào bản ghi session. Phải đồng bộ; trả về payload kết quả công cụ đã cập nhật hoặcundefinedđể giữ nguyên. Xem Agent Loop.
Plugin Hook Events
Các hooks vòng đời nén được phơi bày thông qua plugin hook runner:before_compaction: Chạy trước khi nén với metadata đếm/tokenafter_compaction: Chạy sau khi nén với metadata tóm tắt nén
Sự kiện Tương lai
Các loại sự kiện dự kiến:session:start: Khi một session mới bắt đầusession:end: Khi một session kết thúcagent:error: Khi một agent gặp lỗi
Tạo Hooks Tùy chỉnh
1. Chọn Vị trí
- Workspace hooks (
<workspace>/hooks/): Mỗi agent, ưu tiên cao nhất - Managed hooks (
~/.openclaw/hooks/): Chia sẻ giữa các workspace
2. Tạo Cấu trúc Thư mục
3. Tạo HOOK.md
4. Tạo handler.ts
5. Bật và Kiểm tra
Cấu hình
Định dạng Cấu hình Mới (Khuyến nghị)
Cấu hình Từng Hook
Hooks có thể có cấu hình tùy chỉnh:Thư mục Bổ sung
Tải hooks từ các thư mục bổ sung:Định dạng Cấu hình Cũ (Vẫn được hỗ trợ)
Định dạng cấu hình cũ vẫn hoạt động để tương thích ngược:module phải là đường dẫn tương đối đến workspace. Các đường dẫn tuyệt đối và vượt ra ngoài workspace bị từ chối.
Di chuyển: Sử dụng hệ thống dựa trên phát hiện mới cho các hooks mới. Các handlers cũ được tải sau các hooks dựa trên thư mục.
Lệnh CLI
Liệt kê Hooks
Thông tin Hook
Kiểm tra Đủ điều kiện
Bật/Tắt
Tham khảo hook đi kèm
session-memory
Lưu ngữ cảnh session vào bộ nhớ khi bạn phát hành/new.
Sự kiện: command:new
Yêu cầu: workspace.dir phải được cấu hình
Đầu ra: <workspace>/memory/YYYY-MM-DD-slug.md (mặc định là ~/.openclaw/workspace)
Những gì nó làm:
- Sử dụng mục nhập session trước khi reset để xác định bản ghi chính xác
- Trích xuất 15 dòng hội thoại cuối cùng
- Sử dụng LLM để tạo tên tệp mô tả
- Lưu metadata session vào tệp bộ nhớ có ngày
2026-01-16-vendor-pitch.md2026-01-16-api-design.md2026-01-16-1430.md(dấu thời gian dự phòng nếu tạo tên thất bại)
bootstrap-extra-files
Chèn thêm các tệp bootstrap (ví dụ:AGENTS.md / TOOLS.md cục bộ monorepo) trong agent:bootstrap.
Sự kiện: agent:bootstrap
Yêu cầu: workspace.dir phải được cấu hình
Đầu ra: Không có tệp nào được ghi; ngữ cảnh bootstrap chỉ được thay đổi trong bộ nhớ.
Cấu hình:
- Các đường dẫn được giải quyết tương đối với workspace.
- Các tệp phải ở trong workspace (được kiểm tra realpath).
- Chỉ các tên tệp bootstrap được công nhận mới được tải.
- Danh sách cho phép subagent được bảo toàn (
AGENTS.mdvàTOOLS.mdchỉ).
command-logger
Ghi lại tất cả các sự kiện lệnh vào một tệp nhật ký kiểm toán tập trung. Sự kiện:command
Yêu cầu: Không có
Đầu ra: ~/.openclaw/logs/commands.log
Những gì nó làm:
- Thu thập chi tiết sự kiện (hành động lệnh, dấu thời gian, khóa session, ID người gửi, nguồn)
- Thêm vào tệp nhật ký ở định dạng JSONL
- Chạy âm thầm trong nền
boot-md
ChạyBOOT.md khi gateway khởi động (sau khi các kênh bắt đầu).
Hooks nội bộ phải được bật để điều này chạy.
Sự kiện: gateway:startup
Yêu cầu: workspace.dir phải được cấu hình
Những gì nó làm:
- Đọc
BOOT.mdtừ workspace của bạn - Chạy các hướng dẫn qua agent runner
- Gửi bất kỳ tin nhắn gửi đi nào được yêu cầu qua công cụ tin nhắn
Thực hành tốt nhất
Giữ cho Handlers Nhanh
Hooks chạy trong quá trình xử lý lệnh. Giữ chúng nhẹ:Xử lý Lỗi Một cách Linh hoạt
Luôn bọc các hoạt động rủi ro:Lọc Sự kiện Sớm
Trả về sớm nếu sự kiện không liên quan:Sử dụng Các Khóa Sự kiện Cụ thể
Chỉ định các sự kiện chính xác trong metadata khi có thể:Gỡ lỗi
Bật Ghi nhật ký Hook
Gateway ghi lại việc tải hook khi khởi động:Kiểm tra Phát hiện
Liệt kê tất cả các hooks đã phát hiện:Kiểm tra Đăng ký
Trong handler của bạn, ghi nhật ký khi nó được gọi:Xác minh Đủ điều kiện
Kiểm tra lý do một hook không đủ điều kiện:Kiểm tra
Nhật ký Gateway
Theo dõi nhật ký gateway để xem thực thi hook:Kiểm tra Hooks Trực tiếp
Kiểm tra handlers của bạn trong môi trường cô lập:Kiến trúc
Các thành phần cốt lõi
src/hooks/types.ts: Định nghĩa kiểusrc/hooks/workspace.ts: Quét và tải thư mụcsrc/hooks/frontmatter.ts: Phân tích metadata HOOK.mdsrc/hooks/config.ts: Kiểm tra đủ điều kiệnsrc/hooks/hooks-status.ts: Báo cáo trạng tháisrc/hooks/loader.ts: Tải module độngsrc/cli/hooks-cli.ts: Lệnh CLIsrc/gateway/server-startup.ts: Tải hooks khi gateway khởi độngsrc/auto-reply/reply/commands-core.ts: Kích hoạt sự kiện lệnh
Luồng Phát hiện
Luồng Sự kiện
Khắc phục sự cố
Hook Không Được Phát hiện
-
Kiểm tra cấu trúc thư mục:
-
Xác minh định dạng HOOK.md:
-
Liệt kê tất cả các hooks đã phát hiện:
Hook Không Đủ điều kiện
Kiểm tra yêu cầu:- Binaries (kiểm tra PATH)
- Biến môi trường
- Giá trị cấu hình
- Tương thích hệ điều hành
Hook Không Thực thi
-
Xác minh hook đã được bật:
- Khởi động lại quá trình gateway của bạn để hooks tải lại.
-
Kiểm tra nhật ký gateway để tìm lỗi:
Lỗi Handler
Kiểm tra lỗi TypeScript/import:Hướng dẫn Di chuyển
Từ Cấu hình Cũ sang Phát hiện
Trước:-
Tạo thư mục hook:
-
Tạo HOOK.md:
-
Cập nhật cấu hình:
-
Xác minh và khởi động lại quá trình gateway của bạn:
- Phát hiện tự động
- Quản lý CLI
- Kiểm tra đủ điều kiện
- Tài liệu tốt hơn
- Cấu trúc nhất quán