package.json 中繼資料)、資訊清單(openclaw.plugin.json)、設定進入點及設定結構描述的參考資料。
套件中繼資料
你的package.json 需要一個 openclaw 欄位,告知外掛系統此外掛提供的功能:
- 頻道外掛
- 供應商外掛/ClawHub 基準
在 ClawHub 對外發佈需要
compat 和 build。標準發佈片段位於 docs/snippets/plugin-publish/。openclaw 欄位
string[]
進入點檔案(相對於套件根目錄)。適用於工作區和 git 簽出開發的有效原始碼進入點。
string
輕量的僅設定進入點(選用)。
string
setupEntry 的已建置 JavaScript 對應檔案。也必須設定 setupEntry。object
{ id, label } 備援外掛身分,用於外掛沒有可據以衍生 id 或標籤的頻道/供應商中繼資料時。object
用於設定、選擇器、快速入門及狀態介面的頻道目錄中繼資料。
object
安裝提示:
npmSpec、localPath、defaultChoice、minHostVersion、expectedIntegrity、allowInvalidConfigRecovery、requiredPlatformPackages。object
啟動行為旗標。
object
此外掛支援的
pluginApi 版本範圍。對外發佈至 ClawHub 時為必填。供應商 id(
providers: string[])是資訊清單中繼資料,而非套件中繼資料。請在 openclaw.plugin.json 中宣告,不要在此處宣告——請參閱外掛資訊清單。openclaw.channel
openclaw.channel 是低成本的套件中繼資料,可在執行階段載入前供頻道探索和設定介面使用。
頻道擁有的設定欄位
頻道外掛應在執行階段程式碼中使用defineChannelSetupContract(...) 定義一次設定欄位,並在 openclaw.channel.setup.fields 下發佈相符且可序列化的投影。執行階段定義會推斷外掛本機輸入型別、解析引導式與非互動式值,並避免將頻道專屬鍵納入核心型別。套件中繼資料可讓 openclaw channels add <channel-id> --help 和 openclaw channels add --channel <channel-id> --help 僅探索所選頻道的選項,而不必載入外掛。
string、boolean、integer、string-list 和 choice。認證資訊請使用 sensitive: true。每個欄位鍵都必須等於其長格式命令列介面旗標的駝峰式屬性名稱,包括任何否定形式,例如 --api-token 對應 apiToken。當同時需要肯定與 --no-* 形式時,布林欄位可以加入 cli.negatedFlags。channel、account 及帳號顯示用的 name 仍屬於共用控制封套。
已發佈的 setup/ChannelSetupInput 配接器仍可供現有的外部外掛使用。新外掛應公開 setupContract;兩者皆存在時,OpenClaw 一律優先使用它。
範例:
exposure 支援:
configured:將頻道納入已設定/狀態類型的清單介面setup:將頻道納入互動式設定/配置選擇器docs:在文件/導覽介面中將頻道標記為公開
openclaw.install
openclaw.install 是套件中繼資料,而非資訊清單中繼資料。
新手引導行為
新手引導行為
互動式新手引導會將
openclaw.install 用於隨選安裝介面:如果你的外掛在執行階段載入前公開供應商驗證選項或頻道設定/目錄中繼資料,新手引導可以提示從 ClawHub、npm 或本機安裝、安裝或啟用外掛,然後繼續所選流程。ClawHub 選項使用 clawhubSpec,且存在時為優先選項;npm 選項需要可信任的目錄中繼資料,並包含登錄檔 npmSpec(確切版本與 expectedIntegrity 是選用的鎖定值,設定後會在安裝/更新時強制執行)。將「要顯示什麼」保留在 openclaw.plugin.json,並將「如何安裝」保留在 package.json。minHostVersion 強制執行
minHostVersion 強制執行
如果設定了
minHostVersion,安裝與非隨附的資訊清單登錄檔載入都會強制執行此設定。較舊的主機會略過外部外掛;無效的版本字串會遭拒絕。隨附的原始碼外掛視為與主機簽出版本相同。鎖定的 npm 安裝
鎖定的 npm 安裝
對於鎖定的 npm 安裝,請將確切版本保留在
npmSpec,並加入預期的成品完整性:allowInvalidConfigRecovery 範圍
allowInvalidConfigRecovery 範圍
allowInvalidConfigRecovery 並非損壞設定的一般性略過機制。它僅用於範圍狹窄的隨附外掛復原,讓重新安裝/設定能修復已知的升級殘留問題,例如缺少隨附外掛路徑,或同一外掛存在過時的 channels.<id> 項目。如果設定因不相關原因損壞,安裝仍會以封閉方式失敗,並告知操作人員執行 openclaw doctor --fix。延後完整載入
頻道外掛可使用以下設定選擇延後載入:setupEntry。完整進入點會在閘道開始監聽後載入。
如果你的設定/完整進入點會註冊閘道 RPC 方法,請將它們保留在外掛專用前綴下。保留的核心管理命名空間(config.*、exec.approvals.*、wizard.*、update.*)仍由核心擁有,且一律正規化為 operator.admin。
外掛資訊清單
每個原生外掛都必須在套件根目錄中提供openclaw.plugin.json。OpenClaw 會使用它,在不執行外掛程式碼的情況下驗證設定。
channels(供應商外掛則加入 providers):
發布至 ClawHub
Skills 與外掛套件使用不同的 ClawHub 發布命令。對於外掛套件,請使用套件專用命令:clawhub skill publish <path> 是用於發布 Skill 資料夾的不同命令,而非外掛套件。請參閱在 ClawHub 上發布。設定進入點
setup-entry.ts 是 index.ts 的輕量替代方案,OpenClaw 僅需要設定介面(新手引導、設定修復、停用頻道檢查)時會載入它:
openclaw/plugin-sdk/channel-entry-contract 的 defineBundledChannelSetupEntry(...),而非 defineSetupPluginEntry(...)。該隨附合約也支援選用的 runtime 匯出,使設定期間的執行階段接線能保持輕量且明確。
OpenClaw 何時使用 setupEntry 而非完整進入點
OpenClaw 何時使用 setupEntry 而非完整進入點
- 頻道已停用,但需要設定/新手引導介面。
- 頻道已啟用,但尚未設定。
- 已啟用延後載入(
deferConfiguredChannelFullLoadUntilAfterListen)。
setupEntry 必須註冊的項目
setupEntry 必須註冊的項目
- 頻道外掛物件(透過
defineSetupPluginEntry)。 - 閘道監聽前所需的任何 HTTP 路由。
- 啟動期間所需的任何閘道方法。
config.* 或 update.*。setupEntry 不應包含的項目
setupEntry 不應包含的項目
- 命令列介面註冊。
- 背景服務。
- 繁重的執行階段匯入(加密、SDK)。
- 僅在啟動後才需要的閘道方法。
窄範圍設定輔助程式匯入
對於高頻的純設定路徑,如果只需要設定介面的一部分,請優先使用窄範圍的設定輔助程式介面,而非較廣泛的plugin-sdk/setup 統整介面:
當你需要完整的共用設定工具箱(包括
moveSingleAccountChannelSectionToDefaultAccount(...) 等設定修補輔助程式)時,請使用較廣泛的 plugin-sdk/setup 介面。
將 createSetupTranslator(...) 用於固定的設定精靈文案。它會依序使用 OPENCLAW_LOCALE、LC_ALL、LC_MESSAGES 和 LANG 中第一個非空白值,然後回退至英文。設定 OPENCLAW_LOCALE=en 可明確覆寫英文。將外掛專用的設定文字保留在外掛擁有的程式碼中,並僅將共用目錄鍵用於一般設定標籤、狀態文字,以及官方隨附外掛的設定文案。
設定修補配接器在匯入時仍可安全用於高頻路徑。其隨附的單一帳號提升合約介面查詢採用延遲載入,因此匯入 plugin-sdk/setup-runtime 不會在實際使用配接器前就立即載入隨附合約介面的探索功能。
頻道擁有的設定輸入欄位
ChannelSetupInput 是設定呼叫端與頻道外掛共用的通用封裝。
其永久具型別的欄位為 name、token、tokenFile、
useEnv、allowFrom 和 defaultTo。執行階段輸入物件仍可包含
其他由外掛擁有的鍵,但共用型別不會宣告索引簽章。每個外掛都必須宣告並限縮自己的設定欄位,
或在配接器邊界使用外掛擁有的結構描述進行驗證:
ChannelSetupInput 上的頻道特定欄位,暫時仍保留型別,以維持外部原始碼相容性。
這些欄位已淘汰。2026-07-22 對 426 個已發布、位於樹外的
頻道外掛進行登錄檔全面檢查後,移除了 21 個沒有讀取端的欄位,並保留 22 個已知有
讀取端的欄位。每個保留欄位會在沒有任何已發布外掛讀取時立即刪除;
不需要版本界線。新的和隨附的外掛不得依賴此
層級;請在本機宣告其擁有的欄位。
頻道擁有的單一帳號提升
當頻道從單一帳號的頂層設定升級至channels.<id>.accounts.* 時,預設共用行為會將提升的帳號範圍值移至 accounts.default。
每個頻道外掛都可以透過其設定介面卡擴充或縮限該提升行為:
singleAccountKeysToMove:應移入提升後帳號的額外頂層鍵namedAccountPromotionKeys:當具名帳號已存在時,只有這些鍵會移入提升後的帳號;共用原則/傳遞鍵會留在頻道根層級resolveSingleAccountPromotionTarget(...):選擇要接收提升值的現有帳號
singleAccountKeysToMove 的存在表示提升合約已完整。即使該欄位是空陣列,也請宣告它,以選擇不採用舊版鍵提升。省略此欄位的介面卡,會為已發布的外掛保留一個由讀取端支持的預先宣告提升層級。2026-07-22 的登錄檔全面檢查移除了 23 個沒有已發布相依項目的鍵,並保留六個常用鍵以及僅供設定使用的 rooms 鍵。每個保留鍵會在其已發布的讀取端遷移至宣告後立即刪除;不需要版本界線。
當 doctor 必須從輕量隨附設定構件載入這些宣告時,請在外掛套件資訊清單中宣告 openclaw.setupFeatures.configPromotion: true。僅供設定使用的外掛介面與完整頻道外掛必須公開相同的宣告。
使用已解析的外掛呼叫 moveSingleAccountChannelSectionToDefaultAccount(...) 時,請將其設定介面卡以 setupSurface 傳入。呼叫端提供的設定介面優先於載入和隨附查詢,使具範圍限制或僅供設定使用的外掛能獨立於全域註冊。
Matrix 是目前的隨附範例。如果已存在剛好一個具名 Matrix 帳號,或
defaultAccount 指向現有的非標準鍵(例如 Ops),提升作業會保留該帳號,而不會建立新的 accounts.default 項目。設定結構描述
外掛設定會依照資訊清單中的 JSON Schema 進行驗證。使用者可透過以下方式設定外掛:api.pluginConfig 接收此設定。
對於頻道特定設定,請改用頻道設定區段:
建構頻道設定結構描述
使用buildChannelConfigSchema 將 Zod 結構描述轉換為外掛擁有的設定構件所使用的 ChannelConfigSchema 包裝函式:
openclaw.plugin.json#channelConfigs,讓設定結構描述、設定和 UI 介面能在不載入執行階段程式碼的情況下檢查 channels.<id>。
設定精靈
頻道外掛可以為openclaw onboard 提供互動式設定精靈。該精靈是 ChannelPlugin 上的 ChannelSetupWizard 物件:
ChannelSetupWizard 也支援 textInputs、dmPolicy、allowFrom、groupAccess、prepare、finalize 等項目。完整的隨附範例請參閱 Discord 外掛的 src/setup-core.ts。
共用 allowFrom 提示
共用 allowFrom 提示
對於只需要標準
note -> prompt -> parse -> merge -> patch 流程的 DM 允許清單提示,建議使用 openclaw/plugin-sdk/setup 中的共用設定輔助函式:createPromptParsedAllowFromForAccount(...) 和 createTopLevelChannelParsedAllowFromPrompt(...)。標準頻道設定狀態
標準頻道設定狀態
對於只有標籤、分數和選用額外行不同的頻道設定狀態區塊,建議使用
openclaw/plugin-sdk/setup 中的 createStandardChannelSetupStatus(...),而不是在每個外掛中自行建立相同的 status 物件。選用頻道設定介面
選用頻道設定介面
對於只應在特定情境中出現的選用設定介面,請使用 當你只需要該選用安裝介面的其中一半時,
openclaw/plugin-sdk/channel-setup 中的 createOptionalChannelSetupSurface:plugin-sdk/channel-setup 也會公開較低階的 createOptionalChannelSetupAdapter(...) 和 createOptionalChannelSetupWizard(...) 建構器。產生的選用介面卡/精靈在實際寫入設定時會採取失敗關閉。它們會在 validateInput、applyAccountConfig 和 finalize 中重複使用同一則需要安裝的訊息,並在設定 docsPath 時附加文件連結。二進位檔支援的設定輔助函式
二進位檔支援的設定輔助函式
對於二進位檔支援的設定 UI,建議使用共用的委派輔助函式,而不是在每個頻道中複製相同的二進位檔/狀態黏合程式碼:
createDetectedBinaryStatus(...):適用於只有標籤、提示、分數和二進位檔偵測不同的狀態區塊createCliPathTextInput(...):適用於路徑支援的文字輸入createDelegatedSetupWizardProxy(...):當setupEntry需要以延遲方式將狀態、準備或完成行為轉送至較完整、較大型的精靈時使用createDelegatedTextInputShouldPrompt(...):當setupEntry只需要委派textInputs[*].shouldPrompt決策時使用
發布與安裝
**外部外掛:**發布至 ClawHub,然後安裝:- npm
- 僅限 ClawHub
- npm 套件規格
clawhub:、npm:、git: 或 npm-pack: 來確定性地選擇來源——請參閱管理外掛。對於來源為 npm 的安裝,
openclaw plugins install 會將套件安裝至 ~/.openclaw/npm/projects 下的每個外掛專案,並停用生命週期指令碼(--ignore-scripts)。請讓外掛相依性樹維持純 JS/TS,並避免使用需要 postinstall 建置的套件。閘道啟動時不會安裝外掛相依套件。npm/git/ClawHub 安裝流程負責使相依套件趨於一致;本機外掛必須已安裝其相依套件。