外掛
能力的安裝與組合單元。它可以同時註冊工具、服務、事件和介面。
你不需要先成為框架專家。按頁順序完成一個最小外掛,再根據自己的 Agent 選擇下一種能力。
第 03–05 頁:外掛是什麼、常見概念,以及開始前必須做的三項決定。
02第 06–09 頁:15 分鐘跑通 Hello 外掛,再給模型增加一個真正可調用的 Tool。
03第 10–13 頁:九種常見類型、練習題和適用條件。
第 14–19 頁:Dynamic Plugin、Agent preset、權限邊界和能力預算。
05第 20–23 頁:熱門方向、未來機會,以及與 WorkBuddy、Codex、Claude Code 的區別。
06第 24–26 頁:從想法到交付、驗收清單、常見問題和後續入口。
一個 AI Agent 不只是模型。它還需要上下文、工具、循環、狀態、權限和介面。外掛讓這些部分可以被註冊、替換和組合。
輸入:配置、上下文、用戶請求、外部系統。
註冊:外掛通過 Context 把能力放入 Harness 的註冊表或生命週期。
運行:Agent、模型或其他外掛在需要時調用它。
證據:結果要能通過工具輸出、文件、介面狀態或會話記錄被驗證。
如果某項能力需要獨立安裝、配置、替換或組合,它通常適合成為外掛。
能力的安裝與組合單元。它可以同時註冊工具、服務、事件和介面。
模型可以主動調用的函數。要有名稱、描述、參數、執行邏輯和輸出。
面向模型的可複用流程和上下文,告訴 Agent 在什麼情況下怎樣完成任務。
把外部系統暴露為工具或命令。它們不是業務流程本身。
在明確生命週期點自動執行,例如記錄、校驗、清理或阻止錯誤狀態。
擁有獨立角色、上下文和權限的執行者,適合並行或專業任務。
把已驗證的外掛、提示詞、Skill 和服務組合成一種穩定的 Agent 工作方式。
外掛負責分發;Tool 負責執行;Skill 負責步驟;Event 負責確定性。
這三項決定會影響代碼位置、權限、生命週期和交付方式。
Host 適合文件、命令、網絡、持久狀態。Client 適合展示和交互。兩端都需要時,用 Host + Client。
所有 Agent 共用的基礎能力放在 Host 組合中;某類 Agent 專屬能力放在 preset 中。
實驗用 Dynamic Plugin;長期維護用正式包;需要一次安裝整套能力時用 Bundle。
用戶結果:用戶最終能做什麼? 執行位置:Host / Client / 兩端? 證據:如何確認它真的完成?
這一輪只證明“外掛可以被加載”。不要先做完整產品。
啟動命令不報錯;瀏覽器能打開;終端出現外掛加載日誌。
不做 UI、不接數據庫、不做複雜配置,也不加多個工具。
打開 http://127.0.0.1:3080。終端出現 [hello-plugin] plugin loaded! 就說明最小路徑成立。
apply(ctx, config) 是外掛進入 Harness 的入口。下一步的 Tool、Service、Event 和 UI,都從這裡註冊。
name 與 descriptionparametersoutput.render聲明硬依賴。這裡表示外掛加載前必須已有 tools 服務。
穩定、短、可區分。模型會用它發起調用。
說明“何時使用”和“得到什麼”,不要只重複名稱。
讓模型知道參數類型、是否必填及業務含義。
真正執行工作。它的返回值必須符合輸出 schema。
把結果變成用戶能讀的介面。先保持簡短,再按需展開原始數據。
Use the greet tool to greet Ada.
不是隻看最終文字。確認模型確實發起了 Tool call,並拿到了 Tool result。
讓模型執行一個動作。最適合第一個外掛。
讓 Agent 穩定複用一套流程或領域知識。
在明確生命週期點執行確定性動作。
提供可被多個外掛複用或替換的能力。
在已有介面槽位中增加展示與交互。
後端執行,前端展示,兩端通過 JSON 通信。
拆分長任務、並行任務或專業角色。
保存需要跨輪次或跨會話使用的狀態。
把已驗證能力組合成穩定 Agent。
適合:讀文件、查接口、創建記錄、運行命令。
第一版:只讀、參數少、輸出短。
練習:做一個 project_summary 工具,返回文件數、語言和入口。
適合:代碼審查、發佈流程、產品驗收、固定報告。
第一版:清楚寫“什麼時候用”和“按什麼步驟做”。
練習:寫一個“接口變更檢查”Skill。
適合:日誌、校驗、自動清理、調用前後處理。
第一版:只監聽一個事件,並明確清理邏輯。
注意:waterfall 監聽器要調用 next() 繼續鏈路。
需要模型決定何時執行,用 Tool;需要模型按步驟思考,用 Skill;無論模型怎麼想都必須發生,用 Event / Hook。
把能力拆成 Definition、Provider、Consumer。只有在多個外掛需要複用,或實現需要被替換時才使用。否則,一個 Tool 更簡單。
查詢已有 Slot,再掛載最小介面。不要直接操作產品 DOM。介面只展示用戶需要確認、選擇或查看的內容。
Host 通過 harness.handle() 暴露方法;Client 通過 host.call() 調用。兩端只傳 JSON 可序列化數據。
做一個“運行測試”面板:Host 執行命令,Client 顯示進行中、通過、失敗和日誌摘要。
前端負責交互,後端負責權限和真實執行。不要在 Client 中偷偷複製後端邏輯。
把複雜任務拆成 Router 和專業 Worker。隔離角色、上下文、工具與權限,結果才容易複核。
一個 Router 將任務分給“資料整理”和“代碼實現”兩個 Worker。
提供 remember、find、forget。每條記憶保留來源、時間和作用域。
不要自動保存所有對話;不要讓模型可見內容脫離會話記錄。
組合已驗證的 Tool、Skill、人格、提示詞和服務,形成穩定工作方式。
做一個“發佈助手”preset,只加載發佈所需能力。
先確認一個能力單獨可靠,再把它放入 Workflow、記憶層或 preset。組合不會自動修復不穩定的組件。
Dynamic Plugin 適合實驗、探索接口和驗證想法。重啟後不會自動保留;長期使用時應轉成正式包。
cordis_inspect_list先看現場,不要猜已有能力。
cordis_inspect_query確認目標 Service、Slot 或 Event。
cordis_inspect_self確認 Host / Client 位置和依賴。
cordis_define只寫 JS 函數體。定義不會自動執行。
cordis_run獲得新的 pluginRunId,等待最終狀態。
cordis_stop釋放事件、介面和其他資源。
cordis_undefine實驗結束後清理定義。
重新 inspect 目標 run,確認狀態、診斷和輸出證據。
| 規則 | 你需要記住什麼 |
|---|---|
| 代碼形式 | 只寫 JavaScript 函數體。不要使用 import、require、TypeScript、裝飾器或 JSX。 |
| 運行環境 | 不要假設存在 window、document、process、Buffer、fetch 或定時器。Client 介面用 React.createElement。 |
| 生命週期 | 用 ctx.on() 和 ctx.effect() 註冊可清理副作用。awaiting-approval 與 starting 不是最終成功。 |
| 權限 | Host VM 不是安全邊界。能觸達文件、命令或網絡的動態外掛,應視為擁有與 shell 相近的權限。 |
pluginId 指外掛;packageId 指定義包;pluginRunId 指一次運行;currentPackageId / nextPackageId 指切換前後定義。
當外掛需要重啟後保留、團隊版本管理、穩定配置、持久狀態或 preset 組合時,把它遷移到正式 TypeScript 包。
所有 Agent 共用、涉及系統權限的底座。
某類 Agent 獨有的可組合工作方式。
preset 不能降低 Host 權限,也不能替用戶安裝或登錄 Codex、Claude 等外部產品。Service 的 Provider 與 Consumer 要處於同一隔離組。
| 方面 | 外掛可以做 | 外掛不能保證 |
|---|---|---|
| 模型 | 增加 Tool、Prompt、Skill、路由和上下文。 | 繞過模型能力、上下文窗口或服務商限制。 |
| 文件與命令 | 在授權範圍內讀寫文件、執行命令。 | 繞過 OS Sandbox、審批、目錄策略和賬戶權限。 |
| 網絡 | 連接 API、MCP、瀏覽器和數據庫。 | 繞過登錄、配額、網絡策略和外部服務故障。 |
| 介面 | 在可用 Slot 中展示狀態和交互。 | 穩定控制產品私有 DOM 或未公開介面。 |
| 持久化 | 通過正式存儲外掛保存狀態。 | 讓 Dynamic Plugin 重啟後自動存在。 |
| 安全 | 聲明並遵守權限、審批和執行位置。 | 自行取消審批,或把 Host VM 當安全沙箱。 |
它是否適合所有任務?是否依賴外部系統、存儲或運行時?是否增加上下文、成本或啟動時間?沒有它,基礎 Agent 是否仍能工作?
只給當前 Agent 加載相關工具和 Skill。
默認給摘要,原始結果按需展開。
展示調用、來源、成本和最終狀態。
接入一個業務系統,只開放 2–3 個高價值動作。
完成一個帶截圖證據的網頁任務。
按需檢索符號、引用和項目結構。
保存帶來源、時間和作用域的結構化事實。
拆分研究、實現、驗收三個角色。
讀取設計信息,輸出可運行頁面和對比截圖。
彙總 PR、檢查 CI,並輸出可追蹤連結。
展示耗時、成本、調用鏈和失敗位置。
把音視頻輸入轉成可檢索、可確認的任務結果。
以現有外掛機制構建更好的開發與使用體驗。
外掛生態擴大後,需要統一的治理和運行標準。
這些方向看起來強大,但會快速擴大權限和錯誤成本。
用 Plugin、Service、Event、Tool、Slot 和 preset 構建自己的 Agent 運行時。強調能力替換、組合、權限和生命週期。
面向通用辦公與桌面任務的工作臺。通過 Skill、專家、連接器和 MCP 增加能力,更接近開箱即用產品。
圍繞本地、IDE、桌面和雲端的軟件開發 Agent。強調代碼工作流、工具、Skill、MCP、Hook、線程與 worktree。
圍繞終端、IDE、Web 與 CI 的工程 Agent。提供 Skill、Subagent、Hook、MCP、Plugin、LSP 與團隊協作機制。
選 DeepSeek Harness。你需要控制服務、事件、狀態、權限、客戶端 Slot 和 Agent 組合。
選 WorkBuddy。重點是開箱即用的桌面工作、專家角色和外部服務連接。
選 Codex。它適合代碼修改、並行任務、工作區隔離和雲端協作。
選 Claude Code。它在 Hook、Subagent、Plugin、LSP 和工程自動化方面提供完整組合。
DeepSeek Harness 可以通過外掛連接外部 CLI、MCP 或服務。Codex 與 Claude Code 也可以作為你的開發工具。它們可以位於同一工作流的不同層。
用一句話說明用戶最終能完成什麼。
只保留最短、可運行、可觀察路徑。
Tool、Skill、Event、Service 或組合。
確認註冊表、Slot、Service 和執行位置。
先讓外掛加載,再讓一次調用成功。
輸出文件、連結、截圖、狀態或 diff。
明確啟動、停止、更新和資源清理。
Dynamic、正式包或 Bundle。
只有出現具體問題後,再增加複雜度。
檢查工具是否在當前列表中,description 是否說明使用時機,參數是否過多。
檢查 Slot、審批、異步啟動狀態,並查看最新 pluginRunId 的診斷。
比較 PATH、運行時、環境變量、啟動方式和認證上下文。
減少當前工具集,縮短默認輸出,只按任務加載相關能力。
需要重啟後保留、團隊版本管理、穩定配置、狀態或 preset 時。
第一版必須可運行、可觀察、可驗證。穩定之後,再擴大能力。
讓你的 AI Agent 多一項真實、可控、可驗證的能力,然後再做下一項。