Skip to main content

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 webhooks cho các lệnh trợ giúp Gmail.
Hooks cũng có thể được đóng gói bên trong plugins; xem Plugin hooks. Các ứng dụng phổ biến:
  • 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
Nếu bạn có thể viết một hàm TypeScript nhỏ, bạn có thể viết một hook. Hooks được phát hiện tự động và bạn có thể bật hoặc tắt chúng qua CLI.

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.md khi gateway khởi động (yêu cầu bật hooks nội bộ)
Liệt kê các hooks có sẵn:
Bật một hook:
Kiểm tra trạng thái hook:
Lấy thông tin chi tiết:

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):
  1. Workspace hooks: <workspace>/hooks/ (mỗi agent, ưu tiên cao nhất)
  2. Managed hooks: ~/.openclaw/hooks/ (người dùng cài đặt, chia sẻ giữa các workspace)
  3. Bundled hooks: <openclaw>/dist/hooks/bundled/ (đi kèm với OpenClaw)
Các thư mục hook được quản lý có thể là một hook đơn hoặc một gói hook (thư mục package). Mỗi hook là một thư mục chứa:

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 qua openclaw.hooks trong package.json. Cài đặt chúng với:
Các spec npm chỉ có trong registry (tên package + phiên bản chính xác tùy chọn hoặc dist-tag). Các spec Git/URL/file và phạm vi semver bị từ chối. Các spec trần và @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:
Mỗi mục trỏ đến một thư mục hook chứa HOOK.mdhandler.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ệp HOOK.md chứa metadata trong YAML frontmatter cộng với tài liệu Markdown:

Trường Metadata

Đối tượng metadata.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ệu
  • requires: Yêu cầu tùy chọn
    • bins: 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ặt
    • env: Các biến môi trường yêu cầu
    • config: 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ệp handler.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ành
  • command:reset: Khi lệnh /reset được phát hành
  • command: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
Payload hook nội bộ phát ra các sự kiện này dưới dạng 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:beforesession:compact:after.

Sự kiện Agent

  • agent:bootstrap: Trước khi các tệp bootstrap workspace được chèn (hooks có thể thay đổi context.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, transcript chứ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ặc undefined để 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/token
  • after_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 đầu
  • session:end: Khi một session kết thúc
  • agent: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:
Lưu ý: 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:
  1. Sử dụng mục nhập session trước khi reset để xác định bản ghi chính xác
  2. Trích xuất 15 dòng hội thoại cuối cùng
  3. Sử dụng LLM để tạo tên tệp mô tả
  4. Lưu metadata session vào tệp bộ nhớ có ngày
Ví dụ đầu ra:
Ví dụ tên tệp:
  • 2026-01-16-vendor-pitch.md
  • 2026-01-16-api-design.md
  • 2026-01-16-1430.md (dấu thời gian dự phòng nếu tạo tên thất bại)
Bật:

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:
Ghi chú:
  • 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.mdTOOLS.md chỉ).
Bật:

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:
  1. 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)
  2. Thêm vào tệp nhật ký ở định dạng JSONL
  3. Chạy âm thầm trong nền
Ví dụ mục nhật ký:
Xem nhật ký:
Bật:

boot-md

Chạy BOOT.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:
  1. Đọc BOOT.md từ workspace của bạn
  2. Chạy các hướng dẫn qua agent runner
  3. 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
Bật:

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ể:
Thay vì:

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:
Tìm các yêu cầu thiếu trong đầu ra.

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ểu
  • src/hooks/workspace.ts: Quét và tải thư mục
  • src/hooks/frontmatter.ts: Phân tích metadata HOOK.md
  • src/hooks/config.ts: Kiểm tra đủ điều kiện
  • src/hooks/hooks-status.ts: Báo cáo trạng thái
  • src/hooks/loader.ts: Tải module động
  • src/cli/hooks-cli.ts: Lệnh CLI
  • src/gateway/server-startup.ts: Tải hooks khi gateway khởi động
  • src/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

  1. Kiểm tra cấu trúc thư mục:
  2. Xác minh định dạng HOOK.md:
  3. 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:
Tìm các yêu cầu thiế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

  1. Xác minh hook đã được bật:
  2. Khởi động lại quá trình gateway của bạn để hooks tải lại.
  3. 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:
Sau:
  1. Tạo thư mục hook:
  2. Tạo HOOK.md:
  3. Cập nhật cấu hình:
  4. Xác minh và khởi động lại quá trình gateway của bạn:
Lợi ích của việc di chuyể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

Xem thêm

Lần sửa đổi cuối 22 tháng 3, 2026