Các hook
Hooks cung cấp một hệ thống hướng sự kiện có thể mở rộng để tự động hóa các hành động nhằm 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 skills hoạt động trong OpenClaw.Làm quen
Hooks là các script nhỏ chạy khi có điều gì đó 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 tác tử đượ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 snapshot bộ nhớ khi bạn reset một phiên
- Giữ nhật ký kiểm toán các lệnh để xử lý sự cố hoặc tuân thủ
- Kích hoạt tự động hóa tiếp theo khi một phiên bắt đầu hoặc kết thúc
- Ghi file vào workspace của tác tử hoặc gọi 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 phiên vào bộ nhớ khi
/newđược phát hành - Ghi log tất cả lệnh cho mục đích kiểm toán
- Kích hoạt tự động hóa tùy chỉnh dựa trên các sự kiện vòng đời của tác tử
- 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 bốn hook có sẵn và được tự động phát hiện:- 💾 session-memory: Lưu ngữ cảnh phiên vào workspace của tác tử (mặc định
~/.openclaw/workspace/memory/) khi bạn phát hành/new - 📝 command-logger: Ghi log tất 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 internal hooks) - 😈 soul-evil: Hoán đổi nội dung
SOUL.mdđược inject bằngSOUL_EVIL.mdtrong một cửa sổ purge hoặc ngẫu nhiên
Hướng dẫn ban đầu
Trong quá trình onboarding (openclaw onboard), bạn sẽ được nhắc bật các hook được đề xuất. Trình hướng dẫn tự động phát hiện các hook đủ đ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/(theo từng tác tử, ưu tiên cao nhất) - Managed hooks:
~/.openclaw/hooks/(do người dùng cài đặt, dùng chung giữa các workspace) - Bundled hooks:
<openclaw>/dist/hooks/bundled/(được phân phối cùng OpenClaw)
Gói hook (npm/archives)
- Hook pack là các gói npm tiêu chuẩn, xuất một hoặc nhiều hook thông qua
openclaw.hookstrongpackage.json. 5. Cài đặt chúng bằng:
package.json:
HOOK.md và handler.ts (hoặc index.ts).
6. Hook pack có thể kèm theo dependency; chúng sẽ được cài dưới ~/.openclaw/hooks/<id>.
Lưu ý bảo mật: openclaw hooks install cài đặt các dependency với npm install --ignore-scripts
(không chạy lifecycle scripts). Giữ cây dependency của hook pack ở dạng “pure JS/TS” và tránh các package phụ thuộc vào build postinstall.
Cấu trúc Hook
Định dạng HOOK.md
FileHOOK.md chứa metadata ở dạng YAML frontmatter cùng với tài liệu Markdown:
Trường Metadata
Đối tượngmetadata.openclaw hỗ trợ:
emoji: Emoji hiển thị cho CLI (ví dụ:"💾")events: Mảng các sự kiện cần lắng nghe (ví dụ:["command:new", "command:reset"])export: Named export sẽ sử dụng (mặc định là"default")homepage: URL tài liệurequires: Các yêu cầu tùy chọnbins: Các binary bắt buộc trong PATH (ví dụ:["git", "node"])anyBins: Ít nhất một trong các binary này phải tồn tạienv: Các biến môi trường bắt buộcconfig: Các đường dẫn cấu hình bắt buộc (ví dụ:["workspace.dir"])os: Các nền tảng được yêu cầu (ví dụ:["darwin", "linux"])
always: Bỏ qua kiểm tra đủ điều kiện (boolean)install: Phương thức cài đặt (đối với hook đi kèm:[{"id":"bundled","kind":"bundled"}])
Triển khai Handler
Filehandler.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
Được kích hoạt khi các lệnh của tác tử được phát hành:agent:bootstrap: Trước khi các file bootstrap workspace được inject (hooks có thể thay đổicontext.bootstrapFiles)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 Gateway
agent:bootstrap: Trước khi các file bootstrap workspace được inject (hooks có thể thay đổicontext.bootstrapFiles)
Sự kiện Gateway
Được kích hoạt khi gateway khởi động:gateway:startup: Sau khi các kênh khởi động và hooks được tải
Tool Result Hooks (Plugin API)
Các hook này không phải listener của event-stream; chúng cho phép plugin đồng bộ điều chỉnh kết quả tool trước khi OpenClaw lưu chúng.tool_result_persist: chuyển đổi kết quả của tool trước khi chúng được ghi vào bản ghi phiên làm việc. 7. Phải là đồng bộ; trả về payload kết quả tool đã được cập nhật hoặcundefinedđể giữ nguyên. Xem Agent Loop.
Sự kiện Tương lai
Các loại sự kiện dự kiến:session:start: Khi một phiên mới bắt đầusession:end: Khi một phiên kết thúcagent:error: Khi một tác tử gặp lỗimessage:sent: Khi một tin nhắn được gửimessage:received: Khi một tin nhắn được nhận
Tạo Hook Tùy chỉnh
8. 1. Chọn vị trí
- Workspace hooks (
<workspace>/hooks/): Theo từng tác tử, ưu tiên cao nhất - Managed hooks (
~/.openclaw/hooks/): Dùng chung giữa các workspace
2. Tạo cấu trúc thư mục
3. Tạo HOOK.md
9. 4. Tạo handler.ts
5. Bật và kiểm thử
Cấu hình
Cấu hình Theo Hook
Cấu hình Theo 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 Config Cũ (Vẫn được hỗ trợ)
Định dạng config cũ vẫn hoạt động để tương thích ngược:module phải là đường dẫn tương đối với workspace. Đường dẫn tuyệt đối và việc truy cập ra ngoài workspace đều bị từ chối.
- Migration: Sử dụng hệ thống discovery-based mới cho các hook mới. Các legacy handler được tải sau các hook dựa trên thư mục.
Thông tin Hook
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
Đầu ra:<workspace>/memory/YYYY-MM-DD-slug.md (mặc định ~/.openclaw/workspace)
Cách hoạt động:
Yêu cầu: workspace.dir phải được cấu hình
Ví dụ đầu ra:
Cách hoạt động:
- Sử dụng entry phiên trước khi reset để xác định transcript chính xác
- Trích xuất 15 dòng hội thoại cuối cùng
- Dùng LLM để tạo slug tên file mang tính mô tả
- Lưu metadata phiên vào file bộ nhớ theo ngày
2026-01-16-vendor-pitch.md2026-01-16-api-design.md2026-01-16-1430.md(timestamp dự phòng nếu tạo slug thất bại)
bootstrap-extra-files
Đầu ra:~/.openclaw/logs/commands.log
Cách hoạt động:
Yêu cầu: workspace.dir phải được cấu hình
Ví dụ bản ghi log:
Cấu hình:
- Đường dẫn được phân giải tương đối với workspace.
- Các file phải nằm trong workspace (được kiểm tra realpath).
- Chỉ các basename bootstrap được nhận diện mới được tải.
- Danh sách cho phép subagent được giữ nguyên (
AGENTS.mdvàTOOLS.mdבלבד).
command-logger
Sự kiện:agent:bootstrap
Tài liệu: SOUL Evil Hook
Đầu ra: Không ghi file; việc hoán đổi chỉ diễn ra trong bộ nhớ.
Bật:
Cách hoạt động:
- Thu thập chi tiết sự kiện (hành động lệnh, timestamp, khóa phiên, ID người gửi, nguồn)
- Ghi thêm vào file log theo định dạng JSONL
- Chạy âm thầm trong nền
workspace.dir phải được cấu hình
boot-md
ChạyBOOT.md khi gateway khởi động (sau khi các kênh khởi động).
Các hook 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
Cách hoạt động:
- Đọc
BOOT.mdtừ workspace của bạn - Chạy các hướng dẫn thông qua agent runner
- Gửi mọi tin nhắn outbound được yêu cầu qua message tool
Thực hành Tốt nhất
Giữ Handler Nhanh
Hooks chạy trong quá trình xử lý lệnh. Giữ chúng nhẹ nhàng:Xử lý Lỗi Một cách An toàn
Luôn bao bọc các thao tác rủi ro:Lọc Sự kiện Sớm
Thay vì:Gỡ lỗi
Chỉ định chính xác các sự kiện trong metadata khi có thể:Gỡ lỗi
Bật Log Hook
Gateway ghi log việc tải hook khi khởi động:Kiểm tra Discovery
Liệt kê tất cả hook được phát hiện:Kiểm tra Đăng ký
Tìm các yêu cầu còn thiếu trong đầu ra.Log Gateway
Theo dõi log gateway để xem việc thực thi hook:Kiểm thử
Log Gateway
Theo dõi log gateway để xem việc thực thi hook:Kiểm thử Hook Trực tiếp
Kiểm thử handler của bạn một cách độc lập:Luồng Sự kiện
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: Bộ 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
Hook Không Được Phát hiện
Hook Không Đủ Điều kiện
Xử lý Sự cố
Hook Không Được Phát hiện
-
Binary (kiểm tra PATH)
-
Biến môi trường
-
Giá trị cấu hình
Hook Không Thực thi
Kiểm tra các yêu cầu:- Binary (kiểm tra PATH)
- Biến môi trường
- Giá trị cấu hình
- Khả năng tương thích OS
Hướng dẫn Di chuyển
-
Xác minh hook đã được bật:
- Khởi động lại tiến trình gateway để hook được tải lại.
-
Kiểm tra log gateway để tìm lỗi:
Lỗi Handler
Kiểm tra lỗi TypeScript/import:Hướng dẫn Di chuyển
Từ Config Cũ sang Discovery
Trước:-
Tạo thư mục hook:
-
Tạo HOOK.md:
-
Cập nhật config:
-
Xác minh và khởi động lại tiến trình gateway của bạn:
- Tự động discovery
- Quản lý qua CLI
- Kiểm tra điều kiện
- Tài liệu tốt hơn
- Cấu trúc nhất quán