SDK plugin là hợp đồng có kiểu giữa plugin và lõi. Trang này là tài liệu tham chiếu về những gì cần import và những gì bạn có thể đăng ký.Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Trang này dành cho tác giả plugin dùng
openclaw/plugin-sdk/* bên trong
OpenClaw. Với ứng dụng ngoài, script, dashboard, tác vụ CI và phần mở rộng IDE
muốn chạy agent thông qua Gateway, hãy dùng
OpenClaw App SDK và gói @openclaw/sdk
thay thế.Quy ước import
Luôn import từ một đường dẫn con cụ thể:openclaw/plugin-sdk/channel-core; giữ openclaw/plugin-sdk/core cho
bề mặt bao quát rộng hơn và các helper dùng chung như
buildChannelConfigSchema.
Với cấu hình kênh, hãy xuất bản JSON Schema do kênh sở hữu thông qua
openclaw.plugin.json#channelConfigs. Đường dẫn con plugin-sdk/channel-config-schema
dành cho các primitive schema dùng chung và builder tổng quát. Các plugin
đóng gói sẵn của OpenClaw dùng plugin-sdk/bundled-channel-config-schema cho các
schema kênh đóng gói sẵn được giữ lại. Các export tương thích đã lỗi thời vẫn còn trên
plugin-sdk/channel-config-schema-legacy; cả hai đường dẫn con schema đóng gói sẵn đều không phải là
mẫu cho plugin mới.
Tài liệu tham chiếu đường dẫn con
SDK plugin được cung cấp dưới dạng một tập các đường dẫn con hẹp được nhóm theo lĩnh vực (entry plugin, kênh, nhà cung cấp, xác thực, runtime, capability, bộ nhớ và các helper plugin đóng gói sẵn được dự trữ). Để xem danh mục đầy đủ — được nhóm và liên kết — hãy xem Đường dẫn con SDK Plugin. Kho entrypoint của trình biên dịch nằm trongscripts/lib/plugin-sdk-entrypoints.json; package export được tạo từ
tập con công khai sau khi trừ các đường dẫn con kiểm thử/nội bộ cục bộ của repo được liệt kê trong
scripts/lib/plugin-sdk-private-local-only-subpaths.json. Chạy
pnpm plugin-sdk:surface để kiểm tra số lượng export công khai. Các đường dẫn con công khai đã lỗi thời
đủ cũ và không được mã production của phần mở rộng đóng gói sẵn dùng
được theo dõi trong scripts/lib/plugin-sdk-deprecated-public-subpaths.json; các barrel
re-export đã lỗi thời phạm vi rộng được theo dõi trong
scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json.
API đăng ký
Callbackregister(api) nhận một đối tượng OpenClawPluginApi với các
phương thức sau:
Đăng ký capability
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerProvider(...) | Suy luận văn bản (LLM) |
api.registerAgentHarness(...) | Bộ thực thi agent cấp thấp thử nghiệm |
api.registerCliBackend(...) | Backend suy luận CLI cục bộ |
api.registerChannel(...) | Kênh nhắn tin |
api.registerSpeechProvider(...) | Tổng hợp chuyển văn bản thành giọng nói / STT |
api.registerRealtimeTranscriptionProvider(...) | Phiên âm thời gian thực dạng streaming |
api.registerRealtimeVoiceProvider(...) | Phiên giọng nói thời gian thực hai chiều |
api.registerMediaUnderstandingProvider(...) | Phân tích hình ảnh/âm thanh/video |
api.registerImageGenerationProvider(...) | Tạo hình ảnh |
api.registerMusicGenerationProvider(...) | Tạo nhạc |
api.registerVideoGenerationProvider(...) | Tạo video |
api.registerWebFetchProvider(...) | Nhà cung cấp tải / scrape web |
api.registerWebSearchProvider(...) | Tìm kiếm web |
Công cụ và lệnh
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerTool(tool, opts?) | Công cụ agent (bắt buộc hoặc { optional: true }) |
api.registerCommand(def) | Lệnh tùy chỉnh (bỏ qua LLM) |
agentPromptGuidance khi agent cần một gợi ý định tuyến ngắn
do lệnh sở hữu. Giữ văn bản đó xoay quanh chính lệnh; không thêm
chính sách riêng cho nhà cung cấp hoặc plugin vào trình xây dựng prompt lõi.
Hạ tầng
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerHook(events, handler, opts?) | Hook sự kiện |
api.registerHttpRoute(params) | Endpoint HTTP của Gateway |
api.registerGatewayMethod(name, handler) | Phương thức RPC của Gateway |
api.registerGatewayDiscoveryService(service) | Bộ quảng bá khám phá Gateway cục bộ |
api.registerCli(registrar, opts?) | Lệnh con CLI |
api.registerNodeCliFeature(registrar, opts?) | CLI tính năng Node dưới openclaw nodes |
api.registerService(service) | Dịch vụ nền |
api.registerInteractiveHandler(registration) | Handler tương tác |
api.registerAgentToolResultMiddleware(...) | Middleware kết quả công cụ runtime |
api.registerMemoryPromptSupplement(builder) | Phần prompt bổ sung liền kề bộ nhớ |
api.registerMemoryCorpusSupplement(adapter) | Corpus tìm kiếm/đọc bộ nhớ bổ sung |
Hook host cho plugin workflow
Hook host là các điểm nối SDK cho plugin cần tham gia vào vòng đời host thay vì chỉ thêm một nhà cung cấp, kênh hoặc công cụ. Chúng là hợp đồng tổng quát; Plan Mode có thể dùng chúng, nhưng workflow phê duyệt, cổng chính sách workspace, trình giám sát nền, trình hướng dẫn thiết lập và plugin đồng hành UI cũng có thể dùng.| Phương thức | Hợp đồng mà phương thức sở hữu |
|---|---|
api.session.state.registerSessionExtension(...) | Trạng thái phiên do plugin sở hữu, tương thích JSON, được chiếu qua phiên Gateway |
api.session.workflow.enqueueNextTurnInjection(...) | Ngữ cảnh bền vững đúng một lần được tiêm vào lượt agent tiếp theo cho một phiên |
api.registerTrustedToolPolicy(...) | Chính sách công cụ trước plugin đóng gói sẵn/được tin cậy có thể chặn hoặc viết lại tham số công cụ |
api.registerToolMetadata(...) | Siêu dữ liệu hiển thị danh mục công cụ mà không thay đổi phần triển khai công cụ |
api.registerCommand(...) | Lệnh plugin theo phạm vi; kết quả lệnh có thể đặt continueAgent: true; lệnh native Discord hỗ trợ descriptionLocalizations |
api.session.controls.registerControlUiDescriptor(...) | Descriptor đóng góp UI điều khiển cho bề mặt phiên, công cụ, lượt chạy hoặc cài đặt |
api.lifecycle.registerRuntimeLifecycle(...) | Callback dọn dẹp cho tài nguyên runtime do plugin sở hữu trên các đường dẫn reset/xóa/tải lại |
api.agent.events.registerAgentEventSubscription(...) | Đăng ký sự kiện đã được làm sạch cho trạng thái workflow và trình giám sát |
api.runContext.setRunContext(...) / getRunContext(...) / clearRunContext(...) | Trạng thái tạm của plugin theo từng lượt chạy, được xóa khi vòng đời lượt chạy kết thúc |
api.session.workflow.registerSessionSchedulerJob(...) | Siêu dữ liệu dọn dẹp cho tác vụ scheduler do plugin sở hữu; không lên lịch công việc hoặc tạo bản ghi tác vụ |
api.session.workflow.sendSessionAttachment(...) | Chỉ dành cho gói đóng sẵn: phân phối tệp đính kèm qua host tới tuyến phiên gửi trực tiếp đang hoạt động |
api.session.workflow.scheduleSessionTurn(...) / unscheduleSessionTurnsByTag(...) | Chỉ dành cho gói đóng sẵn: lượt phiên đã lên lịch dựa trên Cron cộng với dọn dẹp theo thẻ |
api.session.controls.registerSessionAction(...) | Hành động phiên có kiểu mà client có thể dispatch thông qua Gateway |
api.session.state.registerSessionExtension(...)api.session.workflow.enqueueNextTurnInjection(...)api.session.workflow.registerSessionSchedulerJob(...)api.session.workflow.sendSessionAttachment(...)api.session.workflow.scheduleSessionTurn(...)api.session.workflow.unscheduleSessionTurnsByTag(...)api.session.controls.registerSessionAction(...)api.session.controls.registerControlUiDescriptor(...)api.agent.events.registerAgentEventSubscription(...)api.agent.events.emitAgentEvent(...)api.runContext.setRunContext(...)/getRunContext(...)/clearRunContext(...)api.lifecycle.registerRuntimeLifecycle(...)
api.registerSessionExtension, api.enqueueNextTurnInjection,
api.registerControlUiDescriptor, api.registerRuntimeLifecycle,
api.registerAgentEventSubscription, api.emitAgentEvent,
api.setRunContext, api.getRunContext, api.clearRunContext,
api.registerSessionSchedulerJob, api.registerSessionAction,
api.sendSessionAttachment, api.scheduleSessionTurn, hoặc
api.unscheduleSessionTurnsByTag.
scheduleSessionTurn(...) là tiện ích theo phạm vi phiên nằm trên trình lập lịch Cron của Gateway. Cron sở hữu việc định thời và tạo bản ghi tác vụ nền khi lượt chạy; Plugin SDK chỉ ràng buộc phiên đích, cách đặt tên do plugin sở hữu, và dọn dẹp. Dùng api.runtime.tasks.managedFlows bên trong lượt đã lên lịch khi chính công việc cần trạng thái TaskFlow nhiều bước bền vững.
Các hợp đồng cố ý tách quyền hạn:
- Plugin bên ngoài có thể sở hữu phần mở rộng phiên, bộ mô tả UI, lệnh, siêu dữ liệu công cụ, chèn lượt kế tiếp, và các hook thông thường.
- Chính sách công cụ đáng tin cậy chạy trước các hook
before_tool_callthông thường và chỉ dành cho bundled vì chúng tham gia vào chính sách an toàn của máy chủ. - Quyền sở hữu lệnh dành riêng chỉ dành cho bundled. Plugin bên ngoài nên dùng tên lệnh hoặc bí danh riêng của chúng.
allowPromptInjection=falsetắt các hook làm thay đổi prompt, bao gồmagent_turn_prepare,before_prompt_build,heartbeat_prompt_contribution, các trường prompt từbefore_agent_startcũ, vàenqueueNextTurnInjection.
| Mẫu Plugin | Hook được dùng |
|---|---|
| Quy trình phê duyệt | Phần mở rộng phiên, tiếp tục lệnh, chèn lượt kế tiếp, bộ mô tả UI |
| Cổng chính sách ngân sách/không gian làm việc | Chính sách công cụ đáng tin cậy, siêu dữ liệu công cụ, chiếu phiên |
| Trình giám sát vòng đời nền | Dọn dẹp vòng đời runtime, đăng ký sự kiện agent, quyền sở hữu/dọn dẹp trình lập lịch phiên, đóng góp Heartbeat prompt, bộ mô tả UI |
| Trình hướng dẫn thiết lập hoặc onboarding | Phần mở rộng phiên, lệnh có phạm vi, bộ mô tả UI điều khiển |
Các namespace quản trị lõi dành riêng (
config.*, exec.approvals.*, wizard.*,
update.*) luôn giữ operator.admin, ngay cả khi một plugin cố gắng gán phạm vi phương thức Gateway
hẹp hơn. Ưu tiên tiền tố dành riêng cho plugin đối với các phương thức do
plugin sở hữu.Khi nào dùng middleware kết quả công cụ
Khi nào dùng middleware kết quả công cụ
Bundled plugin có thể dùng
api.registerAgentToolResultMiddleware(...) khi
chúng cần ghi lại kết quả công cụ sau khi thực thi và trước khi runtime
đưa kết quả đó trở lại vào mô hình. Đây là seam đáng tin cậy, trung lập runtime
cho các bộ rút gọn đầu ra bất đồng bộ như tokenjuice.Bundled plugin phải khai báo contracts.agentToolResultMiddleware cho từng
runtime đích, ví dụ ["pi", "codex"]. Plugin bên ngoài
không thể đăng ký middleware này; hãy giữ các hook Plugin OpenClaw thông thường cho công việc
không cần định thời kết quả công cụ trước mô hình. Đường dẫn đăng ký factory
phần mở rộng nhúng chỉ dành cho Pi cũ đã bị xóa.Đăng ký khám phá Gateway
api.registerGatewayDiscoveryService(...) cho phép một plugin quảng bá Gateway
đang hoạt động trên một phương thức truyền tải khám phá cục bộ như mDNS/Bonjour. OpenClaw gọi
dịch vụ trong quá trình khởi động Gateway khi khám phá cục bộ được bật, truyền
các cổng Gateway hiện tại và dữ liệu gợi ý TXT không bí mật, rồi gọi handler
stop được trả về trong quá trình tắt Gateway.
Siêu dữ liệu đăng ký CLI
api.registerCli(registrar, opts?) chấp nhận hai loại siêu dữ liệu lệnh:
commands: tên lệnh rõ ràng do registrar sở hữudescriptors: bộ mô tả lệnh tại thời điểm phân tích cú pháp dùng cho trợ giúp CLI, định tuyến, và đăng ký CLI plugin tải lườiparentPath: đường dẫn lệnh cha tùy chọn cho các nhóm lệnh lồng nhau, chẳng hạn["nodes"]
api.registerNodeCliFeature(registrar, opts?). Đây là wrapper nhỏ quanh
api.registerCli(..., { parentPath: ["nodes"] }) và làm cho các lệnh như
openclaw nodes canvas trở thành các tính năng node do plugin sở hữu một cách rõ ràng.
Nếu bạn muốn một lệnh plugin vẫn được tải lười trong đường dẫn CLI root thông thường,
hãy cung cấp descriptors bao phủ mọi root lệnh cấp cao nhất do
registrar đó phơi bày.
program:
commands khi bạn không cần đăng ký CLI root tải lười.
Đường dẫn tương thích tải ngay đó vẫn được hỗ trợ, nhưng nó không cài đặt
placeholder dựa trên descriptor cho việc tải lười tại thời điểm phân tích cú pháp.
Đăng ký backend CLI
api.registerCliBackend(...) cho phép một plugin sở hữu cấu hình mặc định cho một
backend CLI AI cục bộ như codex-cli.
idcủa backend trở thành tiền tố provider trong model ref nhưcodex-cli/gpt-5.configcủa backend dùng cùng hình dạng vớiagents.defaults.cliBackends.<id>.- Cấu hình người dùng vẫn thắng. OpenClaw hợp nhất
agents.defaults.cliBackends.<id>lên trên mặc định của plugin trước khi chạy CLI. - Dùng
normalizeConfigkhi một backend cần ghi lại tương thích sau khi hợp nhất (ví dụ chuẩn hóa các hình dạng flag cũ). - Dùng
resolveExecutionArgscho các lần ghi lại argv theo phạm vi yêu cầu thuộc về dialect CLI, chẳng hạn ánh xạ mức suy nghĩ của OpenClaw sang flag effort gốc.
Slot độc quyền
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerContextEngine(id, factory) | Context engine (mỗi lúc một cái hoạt động). Callback assemble() nhận availableTools và citationsMode để engine có thể điều chỉnh phần bổ sung prompt. |
api.registerMemoryCapability(capability) | Khả năng bộ nhớ hợp nhất |
api.registerMemoryPromptSection(builder) | Bộ dựng phần prompt bộ nhớ |
api.registerMemoryFlushPlan(resolver) | Bộ phân giải kế hoạch flush bộ nhớ |
api.registerMemoryRuntime(runtime) | Adapter runtime bộ nhớ |
Adapter embedding bộ nhớ
| Phương thức | Nội dung đăng ký |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) | Adapter embedding bộ nhớ cho plugin đang hoạt động |
registerMemoryCapabilitylà API plugin bộ nhớ độc quyền được ưu tiên.registerMemoryCapabilitycũng có thể phơi bàypublicArtifacts.listArtifacts(...)để các plugin đồng hành có thể tiêu thụ artifact bộ nhớ đã xuất thông quaopenclaw/plugin-sdk/memory-host-corethay vì đi vào bố cục riêng tư của một plugin bộ nhớ cụ thể.registerMemoryPromptSection,registerMemoryFlushPlan, vàregisterMemoryRuntimelà các API plugin bộ nhớ độc quyền tương thích cũ.MemoryFlushPlan.modelcó thể ghim lượt flush vào một tham chiếuprovider/modelchính xác, chẳng hạnollama/qwen3:8b, mà không kế thừa chuỗi fallback đang hoạt động.registerMemoryEmbeddingProvidercho phép plugin bộ nhớ đang hoạt động đăng ký một hoặc nhiều id adapter embedding (ví dụopenai,gemini, hoặc một id tùy chỉnh do plugin định nghĩa).- Cấu hình người dùng như
agents.defaults.memorySearch.providervàagents.defaults.memorySearch.fallbackphân giải theo các id adapter đã đăng ký đó.
Sự kiện và vòng đời
| Phương thức | Tác dụng |
|---|---|
api.on(hookName, handler, opts?) | Hook vòng đời có kiểu |
api.onConversationBindingResolved(handler) | Callback binding hội thoại |
Ngữ nghĩa quyết định của hook
before_tool_call: trả về{ block: true }là kết thúc. Khi bất kỳ handler nào đặt giá trị đó, các handler có độ ưu tiên thấp hơn sẽ bị bỏ qua.before_tool_call: trả về{ block: false }được xem là không có quyết định (giống như bỏ quablock), không phải là ghi đè.before_install: trả về{ block: true }là kết thúc. Khi bất kỳ handler nào đặt giá trị đó, các handler có độ ưu tiên thấp hơn sẽ bị bỏ qua.before_install: trả về{ block: false }được xem là không có quyết định (giống như bỏ quablock), không phải là ghi đè.reply_dispatch: trả về{ handled: true, ... }là kết thúc. Khi bất kỳ handler nào nhận dispatch, các handler có độ ưu tiên thấp hơn và đường dẫn dispatch mô hình mặc định sẽ bị bỏ qua.message_sending: trả về{ cancel: true }là kết thúc. Khi bất kỳ handler nào đặt giá trị đó, các handler có độ ưu tiên thấp hơn sẽ bị bỏ qua.message_sending: trả về{ cancel: false }được xem là không có quyết định (giống như bỏ quacancel), không phải là ghi đè.message_received: dùng trường có kiểuthreadIdkhi bạn cần định tuyến thread/topic đến. Giữmetadatacho các phần bổ sung riêng theo kênh.message_sending: dùng các trường định tuyến có kiểureplyToId/threadIdtrước khi fallback sangmetadatariêng theo kênh.gateway_start: dùngctx.config,ctx.workspaceDir, vàctx.getCron?.()cho trạng thái khởi động do gateway sở hữu thay vì dựa vào các hookgateway:startupnội bộ.cron_changed: quan sát các thay đổi vòng đời Cron do gateway sở hữu. Dùngevent.job?.state?.nextRunAtMsvàctx.getCron?.()khi đồng bộ các trình lập lịch đánh thức bên ngoài, và giữ OpenClaw làm nguồn chân lý cho kiểm tra đến hạn và thực thi.
Trường đối tượng API
| Trường | Kiểu | Mô tả |
|---|---|---|
api.id | string | Mã định danh Plugin |
api.name | string | Tên hiển thị |
api.version | string? | Phiên bản Plugin (tùy chọn) |
api.description | string? | Mô tả Plugin (tùy chọn) |
api.source | string | Đường dẫn nguồn Plugin |
api.rootDir | string? | Thư mục gốc của Plugin (tùy chọn) |
api.config | OpenClawConfig | Ảnh chụp nhanh cấu hình hiện tại (ảnh chụp nhanh runtime trong bộ nhớ đang hoạt động khi có sẵn) |
api.pluginConfig | Record<string, unknown> | Cấu hình dành riêng cho Plugin từ plugins.entries.<id>.config |
api.runtime | PluginRuntime | Trình trợ giúp runtime |
api.logger | PluginLogger | Trình ghi log theo phạm vi (debug, info, warn, error) |
api.registrationMode | PluginRegistrationMode | Chế độ tải hiện tại; "setup-runtime" là cửa sổ khởi động/thiết lập nhẹ trước entry đầy đủ |
api.resolvePath(input) | (string) => string | Phân giải đường dẫn tương đối với gốc Plugin |
Quy ước mô-đun nội bộ
Trong Plugin của bạn, hãy dùng các tệp barrel cục bộ cho các import nội bộ:api.ts, runtime-api.ts,
index.ts, setup-entry.ts, và các tệp entry công khai tương tự) ưu tiên ảnh chụp nhanh
cấu hình runtime đang hoạt động khi OpenClaw đã chạy. Nếu chưa có ảnh chụp nhanh runtime,
chúng sẽ fallback về tệp cấu hình đã phân giải trên đĩa.
Các facade Plugin đóng gói đã được package nên được tải thông qua các bộ tải facade Plugin
của OpenClaw; import trực tiếp từ dist/extensions/... sẽ bỏ qua manifest
và các kiểm tra sidecar runtime mà các bản cài đặt đã package dùng cho mã do Plugin sở hữu.
Provider Plugin có thể phơi bày một barrel hợp đồng cục bộ hẹp của Plugin khi một
trình trợ giúp được chủ ý thiết kế riêng cho provider và chưa thuộc về một subpath SDK
chung. Ví dụ đóng gói:
- Anthropic: seam công khai
api.ts/contract-api.tscho các trình trợ giúp stream beta-header Claude vàservice_tier. @openclaw/openai-provider:api.tsxuất các builder provider, trình trợ giúp model mặc định, và builder provider realtime.@openclaw/openrouter-provider:api.tsxuất builder provider cùng các trình trợ giúp onboarding/cấu hình.
Liên quan
Entry point
Các tùy chọn
definePluginEntry và defineChannelPluginEntry.Trình trợ giúp runtime
Tham chiếu đầy đủ cho namespace
api.runtime.Thiết lập và cấu hình
Đóng gói, manifest và schema cấu hình.
Kiểm thử
Tiện ích kiểm thử và quy tắc lint.
Di chuyển SDK
Di chuyển khỏi các bề mặt đã ngừng dùng.
Nội bộ Plugin
Kiến trúc chuyên sâu và mô hình capability.