defineToolPlugin xây dựng một plugin chỉ bổ sung các công cụ mà tác tử có thể gọi: không có
kênh, nhà cung cấp mô hình, hook, dịch vụ hoặc backend thiết lập. Nó tạo siêu dữ liệu
manifest mà OpenClaw cần để khám phá các công cụ mà không tải mã runtime của
plugin.
Đối với các plugin nhà cung cấp, kênh, hook, dịch vụ hoặc plugin có nhiều khả năng kết hợp, hãy bắt đầu với
Xây dựng plugin, Plugin kênh,
hoặc Plugin nhà cung cấp.
Yêu cầu
- Node 22.22.3+, Node 24.15+ hoặc Node 25.9+.
- Đầu ra gói TypeScript ESM.
typeboxtrongdependencies(không chỉdevDependencies— plugin được tạo sẽ nhập gói này trong runtime).openclaw >=2026.5.17, phiên bản đầu tiên xuấtopenclaw/plugin-sdk/tool-plugin.- Một thư mục gốc của gói phân phối
dist/,openclaw.plugin.jsonvàpackage.json.
Bắt đầu nhanh
plugins init tạo khung:
npm run plugin:build chạy npm run build (tsc), sau đó chạy
openclaw plugins build --entry ./dist/index.js. npm run plugin:validate
xây dựng lại và chạy openclaw plugins validate --entry ./dist/index.js.
Khi xác thực thành công, kết quả sau được in ra:
openclaw plugins init <id>:
Viết một công cụ
defineToolPlugin nhận danh tính plugin, một schema cấu hình tùy chọn và một
danh sách công cụ tĩnh. Kiểu tham số và cấu hình được suy ra từ các
schema TypeBox.
Công cụ tùy chọn và công cụ factory
Đặtoptional: true khi người dùng cần đưa công cụ vào danh sách cho phép một cách rõ ràng trước khi
gửi công cụ đó đến mô hình. openclaw plugins build ghi mục manifest
toolMetadata.<tool>.optional tương ứng để OpenClaw có thể nhận biết rằng
công cụ này là tùy chọn mà không tải mã runtime của plugin.
factory khi một công cụ cần ngữ cảnh công cụ runtime trước khi có thể được
tạo — để loại công cụ khỏi một lượt chạy cụ thể, kiểm tra trạng thái sandbox hoặc liên kết
các trình trợ giúp runtime. Siêu dữ liệu vẫn ở dạng tĩnh dù công cụ cụ thể được xây dựng
trong runtime.
definePluginEntry
khi plugin tính toán tên công cụ một cách động hoặc kết hợp công cụ
với hook, dịch vụ, nhà cung cấp hoặc lệnh.
Giá trị trả về
defineToolPlugin đóng gói các giá trị trả về thuần túy theo định dạng kết quả công cụ
của OpenClaw:
- Trả về một chuỗi khi mô hình cần thấy chính xác văn bản đó.
- Trả về một giá trị tương thích với JSON khi bạn muốn mô hình thấy JSON đã định dạng
và OpenClaw giữ giá trị gốc trong
details.
AgentToolResult tùy chỉnh hoặc muốn tái sử dụng một
triển khai api.registerTool hiện có.
Hợp đồng đầu ra
ThêmoutputSchema khi một công cụ trả về dữ liệu tương thích với JSON và ổn định. Schema này mô tả
giá trị gốc được lưu trong AgentToolResult.details, không phải văn bản đã định dạng
trong content:
details cuối cùng sau các hook công cụ trước khi trả về qua cầu nối.
Schema không hợp lệ khiến công cụ không thể chạy; kết quả không khớp khiến lệnh gọi đã hoàn tất
thất bại. Hãy bao gồm mọi biến thể kết quả không ném lỗi, kể cả các biến thể lỗi
có cấu trúc, hoặc bỏ qua schema khi kết quả không ổn định. Không đưa thông tin bí mật
hoặc giá trị nhạy cảm vào phần mô tả schema vì siêu dữ liệu đầu ra đáng tin cậy có thể
hiển thị cho mô hình.
Sử dụng { additionalProperties: false } trên các lớp đối tượng khi bạn muốn một
gợi ý đầu ra nhỏ gọn và đầy đủ; các schema mở hoặc bị cắt bớt vẫn khả dụng thông qua
tools.describe(...) nhưng không được quảng bá là hợp đồng chỉ mục nhanh đầy đủ.
Các công cụ factory khai báo outputSchema trên AnyAgentTool cụ thể mà chúng
trả về. Khai báo tool({ factory }) tĩnh không chấp nhận một
schema đầu ra riêng vì schema đó có thể lệch khỏi công cụ runtime.
Cấu hình
configSchema là tùy chọn. Nếu bỏ qua, OpenClaw áp dụng một schema đối tượng rỗng nghiêm ngặt;
manifest được tạo vẫn bao gồm configSchema.
configSchema, đối số execute thứ hai được định kiểu từ schema đó:
Siêu dữ liệu được tạo
OpenClaw phải đọc manifest plugin trước khi nhập mã runtime của plugin.defineToolPlugin cung cấp siêu dữ liệu tĩnh cho mục đích này và
openclaw plugins build ghi siêu dữ liệu đó vào gói. Chạy lại trình tạo sau khi
thay đổi id, tên, mô tả, schema cấu hình, điều kiện kích hoạt hoặc tên công cụ
của plugin:
contracts.tools là hợp đồng khám phá quan trọng: nó cho OpenClaw biết plugin nào
sở hữu từng công cụ mà không cần tải runtime của mọi plugin đã cài đặt. Một
manifest lỗi thời có thể khiến công cụ không xuất hiện trong quá trình khám phá hoặc khiến lỗi đăng ký
bị quy cho sai plugin.
Siêu dữ liệu gói
openclaw plugins build cũng căn chỉnh package.json theo điểm vào runtime
đã chọn:
./dist/index.js), không phải điểm vào mã nguồn TypeScript.
Điểm vào mã nguồn chỉ hoạt động khi phát triển cục bộ trong workspace.
Xác thực trong CI
plugins build --check sẽ thất bại mà không ghi lại tệp khi siêu dữ liệu được tạo
đã lỗi thời:
plugins validate kiểm tra rằng:
openclaw.plugin.jsontồn tại và vượt qua trình tải manifest thông thường.- Điểm vào hiện tại xuất siêu dữ liệu
defineToolPlugin. - Các trường manifest được tạo khớp với siêu dữ liệu của điểm vào.
contracts.toolskhớp với các tên công cụ đã khai báo.package.jsontrỏopenclaw.extensionsđến điểm vào runtime đã chọn.
Cài đặt và kiểm tra cục bộ
Từ một checkout OpenClaw riêng hoặc CLI đã cài đặt, hãy cài đặt đường dẫn gói:Phát hành
Phát hành qua ClawHub sau khi gói đã sẵn sàng.clawhub package publish
nhận một nguồn: thư mục cục bộ, kho lưu trữ GitHub (owner/repo[@ref]) hoặc
URL tarball.
Khắc phục sự cố
plugin entry not found: ./dist/index.js
Tệp mục nhập đã chọn không tồn tại. Chạy npm run build, sau đó chạy lại
openclaw plugins build --entry ./dist/index.js hoặc
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
Mục nhập không xuất giá trị được tạo bởi defineToolPlugin. Hãy xác nhận rằng
phần xuất mặc định của mô-đun là kết quả defineToolPlugin(...), hoặc truyền
mục nhập chính xác bằng --entry.
openclaw.plugin.json generated metadata is stale
Tệp kê khai không còn khớp với siêu dữ liệu mục nhập. Chạy:
openclaw.plugin.json và package.json.
package.json openclaw.extensions must include ./dist/index.js
Siêu dữ liệu gói trỏ đến một mục nhập runtime khác. Chạy
openclaw plugins build --entry ./dist/index.js để trình tạo căn chỉnh
siêu dữ liệu gói với mục nhập bạn định phát hành.
Cannot find package 'typebox'
Plugin đã xây dựng nhập typebox trong thời gian chạy. Giữ nó trong dependencies,
cài đặt lại, xây dựng lại và chạy lại quy trình xác thực.
Công cụ không xuất hiện sau khi cài đặt
Kiểm tra các mục sau theo thứ tự:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsoncócontracts.toolsvới tên công cụ như dự kiến.package.jsoncóopenclaw.extensions: ["./dist/index.js"].- Gateway đã được khởi động lại hoặc tải lại sau khi cài đặt plugin.