defineToolPlugin khi
plugin sở hữu một danh sách công cụ cố định và bạn muốn OpenClaw tạo metadata manifest
giúp các công cụ đó có thể được khám phá mà không cần tải mã runtime.
Luồng được khuyến nghị là:
- Tạo khung package bằng
openclaw plugins init. - Viết công cụ bằng
defineToolPlugin. - Build JavaScript.
- Tạo metadata
openclaw.plugin.jsonvàpackage.jsonbằngopenclaw plugins build. - Xác thực metadata đã tạo trước khi phát hành hoặc cài đặt.
Yêu cầu
- Node >= 22.
- Đầu ra package TypeScript ESM.
typeboxcho schema cấu hình và tham số công cụ.openclaw >=2026.5.17, phiên bản OpenClaw đầu tiên exportopenclaw/plugin-sdk/tool-plugin.- Một thư mục gốc package có thể phân phối
dist/,openclaw.plugin.json, vàpackage.json.
typebox ở runtime, vì vậy hãy giữ typebox trong
dependencies, không chỉ trong devDependencies.
Bắt đầu nhanh
Tạo một package plugin mới:src/index.ts: một entrydefineToolPluginvới công cụecho.src/index.test.ts: một bài test metadata nhỏ.tsconfig.json: đầu ra TypeScript NodeNext vàodist/.package.json: script, dependency runtime, vàopenclaw.extensions: ["./dist/index.js"].openclaw.plugin.json: metadata manifest được tạo cho công cụ ban đầu.
Viết một công cụ
defineToolPlugin nhận định danh 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 luận 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 allowlist công cụ một cách rõ ràng trước khi nó
được gửi tới mô hình:
openclaw plugins build ghi entry manifest toolMetadata.<tool>.optional
tương ứng, để OpenClaw có thể khám phá công cụ mà không cần tải mã runtime
của plugin.
Dùng factory khi một công cụ cần ngữ cảnh công cụ runtime trước khi có thể được
tạo. Factory giữ metadata ở dạng tĩnh trong khi cho phép công cụ từ chối một
lần chạy cụ thể, kiểm tra trạng thái sandbox, hoặc bind các helper 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, lệnh, hoặc các bề mặt runtime khác.
Giá trị trả về
defineToolPlugin bọc các giá trị trả về thuần vào định dạng kết quả công cụ
của OpenClaw:
- Trả về chuỗi khi mô hình cần thấy đúng văn bản đó.
- Trả về một giá trị tương thích 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 tái sử dụng
một implementation api.registerTool hiện có. Dùng definePluginEntry thay vì
defineToolPlugin khi bạn cần công cụ hoàn toàn động hoặc plugin có nhiều
năng lực.
Cấu hình
configSchema là tùy chọn. Nếu bạn bỏ qua nó, OpenClaw dùng schema object rỗng
nghiêm ngặt và manifest được tạo vẫn bao gồm configSchema.
configSchema, đối số execute thứ hai được định kiểu từ
schema:
Metadata được tạo
OpenClaw khám phá các plugin đã cài đặt từ metadata lạnh. Nó phải có thể đọc manifest plugin trước khi import mã runtime của plugin. Vì vậydefineToolPlugin
phơi bày metadata tĩnh, và openclaw plugins build ghi metadata đó
vào package.
Chạy generator sau khi thay đổi id, tên, mô tả, schema cấu hình,
activation, 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.
Nếu manifest đã lỗi thời, công cụ có thể bị thiếu khỏi khám phá hoặc plugin sai
có thể bị quy trách nhiệm cho lỗi đăng ký.
Metadata package
Đối với workflow plugin công cụ đơn giản,openclaw plugins build căn chỉnh
package.json với entry runtime đơn đã chọn:
./dist/index.js cho các package đã cài đặt. Entry
mã nguồn hữu ích trong phát triển workspace, nhưng package đã phát hành không nên
phụ thuộc vào việc tải runtime TypeScript.
Xác thực trong CI
Dùngplugins build --check để làm CI thất bại khi metadata được tạo đã lỗi thời mà không
ghi lại tệp:
plugins validate kiểm tra rằng:
openclaw.plugin.jsontồn tại và vượt qua loader manifest thông thường.- Entry hiện tại export metadata
defineToolPlugin. - Các trường manifest được tạo khớp với metadata entry.
contracts.toolskhớp với tên công cụ đã khai báo.package.jsontrỏopenclaw.extensionstới entry 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, cài đặt đường dẫn package:Phát hành
Phát hành qua ClawHub khi package đã sẵn sàng:Khắc phục sự cố
plugin entry not found: ./dist/index.js
Tệp entry đã 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
Entry không export một giá trị được tạo bởi defineToolPlugin. Kiểm tra rằng
default export của module là kết quả defineToolPlugin(...), hoặc truyền đúng
entry bằng --entry.
openclaw.plugin.json generated metadata is stale
Manifest không còn khớp với metadata entry. Chạy:
openclaw.plugin.json và package.json.
package.json openclaw.extensions must include ./dist/index.js
Metadata package trỏ tới một entry runtime khác. Chạy
openclaw plugins build --entry ./dist/index.js để generator căn chỉnh
metadata package với entry bạn định phân phối.
Cannot find package 'typebox'
Plugin đã build import typebox ở runtime. Giữ typebox trong
dependencies, cài đặt lại dependency package, build lại, và chạy lại xác thực.
Công cụ không xuất hiện sau khi cài đặt
Kiểm tra những mục này 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ụ 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.