OpenCode 生態系完整教學手冊
版本:基於 OpenCode v1.14.50(2026 年 5 月)
適用對象:資深工程師、架構師、DevOps 工程師、技術主管
文件等級:企業標準技術白皮書
維護單位:軟體架構組
最後更新:2026-05-14
涵蓋範圍:OpenCode 核心、Oh My OpenAgent(OmO)外掛、OpenWork 桌面協作平台
文件修訂紀錄
| 版本 | 日期 | 修訂者 | 修訂說明 |
|---|---|---|---|
| 1.0 | 2026-03-04 | 軟體架構組 | 初版建立 |
| 2.0 | 2026-03-08 | 軟體架構組 | 全面更新至 v1.2.21;新增 OmO、OpenWork 章節;擴充至企業白皮書等級 |
| 3.0 | 2026-03-25 | 軟體架構組 | 更新至 v1.3.2;OmO v3.13.1 新增 Multimodal Looker / Metis 代理與 Agent Orchestration;OpenWork v0.11.191 新增 Dev Mode、Templates、Cloud Worker |
| 3.0 | 2026-03-25 | 軟體架構組 | 全面更新至 OpenCode v1.3.2、OmO v3.13.1、OpenWork v0.11.191;新增 Multimodal Looker、Metis、Agent Orchestration 分類路由、雲端 Worker 架構等新功能 |
| 4.0 | 2026-04-12 | 軟體架構組 | 全面更新至 OpenCode v1.4.3、OmO v3.17.0、OpenWork v0.11.206;OpenCode 新增 OpenCode Go 訂閱、40+ 提供商支援、Docker 安裝、Ollama Cloud;OmO 更名 oh-my-openagent、OpenCode v1.4.0 最低版本檢查、Doctor 診斷命令、Session Recovery、File Prompts;OpenWork 授權變更為 FSL-1.1-MIT、Ollama 支援、React Session Composer、i18n 五語系 |
| 5.0 | 2026-04-16 | 軟體架構組 | 更新至 OpenCode v1.4.6(762 releases、oxlint 整合、provider auth API)、OmO v3.17.3(164 releases、replace_plan 支援、CLA 與 Telemetry 機制)、OpenWork v0.11.207(1,057 releases、Catalan 語系、microsandbox 沙箱流程、Roadmap 分頁、Node 24 CI 準備);新增 multiedit 工具、Sisyphus Labs 等待名單、提供商新增 40+ 項 |
| 6.0 | 2026-04-30 | 軟體架構組 | 全面更新至 OpenCode v1.14.30(781 releases、152k Stars、875 貢獻者、question 工具、agent create CLI、Desktop App BETA 正式化)、OmO v3.17.10(168 releases、55.1k Stars、199 貢獻者、GPT-5.5 native prompt drafts、npm OIDC CI 改進)、OpenWork v0.13.0(1,087 releases、14.5k Stars、Tauri→Electron 遷移、Cloud MCP OAuth Server、Welcome/Onboarding 畫面、microsandbox 功能旗標、pnpm workspace 重構);新增 ACP 支援文件、SDK 文件、Server 文件、外掛文件、生態系統文件 |
| 7.0 | 2026-05-14 | 軟體架構組 | 全面更新至 OpenCode v1.14.50(800 releases、160k Stars、896 貢獻者、Scout SubAgent 新增、native LLM core foundation、TUI notifications、Electron Desktop CI 改進)、OmO v4.1.2(177 releases、57.7k Stars、219 貢獻者、Team Mode v4.0 多代理並行、hyperplan/security-research 技能、Kimi K2.6/GPT-5.5/GLM-5.1 模型支援、configurable agent ordering、CDP browser tools)、OpenWork v0.13.8(1,202 releases、15.2k Stars、61 貢獻者、shadcn/ui skills、Electron browser automation、Daytona/devcontainer、native main menu、10 語系支援、AI Providers 重構) |
目錄
- 第一章:OpenCode 生態系總覽
- 第二章:系統架構設計
- 第三章:安裝與環境建置
- 第四章:專案導入標準流程(SOP)
- 第五章:實戰操作教學
- 第六章:最佳實踐(Best Practices)
- 第七章:系統維護與治理
- 第八章:系統升級策略
- 第九章:企業導入建議
- 第十章:Oh My OpenAgent(OmO)生態系
- 10.1 OmO 總覽與定位
- 10.2 核心概念:Discipline Agents
- 10.3 ultrawork / ulw 一鍵啟動
- 10.4 IntentGate 意圖閘道
- 10.5 Hash-Anchored Edit Tool
- 10.6 /init-deep 深度初始化
- 10.7 Prometheus 規劃器
- 10.8 背景代理(Background Agents)
- 10.9 Skill-Embedded MCPs
- 10.10 Ralph Loop 自我迴圈
- 10.11 Todo Enforcer 與 Comment Checker
- 10.12 內建 MCP 伺服器
- 10.13 LSP 與 AST-Grep 整合
- 10.14 Tmux 整合
- 10.15 Claude Code 完整相容性
- 10.16 Agent Orchestration 模型路由
- 10.17 安裝與設定
- 10.18 設定檔詳解
- 10.19 企業導入 OmO 建議
- 10.20 OmO 實戰教學:微服務拆分
- 10.21 OmO 與 OpenCode 功能對照表
- 10.22 OmO 效能調優指南
- 10.23 Multimodal Looker 代理(v3.12+ 新增)
- 10.24 Metis 代理——規劃顧問(v3.12+ 新增)
- 10.25 GPT-5.4 xhigh 路由與 ultrabrain 模式(v3.13+ 新增)
- 10.26 Session Tools——歷程分析(v3.13+ 新增)
- 10.27 Think Mode(v3.13+ 新增)
- 10.28 OmO v3.13 其他更新
- 10.29 OmO v3.14-v3.17.10 更新摘要
- 10.30 OmO v4.0-v4.1.2 更新摘要(Team Mode 重大版本)
- 第十一章:OpenWork 桌面應用與協作平台
- 11.1 OpenWork 總覽與定位
- 11.2 核心理念
- 11.3 功能架構
- 11.4 Host 模式與 Client 模式
- 11.5 技能管理器(Skill Manager)
- 11.6 OpenWork Orchestrator CLI
- 11.7 OpenCode Router(WhatsApp / Slack / Telegram)
- 11.8 OpenPackage 套件管理
- 11.9 安裝與設定
- 11.10 架構詳解
- 11.11 安全性設計
- 11.12 Dev Mode 隔離(v0.11.160+ 新增)
- 11.13 Templates 儲存與重播(v0.11.170+ 新增)
- 11.14 Execution Plan Timeline(v0.11.180+ 新增)
- 11.15 Cloud Worker 架構(v0.11.185+ 新增)
- 11.16 Workspace Switch 與 Starter Sessions(v0.11.190+ 新增)
- 11.17 OpenCode Plugins 管理(Skills Tab)
- 11.18 OpenWork v0.11.192-v0.13.0 更新摘要
- 11.19 企業導入 OpenWork 建議
- 第十二章:生態系整合與進階工作流程
- 第十三章:常見問題與故障排除
- 附錄 A:快速上手檢查清單(Checklist)
- 附錄 B:常見 OpenCode 指令速查表
- 附錄 C:OmO 指令速查表
- 附錄 D:設定檔完整範例
- 附錄 E:MCP 伺服器推薦清單
- 附錄 F:模型推薦與比較
- 附錄 G:重要參考資源
- 附錄 H:術語表
第一章:OpenCode 生態系總覽
1.1 OpenCode 核心理念
OpenCode 是一個 100% 開源 的 AI 編碼代理(AI Coding Agent),由 Anomaly 團隊開發維護。截至 2026 年 5 月,OpenCode 已達到以下里程碑:
| 指標 | 數值 |
|---|---|
| GitHub Stars | 160k+ |
| 貢獻者 | 896+ |
| 版本發佈 | 800+ |
| 最新版本 | v1.14.50 |
| 月活躍開發者 | 300 萬+ |
| 支援語言 | 25+ |
| 支援模型供應商 | 75+ |
核心理念:
| 理念 | 說明 |
|---|---|
| 開源優先 | MIT 授權,完整原始碼公開,企業可自行審計 |
| 隱私優先 | 不儲存您的程式碼或上下文資料,所有處理均在本地完成 |
| 供應商中立 | 不綁定任何特定 AI 供應商,支援 75+ LLM 提供商 |
| 多介面支援 | TUI(終端機介面)、Desktop App、IDE Extension、Web、CLI |
| Agent 架構 | 內建 5 個代理(Build、Plan、General、Explore、Scout)+ 3 個隱藏系統代理 |
| 可擴展性 | 支援 MCP 伺服器、自訂工具、技能系統、外掛系統、SDK |
| 團隊協作 | 對話分享、規則系統(AGENTS.md)、統一設定管理 |
| 生態系豐富 | Oh My OpenAgent 外掛、OpenWork 桌面平台、第三方外掛 |
技術堆疊:
| 語言/技術 | 佔比 | 用途 |
|---|---|---|
| TypeScript | 57.4% | 核心引擎、工具系統 |
| MDX | 29.5% | 文件系統 |
| JavaScript | 10.4% | 安裝腳本、工具、測試 |
| CSS | 2.3% | TUI 樣式 |
| HTML | 0.2% | 網頁模板 |
| Astro | 0.1% | 文件網站 |
| Other | <0.1% | Rust、Shell、CI/CD |
實務建議:OpenCode 的 Client/Server 架構允許在本地電腦執行 Agent,同時從行動裝置遠端操控,非常適合需要長時間執行任務的場景。
1.2 生態系全景圖
OpenCode 生態系由三大核心專案與周邊工具組成:
graph TB
subgraph "OpenCode 生態系"
subgraph "核心層"
OC["OpenCode Core
v1.14.50
160k ⭐ | MIT"]
end
subgraph "增強層"
OmO["Oh My OpenAgent (OmO)
v4.1.2
57.7k ⭐ | SUL"]
OW["OpenWork
v0.13.8
15.2k ⭐ | MIT"]
end
subgraph "整合層"
SDK["OpenCode SDK
v1.14.x"]
Plugin["外掛系統
npm plugins"]
MCP["MCP 伺服器
本地/遠端/OAuth"]
end
subgraph "介面層"
TUI["TUI 終端機"]
Desktop["Desktop App"]
IDE["VS Code Extension"]
Web["Web 介面"]
Router["OpenCode Router
WhatsApp/Slack/Telegram"]
end
end
OC --> OmO
OC --> OW
OC --> SDK
OC --> Plugin
OC --> MCP
OmO --> TUI
OW --> Desktop
SDK --> IDE
OC --> Web
OW --> Router| 專案 | 定位 | GitHub | 版本 | Stars | 授權 |
|---|---|---|---|---|---|
| OpenCode | AI 編碼代理核心 | anomalyco/opencode | v1.14.50 | 160k | MIT |
| Oh My OpenAgent | 進階外掛(多代理協作) | code-yeongyu/oh-my-openagent | v4.1.2 | 57.7k | SUL |
| OpenWork | 桌面 GUI 協作平台 | different-ai/openwork | v0.13.8 | 15.2k | MIT |
1.3 與傳統 AI Coding Tool 差異
| 特性 | 傳統 AI Coding Tool | OpenCode |
|---|---|---|
| 運作模式 | 補全 / 建議式 | Agent 式(自主規劃與執行) |
| 操作範圍 | 單一檔案 / 函式 | 整個專案(讀取、搜尋、編輯、執行) |
| 上下文理解 | 當前開啟的檔案 | 整個程式碼庫 + LSP + 網路搜尋 |
| 工具整合 | 有限 | MCP 伺服器 + 自訂工具 + 外掛系統 |
| 模型選擇 | 固定供應商 | 75+ 提供商 + 本地模型 |
| 版本控制 | 無 | 內建 /undo /redo,整合 Git |
| 可擴展性 | 低 | SDK、Plugin、Custom Tools、Skills |
| 桌面應用 | 通常無 | Desktop App + OpenWork GUI |
| 團隊協作 | 基本 | 對話分享、規則系統、OpenWork 協作 |
關鍵差異說明:
- Agent 模式 vs 補全模式:OpenCode 不只是建議程式碼,它會自主規劃任務、搜尋程式碼庫、讀寫檔案、執行命令
- 內建工具系統:bash、edit、write、read、grep、glob、list、patch、multiedit、lsp、skill、todowrite、webfetch、websearch、question 等 15+ 工具讓 AI 能夠直接操作開發環境
- 上下文壓縮:自動管理上下文視窗,支援長時間工作階段
- 技能系統(Skills):透過 SKILL.md 檔案定義可重用的代理技能,支援跨專案共享
- 外掛系統:透過 npm 安裝外掛(如 Oh My OpenAgent),大幅擴展功能
1.4 與 GitHub Copilot / Claude Code 等工具比較
| 比較維度 | GitHub Copilot | Claude Code | Cursor | OpenCode | OmO |
|---|---|---|---|---|---|
| 開源 | ❌ 商業 | ❌ 商業 | ❌ 商業 | ✅ MIT | ✅ SUL |
| 供應商綁定 | 綁定 GitHub/OpenAI | 綁定 Anthropic | 多供應商 | ✅ 供應商中立 | ✅ 供應商中立 |
| 支援模型數 | 有限 | Claude 系列 | 多供應商 | 75+ 提供商 | 75+ + 自動路由 |
| TUI 體驗 | 基本 | 良好 | ❌ | ✅ 由 Neovim 使用者打造 | ✅ 增強型 |
| LSP 支援 | IDE 內建 | 無 | IDE 內建 | ✅ 開箱即用 | ✅ + AST-Grep |
| MCP 整合 | 有限 | 支援 | 有限 | ✅ 完整支援 | ✅ + 內建 MCP |
| Desktop App | ❌ | ❌ | ✅ | ✅ Beta | ✅(透過 OpenWork) |
| Client/Server | ❌ | ❌ | ❌ | ✅ | ✅ |
| 多代理協作 | 有限 | 有限 | 有限 | ✅ 5 代理 | ✅ Team Mode 8+ 並行 |
| 外掛系統 | 擴充市集 | 無 | 無 | ✅ npm 外掛 | ✅ 本身就是外掛 |
| 企業版 | ✅ | ✅ | ✅ | ✅ Enterprise | ✅ |
| 價格 | $19-39/月 | 按 Token 計費 | $20/月 | 免費開源 | 免費開源 |
| Hash-Anchored Edit | ❌ | ❌ | ❌ | ❌ | ✅ |
| 背景代理 | ❌ | ❌ | ❌ | ❌ | ✅ 5+ 並行 |
| WhatsApp 連接 | ❌ | ❌ | ❌ | ❌ | ❌(OpenWork 提供) |
官方說明(來自 OpenCode FAQ):
OpenCode 在功能上與 Claude Code 非常相似,關鍵差異在於:100% 開源、不綁定供應商、開箱即用的 LSP 支援、專注 TUI 體驗、Client/Server 架構。
OmO 社群評價:
“If Claude Code does in 7 days what a human does in 3 months, Sisyphus does it in 1 hour.” — B, Quant Researcher
“Knocked out 8000 eslint warnings with Oh My Opencode, just in a day.” — Jacob Ferrari
1.5 適用場景分析
| 場景 | OpenCode | + OmO | + OpenWork | 說明 |
|---|---|---|---|---|
| Web Application 全端開發 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 前後端皆可覆蓋 |
| 遺留系統現代化 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Plan 模式分析 → Build 模式轉換 |
| API 開發與測試 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 自動產生 API、測試、文件 |
| DevOps / CI/CD 自動化 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 產生 Dockerfile、GitHub Actions、K8s 配置 |
| 程式碼審查輔助 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 可設定唯讀代理專門做 Code Review |
| 文件產生 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | README、API 文件、架構文件 |
| 資料庫操作 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 需搭配 MCP 伺服器 |
| 即時協作 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | OpenWork 提供桌面 GUI 協作 |
| 非技術人員使用 | ⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | OpenWork 提供友善 GUI |
| 大規模重構 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | OmO 並行代理加速 |
| 多語言跨平台專案 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | OmO 模型路由自動匹配 |
注意事項:OpenCode 特別適合需要跨多個檔案、多個步驟的複雜任務。對於簡單的程式碼補全,傳統 IDE 內建的 AI 補全可能更為即時。
1.6 真實案例研究
案例 1:金融科技新創 — 全端 API 平台開發
背景:一家金融科技新創公司(20 人工程師團隊)需要在 3 個月內完成 REST API 平台,包含 120+ 端點、OAuth 2.0 認證、交易核心引擎。
導入策略:
| 階段 | 週期 | 工具 | 工作內容 |
|---|---|---|---|
| 架構設計 | 第 1-2 週 | OpenCode Plan 模式 | 微服務架構設計、API Schema、DDD 領域模型 |
| 核心實作 | 第 3-6 週 | OpenCode Build + OmO | 交易引擎、認證服務、帳戶管理 |
| API 層開發 | 第 7-8 週 | OpenCode Build | 120+ REST 端點、驗證邏輯、Error Handling |
| 測試 | 第 9-10 週 | OpenCode + SonarQube MCP | 單元測試(90%+ 覆蓋率)、整合測試、負載測試腳本 |
| 文件 | 第 11 週 | OpenCode | OpenAPI 3.0 文件、內部文件、README |
| 部署 | 第 12 週 | OpenCode + K8s MCP | Docker 化、K8s manifests、CI/CD pipeline |
成效指標:
| 指標 | 導入前(預估) | 導入後(實際) | 提升 |
|---|---|---|---|
| 開發週期 | 6 個月 | 3 個月 | 50% ↓ |
| 程式碼行數 | - | 85,000 行 | - |
| 測試覆蓋率 | 預估 60% | 92% | +32% |
| Bug 密度 | 業界平均 15/KLOC | 3.2/KLOC | 78% ↓ |
| API 文件 | 手寫預估 4 週 | 3 天 | 89% ↓ |
| 安全漏洞 | - | 0 Critical, 2 Medium | SonarQube 驗證 |
關鍵 Prompt 範例:
## 任務:設計交易核心引擎
### 背景
我們正在開發金融交易平台,需要一個高可靠的交易核心引擎。
### 需求
1. 支援多幣別交易(TWD, USD, EUR, JPY)
2. ACID 交易保證
3. 雙重記帳法(Double-entry bookkeeping)
4. 交易限額控制(每日、每筆、每月)
5. 防重複提交(Idempotency)
6. 完整審計軌跡
### 技術約束
- Java 21 + Spring Boot 3.2
- PostgreSQL 16
- Redis 7(分散式鎖)
### 要求
1. 先用 Plan 模式設計架構(類別圖、序列圖)
2. 再用 Build 模式實作核心類別
3. 包含完整單元測試
4. 符合 OWASP 安全規範案例 2:政府機構 — 遺留系統現代化
背景:某政府機構需要將 15 年歷史的 Java 6 + Struts 2 系統遷移至 Java 21 + Spring Boot 3。系統包含 200+ JSP 頁面、50+ Action 類別、30+ DAO 類別。
遺留系統分析流程:
sequenceDiagram
participant 架構師 as 架構師
participant Plan as OpenCode Plan 模式
participant Explore as Explore SubAgent
participant Build as OpenCode Build 模式
participant OmO as OmO Prometheus
架構師->>Plan: 分析現有架構
Plan->>Explore: 掃描所有 Struts Action
Explore->>Plan: 回傳 50+ Action 分析結果
Plan->>架構師: 產出遷移評估報告(風險、工作量、建議策略)
架構師->>OmO: 啟動 Prometheus 分析
OmO->>架構師: 三方案分析報告(Big Bang / 漸進 / 並行)
架構師->>Build: 選擇漸進式遷移(Strangler Fig)
loop 每個模組
Build->>Build: Struts Action → Spring Controller
Build->>Build: JSP → Thymeleaf
Build->>Build: 產生單元測試
Build->>Build: Ralph Loop 品質驗證
end遷移對照表:
| Struts 2 元件 | Spring Boot 對應 | 遷移難度 |
|---|---|---|
| struts.xml | @Controller/@RestController | ⭐⭐ |
| Action 類別 | @Controller + @RequestMapping | ⭐⭐ |
| ActionForm | DTO + @Valid | ⭐⭐ |
| JSP + OGNL | Thymeleaf 或前端 SPA | ⭐⭐⭐⭐ |
| Interceptor | Spring HandlerInterceptor | ⭐⭐⭐ |
| DAO(原生 JDBC) | Spring Data JPA | ⭐⭐⭐ |
| 資源注入(Spring 2.x) | @Autowired(Spring 6.x) | ⭐⭐ |
| struts-tiles | Thymeleaf Layout | ⭐⭐⭐ |
成效:
| 指標 | 遷移前 | 遷移後 |
|---|---|---|
| Java 版本 | Java 6 | Java 21 |
| 框架 | Struts 2.3 | Spring Boot 3.2 |
| 測試覆蓋率 | 0% | 85% |
| 安全漏洞(已知 CVE) | 47 | 0 |
| 啟動時間 | 45 秒 | 8 秒 |
| 應用伺服器 | Tomcat 6 | 內嵌 Tomcat 10 |
| 遷移耗時 | 原估 18 個月 | 實際 6 個月 |
案例 3:SaaS 公司 — 多租戶平台
背景:SaaS 公司需要將單租戶系統改造為多租戶架構,支援 Schema-per-tenant 隔離策略。
OpenCode 使用方式:
## Plan 模式 Prompt
分析目前的 Spring Boot 專案,設計多租戶改造方案:
1. 租戶識別策略(Header / Subdomain / JWT Claim)
2. 資料隔離策略(Schema-per-tenant)
3. 動態 DataSource 路由
4. 租戶管理 API
5. 資料遷移腳本
6. 需要修改的所有檔案清單Build 模式產出的核心程式碼:
// TenantContext.java - 租戶上下文管理
@Component
public class TenantContext {
private static final ThreadLocal<String> currentTenant = new ThreadLocal<>();
public static void set(String tenantId) {
currentTenant.set(tenantId);
}
public static String get() {
return currentTenant.get();
}
public static void clear() {
currentTenant.remove();
}
}
// TenantFilter.java - 租戶攔截器
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class TenantFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain)
throws ServletException, IOException {
String tenantId = extractTenantId(request);
if (tenantId == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"Missing tenant identification");
return;
}
try {
TenantContext.set(tenantId);
chain.doFilter(request, response);
} finally {
TenantContext.clear();
}
}
private String extractTenantId(HttpServletRequest request) {
// 優先順序:Header > JWT Claim > Subdomain
String tenantId = request.getHeader("X-Tenant-Id");
if (tenantId != null) return tenantId;
// 從 JWT 提取
String token = request.getHeader("Authorization");
if (token != null && token.startsWith("Bearer ")) {
return extractFromJwt(token.substring(7));
}
// 從 Subdomain 提取
String host = request.getServerName();
if (host != null && host.contains(".")) {
return host.split("\\.")[0];
}
return null;
}
}
// TenantRoutingDataSource.java - 動態 DataSource 路由
public class TenantRoutingDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return TenantContext.get();
}
}案例 4:開源社群 — OSS 專案維護
背景:一個 4,000+ stars 的開源 TypeScript 函式庫,使用 OpenCode 處理 Issue triage、PR review、版本發佈。
Issue Triage 工作流程:
# 使用 OpenCode + GitHub MCP 處理 Issues
> 請分析 #234 Issue 的內容,判斷是 bug、feature request 還是 question,
並建議處理優先順序和可能的解決方案PR Review 工作流程:
# 使用唯讀 code-reviewer 代理
> use skill code-reviewer
> 請審查 PR #567 的所有變更,重點關注:
1. 破壞性變更(Breaking Changes)
2. 效能影響
3. 類型安全
4. 測試覆蓋
5. 文件更新1.7 版本演進與藍圖
OpenCode 版本里程碑:
| 版本 | 日期 | 重要更新 |
|---|---|---|
| v0.1.x | 2025 Q1 | 初始版本,基本 TUI |
| v0.5.x | 2025 Q2 | MCP 伺服器支援 |
| v1.0.0 | 2025 Q3 | 穩定版本,Agent 系統 |
| v1.1.x | 2025 Q4 | 外掛系統、Skills |
| v1.2.0 | 2026 Q1 | Desktop App、ACP 支援 |
| v1.2.16 | 2026-03-04 | SDK v1.2.16、VS Code Extension |
| v1.2.21 | 2026-03-08 | SDK VS Code Extension 穩定版 |
| v1.3.2 | 2026-03-25 | Electron Desktop App 改進、MCP OAuth 增強 |
| v1.4.3 | 2026-04-10 | OpenCode Go 訂閱、Docker 安裝、Ollama Cloud、40+ 提供商支援、VS Code SDK v1.4.3 |
| v1.4.6 | 2026-04-15 | oxlint 整合(correctness + suspicious 規則)、provider auth HTTP API 切片、清理 49+ 未使用變數、全面程式碼品質提升 |
| v1.14.30 | 2026-04-30 | 152k Stars、875 貢獻者、781 releases;question 工具、agent create CLI 互動式建立代理、Desktop App BETA 正式化、VS Code SDK v1.14.30、server status indicator 修正、sourcemaps for beta releases、HttpApi instance context middleware、type-aware no-floating-promises 規則 |
| v1.14.50 | 2026-05-14 | 最新穩定版;160k Stars、896 貢獻者、800 releases;Scout SubAgent 新增(外部文件與依賴研究唯讀代理)、native LLM core foundation、TUI notifications 與 attention sounds、Electron Desktop CI native arm64 runner、keymap fallback priority 與 TUI config diagnostics、v2 model listing API、session usage totals tracking |
Oh My OpenAgent 版本里程碑:
| 版本 | 重要更新 |
|---|---|
| v1.x | 初始外掛版本 |
| v2.x | Discipline Agents 引入 |
| v3.x | Hash-Anchored Edit、Background Agents |
| v3.11.1 | Multimodal Looker 預覽、GPT-5 xhigh 路由 |
| v3.13.1 | Metis(Plan Consultant)、Agent Orchestration、Session Tools、Think Mode |
| v3.17.0 | 162 releases;更名 oh-my-openagent、OpenCode v1.4.0 最低版本檢查、Doctor 診斷命令、Session Recovery、File Prompts、Model Fallbacks 物件設定、frontend-ui-ux 技能 |
| v3.17.3 | 164 releases;replace_plan 支援、CLA 貢獻者授權協議、PostHog 匿名 Telemetry、Sisyphus Labs 產品化等待名單 |
| v3.17.10 | 168 releases、55.1k ⭐、199 貢獻者;GPT-5.5 native prompt drafts、npm OIDC CI、auto-update-checker 修正、maxDescendants 移除 |
| v4.0.0 | 重大版本;Team Mode 正式發佈——Lead agent + 最多 8 個並行成員、tmux 即時視覺化、team_* 工具族群(team_create、team_send_message、team_task_create、team_status)、hyperplan 技能(5 個敵對評論者)、security-research 技能(3 個漏洞獵人 + 2 個 PoC 工程師) |
| v4.1.2 | 最新版,177 releases、57.7k ⭐、219 貢獻者;Discipline Agents 模型更新(Sisyphus: claude-opus-4-7/kimi-k2.6/glm-5.1、Hephaestus: gpt-5.5、Prometheus: claude-opus-4-7/kimi-k2.6/glm-5.1)、configurable agent ordering、CDP browser tools、safe deps refresh、ralph-loop compaction continuation ownership guard、.opencode 目錄遷移至 .agents |
OpenWork 版本里程碑:
| 版本 | 重要更新 |
|---|---|
| v0.1.x | 初始桌面應用 |
| v0.10.x | Skill Manager、Templates |
| v0.11.x | Orchestrator CLI、Router 整合 |
| v0.11.135 | Templates、Execution Plan Timeline |
| v0.11.191 | Dev Mode 隔離、Cloud Worker、Workspace Switch、Starter Sessions |
| v0.11.206 | 1,055 releases;Ollama 支援、React Session Composer、i18n 五語系(en/ja/zh/vi/pt-BR)、授權變更為 FSL-1.1-MIT、AUR 套件、Debug 匯出、Provider Library 管理 |
| v0.11.207 | 1,057 releases;Composer 精練、Landing 頁面刷新、Catalan 語系新增(i18n 擴展至 6 語系)、microsandbox 沙箱流程、Roadmap 分頁、Node 24 CI 準備 |
| v0.12.x | pnpm workspace 過渡、Electron 始化、self-host guide 簡化 |
| v0.13.0 | 1,087 releases、14.5k ⭐、57 貢獻者;Tauri→Electron 完整遷移、Cloud MCP OAuth Server、Welcome/Onboarding 畫面、AUR PKGBUILD 更新 |
| v0.13.8 | 最新版,1,202 releases、15.2k ⭐、61 貢獻者;shadcn/ui skills、Electron browser automation(CDP)、Daytona/devcontainer 全端測試、native main menu、AI Providers 重新命名與 Preferences tab、icon dedup、marketplace 整合、skill hubs 與 shared workspaces(soft-disabled)、10 語系支援(en/fr/es/ca/pt-BR/ja/zh/th/vi/ru)、pnpm minimum release age CI 強制 |
第二章:系統架構設計
2.1 總體架構
OpenCode 採用 Client/Server 架構,在整體開發流程中扮演 智慧開發助手 角色:
graph TB
subgraph "介面層(Clients)"
TUI["TUI(終端機介面)"]
Desktop["Desktop App"]
IDE["IDE Extension
(VS Code SDK v1.14.50)"]
Web["Web 介面"]
Mobile["遠端操控
(行動裝置)"]
OW_App["OpenWork Desktop
(Electron App)"]
Router["OpenCode Router
(WhatsApp/Slack/Telegram)"]
end
subgraph "OpenCode Server 層"
Server["OpenCode Server
(本地 / 遠端)"]
AgentBuild["Build Agent
(主要代理 - 完整存取)"]
AgentPlan["Plan Agent
(主要代理 - 規劃分析)"]
SubGeneral["General SubAgent
(子代理 - 複雜搜尋)"]
SubExplore["Explore SubAgent
(子代理 - 唯讀探索)"]
SubScout["Scout SubAgent
(子代理 - 外部文件研究)"]
SysAgents["系統代理
Compaction/Title/Summary"]
Tools["內建工具 15+
bash/edit/write/read/grep/multiedit..."]
Skills["技能系統
SKILL.md"]
CustomTools["自訂工具
TypeScript/JavaScript"]
MCP["MCP 伺服器整合
本地/遠端/OAuth"]
Plugins["外掛系統
npm plugins"]
end
subgraph "OmO 增強層(可選)"
Sisyphus["Sisyphus 主編排器"]
Hephaestus["Hephaestus 深度工匠"]
Prometheus["Prometheus 策略規劃"]
Oracle["Oracle 架構/除錯"]
Librarian["Librarian 文件搜尋"]
BgAgents["背景代理
5+ 並行"]
HashEdit["Hash-Anchored Edit"]
IntentGate_["IntentGate 意圖閘道"]
end
subgraph "AI 供應商層"
Zen["OpenCode Zen"]
Anthropic["Anthropic
Claude Opus 4.6/Sonnet"]
OpenAI["OpenAI
GPT-5/o1"]
Google["Google
Gemini"]
Kimi["Kimi
K2.5"]
GLM["GLM-5"]
AWS["Amazon Bedrock"]
Azure["Azure OpenAI"]
Local["本地模型
Ollama/LM Studio"]
end
subgraph "專案環境層"
Code["程式碼庫"]
Git["Git Repository"]
LSP["LSP Server"]
CI["CI/CD Pipeline"]
DB["資料庫"]
end
TUI --> Server
Desktop --> Server
IDE --> Server
Web --> Server
Mobile --> Server
OW_App --> Server
Router --> Server
Server --> AgentBuild
Server --> AgentPlan
Server --> SysAgents
AgentBuild --> SubGeneral
AgentBuild --> SubExplore
AgentBuild --> SubScout
AgentBuild --> Tools
AgentBuild --> Skills
AgentBuild --> CustomTools
AgentBuild --> MCP
AgentBuild --> Plugins
Plugins --> Sisyphus
Sisyphus --> Hephaestus
Sisyphus --> Prometheus
Sisyphus --> Oracle
Sisyphus --> Librarian
Sisyphus --> BgAgents
Hephaestus --> HashEdit
Sisyphus --> IntentGate_
Server --> Zen
Server --> Anthropic
Server --> OpenAI
Server --> Google
Server --> Kimi
Server --> GLM
Server --> AWS
Server --> Azure
Server --> Local
Tools --> Code
Tools --> Git
Tools --> LSP
MCP --> CI
MCP --> DB2.2 Client/Server 架構
OpenCode 的 Client/Server 架構是其區別於其他 AI 編碼工具的核心特點:
架構原理:
sequenceDiagram
participant Client as 客戶端
(TUI/Desktop/Web/Mobile)
participant Server as OpenCode Server
(本地或遠端)
participant Agent as AI Agent
participant LLM as AI 模型供應商
Client->>Server: HTTP/WebSocket 連線
Server->>Agent: 建立工作階段
Agent->>LLM: 發送 Prompt
LLM-->>Agent: 回應
Agent->>Server: SSE 即時串流
Server-->>Client: SSE 事件通知關鍵優勢:
| 特性 | 說明 |
|---|---|
| 本地執行 | Server 在本地電腦執行,保護程式碼隱私 |
| 遠端控制 | 從行動裝置遠端操控,適合長時間執行任務 |
| 多客戶端 | TUI、Desktop App、Web、IDE 共用同一 Server |
| SSE 串流 | Server-Sent Events 實現即時更新 |
| 可擴展 | 未來可部署為團隊共用的中央 Server |
啟動 Server 模式:
# 啟動 OpenCode Server(供其他客戶端連線)
opencode serve --hostname 127.0.0.1 --port 3000
# 從另一個終端機連線
opencode connect --url http://127.0.0.1:30002.3 代理系統(Agent System)
OpenCode 內建完整的多代理系統,包含 5 個內建代理 和 3 個隱藏系統代理:
2.3.1 主要代理(Primary Agents)
透過 Tab 鍵 在兩個主要代理之間快速切換:
| 代理 | 用途 | 權限 | 適用場景 |
|---|---|---|---|
| Build(預設) | 完整開發 | 完整讀寫存取 | 實作功能、修改程式碼、執行命令 |
| Plan | 分析規劃 | edit/bash 均預設為 ask(需確認) | 探索程式碼庫、設計架構、制定計畫 |
注意:Plan Agent 的
edit權限預設為ask(需確認),bash權限預設也為ask(需確認)。這確保 Plan Agent 在執行任何修改或命令前會先征得您的同意。
2.3.2 子代理(SubAgents)
子代理由主要代理呼叫,用於特定作業:
| 子代理 | 呼叫方式 | 用途 | 特點 |
|---|---|---|---|
| General | @general | 複雜搜尋和多步驟任務 | 通用型子代理,完整工具存取(todo 除外) |
| Explore | 自動呼叫 | 唯讀程式碼庫探索 | 快速找檔案、搜尋關鍵字、回答程式碼問題 |
| Scout | @scout | 外部文件與依賴研究 | 唯讀,可 clone 依賴庫至快取、檢查函式庫原始碼 |
Explore SubAgent 是一個專門的唯讀子代理,用於快速探索程式碼庫:
- 依模式尋找檔案
- 搜尋關鍵字和符號
- 回答有關程式碼庫結構的問題
- 無法修改任何檔案,確保安全性
Scout SubAgent(v1.14.x 新增)是一個專門的唯讀代理,用於外部文件與依賴研究:
- 將依賴儲存庫 clone 到 OpenCode 的託管快取中
- 檢查函式庫的原始碼
- 在不修改工作區的情況下將本機程式碼與 upstream 實作交叉比對
- 適用於需要深入了解第三方依賴實作細節的場景
2.3.3 隱藏系統代理
這些代理在背景自動運作,使用者無需直接操作:
| 系統代理 | 功能 | 說明 |
|---|---|---|
| Compaction | 上下文壓縮 | 當對話上下文過長時自動壓縮,保留關鍵資訊 |
| Title | 標題生成 | 自動為對話產生摘要標題 |
| Summary | 摘要生成 | 生成對話摘要,輔助上下文管理 |
2.3.4 自訂代理
可透過 JSON 設定或 Markdown 檔案建立自訂代理:
方法一:JSON 設定(opencode.json)
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"security-reviewer": {
"description": "Security-focused code reviewer",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "You are a security expert. Review code for vulnerabilities following OWASP Top 10.",
"temperature": 0.2,
"steps": 50,
"mode": "subagent",
"tools": {
"bash": false,
"edit": false,
"write": false,
"websearch": true,
"webfetch": true
},
"permission": {
"read": "allow",
"edit": "deny",
"bash": "deny"
}
}
}
}方法二:Markdown 檔案(.opencode/agents/frontend-dev.md)
---
description: Frontend development specialist
model: anthropic/claude-sonnet-4-5
temperature: 0.5
steps: 100
mode: primary
tools:
websearch: true
bash: true
permission:
edit: allow
bash: ask
color: "#42b883"
---
You are a frontend development specialist working with Vue 3 and TypeScript.
Follow the Composition API style and use Tailwind CSS for styling.方法三:CLI 建立
# 使用互動式命令建立代理
opencode agent create2.3.5 代理進階選項
| 選項 | 說明 | 預設值 |
|---|---|---|
description | 代理描述 | - |
model | 使用的模型 | 繼承全域設定 |
prompt | 系統提示詞(支援 {file:./path} 語法) | - |
temperature | 溫度 (0.0-1.0) | 模型預設 |
top_p | Top-P 取樣 | 模型預設 |
steps | 最大步驟數(取代已棄用的 maxSteps) | 100 |
disable | 停用代理 | false |
hidden | 隱藏代理(不顯示於列表) | false |
mode | 代理模式:primary / subagent / all | all |
color | 代理顏色(hex 或 theme) | - |
tools | 工具啟用/停用(支援萬用字元如 mymcp_*) | - |
permission | 代理專屬權限(覆蓋全域設定) | - |
task | 子代理的工作權限 | - |
供應商特定選項:
{
"agent": {
"deep-thinker": {
"model": "anthropic/claude-sonnet-4-5",
"options": {
"reasoningEffort": "high",
"textVerbosity": "verbose"
}
}
}
}2.3.6 Plan / Build 運作流程
sequenceDiagram
participant Dev as 開發者
participant Plan as Plan Agent
(規劃分析)
participant Build as Build Agent
(完整存取)
participant Explore as Explore SubAgent
(唯讀探索)
participant Code as 程式碼庫
participant LLM as AI 模型
Note over Dev,LLM: 第一階段:規劃(Tab 切換到 Plan)
Dev->>Plan: 描述需求
Plan->>Code: 讀取檔案結構
Plan->>Code: 搜尋相關程式碼
Plan->>LLM: 分析與規劃
LLM->>Plan: 回傳實作計畫
Plan->>Dev: 呈現計畫
Note over Dev,LLM: 迭代計畫
Dev->>Plan: 提供回饋 / 補充細節
Plan->>LLM: 調整計畫
LLM->>Plan: 更新計畫
Plan->>Dev: 呈現更新後計畫
Note over Dev,LLM: 第二階段:實作(Tab 切換到 Build)
Dev->>Build: 確認開始實作
Build->>Explore: 探索程式碼庫結構(唯讀)
Explore->>Code: 搜尋檔案與關鍵字
Explore->>Build: 回傳探索結果
Build->>Code: 建立/修改檔案
Build->>Code: 執行 bash 命令
Build->>Code: 執行測試
Build->>LLM: 驗證結果
LLM->>Build: 確認或修正
Build->>Dev: 完成實作實際操作流程:
# 1. 啟動 OpenCode
opencode
# 2. 按 Tab 切換到 Plan 模式(右下角顯示模式指示器)
<TAB>
# 3. 描述需求
> When a user deletes a note, we'd like to flag it as deleted in the database.
> Then create a screen that shows all the recently deleted notes.
> From this screen, the user can undelete a note or permanently delete it.
# 4. AI 回傳計畫,開發者審視並提供回饋
> We'd like to design this new screen using a design I've used before.
> [Image #1] Take a look at this image and use it as a reference.
# 5. 滿意後,按 Tab 切換回 Build 模式
<TAB>
# 6. 開始實作
> Sounds good! Go ahead and make the changes.實務建議:複雜功能建議先用 Plan 模式做充分設計,確認方案後再切到 Build 模式實作。這能大幅減少返工的機率。
2.4 工具系統(Tools)
OpenCode 內建 15+ 工具,讓 AI Agent 能直接操作開發環境:
| 工具名稱 | 功能 | 權限需求 | 說明 |
|---|---|---|---|
bash | 執行 Shell 命令 | bash | 執行任意終端機命令 |
edit | 編輯檔案 | edit | 透過精確字串替換修改現有檔案 |
write | 建立/覆蓋檔案 | edit | 建立新檔案或覆蓋現有檔案(受 edit 權限控制) |
read | 讀取檔案 | read | 讀取檔案內容,支援指定行範圍 |
grep | 內容搜尋 | grep | 使用正規表示式搜尋檔案內容 |
glob | 檔案搜尋 | glob | 透過模式匹配查找檔案(如 **/*.ts) |
list | 列出目錄 | list | 列出指定路徑下的檔案和目錄 |
patch | 套用修補 | edit | 套用 diff 格式的補丁(受 edit 權限控制) |
lsp | LSP 工具 | lsp | 語言伺服器功能(實驗性,需設定 OPENCODE_EXPERIMENTAL_LSP_TOOL=true) |
webfetch | 擷取網頁 | webfetch | 擷取並讀取網頁內容 |
websearch | 網路搜尋 | websearch | 使用 Exa AI 進行網路搜尋(使用 OpenCode 供應商或設定 OPENCODE_ENABLE_EXA=1) |
todowrite | 管理待辦事項 | todowrite | 建立和更新任務清單追蹤進度(子代理預設停用) |
question | 提問使用者 | question | 執行期間向使用者提問,支援多選選項 |
skill | 使用技能 | skill | 載入 SKILL.md 並回傳技能內容 |
multiedit | 多檔案編輯 | edit | 單次呼叫即可對多個檔案執行編輯(受 edit 權限控制) |
注意:
write、patch、multiedit工具均受edit權限控制,該權限涵蓋所有檔案修改操作(edit、write、patch、multiedit)。websearch無需 API 金鑰,可直接連接 Exa AI 託管 MCP 服務。底層搜尋工具(grep、glob、list)使用 ripgrep,預設遵循.gitignore規則。
工具控管範例:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "deny",
"webfetch": "allow"
},
"agent": {
"safe-coder": {
"tools": {
"bash": false,
"websearch": false,
"mymcp_*": false
},
"permission": {
"bash": "deny"
}
}
}
}2.5 MCP 伺服器整合架構
OpenCode 完整支援 Model Context Protocol(MCP),包含三種連接方式:
graph TB
subgraph "OpenCode"
Agent["AI Agent"]
end
subgraph "MCP 本地伺服器"
LocalGH["GitHub MCP
(npx 啟動)"]
LocalDB["PostgreSQL MCP
(npx 啟動)"]
LocalFS["Filesystem MCP
(npx 啟動)"]
end
subgraph "MCP 遠端伺服器"
RemoteC7["Context7
(官方文件查詢)"]
RemoteLinear["Linear
(專案管理)"]
RemoteSlack["Slack
(訊息整合)"]
end
subgraph "MCP OAuth 伺服器"
OAuthGH["GitHub OAuth"]
OAuthGitLab["GitLab OAuth"]
end
Agent --> LocalGH
Agent --> LocalDB
Agent --> LocalFS
Agent --> RemoteC7
Agent --> RemoteLinear
Agent --> RemoteSlack
Agent --> OAuthGH
Agent --> OAuthGitLab三種 MCP 連接類型:
| 類型 | 設定方式 | 適用場景 | 範例 |
|---|---|---|---|
| local | command + args | 本地工具 | GitHub MCP、PostgreSQL MCP |
| remote | url | 雲端服務 | Context7、Linear |
| oauth | url + OAuth 流程 | 需認證的服務 | GitHub OAuth、GitLab OAuth |
設定範例:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
},
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
},
"postgres": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-postgres"],
"environment": {
"POSTGRES_CONNECTION_STRING": "{env:DATABASE_URL}"
}
}
}
}2.6 外掛系統(Plugins)
OpenCode 的外掛系統允許透過 npm 安裝第三方擴展:
安裝外掛:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["oh-my-openagent", "opencode-wakatime"]
}注意:OmO 外掛已正式更名為
oh-my-openagent。舊名稱oh-my-opencode仍可載入但會顯示棄用警告。設定檔同時接受oh-my-openagent.json[c]與oh-my-opencode.json[c]。
外掛類型:
| 類型 | 說明 | 範例 |
|---|---|---|
| npm 外掛 | 從 npm registry 安裝 | oh-my-openagent、opencode-wakatime、opencode-gitlab-plugin |
| 本地外掛 | 從本地路徑載入 | .opencode/plugins/my-plugin |
| GitHub 外掛 | 從 GitHub 安裝 | github:user/repo |
外掛能力:
- 新增自訂代理
- 新增自訂工具
- 新增自訂指令
- 新增自訂技能
- 修改系統行為(Hooks)
- 攜帶 MCP 伺服器
2.7 技能系統(Skills)
技能(Skills)是可重用的代理能力模組:
SKILL.md 檔案格式:
---
name: api-designer
description: Design RESTful APIs following best practices
tools:
webfetch: true
websearch: true
mcp:
context7:
type: remote
url: https://mcp.context7.com/mcp
permission:
edit: allow
bash: ask
---
You are an API design specialist. Follow these principles:
1. RESTful conventions
2. Proper HTTP status codes
3. HATEOAS when applicable
4. OpenAPI 3.0 specification
5. Pagination for list endpoints技能發現路徑(優先順序由高到低):
| 路徑 | 範圍 | 說明 |
|---|---|---|
.opencode/skills/*/SKILL.md | 專案 | 專案專屬技能 |
~/.config/opencode/skills/*/SKILL.md | 全域 | 使用者全域技能 |
.claude/skills/*/SKILL.md | 專案(Claude Code 相容) | Claude Code 遷移 |
| 外掛攜帶 | 外掛 | OmO 內建技能 |
2.8 與前端框架整合方式
OpenCode 透過以下方式與前端框架(Vue / React / Tailwind)整合:
1. 專案初始化與 AGENTS.md
# 進入前端專案目錄
cd /path/to/vue-project
# 啟動 OpenCode
opencode
# 初始化專案(產生 AGENTS.md)
/init2. AGENTS.md 範例(Vue 3 專案)
# AGENTS.md
## 專案說明
這是一個 Vue 3 + TypeScript + Tailwind CSS 專案。
## 技術堆疊
- Vue 3 Composition API
- TypeScript 5.x
- Tailwind CSS 4.x
- Vite 6.x
- Pinia(狀態管理)
- Vue Router(路由)
## 編碼規範
- 元件使用 `<script setup lang="ts">` 語法
- 樣式使用 Tailwind utility classes
- 狀態管理使用 Pinia store
- 命名慣例:PascalCase(元件)、camelCase(函式/變數)
## 目錄結構
- src/components/ - 共用元件
- src/views/ - 頁面元件
- src/stores/ - Pinia stores
- src/composables/ - 組合式函式
- src/types/ - TypeScript 型別定義3. 搭配 MCP 伺服器使用 Context7 查詢文件
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
```text
```text
建立一個 Vue 3 元件,實作使用者清單的 CRUD 功能。
use context7 查詢 Vue 3 Composition API 最新用法。2.9 與後端框架整合方式
Spring Boot 整合範例:
# AGENTS.md
## 專案說明
Spring Boot 3.x + Java 21 微服務專案
## 技術堆疊
- Spring Boot 3.4
- Java 21
- Spring Data JPA
- Spring Security
- MapStruct
- Lombok
- OpenAPI 3.0
## 編碼規範
- 使用 Clean Architecture
- Controller → Service → Repository 分層
- DTO 使用 Record 類別
- 日誌使用 SLF4J
- 例外處理使用 @ControllerAdviceNode.js / FastAPI 整合:
# Node.js
# opencode 進入專案後使用 /init,會自動識別 package.json 並產生對應的 AGENTS.md
# FastAPI
# opencode 進入專案後使用 /init,會自動識別 pyproject.toml 並產生對應的 AGENTS.mdAGENTS.md 範例(FastAPI):
# AGENTS.md
## 專案說明
FastAPI + Python 3.12 RESTful API 專案
## 技術堆疊
- FastAPI 0.115+
- Python 3.12
- SQLAlchemy 2.0(ORM)
- Alembic(資料庫遷移)
- Pydantic V2(資料驗證)
- pytest(測試)
## 編碼規範
- 使用 async/await 非同步程式設計
- 路由使用 APIRouter 分組
- 依賴注入使用 Depends()
- 回應模型明確定義
- 使用 typing 完整型別標註2.10 與 Git / CI/CD 整合架構
graph LR
subgraph "開發階段"
OC["OpenCode Agent"]
Dev["開發者"]
end
subgraph "版本控制"
Branch["Feature Branch"]
PR["Pull Request"]
Review["Code Review"]
end
subgraph "CI/CD 管線"
Build["建置"]
Test["測試"]
Scan["安全掃描"]
Deploy["部署"]
end
Dev -->|"使用 OpenCode 開發"| OC
OC -->|"自動提交"| Branch
Branch -->|"建立 PR"| PR
PR -->|"AI 輔助審查"| Review
Review -->|"合併觸發"| Build
Build --> Test
Test --> Scan
Scan --> DeployOpenCode GitHub 整合設定:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
}
}
}OpenCode GitLab 整合:
OpenCode 也支援 GitLab 整合,詳見 GitLab 文件。
2.11 與本地模型 / 雲端模型整合架構
graph TB
subgraph "OpenCode"
Config["opencode.json
設定檔"]
Router["模型路由"]
end
subgraph "雲端模型供應商"
Zen["OpenCode Zen
(推薦入門)"]
Go["OpenCode Go
(低成本訂閱)"]
Anthropic["Anthropic
Claude Opus 4.6/Sonnet 4.5"]
OpenAI["OpenAI
GPT-5/o1"]
Google["Google
Gemini 3"]
Bedrock["Amazon Bedrock"]
AzureOAI["Azure OpenAI"]
Copilot["GitHub Copilot"]
GitLab["GitLab Duo"]
OR["OpenRouter
(多供應商閘道)"]
Vercel["Vercel AI Gateway"]
end
subgraph "本地模型"
Ollama["Ollama"]
OllamaCloud["Ollama Cloud"]
LMStudio["LM Studio"]
LlamaCpp["llama.cpp"]
end
Config --> Router
Router --> Zen
Router --> Go
Router --> Anthropic
Router --> OpenAI
Router --> Google
Router --> Bedrock
Router --> AzureOAI
Router --> Copilot
Router --> OR
Router --> Ollama
Router --> LMStudio
Router --> LlamaCpp# 在 OpenCode TUI 中
/connect
# 選擇 Anthropic → Claude Pro/Max 或手動輸入 API Key
/models
# 選擇模型,如 claude-sonnet-4-5本地模型設定範例(Ollama):
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (local)",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-coder:a3b": {
"name": "Qwen3-Coder (local)",
"limit": {
"context": 128000,
"output": 65536
}
}
}
}
}
}企業自訂提供商設定範例:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"company-llm": {
"npm": "@ai-sdk/openai-compatible",
"name": "公司內部 LLM",
"options": {
"baseURL": "https://llm-gateway.internal.company.com/v1",
"apiKey": "{env:COMPANY_LLM_API_KEY}",
"headers": {
"X-Team-ID": "engineering"
}
},
"models": {
"company-model-v2": {
"name": "Company Model v2",
"limit": {
"context": 200000,
"output": 65536
}
}
}
}
}
}第三章:安裝與環境建置
3.1 系統需求
| 項目 | 最低需求 | 建議需求 |
|---|---|---|
| 作業系統 | Windows 10+、macOS 12+、Linux(x64/ARM64) | Windows 11、macOS 14+、Ubuntu 22.04+ |
| Node.js | 18.x | 20.x+ |
| Bun | 1.3.9+(OmO 需要) | 最新版 |
| 終端機 | 任意終端機 | WezTerm、Alacritty、Ghostty、Kitty |
| 記憶體 | 4 GB | 8 GB+(OmO 建議 16 GB+) |
| 磁碟空間 | 500 MB | 1 GB+ |
| 網路 | 連線至 AI 供應商 | 穩定寬頻 |
| Rust | -(OpenWork 需要) | 最新 stable |
3.2 Windows 安裝步驟
最佳實踐:Windows 上建議搭配 WSL 使用,能獲得更好的效能與完整相容性。詳見 Windows WSL 文件。
方法一:使用 Chocolatey(推薦)
# 安裝 Chocolatey(若未安裝)
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 安裝 OpenCode
choco install opencode
# 驗證安裝
opencode --version方法二:使用 Scoop
# 安裝 Scoop(若未安裝)
irm get.scoop.sh | iex
# 安裝 OpenCode
scoop install opencode
# 驗證安裝
opencode --version方法三:使用 npm(全域安裝)
# 透過 npm 全域安裝
npm install -g opencode-ai@latest
# 驗證安裝
opencode --version方法四:使用 Mise
# 使用 mise 安裝
mise use -g github:anomalyco/opencode方法五:使用 Docker
docker run -it --rm ghcr.io/anomalyco/opencode方法六:WSL 安裝(推薦完整體驗)
# 在 WSL 中使用安裝腳本
curl -fsSL https://opencode.ai/install | bash
# 驗證安裝
opencode --version注意:Windows 上透過 Bun 安裝 OpenCode 的支援目前正在開發中。建議使用上述其他方式安裝。
3.3 macOS 安裝步驟
方法一:使用 Homebrew(推薦)
# 使用 OpenCode 官方 tap(最新版本,推薦)
brew install anomalyco/tap/opencode
# 或使用官方 brew formula(更新較慢)
brew install opencode
# 驗證安裝
opencode --version方法二:使用安裝腳本
curl -fsSL https://opencode.ai/install | bash
opencode --version方法三:使用 npm
npm install -g opencode-ai@latest
# 或 bun install -g opencode-ai@latest
# 或 pnpm install -g opencode-ai@latest
# 或 yarn global add opencode-ai@latest方法四:使用 Nix
nix run nixpkgs#opencode # 穩定版
nix run github:anomalyco/opencode # 最新 dev 分支3.4 Linux 安裝步驟
方法一:安裝腳本(通用,推薦)
curl -fsSL https://opencode.ai/install | bash
# 自訂安裝路徑
OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash
# 使用 XDG 路徑
XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash方法二:Arch Linux
# 穩定版
sudo pacman -S opencode
# 最新 AUR 版本
paru -S opencode-bin方法三:Homebrew(macOS 和 Linux)
brew install anomalyco/tap/opencode安裝目錄優先順序:
$OPENCODE_INSTALL_DIR- 自訂安裝目錄$XDG_BIN_DIR- XDG 規範路徑$HOME/bin- 標準使用者二進位目錄$HOME/.opencode/bin- 預設回退路徑
重要:安裝前請移除 0.1.x 以前的舊版本,避免版本衝突。
3.5 Desktop App 安裝
OpenCode 也提供桌面應用程式(Beta):
| 平台 | 安裝檔 |
|---|---|
| macOS(Apple Silicon) | opencode-desktop-darwin-aarch64.dmg |
| macOS(Intel) | opencode-desktop-darwin-x64.dmg |
| Windows | opencode-desktop-windows-x64.exe |
| Linux | .deb、.rpm 或 AppImage |
# macOS(Homebrew)
brew install --cask opencode-desktop
# Windows(Scoop)
scoop bucket add extras
scoop install extras/opencode-desktop下載頁面:GitHub Releases 或 opencode.ai/download
3.6 終端機模式設定
推薦的現代終端機:
| 終端機 | 平台 | 特色 |
|---|---|---|
| WezTerm | 跨平台 | GPU 加速、Lua 設定 |
| Alacritty | 跨平台 | 極致效能、YAML 設定 |
| Ghostty | Linux / macOS | 原生渲染 |
| Kitty | Linux / macOS | 圖片支援 |
TUI 設定(tui.json):
{
"$schema": "https://opencode.ai/tui.json",
"theme": "tokyonight",
"keybinds": {},
"scroll_speed": 3,
"scroll_acceleration": {
"enabled": true
},
"diff_style": "auto"
}可自訂主題列表(部分):
| 主題名稱 | 風格 |
|---|---|
opencode | 預設主題 |
tokyonight | 深色柔和 |
catppuccin | 奶茶色系 |
dracula | 經典暗色 |
gruvbox | 復古暖色 |
nord | 北歐冷色 |
solarized | 精確色彩 |
3.7 IDE 擴充設定
OpenCode 提供 VS Code 擴充(SDK v1.14.50):
- 在 VS Code 擴充商店搜尋 “OpenCode”
- 安裝擴充
- 擴充會自動偵測已安裝的 OpenCode CLI
IDE 文件:IDE 擴充文件
3.8 模型設定(雲端 API / 本地模型)
第一步:連接供應商
# 啟動 OpenCode
opencode
# 新增供應商(互動式選擇)
/connect
# 推薦入門:OpenCode Zen
# 選擇 opencode → 前往 opencode.ai/auth → 取得 API Key
# 選擇模型
/models供應商連接方式一覽(75+ 提供商,以下為主要項目):
| 供應商 | 連接方式 | 備註 |
|---|---|---|
| OpenCode Zen | /connect → API Key | 推薦入門,精選模型 |
| OpenCode Go | /connect → API Key | 低成本訂閱 |
| Anthropic | /connect → Pro/Max 或 API Key | Claude 系列 |
| OpenAI | /connect → Plus/Pro 或 API Key | GPT-5、o1 系列 |
| GitHub Copilot | /connect → GitHub 裝置授權 | 需 Pro+ 訂閱 |
| GitLab Duo | /connect → OAuth 或 PAT | Claude 代理模型 |
| Amazon Bedrock | 環境變數 + 設定檔 | AWS_PROFILE 或 IAM |
| Azure OpenAI | /connect + 環境變數 | 需 AZURE_RESOURCE_NAME |
| Azure Cognitive Services | /connect + 環境變數 | 需 AZURE_COGNITIVE_SERVICES_RESOURCE_NAME |
| Google Vertex AI | 環境變數 | GOOGLE_CLOUD_PROJECT |
| Moonshot AI | /connect → API Key | Kimi K2 系列 |
| Z.AI | /connect → API Key | GLM 系列 |
| DeepSeek | /connect → API Key | DeepSeek Reasoner |
| OpenRouter | /connect → API Key | 多供應商閘道 |
| Vercel AI Gateway | /connect → API Key | 統一端點,按原價計費 |
| Cloudflare AI Gateway | /connect → API Token | Unified Billing |
| Helicone | /connect → API Key | LLM 可觀測性平台 |
| Hugging Face | /connect → Token | 17+ Inference Providers |
| SAP AI Core | /connect → Service Key | 40+ 模型,企業級 |
| Groq | /connect → API Key | 高速推理 |
| Together AI | /connect → API Key | 開源模型託管 |
| Fireworks AI | /connect → API Key | Kimi K2 等 |
| Cerebras | /connect → API Key | Qwen 3 Coder 480B |
| Ollama(本地) | 設定 opencode.json | 免費,離線可用 |
| Ollama Cloud | /connect → API Key | 雲端 Ollama 模型 |
| LM Studio(本地) | 設定 opencode.json | 免費,GUI 管理 |
| llama.cpp(本地) | 設定 opencode.json | 原生 llama-server |
| 302.AI | /connect → API Key | 中國 AI 平台 |
| Baseten | /connect → API Key | 模型部署平台 |
| Cortecs | /connect → API Key | Kimi K2 等 |
| Deep Infra | /connect → API Key | 開源模型推理 |
| Firmware | /connect → API Key | AI 推理平台 |
| IO.NET | /connect → API Key | 17 個最佳化模型 |
| MiniMax | /connect → API Key | M2.1 系列 |
| Nebius Token Factory | /connect → API Key | Token Factory |
| OVHcloud AI Endpoints | /connect → API Key | 歐洲雲端 |
| STACKIT | /connect → Token | 主權歐洲基礎設施 |
| Scaleway | /connect → API Key | Generative APIs |
| Venice AI | /connect → API Key | 隱私優先 |
| xAI | /connect → API Key | Grok 系列 |
| ZenMux | /connect → API Key | 多供應商路由 |
| 自訂提供商 | /connect → Other | 任何 OpenAI 相容 API |
專案層級設定檔(opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5",
"provider": {
"anthropic": {
"options": {
"timeout": 600000
}
}
}
}3.9 環境變數與 Proxy 設定
常用環境變數:
# === 供應商認證 ===
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export AWS_PROFILE="my-dev-profile"
export AWS_REGION="us-east-1"
export AZURE_RESOURCE_NAME="my-azure-resource"
export GOOGLE_CLOUD_PROJECT="my-gcp-project"
# === OpenCode 設定 ===
export OPENCODE_CONFIG="/path/to/custom-config.json"
export OPENCODE_CONFIG_DIR="/path/to/config-directory"
export OPENCODE_CONFIG_CONTENT='{"model":"anthropic/claude-sonnet-4-5"}' # 行內設定覆蓋(最高優先級)
export OPENCODE_INSTALL_DIR="/usr/local/bin"
# === Claude Code 相容性控制 ===
export OPENCODE_DISABLE_CLAUDE_CODE=true # 停用所有 Claude Code 相容性(CLAUDE.md 等)
export OPENCODE_DISABLE_CLAUDE_CODE_RULES=true # 僅停用 CLAUDE.md 規則讀取
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=true # 僅停用 .claude/skills/ 讀取
# === Proxy 設定 ===
export HTTP_PROXY="http://proxy.company.com:8080"
export HTTPS_PROXY="http://proxy.company.com:8080"
export NO_PROXY="localhost,127.0.0.1,.internal.company.com"
# === 實驗性功能 ===
export OPENCODE_EXPERIMENTAL_LSP_TOOL=true
export OPENCODE_ENABLE_EXA=13.10 企業網路限制處理方式
1. Proxy 設定
# 系統級 Proxy
export HTTP_PROXY="http://proxy.company.com:8080"
export HTTPS_PROXY="http://proxy.company.com:8080"
# npm Proxy(用於安裝 MCP 套件)
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:80802. 自訂 Base URL(使用內部 API Gateway)
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"options": {
"baseURL": "https://ai-gateway.internal.company.com/anthropic/v1"
}
}
}
}3. Amazon Bedrock VPC 端點
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"amazon-bedrock": {
"options": {
"region": "us-east-1",
"profile": "production",
"endpoint": "https://bedrock-runtime.us-east-1.vpce-xxxxx.amazonaws.com"
}
}
}
}4. 停用分享功能
{
"$schema": "https://opencode.ai/config.json",
"share": "disabled"
}5. 限制可用供應商
{
"$schema": "https://opencode.ai/config.json",
"enabled_providers": ["anthropic", "amazon-bedrock"],
"disabled_providers": ["openai", "openrouter"]
}6. 停用自動更新
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}7. 網路設定參考
更多網路設定詳見 網路文件。
企業注意事項:建議透過內部鏡像站或 API Gateway 代理 AI 供應商的 API,以統一管理流量、日誌和安全策略。
第四章:專案導入標準流程(SOP)
4.1 新專案導入流程
graph TB
A["建立專案目錄"] --> B["初始化 Git"]
B --> C["建立 package.json
或其他專案設定"]
C --> D["啟動 OpenCode"]
D --> E["執行 /init
產生 AGENTS.md"]
E --> F["建立 opencode.json"]
F --> G["設定 MCP 伺服器"]
G --> H["設定 .opencode/
rules/skills/agents"]
H --> I["建立 .gitignore
排除 .opencode/sessions"]
I --> J["開始開發"]步驟一:建立專案基礎
# 建立專案目錄
mkdir my-new-project && cd my-new-project
# 初始化 Git
git init
# 使用 Plan 模式以 OpenCode 建立專案
opencode步驟二:使用 /init 初始化
# 在 OpenCode TUI 中
/init/init 會自動:
- 分析專案結構
- 偵測技術堆疊
- 產生 AGENTS.md 檔案
- 根據
.gitignore識別排除模式
步驟三:建立 opencode.json
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5",
"permission": {
"websearch": "allow",
"webfetch": "allow"
},
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
},
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}步驟四:設定專案規則
# 建立專案層級規則
mkdir -p .opencode/rules.opencode/rules/project.md:
# 專案開發規則
## 語言與框架
- 使用 TypeScript strict mode
- 專案框架:Next.js 15
## 編碼規範
- 使用 ESLint + Prettier
- 命名慣例:camelCase(變數/函式)、PascalCase(元件/型別)
- 檔案命名:kebab-case
## 安全規範
- 所有使用者輸入必須驗證
- SQL 操作必須使用參數化查詢
- 敏感資料使用環境變數,禁止硬編碼步驟五:設定 .gitignore
# OpenCode 工作目錄(排除會話資料)
.opencode/sessions/
.opencode/share/
# 保留設定檔(提交到版本控制)
# .opencode/rules/ ← 保留
# .opencode/skills/ ← 保留
# .opencode/agents/ ← 保留
# opencode.json ← 保留
# AGENTS.md ← 保留4.2 舊專案導入流程
graph TB
A["Clone 專案"] --> B["啟動 OpenCode"]
B --> C["切換 Plan 模式"]
C --> D["分析專案結構
了解技術堆疊"]
D --> E["執行 /init
產生 AGENTS.md"]
E --> F["建立 opencode.json"]
F --> G["設定專案規則"]
G --> H["建立應用場景技能"]
H --> I["小範圍驗證"]
I --> J["團隊推廣"]舊專案導入注意事項:
- 先分析,後行動:使用 Plan 模式充分了解專案架構
- 建立完善的 AGENTS.md:對舊專案尤為重要,讓 AI 了解歷史決策和技術債
- 小範圍試驗:先在一個模組中驗證 OpenCode 的效果
- 重視 Code Review:舊專案的程式碼風格可能多樣,需確保 AI 生成的程式碼符合現有風格
AGENTS.md 範例(舊專案):
# AGENTS.md
## 專案說明
這是一個執行超過 5 年的遺留系統,正在進行漸進式現代化。
## 技術堆疊
- 後端:Java 8 → 目標 Java 21
- 框架:Spring MVC → 目標 Spring Boot 3.x
- 前端:jQuery + JSP → 目標 Vue 3
- 資料庫:Oracle → 目標 PostgreSQL
## 模組結構
- core/ - 核心業務邏輯(穩定,勿大幅修改)
- web/ - Web 層(優先重構)
- batch/ - 批次處理(延後重構)
- integration/ - 外部系統整合
## 注意事項
- 保留向後相容性
- 新程式碼使用 Java 21 語法
- 新元件使用 Spring Boot 3.x
- 禁止修改 core/ 下的 PaymentService 和 AccountService(正在其他分支重構)
- 所有修改必須通過現有測試套件4.3 Branch 管理策略
建議的 Git Branch 策略與 OpenCode 搭配:
gitGraph
commit id: "Initial"
branch develop
checkout develop
commit id: "v1.0"
branch feature/ai-auth
checkout feature/ai-auth
commit id: "Plan: 設計認證模組"
commit id: "Build: 實作 JWT 驗證"
commit id: "Build: 新增測試"
checkout develop
merge feature/ai-auth
branch feature/ai-crud
checkout feature/ai-crud
commit id: "Plan: 設計 CRUD API"
commit id: "Build: 實作 CRUD Service"
commit id: "Build: 新增整合測試"
checkout develop
merge feature/ai-crud
checkout main
merge develop id: "Release v1.1"建議做法:
| 原則 | 說明 |
|---|---|
| 每功能一分支 | 以 feature/ai-<功能名> 命名 |
| Plan 先行 | 在 feature branch 上先用 Plan 模式設計 |
| 小步提交 | Build 模式每完成一個子任務就提交 |
搭配 /undo、/redo | 利用 OpenCode 內建版本控制快速回溯 |
PR 前執行 /compact(或自動 compact) | 壓縮過長的對話歷史以利審查 |
常用 Git 指令搭配:
# 在 OpenCode TUI 中直接執行 Git 操作
> 建立一個新的 feature branch 叫 feature/user-management 並切換過去
# 或使用 / 指令
> 分析當前 branch 的所有修改,整理成規範的 commit message4.4 PR 與 Code Review 搭配方式
搭配 MCP GitHub 伺服器實現自動化 PR:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
}
}
}PR 建立流程:
# 步驟 1: 完成開發後
> 提交所有修改,commit message 遵循 Conventional Commits 規範
# 步驟 2: 建立 PR
> 使用 GitHub MCP 建立 Pull Request,標題包含 JIRA ticket 編號,
> 描述包含:修改摘要、影響範圍、測試結果、截圖(如適用)
# 步驟 3: 使用 Plan 模式做 Code Review
> 切換到 Plan 模式,審查 PR 中的所有修改,
> 檢查:安全性、效能、可讀性、測試覆蓋率AI 輔助 Code Review 代理(建議設定):
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"code-reviewer": {
"description": "Code Review 專家",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "你是一位嚴謹的 Code Reviewer。請依照以下標準審查程式碼:\n1. OWASP Top 10 安全性\n2. 效能瓶頸\n3. 可讀性和可維護性\n4. 測試完整性\n5. 錯誤處理\n6. 命名規範",
"mode": "primary",
"tools": {
"bash": false,
"edit": false,
"write": false
},
"permission": {
"edit": "deny",
"bash": "deny"
}
}
}
}4.5 團隊協作模式
OpenCode 團隊協作架構:
graph TB
subgraph "團隊成員"
Dev1["開發者 A
OpenCode TUI"]
Dev2["開發者 B
OpenCode Desktop"]
Dev3["開發者 C
VS Code Extension"]
Lead["技術主管
OpenWork Desktop"]
end
subgraph "共享設定(Git 版本控制)"
AgentsMD["AGENTS.md
團隊共識"]
Rules[".opencode/rules/
專案規則"]
Skills[".opencode/skills/
共用技能"]
Config["opencode.json
專案設定"]
end
subgraph "個人設定"
Global1["~/.config/opencode/
個人偏好"]
Global2["~/.config/opencode/
個人偏好"]
Global3["~/.config/opencode/
個人偏好"]
end
Dev1 --> AgentsMD
Dev2 --> AgentsMD
Dev3 --> AgentsMD
Lead --> AgentsMD
Dev1 --> Global1
Dev2 --> Global2
Dev3 --> Global3團隊協作設定清單:
| 項目 | 是否提交 Git | 說明 |
|---|---|---|
AGENTS.md | ✅ | 團隊共識,專案說明 |
opencode.json | ✅ | 共用模型設定、MCP、外掛 |
.opencode/rules/ | ✅ | 編碼規範 |
.opencode/skills/ | ✅ | 共用技能 |
.opencode/agents/ | ✅ | 自訂代理 |
.opencode/sessions/ | ❌ | 個人對話記錄 |
.opencode/share/ | ❌ | 分享資料 |
~/.config/opencode/ | ❌ | 個人偏好 |
對話分享功能:
# 分享當前對話
/share
# 匯出 Markdown
/share --format markdown
# 分享到線上
/share --provider opencode4.6 安全開發流程(SSDLC 整合方式)
安全軟體開發生命週期(SSDLC)與 OpenCode 整合:
graph LR
subgraph "需求階段"
R1["安全需求分析"]
R2["威脅建模"]
end
subgraph "設計階段"
D1["安全架構設計
(Plan 模式)"]
D2["安全審查"]
end
subgraph "開發階段"
C1["安全編碼
(Build 模式 + 規則)"]
C2["靜態分析
(SonarQube MCP)"]
end
subgraph "測試階段"
T1["安全測試
(自動生成)"]
T2["滲透測試"]
end
subgraph "部署階段"
P1["安全部署
(CI/CD 整合)"]
P2["監控"]
end
R1 --> D1
R2 --> D1
D1 --> D2
D2 --> C1
C1 --> C2
C2 --> T1
T1 --> T2
T2 --> P1
P1 --> P2安全編碼規則範例 .opencode/rules/security.md:
# 安全編碼規則
## 必須遵守
1. 所有使用者輸入必須經過驗證和消毒(sanitization)
2. SQL 操作必須使用參數化查詢或 ORM
3. 密碼必須使用 bcrypt/argon2 雜湊儲存
4. API 端點必須實作適當的認證和授權
5. 敏感資料(API Key、密碼)禁止硬編碼
6. CORS 設定必須明確指定允許的來源
7. 檔案上傳必須驗證類型和大小
8. 日誌中禁止記錄敏感資訊
## OWASP Top 10 檢查項目
- [ ] A01: Broken Access Control
- [ ] A02: Cryptographic Failures
- [ ] A03: Injection
- [ ] A04: Insecure Design
- [ ] A05: Security Misconfiguration
- [ ] A06: Vulnerable Components
- [ ] A07: Authentication Failures
- [ ] A08: Software Integrity Failures
- [ ] A09: Logging Failures
- [ ] A10: SSRF第五章:實戰操作教學
5.1 使用 Plan 模式設計系統架構
操作示範:設計一個微服務系統
# 啟動 OpenCode 並切換到 Plan 模式
opencode
<TAB> # 切換到 Plan 模式
# 提出需求
> 我需要設計一個電商系統的微服務架構。
> 需要以下服務:
> 1. 使用者服務(認證、個人資料)
> 2. 商品服務(CRUD、搜尋)
> 3. 訂單服務(建立、付款、狀態追蹤)
> 4. 通知服務(Email、簡訊)
>
> 技術堆疊:
> - Spring Boot 3.4 + Java 21
> - PostgreSQL(使用者、訂單)
> - MongoDB(商品目錄)
> - Redis(快取)
> - Kafka(事件驅動)
> - Docker + Kubernetes
>
> 請設計完整架構,包含:
> - 服務間通訊方式
> - 資料庫設計
> - API 端點設計
> - 部署架構Plan 模式會:
- 分析需求,識別服務邊界
- 設計服務間通訊(同步 REST / 非同步 Kafka)
- 設計資料模型
- 產生 API 規格書
- 產生 Mermaid 架構圖
- 輸出實作計畫(分步驟)
接續:在 Plan 中迭代
> 我有一些調整:
> 1. 商品搜尋需要使用 Elasticsearch
> 2. 訂單服務需要加入 Saga Pattern 處理分散式交易
> 3. 增加 API Gateway 使用 Spring Cloud Gateway確認後切換到 Build 模式:
<TAB> # 切換回 Build 模式
> 按照剛才的計畫,先實作使用者服務。
> 建立 Spring Boot 專案結構,包含:
> 1. Entity、Repository、Service、Controller 各層
> 2. JWT 認證
> 3. 單元測試和整合測試
> 4. Dockerfile
> 5. docker-compose.yml(含 PostgreSQL)5.2 使用 Build 模式產生程式碼
Build 模式核心功能:
| 功能 | 說明 | 範例指令 |
|---|---|---|
| 產生程式碼 | 根據描述產生新的程式碼檔案 | “建立一個 REST API Controller” |
| 修改程式碼 | 修改現有程式碼 | “在 UserService 中加入 email 驗證” |
| 批次修改 | 同時修改多個檔案 | “將所有 Service 類別加入日誌功能” |
| 執行命令 | 執行 shell 命令 | “執行 npm test 看看結果” |
| 自動修正 | 根據錯誤訊息自動修正 | “修正上述的編譯錯誤” |
操作示範:產生 REST API
# 在 Build 模式中
> 在 src/controllers/ 下建立一個 ProductController.ts
> 技術需求:
> - Express.js + TypeScript
> - 實作完整 CRUD(GET/POST/PUT/DELETE)
> - 使用 Zod 做輸入驗證
> - 回應格式使用統一的 ApiResponse<T> 包裝
> - 錯誤處理使用自訂 AppError 類別
> - 加入 JSDoc 註解Build Agent 會自動:
- 讀取專案結構,了解現有的 Controller 風格
- 搜尋相關的 type 定義和工具函式
- 產生符合專案風格的 Controller 檔案
- 更新路由設定(如果有集中路由檔案)
- 產生對應的型別定義
- 建議建立對應的測試檔案
5.3 自動產生測試
操作示範:為現有程式碼產生測試
# 單元測試
> 為 src/services/UserService.ts 產生完整的單元測試。
> 使用 Vitest + testing-library。
> 需要覆蓋所有 public 方法。
> 使用 vi.mock() 模擬外部依賴。
> 邊界條件也要測試。
# 整合測試
> 為 UserController 產生整合測試。
> 使用 supertest + testcontainers(PostgreSQL)。
> 測試完整的 HTTP 請求/回應流程。
# E2E 測試
> 為使用者登入流程產生 Playwright E2E 測試。
> 包含:
> 1. 正常登入
> 2. 錯誤密碼
> 3. 帳號鎖定
> 4. 記住我功能測試生成策略(最佳實踐):
| 策略 | 說明 |
|---|---|
| 先寫測試 | TDD 模式:先描述測試案例,再讓 Build 模式實作 |
| 分層測試 | 單元 → 整合 → E2E 逐層產生 |
| 邊界條件 | 明確要求 AI 覆蓋邊界和異常情況 |
| 隔離外部依賴 | 使用 mock/stub 確保測試穩定性 |
| 測試即文件 | 測試案例名稱使用中文描述業務場景 |
5.4 重構(Refactor)
操作示範:大規模重構
# Plan 模式:分析重構範圍
<TAB>
> 分析 src/services/ 目錄下的所有 Service 類別。
> 識別以下問題:
> 1. 重複的程式碼
> 2. 過大的函式(超過 50 行)
> 3. 缺乏介面抽象
> 4. 硬編碼的設定值
> 5. 缺乏錯誤處理
> 提供重構計畫和優先順序。
# Build 模式:執行重構
<TAB>
> 根據剛才的分析,從高優先順序開始重構:
> 1. 先抽取共用邏輯到 BaseService
> 2. 將硬編碼的設定搬到 config
> 3. 添加統一的錯誤處理
> 4. 確保所有現有測試仍通過安全重構技巧:
| 技巧 | 說明 |
|---|---|
使用 /undo | 不滿意可立即復原 |
| 小步重構 | 每次只重構一個面向 |
| 搭配測試 | 每次重構後執行測試確認 |
| 利用 Explore SubAgent | 先探索所有相關用法 |
| 搭配 LSP | 利用 LSP 找到所有參照 |
5.5 Debug
操作示範:除錯流程
# 提供錯誤訊息
> 執行 npm test 時出現以下錯誤:
> TypeError: Cannot read property 'find' of undefined
> at UserService.findById (/src/services/UserService.ts:42:30)
> at UserController.getUser (/src/controllers/UserController.ts:18:28)
> 請分析原因並修正。
# AI 會自動:
# 1. 讀取 UserService.ts 第 42 行附近
# 2. 讀取 UserController.ts 第 18 行附近
# 3. 搜尋相關的依賴注入設定
# 4. 識別問題(可能是 Repository 未正確注入)
# 5. 提供修正方案
# 6. 修正後重新執行測試驗證除錯最佳實踐:
| 實踐 | 說明 |
|---|---|
| 提供完整錯誤訊息 | 包含堆疊追蹤(Stack Trace) |
| 提供複製步驟 | 告訴 AI 如何觸發錯誤 |
| Copy/Paste 整段日誌 | 讓 AI 能看到完整上下文 |
| 搭配 LSP | lsp 工具可提供更精確的型別資訊 |
| 讓 AI 自行執行 | 給予 bash 權限,讓 AI 自行執行測試驗證 |
5.6 批次修改專案
操作示範:跨檔案批次修改
# 批次添加日誌功能
> 找出 src/controllers/ 下所有 Controller 檔案。
> 在每個公開 API 方法的開頭加入日誌記錄:
> - 記錄方法名稱
> - 記錄請求參數(排除敏感欄位)
> - 記錄響應狀態碼
> - 記錄執行時間
# 批次更新 import
> 將專案中所有 import moment from 'moment'
> 更改為 import dayjs from 'dayjs'
> 並更新所有相關的 API 呼叫
# 批次修正 lint 錯誤
> 執行 eslint 檢查所有 src/ 下的檔案。
> 自動修正所有可以安全修正的錯誤。
> 對於需要手動判斷的錯誤,列出清單讓我決定。提示:OpenCode 的
edit工具支援一次修改多個檔案。AI Agent 會自動選擇最適合的工具。
5.7 生成文件(README / API 文件)
# 產生 README
> 分析本專案的結構和功能,產生一份完整的 README.md。
> 包含:
> 1. 專案說明
> 2. 技術堆疊
> 3. 快速開始(安裝、設定、執行)
> 4. 專案結構
> 5. API 文件連結
> 6. 貢獻指南
> 7. 授權
# 產生 API 文件
> 分析 src/controllers/ 和 src/routes/ 下的所有端點。
> 產生 OpenAPI 3.0 規格書(YAML 格式)。
> 包含:請求/回應範例、錯誤碼、認證方式。
# 產生架構文件
> 使用 Mermaid 語法產生以下架構圖:
> 1. 系統架構圖(C4 Model - Context Level)
> 2. 容器圖(Container Level)
> 3. 元件圖(Component Level)
> 4. 部署圖(Deployment Diagram)
> 5. 資料流圖5.8 使用 Explore / Scout SubAgent 探索程式碼庫與外部文件
Explore SubAgent
Explore SubAgent 是一個 只讀 子代理,專門用於快速探索程式碼庫:
呼叫方式:
# 直接呼叫 Explore SubAgent
@general 這個專案的認證機制是如何實作的?
# 深度探索
@general 分析本專案所有使用到 Redis 的地方,
包含快取策略、過期時間設定、Key 命名規則Explore SubAgent 的特性:
| 特性 | 說明 |
|---|---|
| 只讀操作 | 不會修改任何檔案 |
| 並行搜尋 | 同時搜尋多個檔案 |
| 語義理解 | 理解程式碼結構和邏輯 |
| 快速回應 | 使用小型模型回應,降低延遲和成本 |
進階用法:深度程式碼考古
# 追蹤呼叫鏈
@general 追蹤 UserService.processPayment() 的完整呼叫鏈,
從 Controller 入口到 Repository 層,
列出每一層的參數轉換和驗證邏輯
# 分析設計模式
@general 分析本專案使用了哪些設計模式?
對於每個模式:
1. 在哪些檔案中使用
2. 如何實作
3. 是否有改進空間
# 依賴關係分析
@general 分析 src/services/ 目錄下所有 Service 之間的依賴關係,
畫出依賴圖(Mermaid 語法),
標記是否有循環依賴Explore SubAgent 實用場景清單:
| 場景 | Prompt 範例 |
|---|---|
| 接手新專案 | @general 給我這個專案的完整概覽,包含架構、技術棧、主要模組 |
| 理解業務邏輯 | @general 訂單建立到完成的完整業務流程是什麼? |
| 找出技術債 | @general 找出專案中所有的 TODO、FIXME、HACK 註解 |
| 安全審計 | @general 找出專案中所有可能的安全風險點 |
| 效能分析 | @general 哪些查詢可能導致 N+1 問題? |
| API 清點 | @general 列出所有 REST API 端點及其 HTTP 方法和路徑 |
| 組態分析 | @general 所有環境變數和設定值清單 |
| 測試覆蓋 | @general 哪些核心業務邏輯沒有對應的測試? |
Scout SubAgent(v1.14.50+)
Scout SubAgent 是 v1.14.50 新增的 只讀外部研究 子代理,專門用於查詢外部文件與相依套件:
| 特性 | 說明 |
|---|---|
| 只讀操作 | 不會修改任何檔案 |
| 外部文件研究 | 搜尋 npm、PyPI、Maven 等套件文件 |
| 相依套件分析 | 查詢版本相容性、API 變更 |
| 獨立上下文 | 不與主對話共用上下文視窗 |
| 權限 | 需要 external_directory 權限 |
使用範例:
# 查詢套件相容性
請幫我確認 react-query v5 和 next.js 15 的相容性,
包含 breaking changes 和遷移指南
# 外部 API 文件研究
研究 Stripe API v2025 的 Payment Intents 新欄位,
列出所有新增與移除的參數Explore vs Scout:Explore 專注於分析「本地程式碼庫」,Scout 專注於研究「外部文件與套件」。兩者皆為只讀,可並行使用。
5.9 使用自訂指令加速工作流程
自訂指令的設定方式:
{
"$schema": "https://opencode.ai/config.json",
"commands": {
"review": {
"description": "程式碼審查",
"prompt": "請審查 {file} 中的程式碼變更,重點關注安全性和效能。{file:.opencode/rules/review-checklist.md}"
},
"test-gen": {
"description": "測試生成",
"prompt": "為 {file} 產生完整的測試套件。使用 {file:.opencode/rules/testing.md} 中的測試規範。"
},
"api-doc": {
"description": "API 文件生成",
"prompt": "分析 {file} 中的 API 端點,產生 OpenAPI 3.0 規格。"
},
"security-check": {
"description": "安全檢查",
"prompt": "對 {file} 執行安全檢查,依據 {file:.opencode/rules/security.md}。"
},
"refactor": {
"description": "智慧重構",
"prompt": "分析 {file} 並建議重構方案。遵循 Clean Code 原則和 SOLID 原則。"
},
"migration": {
"description": "資料庫遷移",
"prompt": "根據目前的 Entity 變更,產生對應的資料庫遷移腳本(Flyway SQL 格式)。"
}
}
}使用方式:
# 使用自訂指令
> /review src/controllers/PaymentController.ts
> /test-gen src/services/OrderService.ts
> /security-check src/auth/
> /migration5.10 網路搜尋與網頁擷取
websearch — 搜尋網路資料:
# 搜尋最新的技術資料
> 搜尋 Spring Boot 3.4 的新功能
> 搜尋 PostgreSQL 17 的效能改進
> 搜尋 Vite 6 相容性問題
# AI 會使用 websearch 工具搜尋,
# 並整合結果提供摘要webfetch — 擷取網頁內容:
# 擷取技術文件
> 請到 https://docs.spring.io/spring-boot/docs/3.4.0/reference/html/
> 擷取關於 Actuator 的設定方式
# 擷取 API 規格
> 請擷取 https://api.example.com/openapi.yaml 的內容,
> 並根據這份 API 規格實作 Client SDK進階組合用法:
# 查詢 + 實作
> 搜尋 NestJS Guard 的最新最佳實踐,
> 然後根據搜尋結果為本專案實作一個 RolesGuard。
# Context7 MCP(取代手動 webfetch)
> 使用 Context7 查詢 React Query v5 的 useSuspenseQuery 用法,
> 然後為本專案的 UserList 元件實作 Suspense 查詢。5.11 LSP 整合操作
OpenCode 整合 Language Server Protocol(LSP),獲得與 IDE 相同的程式碼智慧:
LSP 提供的功能:
# 使用 lsp 工具取得型別和定義資訊
> 使用 lsp 工具找出 UserService 介面的所有實作類別
> 使用 lsp 找出所有呼叫 processPayment 方法的地方
> 使用 lsp 取得 OrderDTO 的完整型別定義LSP 啟用設定:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"lsp": "allow"
}
}LSP 支援的語言與工具鏈:
| 語言 | Language Server | 功能 |
|---|---|---|
| TypeScript | tsserver | 型別推斷、定義跳轉、參照 |
| Java | Eclipse JDT.LS | 重構、診斷、自動匯入 |
| Python | Pylance / Pyright | 型別檢查、自動補全 |
| Go | gopls | 型別分析、重構 |
| Rust | rust-analyzer | 型別推斷、借用檢查 |
| C/C++ | clangd | 語法分析、診斷 |
| C# | OmniSharp | 智能感知、重構 |
重要:LSP 讓 AI 能獲得精確的型別資訊,大幅減少幻覺(hallucination)。強烈建議在 IDE 整合時啟用 LSP。
5.12 實戰範例:完整的 CRUD API 開發流程
以下展示使用 OpenCode 從零開始建立一個完整的 RESTful CRUD API 的完整流程:
步驟 1:Plan 模式 — 需求分析與架構設計
<TAB> # 切換到 Plan 模式
> 我需要建立一個「課程管理系統」的 REST API。
> 技術棧:NestJS + TypeScript + PostgreSQL + Prisma
>
> 業務實體:
> - Course(課程):id, title, description, price, duration, instructor, category, status
> - Student(學生):id, name, email, enrolledCourses
> - Enrollment(報名):id, studentId, courseId, enrolledAt, status
>
> 需要:
> 1. 所有實體的 CRUD API
> 2. 多對多關係(學生 ↔ 課程 透過 Enrollment)
> 3. 分頁查詢
> 4. 篩選與排序
> 5. API 認證(JWT)
> 6. 請求驗證(class-validator)
> 7. Swagger 文件
>
> 請先設計 API 規格(端點、HTTP 方法、Request/Response 格式)。Plan Agent 回應摘要:
# API 端點設計
POST /api/v1/auth/login # 登入
POST /api/v1/auth/register # 註冊
GET /api/v1/courses # 課程列表(分頁、篩選)
GET /api/v1/courses/:id # 課程詳情
POST /api/v1/courses # 建立課程
PUT /api/v1/courses/:id # 更新課程
DELETE /api/v1/courses/:id # 刪除課程
GET /api/v1/students # 學生列表
GET /api/v1/students/:id # 學生詳情
POST /api/v1/enrollments # 報名
DELETE /api/v1/enrollments/:id # 取消報名
GET /api/v1/courses/:id/students # 查詢課程學生
GET /api/v1/students/:id/courses # 查詢學生課程步驟 2:Build 模式 — 產生 Prisma Schema
<TAB> # 切換到 Build 模式
> 根據剛才的設計,先建立 Prisma Schema。
> 包含完整的關聯定義和索引設計。Build Agent 產出(prisma/schema.prisma):
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Course {
id String @id @default(uuid())
title String @db.VarChar(200)
description String @db.Text
price Decimal @db.Decimal(10, 2)
duration Int // 分鐘
instructor String @db.VarChar(100)
category String @db.VarChar(50)
status CourseStatus @default(DRAFT)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
enrollments Enrollment[]
@@index([category])
@@index([status])
@@index([instructor])
@@map("courses")
}
model Student {
id String @id @default(uuid())
name String @db.VarChar(100)
email String @unique @db.VarChar(255)
password String @db.VarChar(255)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
enrollments Enrollment[]
@@map("students")
}
model Enrollment {
id String @id @default(uuid())
studentId String @map("student_id")
courseId String @map("course_id")
enrolledAt DateTime @default(now()) @map("enrolled_at")
status EnrollmentStatus @default(ACTIVE)
student Student @relation(fields: [studentId], references: [id])
course Course @relation(fields: [courseId], references: [id])
@@unique([studentId, courseId])
@@index([studentId])
@@index([courseId])
@@map("enrollments")
}
enum CourseStatus {
DRAFT
PUBLISHED
ARCHIVED
}
enum EnrollmentStatus {
ACTIVE
COMPLETED
CANCELLED
}步驟 3:Build 模式 — 產生 DTO 與 Controller
> 現在產生 Course 模組的完整程式碼:
> 1. DTO(CreateCourseDto, UpdateCourseDto, CourseResponseDto, PaginationQueryDto)
> 2. Service(CourseService)
> 3. Controller(CourseController)
> 4. Module(CourseModule)
> 5. Guard(JwtAuthGuard)
> 6. 完整的 Swagger 裝飾器Build Agent 產出(部分示例 — CourseController):
// src/courses/course.controller.ts
import {
Controller, Get, Post, Put, Delete,
Body, Param, Query, UseGuards, HttpCode, HttpStatus,
ParseUUIDPipe
} from '@nestjs/common';
import {
ApiTags, ApiOperation, ApiResponse, ApiBearerAuth,
ApiQuery, ApiParam
} from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { CourseService } from './course.service';
import { CreateCourseDto } from './dto/create-course.dto';
import { UpdateCourseDto } from './dto/update-course.dto';
import { PaginationQueryDto } from '../common/dto/pagination-query.dto';
import { CourseResponseDto } from './dto/course-response.dto';
@ApiTags('Courses')
@Controller('api/v1/courses')
export class CourseController {
constructor(private readonly courseService: CourseService) {}
@Get()
@ApiOperation({ summary: '查詢課程列表(分頁)' })
@ApiResponse({ status: 200, description: '成功', type: [CourseResponseDto] })
@ApiQuery({ name: 'category', required: false })
@ApiQuery({ name: 'status', required: false, enum: ['DRAFT', 'PUBLISHED', 'ARCHIVED'] })
async findAll(@Query() query: PaginationQueryDto) {
return this.courseService.findAll(query);
}
@Get(':id')
@ApiOperation({ summary: '查詢課程詳情' })
@ApiParam({ name: 'id', description: '課程 ID(UUID)' })
@ApiResponse({ status: 200, description: '成功', type: CourseResponseDto })
@ApiResponse({ status: 404, description: '課程不存在' })
async findOne(@Param('id', ParseUUIDPipe) id: string) {
return this.courseService.findOne(id);
}
@Post()
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: '建立課程' })
@ApiResponse({ status: 201, description: '建立成功', type: CourseResponseDto })
@ApiResponse({ status: 401, description: '未認證' })
async create(@Body() createCourseDto: CreateCourseDto) {
return this.courseService.create(createCourseDto);
}
@Put(':id')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: '更新課程' })
@ApiResponse({ status: 200, description: '更新成功', type: CourseResponseDto })
@ApiResponse({ status: 404, description: '課程不存在' })
async update(
@Param('id', ParseUUIDPipe) id: string,
@Body() updateCourseDto: UpdateCourseDto,
) {
return this.courseService.update(id, updateCourseDto);
}
@Delete(':id')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@HttpCode(HttpStatus.NO_CONTENT)
@ApiOperation({ summary: '刪除課程' })
@ApiResponse({ status: 204, description: '刪除成功' })
@ApiResponse({ status: 404, description: '課程不存在' })
async remove(@Param('id', ParseUUIDPipe) id: string) {
return this.courseService.remove(id);
}
@Get(':id/students')
@ApiOperation({ summary: '查詢課程的學生名單' })
async findStudentsByCourse(@Param('id', ParseUUIDPipe) id: string) {
return this.courseService.findStudentsByCourse(id);
}
}步驟 4:Build 模式 — 產生測試
> 為 CourseService 和 CourseController 產生完整測試。
> 使用 Jest + @nestjs/testing。
> 覆蓋所有 CRUD 操作和邊界情況。Build Agent 產出(測試範例):
// src/courses/course.service.spec.ts
import { Test, TestingModule } from '@nestjs/testing';
import { CourseService } from './course.service';
import { PrismaService } from '../prisma/prisma.service';
import { NotFoundException } from '@nestjs/common';
describe('CourseService', () => {
let service: CourseService;
let prisma: PrismaService;
const mockCourse = {
id: '550e8400-e29b-41d4-a716-446655440000',
title: 'TypeScript 進階教學',
description: '深入解析 TypeScript 型別系統',
price: 2999,
duration: 480,
instructor: 'John Doe',
category: '程式語言',
status: 'PUBLISHED',
createdAt: new Date(),
updatedAt: new Date(),
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
CourseService,
{
provide: PrismaService,
useValue: {
course: {
findMany: jest.fn(),
findUnique: jest.fn(),
create: jest.fn(),
update: jest.fn(),
delete: jest.fn(),
count: jest.fn(),
},
},
},
],
}).compile();
service = module.get<CourseService>(CourseService);
prisma = module.get<PrismaService>(PrismaService);
});
describe('findOne', () => {
it('應該回傳指定的課程', async () => {
(prisma.course.findUnique as jest.Mock).mockResolvedValue(mockCourse);
const result = await service.findOne(mockCourse.id);
expect(result).toEqual(mockCourse);
expect(prisma.course.findUnique).toHaveBeenCalledWith({
where: { id: mockCourse.id },
include: { enrollments: true },
});
});
it('課程不存在時應拋出 NotFoundException', async () => {
(prisma.course.findUnique as jest.Mock).mockResolvedValue(null);
await expect(service.findOne('non-existent-id'))
.rejects.toThrow(NotFoundException);
});
});
describe('create', () => {
it('應該建立並回傳新課程', async () => {
const createDto = {
title: 'TypeScript 進階教學',
description: '深入解析 TypeScript 型別系統',
price: 2999,
duration: 480,
instructor: 'John Doe',
category: '程式語言',
};
(prisma.course.create as jest.Mock).mockResolvedValue(mockCourse);
const result = await service.create(createDto);
expect(result).toEqual(mockCourse);
expect(prisma.course.create).toHaveBeenCalledWith({
data: createDto,
});
});
});
describe('findAll', () => {
it('應該回傳分頁結果', async () => {
const courses = [mockCourse];
(prisma.course.findMany as jest.Mock).mockResolvedValue(courses);
(prisma.course.count as jest.Mock).mockResolvedValue(1);
const result = await service.findAll({ page: 1, limit: 10 });
expect(result.data).toEqual(courses);
expect(result.total).toBe(1);
expect(result.page).toBe(1);
});
});
});步驟 5:Build 模式 — 產生 Docker 與部署設定
> 產生以下部署相關檔案:
> 1. Dockerfile(多階段建置)
> 2. docker-compose.yml(含 PostgreSQL)
> 3. .dockerignore
> 4. GitHub Actions CI/CD workflow完整流程回顧:
graph LR
A["1. Plan 模式
需求分析 & API 設計"] --> B["2. Build 模式
Schema & DTO"]
B --> C["3. Build 模式
Service & Controller"]
C --> D["4. Build 模式
測試程式碼"]
D --> E["5. Build 模式
部署設定"]
E --> F["6. Review
程式碼審查"]實務心得:整個流程約 30-60 分鐘可完成一個完整 CRUD 模組。若手動開發,同等品質通常需要 2-3 天。
# Explore SubAgent 會被 Build/Plan Agent 自動呼叫
# 也可以透過建立 read-only 自訂代理達到類似效果
# 常見使用場景:
> 找出所有使用 Redis 的檔案和用法
> 分析 src/utils/ 目錄下每個工具函式的功能
> 列出所有 API 端點和對應的 Controller、Service
> 找出哪些模組依賴 AuthServiceExplore SubAgent 特點:
| 特點 | 說明 |
|---|---|
| 唯讀 | 不能修改任何檔案 |
| 快速 | 使用較小的模型,回應更快 |
| 安全 | 不會意外修改程式碼 |
| 自動呼叫 | 由主要代理根據需要自動調用 |
第六章:最佳實踐(Best Practices)
6.1 Prompt 撰寫策略
有效 Prompt 的三大原則:
| 原則 | 說明 | 範例 |
|---|---|---|
| 具體 | 明確說明需求、技術、格式 | “使用 TypeScript strict mode + Zod 驗證” |
| 分步 | 複雜任務拆分成步驟 | “先分析、再設計、最後實作” |
| 提供上下文 | 說明背景、限制、風格 | “按照現有 UserService 的風格” |
Prompt 撰寫範例:
# ❌ 不好的 Prompt
> 幫我寫一個登入功能
# ✅ 好的 Prompt
> 在 src/controllers/AuthController.ts 中實作登入 API。
> 技術需求:
> - Express.js + TypeScript
> - JWT Token(access token 15分鐘、refresh token 7天)
> - 使用 bcrypt 驗證密碼
> - 登入失敗 5 次鎖定帳號 30 分鐘
> - 回傳格式參考 src/types/ApiResponse.ts
> - 錯誤處理使用 src/utils/AppError.ts
> - 產生對應的單元測試進階 Prompt 技巧:
| 技巧 | 說明 |
|---|---|
| 參照現有檔案 | “按照 UserController 的風格” |
| 使用圖片 | 拖拽設計稿到 OpenCode(支援圖片輸入) |
| 引用 URL | “參考 https://… 的文件” |
使用 {file:./path} 語法 | 在 prompt 或規則中引用檔案內容 |
| 使用技能 | “use skill api-designer” |
6.2 Token 控制策略
| 策略 | 說明 | 操作 |
|---|---|---|
使用 /compact 指令 | 手動壓縮長對話 | 在 TUI 中輸入 /compact |
| 自動壓縮 | 系統自動壓縮過長上下文 | Compaction Agent 自動觸發 |
| 小模型搭配 | 使用 small_model 處理簡單任務 | 設定 "small_model": "claude-haiku-4-5" |
| 適時開新對話 | 避免單一對話過長 | 使用 /new 開始新對話 |
| 恢復對話 | 從先前的對話繼續 | 使用 /resume 或 --resume 參數 |
| 使用子代理 | 子代理有獨立上下文,不佔用主對話空間 | Explore SubAgent、General SubAgent |
模型選擇策略:
| 場景 | 建議模型 | 理由 |
|---|---|---|
| 系統架構設計 | Claude Opus 4.6 / GPT-5 | 複雜推理能力 |
| 日常編碼 | Claude Sonnet 4.5 | 效能/成本平衡 |
| 快速修正 | Claude Haiku 4.5 | 低延遲、低成本 |
| 程式碼審查 | Claude Sonnet 4.5 | 需要判斷力 |
| 文件生成 | Claude Sonnet 4.5 | 語言表達能力 |
| 一般探索 | Claude Haiku 4.5 | 唯讀場景成本控制 |
6.3 避免幻覺(Hallucination)
| 策略 | 說明 |
|---|---|
| 要求引用來源 | “請引用你所參考的檔案路徑和行號” |
| 要求驗證 | “修改後請執行測試確認功能正常” |
| 使用 LSP 確認 | LSP 提供精確的型別和符號資訊 |
| 搭配 Context7 | 使用 MCP 查詢官方文件,而非依賴 AI 記憶 |
| 網路搜尋 | 對不確定的 API 使用 websearch 確認最新版本 |
| 使用 Explore SubAgent | 讓 AI 先探索程式碼庫,避免臆測 |
| 明確告知限制 | “如果不確定,請告訴我而不是猜測” |
規則範例(防幻覺):
# .opencode/rules/anti-hallucination.md
## 防幻覺規則
1. 修改程式碼前必須先讀取原始檔案
2. 使用外部函式庫 API 時,必須先查詢文件確認
3. 不確定的資訊標記為 [需確認]
4. 生成的程式碼必須能通過編譯
5. 產生測試案例必須實際可執行6.4 如何做 Code Validation
驗證流程:
graph TB
A["AI 產生程式碼"] --> B["靜態分析
(ESLint/TSC)"]
B --> C["單元測試"]
C --> D["整合測試"]
D --> E["安全掃描"]
E --> F["Code Review
(人工或 AI Review 代理)"]
F --> G["通過 → 提交"]
F --> H["失敗 → 回饋 AI 修正"]
H --> A# 在 OpenCode 中執行驗證流程
> 請依序執行以下驗證:
> 1. tsc --noEmit(TypeScript 編譯檢查)
> 2. eslint src/(lint 檢查)
> 3. npm test(測試)
> 4. npm run build(確認可建置)
> 如果有錯誤,請修正後重新驗證。6.5 與 SonarQube / 測試工具整合
SonarQube MCP 整合:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sonarqube": {
"type": "local",
"command": ["npx", "-y", "@sonarsource/sonarqube-mcp-server"],
"environment": {
"SONARQUBE_URL": "{env:SONARQUBE_URL}",
"SONARQUBE_TOKEN": "{env:SONARQUBE_TOKEN}"
}
}
}
}# 使用 SonarQube 分析
> 使用 SonarQube MCP 分析當前專案的程式碼品質。
> 重點關注:
> 1. 安全漏洞(Vulnerabilities)
> 2. 臭味程式碼(Code Smells)
> 3. 重複程式碼(Duplications)
> 4. 技術債務(Technical Debt)6.6 大型專案使用策略
大型專案(100+ 檔案)最佳實踐:
| 策略 | 說明 |
|---|---|
| 模組化 AGENTS.md | 清楚描述模組邊界 |
使用 .gitignore 模式 | 排除不相關的檔案(如 node_modules、dist) |
| 分區開發 | 每次只在一個模組中工作 |
| 善用 Explore SubAgent | 先對程式碼庫進行全面了解而不佔用主對話上下文 |
| 建立專案技能 | 將常用的操作封裝成 Skill |
| 使用子代理 | 將複雜任務委派給子代理 |
6.7 多模組專案管理建議
Monorepo 設定範例:
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"agent": {
"frontend-dev": {
"description": "前端開發專家",
"prompt": "你是前端開發專家,專注在 packages/frontend/ 目錄。{file:./packages/frontend/AGENTS.md}"
},
"backend-dev": {
"description": "後端開發專家",
"prompt": "你是後端開發專家,專注在 packages/backend/ 目錄。{file:./packages/backend/AGENTS.md}"
},
"shared-lib": {
"description": "共用模組開發者",
"prompt": "你負責 packages/shared/ 共用模組,確保前後端相容性。"
}
}
}6.8 格式化器整合
OpenCode 支援在編輯完成後自動格式化:
安裝格式化器:
# 使用 treefmt(推薦)
opencode install treefmt
# OpenCode 偵測到的格式化器:
# - Prettier(JavaScript/TypeScript)
# - Black(Python)
# - rustfmt(Rust)
# - gofmt(Go)
# - treefmt(多語言)更多格式化器設定:格式化器文件
6.9 多語言專案管理策略
語言特定的 AGENTS.md 設定:
以下展示一個同時包含 Java 後端、React 前端、Python 資料管線的多語言專案:
# AGENTS.md(多語言專案)
## 專案概覽
全端電商平台,包含三個主要模組。
## 模組結構
- `backend/` — Java 21 + Spring Boot 3.2 + PostgreSQL
- `frontend/` — React 18 + TypeScript + Vite
- `data-pipeline/` — Python 3.12 + Apache Airflow + Pandas
## 通用規則
- 所有 API 使用 JSON 格式
- 日期格式統一使用 ISO 8601
- ID 使用 UUID v4
- 所有模組共用 `shared/openapi.yaml` 定義的 API 契約
## Java 模組規範
- 使用 Gradle 8.x 建置
- 測試框架:JUnit 5 + Mockito
- 遵循 DDD 分層架構(domain/application/infrastructure/presentation)
- 使用 Flyway 資料庫遷移
- 不使用 Lombok
## React 模組規範
- 使用 pnpm 管理依賴
- 狀態管理:Zustand
- 樣式:Tailwind CSS
- 測試框架:Vitest + Testing Library
- 使用 React Hook Form + Zod 驗證
- 國際化:react-i18next
## Python 模組規範
- 使用 Poetry 管理依賴
- 遵循 PEP 8 + type hints
- 測試框架:pytest
- 使用 Pydantic v2 資料驗證多語言專案的代理設定:
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"java-dev": {
"description": "Java 後端開發專家",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "你是 Java 21 + Spring Boot 3 專家。{file:./backend/AGENTS.md}",
"tools": { "bash": true, "edit": true }
},
"react-dev": {
"description": "React 前端開發專家",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "你是 React 18 + TypeScript 專家。{file:./frontend/AGENTS.md}",
"tools": { "bash": true, "edit": true }
},
"python-dev": {
"description": "Python 資料管線專家",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "你是 Python 3.12 + Airflow 專家。{file:./data-pipeline/AGENTS.md}",
"tools": { "bash": true, "edit": true }
},
"api-contract": {
"description": "API 契約管理",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "你負責維護 shared/openapi.yaml 的 API 契約,確保前後端一致。",
"tools": { "edit": true, "bash": false }
}
}
}6.10 程式碼審查最佳實踐
1. 建立專屬 Code Review 代理:
{
"agent": {
"code-reviewer": {
"description": "嚴格的程式碼審查員",
"model": "anthropic/claude-sonnet-4-5",
"temperature": 0.2,
"prompt": "你是一位資深的程式碼審查員。請依照以下檢查清單審查程式碼:\n\n## 架構層面\n- 是否遵循現有的架構模式\n- 是否有不必要的複雜度\n- 模組間的耦合度是否合適\n\n## 程式碼品質\n- 命名是否清晰\n- 函式是否過長(建議不超過 30 行)\n- 是否有重複邏輯\n- 錯誤處理是否完善\n\n## 安全性\n- 使用者輸入是否有驗證\n- 是否有注入攻擊風險\n- 敏感資訊是否正確處理\n- 是否有適當的授權檢查\n\n## 效能\n- 是否有 N+1 查詢\n- 是否有不必要的記憶體分配\n- 是否有可能的記憶體洩漏\n\n## 測試\n- 是否有對應的測試\n- 邊界條件是否覆蓋\n- 測試是否有意義(不是為了湊覆蓋率)",
"tools": {
"bash": false,
"edit": false,
"write": false
},
"permission": {
"edit": "deny",
"bash": "deny"
}
}
}
}2. 程式碼審查流程:
graph TB
A["開發者提交 PR"] --> B["AI Code Reviewer
自動審查"]
B --> C{"是否通過?"}
C -->|"通過"| D["人工審查者
做最終確認"]
C -->|"不通過"| E["AI 產生修改建議
附帶程式碼範例"]
E --> F["開發者修正"]
F --> B
D --> G{"人工是否通過?"}
G -->|"通過"| H["合併 PR"]
G -->|"不通過"| I["人工回饋"]
I --> F3. Code Review Prompt 模板(按照變更類型):
| 變更類型 | 審查重點 | 建議模型 |
|---|---|---|
| 新功能 | 架構一致性、API 設計、測試覆蓋 | Sonnet 4.5 |
| Bug Fix | 根因分析、回歸風險、邊界條件 | Sonnet 4.5 |
| 重構 | 行為保持、效能影響、測試通過 | Sonnet 4.5 |
| 安全修正 | 漏洞修補完整性、OWASP 合規 | Opus 4.6 |
| 效能優化 | 基準測試數據、複雜度分析 | Sonnet 4.5 |
| 依賴升級 | 破壞性變更、CVE、相容性 | Haiku 4.5 |
6.11 TDD/BDD 與 OpenCode 整合
TDD 工作流程(Test-Driven Development):
graph LR
A["紅燈 🔴
先寫失敗的測試"] --> B["綠燈 🟢
AI 寫最小實作"]
B --> C["重構 🔵
AI 優化程式碼"]
C --> A實際操作:
# Step 1:寫測試(紅燈)
> 我要實作一個 PriceCalculator 類別。
> 先只寫測試,不要寫實作。
> 測試案例:
> 1. 一般商品原價計算
> 2. 會員 9 折優惠
> 3. 滿 1000 元打 85 折
> 4. 折扣不能低於成本價
> 5. 多重折扣只取最惠
# Step 2:最小實作(綠燈)
> 現在實作 PriceCalculator,讓所有測試通過。
> 只寫最小可行的實作,不要提前優化。
# Step 3:重構
> 所有測試都通過了。
> 現在重構 PriceCalculator:
> 1. 將折扣策略抽取為策略模式
> 2. 使用 Chain of Responsibility 處理折扣優先順序
> 3. 確保所有測試仍然通過BDD 工作流程(Behavior-Driven Development):
# 從 Gherkin 規格產生測試
> 根據以下 Gherkin 規格產生 Cucumber 測試:
>
> Feature: 購物車結帳
> Scenario: 一般使用者購買單一商品
> Given 購物車中有一件價格 500 元的商品
> When 使用者點擊「結帳」
> Then 訂單總額應為 500 元
> And 訂單狀態應為「待付款」
>
> Scenario: VIP 使用者享有折扣
> Given 購物車中有一件價格 1000 元的商品
> And 使用者身份為 VIP
> When 使用者點擊「結帳」
> Then 訂單總額應為 900 元
> And 折扣金額應為 100 元
>
> Scenario: 庫存不足
> Given 購物車中有一件商品,庫存為 0
> When 使用者點擊「結帳」
> Then 應顯示「庫存不足」錯誤
> And 訂單不應被建立6.12 安全編碼規範指南
安全規則檔案範例 .opencode/rules/security-enterprise.md:
# 企業安全編碼規範
## 輸入驗證
- 所有使用者輸入必須在入口點驗證(Controller/Handler 層)
- 使用白名單策略而非黑名單
- 數值型態做範圍檢查
- 字串長度限制
- 使用 parameterized query,禁止字串拼接 SQL
- 檔案上傳:檢查 MIME type、檔案大小、副檔名白名單
## 認證與授權
- 密碼:bcrypt(work factor ≥ 12)或 argon2id
- JWT:使用 RS256 或 ES256,禁止 HS256(用於內部服務間除外)
- Token 過期:Access Token ≤ 15 分鐘,Refresh Token ≤ 7 天
- 登入失敗鎖定:5 次失敗鎖定 30 分鐘
- 敏感操作需要二次驗證(2FA / 再次輸入密碼)
## 資料保護
- 敏感資料加密儲存(AES-256-GCM)
- 傳輸一律使用 TLS 1.3
- 日誌中遮罩敏感資訊(PII、信用卡號、密碼)
- API Response 不回傳多餘欄位(DTO 投影)
## Session 管理
- 使用 Secure + HttpOnly + SameSite Cookie
- Session ID 使用密碼學安全的隨機產生器
- 登出時銷毀 Session
## 錯誤處理
- 不向使用者暴露內部錯誤訊息
- 記錄完整錯誤到內部日誌
- 統一錯誤回應格式
## 依賴管理
- 定期執行 npm audit / OWASP Dependency Check
- 使用 lockfile 固定版本
- 禁止使用已知有 CVE 的套件版本在 Prompt 中引用安全規範:
> 請實作使用者註冊 API。
> 必須遵循 {file:.opencode/rules/security-enterprise.md} 中的所有安全規範。
> 特別注意:
> 1. 密碼強度驗證(至少 8 字元、包含大小寫、數字、特殊符號)
> 2. Email 格式驗證
> 3. 防止重複註冊
> 4. Rate Limiting6.13 效能優化策略
使用 OpenCode 進行效能分析與優化:
# 分析效能瓶頸
> 分析 src/services/OrderService.ts 的效能問題。
> 重點關注:
> 1. N+1 查詢問題
> 2. 不必要的資料載入
> 3. 可以快取的查詢
> 4. 缺乏分頁的大量查詢
> 5. 同步操作可以改為非同步的效能優化 Checklist:
| 類別 | 檢查項目 | OpenCode 指令 |
|---|---|---|
| 資料庫 | 缺少索引 | “分析這個查詢是否需要索引” |
| 資料庫 | N+1 查詢 | “找出所有可能的 N+1 查詢” |
| 快取 | 重複查詢 | “建議哪些查詢適合加入 Redis 快取” |
| API | 回應過大 | “檢查 API 回應是否包含不必要的欄位” |
| 前端 | Bundle 過大 | “分析哪些依賴可以 tree-shaking 或 lazy load” |
| 並行 | 序列化操作 | “找出可以並行化的操作” |
| 記憶體 | 記憶體洩漏 | “檢查是否有未釋放的資源或監聽器” |
第七章:系統維護與治理
7.1 模型版本管理策略
| 策略 | 說明 |
|---|---|
| 固定版本 | 在 opencode.json 中指定精確版本 |
| 分環境設定 | 開發用 Sonnet、Architecture Review 用 Opus |
| 降級策略 | 模型不可用時的備選方案 |
| 版本追蹤 | 紀錄哪些程式碼由哪個模型版本產生 |
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5",
"agent": {
"plan": {
"model": "anthropic/claude-opus-4-6"
},
"build": {
"model": "anthropic/claude-sonnet-4-5"
}
}
}7.2 OpenCode 版本管理
自動更新(預設啟用):
# OpenCode 預設會自動更新到最新版本
# 可透過設定停用{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false
}手動更新:
# Homebrew
brew upgrade opencode
# npm
npm install -g opencode-ai@latest
# Scoop
scoop update opencode
# 安裝腳本
curl -fsSL https://opencode.ai/install | bash7.3 日誌管理
# 啟用除錯日誌
opencode --debug
# 日誌存放位置
# Linux/macOS: ~/.local/share/opencode/logs/
# Windows: %APPDATA%/opencode/logs/
# 或使用 XDG 規範路徑
# 日誌內容包含:
# - API 請求/回應(脫敏)
# - 工具執行紀錄
# - 錯誤和警告
# - 效能指標7.4 成本控制
方法一:使用模型分層
| 任務 | 推薦模型 | 每 100K tokens 約成本 |
|---|---|---|
| 架構設計 | Opus 4.6 | $15-25 |
| 日常開發 | Sonnet 4.5 | $3-5 |
| 簡單查詢 | Haiku 4.5 | $0.25-0.5 |
方法二:使用 small_model
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5"
}small_model 自動用於:
- 標題生成
- 上下文壓縮
- 簡單的子代理任務
方法三:Token 追蹤
OpenCode TUI 底部會顯示:
- 當前對話的 Token 消耗
- 預估成本
- Cache 命中率
方法四:本地模型(零成本)
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-coder:a3b": {
"name": "Qwen3-Coder (local)",
"limit": {
"context": 128000,
"output": 65536
}
}
}
}
}
}方法五:使用 OpenCode Go(經濟訂閱)
OpenCode Go 提供低成本的訂閱方案,適合個人開發者。
7.5 權限管理
OpenCode 使用 permission 設定來決定某個操作是否應自動執行、提示審批,還是被阻止。從 v1.1.1 開始,舊版 tools 布林設定已合併到 permission 中(仍保持向後相容)。
7.5.1 完整權限列表
| 權限 | 說明 | 比對對象 | 預設值 |
|---|---|---|---|
read | 讀取檔案 | 檔案路徑 | allow(.env 檔案為 deny) |
edit | 所有檔案修改(涵蓋 edit、write、patch、multiedit) | 檔案路徑 | allow |
bash | 執行 shell 命令 | 解析後的命令 | allow |
glob | 檔案萬用字元比對 | 萬用字元模式 | allow |
grep | 內容搜尋 | 正規表示式 | allow |
list | 列出目錄檔案 | 目錄路徑 | allow |
task | 啟動子代理 | 子代理類型 | allow |
skill | 載入技能 | 技能名稱 | allow |
lsp | LSP 查詢 | 目前不支援細粒度 | allow |
webfetch | 擷取 URL | URL | allow |
websearch | 網頁搜尋 | 查詢內容 | allow |
codesearch | 程式碼搜尋 | 查詢內容 | allow |
external_directory | 存取專案工作目錄外的路徑 | 路徑 | ask |
doom_loop | 同一工具呼叫以相同輸入重複 3 次觸發 | - | ask |
7.5.2 細粒度權限控制(物件語法)
可使用物件語法根據工具輸入套用不同操作,支援萬用字元(* 比對零或多個字元、? 精確比對一個字元)和 ~/$HOME 主目錄展開:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
},
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}規則評估順序:最後比對的規則優先。建議將
"*"放最前面,具體規則放後面。
7.5.3 「ask」選項的三個選擇
當權限設為 ask 時,使用者會看到三個選項:
| 選項 | 說明 |
|---|---|
| once | 僅批准本次請求 |
| always | 批准與建議模式比對的後續請求(當前工作階段有效) |
| reject | 拒絕請求 |
always所批准的模式集合由工具提供(例如 bash 審批通常會將安全命令前綴如git status*加入白名單)。
7.5.4 代理專屬權限
代理權限會與全域設定合併,代理規則優先。支援 JSON 設定和 Markdown 代理中定義:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny"
}
}
},
"code-reviewer": {
"permission": {
"edit": "deny",
"bash": "deny",
"webfetch": "deny"
}
}
}
}Markdown 代理中的權限設定:
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash:
"*": ask
"git diff": allow
"git log*": allow
"grep *": allow
webfetch: deny
---
Only analyze code and suggest changes.7.6 技能系統(Skills)
7.6.1 SKILL.md 檔案格式
每個 SKILL.md 必須以 YAML frontmatter 開頭,僅識別以下欄位(未知欄位會被忽略):
| 欄位 | 必填 | 說明 |
|---|---|---|
name | ✅ | 技能名稱(1-64 字元,小寫字母數字,可用 - 分隔) |
description | ✅ | 技能描述(1-1024 字元) |
license | ❌ | 授權類型 |
compatibility | ❌ | 相容性標記 |
metadata | ❌ | 字串到字串的自訂映射 |
注意:
name必須與包含SKILL.md的目錄名稱一致,正規表示式:^[a-z0-9]+(-[a-z0-9]+)*$
---
name: database-migration
description: 產生和管理資料庫遷移腳本
license: MIT
compatibility: opencode
metadata:
audience: maintainers
workflow: database
---
你是一位資料庫遷移專家。
## 職責
1. 根據實體變更產生遷移腳本
2. 確保遷移的可逆性(支援 up/down)
3. 驗證遷移腳本的安全性
4. 處理資料遷移(不只是結構遷移)
## 規則
- 每個遷移腳本必須有 rollback 方案
- 大表修改必須使用 online DDL
- 禁止在遷移中使用 DROP TABLE(改用 rename + 新建)
- 索引建立使用 CONCURRENTLY7.6.2 技能發現路徑
OpenCode 會從當前工作目錄向上遍歷至 git 工作樹根目錄,搜尋以下位置:
.opencode/skills/<name>/SKILL.md # 專案層級
~/.config/opencode/skills/<name>/SKILL.md # 全域層級
.claude/skills/<name>/SKILL.md # Claude Code 相容(若未停用)
~/.claude/skills/<name>/SKILL.md # 全域 Claude 相容
.agents/skills/<name>/SKILL.md # Agent 相容
~/.agents/skills/<name>/SKILL.md # 全域 Agent 相容7.6.3 技能權限控制
使用基於模式的權限控制代理可存取哪些技能:
{
"permission": {
"skill": {
"*": "allow",
"internal-*": "deny",
"experimental-*": "ask"
}
}
}| 操作 | 說明 |
|---|---|
allow | 技能立即載入 |
deny | 對代理隱藏技能,拒絕存取 |
ask | 載入前提示使用者確認 |
按代理覆蓋權限:
{
"agent": {
"plan": {
"permission": {
"skill": {
"internal-*": "allow"
}
}
}
}
}停用技能工具: 為不需使用技能的代理完全停用技能功能:
{
"agent": {
"plan": {
"tools": {
"skill": false
}
}
}
}7.7 自訂工具(Custom Tools)
7.7.1 工具定義
// .opencode/tools/check-coverage.ts
import { tool } from "opencode/tool";
export default tool({
name: "check_coverage",
description: "檢查指定模組的測試覆蓋率",
parameters: {
module: {
type: "string",
description: "要檢查的模組路徑"
},
threshold: {
type: "number",
description: "最低覆蓋率門檻(百分比)",
default: 80
}
},
async execute({ module, threshold }) {
const { execSync } = await import("child_process");
const result = execSync(
`npx vitest --coverage --reporter=json ${module}`,
{ encoding: "utf-8" }
);
const coverage = JSON.parse(result);
const totalCoverage = coverage.total.lines.pct;
if (totalCoverage < threshold) {
return `⚠️ 覆蓋率 ${totalCoverage}% 低於門檻 ${threshold}%`;
}
return `✅ 覆蓋率 ${totalCoverage}%,通過門檻 ${threshold}%`;
}
});7.7.2 多工具匯出
// .opencode/tools/project-utils.ts
import { tool } from "opencode/tool";
export const listEndpoints = tool({
name: "list_endpoints",
description: "列出所有 API 端點",
parameters: {},
async execute() {
// ...
}
});
export const checkDeps = tool({
name: "check_deps",
description: "檢查依賴更新",
parameters: {},
async execute() {
// ...
}
});7.7.3 覆蓋內建工具
自訂工具可以使用與內建工具相同的名稱來覆蓋它們。例如,覆蓋 edit 工具以添加自動格式化功能。
更多自訂工具文件:自訂工具文件
7.8 規則系統(Rules)
OpenCode 的規則系統讓你為 AI 代理定義行為準則,類似 Cursor 的規則功能:
規則檔案位置與優先順序:
| 位置 | 範圍 | 說明 |
|---|---|---|
AGENTS.md(專案根目錄) | 專案 | 專案說明和規則(優先使用) |
CLAUDE.md(若未停用) | 專案 | Claude Code 相容(AGENTS.md 不存在時備援) |
~/.config/opencode/AGENTS.md | 全域 | 個人規則(不提交 Git) |
~/.claude/CLAUDE.md(若未停用) | 全域 | 全域 Claude Code 相容 |
優先順序:本機檔案 > 全域檔案。同類別中
AGENTS.md優先於CLAUDE.md。
自訂指令(opencode.json):
可在 opencode.json 中指定額外規則檔案,支援 glob 模式和遠端 URL:
{
"$schema": "https://opencode.ai/config.json",
"instructions": [
"CONTRIBUTING.md",
"docs/guidelines.md",
".cursor/rules/*.md",
"packages/*/AGENTS.md",
"https://raw.githubusercontent.com/my-org/shared-rules/main/style.md"
]
}遠端指令的擷取逾時為 5 秒。所有指令檔案都會與
AGENTS.md合併。
停用 Claude Code 相容性:
export OPENCODE_DISABLE_CLAUDE_CODE=1 # 停用所有 .claude 支援
export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 # 僅停用 ~/.claude/CLAUDE.md
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 # 僅停用 .claude/skills規則範例 .opencode/rules/coding-standards.md:
# 編碼標準
## TypeScript 規範
- 使用 strict mode
- 使用 interface 而非 type(除非需要 union type)
- 避免 any,使用 unknown + type guard
- 非同步操作使用 async/await,避免 .then()
## 測試規範
- 每個 Service 至少 80% 覆蓋率
- 測試檔案命名:*.test.ts 或 *.spec.ts
- 使用 describe/it 結構
- 每個 it 只測試一件事7.9 風險控管
| 風險 | 緩解措施 |
|---|---|
| AI 產生有安全漏洞的程式碼 | 安全規則 + SonarQube 掃描 + Code Review |
| AI 意外修改關鍵檔案 | Plan 模式(edit deny)+ 權限控制 |
| API Key 外洩 | 環境變數管理 + .gitignore |
| Token 成本失控 | 模型分層 + 成本追蹤 + 預算警告 |
| AI 幻覺誤導 | 防幻覺規則 + 驗證流程 + 搜尋確認 |
| 資料隱私 | 本地模型 + 企業 API Gateway |
第八章:系統升級策略
8.1 升級前檢查清單
| 項目 | 檢查內容 | 負責人 |
|---|---|---|
| ☐ 版本確認 | 確認目前版本和目標版本 | DevOps |
| ☐ 變更日誌 | 閱讀 Release Notes,了解 Breaking Changes | Tech Lead |
| ☐ 測試環境 | 在測試環境先升級驗證 | DevOps |
| ☐ 外掛相容性 | 確認所有外掛與新版本相容(特別是 OmO) | 開發者 |
| ☐ 自訂工具 | 確認自訂工具 API 未改變 | 開發者 |
| ☐ MCP 伺服器 | 確認 MCP 伺服器連線正常 | DevOps |
| ☐ 備份設定 | 備份 opencode.json 和 .opencode/ | DevOps |
| ☐ SDK 版本 | IDE Extension 版本需與 CLI 版本匹配 | 開發者 |
| ☐ 團隊通知 | 通知團隊成員升級時程 | Tech Lead |
8.2 版本相容性測試
# 步驟 1: 在測試環境安裝新版本
npm install -g opencode-ai@1.2.21
# 步驟 2: 驗證 CLI
opencode --version
# 步驟 3: 驗證設定檔
opencode config validate
# 步驟 4: 驗證 MCP 伺服器
opencode mcp status
# 步驟 5: 驗證外掛
opencode plugin list
opencode plugin check-compatibility
# 步驟 6: 在測試專案中執行基本操作
# - 開啟對話
# - 切換 Plan/Build
# - 執行工具(edit、bash、grep)
# - 測試 MCP 伺服器呼叫
# - 測試自訂工具
# - 測試技能8.3 回滾策略
# 方法一:安裝指定版本
npm install -g opencode-ai@1.2.16
# 方法二:Homebrew 回滾
brew uninstall opencode
brew install anomalyco/tap/opencode@1.2.16
# 方法三:使用 docker 固定版本
docker run -it ghcr.io/anomalyco/opencode:1.2.168.4 CI/CD 驗證流程
# .github/workflows/opencode-verify.yml
name: OpenCode Upgrade Verification
on:
pull_request:
paths:
- 'opencode.json'
- '.opencode/**'
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install OpenCode
run: |
curl -fsSL https://opencode.ai/install | bash
opencode --version
- name: Validate Config
run: opencode config validate
- name: Check MCP Servers
run: opencode mcp status
- name: Run Basic Smoke Test
run: |
echo "測試基本 CLI 功能"
opencode --help第九章:企業導入建議
9.1 導入階段規劃
graph LR
P1["第一階段
評估與試點
2-4 週"] --> P2["第二階段
小規模推廣
4-8 週"]
P2 --> P3["第三階段
全面導入
8-12 週"]
P3 --> P4["第四階段
進階優化
持續"]第一階段:評估與試點(2-4 週)
| 項目 | 說明 |
|---|---|
| 選擇試點團隊 | 3-5 人,技術能力較強 |
| 選擇試點專案 | 非關鍵任務、新功能開發 |
| 安裝與設定 | 統一設定 opencode.json、AGENTS.md |
| 定義成功指標 | 程式碼產出量、品質、開發時間 |
| 安全評估 | 確認資料隱私、API 金鑰管理 |
第二階段:小規模推廣(4-8 週)
| 項目 | 說明 |
|---|---|
| 教育訓練 | Prompt 撰寫、Plan/Build 工作流程 |
| 建立團隊規則 | AGENTS.md、.opencode/rules/ |
| 建立共用技能 | .opencode/skills/ |
| 導入 MCP 伺服器 | GitHub、SonarQube、CI/CD |
| 開始追蹤 KPI | 效率指標、品質指標 |
第三階段:全面導入(8-12 週)
| 項目 | 說明 |
|---|---|
| 全團隊導入 | 所有開發團隊使用 OpenCode |
| 導入 OmO(可選) | 進階多代理協作 |
| 導入 OpenWork(可選) | 非技術人員參與 |
| 建立內部知識庫 | 最佳實踐、常見問題 |
| 優化工作流程 | 結合 CI/CD、Code Review |
第四階段:進階優化(持續)
| 項目 | 說明 |
|---|---|
| 導入 ACP | Agent Communication Protocol |
| 自訂模型路由 | 根據任務自動選擇模型 |
| 建立企業外掛 | 開發內部專用外掛 |
| 持續優化成本 | 模型降級策略、Cache 優化 |
| 技能管理成熟度提升 | 跨團隊技能共享 |
9.2 教育訓練策略
| 角色 | 訓練內容 | 時長 |
|---|---|---|
| 開發者 | 安裝設定、Prompt 技巧、Plan/Build 流程、常用工具 | 8 小時 |
| 資深開發者 | 自訂代理、技能開發、MCP 伺服器、外掛開發 | 16 小時 |
| Tech Lead | 團隊設定管理、Code Review 策略、品質控管 | 8 小時 |
| DevOps | 安裝部署、CI/CD 整合、安全設定、版本管理 | 8 小時 |
| 專案經理 | OpenWork 使用、協作流程、成本追蹤 | 4 小時 |
9.3 試點專案規劃
建議的試點專案特徵:
| 特徵 | 原因 |
|---|---|
| 新功能開發 | 避免影響現有功能 |
| 中等複雜度 | 能展現 AI 的價值 |
| 有明確需求文件 | 方便 AI 理解需求 |
| 有完善測試 | 方便驗證 AI 產出品質 |
| 非關鍵系統 | 降低風險 |
9.4 成本效益分析
成本項目:
| 項目 | 月成本(預估) | 說明 |
|---|---|---|
| API 費用 | $50-200/人 | 依使用量而定 |
| 基建成本 | $0-50 | 本地部署基本免費 |
| 訓練成本 | 一次性 | 8-16 小時/人 |
效益項目:
| 項目 | 預估效益 | 說明 |
|---|---|---|
| 開發速度 | +40-60% | 自動化重複性工作 |
| 程式碼品質 | +20-30% | 規則系統 + Review 代理 |
| 文件品質 | +50% | 自動生成文件 |
| 學習曲線 | 降低 30% | AI 輔助程式碼探索 |
| 團隊滿意度 | +25% | 減少枯燥工作 |
9.5 KPI 設計
| KPI | 計算方式 | 目標值 |
|---|---|---|
| 程式碼產出量 | 每日有效 commit 行數 | 提升 40%+ |
| 缺陷密度 | Bugs / KLOC | 降低 20%+ |
| 測試覆蓋率 | Line Coverage | 達到 80%+ |
| PR 審查時間 | 從提交到合併的時間 | 縮短 30%+ |
| 開發者滿意度 | 季度問卷調查 | ≥ 4/5 |
| AI 使用率 | 每日使用 OpenCode 的開發者比例 | ≥ 80% |
| Token 成本 | 每人每月 API 費用 | ≤ $200 |
9.6 企業版功能
OpenCode Enterprise 提供額外的企業功能:
| 功能 | 說明 |
|---|---|
| SSO 整合 | SAML/OIDC 單一登入 |
| 集中設定管理 | 從中央伺服器下發設定 |
| 進階稽核日誌 | 完整的操作記錄 |
| 合規控制 | 限制可用模型、供應商 |
| 優先支援 | 專屬支援團隊 |
| SLA 保證 | 服務等級協議 |
| 自訂部署 | 私有雲 / on-premises |
詳情參考 企業版文件。
9.7 企業級安全治理架構
安全架構總覽:
graph TB
subgraph "存取控制層"
SSO["SSO / OIDC 認證"]
RBAC["RBAC 角色管理"]
API_GW["API Gateway
(流量控制 + 日誌)"]
end
subgraph "傳輸安全層"
TLS["TLS 1.3 加密"]
VPN["企業 VPN"]
mTLS["mTLS(服務間通訊)"]
end
subgraph "資料安全層"
Encryption["資料加密(AES-256-GCM)"]
DLP["DLP 政策
(防止敏感資料外洩)"]
Masking["日誌遮罩"]
end
subgraph "合規與稽核"
Audit["稽核日誌"]
SIEM["SIEM 整合"]
Compliance["合規報告
(ISO 27001 / SOC 2)"]
end
SSO --> RBAC
RBAC --> API_GW
API_GW --> TLS
TLS --> Encryption
Encryption --> DLP
DLP --> Masking
Masking --> Audit
Audit --> SIEM
SIEM --> Compliance企業安全設定範例:
{
"$schema": "https://opencode.ai/config.json",
"share": "disabled",
"autoupdate": false,
"permission": {
"read": "allow",
"edit": "allow",
"bash": "ask",
"webfetch": "allow",
"websearch": "allow",
"external_directory": "deny"
},
"security": {
"audit_log": true,
"audit_log_path": "/var/log/opencode/audit.log",
"sensitive_patterns": [
"password",
"secret",
"api_key",
"token",
"credit_card"
],
"blocked_domains": [
"pastebin.com",
"transfer.sh"
]
},
"enabled_providers": ["anthropic", "amazon-bedrock"],
"disabled_providers": ["openai", "openrouter", "google"]
}RBAC 角色建議:
| 角色 | 可用代理 | 工具權限 | 模型權限 |
|---|---|---|---|
| 初級工程師 | Build | edit: allow, bash: ask | Sonnet |
| 資深工程師 | Build, Plan | edit: allow, bash: allow | Sonnet, Opus |
| 架構師 | Build, Plan, 自訂 | 全權限 | 全模型 |
| 審查員 | code-reviewer | read: allow, edit: deny | Sonnet |
| 實習生 | Plan 模式(唯讀) | edit: deny, bash: deny | Haiku |
9.8 企業導入常見挑戰與解決方案
| 挑戰 | 解決方案 |
|---|---|
| 開發者抗拒改變 | 從志願者開始、展示成效、漸進推廣 |
| 資安團隊疑慮 | 本地模型 + API Gateway + 稽核日誌 |
| 成本控制困難 | 每人每月預算上限 + 模型分層使用 |
| 程式碼品質不一 | 統一規則系統 + AI Code Review 代理 |
| 知識產權問題 | 授權模式審查(MIT / SUL)+ 法務確認 |
| 網路限制 | 內部 API Gateway + Bedrock VPC |
| 合規要求 | 稽核日誌 + 存取控制 + 資料不上傳 |
導入成功的關鍵因素:
graph TB
A["高層贊助
(必要條件)"]
B["冠軍團隊
(3-5 人試點)"]
C["明確的成功指標
(KPI)"]
D["教育訓練計畫"]
E["持續支援與回饋"]
F["成功案例展示"]
A --> B
B --> C
C --> D
D --> E
E --> F
F -->|"擴大推廣"| B9.9 多團隊統一管理方案
中央設定分發架構:
graph TB
subgraph "設定管理中心"
ConfigRepo["設定 Git Repository"]
ConfigAPI["設定 API 服務"]
end
subgraph "團隊 A"
A1["opencode.json(繼承 base)"]
A2["AGENTS.md(團隊 A 專用)"]
A3[".opencode/rules/"]
end
subgraph "團隊 B"
B1["opencode.json(繼承 base)"]
B2["AGENTS.md(團隊 B 專用)"]
B3[".opencode/rules/"]
end
ConfigRepo --> ConfigAPI
ConfigAPI --> A1
ConfigAPI --> B1基礎設定模板(base.opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"_comment": "企業基礎設定 — 所有團隊繼承",
"share": "disabled",
"autoupdate": false,
"enabled_providers": ["anthropic", "amazon-bedrock"],
"permission": {
"bash": "ask",
"admin": "deny"
},
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
},
"sonarqube": {
"type": "local",
"command": ["npx", "-y", "@sonarsource/sonarqube-mcp-server"],
"environment": {
"SONARQUBE_URL": "https://sonarqube.internal.company.com",
"SONARQUBE_TOKEN": "{env:SONARQUBE_TOKEN}"
}
}
}
}團隊覆寫設定(team-a.opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"_extends": "base",
"model": "anthropic/claude-sonnet-4-5",
"agent": {
"build": { "model": "anthropic/claude-sonnet-4-5" },
"plan": { "model": "anthropic/claude-opus-4-6" }
},
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira-mcp.internal.company.com/mcp",
"environment": {
"JIRA_TOKEN": "{env:JIRA_TOKEN}"
}
}
}
}9.10 成本分析與 ROI 模型
月度成本預估(20 人工程團隊):
| 項目 | 單價 | 數量 | 月費 |
|---|---|---|---|
| Claude Sonnet 4.5 API | ~$80/人/月 | 20 | $1,600 |
| Claude Opus 4.6 API(架構師用) | ~$200/人/月 | 3 | $600 |
| Claude Haiku 4.5 API(子代理) | ~$20/人/月 | 20 | $400 |
| 基礎設施(Server/Gateway) | $500/月 | 1 | $500 |
| 教育訓練(一次性,攤提 6 月) | $10,000 | 1 | $1,667 |
| 月度總計 | $4,767 |
ROI 分析:
| 指標 | 數值 | 說明 |
|---|---|---|
| 開發效率提升 | 40-60% | 等同增加 8-12 人的產能 |
| 工程師月薪(均值) | $4,000 | 台灣資深工程師平均 |
| 等效人力成本節省 | $32,000-$48,000/月 | 8-12 人 × $4,000 |
| OpenCode 月成本 | $4,767/月 | 上表費用 |
| 淨節省 | $27,233-$43,233/月 | |
| ROI | 571%-906% | 投入 1 元回收 5.7-9 元 |
注意:以上數字為估算值,實際效益因團隊技能水準、專案類型和導入時程而異。建議在試點階段收集實際數據驗證。
第十章:Oh My OpenAgent(OmO)生態系
10.1 OmO 總覽與定位
Oh My OpenAgent(OmO) 是 OpenCode 生態系中最重要的第三方外掛,前身為 Oh My OpenCode(ohmo)。OmO 透過引入多代理協作系統,將 OpenCode 從單一 AI 代理提升為企業級多代理編排平台。
| 指標 | 數值 |
|---|---|
| GitHub 名稱 | code-yeongyu/oh-my-openagent |
| 版本 | v4.1.2 |
| GitHub Stars | 57.7k+ |
| 貢獻者 | 219+ |
| 版本發佈 | 177+ |
| 授權 | SUL(Sisyphus Use License) |
| npm 套件名 | oh-my-openagent(舊名 oh-my-opencode 過渡期仍可用) |
| CLI 入口 | ultrawork / ulw |
| 前身 | oh-my-opencode(ohmo)→ 已更名為 oh-my-openagent |
| 官方網站 | ohmyopenagent.com |
| 商業版 | Sisyphus Labs(企業級支援) |
核心定位:
OmO 不是要取代 OpenCode,而是在 OpenCode 基礎上添加「紀律層」(Discipline Layer)——讓 AI 代理在自主操作時保持結構化、可驗證、可追蹤。
graph TB
subgraph "OmO 架構層次"
L1["使用者介面
ultrawork / ulw 一鍵啟動"]
L2["意圖閘道
IntentGate"]
L3["紀律代理層
Discipline Agents"]
L4["編輯與驗證
Hash-Anchored Edit"]
L5["底層引擎
OpenCode Core"]
end
L1 --> L2
L2 --> L3
L3 --> L4
L4 --> L5品牌說明:Oh My OpenAgent 已將 npm 套件名正式更名為
oh-my-openagent(舊名oh-my-opencode過渡期仍可安裝)。GitHub repo 與官方品牌統一使用oh-my-openagent。CLI 入口為ultrawork或ulw。
10.2 核心概念:Discipline Agents
OmO 的核心創新是 Discipline Agents——一組專門化的 AI 代理,各自負責不同的職責:
graph TB
subgraph "Discipline Agents 編排架構"
User["使用者"]
IG["IntentGate
意圖閘道"]
subgraph "主編排器"
Sisyphus["🏔️ Sisyphus
主編排器
claude-opus-4-6 / kimi-k2.5 / glm-5"]
end
subgraph "專業代理"
Hephaestus["🔨 Hephaestus
深度工匠
gpt-5.4"]
Prometheus["🔥 Prometheus
策略規劃
Thinking Model"]
Oracle["🔮 Oracle
架構/除錯"]
Librarian["📚 Librarian
文件搜尋"]
end
subgraph "輔助系統"
BG["背景代理
5+ 並行"]
TODO["Todo Enforcer"]
Comment["Comment Checker"]
Ralph["Ralph Loop"]
end
end
User --> IG
IG --> Sisyphus
Sisyphus --> Hephaestus
Sisyphus --> Prometheus
Sisyphus --> Oracle
Sisyphus --> Librarian
Sisyphus --> BG
Sisyphus --> TODO
Sisyphus --> Comment
Sisyphus --> Ralph| 代理 | 角色 | 預設模型 | 職責 |
|---|---|---|---|
| Sisyphus 🏔️ | 主編排器 | claude-opus-4-6 / kimi-k2.5 / glm-5 | 任務分解、子代理調度、品質控管 |
| Hephaestus 🔨 | 深度工匠 | gpt-5.4 | 複雜程式碼實作、長時間深度工作(The Legitimate Craftsman) |
| Prometheus 🔥 | 策略規劃 | claude-opus-4-6 / kimi-k2.5 / glm-5 | 多方案分析、風險評估、長期規劃 |
| Oracle 🔮 | 架構/除錯 | 按需選擇 | 架構決策、複雜除錯 |
| Librarian 📚 | 文件搜尋 | 快速模型 | 搜尋官方文件、API 參考 |
| Explore 🔎 | 程式碼探索 | 快速模型 | 快速程式碼庫 grep 搜尋(唯讀) |
| Multimodal Looker 🔍 | 視覺工程 | 多模態模型 | 截圖轉程式碼、UI 分析(v3.12+) |
| Metis 🦉 | 規劃顧問 | Thinking Model | 諮詢建議、風險評估(v3.12+) |
Sisyphus 的 AI 路由策略:
Sisyphus 使用情境感知的模型路由:
任務類型 → 自動選擇最適模型
├── 複雜程式碼實作 → Hephaestus(gpt-5.4)
├── 架構設計與規劃 → Prometheus(claude-opus-4-6 / kimi-k2.5 / glm-5)
├── 架構除錯 → Oracle(按需)
├── 文件搜尋 → Librarian(快速模型)
├── 程式碼探索 → Explore(快速模型,唯讀)
└── 協調與編排 → Sisyphus 自身(claude-opus-4-6)10.3 ultrawork / ulw 一鍵啟動
ultrawork(簡寫 ulw)是 OmO 的入口命令,一鍵啟動完整的多代理環境:
# 一鍵啟動 OmO + OpenCode
ultrawork
# 或簡寫
ulw
# 等效於手動啟動 OpenCode + 載入 OmO 外掛 + 初始化所有 Discipline Agentsultrawork 啟動流程:
sequenceDiagram
participant User as 使用者
participant ULW as ultrawork
participant OC as OpenCode
participant IG as IntentGate
participant Sis as Sisyphus
User->>ULW: ulw
ULW->>OC: 啟動 OpenCode
OC->>ULW: Server 就緒
ULW->>IG: 初始化 IntentGate
ULW->>Sis: 初始化 Sisyphus + Discipline Agents
Sis->>ULW: 所有代理就緒
ULW->>User: TUI 介面就緒(含 OmO 功能)10.4 IntentGate 意圖閘道
IntentGate 是 OmO 的入口守衛,分析使用者意圖並路由到適當的代理:
graph TB
Input["使用者輸入"]
IG["IntentGate
意圖分析"]
Simple["簡單任務
(OpenCode 內建代理處理)"]
Complex["複雜任務
(Sisyphus 編排)"]
Plan["規劃任務
(Prometheus)"]
Debug["除錯任務
(Oracle)"]
Search["搜尋任務
(Librarian)"]
Input --> IG
IG -->|"簡單修改"| Simple
IG -->|"複雜功能開發"| Complex
IG -->|"架構設計"| Plan
IG -->|"除錯分析"| Debug
IG -->|"文件查詢"| SearchIntentGate 的決策邏輯:
| 意圖類型 | 路由目標 | 範例 |
|---|---|---|
| 簡單修改 | OpenCode Build Agent | “修改檔案名稱” |
| 複雜功能開發 | Sisyphus → Hephaestus | “實作完整的使用者認證系統” |
| 架構設計 | Sisyphus → Prometheus | “設計微服務遷移策略” |
| 除錯分析 | Sisyphus → Oracle | “分析這個 race condition” |
| 文件搜尋 | Librarian | “查詢 TypeORM 最新 API” |
| 多步驟任務 | Sisyphus(全面編排) | “重構整個 API 層並更新測試” |
10.5 Hash-Anchored Edit Tool
Hash-Anchored Edit 是 OmO 最重要的技術創新之一,解決了 AI 編輯程式碼時的「行號漂移」問題:
傳統編輯方式的問題:
問題:AI 在 Line 42 插入程式碼後,
原本 Line 50 的程式碼變成了 Line 53。
如果 AI 接著要修改原 Line 50,就會改錯地方。Hash-Anchored Edit 解決方案:
每一行程式碼都有一個唯一的 Hash ID(LINE#ID)
修改時使用 Hash ID 定位,而非行號。
即使行號漂移,Hash ID 仍然正確指向目標行。運作流程:
sequenceDiagram
participant Agent as AI 代理
participant HAE as Hash-Anchored Edit
participant File as 目標檔案
Agent->>HAE: 編輯請求
(LINE#ID: abc123, 新內容)
HAE->>File: 讀取檔案
HAE->>HAE: 1. 計算每行的 content hash
HAE->>HAE: 2. 對比 LINE#ID 與 hash
HAE->>HAE: 3. 驗證 hash 匹配
alt Hash 匹配
HAE->>File: 修改正確的行
HAE->>Agent: ✅ 編輯成功
else Hash 不匹配
HAE->>Agent: ❌ 內容已變更,重新讀取檔案
endHash-Anchored Edit 的優勢:
| 優勢 | 說明 |
|---|---|
| 消除行號漂移 | 使用 content hash 而非行號定位 |
| 自動驗證 | 編輯前驗證目標行內容是否如預期 |
| 衝突偵測 | 即時偵測多代理編輯衝突 |
| 安全回滾 | hash 不匹配時自動中止,防止錯誤覆寫 |
| 並行安全 | 多背景代理同時編輯也不會衝突 |
10.6 /init-deep 深度初始化
/init-deep 是 OmO 增強的初始化命令,生成 階層式 AGENTS.md 系統:
# 在 OpenCode TUI 中
/init-deep階層式 AGENTS.md 結構:
project-root/
├── AGENTS.md # 專案級(全域規則)
├── src/
│ ├── AGENTS.md # src 級規則
│ ├── controllers/
│ │ └── AGENTS.md # Controller 層規則
│ ├── services/
│ │ └── AGENTS.md # Service 層規則
│ └── models/
│ └── AGENTS.md # Model 層規則
├── tests/
│ └── AGENTS.md # 測試規則
└── infra/
└── AGENTS.md # 基建規則頂層 AGENTS.md 範例(/init-deep 自動生成):
# AGENTS.md (Root)
## 專案概覽
這是一個 Next.js 15 + TypeScript 全端應用程式。
## 架構決策紀錄
- ADR-001: 使用 App Router(非 Pages Router)
- ADR-002: 使用 Server Components 為預設
- ADR-003: 使用 tRPC 進行類型安全的 API 呼叫
## 全域規則
- 所有檔案使用 UTF-8 編碼
- 所有 commit 遵循 Conventional Commits
- 禁止使用 var,使用 const/let
- 所有 async 函式必須有 error handling子目錄 AGENTS.md 範例:
# AGENTS.md (src/controllers/)
## Controller 層規則
- 每個路由一個 Controller 檔案
- Controller 不含業務邏輯,只做路由和入參驗證
- 使用 Zod schema 驗證請求
- 統一使用 ApiResponse<T> 包裝回應
- 錯誤一律拋出 AppError,由全域 middleware 處理10.7 Prometheus 規劃器
Prometheus 是 OmO 的策略規劃代理,專門處理需要「深度思考」的任務:
適用場景:
| 場景 | 說明 |
|---|---|
| 架構設計 | 設計新的系統架構或遷移策略 |
| 多方案評估 | 分析多種實作方案的優劣 |
| 風險評估 | 分析技術決策的潛在風險 |
| 重構規劃 | 大規模重構的步驟規劃 |
| 效能優化 | 分析效能瓶頸或提出優化策略 |
使用方式:
# Prometheus 由 Sisyphus 自動調用
# 也可以手動請求:
> 我需要 Prometheus 分析一下把 REST API 遷移到 GraphQL 的可行性。
> 請提供至少 3 種遷移策略,各自的優缺點和風險。Prometheus 的輸出格式:
## 策略分析報告
### 策略 A: Big Bang 遷移
- 優點: 一步到位,避免維護兩套系統
- 缺點: 風險高,測試範圍大
- 風險等級: 🔴 高
- 預估工期: 4 週
### 策略 B: 漸進式遷移(Strangler Fig Pattern)
- 優點: 低風險,可隨時回滾
- 缺點: 需要維護兩套系統
- 風險等級: 🟢 低
- 預估工期: 8 週
### 策略 C: 並行運行
- 優點: 完全不影響現有系統
- 缺點: 資源消耗較大
- 風險等級: 🟡 中
- 預估工期: 6 週
### 建議
推薦策略 B(漸進式遷移),原因...10.8 背景代理(Background Agents)
OmO 支援最多 5+ 個背景代理 同時運行:
graph TB
Sis["Sisyphus
主編排器"]
BG1["背景代理 #1
重構 Service 層"]
BG2["背景代理 #2
產生測試"]
BG3["背景代理 #3
更新文件"]
BG4["背景代理 #4
安全掃描"]
BG5["背景代理 #5
效能分析"]
HAE["Hash-Anchored Edit
衝突仲裁"]
Sis --> BG1
Sis --> BG2
Sis --> BG3
Sis --> BG4
Sis --> BG5
BG1 --> HAE
BG2 --> HAE
BG3 --> HAE背景代理的特點:
| 特點 | 說明 |
|---|---|
| 並行執行 | 多個代理同時處理不同任務 |
| 衝突仲裁 | Hash-Anchored Edit 自動處理並行編輯衝突 |
| 獨立上下文 | 每個背景代理有獨立的上下文 |
| Sisyphus 監控 | 主編排器監控進度和質量 |
| 自動合併 | 結果由 Sisyphus 審查後合併 |
使用場景:
# 大規模重構(並行執行)
> 我需要對以下模組進行並行重構:
> 1. UserService - 改用 Repository Pattern
> 2. ProductService - 加入快取層
> 3. OrderService - 加入 Saga Pattern
> 4. 同時為以上三個 Service 產生單元測試
> 5. 更新相關文件
>
> 請使用背景代理並行處理。10.9 Skill-Embedded MCPs
OmO 引入了 技能嵌入式 MCP 伺服器:自訂技能可以攜帶 MCP 伺服器,在使用技能時自動啟動:
---
name: k8s-ops
description: Kubernetes 運維技能
mcp:
k8s:
type: local
command: ["npx", "-y", "@mcp/kubernetes-server"]
environment:
KUBECONFIG: "{env:KUBECONFIG}"
---
你是 Kubernetes 運維專家。使用 k8s MCP 伺服器管理叢集。優勢:
| 優勢 | 說明 |
|---|---|
| 隨需啟動 | MCP 伺服器只在使用技能時啟動 |
| 封裝完整 | 技能自帶所需的外部工具 |
| 可移植 | 技能 + MCP 打包後可跨團隊共享 |
| 安全 | 技能的 MCP 權限受技能定義的 permission 控制 |
10.10 Ralph Loop 自我迴圈
Ralph Loop 是 OmO 的品質保證機制,確保每個實作循環(代理的一次完整工作迴圈)都通過驗證:
graph TB
A["代理接收任務"] --> B["執行實作"]
B --> C["Ralph 自我檢查"]
C -->|通過| D["標記完成"]
C -->|失敗| E["分析失敗原因"]
E --> F["自動修正"]
F --> B
style C fill:#f9f,stroke:#333Ralph Loop 檢查項目:
| 檢查 | 說明 |
|---|---|
| 編譯通過 | 確認程式碼能編譯/轉譯 |
| 測試通過 | 執行相關測試確認不會回歸 |
| Lint 通過 | 確認程式碼符合規範 |
| TODO 完成 | 確認所有待辦事項已處理 |
| 註解完整 | 確認關鍵邏輯有註解 |
10.11 Todo Enforcer 與 Comment Checker
Todo Enforcer:
確保 AI 代理在工作過程中使用 TODO 追蹤進度:
# Todo Enforcer 會:
# 1. 要求代理在任務開始時建立 TODO 清單
# 2. 追蹤每個 TODO 的完成狀態
# 3. 任務結束時驗證所有 TODO 已完成
# 4. 未完成的 TODO 會被報告Comment Checker:
在程式碼提交前檢查臨時註解:
# Comment Checker 會偵測:
# - // TODO: ... (未完成的事項)
# - // FIXME: ... (已知問題)
# - // HACK: ... (臨時解法)
# - // XXX: ... (需要注意)
# 並要求代理完成或移除這些臨時註解10.12 內建 MCP 伺服器
OmO 內建多個 MCP 伺服器:
| MCP 伺服器 | 功能 |
|---|---|
ohmo-search-docs | 文件搜尋 |
ohmo-git-analysis | Git 歷史分析 |
ohmo-metrics | 程式碼指標分析 |
ohmo-refactor | 重構輔助 |
10.13 LSP 與 AST-Grep 整合
OmO 深度整合 LSP 和 AST-Grep 進行精確的程式碼分析:
LSP 整合:
# OmO 自動偵測並連接專案的 LSP Server
# 支援:TypeScript、Python、Java、Go、Rust 等
# 提供的功能:
# - 精確的符號解析
# - 型別推導
# - 參照搜尋
# - 重構支援AST-Grep 整合:
# AST-Grep 提供結構化程式碼搜尋
# 比 grep 更精確,因為它理解程式碼的 AST 結構
# 範例:找出所有未 await 的 async 函式呼叫
# AST-Grep 可以精確匹配語法結構,而非簡單的文字匹配10.14 Tmux 整合
OmO 支援 Tmux 整合,提供多視窗工作環境:
# OmO 可以在 Tmux session 中管理多個代理窗格
# 每個背景代理在獨立的 Tmux pane 中運行
# 主視窗顯示 Sisyphus 的協調狀態
# Tmux 整合設定(在 OmO 設定檔中)
# tmux:
# enabled: true
# layout: "tiled"
# auto_split: true10.15 Claude Code 完整相容性
OmO 與 Claude Code 完全相容:
| Claude Code 功能 | OmO 支援 | 說明 |
|---|---|---|
| CLAUDE.md | ✅ | 可作為 AGENTS.md 的替代品 |
| .claude/skills/ | ✅ | 技能系統完全相容 |
| /init command | ✅ | 支援 /init 和增強的 /init-deep |
| /compact | ✅ | 相容壓縮指令 |
| Max mode | ✅ | 對應 Sisyphus 主編排 |
| Sub-agents | ✅ | 對應 Discipline Agents |
從 Claude Code 遷移:
# 方法一:直接替換(CLAUDE.md 自動識別)
# 1. 安裝 OpenCode + OmO
# 2. 執行 ultrawork
# 3. OmO 自動讀取現有的 CLAUDE.md 和 .claude/skills/
# 方法二:產生 AGENTS.md(推薦)
# 1. 執行 /init-deep
# 2. 手動整合 CLAUDE.md 中的規則到 AGENTS.md
# 3. 設定 OPENCODE_DISABLE_CLAUDE_CODE=true(可選)10.16 Agent Orchestration 模型路由
OmO 的模型路由策略讓不同任務自動使用最適合的模型。Sisyphus 不直接選擇模型,而是選擇任務分類(Category),由 Harness 自動映射至對應模型:
分類路由機制:
| 分類 | 適用場景 | 預設模型 |
|---|---|---|
visual-engineering | 前端、UI/UX、設計相關 | 視覺模型 |
deep | 自主研究 + 端到端執行 | gpt-5.4 |
quick | 單檔案修改、修正錯字 | 快速模型 |
ultrabrain | 高難度邏輯、架構決策 | gpt-5.4 xhigh |
關鍵原則:Agent 宣告工作類型,Harness 選擇對應模型。開發者無需手動干預。
graph TB
Task["任務輸入"]
Router["Sisyphus
分類路由器"]
Cat1["visual-engineering
(前端/UI/UX)"]
Cat2["deep
(自主研究+執行)"]
Cat3["quick
(單檔案/快速修正)"]
Cat4["ultrabrain
(高難度邏輯/架構)"]
M1["claude-opus-4-6 / kimi-k2.5"]
M2["gpt-5.4"]
M3["快速模型"]
M4["gpt-5.4 xhigh"]
Task --> Router
Router --> Cat1
Router --> Cat2
Router --> Cat3
Router --> Cat4
Cat1 --> M1
Cat2 --> M2
Cat3 --> M3
Cat4 --> M4自訂路由設定(oh-my-openagent.jsonc):
{
"model_routing": {
"default": "claude-opus-4-6",
"rules": [
{
"task_type": "deep",
"model": "gpt-5.4",
"reason": "深度程式碼實作需要長上下文和精確編輯"
},
{
"task_type": "ultrabrain",
"model": "gpt-5.4",
"options": { "reasoningEffort": "high" },
"reason": "高難度架構決策使用 xhigh 推理"
},
{
"task_type": "quick",
"model": "claude-haiku-4-5",
"reason": "簡單任務用輕量模型即可"
},
{
"task_type": "visual-engineering",
"model": "kimi-k2.5",
"reason": "前端 UI 任務"
}
]
}
}10.17 安裝與設定
安裝 OmO:
# 前置需求:Bun 1.3.9+
curl -fsSL https://bun.sh/install | bash
# 方法一:使用 Bun(推薦)
bun install -g oh-my-openagent
# 方法二:使用 npm
npm install -g oh-my-openagent
# 方法三:在 opencode.json 中設定為外掛
# 見下方設定
# 驗證安裝
ultrawork --version
# 或
ulw --version在 opencode.json 中啟用 OmO 外掛:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["oh-my-openagent"]
}10.18 設定檔詳解
OmO 使用 YAML 設定檔,支援多層級設定:
全域設定 ~/.config/omo/config.yaml:
# OmO 全域設定
version: "3.13"
# Discipline Agents 設定
agents:
sisyphus:
model: claude-opus-4-6
max_steps: 200
temperature: 0.3
hephaestus:
model: gpt-5.4
max_steps: 500
temperature: 0.2
prometheus:
model: claude-opus-4-6
max_steps: 100
temperature: 0.5
# 背景代理設定
background_agents:
max_concurrent: 5
timeout_minutes: 30
# Hash-Anchored Edit 設定
hash_edit:
enabled: true
validation: strict
# IntentGate 設定
intent_gate:
enabled: true
complexity_threshold: medium # low/medium/high
# Ralph Loop 設定
ralph_loop:
enabled: true
max_retries: 3
checks:
- compile
- test
- lint
# Todo Enforcer 設定
todo_enforcer:
enabled: true
strict: true
# Comment Checker 設定
comment_checker:
enabled: true
patterns:
- "TODO:"
- "FIXME:"
- "HACK:"
- "XXX:"專案設定 .omo/config.yaml:
# 專案特定 OmO 設定
extends: global # 繼承全域設定
agents:
hephaestus:
model: gpt-5.4
context_files:
- "src/**/*.ts"
- "tests/**/*.ts"
# 專案特定規則
rules:
- "所有 API 端點必須有 OpenAPI 文件"
- "所有 Service 必須有單元測試"10.19 企業導入 OmO 建議
| 階段 | 建議 |
|---|---|
| 評估期 | 先以 OpenCode 原生功能為主,再逐步導入 OmO |
| 試點期 | 選擇 1-2 個複雜專案試點,評估 OmO 的效益 |
| 推廣期 | 建立 OmO 使用規範,統一設定管理 |
| 成熟期 | 客製化 Discipline Agents,優化模型路由 |
OmO vs 原生 OpenCode 選擇指南:
| 場景 | 建議 |
|---|---|
| 簡單日常開發 | 原生 OpenCode 足夠 |
| 大規模重構 | ✅ 使用 OmO(背景代理並行) |
| 多人協作複雜專案 | ✅ 使用 OmO(Sisyphus 編排) |
| 需要嚴格品質控管 | ✅ 使用 OmO(Ralph Loop + Todo Enforcer) |
| 遺留系統現代化 | ✅ 使用 OmO(Prometheus 規劃 + 背景代理執行) |
| 快速原型開發 | 原生 OpenCode 即可 |
10.20 OmO 實戰教學:微服務拆分
以下展示使用 OmO 將一個單體應用拆分為微服務的完整流程。
背景:一個 Spring Boot 單體應用(45+ Controller、80+ Service),需要拆分為 5 個微服務。
步驟 1:使用 /init-deep 初始化
$ ulw
# 啟動 OmO + OpenCode
> /init-deep
# OmO Librarian 掃描專案,產生階層式 AGENTS.md/init-deep 產出的部分 AGENTS.md:
# AGENTS.md(自動產生)
## 專案概覽
Spring Boot 2.7 單體應用,包含使用者、訂單、商品、支付、通知五大領域。
## 架構決策紀錄
- ADR-001: 目前為單體架構,所有模組共用資料庫
- ADR-002: 使用者認證使用 Spring Security + JWT
- ADR-003: 所有 Repository 使用 Spring Data JPA
## 模組依賴分析(自動檢測)
- user-module → 無依賴
- product-module → 無依賴
- order-module → 依賴 user-module, product-module
- payment-module → 依賴 order-module
- notification-module → 依賴 user-module, order-module
## 潛在問題
- ⚠️ 發現 15 處循環依賴
- ⚠️ Service 層存在跨模組直接呼叫(45 處)
- ⚠️ 共用資料庫耦合嚴重步驟 2:Prometheus 產生遷移策略
> 使用 Prometheus 分析這個專案,產生微服務拆分策略。
> 目標:拆分為 5 個微服務(user/product/order/payment/notification)。
> 考慮:
> 1. 資料庫拆分策略
> 2. 服務間通訊方式(REST vs 事件驅動)
> 3. 共用程式碼處理
> 4. 遷移順序和風險Prometheus 回傳分析報告:
## 微服務拆分策略分析報告
### 策略 A:漸進式拆分(Strangler Fig)— 推薦
**遷移順序(依耦合度由低到高):**
1. notification-service(最低耦合 → 最先拆分)
- 風險:低
- 預估工時:2 天
- 通訊方式:事件驅動(RabbitMQ/Kafka)
2. user-service(基礎服務)
- 風險:中
- 預估工時:3 天
- 通訊方式:REST(gRPC 可選)
3. product-service(獨立領域)
- 風險:低
- 預估工時:2 天
- 通訊方式:REST
4. payment-service(外部整合多)
- 風險:高
- 預估工時:4 天
- 通訊方式:Saga Pattern
5. order-service(核心業務,依賴最多 → 最後拆分)
- 風險:高
- 預估工時:5 天
- 通訊方式:REST + Event
### 資料庫拆分建議
- 第一步:Schema per Service(同一個 DB,不同 Schema)
- 第二步:Database per Service(獨立 DB 實例)
### 共用程式碼處理
- 抽取 common-lib(DTO、工具類別、常數)
- 使用 Maven 多模組管理步驟 3:啟動並行背景代理執行
> 按照 Prometheus 的建議,開始執行拆分。
> 先處理 notification-service 和 product-service(無依賴,可並行)。
>
> 背景代理 #1:拆分 notification-service
> - 建立新的 Spring Boot 專案結構
> - 遷移相關的 Controller/Service/Repository
> - 設定 RabbitMQ 事件消費
> - 產生 API 文件
> - 產生單元測試和整合測試
>
> 背景代理 #2:拆分 product-service
> - 建立新的 Spring Boot 專案結構
> - 遷移商品相關的所有程式碼
> - 設定獨立的 PostgreSQL Schema
> - 產生 REST API
> - 產生測試
>
> 主代理:同時修改原單體應用
> - 替換直接呼叫為 REST Client / Event Publisher
> - 保持原有功能不中斷步驟 4:Ralph Loop 驗證
# OmO Ralph Loop 自動執行:
# ✅ notification-service 編譯通過
# ✅ notification-service 18 個測試全部通過
# ✅ product-service 編譯通過
# ✅ product-service 25 個測試全部通過
# ✅ 原單體應用 regression test 通過
# ✅ 整合測試(跨服務呼叫)通過步驟 5:Todo Enforcer 檢查
# Todo Enforcer 報告:
# ✅ [完成] 建立 notification-service 專案結構
# ✅ [完成] 遷移 NotificationController
# ✅ [完成] 遷移 NotificationService
# ✅ [完成] 設定 RabbitMQ consumer
# ✅ [完成] 產生 API 文件
# ✅ [完成] 產生測試程式碼
# ✅ [完成] 建立 product-service 專案結構
# ✅ [完成] 遷移所有商品相關程式碼
# ⚠️ [未完成] 更新部署腳本 → 尚需處理10.21 OmO 與 OpenCode 功能對照表
| 功能 | OpenCode(原生) | + OmO |
|---|---|---|
| 基本對話 | ✅ | ✅ |
| Build 模式 | ✅ | ✅ + Hephaestus 增強 |
| Plan 模式 | ✅ | ✅ + Prometheus 增強 |
| 單代理操作 | ✅ | ✅ |
| 多代理並行 | ❌ | ✅(5+ 背景代理) |
| 意圖分析 | 基本 | ✅ IntentGate |
| 編輯可靠性 | 行號(可能漂移) | ✅ Hash-Anchored Edit |
| 專案初始化 | /init | ✅ /init-deep(階層式) |
| 品質驗證 | 手動 | ✅ Ralph Loop(自動) |
| TODO 追蹤 | 手動 | ✅ Todo Enforcer(自動) |
| 註解清理 | 手動 | ✅ Comment Checker |
| 模型路由 | 單模型 | ✅ 多模型智慧路由 |
| Tmux 整合 | 一個面板 | ✅ 多面板管理 |
| LSP 深度整合 | 基本 | ✅ AST-Grep 增強 |
| Claude Code 相容 | 部分 | ✅ 完全相容 |
| MCP 管理 | 手動配置 | ✅ Skill-Embedded MCPs |
| 視覺工程 | ❌ | ✅ Multimodal Looker(v3.12+) |
| 規劃諮詢 | ❌ | ✅ Metis(v3.12+) |
| ultrabrain 模式 | ❌ | ✅ GPT-5.4 xhigh(v3.13+) |
| Session 歷程分析 | ❌ | ✅ Session Tools(v3.13+) |
| 顯式推理 | ❌ | ✅ Think Mode(v3.13+) |
| Hook 系統 | 基本 | ✅ 25+ 內建 Hooks |
10.22 OmO 效能調優指南
記憶體與效能建議:
| 場景 | 建議設定 |
|---|---|
| 小型專案(<50 檔案) | max_concurrent: 2, 標準模型 |
| 中型專案(50-200 檔案) | max_concurrent: 3, Sonnet + Haiku |
| 大型專案(200+ 檔案) | max_concurrent: 5, 分層模型路由 |
| 遺留系統遷移 | max_concurrent: 3, Opus + Codex |
減少 Token 消耗的策略:
# omo.config.yaml 效能優化
background_agents:
max_concurrent: 3
idle_timeout: 300 # 閒置 5 分鐘回收
intent_gate:
complexity_threshold: medium # 避免簡單任務啟動完整編排
ralph_loop:
max_retries: 2 # 減少重試次數
checks:
- compile # 只檢查編譯
- test # 只檢查測試
model_routing:
default: claude-sonnet-4-5 # 預設使用中階模型
rules:
- task_type: search
model: claude-haiku-4-5 # 搜尋用小模型
- task_type: planning
model: claude-opus-4-6 # 規劃用大模型10.23 Multimodal Looker 代理(v3.12+ 新增)
Multimodal Looker 是 OmO v3.12 引入的視覺工程代理,能夠分析截圖、設計稿、UI 原型並自動產生對應的程式碼:
graph TB
subgraph "Multimodal Looker 工作流程"
Input["輸入
截圖 / Figma / 手繪稿"]
Looker["🔍 Multimodal Looker
視覺分析代理"]
Analysis["語意分析
元件辨識 / 佈局解析 / 互動推斷"]
Code["程式碼產生
React / Vue / HTML"]
Review["Sisyphus 審查
品質驗證"]
end
Input --> Looker
Looker --> Analysis
Analysis --> Code
Code --> Review| 功能 | 說明 |
|---|---|
| 截圖轉程式碼 | 上傳 UI 截圖,自動產生對應的前端元件 |
| Figma 整合 | 連接 Figma 設計稿,擷取設計 Token 並產生程式碼 |
| 差異比對 | 比較設計稿與實際實作的視覺差異 |
| 響應式生成 | 自動產生桌面、平板、手機三種佈局 |
| 無障礙標注 | 自動加入 ARIA 標籤和語意化 HTML |
使用方式:
# 方法一:拖曳截圖到 TUI(支援 iTerm2 / Kitty / WezTerm)
> 請根據這個截圖實作登入頁面
# 方法二:指定圖片路徑
> /looker ./designs/login-page.png --framework react --responsive
# 方法三:Figma URL
> /looker https://figma.com/file/... --component LoginFormAgent Orchestration 分類中的位置:
Multimodal Looker 屬於 visual-engineering 類別,與其他類別的關係:
| 類別 | 代表代理 | 適用場景 |
|---|---|---|
| visual-engineering | Multimodal Looker | 視覺設計轉程式碼、UI 分析 |
| deep | Hephaestus | 複雜程式碼實作、長時間深度工作 |
| quick | Librarian / 快速代理 | 文件搜尋、簡單修改 |
| ultrabrain | Sisyphus + GPT-5.4 xhigh | 超複雜推理、跨領域分析 |
10.24 Metis 代理——規劃顧問(v3.12+ 新增)
Metis(命名自希臘智慧女神)是 v3.12 新增的 Plan Consultant 代理,專門負責在 Prometheus 規劃前提供諮詢意見:
graph TB
User["使用者需求"]
Metis["🦉 Metis
Plan Consultant
規劃諮詢"]
Prometheus["🔥 Prometheus
策略規劃"]
Sisyphus["🏔️ Sisyphus
執行編排"]
User --> Metis
Metis -->|"策略建議 + 風險評估"| Prometheus
Prometheus -->|"詳細執行計畫"| Sisyphus
Sisyphus -->|"任務分配"| Agents["Discipline Agents"]| 比較 | Metis | Prometheus |
|---|---|---|
| 角色 | 諮詢顧問(Advisory) | 策略規劃(Planning) |
| 輸出 | 建議、風險、替代方案 | 詳細步驟、工時估算 |
| 何時觸發 | 複雜需求進入前 | Metis 諮詢後 |
| 模型偏好 | Thinking Model(高推理) | claude-opus-4-6 |
使用方式:
# Metis 由 IntentGate 在偵測到複雜需求時自動調用
# 也可以手動請求:
> /consult 我想把現有的 monolith 拆成微服務,但團隊只有 3 人
> Metis 會先分析可行性、提出風險和替代方案
> 再由 Prometheus 制定詳細執行計畫10.25 GPT-5.4 xhigh 路由與 ultrabrain 模式(v3.13+ 新增)
OmO v3.13 引入了 ultrabrain 路由等級,專為超複雜任務設計:
graph TB
subgraph "Agent Orchestration 四大類別"
VE["🎨 visual-engineering
Multimodal Looker"]
Deep["🔨 deep
Hephaestus
gpt-5.4"]
Quick["⚡ quick
Librarian
claude-haiku-4-5"]
Ultra["🧠 ultrabrain
Sisyphus
GPT-5.4 xhigh"]
end
Router["IntentGate
路由決策"]
Router --> VE
Router --> Deep
Router --> Quick
Router --> Ultraultrabrain 模式特點:
| 特點 | 說明 |
|---|---|
| 模型 | GPT-5.4 xhigh(最高推理能力) |
| 上下文 | 最大可用上下文視窗 |
| Token 消耗 | 極高(建議僅用於關鍵任務) |
| 適用場景 | 跨領域架構設計、安全審計、遺留系統分析 |
| 自動降級 | 若 xhigh 不可用,自動降級為 opus-4-6 |
設定方式:
# omo.config.yaml
model_routing:
rules:
- task_type: ultrabrain
model: gpt-5.4-xhigh
fallback: claude-opus-4-6
budget_limit: 50.00 # 單次任務 Token 預算上限(美元)
confirmation: true # 超過預算時要求使用者確認10.26 Session Tools——歷程分析(v3.13+ 新增)
OmO v3.13 新增 Session Tools,讓使用者和代理能夠回顧、搜尋和分析過去的對話歷程:
| 工具 | 功能 | 使用方式 |
|---|---|---|
session list | 列出所有歷史 Session | /session list --last 30d |
session read | 讀取特定 Session 完整內容 | /session read <session-id> |
session search | 搜尋 Session 內容 | /session search "微服務拆分" |
session analyze | 分析 Session 模式與效率 | /session analyze --report |
Session 分析報告範例:
## Session 分析報告(最近 30 天)
### 統計
- 總 Session 數:47
- 平均 Session 時長:23 分鐘
- 最常使用的代理:Hephaestus(38%)、Sisyphus(25%)
- 最常處理的任務類型:功能開發(45%)、除錯(28%)
### Token 消耗
- 總消耗:$127.50
- 最高單次 Session:$12.30(微服務遷移規劃)
- 平均每 Session:$2.71
### 效率指標
- Ralph Loop 首次通過率:72%
- 背景代理平均使用率:3.2 個/session
- Hash-Anchored Edit 衝突率:0.3%10.27 Think Mode(v3.13+ 新增)
Think Mode 讓代理在回應前進行「顯式推理」,將思考過程透明化:
# 啟用 Think Mode
> /think on
# 代理回應時會顯示思考過程:
🧠 Think Mode:
├── 分析需求:使用者要求重構 UserService
├── 評估方案 A:Repository Pattern(適合,解耦資料層)
├── 評估方案 B:CQRS(過度設計,目前規模不需要)
├── 決策:選擇 Repository Pattern
├── 風險:現有 20+ Controller 依賴 UserService,需逐一更新
└── 執行計畫:分 3 步驟,先建抽象層再遷移
📝 執行:
# 開始實作...Think Mode 與一般模式對照:
| 比較 | 一般模式 | Think Mode |
|---|---|---|
| 回應速度 | 快 | 較慢(需要推理時間) |
| 透明度 | 僅顯示結果 | 顯示完整推理過程 |
| Token 消耗 | 標準 | +30-50%(推理 token) |
| 推薦場景 | 簡單任務 | 複雜決策、架構設計、審計 |
10.28 OmO v3.13 其他更新
25+ 內建 Hooks:
OmO v3.13 擴充了 Hook 系統,現在提供 25+ 內建 hooks:
| Hook 類型 | 範例 | 觸發時機 |
|---|---|---|
pre-edit | 編輯前檢查 | 每次檔案編輯前 |
post-edit | 編輯後驗證 | 每次檔案編輯後 |
pre-commit | 提交前品質檢查 | git commit 前 |
session-start | Session 初始化 | 啟動新 Session 時 |
session-end | Session 總結 | 結束 Session 時 |
agent-switch | 代理切換記錄 | 切換代理時 |
error-recovery | 錯誤自動恢復 | 代理遇到錯誤時 |
budget-alert | Token 預算警告 | 接近預算上限時 |
omx 狀態檔:
OmO 使用 .omx 狀態檔來追蹤代理的工作進度:
.omx/
├── session.json # 當前 Session 狀態
├── agents/
│ ├── sisyphus.json # Sisyphus 狀態
│ ├── hephaestus.json # Hephaestus 任務佇列
│ └── bg-agents/ # 背景代理狀態
├── todos.json # Todo Enforcer 記錄
└── ralph-reports/ # Ralph Loop 報告oh-my-openagent.jsonc 設定檔支援:
除了 YAML 設定外,OmO 支援 JSONC 格式設定檔(推薦使用 oh-my-openagent.jsonc,舊名 oh-my-opencode.jsonc 過渡期仍可載入):
// oh-my-openagent.jsonc(推薦新名稱)
// 舊名稱 oh-my-opencode.jsonc 仍可使用
{
// 版本
"$schema": "https://ohmyopenagent.com/config-schema.json",
"version": "3.17",
// Agent 設定
"agents": {
"sisyphus": {
"model": "claude-opus-4-6",
"steps": 200
},
"hephaestus": {
"model": "gpt-5.4"
},
"looker": {
"enabled": true,
"defaultFramework": "react"
},
"metis": {
"enabled": true,
"autoConsult": true // 複雜需求自動啟動諮詢
}
},
// ultrabrain 預算控制
"ultrabrain": {
"budgetPerTask": 50.00,
"requireConfirmation": true
},
// Model Fallbacks(v3.17 支援混合格式)
"fallback_models": [
"claude-opus-4-6",
{ "model": "kimi-k2.5", "temperature": 0.3 },
"gpt-5.4"
]
}官方網站與 Sisyphus Labs:
- 官方網站:ohmyopenagent.com
- Sisyphus Labs:OmO 的商業化版本(productized),提供企業級支援、託管服務和 SLA 保障
- 文件與社群:透過官方網站存取完整文件、討論區和插件市場
10.29 OmO v3.14-v3.17.10 更新摘要
OmO 自 v3.13 至 v3.17.10 持續快速迭代,以下為關鍵更新:
| 版本 | 重點更新 |
|---|---|
| v3.14 | 套件更名為 oh-my-openagent,相容層仍接受 oh-my-opencode |
| v3.15 | OpenCode v1.4.0 最低版本檢查(安裝時自動驗證);Doctor 診斷命令 |
| v3.16 | Session Recovery 自動恢復(上下文超限、API 失敗自動重試);File Prompts(file:// 語法) |
| v3.17.0 | Model Fallbacks 混合格式(純字串與物件設定共存);Skills 新增 frontend-ui-ux;效能改進 |
| v3.17.1 | Orchestration 文件更新;dev 分支合併修正(openclaw 分支整合);CLA 貢獻者授權協議引入 |
| v3.17.2 | 穩定性修正;Telemetry 文件與法律文件(Privacy Policy、Terms of Service)完善 |
| v3.17.3 | replace_plan 支援(設定 true 時隱藏原生 Plan Agent);ad-hoc signing darwin binary 修正;AGENTS.md 生成日期更新 |
| v3.17.4-v3.17.9 | 穩定性修正與改進;obsolete maxDescendants config 移除;auto-update-checker 修正(偏好已載入模組的 package.json);plugin bundle 外部化 zod 防止雙實例問題 |
| v3.17.10 | 最新版(168 releases、55.1k ⭐、199 貢獻者);GPT-5.5 native prompt drafts;npm OIDC exchange CI 改進(201 視為成功);CLA 簽署流程優化 |
Sisyphus Labs 產品化(v3.17+ 新動態):
OmO 團隊正在開發 Sisyphus Labs——一個完全產品化的 Sisyphus 代理版本,定位為「未來前沿代理」:
- 官網:sisyphuslabs.ai
- 提供等待名單註冊
- 與開源 OmO 外掛互補,提供企業級服務
PostHog 匿名 Telemetry(v3.17+):
OmO 預設啟用匿名遙測以改善安裝和運行時可靠性:
# 停用遙測方式一
export OMO_SEND_ANONYMOUS_TELEMETRY=0
# 停用遙測方式二
export OMO_DISABLE_POSTHOG=1- 使用 PostHog 平台,僅傳輸雜湊安裝識別碼(非原始主機名稱)
- 相關法律文件:Privacy Policy、Terms of Service
CLA 貢獻者授權協議(v3.17.1+):
所有 PR 現在需要簽署 Contributor License Agreement(CLA),透過 GitHub Actions 自動驗證。
企業注意:企業在評估 OmO 外掛時,應注意其 Telemetry 預設啟用的特性。建議在企業環境中設定
OMO_SEND_ANONYMOUS_TELEMETRY=0以符合資料治理要求。
Doctor 診斷命令(v3.15+):
# 執行 OmO 環境診斷
bunx oh-my-openagent doctor
# 檢查項目:
# ✅ Plugin 註冊狀態
# ✅ 設定檔格式
# ✅ 模型可用性
# ✅ OpenCode 版本相容性(≥ v1.4.0)
# ✅ Bun 版本(≥ 1.3.9)
# ✅ 環境變數Session Recovery(v3.16+):
OmO 現在能自動從以下錯誤場景恢復:
| 錯誤場景 | 恢復策略 |
|---|---|
| 上下文視窗超限 | 自動壓縮歷史,重新載入關鍵上下文 |
| API 速率限制 | 等待後自動重試,切換備用模型 |
| 模型回應超時 | 降級至更快的模型完成任務 |
| Session 中斷 | 自動保存進度,重啟後從斷點繼續 |
File Prompts(v3.16+):
代理設定支援從檔案載入 prompt:
{
"agents": {
"my-agent": {
"prompt": "file://./prompts/my-agent-system.md"
}
}
}內建技能更新:
| 技能 | 說明 | 版本 |
|---|---|---|
playwright | 瀏覽器自動化測試 | v3.10+ |
git-master | 原子提交、rebase 手術 | v3.10+ |
frontend-ui-ux | 設計優先的 UI 開發 | v3.17+ |
10.30 OmO v4.0-v4.1.2 更新摘要(Team Mode 重大版本)
OmO 在 v4.0 實現了重大版本跳躍,引入 Team Mode 多代理並行系統,以下為完整更新:
Team Mode(v4.0 核心功能)
Team Mode 將 OmO 從「一個代理帶子代理」升級為真正的多代理系統:
| 特性 | 說明 |
|---|---|
| Lead Agent | 主編排代理,負責任務分派與協調 |
| 並行成員 | 最多 8 個類別專業化成員同時運行 |
| tmux 視覺化 | 即時觀看每個成員的工作進度(focus + grid 視窗) |
| team_* 工具族群 | team_create、team_send_message、team_task_create、team_status 等 |
啟用 Team Mode:
// .opencode/oh-my-openagent.jsonc
{
"team_mode": {
"enabled": true,
"max_parallel_members": 4,
"tmux_visualization": true
}
}注意:Team Mode 預設為關閉。重啟 opencode 後
team_*工具族群才會解鎖。
內建 Team Mode 技能:
| 技能 | 說明 | 成員組成 |
|---|---|---|
hyperplan | 超級計畫驗證 | 5 個敵對評論者從正交角度拆解你的計畫 |
security-research | 安全研究 | 3 個漏洞獵人 + 2 個 PoC 工程師並行審計 |
Discipline Agents 模型更新
| 代理 | 角色 | 預設模型 |
|---|---|---|
| Sisyphus | 主編排器 | claude-opus-4-7 / kimi-k2.6 / glm-5.1 |
| Hephaestus | 自主深度工匠 | gpt-5.5 |
| Prometheus | 策略規劃器 | claude-opus-4-7 / kimi-k2.6 / glm-5.1 |
| Oracle | 架構/除錯 | 繼承路由配置 |
| Librarian | 文件搜尋 | 繼承路由配置 |
| Explore | 快速程式碼 grep | 繼承路由配置 |
| Multimodal Looker | 視覺分析 | 繼承路由配置 |
重要變更:Anthropic 已封鎖 OpenCode 使用其 API,因此 Hephaestus 被稱為「The Legitimate Craftsman」(合法工匠),使用 GPT-5.5 作為預設模型。OmO 官方建議使用 Kimi K2.6 + GPT-5.5 組合即可超越原版 Claude Code 體驗。
Agent Orchestration 分類路由更新
| 分類 | 用途 | 路由模型 |
|---|---|---|
visual-engineering | 前端、UI/UX、設計 | 自動選擇最佳視覺模型 |
deep | 自主研究 + 執行 | Hephaestus (GPT-5.5) |
quick | 單檔變更、錯字修正 | 快速模型 |
ultrabrain | 困難邏輯、架構決策 | GPT-5.5 xhigh |
推薦訂閱組合
OmO 官方推薦的最低成本訂閱組合(使用 ultrawork 即可自動運作):
| 服務 | 月費 | 用途 |
|---|---|---|
| ChatGPT Subscription | $20 | GPT-5.5 存取 |
| Kimi Code Subscription | $19 | Kimi K2.6 存取 |
| GLM Coding Plan | $10 | GLM-5.1 存取 |
其他 v4.x 更新
| 更新項目 | 說明 |
|---|---|
| Configurable agent ordering | 可自訂代理排序 |
| CDP browser tools | Chrome DevTools Protocol 整合,支援瀏覽器自動化 |
.opencode → .agents 目錄遷移 | 設定目錄正式從 .opencode 遷移至 .agents |
| Safe deps refresh | 自動安全依賴更新機制 |
| ralph-loop compaction guard | Ralph Loop 壓縮延續所有權防護 |
| 54+ lifecycle hooks | 包含 Team Mode 共 61 個生命週期鉤子 |
disabled_hooks 設定 | 可個別停用不需要的鉤子 |
第十一章:OpenWork 桌面應用與協作平台
11.1 OpenWork 總覽與定位
OpenWork 是 OpenCode 生態系中的 桌面 GUI 協作平台,定位為開源版的 Claude Cowork / Codex 替代品(desktop app)。OpenWork 讓非終端機使用者也能享受 AI 編碼代理的能力,並提供團隊級的協作功能。
| 指標 | 數值 |
|---|---|
| GitHub 名稱 | different-ai/openwork |
| 版本 | v0.13.8 |
| GitHub Stars | 15.2k+ |
| 貢獻者 | 61+ |
| 版本發佈 | 1,202+ |
| 授權 | MIT |
| 技術堆疊 | TypeScript 86.4% / JavaScript 9.4% / CSS 2.6% / Shell 0.9% / MDX 0.7% |
| OpenCode 版本 PIN | 透過 constants.json 固定 |
| 官方網站 | openworklabs.com |
| Desktop Framework | Electron(從 Tauri 遷移至 Electron,v0.13.0) |
| 應用程式語言 | 英文、法文、西班牙文、加泰隆尼亞文、巴西葡萄牙文、日文、簡體中文、泰文、越南文、俄文(10 語系) |
核心定位:
graph TB
subgraph "OpenCode 生態系使用者光譜"
A["資深工程師
🖥️ OpenCode TUI"]
B["一般開發者
💻 VS Code Extension"]
C["技術主管 / PM
🖱️ OpenWork Desktop"]
D["非技術人員
📱 OpenWork + Router"]
end
A -->|"需要 GUI"| C
B -->|"需要更多功能"| C
C -->|"需要遠端協作"| D11.2 核心理念
OpenWork 的設計理念:
| 理念 | 說明 |
|---|---|
| GUI 優先 | 提供友善的圖形化介面 |
| 技能驅動 | 一切皆技能(Skills as first-class) |
| 開放平台 | OpenPackage(opkg)套件管理 |
| 雙模式 | Host 模式(本地)+ Client 模式(連線) |
| 通訊整合 | 透過 OpenCode Router 連接 WhatsApp/Slack/Telegram |
| 模板系統 | 內建加速器模板快速啟動 |
11.3 功能架構
graph TB
subgraph "OpenWork Desktop(Electron App)"
UI["GUI 介面"]
SM["技能管理器
Skill Manager"]
TP["模板系統
Templates"]
Session["會話管理"]
Settings["設定管理"]
end
subgraph "核心引擎"
OC["OpenCode Core
v1.14.x"]
MCP["MCP 伺服器"]
Tools["工具系統"]
end
subgraph "擴展層"
OPKG["OpenPackage
(opkg)"]
Router["OpenCode Router
WhatsApp/Slack/Telegram"]
Orch["Orchestrator CLI
(openwork-orchestrator)"]
end
subgraph "外部連接"
Git["Git"]
LLM["AI 模型供應商"]
IDE["IDE"]
end
UI --> SM
UI --> TP
UI --> Session
UI --> Settings
SM --> OC
TP --> OC
OC --> MCP
OC --> Tools
SM --> OPKG
OC --> Router
Orch --> OC
OC --> Git
OC --> LLM
OC --> IDE核心功能清單:
| 功能 | 說明 | 狀態 |
|---|---|---|
| 桌面應用 | Electron 桌面應用(v0.13.0 起從 Tauri 遷移) | ✅ 穩定 |
| 對話介面 | 友善的 Chat UI | ✅ 穩定 |
| 技能管理器 | 安裝、管理、使用技能 | ✅ 穩定 |
| OpenPackage | 技能套件管理系統 | ✅ 穩定 |
| 模板 | 內建加速器模板 | ✅ 穩定 |
| Host 模式 | 本地運行 OpenCode | ✅ 穩定 |
| Client 模式 | 連線到遠端 Server | ✅ 穩定 |
| SSE 串流 | 即時回應串流 | ✅ 穩定 |
| Router 整合 | WhatsApp/Slack/Telegram | ✅ 穩定 |
| Orchestrator CLI | 批次自動化 | ✅ 穩定 |
| MCP 管理 | 視覺化 MCP 伺服器管理 | ✅ 穩定 |
| Dev Mode | 開發模式隔離環境 | ✅ 穩定 |
| Templates 重播 | 儲存並重新執行工作流程 | ✅ 穩定 |
| Execution Plan Timeline | 任務時間軸視覺化 | ✅ 穩定 |
| Cloud Worker | 雲端計算委託架構 | ✅ 穩定 |
| Workspace Switch | 快速工作空間切換 | ✅ 穩定 |
| Starter Sessions | 預設工作空間模板 | ✅ 穩定 |
| Den (Daytona) | Docker 開發環境整合 | ✅ 穩定 |
11.4 Host 模式與 Client 模式
Host 模式(本地模式):
graph TB
OW["OpenWork Desktop"]
OC["OpenCode
(內建 / 本地安裝)"]
LLM["AI 模型供應商"]
OW -->|"啟動"| OC
OC -->|"API 呼叫"| LLM- OpenWork 內建或偵測本地安裝的 OpenCode
- 直接在本地啟動 OpenCode Server
- 適合個人使用或單機開發
Client 模式(連線模式):
graph TB
OW["OpenWork Desktop
(Client)"]
Server["OpenCode Server
(遠端 / 團隊)"]
LLM["AI 模型供應商"]
OW -->|"HTTP/SSE 連線"| Server
Server -->|"API 呼叫"| LLM- 連接到遠端的 OpenCode Server
- 適合團隊部署、共用 Server 場景
- 支援 SSE 即時串流
11.5 技能管理器(Skill Manager)
OpenWork 的技能管理器提供視覺化界面管理技能:
graph TB
SM["技能管理器 UI"]
Install["安裝技能
(從 OpenPackage)"]
Create["建立技能
(SKILL.md 編輯器)"]
Manage["管理技能
(啟用/停用/設定)"]
Share["分享技能
(發佈到 opkg)"]
SM --> Install
SM --> Create
SM --> Manage
SM --> Share支援的技能來源:
| 來源 | 說明 |
|---|---|
| OpenPackage(opkg) | 官方技能市場 |
| GitHub | 從 GitHub repo 安裝 |
| 本地目錄 | 直接載入本地技能 |
| 內建技能 | OpenWork 預裝的基礎技能 |
11.6 OpenWork Orchestrator CLI
Orchestrator CLI 是 OpenWork 的命令列自動化工具,透過 npm 套件 openwork-orchestrator 提供:
# 安裝 Orchestrator CLI
npm install -g openwork-orchestrator
# 基本用法
openwork-orchestrator run --task "重構所有 Service 類別" --project ./my-project
# 批次任務
openwork-orchestrator batch --tasks tasks.yaml --concurrency 3
# 排程任務
openwork-orchestrator schedule --cron "0 2 * * *" --task "每日安全掃描"tasks.yaml 範例:
tasks:
- name: "重構 UserService"
type: refactor
target: src/services/UserService.ts
skills:
- clean-code
- testing
agent: build
- name: "更新 API 文件"
type: documentation
target: src/controllers/
skills:
- api-docs
agent: plan
- name: "安全掃描"
type: security
target: src/
skills:
- security-audit
agent: code-reviewerOrchestrator CLI 功能:
| 功能 | 說明 |
|---|---|
| 批次任務執行 | 定義多個任務並行或序列執行 |
| 排程任務 | Cron 排程自動執行 |
| 任務依賴 | 定義任務間的依賴關係 |
| 失敗重試 | 自動重試失敗的任務 |
| 結果報告 | 產生任務執行報告 |
| CI/CD 整合 | 可嵌入 CI/CD pipeline |
11.7 OpenCode Router(WhatsApp / Slack / Telegram)
OpenCode Router 讓非技術人員透過常用通訊軟體與 OpenCode 互動:
graph TB
subgraph "通訊平台"
WA["WhatsApp"]
SL["Slack"]
TG["Telegram"]
end
Router["OpenCode Router
(訊息轉發)"]
subgraph "OpenCode 後端"
OW["OpenWork"]
OC["OpenCode Server"]
end
WA --> Router
SL --> Router
TG --> Router
Router --> OW
OW --> OC適用場景:
| 場景 | 說明 |
|---|---|
| PM 提需求 | 專案經理透過 Slack 描述需求,AI 自動分析 |
| CEO 快速查詢 | 透過 WhatsApp 問專案狀態 |
| 遠端監控 | 透過 Telegram 接收 CI/CD 狀態通知 |
| 非正式 Code Review | 透過聊天軟體請求 AI 審查 |
Router 設定範例:
{
"router": {
"whatsapp": {
"enabled": true,
"webhook_url": "https://your-server.com/webhook/whatsapp"
},
"slack": {
"enabled": true,
"bot_token": "{env:SLACK_BOT_TOKEN}",
"signing_secret": "{env:SLACK_SIGNING_SECRET}"
},
"telegram": {
"enabled": true,
"bot_token": "{env:TELEGRAM_BOT_TOKEN}"
}
}
}11.8 OpenPackage 套件管理
OpenPackage(opkg) 是 OpenWork 的套件管理系統:
# 搜尋技能套件
opkg search "api design"
# 安裝技能套件
opkg install @openwork/skill-api-designer
opkg install @openwork/skill-terraform
opkg install @openwork/skill-k8s-ops
# 列出已安裝套件
opkg list
# 更新套件
opkg update @openwork/skill-api-designer
# 發佈自訂套件
opkg publish ./my-skillOpenPackage 架構:
| 元素 | 說明 |
|---|---|
| Registry | 官方套件倉庫 |
| Skill 套件 | 技能定義 + MCP + 設定 |
| Template 套件 | 專案模板 |
| Agent 套件 | 自訂代理定義 |
| Plugin 套件 | OpenCode 外掛 |
11.9 安裝與設定
安裝 OpenWork Desktop:
下載位址:openworklabs.com/download 或 GitHub Releases
# macOS 和 Linux:直接下載安裝
# Windows:透過付費支援計畫取得(openworklabs.com/pricing#windows-support)
# 或使用 npm(Orchestrator CLI)
npm install -g openwork-orchestrator
# Arch Linux
sudo pacman -S --needed webkit2gtk-4.1
# 安裝 pinned OpenCode 版本
curl -fsSL https://opencode.ai/install | bash -s -- --version "$(node -e \
"process.stdout.write(JSON.parse(require('fs').readFileSync('constants.json','utf8')).opencodeVersion.trim().replace(/^v/,''))")" \
--no-modify-path注意:Windows 下載目前透過 openworklabs.com/pricing#windows-support 的付費支援計畫提供。macOS 和 Linux 可直接免費下載。
首次設定:
- 開啟 OpenWork Desktop
- 選擇 Host 模式(本地)或 Client 模式(連線)
- 設定 AI 模型供應商(與 OpenCode 共用設定)
- 安裝所需的技能套件
11.10 架構詳解
桌面應用架構(v0.13.0 起遷移至 Electron):
重要變更:OpenWork v0.13.0 已從 Tauri 遷移至 Electron。此遷移帶來更好的跨平台相容性與外掛生態系統整合。以下為新架構。
graph TB
subgraph "前端(Renderer Process)"
React["React/TypeScript"]
UI["UI 元件"]
State["狀態管理"]
end
subgraph "Electron 橋接層"
IPC["IPC 通訊"]
Events["Event System"]
Preload["Preload Scripts"]
end
subgraph "後端(Main Process)"
Core["核心邏輯(Node.js)"]
FS["檔案系統存取"]
Process["程序管理"]
HTTP["HTTP Client"]
end
subgraph "OpenCode 整合"
OC["OpenCode CLI/Server"]
MCP["MCP 伺服器"]
end
React --> IPC
UI --> Events
IPC --> Core
Events --> Core
Core --> FS
Core --> Process
Core --> HTTP
Process --> OC
OC --> MCP技術堆疊:
| 層級 | 技術 | 用途 |
|---|---|---|
| 前端 | TypeScript + React | GUI 介面 |
| 橋接 | Electron IPC | 前端與後端通訊 |
| 後端 | Node.js(Electron Main Process) | 程序管理、檔案操作 |
| 引擎 | OpenCode Core | AI 代理功能 |
遷移說明:v0.13.0 之前使用 Tauri(Rust 後端 + WebView),遷移至 Electron 後改用 Node.js 主程序。Rust 程式碼比例從 4.9% 降至 3.6%,JavaScript 比例從 7.1% 升至 8.3%。
11.11 安全性設計
| 安全特性 | 說明 |
|---|---|
| 本地執行 | 所有程式碼處理在本地進行 |
| 沙箱模式 | Electron 的 Renderer Process 有嚴格的沙箱限制 |
| 權限控制 | 繼承 OpenCode 的權限系統 |
| API Key 保護 | 使用作業系統的 Keychain/Credential Manager |
| 更新驗證 | Electron 更新器驗證簽章 |
| localhost 綁定 | v0.11.160+ 預設僅綁定 localhost,防止外部存取 |
11.12 Dev Mode 隔離(v0.11.160+ 新增)
OpenWork v0.11.160 引入了 Dev Mode,讓開發者能在隔離環境中安全測試:
# 啟動 Dev Mode(使用環境變數)
OPENWORK_DEV_MODE=1 openwork
# 或在設定檔中啟用
# settings.json:
# { "devMode": true }Dev Mode 特點:
| 特點 | 說明 |
|---|---|
| 隔離資料 | 使用獨立的設定檔和工作目錄 |
| 安全沙箱 | 不影響正式環境的設定和資料 |
| 偵錯工具 | 啟用 DevTools、詳細日誌 |
| 熱重載 | 前端程式碼變更自動重載 |
| localhost 限制 | 預設僅綁定本地 localhost,不對外暴露 |
11.13 Templates 儲存與重播(v0.11.170+ 新增)
OpenWork 的模板系統重大升級——支援 儲存工作流程並重播:
graph TB
subgraph "Templates 工作流程"
Create["建立模板
手動定義或從 Session 儲存"]
Save["儲存模板
含步驟、設定、技能"]
Rerun["重播模板
一鍵重新執行"]
Share["分享模板
團隊共享工作流程"]
end
Create --> Save
Save --> Rerun
Save --> Share| 功能 | 說明 |
|---|---|
| Save from Session | 將當前 Session 工作流程直接儲存為模板 |
| Re-run Template | 一鍵在新專案中重新執行模板中的所有步驟 |
| 參數化模板 | 支援變數替換,適用不同專案 |
| 版本控制 | 模板支援版本管理 |
| 團隊共享 | 透過 OpenPackage 分享模板 |
模板範例:
# templates/api-scaffold.yaml
name: "API 腳手架"
description: "建立完整的 REST API 專案結構"
version: "1.2"
parameters:
- name: project_name
type: string
required: true
- name: database
type: enum
values: [postgresql, mysql, mongodb]
default: postgresql
steps:
- type: prompt
content: "建立 ${project_name} 專案,使用 ${database} 資料庫"
agent: build
- type: prompt
content: "產生 API 文件和 Swagger UI"
agent: plan
- type: prompt
content: "產生單元測試和整合測試"
agent: build11.14 Execution Plan Timeline(v0.11.180+ 新增)
OpenWork 新增了 Execution Plan Timeline 視覺化功能,將 OpenCode 的 Todo 任務以時間軸圖表呈現:
gantt
title Execution Plan Timeline(範例)
dateFormat HH:mm
section Phase 1
分析需求 :done, a1, 09:00, 5min
設計架構 :done, a2, after a1, 10min
section Phase 2
實作 UserService :active, b1, after a2, 15min
實作 OrderService :b2, after a2, 20min
section Phase 3
產生測試 :c1, after b1, 10min
Code Review :c2, after b2, 10min
section Phase 4
整合測試 :d1, after c2, 5min| 功能 | 說明 |
|---|---|
| 即時更新 | 代理執行時,Timeline 即時反映進度 |
| 依賴視覺化 | 顯示任務間的依賴關係 |
| 預估時間 | 根據任務複雜度估算完成時間 |
| 互動操作 | 點擊任務可查看詳細日誌 |
| 匯出報告 | 將 Timeline 匯出為 PNG/PDF |
11.15 Cloud Worker 架構(v0.11.185+ 新增)
OpenWork 新增了 Hosted Cloud Worker 架構,允許將計算任務委託給雲端:
graph TB
subgraph "使用者端"
OW["OpenWork Desktop"]
end
subgraph "Cloud Worker"
Worker["Cloud Worker
(託管 OpenCode 實例)"]
Sandbox["安全沙箱
(Docker/Firecracker)"]
end
subgraph "資源"
GPU["GPU 加速
(本地模型推理)"]
Storage["雲端儲存"]
LLM["AI 模型 API"]
end
OW -->|"任務提交"| Worker
Worker --> Sandbox
Sandbox --> GPU
Sandbox --> Storage
Worker --> LLM
Worker -->|"結果回傳"| OW| 特點 | 說明 |
|---|---|
| 免本地資源 | 不佔用本機 CPU/Memory |
| 安全隔離 | 雲端沙箱環境,與本機隔離 |
| 並行能力 | 多個 Worker 並行執行 |
| 自動擴縮 | 根據任務量自動調整 Worker 數量 |
| localhost 安全 | 本地 Worker 預設綁定 localhost |
11.16 Workspace Switch 與 Starter Sessions(v0.11.190+ 新增)
Workspace Switch Overlay:
快速在不同工作空間之間切換,不需要關閉再重開:
# 使用快捷鍵 Ctrl+Shift+W 開啟 Workspace Switch Overlay
# 或透過 CLI:
openwork start --workspace /path/to/project --approval autoStarter Sessions:
預設的工作空間模板,讓新專案能快速啟動:
| Starter 類型 | 說明 |
|---|---|
| Blank | 空白工作空間 |
| React App | React + TypeScript 快速啟動 |
| API Server | Node.js / Python API 伺服器 |
| Full Stack | 前端 + 後端 + 資料庫 |
| Custom | 自訂 Starter(從模板建立) |
Den——Daytona 支援的 Docker 開發流程:
OpenWork 整合 Daytona,提供 Den(Development Environment):
# 啟動 Den(Docker 開發環境)
openwork den start --template fullstack-ts
# Den 會自動:
# 1. 拉取 Docker Image
# 2. 設定開發環境(Node.js、資料庫等)
# 3. 啟動 OpenCode Server
# 4. 連接 OpenWork Desktop| 功能 | 說明 |
|---|---|
| 一鍵環境 | 自動建立完整開發環境 |
| 環境一致 | 團隊成員使用相同的 Docker 環境 |
| 快速銷毀 | 用完即棄,不汙染本機 |
| Daytona 支援 | 整合 Daytona 雲端開發平台 |
11.17 OpenCode Plugins 管理(Skills Tab)
OpenWork 的 Skills Tab 現在支援直接管理 OpenCode 外掛,透過讀寫 opencode.json 進行設定:
| 功能 | 說明 |
|---|---|
| 瀏覽外掛 | 瀏覽可用的 OpenCode 外掛(含 OmO) |
| 一鍵安裝 | 在 GUI 中直接安裝外掛 |
| 設定管理 | 視覺化設定外掛參數 |
| 版本管理 | 自動檢查更新、一鍵升級 |
| 範圍控制 | 專案層級(<workspace>/opencode.json)或全域層級(~/.config/opencode/opencode.json) |
11.18 OpenWork v0.11.192-v0.13.0 更新摘要
| 版本 | 重點更新 |
|---|---|
| v0.11.192–v0.11.195 | React Session Composer(Lexical 編輯器)、增量式 React session path |
| v0.11.196–v0.11.200 | Ollama 本地模型支援、Provider Library 管理(組織管理 LLM 供應商) |
| v0.11.201–v0.11.203 | 國際化五語系(en/ja/zh/vi/pt-BR)自動偵測、共享 seeded paper gradients UI |
| v0.11.204 | 授權變更為 FSL-1.1-MIT(Functional Source License → 兩年後自動轉 MIT) |
| v0.11.205–v0.11.206 | Cloud Skills 管理、Provider 體驗優化、Anthropic browser auth 修正 |
| v0.11.207 | Composer 精練、Landing 頁面刷新、Catalan 語系新增(i18n 擴展至 6 語系)、microsandbox 沙箱流程、Roadmap 分頁、Node 24 CI 準備、Windows 免費下載恢復 |
| v0.12.x | pnpm workspace 重構(取代 npm)、OpenCode CLI+SDK 釘選至 v1.4.9、Electron 遷移準備、Infisical 專案配置 |
| v0.13.0 | 重大更新:Tauri→Electron 完整遷移、Cloud MCP OAuth Server(ee/ 目錄)、Welcome/Onboarding 畫面、Lexical SyncPlugin crash fix、command invocation timeout 修正、Electron artifact OS/arch 自動選擇、self-host guide 簡化、AUR PKGBUILD 更新至 0.13.0 |
| v0.13.1–v0.13.5 | pnpm workspace 深化重構、Electron browser automation(CDP)初始整合、AI Providers 頁面重新命名與 Preferences tab 新增、icon dedup、marketplace 整合、skill hubs 與 shared workspaces(soft-disabled) |
| v0.13.6–v0.13.7 | shadcn/ui skills 新增、Daytona/devcontainer 全端測試支援、native main menu 實作、pnpm minimum release age CI 強制、server-v2 與 openwork-server-sdk 清理 |
| v0.13.8 | 最新版(1,202 releases、15.2k ⭐、61 貢獻者);Electron browser automation in dev 完整啟用、CDP browser tools(直接 OpenCode 工具,無需 MCP,多目標)、AGENTS.md 更新、安全性改進 |
授權變更說明:
OpenWork 的授權經歷了以下演變:
| 時間 | 授權 | 說明 |
|---|---|---|
| v0.11.203 以前 | MIT | 完全開放原始碼 |
| v0.11.204 | FSL-1.1-MIT | Functional Source License,兩年後自動轉 MIT |
| v0.13.0+(現況) | MIT | 已恢復為 MIT 授權;ee/ 目錄企業功能採 FSL-1.1-MIT |
| 項目 | 說明 |
|---|---|
| 現行授權 | MIT——完全開放原始碼 |
| EE 目錄 | ee/ 目錄為企業版功能,採用 FSL-1.1-MIT |
| 企業影響 | 核心專案完全自由使用,僅 ee/ 企業功能有限制 |
Ollama 本地模型支援(v0.11.200+):
OpenWork 現在可直接使用 Ollama 本地模型,無需雲端 API:
// opencode.json(OpenWork 使用相同格式)
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (local)",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-coder:a3b": {
"name": "Qwen3-Coder (local)"
}
}
}
}
}Debug 匯出功能:
在 Settings → Debug 中可匯出:
- Runtime Debug Report:執行時診斷報告
- Developer Log Stream:開發者日誌串流
這些資訊在提交 Bug Report 時非常有用。
Windows 支援:
OpenWork 的 Windows 版本目前透過付費支援方案提供:
- 下載頁面:openworklabs.com/pricing#windows-support
- macOS 與 Linux 可直接免費下載
11.19 企業導入 OpenWork 建議
Enterprise Plan(企業方案):
OpenWork 提供 Enterprise Plan,包含以下增值服務:
| 功能 | 說明 |
|---|---|
| 功能優先開發 | 企業需求優先進入開發排程 |
| SSO 單一登入 | 整合企業身分認證系統 |
| SLA 服務等級協定 | 保證回應時間與可用性 |
| LTS 長期支援版本 | 穩定版本長期維護 |
| 專屬支援 | 直接聯繫 OpenWork 團隊 |
企業洽詢:ben@openworklabs.com 或 預約會議
Windows 下載注意事項:
- macOS 與 Linux 下載免費提供
- Windows 下載目前透過付費支援方案取得:openworklabs.com/pricing#windows-support
- 雲端 OpenWork Cloud workers 可從 web app 購買後啟動,再透過桌面應用
Add a worker→Connect remote連線
團隊導入建議:
| 場景 | 建議 |
|---|---|
| 小型團隊 | 每人安裝 Desktop App(Host 模式) |
| 中型團隊 | 部署共用 OpenCode Server + Client 模式 |
| 大型組織 | 中央 Server + Router + Orchestrator CLI |
| 非技術團隊 | OpenWork Desktop + Router(WhatsApp/Slack) |
OpenWork + OpenCode 的典型企業架構:
graph TB
subgraph "開發團隊"
Dev1["開發者
OpenCode TUI"]
Dev2["開發者
VS Code"]
Dev3["開發者
OpenWork Desktop"]
end
subgraph "管理團隊"
PM["專案經理
OpenWork Desktop"]
TL["技術主管
OpenWork Desktop"]
end
subgraph "外部使用者"
Ext1["客戶
WhatsApp"]
Ext2["產品經理
Slack"]
end
subgraph "中央伺服器"
Server["OpenCode Server"]
Router["OpenCode Router"]
Registry["OpenPackage Registry
(內部)"]
end
Dev1 --> Server
Dev2 --> Server
Dev3 --> Server
PM --> Server
TL --> Server
Ext1 --> Router
Ext2 --> Router
Router --> Server
Server --> Registry第十二章:生態系整合與進階工作流程
12.1 OpenCode + OmO + OpenWork 三層整合
三層整合架構:
graph TB
subgraph "Layer 3: OpenWork(協作層)"
OW_SM["技能管理器"]
OW_TP["模板"]
OW_Router["Router"]
OW_Orch["Orchestrator"]
end
subgraph "Layer 2: OmO(增強層)"
Sisyphus["Sisyphus 編排"]
Discipline["Discipline Agents"]
HashEdit["Hash-Anchored Edit"]
BG["背景代理"]
end
subgraph "Layer 1: OpenCode(核心層)"
Agent["Build/Plan Agents"]
Tools["工具系統"]
MCP["MCP 伺服器"]
Skills["技能系統"]
end
OW_SM --> Sisyphus
OW_TP --> Agent
OW_Router --> Agent
OW_Orch --> Sisyphus
Sisyphus --> Agent
Discipline --> Agent
HashEdit --> Tools
BG --> Agent
Agent --> Tools
Agent --> MCP
Agent --> Skills三層整合的典型工作流程:
sequenceDiagram
participant PM as 專案經理
(OpenWork Desktop)
participant TL as 技術主管
(OpenWork Desktop)
participant OmO as Sisyphus
(OmO)
participant Dev as 開發者
(OpenCode TUI)
participant OC as OpenCode
(核心引擎)
PM->>TL: 提出需求(透過 Slack Router)
TL->>OmO: 使用 Prometheus 分析需求
OmO->>TL: 回傳分析報告和實作計畫
TL->>OmO: 確認計畫,啟動實作
OmO->>Dev: 分派任務給開發者(背景代理提供輔助)
Dev->>OC: 使用 Build 模式實作
OC->>Dev: 回傳結果
Dev->>OmO: 提交完成的程式碼
OmO->>OmO: Ralph Loop 品質驗證
OmO->>TL: 回報完成狀態
TL->>PM: 通知功能完成12.2 多代理協作工作流程
場景:大型功能開發
graph TB
subgraph "1. 需求分析"
A1["PM 透過 Slack 提出需求"]
A2["OpenWork Router 接收"]
A3["Prometheus 分析需求"]
end
subgraph "2. 架構設計"
B1["Prometheus 設計架構"]
B2["技術主管 Review"]
B3["確認方案"]
end
subgraph "3. 並行開發"
C1["背景代理 #1
前端元件"]
C2["背景代理 #2
後端 API"]
C3["背景代理 #3
資料庫遷移"]
C4["背景代理 #4
測試撰寫"]
end
subgraph "4. 整合驗證"
D1["Sisyphus 合併結果"]
D2["Ralph Loop 驗證"]
D3["Todo Enforcer 檢查"]
end
subgraph "5. 交付"
E1["PR 建立"]
E2["Code Review(AI + 人工)"]
E3["合併與部署"]
end
A1 --> A2 --> A3
A3 --> B1 --> B2 --> B3
B3 --> C1
B3 --> C2
B3 --> C3
B3 --> C4
C1 --> D1
C2 --> D1
C3 --> D1
C4 --> D1
D1 --> D2 --> D3
D3 --> E1 --> E2 --> E312.3 企業級 AI 開發平台架構
完整企業部署架構:
graph TB
subgraph "DMZ / 外部"
Ext["外部使用者
WhatsApp/Slack"]
end
subgraph "接入層"
LB["負載均衡器"]
Router["OpenCode Router"]
Auth["認證服務
SSO/OIDC"]
end
subgraph "應用層"
OW["OpenWork
Web/Desktop
(多實例)"]
Orch["Orchestrator
(排程與自動化)"]
end
subgraph "引擎層"
OC1["OpenCode Server #1"]
OC2["OpenCode Server #2"]
OC3["OpenCode Server #3"]
end
subgraph "模型層"
GW["API Gateway"]
Cloud["雲端模型
Anthropic/OpenAI"]
Local["本地模型
Ollama Cluster"]
end
subgraph "資料層"
Git["GitLab / GitHub"]
Sonar["SonarQube"]
CICD["CI/CD
Jenkins/GitHub Actions"]
Monitor["監控與日誌"]
end
Ext --> Router
Router --> Auth
Auth --> LB
LB --> OW
OW --> OC1
OW --> OC2
OW --> OC3
Orch --> OC1
OC1 --> GW
OC2 --> GW
OC3 --> GW
GW --> Cloud
GW --> Local
OC1 --> Git
OC1 --> Sonar
OC1 --> CICD
OC1 --> Monitor12.4 跨團隊協作模式
| 模式 | 說明 | 適用場景 |
|---|---|---|
| 中央 Server | 所有團隊連接同一個 Server | 小公司、統一管理 |
| 分散式 Server | 每個團隊有獨立 Server | 大公司、資料隔離 |
| 混合模式 | 核心服務中央化 + 團隊自治 | 中型公司 |
跨團隊技能共享:
# 使用內部 OpenPackage Registry
opkg config set registry https://opkg.internal.company.com
# 團隊 A 發佈技能
opkg publish --scope @team-a ./skills/api-designer
# 團隊 B 安裝技能
opkg install @team-a/skill-api-designer12.5 從 Claude Code 遷移指南
遷移步驟:
| 步驟 | 操作 | 說明 |
|---|---|---|
| 1 | 安裝 OpenCode | npm i -g opencode-ai@latest |
| 2 | 保留 CLAUDE.md | OpenCode 自動讀取 |
| 3 | 保留 .claude/skills/ | 自動相容 |
| 4 | 執行 /init | 產生 AGENTS.md |
| 5 | 遷移設定 | 將 Claude Code 設定轉移到 opencode.json |
| 6 | 測試功能 | 驗證所有工作流程正常 |
| 7 | 安裝 OmO(可選) | 獲得進階功能 |
| 8 | 安裝 OpenWork(可選) | 獲得 GUI |
相容性對照表:
| Claude Code 功能 | OpenCode 對等功能 | 備註 |
|---|---|---|
| CLAUDE.md | AGENTS.md | 自動讀取(可停用) |
| .claude/skills/ | .opencode/skills/ | 自動發現 |
| /init | /init(+ OmO 的 /init-deep) | 增強版 |
| /compact | /compact | 完全相容 |
| Max mode | Tab 切換 Plan/Build | 概念對應 |
| Tool Use | 14 內建工具 | 超集 |
| MCP | MCP(local/remote/oauth) | 增強版 |
環境變數控制:
# 停用所有 Claude Code 相容性
export OPENCODE_DISABLE_CLAUDE_CODE=true
# 僅停用 CLAUDE.md 規則讀取
export OPENCODE_DISABLE_CLAUDE_CODE_RULES=true
# 僅停用 .claude/skills/ 讀取
export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=true12.6 GitHub / GitLab 深度整合
GitHub 整合(MCP):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
}
}
}GitLab 整合(MCP):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gitlab": {
"type": "remote",
"url": "https://gitlab-mcp.company.com/mcp",
"environment": {
"GITLAB_TOKEN": "{env:GITLAB_TOKEN}"
}
}
}
}可執行的操作:
| 操作 | 說明 |
|---|---|
| 建立 PR / MR | 自動建立 Pull Request / Merge Request |
| 審查 PR | AI 代理審查程式碼變更 |
| 管理 Issues | 建立、更新、關閉 Issues |
| 搜尋程式碼 | 跨 Repo 搜尋 |
| 管理 Branches | 建立、刪除分支 |
| Release 管理 | 自動建立 Release Notes |
| CI/CD 觸發 | 觸發 Pipeline 執行 |
12.7 ACP(Agent Communication Protocol)支援
OpenCode 支援 Agent Communication Protocol(ACP),允許不同 AI 代理之間通訊:
graph TB
subgraph "Agent Network"
OC_Agent["OpenCode Agent"]
External_Agent["外部 AI Agent"]
Tool_Agent["工具 Agent"]
end
ACP["ACP Protocol
Agent Communication"]
OC_Agent --> ACP
External_Agent --> ACP
Tool_Agent --> ACPACP 的用途:
| 用途 | 說明 |
|---|---|
| 跨平台協作 | 不同 AI 平台的代理互相通訊 |
| 工具共享 | 不同代理共享工具和能力 |
| 任務委派 | 將任務委派給專門的代理處理 |
| 結果匯報 | 代理間共享工作結果 |
更多 ACP 資訊:ACP 文件
12.8 CI/CD 管線深度整合
將 OpenCode 生態系整合進 CI/CD 管線,可實現全自動化的程式碼品質保證流程。
GitHub Actions 整合範例:
# .github/workflows/ai-code-review.yml
name: AI Code Review Pipeline
on:
pull_request:
branches: [main, develop]
types: [opened, synchronize]
permissions:
contents: read
pull-requests: write
issues: write
jobs:
ai-code-review:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install OpenCode
run: npm install -g opencode-ai@latest
- name: Get Changed Files
id: changed
run: |
CHANGED=$(git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -E '\.(ts|js|py|java|go|rs)$' || true)
echo "files=$CHANGED" >> $GITHUB_OUTPUT
echo "Changed files: $CHANGED"
- name: AI Security Review
if: steps.changed.outputs.files != ''
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
opencode --model anthropic/claude-sonnet-4-5 \
--agent code-reviewer \
--print \
--prompt "審查以下變更檔案的安全性,依照 OWASP Top 10 標準:
${{ steps.changed.outputs.files }}
請以 Markdown 格式輸出報告,包含:
1. 嚴重性分級(Critical/High/Medium/Low)
2. 問題描述
3. 修復建議
4. 受影響的程式碼行號" \
> review-report.md
- name: AI Architecture Check
if: steps.changed.outputs.files != ''
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
opencode --model anthropic/claude-sonnet-4-5 \
--agent plan \
--print \
--prompt "分析此次變更是否符合專案的架構設計原則:
1. 是否遵循 Clean Architecture 分層
2. 是否有循環依賴
3. 是否符合 SOLID 原則
4. API 介面是否向後相容" \
>> review-report.md
- name: Post Review Comment
if: steps.changed.outputs.files != ''
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const report = fs.readFileSync('review-report.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## 🤖 AI Code Review Report\n\n${report}`
});
ai-test-generation:
runs-on: ubuntu-latest
needs: ai-code-review
if: github.event.pull_request.labels.*.name == 'auto-test'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Dependencies
run: |
npm install -g opencode-ai@latest
npm install
- name: Generate Missing Tests
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
opencode --model anthropic/claude-sonnet-4-5 \
--agent build \
--prompt "分析專案中缺少測試覆蓋的模組,為每個模組產生對應的單元測試。
使用專案現有的測試框架和風格。
確保新測試可以通過 npm test。"
- name: Run Tests
run: npm test
- name: Commit Generated Tests
if: success()
run: |
git config --local user.email "ai-bot@company.com"
git config --local user.name "AI Test Bot"
git add -A
git diff --staged --quiet || git commit -m "test: AI 自動產生的單元測試"
git pushGitLab CI 整合範例:
# .gitlab-ci.yml
stages:
- review
- test
- deploy
variables:
OPENCODE_SHARE: "disabled"
OPENCODE_AUTOUPDATE: "false"
ai-review:
stage: review
image: node:20-slim
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
before_script:
- npm install -g opencode-ai@latest
script:
- |
CHANGED_FILES=$(git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA...HEAD)
opencode --model anthropic/claude-sonnet-4-5 \
--agent code-reviewer \
--print \
--prompt "審查以下變更:$CHANGED_FILES" \
> review.md
- cat review.md
artifacts:
paths:
- review.md
expire_in: 7 days
ai-test-coverage:
stage: test
image: node:20-slim
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
before_script:
- npm install -g opencode-ai@latest
- npm install
script:
- npm test -- --coverage --coverageReporters=json-summary
- |
COVERAGE=$(cat coverage/coverage-summary.json)
opencode --model anthropic/claude-haiku-4-5 \
--print \
--prompt "分析以下測試覆蓋率報告,找出覆蓋率低於 80% 的模組:
$COVERAGE
輸出建議需要補充測試的具體函式。" \
> coverage-analysis.md
artifacts:
paths:
- coverage-analysis.md
expire_in: 7 daysJenkins Pipeline 整合範例:
// Jenkinsfile
pipeline {
agent any
environment {
ANTHROPIC_API_KEY = credentials('anthropic-api-key')
}
stages {
stage('AI Code Review') {
when {
changeRequest()
}
steps {
sh 'npm install -g opencode-ai@latest'
sh '''
opencode --model anthropic/claude-sonnet-4-5 \
--agent code-reviewer \
--print \
--prompt "審查此次 PR 的所有變更,重點關注:
1. 安全漏洞
2. 效能問題
3. 程式碼品質
4. API 向後相容性" \
> ai-review.md
'''
archiveArtifacts artifacts: 'ai-review.md'
}
}
stage('AI Assisted Fix') {
when {
expression {
return currentBuild.previousBuild?.result == 'FAILURE'
}
}
steps {
sh '''
opencode --model anthropic/claude-sonnet-4-5 \
--agent build \
--prompt "上一次建置失敗,請分析錯誤日誌並嘗試修復:
$(cat previous-build.log | tail -100)"
'''
}
}
}
post {
failure {
sh 'cat build.log | tail -100 > previous-build.log'
}
}
}12.9 多倉庫聯合開發模式
場景:微服務架構下的多倉庫協同
在大型微服務專案中,往往需要同時修改多個倉庫才能完成一個功能。OpenCode 生態系支援多倉庫聯合開發模式:
graph TB
subgraph "功能需求"
REQ["新增訂單退款功能"]
end
subgraph "影響範圍分析(Prometheus)"
A1["order-service
新增退款 API"]
A2["payment-service
新增退款閘道"]
A3["notification-service
退款通知"]
A4["api-gateway
路由設定"]
A5["shared-types
型別定義"]
end
subgraph "並行開發(背景代理)"
B1["Agent #1
order-service"]
B2["Agent #2
payment-service"]
B3["Agent #3
notification-service"]
B4["Agent #4
api-gateway"]
B5["Agent #5
shared-types"]
end
subgraph "整合驗證"
C1["跨服務契約測試"]
C2["E2E 測試"]
C3["效能測試"]
end
REQ --> A1
REQ --> A2
REQ --> A3
REQ --> A4
REQ --> A5
A1 --> B1
A2 --> B2
A3 --> B3
A4 --> B4
A5 --> B5
B1 --> C1
B2 --> C1
B3 --> C1
B4 --> C1
B5 --> C1
C1 --> C2 --> C3Monorepo 整合設定(opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"agent": {
"monorepo-planner": {
"description": "Monorepo 跨服務架構規劃師",
"model": "anthropic/claude-opus-4-6",
"prompt": "你是 Monorepo 架構專家。分析需求對各個 package 的影響,產生跨服務實作計畫。\n\nWorkspace 結構:\n- packages/order-service/\n- packages/payment-service/\n- packages/notification-service/\n- packages/api-gateway/\n- packages/shared-types/\n\n{file:./AGENTS.md}",
"mode": "primary",
"tools": {
"edit": false,
"bash": false
}
},
"contract-tester": {
"description": "跨服務契約測試生成器",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "你是契約測試專家。根據各服務的 API 定義,產生 Pact 契約測試。確保所有服務間的介面相容。",
"mode": "primary"
}
},
"mcp": {
"filesystem": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-filesystem",
"./packages/order-service",
"./packages/payment-service",
"./packages/notification-service",
"./packages/api-gateway",
"./packages/shared-types"]
}
}
}多倉庫同步修改流程:
# 步驟 1:使用 Prometheus 分析影響範圍
> 分析「新增訂單退款功能」對所有微服務的影響
# Prometheus 回覆:
# 影響 5 個服務,建議修改順序:
# 1. shared-types(先定義型別)
# 2. payment-service(核心退款邏輯)
# 3. order-service(訂單狀態更新)
# 4. notification-service(退款通知)
# 5. api-gateway(路由設定)
# 步驟 2:OmO 背景代理並行開發
# Sisyphus 自動分派 5 個背景代理
# 步驟 3:Ralph Loop 跨服務驗證
# 自動執行契約測試確認介面相容
# 步驟 4:統一建立 PR(每個服務一個 PR,關聯 Issue)
> 為所有修改建立 PR,關聯 Issue #1234,並在描述中說明跨服務依賴關係12.10 資料庫遷移自動化
OpenCode 可以與資料庫工具深度整合,實現自動化的 Schema 遷移:
Prisma 遷移整合:
// 使用 OpenCode 自動產生的遷移腳本
// Step 1: OpenCode 分析需求,產生 Schema 變更
// schema.prisma
model Order {
id String @id @default(cuid())
status OrderStatus
totalAmount Decimal @db.Decimal(10, 2)
refundedAt DateTime? // 新增:退款時間
refundAmount Decimal? @db.Decimal(10, 2) // 新增:退款金額
refundReason String? // 新增:退款原因
refundStatus RefundStatus? // 新增:退款狀態
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
items OrderItem[]
payments Payment[]
refunds Refund[] // 新增:退款記錄關聯
@@index([status, createdAt])
@@index([refundStatus]) // 新增索引
}
// 新增模型
model Refund {
id String @id @default(cuid())
orderId String
order Order @relation(fields: [orderId], references: [id])
amount Decimal @db.Decimal(10, 2)
reason String
status RefundStatus @default(PENDING)
processedBy String?
processedAt DateTime?
gatewayRefId String? // 金流閘道退款參考號
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([orderId])
@@index([status])
@@index([gatewayRefId])
}
enum RefundStatus {
PENDING
APPROVED
PROCESSING
COMPLETED
REJECTED
FAILED
}# Step 2: OpenCode 自動化遷移流程
> 為退款功能的 Schema 變更建立資料庫遷移
# OpenCode 執行:
npx prisma migrate dev --name add-refund-feature
# Step 3: 產生遷移前後驗證腳本
> 產生遷移驗證腳本,確保:
> 1. 新欄位有正確的預設值
> 2. 索引已建立
> 3. 外鍵約束正確
> 4. 舊資料不受影響遷移驗證腳本(OpenCode 自動產生):
-- migration-verification.sql
-- 驗證 Refund 表已建立
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_name = 'Refund'
) AS refund_table_exists;
-- 驗證新欄位存在
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'Order'
AND column_name IN ('refundedAt', 'refundAmount', 'refundReason', 'refundStatus');
-- 驗證索引已建立
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename IN ('Order', 'Refund')
AND indexname LIKE '%refund%';
-- 驗證外鍵約束
SELECT conname, conrelid::regclass, confrelid::regclass
FROM pg_constraint
WHERE conrelid = 'Refund'::regclass
AND contype = 'f';
-- 驗證舊資料完整性
SELECT COUNT(*) AS total_orders,
COUNT(CASE WHEN "refundStatus" IS NULL THEN 1 END) AS null_refund_status
FROM "Order";
-- 預期:null_refund_status = total_orders(所有舊訂單的退款狀態為 NULL)12.11 監控與可觀察性整合
Prometheus + Grafana 監控面板:
# opencode-metrics.yml
# OpenCode 使用量監控指標
global:
scrape_interval: 30s
scrape_configs:
- job_name: 'opencode-server'
static_configs:
- targets: ['opencode-server:9090']
metrics_path: /metrics
# 關鍵指標:
# opencode_requests_total - 總請求數
# opencode_tokens_consumed_total - 總 Token 消耗
# opencode_session_duration_seconds - 工作階段持續時間
# opencode_tool_calls_total - 工具呼叫次數
# opencode_errors_total - 錯誤次數
# opencode_model_latency_seconds - 模型回應延遲Grafana Dashboard JSON(核心面板):
{
"dashboard": {
"title": "OpenCode Enterprise Dashboard",
"panels": [
{
"title": "每日 Token 消耗趨勢",
"type": "timeseries",
"targets": [{
"expr": "sum(rate(opencode_tokens_consumed_total[24h])) by (team, model)",
"legendFormat": "{{team}} - {{model}}"
}]
},
{
"title": "各團隊使用量",
"type": "piechart",
"targets": [{
"expr": "sum(opencode_requests_total) by (team)",
"legendFormat": "{{team}}"
}]
},
{
"title": "模型回應延遲 P95",
"type": "gauge",
"targets": [{
"expr": "histogram_quantile(0.95, sum(rate(opencode_model_latency_seconds_bucket[5m])) by (le, model))",
"legendFormat": "{{model}}"
}],
"fieldConfig": {
"defaults": {
"thresholds": {
"steps": [
{"color": "green", "value": 0},
{"color": "yellow", "value": 5},
{"color": "red", "value": 15}
]
},
"unit": "s"
}
}
},
{
"title": "工具呼叫熱力圖",
"type": "heatmap",
"targets": [{
"expr": "sum(rate(opencode_tool_calls_total[1h])) by (tool_name)",
"legendFormat": "{{tool_name}}"
}]
},
{
"title": "錯誤率告警",
"type": "stat",
"targets": [{
"expr": "sum(rate(opencode_errors_total[5m])) / sum(rate(opencode_requests_total[5m])) * 100",
"legendFormat": "Error Rate %"
}],
"fieldConfig": {
"defaults": {
"thresholds": {
"steps": [
{"color": "green", "value": 0},
{"color": "yellow", "value": 2},
{"color": "red", "value": 5}
]
},
"unit": "percent"
}
}
}
]
}
}告警規則設定:
# alerting-rules.yml
groups:
- name: opencode_alerts
rules:
- alert: HighTokenConsumption
expr: sum(rate(opencode_tokens_consumed_total[1h])) > 1000000
for: 30m
labels:
severity: warning
annotations:
summary: "Token 消耗超過閾值"
description: "過去 30 分鐘每小時 Token 消耗率超過 100 萬"
- alert: HighErrorRate
expr: |
sum(rate(opencode_errors_total[5m]))
/ sum(rate(opencode_requests_total[5m])) > 0.05
for: 10m
labels:
severity: critical
annotations:
summary: "OpenCode 錯誤率超過 5%"
description: "過去 10 分鐘錯誤率持續超過 5%"
- alert: ModelLatencyHigh
expr: |
histogram_quantile(0.95,
sum(rate(opencode_model_latency_seconds_bucket[5m])) by (le)
) > 30
for: 15m
labels:
severity: warning
annotations:
summary: "模型回應延遲 P95 超過 30 秒"
- alert: ServerDown
expr: up{job="opencode-server"} == 0
for: 2m
labels:
severity: critical
annotations:
summary: "OpenCode Server 不可用"12.12 基礎架構即程式碼(IaC)整合
OpenCode 可以協助產生和管理 IaC 設定,實現 AI 輔助的基礎架構管理:
Terraform 整合範例:
# main.tf — OpenCode 協助產生的 Kubernetes 叢集設定
terraform {
required_version = ">= 1.5"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
kubernetes = {
source = "hashicorp/kubernetes"
version = "~> 2.25"
}
}
backend "s3" {
bucket = "company-terraform-state"
key = "opencode-infra/terraform.tfstate"
region = "ap-northeast-1"
}
}
# OpenCode Server 叢集
resource "aws_eks_cluster" "opencode" {
name = "opencode-cluster"
role_arn = aws_iam_role.eks_role.arn
version = "1.29"
vpc_config {
subnet_ids = var.private_subnet_ids
security_group_ids = [aws_security_group.opencode_sg.id]
}
}
resource "aws_eks_node_group" "opencode_nodes" {
cluster_name = aws_eks_cluster.opencode.name
node_group_name = "opencode-workers"
node_role_arn = aws_iam_role.node_role.arn
subnet_ids = var.private_subnet_ids
scaling_config {
desired_size = 3
max_size = 10
min_size = 2
}
instance_types = ["m6i.xlarge"]
tags = {
Environment = "production"
Service = "opencode"
ManagedBy = "terraform"
}
}
# Ollama 本地模型服務(GPU 節點)
resource "aws_eks_node_group" "gpu_nodes" {
cluster_name = aws_eks_cluster.opencode.name
node_group_name = "ollama-gpu"
node_role_arn = aws_iam_role.node_role.arn
subnet_ids = var.private_subnet_ids
scaling_config {
desired_size = 2
max_size = 5
min_size = 1
}
instance_types = ["g5.2xlarge"]
ami_type = "AL2_x86_64_GPU"
labels = {
"nvidia.com/gpu" = "true"
workload = "ollama"
}
taint {
key = "nvidia.com/gpu"
value = "true"
effect = "NO_SCHEDULE"
}
}Kubernetes 部署清單:
# k8s/opencode-server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: opencode-server
namespace: opencode
labels:
app: opencode-server
spec:
replicas: 3
selector:
matchLabels:
app: opencode-server
template:
metadata:
labels:
app: opencode-server
spec:
containers:
- name: opencode
image: opencode/server:1.2.21
ports:
- containerPort: 3000
env:
- name: ANTHROPIC_API_KEY
valueFrom:
secretKeyRef:
name: opencode-secrets
key: anthropic-api-key
- name: OPENCODE_SHARE
value: "disabled"
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "2"
memory: "4Gi"
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 10
periodSeconds: 30
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: opencode-server
namespace: opencode
spec:
selector:
app: opencode-server
ports:
- port: 3000
targetPort: 3000
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: opencode-ingress
namespace: opencode
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
ingressClassName: nginx
tls:
- hosts:
- opencode.company.com
secretName: opencode-tls
rules:
- host: opencode.company.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: opencode-server
port:
number: 300012.13 企業級日誌與稽核系統
結構化日誌設定:
{
"$schema": "https://opencode.ai/config.json",
"logging": {
"level": "info",
"format": "json",
"output": "file",
"path": "/var/log/opencode/",
"rotation": {
"maxSize": "100MB",
"maxAge": "90d",
"compress": true
}
}
}日誌格式範例:
{
"timestamp": "2026-03-08T14:32:15.678Z",
"level": "info",
"service": "opencode-server",
"event": "tool_call",
"data": {
"session_id": "sess_abc123",
"user": "developer@company.com",
"team": "backend",
"agent": "build",
"model": "anthropic/claude-sonnet-4-5",
"tool": "edit",
"target_file": "src/services/OrderService.ts",
"action": "modify",
"lines_changed": 45,
"tokens_input": 12500,
"tokens_output": 3200,
"latency_ms": 4520,
"success": true
}
}稽核追蹤查詢(ELK Stack):
// Kibana 查詢:追蹤特定使用者的所有檔案修改
{
"query": {
"bool": {
"must": [
{ "term": { "data.user": "developer@company.com" }},
{ "term": { "data.tool": "edit" }},
{ "range": { "timestamp": { "gte": "now-7d" }}}
]
}
},
"sort": [{ "timestamp": "desc" }],
"size": 100,
"_source": ["timestamp", "data.target_file", "data.action", "data.lines_changed"]
}合規報告自動產生(月報):
# monthly-compliance-report.sh
#!/bin/bash
MONTH=$(date -d "last month" +%Y-%m)
REPORT_FILE="compliance-report-${MONTH}.md"
echo "# OpenCode 合規月報 - ${MONTH}" > $REPORT_FILE
echo "" >> $REPORT_FILE
# 使用量統計
echo "## 1. 使用量統計" >> $REPORT_FILE
curl -s "http://elasticsearch:9200/opencode-logs-*/_search" \
-H 'Content-Type: application/json' \
-d '{
"size": 0,
"query": {
"range": { "timestamp": { "gte": "'${MONTH}'-01", "lt": "'${MONTH}'-01||+1M" }}
},
"aggs": {
"by_team": {
"terms": { "field": "data.team.keyword" },
"aggs": {
"total_tokens": { "sum": { "field": "data.tokens_input" }},
"unique_users": { "cardinality": { "field": "data.user.keyword" }},
"total_sessions": { "cardinality": { "field": "data.session_id.keyword" }}
}
}
}
}' | jq -r '.aggregations.by_team.buckets[] | "| \(.key) | \(.unique_users.value) | \(.total_sessions.value) | \(.total_tokens.value) |"' >> $REPORT_FILE
# 安全事件
echo "" >> $REPORT_FILE
echo "## 2. 安全事件" >> $REPORT_FILE
curl -s "http://elasticsearch:9200/opencode-logs-*/_search" \
-H 'Content-Type: application/json' \
-d '{
"size": 0,
"query": {
"bool": {
"must": [
{ "range": { "timestamp": { "gte": "'${MONTH}'-01", "lt": "'${MONTH}'-01||+1M" }}},
{ "terms": { "data.tool": ["bash", "admin"] }},
{ "term": { "data.success": false }}
]
}
},
"aggs": {
"by_event": { "terms": { "field": "data.tool.keyword" }}
}
}' >> $REPORT_FILE
echo "報告已產生:${REPORT_FILE}"12.14 企業災難復原與高可用方案
高可用架構設計:
graph TB
subgraph "Region A(主要)"
LB_A["負載均衡器 A"]
OC_A1["OpenCode Server A1"]
OC_A2["OpenCode Server A2"]
OC_A3["OpenCode Server A3"]
DB_A["PostgreSQL Primary"]
Cache_A["Redis Cluster"]
end
subgraph "Region B(備援)"
LB_B["負載均衡器 B"]
OC_B1["OpenCode Server B1"]
OC_B2["OpenCode Server B2"]
DB_B["PostgreSQL Standby"]
Cache_B["Redis Replica"]
end
subgraph "外部服務"
CDN["CDN / DNS Failover"]
AI["AI Model APIs
(多供應商)"]
Git["Git Server
(GitLab HA)"]
end
CDN --> LB_A
CDN -.->|failover| LB_B
LB_A --> OC_A1
LB_A --> OC_A2
LB_A --> OC_A3
LB_B --> OC_B1
LB_B --> OC_B2
OC_A1 --> DB_A
OC_A1 --> Cache_A
OC_A1 --> AI
OC_A1 --> Git
OC_B1 --> DB_B
OC_B1 --> Cache_B
DB_A -->|流式複寫| DB_B
Cache_A -->|同步| Cache_B災難復原 SOP:
| 步驟 | 操作 | 預估時間 | 負責人 |
|---|---|---|---|
| 1 | 偵測到主要 Region 不可用 | 自動 | 監控系統 |
| 2 | DNS Failover 切換至備援 Region | 30 秒 | 自動 |
| 3 | PostgreSQL Standby 提升為 Primary | 1-2 分鐘 | DBA |
| 4 | 驗證備援 Region 所有服務健康 | 2-3 分鐘 | SRE |
| 5 | 通知所有使用者切換完成 | 5 分鐘 | 管理團隊 |
| 6 | 事後檢視與修復主要 Region | - | SRE + DBA |
RTO / RPO 目標:
| 指標 | 目標值 | 說明 |
|---|---|---|
| RTO(復原時間目標) | < 5 分鐘 | 服務恢復可用的最長時間 |
| RPO(復原點目標) | < 1 分鐘 | 資料可接受的最大丟失時間 |
| 可用性目標 | 99.95% | 每月最多 21.6 分鐘停機 |
模型供應商容錯:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"anthropic": {
"models": ["claude-sonnet-4-5", "claude-haiku-4-5"],
"priority": 1
},
"openai": {
"models": ["gpt-5"],
"priority": 2
},
"ollama": {
"models": ["qwen3-coder:14b"],
"baseURL": "http://ollama-cluster.internal:11434",
"priority": 3
}
},
"fallback": {
"enabled": true,
"strategy": "priority",
"retryCount": 2,
"retryDelay": 5000
}
}第十三章:常見問題與故障排除
13.1 安裝問題
Q1:安裝後執行 opencode 顯示 “command not found”
# 檢查安裝路徑是否在 PATH 中
echo $PATH
# 常見解決方式
# Bash
echo 'export PATH="$HOME/.opencode/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Zsh
echo 'export PATH="$HOME/.opencode/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Fish
fish_add_path ~/.opencode/binQ2:Windows 安裝失敗
# 確認 Node.js 版本
node --version # 需要 18.x+
# 確認 npm 權限
# 使用管理員權限執行 PowerShell
npm install -g opencode-ai@latest
# 或使用 Scoop(不需要管理員權限)
scoop install opencodeQ3:npm 安裝衝突
# 清除 npm 快取
npm cache clean --force
# 重新安裝
npm install -g opencode-ai@latest13.2 API 連線失敗
Q4:API Key 無效
# 驗證 API Key
opencode config check
# 重新設定
/connect
# 選擇供應商重新輸入 API KeyQ5:Proxy 造成連線失敗
# 設定 Proxy
export HTTP_PROXY="http://proxy.company.com:8080"
export HTTPS_PROXY="http://proxy.company.com:8080"
# 排除本地服務
export NO_PROXY="localhost,127.0.0.1"Q6:API Rate Limit
# 降低請求頻率
# 在 opencode.json 中設定
{
"provider": {
"anthropic": {
"options": {
"timeout": 600000
}
}
}
}13.3 模型回應不穩
Q7:模型輸出品質不佳
| 可能原因 | 解決方案 |
|---|---|
| Prompt 不夠具體 | 提供更詳細的需求描述 |
| 模型選擇不當 | 換用更強的模型(如 Opus) |
| 上下文過長 | 使用 /compact 壓縮上下文 |
| 缺少規則 | 建立 AGENTS.md 和 .opencode/rules/ |
| 溫度過高 | 降低 temperature 設定(如 0.2) |
Q8:模型產生不存在的 API
# 在 .opencode/rules/ 中加入
## 防幻覺規則
- 使用外部 API 前必須先查詢 Context7 或 websearch 確認
- 不確定的 API 呼叫必須標記 [需確認]13.4 權限問題
Q9:修改檔案被拒絕
# 檢查當前權限設定
# 可能原因:
# 1. 使用 Plan Agent(edit 預設 deny)→ 切換到 Build Agent
# 2. 檔案在 .gitignore 中 → 確認 OpenCode 的檔案存取範圍
# 3. 權限設定為 deny → 修改 opencode.json 中的 permissionQ10:bash 指令需要反覆確認
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": "allow"
}
}安全警告:將 bash 設為
allow意味著 AI 可以不經確認執行任意命令。在信任的開發環境中使用,正式環境建議保持ask。
13.5 IDE 無法連線
Q11:VS Code Extension 無法連接 OpenCode
# 確認 OpenCode CLI 已安裝
opencode --version
# 確認 Server 可以啟動
opencode serve --port 3000
# 檢查 VS Code Extension 設定
# Settings → OpenCode → Server URL13.6 效能問題
Q12:OpenCode 啟動緩慢
| 可能原因 | 解決方案 |
|---|---|
| MCP 伺服器啟動慢 | 減少不必要的 MCP 伺服器 |
| 外掛載入慢 | 檢查外掛數量和版本 |
| 網路慢 | 使用本地模型測試 |
| 專案過大 | 優化 .gitignore 排除不必要的檔案 |
Q13:回應延遲高
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-haiku-4-5",
"provider": {
"anthropic": {
"options": {
"timeout": 120000
}
}
}
}13.7 OmO 特定問題
Q14:ultrawork 啟動失敗
# 確認 Bun 版本
bun --version # 需要 1.3.9+
# 確認 OmO 安裝
bun pm ls -g | grep oh-my-openagent
# 重新安裝
bun install -g oh-my-openagent@latestQ15:Hash-Anchored Edit 失敗
# 可能原因:檔案被外部修改
# 解決方案:重新讀取檔案讓 OmO 重新計算 hash
> 請重新讀取 src/services/UserService.ts 的內容Q16:背景代理衝突
# 減少並行代理數
# 在 omo config 中設定
background_agents:
max_concurrent: 3 # 降低並行數13.8 OpenWork 特定問題
Q17:OpenWork Desktop 無法啟動
# macOS:檢查安全設定
# System Preferences → Security & Privacy → Allow openwork
# Windows:檢查防火牆
# 允許 OpenWork 通過防火牆
# Linux:AppImage 權限
chmod +x openwork-linux-x86_64.AppImageQ18:Router 連線失敗
# 確認 Router 服務正在執行
curl http://localhost:3001/health
# 確認 Webhook URL 正確設定
# 確認 Bot Token 有效Q19:OpenPackage 安裝失敗
# 清除快取
opkg cache clean
# 使用指定 Registry
opkg install --registry https://opkg.openwork.software @openwork/skill-name附錄 A:快速上手檢查清單(Checklist)
個人使用者
- 安裝 OpenCode(
npm i -g opencode-ai@latest) - 執行
opencode --version確認安裝 - 執行
opencode - 使用
/connect連接 AI 供應商 - 使用
/models選擇模型 - 嘗試 Plan 模式(Tab 切換)
- 嘗試 Build 模式(Tab 切換)
- 在專案中執行
/init - 建立
opencode.json
團隊使用
- 建立 AGENTS.md
- 建立 .opencode/rules/ 規則檔案
- 建立 opencode.json(共用設定)
- 設定 MCP 伺服器(GitHub、SonarQube 等)
- 配置 .gitignore(排除 sessions)
- 建立自訂代理(Code Reviewer 等)
- 建立共用技能
- 教育訓練
進階使用
- 安裝 OmO(
bun i -g oh-my-openagent) - 使用 ultrawork 啟動
- 嘗試 /init-deep
- 安裝 OpenWork Desktop
- 設定 OpenPackage
- 設定 Orchestrator CLI
- 設定 Router(WhatsApp/Slack)
附錄 B:常見 OpenCode 指令速查表
| 指令 | 功能 | 說明 |
|---|---|---|
/init | 初始化專案 | 產生 AGENTS.md |
/connect | 連接供應商 | 設定 API Key |
/models | 選擇模型 | 切換 AI 模型 |
/compact | 壓縮上下文 | 減少 Token 消耗 |
/share | 分享對話 | 匯出或線上分享 |
/new | 新對話 | 開始新的工作階段 |
/resume | 恢復對話 | 繼續先前工作 |
/undo | 復原 | 復原上一次修改 |
/redo | 重做 | 重做上一次復原 |
/clear | 清除 | 清除當前對話 |
/bug | 回報 Bug | 回報問題給 OpenCode 團隊 |
/help | 說明 | 顯示可用指令 |
Tab | 切換代理 | Plan ↔ Build |
Ctrl+C | 中斷 | 中斷當前操作 |
@general | 呼叫子代理 | 呼叫 General SubAgent |
use skill <name> | 使用技能 | 呼叫已定義的技能 |
附錄 C:OmO 指令速查表
| 指令 | 功能 | 說明 |
|---|---|---|
ultrawork / ulw | 啟動 OmO | 一鍵啟動完整環境 |
/init-deep | 深度初始化 | 產生階層式 AGENTS.md |
| 背景代理 | 自動管理 | 由 Sisyphus 自動調度 |
| Hash-Anchored Edit | 自動啟用 | 替代傳統行號編輯 |
| Ralph Loop | 自動驗證 | 每次編輯後自動檢查 |
| Todo Enforcer | 自動追蹤 | 追蹤 TODO 完成狀態 |
| Comment Checker | 自動檢查 | 偵測臨時註解 |
附錄 D:設定檔完整範例
opencode.json(完整企業設定)
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-4-5",
"small_model": "anthropic/claude-haiku-4-5",
"autoupdate": false,
"share": "disabled",
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
},
"edit": "allow",
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny"
},
"webfetch": "allow",
"websearch": "allow",
"external_directory": "deny",
"lsp": "allow"
},
"agent": {
"plan": {
"model": "anthropic/claude-opus-4-6",
"permission": {
"edit": "deny",
"bash": "ask"
}
},
"build": {
"model": "anthropic/claude-sonnet-4-5",
"steps": 200,
"permission": {
"edit": "allow",
"bash": "allow"
}
},
"code-reviewer": {
"description": "安全導向的 Code Reviewer",
"model": "anthropic/claude-sonnet-4-5",
"prompt": "你是一位安全專家。請依照 OWASP Top 10 和公司安全規範審查程式碼。{file:./.opencode/rules/security.md}",
"mode": "primary",
"temperature": 0.2,
"tools": {
"bash": false,
"edit": false,
"write": false
},
"permission": {
"edit": "deny",
"bash": "deny"
}
}
},
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
},
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
},
"sonarqube": {
"type": "local",
"command": ["npx", "-y", "@sonarsource/sonarqube-mcp-server"],
"environment": {
"SONARQUBE_URL": "{env:SONARQUBE_URL}",
"SONARQUBE_TOKEN": "{env:SONARQUBE_TOKEN}"
}
}
},
"plugin": ["oh-my-openagent"]
}AGENTS.md(完整企業範例)
# AGENTS.md — 企業標準 AI 代理設定
## 專案概述
本專案為企業級電商平台後端服務。
- 語言:TypeScript
- Runtime:Node.js 20 LTS
- Framework:NestJS 10.x
- ORM:Prisma 5.x
- Database:PostgreSQL 16
- Cache:Redis 7
- Queue:BullMQ
- 測試:Jest + Supertest
## 架構原則
1. 遵循 Clean Architecture(Controller → Service → Repository)
2. 所有 Service 透過介面注入(DI)
3. 每個模組獨立一個資料夾
4. API 遵循 RESTful 規範 + OpenAPI 3.0
5. 所有公開 API 必須有 DTO 驗證(class-validator)
## 程式碼風格
- 使用 ESLint + Prettier(設定在 .eslintrc.js)
- 變數命名:camelCase
- 類別命名:PascalCase
- 檔案命名:kebab-case
- 每個函式不超過 30 行
- 每個檔案不超過 300 行
## 安全規範
- 所有使用者輸入必須驗證和消毒
- SQL 查詢只能透過 Prisma ORM
- 禁止直接使用 eval()、Function()、child_process
- API 認證使用 JWT + Refresh Token
- 敏感資料必須加密儲存
- 密碼使用 bcrypt(cost factor >= 12)
## 測試規範
- 每個 Service 必須有對應的 .spec.ts
- 測試覆蓋率目標 >= 80%
- 使用 describe/it 結構
- Mock 外部依賴
- E2E 測試使用 Supertest
## Git 規範
- Commit Message 格式:`type(scope): description`
- type: feat, fix, docs, style, refactor, test, chore
- 每個 commit 只做一件事
- PR 描述必須包含:變更原因、影響範圍、測試方式
## 禁止事項
- 不要修改 prisma/migrations/ 下的已有遷移檔案
- 不要直接修改 package-lock.json
- 不要在程式碼中硬編碼 API Key 或密碼
- 不要使用 any 型別(除非有充分理由並加註釋)
- 不要繞過 ESLint 規則(no eslint-disable).opencode/rules/ 規則檔案範例
security.md
# 安全規則
## 輸入驗證
- 所有外部輸入必須使用 class-validator 驗證
- 使用 ValidationPipe 的 whitelist: true 和 forbidNonWhitelisted: true
- 檔案上傳必須檢查:型別、大小、內容(不只副檔名)
## 認證與授權
- API 使用 JWT Bearer Token 認證
- Refresh Token 存放在 httpOnly cookie
- 實作 Role-Based Access Control (RBAC)
- 管理員操作必須記錄稽核日誌
## 資料保護
- PII(個人識別資訊)在日誌中必須遮罩
- 密碼使用 bcrypt 雜湊(salt rounds >= 12)
- 敏感設定使用環境變數,不寫入程式碼
- 資料庫連線使用 SSL
## API 安全
- 實作 Rate Limiting(預設 100 req/min)
- 啟用 CORS 並限制允許的來源
- 使用 Helmet 中介軟體
- 禁用不必要的 HTTP 方法code-style.md
# 程式碼風格規則
## 命名規範
- 變數/函式:camelCase
- 類別/介面/型別:PascalCase
- 常數:UPPER_SNAKE_CASE
- 檔案:kebab-case.ts
- 測試檔案:kebab-case.spec.ts
## 函式設計
- 單一職責:每個函式只做一件事
- 參數不超過 3 個(超過使用物件)
- 使用 early return 減少巢狀
- 避免副作用
## 型別使用
- 優先使用 interface 而非 type(除非需要 union/intersection)
- 禁止使用 any(使用 unknown 替代)
- 使用 Enum 替代魔術數字/字串
- DTO 和 Entity 必須有完整的型別定義
## 錯誤處理
- 使用 NestJS 內建的 Exception Filters
- 自訂例外繼承 HttpException
- 業務邏輯錯誤使用自訂 BusinessException
- 所有 catch 區塊必須記錄日誌api-design.md
# API 設計規則
## RESTful 規範
- GET:查詢(不修改資料)
- POST:建立
- PUT:完整更新
- PATCH:部分更新
- DELETE:刪除
## URL 設計
- 使用複數名詞:/users, /orders
- 巢狀資源最多兩層:/users/:id/orders
- 查詢參數用於過濾、排序、分頁
- 避免 URL 中出現動詞
## 回應格式
- 成功:{ data: T, meta?: { page, limit, total } }
- 錯誤:{ error: { code, message, details? } }
- HTTP 狀態碼:200, 201, 204, 400, 401, 403, 404, 409, 422, 500
## 分頁
- 查詢參數:?page=1&limit=20
- 預設 limit: 20, 最大 limit: 100
- 回應包含 meta:{ page, limit, total, totalPages }
## 版本控制
- URL 路徑版本:/api/v1/users
- 主要版本變更才升版
- 舊版 API 維護至少 6 個月附錄 E:MCP 伺服器推薦清單
官方 MCP 伺服器
| MCP 伺服器 | 用途 | 安裝方式 |
|---|---|---|
| GitHub | 版本控制整合 | npx @modelcontextprotocol/server-github |
| GitLab | 版本控制整合 | npx @modelcontextprotocol/server-gitlab |
| PostgreSQL | 資料庫操作 | npx @modelcontextprotocol/server-postgres |
| SQLite | 輕量資料庫 | npx @modelcontextprotocol/server-sqlite |
| Context7 | 官方文件查詢 | 遠端:https://mcp.context7.com/mcp |
| Filesystem | 檔案系統操作 | npx @modelcontextprotocol/server-filesystem |
| SonarQube | 程式碼品質掃描 | npx @sonarsource/sonarqube-mcp-server |
| Docker | 容器管理 | npx @mcp/docker-server |
| Kubernetes | K8s 管理 | npx @mcp/kubernetes-server |
| Linear | 專案管理 | 遠端 |
| Slack | 訊息整合 | 遠端 |
| Jira | 問題追蹤 | npx @mcp/jira-server |
社群推薦 MCP 伺服器
| MCP 伺服器 | 用途 | 說明 |
|---|---|---|
| Brave Search | 網路搜尋 | 比內建 websearch 更精確的搜尋結果 |
| Puppeteer | 瀏覽器自動化 | 網頁爬蟲、截圖、E2E 測試 |
| Redis | 快取操作 | 直接操作 Redis 資料 |
| MongoDB | NoSQL 資料庫 | 查詢與管理 MongoDB |
| AWS | 雲端服務 | 管理 AWS 資源(S3, Lambda, EC2 等) |
| Azure | 雲端服務 | 管理 Azure 資源 |
| GCP | 雲端服務 | 管理 Google Cloud 資源 |
| Sentry | 錯誤追蹤 | 查詢和分析應用程式錯誤 |
| Datadog | 監控 | 查詢監控指標和日誌 |
| Notion | 知識管理 | 存取 Notion 資料庫與頁面 |
| Confluence | 文件管理 | 存取企業 Wiki 文件 |
MCP 伺服器設定完整範例
多伺服器整合設定:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"github": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-github"],
"environment": {
"GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
}
},
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
},
"postgres": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-postgres"],
"environment": {
"DATABASE_URL": "{env:DATABASE_URL}"
}
},
"sonarqube": {
"type": "local",
"command": ["npx", "-y", "@sonarsource/sonarqube-mcp-server"],
"environment": {
"SONARQUBE_URL": "{env:SONARQUBE_URL}",
"SONARQUBE_TOKEN": "{env:SONARQUBE_TOKEN}"
}
},
"brave-search": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-brave-search"],
"environment": {
"BRAVE_API_KEY": "{env:BRAVE_API_KEY}"
}
},
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/sse",
"environment": {
"SENTRY_AUTH_TOKEN": "{env:SENTRY_AUTH_TOKEN}"
}
},
"internal-docs": {
"type": "remote",
"url": "https://mcp-docs.internal.company.com/mcp",
"environment": {
"AUTH_TOKEN": "{env:INTERNAL_DOCS_TOKEN}"
}
}
}
}自建 MCP 伺服器範例(Node.js):
// custom-mcp-server.ts
// 自建企業內部 MCP 伺服器 — 查詢公司知識庫
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "company-knowledge-base",
version: "1.0.0",
});
// 工具:搜尋公司知識庫
server.tool(
"search_knowledge",
"搜尋公司內部知識庫文件",
{
query: z.string().describe("搜尋關鍵字"),
category: z
.enum(["api-docs", "architecture", "runbook", "policy"])
.optional()
.describe("文件類別"),
limit: z.number().default(10).describe("回傳筆數上限"),
},
async ({ query, category, limit }) => {
// 呼叫內部 Elasticsearch
const results = await searchInternalDocs(query, category, limit);
return {
content: [
{
type: "text",
text: JSON.stringify(results, null, 2),
},
],
};
}
);
// 工具:查詢 API 文件
server.tool(
"get_api_spec",
"取得指定服務的 OpenAPI 規格",
{
serviceName: z.string().describe("服務名稱"),
version: z.string().optional().describe("API 版本"),
},
async ({ serviceName, version }) => {
const spec = await fetchApiSpec(serviceName, version || "latest");
return {
content: [{ type: "text", text: JSON.stringify(spec, null, 2) }],
};
}
);
// 工具:查詢服務健康狀態
server.tool(
"check_service_health",
"檢查指定微服務的健康狀態",
{
serviceName: z.string().describe("服務名稱"),
environment: z
.enum(["dev", "staging", "production"])
.describe("環境"),
},
async ({ serviceName, environment }) => {
const health = await checkHealth(serviceName, environment);
return {
content: [{ type: "text", text: JSON.stringify(health, null, 2) }],
};
}
);
// 啟動伺服器
const transport = new StdioServerTransport();
await server.connect(transport);附錄 F:模型推薦與比較
雲端模型推薦
| 模型 | 供應商 | 推薦用途 | 價格帶 |
|---|---|---|---|
| Claude Opus 4.6 | Anthropic | 架構設計、複雜推理 | 高 |
| Claude Sonnet 4.5 | Anthropic | 日常開發(最佳均衡) | 中 |
| Claude Haiku 4.5 | Anthropic | 快速查詢、子代理 | 低 |
| GPT-5 | OpenAI | 通用開發 | 中-高 |
| GPT-5.4 | OpenAI | 深度程式碼(OmO) | 高 |
| o1 | OpenAI | 複雜推理 | 高 |
| Gemini 3 | 長上下文 | 中 | |
| Kimi K2.5 | Moonshot | 中文場景 | 中 |
| GLM-5 | Zhipu | 中文場景 | 中 |
本地模型推薦
| 模型 | 大小 | 推薦用途 | 執行方式 |
|---|---|---|---|
| Qwen3-Coder | 1.5B-14B | 輕量編碼 | Ollama |
| DeepSeek Coder V3 | 33B | 進階編碼 | Ollama/vLLM |
| Codestral | 22B | 多語言程式碼 | LM Studio |
| CodeLlama | 7B-70B | 通用程式碼 | Ollama |
附錄 G:重要參考資源
| 資源 | URL |
|---|---|
| OpenCode 官方文件 | opencode.ai/docs |
| OpenCode 繁體中文文件 | opencode.ai/docs/zh-tw |
| OpenCode GitHub | github.com/anomalyco/opencode |
| Oh My OpenAgent GitHub | github.com/code-yeongyu/oh-my-openagent |
| OpenWork GitHub | github.com/different-ai/openwork |
| OpenWork 官網 | openwork.software |
| MCP 規範 | modelcontextprotocol.io |
| Context7 MCP | context7.com |
附錄 H:術語表
| 術語 | 英文 | 說明 |
|---|---|---|
| 代理 | Agent | AI 代理,能自主規劃和執行任務 |
| 子代理 | SubAgent | 由主要代理呼叫的輔助代理 |
| 紀律代理 | Discipline Agent | OmO 的專業化代理(Sisyphus、Hephaestus 等) |
| 背景代理 | Background Agent | 在背景中平行執行的代理,可同時處理多個任務 |
| 技能 | Skill | 可重用的代理能力模組(SKILL.md) |
| 工具 | Tool | AI 可呼叫的操作功能(bash、edit、grep 等) |
| 規則 | Rules | 指導 AI 行為的文件(.opencode/rules/) |
| 外掛 | Plugin | 透過 npm 安裝的擴展(如 OmO) |
| 對話 | Session / Conversation | 一次工作階段 |
| 上下文壓縮 | Compaction | 壓縮過長的對話歷史以減少 Token 消耗 |
| 上下文視窗 | Context Window | 模型一次可處理的最大 Token 數量 |
| Token | Token | 模型處理的基本文字單位,約 4 個英文字元或 1-2 個中文字 |
| MCP | Model Context Protocol | 模型上下文協議,統一 AI 與外部工具的溝通介面 |
| ACP | Agent Communication Protocol | 代理通訊協議,允許不同代理之間互相通訊 |
| TUI | Terminal User Interface | 終端機使用者介面 |
| SSE | Server-Sent Events | 伺服器推送事件(用於即時串流回應) |
| LSP | Language Server Protocol | 語言伺服器協議,提供程式碼智慧感知 |
| Hash-Anchored Edit | - | OmO 的雜湊錨定編輯技術,比行號更準確 |
| IntentGate | - | OmO 的意圖閘道,過濾不適當的代理行為 |
| Ralph Loop | - | OmO 的品質自我迴圈驗證,每次編輯後自動檢查 |
| Todo Enforcer | - | OmO 的待辦事項強制追蹤器 |
| Comment Checker | - | OmO 的臨時註解偵測器,防止 TODO/FIXME 殘留 |
| opkg | OpenPackage | OpenWork 的套件管理系統 |
| SUL | Sisyphus Use License | OmO 的授權協議 |
| Prompt Engineering | 提示工程 | 設計有效的 AI 提示以獲得理想輸出的技術 |
| RAG | Retrieval-Augmented Generation | 檢索增強生成,結合搜尋與生成的 AI 技術 |
| RBAC | Role-Based Access Control | 基於角色的存取控制 |
| CI/CD | Continuous Integration / Continuous Delivery | 持續整合/持續交付 |
| SSDLC | Secure Software Development Life Cycle | 安全軟體開發生命週期 |
| IaC | Infrastructure as Code | 基礎架構即程式碼 |
| SRE | Site Reliability Engineering | 網站可靠性工程 |
| RTO | Recovery Time Objective | 復原時間目標 |
| RPO | Recovery Point Objective | 復原點目標 |
| DI | Dependency Injection | 依賴注入,一種設計模式 |
| DTO | Data Transfer Object | 資料傳輸物件 |
| ORM | Object-Relational Mapping | 物件關聯映射 |
| E2E | End-to-End | 端對端(測試) |
| TDD | Test-Driven Development | 測試驅動開發 |
| BDD | Behavior-Driven Development | 行為驅動開發 |
| DDD | Domain-Driven Design | 領域驅動設計 |
| CQRS | Command Query Responsibility Segregation | 命令查詢責任分離 |
| SOLID | - | 物件導向五大設計原則(SRP, OCP, LSP, ISP, DIP) |
| Hallucination | 幻覺 | AI 模型產生不存在或不正確資訊的現象 |
| Agentic Coding | 代理式編碼 | AI 代理自主完成編碼任務的開發方式 |
| Vibe Coding | 氛圍編碼 | 透過自然語言描述讓 AI 產生程式碼的輕量開發方式 |
文件結束
本文件涵蓋 OpenCode v1.14.50、Oh My OpenAgent v4.1.2、OpenWork v0.13.8 的完整生態系教學。
如有任何問題或更新需求,請聯繫軟體架構組。
最後更新:2026-03-25