學習建立、管理與使用 OpenCode 技能 — 讓代理擁有可重複使用的專業知識
Skills 是 OpenCode 中的可重用指令單元。每個 Skill 以一個 SKILL.md 檔案為核心,內含結構化的步驟指引,讓代理在特定任務中表現得更專業、更一致。
你可以把 Skill 想像成一個「專業知識包」:當代理遇到符合觸發條件的任務時,會自動載入對應的 Skill,按照其中的指引執行任務。這讓你不必每次重複描述同樣的工作流程。
代理(Agent)是執行任務的「人」,而 Skill 是「操作手冊」。代理可以根據任務動態載入多個 Skills。一個代理可以擁有多個 Skills,同一個 Skill 也可以被不同代理使用。
OpenCode 會從以下位置依序搜尋可用的 Skills:
| 優先順序 | 路徑 | 說明 |
|---|---|---|
| 1(最高) | .opencode/skills/<name>/SKILL.md |
專案層級技能,僅對當前專案有效 |
| 2 | ~/.config/opencode/skills/<name>/SKILL.md |
使用者全域技能,所有專案皆可使用 |
| 3 | .claude/skills/<name>/SKILL.md |
與 Claude Code 相容的技能格式 |
| 4 | .agents/skills/<name>/SKILL.md |
與其他 AI 代理工具相容的格式 |
當名稱衝突時,優先順序較高的路徑會覆蓋較低的路徑。這表示你可以在專案層級覆蓋全域技能,以滿足特定專案的需求。
如果多個位置存在名稱相同的 Skill,OpenCode 只會載入優先順序最高的那個。建議在專案層級使用獨特的命名前綴(如 myproject-*)以避免意外覆蓋全域技能。
一個完整的 Skill 檔案包含兩個部分:Frontmatter(後設資料)與 Markdown 內容(步驟指引)。
| 欄位 | 必填 | 說明 |
|---|---|---|
name |
是 | 技能名稱,用於識別與觸發 |
description |
是 | 簡短描述,幫助系統判斷何時啟用此技能 |
triggers |
否 | 觸發關鍵字列表,當使用者提及這些詞時自動建議載入 |
---
name: api-design-review
description: 審查 REST API 設計,確保符合最佳實作與 OpenAPI 規範
triggers:
- api review
- rest api
- openapi
- endpoint design
---
# API 設計審查技能
當你需要審查 API 設計時,請依以下步驟進行:
## 1. 收集資訊
- 取得 API 規格文件(OpenAPI / Swagger)
- 了解使用案例與消費端需求
- 確認現有的 API 設計準則
## 2. 審查項目
### URL 設計
- [ ] 使用名詞而非動詞(`/users` 而非 `/getUsers`)
- [ ] 版本控制(`/v1/users`)
- [ ] 一致的複數形式
- [ ] 適當的巢狀結構(`/users/{id}/orders`)
### HTTP 方法
- [ ] GET:讀取資源(唯讀、幂等)
- [ ] POST:建立資源(非幂等)
- [ ] PUT:完整更新(幂等)
- [ ] PATCH:部分更新
- [ ] DELETE:刪除資源(幂等)
### 回應設計
- [ ] 一致的錯誤格式(`{ error, message, code }`)
- [ ] 適當的 HTTP 狀態碼
- [ ] 分頁支援(`page`, `per_page`, `total`)
- [ ] 欄位選擇(`?fields=id,name`)
## 3. 輸出格式
```markdown
## API 審查結果
### 違反規範 (N 項)
| 端點 | 問題 | 嚴重性 | 建議 |
|------|------|--------|------|
### 整體評分
- RESTful 程度: X/10
- 一致性: X/10
- 安全性: X/10
- 文件完整性: X/10
```
技能目錄名稱應使用 kebab-case(全小寫+連字號),例如 api-design-review、react-component-generator。這與 OpenCode 的內建技能命名風格一致,且能避免跨平台的大小寫問題。
讓我們透過一個實際案例,逐步建立一個「React 元件生成器」技能:
# 在專案中建立技能目錄
mkdir -p .opencode/skills/react-component-gen
在目錄中建立 SKILL.md 檔案:
---
name: react-component-gen
description: 根據規格生成 React 元件,包含 TypeScript 型別、測試與 Storybook 故事
triggers:
- react component
- 產生元件
- create component
---
# React 元件生成器
根據需求自動生成結構完整的 React 元件。
## 輸入需求
請確認以下資訊:
- 元件名稱(PascalCase)
- Props 型別定義
- 使用場景與行為描述
- 是否包含測試(預設:是)
- 是否包含 Storybook 故事(預設:是)
## 輸出結構
```
src/components/{ComponentName}/
├── {ComponentName}.tsx # 元件實作
├── {ComponentName}.types.ts # Props 型別
├── {ComponentName}.test.tsx # 單元測試
├── {ComponentName}.stories.tsx # Storybook
└── index.ts # 匯出檔案
```
## 實作規範
1. 使用函式元件與 React Hooks
2. 所有 Props 需定義 TypeScript 型別
3. 使用 CSS Modules 或 Tailwind CSS
4. 支援 ref 轉發(forwardRef)
5. 加入 displayName
6. 測試覆蓋:render、props、event handler、edge cases
在對話中輸入以下內容,OpenCode 會自動偵測觸發詞並載入技能:
請幫我產生一個 React 元件:一個可搜尋的下拉選單(SearchableSelect),
支援非同步載入選項、鍵盤導航與自訂選項模板。
你也可以直接要求代理載入特定技能:
使用 react-component-gen 技能,建立一個 Modal 元件。
當你提到「React 元件」或「產生元件」等觸發詞時,OpenCode 的意圖辨識系統會自動比對已安裝技能的 triggers 列表。匹配成功後,對應的 SKILL.md 內容會注入到代理的上下文提示詞中,引導代理按照技能定義的步驟執行任務。
OpenCode 隨附多個內建技能,涵蓋常見的開發任務:
| 技能名稱 | 用途 | 觸發場景 |
|---|---|---|
| playwright | 瀏覽器自動化 — 測試、爬蟲、截圖、表單填寫 | 任何需要操作瀏覽器的任務 |
| git-master | Git 操作專家 — 原子性 commit、rebase、bisect、 blame | commit、rebase、版本歷史查詢 |
| frontend-ui-ux | 前端 UI/UX 設計 — 即使沒有設計稿也能產出精美介面 | 建立頁面、元件、prototype |
| review-work | 實作完成後的綜合審查 — 啟動 5 個並行審查代理 | 完成實作後要求 review |
| ai-slop-remover | 移除程式碼中的 AI 生成痕跡,保留功能 | 需要清理 AI 生成的程式碼風格 |
內建技能位於 OpenCode 安裝目錄中,你無需手動建立即可直接使用。隨著 OpenCode 版本更新,內建技能也會持續增加與改進。
每個 Skill 可以設定自己的工具權限,確保技能在安全的範圍內運作:
---
name: readonly-doc-generator
description: 只能讀取檔案來產生文件,不會修改任何程式碼
permissions:
allow:
- read
- grep
- glob
deny:
- write
- edit
- bash
- webfetch
---
# 唯讀文件產生器
這個技能只能讀取檔案,無法修改任何內容。
適合用於自動化文件產生與程式碼分析任務。
技能中設定的 permissions 會與代理本身的權限進行交集運算。即使技能允許了某個工具,如果代理本身沒有該工具權限,技能仍然無法使用。這提供了一道雙層安全防護。
你可以在一個 Skill 的內容中引用其他 Skill,形成處理管線:
# 完整發佈流程
此技能會依序啟動以下技能:
1. 使用「test-runner」技能執行測試
2. 使用「code-review」技能審查程式碼
3. 使用「documentation」技能更新文件
4. 使用「release」技能執行發佈
每個步驟完成後確認結果,再進入下一步。
根據專案類型使用不同的技能設定:
---
name: project-scaffold
description: 根據技術棧建立初始化專案結構
triggers:
- scaffold
- 初始化專案
---
# 專案初始化
偵測到以下技術棧時使用對應範本:
- **React + TypeScript**: src/components/, src/pages/, src/hooks/
- **Python FastAPI**: app/, tests/, alembic/
- **Node.js Library**: src/, test/, examples/
~/.config/opencode/skills/ 目錄下即可供所有專案使用。如果你希望團隊共享技能,可以將技能目錄納入版控,或透過套件管理工具發布為 npm 套件。OpenCode 社群也正在建立技能市集(Skill Registry),未來可以直接從市集安裝社群貢獻的技能。SKILL.md(大小寫敏感)。