5.1 什麼是代理系統?

在 OpenCode 中,代理(Agent)是執行任務的獨立單元。每個代理擁有自己的提示詞(Prompt)、溫度設定、可用工具集與行為模式。代理系統的設計讓 OpenCode 能夠根據任務類型,自動選擇最適合的執行單元,大幅提升效率與品質。

你可以把代理想像成一個專業團隊:每個人各有專長,當接到任務時,調度者會根據任務性質指派最合適的人選。在 OpenCode 中,這個調度者就是主代理(Main Agent)。

💡 核心概念

代理系統的本質是分工與協作。不需要一個全能代理處理所有事情;相反地,多個專精代理協同工作,效果遠勝一個萬能代理。

5.2 主代理 vs 子代理

OpenCode 區分兩種代理層級:

特性 主代理(Main Agent) 子代理(Subtask Agent)
角色 主要執行者,負責接收與處理使用者請求 背景輔助者,執行特定子任務
工具權限 完整工具集(讀/寫/執行/網路) 依設定限制(通常為唯讀或狹義工具)
執行模式 互動式對話迴圈 背景執行,回報結果
設定方式 opencode.json 中的 agent 欄位 .opencode/agents/*.md 或 opencode.json 中的 subAgents
適用場景 日常開發、除錯、架構設計 背景搜尋、程式碼審查、文件查詢

當你向 OpenCode 提出請求時,主代理會先理解你的意圖,然後視需要自動啟動一個或多個子代理來協助完成任務。例如,當你需要重構一個函式,主代理可能啟動一個子代理去搜尋所有引用位置,同時啟動另一個子代理去查閱相關文件。

5.3 內建代理一覽

OpenCode 內建了多個專用代理,涵蓋從程式碼建置到文件摘要的各種場景。以下是完整列表:

代理名稱 類型 主要功能 工具權限
Build 預設代理 完整的程式開發與建置任務 全部工具
Plan 規劃模式 閱讀程式碼、制定計劃,唯讀不修改 唯讀(無寫入/執行權限)
General 通用型 處理複雜的多步驟任務 全部工具
Explore 探索型 程式碼庫搜尋、grep 與全域分析 搜尋/讀取(無寫入)
Scout 偵察型 高速檔案搜尋與定位 唯讀(限檔案系統)
Compaction 壓縮型 上下文壓縮,節省 Token 用量 唯讀
Title 標題生成 為對話 Session 產生描述性標題 唯讀
Summary 摘要型 將對話內容摘要為結構化紀錄 唯讀

5.4 代理設定檔

代理的設定可以透過兩種方式完成:

方式一:opencode.json(JSON 格式)

在專案根目錄的 opencode.json 中,透過 agent 和 subAgents 欄位設定:

{
  "agent": {
    "model": "gpt-4o",
    "temperature": 0.7,
    "maxSteps": 50
  },
  "subAgents": {
    "explore": {
      "description": "程式碼探索代理",
      "temperature": 0.3,
      "tools": ["read", "grep", "glob"],
      "permissions": {
        "allow": ["read"]
      }
    },
    "review": {
      "description": "程式碼審查代理",
      "temperature": 0.2,
      "model": "gpt-4o",
      "mode": "plan"
    }
  }
}

方式二:.opencode/agents/*.md(Markdown 格式,推薦)

這是更靈活且可讀性更高的方式。每個 .md 檔案代表一個代理,透過 Frontmatter 定義設定:

---
name: code-reviewer
description: 專注於程式碼審查,提供詳細的改進建議
temperature: 0.2
maxSteps: 30
model: gpt-4o
tools:
  - read
  - grep
permissions:
  allow:
    - read
mode: plan
---

# Code Reviewer 代理

你是一個嚴謹的程式碼審查專家。你的任務是:

1. 仔細閱讀提供的程式碼
2. 找出潛在的 Bug、安全漏洞與效能問題
3. 檢查程式碼風格是否符合專案慣例
4. 提供具體且可執行的改進建議

## 審查重點

- **正確性**:邏輯是否無誤?邊界情況是否處理?
- **安全性**:是否有注入風險或權限問題?
- **可維護性**:程式碼是否容易理解和修改?
- **效能**:是否有不必要的重複計算或資源浪費?

## 輸出格式

請以以下結構提供審查報告:
- 摘要(Summary)
- 嚴重問題(Critical)
- 建議改善(Suggestions)
- 正面評價(Praise)
💡 建議

Markdown 格式的代理設定可同時包含 Frontmatter(結構化設定)與正文(提示詞內容),是官方推薦的做法。檔案名稱即為代理名稱,命名應簡潔有意義。

5.5 代理選項總覽

以下是代理設定中可用的選項:

選項 型態 預設值 說明
description String — 代理的描述,幫助 OpenCode 判斷何時使用此代理
temperature Number 0.7 創造力參數,0.0 = 嚴格確定,1.0 = 高度隨機
maxSteps Number 50 代理單次任務的最大工具呼叫次數
disable Boolean false 是否停用此代理
prompt String — 自訂提示詞,定義代理的行為與角色
model String 主模型 指定使用的語言模型
tools Array 全部 限制代理可用的工具列表
permissions Object — 細粒度權限控制(allow / deny)
mode String "build" 代理模式:build / plan / general
hide Boolean false 是否在代理列表中隱藏
⚠️ 注意

設定 permissions.allow 時,只有明確允許的工具才會開放。如果列表遺漏了代理運作必要的工具(如 read),代理可能無法正常執行。

5.6 建立自訂代理

建立自訂代理是擴展 OpenCode 能力最強大的方式之一。以下是建立「文件代理」的完整步驟:

步驟 1:建立代理檔案

在專案的 .opencode/agents/ 目錄下建立一個新的 Markdown 檔案:

# 建立目錄(如果不存在)
mkdir -p .opencode/agents

# 建立文件代理
touch .opencode/agents/documentation.md

步驟 2:編寫 Frontmatter 與提示詞

---
name: documentation
description: 文件撰寫與維護專家,擅長技術文件、API 文件與 README
temperature: 0.4
maxSteps: 30
tools:
  - read
  - write
  - edit
  - grep
  - glob
mode: build
---

# Documentation Agent

你是一個經驗豐富的技術文件工程師。你擅長將複雜的概念轉化為清晰、結構化的文件。

## 核心原則

1. **讀者為本**:根據目標讀者調整語言與深度
2. **一致性**:維持專案中文件風格與術語的統一
3. **可維護性**:撰寫容易更新與擴展的文件結構
4. **完整性**:涵蓋安裝、設定、使用、API、常見問題

## 文件撰寫流程

1. 先閱讀現有程式碼與文件,理解上下文
2. 規劃文件結構與大綱
3. 逐步撰寫各章節內容
4. 加入實用的程式碼範例
5. 檢查連結與引用是否正確

步驟 3:使用自訂代理

當需要文件相關工作時,可以直接在對話中提及:「請 documentation 代理幫我撰寫這個元件的使用說明」,或透過工作流程自動觸發。

💡 實用範例:安全審查代理

你也可以建立一個安全審查專用代理,在合併程式碼前自動執行安全掃描。設定 mode: plan 確保代理只能閱讀無法修改,適合審查工作流程。

5.7 實戰:安全審查代理

以下是一個完整的「安全審查代理」設定檔範例,可用於 CI/CD 流程或合併請求前的自動審查:

---
name: security-auditor
description: 自動化安全程式碼審查,偵測常見漏洞與不良實作
temperature: 0.1
maxSteps: 25
mode: plan
tools:
  - read
  - grep
  - glob
---

# Security Auditor Agent

你是一個資安專家,負責審查程式碼中的安全問題。

## 檢查清單

- [ ] SQL 注入:所有資料庫查詢是否使用參數化查詢?
- [ ] XSS 防護:輸出資料是否有適當的跳脫或消毒?
- [ ] 認證與授權:敏感操作是否有權限檢查?
- [ ] 金鑰與密碼:是否有硬編碼的金鑰或憑證?
- [ ] 路徑遍歷:檔案操作是否限制在允許目錄內?
- [ ] 依賴安全:是否使用了有已知漏洞的套件?
- [ ] 錯誤處理:錯誤訊息是否洩露了敏感資訊?

## 輸出格式

```
## 安全審查報告

### 嚴重性統計
- 嚴重 (Critical): N 個
- 高 (High): N 個
- 中 (Medium): N 個
- 低 (Low): N 個

### 詳細發現
[每個發現包含:位置、類型、風險等級、說明、修復建議]
```

5.8 代理選擇策略

以下是不同任務類型的代理選擇建議,幫助你發揮系統最大效益:

任務類型 建議代理 原因
新功能開發 Build 需要完整工具權限與迭代能力
程式碼審查 Plan 唯讀模式確保不會意外修改
搜尋特定模式 Explore 針對搜尋最佳化,速度快
重構前分析 Scout → Plan → Build 先偵察,再規劃,最後執行
文件撰寫 自訂 Documentation 專門的提示詞提升文件品質
安全掃描 自訂 Security Auditor 專注安全檢查,不易遺漏

小試身手

在 OpenCode 中,Plan 代理與 Build 代理最主要的差異是什麼?
下列哪一種方式是你想建立一個可重複使用的自訂代理時,官方最推薦的做法?

常見問題

主代理和子代理可以同時執行嗎?▼
可以。OpenCode 支援子代理在背景非同步執行,主代理可以同時處理其他工作。當子代理完成任務後,會將結果回報給主代理進行整合。這使得複雜任務可以拆解為多個並行工作單元,大幅提升效率。
自訂代理的檔案命名有什麼規則?▼
Markdown 檔案的名稱(不含副檔名)即為代理的名稱。建議使用小寫英文字母與連字號(kebab-case),例如 code-reviewer.md、documentation.md、security-auditor.md。名稱應簡潔且能反映代理的用途。
如果我不設定任何代理選項,OpenCode 會使用什麼設定?▼
如果 opencode.json 中完全沒有 agent 或 subAgents 設定,OpenCode 會使用預設的 Build 代理作為主代理,採用系統預設的模型、預設溫度(0.7)以及完整工具集。內建代理(如 Explore、Scout)則始終可用,不需要額外設定。