3.1 設定檔概覽

OpenCode 的設定集中於 opencode.json 這個檔案。它採用標準 JSON 格式,包含一個 $schema 欄位以提供編輯器自動補全與驗證支援。

多層級設定優先順序

OpenCode 的設定採用三層級結構,從高到低依次為:

🥇 專案層級(最高優先)
位於專案目錄根目錄的 opencode.json,僅作用於當前專案。適合每個專案獨有的設定。
🥈 遠端層級(Git 同步)
透過 Git 同步的設定,同一份設定可以在多台開發機器之間共享。適合團隊統一的開發規範。
🥉 全域層級(最低優先)
位於使用者家目錄的 ~/.config/opencode/opencode.json,作為所有專案的基礎設定。

當多個層級同時存在時,專案層級會覆蓋遠端層級,遠端層級會覆蓋全域層級。這種設計讓你可以將通用設定放在全域,而為每個專案保留彈性調整的空間。

🔍 除錯提示:如果你發現某個設定沒有生效,可以先檢查是否有更高優先順序的層級覆蓋了它。執行 opencode config show 可以查看當前生效的完整設定。

3.2 opencode.json 完整範例

以下是一個完整的 opencode.json 設定檔,展示了常用的設定項目:

{
  "$schema": "https://opencode.ai/config.json",
  "model": "anthropic/claude-sonnet-4",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "read": "allow",
    "write": "ask"
  },
  "theme": "dark",
  "keybind": {
    "toggleTheme": "ctrl+t",
    "openPanel": "ctrl+p",
    "newSession": "ctrl+n"
  },
  "editor": {
    "default": "code",
    "wrap": 80
  },
  "variables": {
    "API_KEY": "$ENV_API_KEY",
    "PROJECT_ROOT": ".project-root"
  }
}

各欄位說明

欄位 型別 說明 範例值
$schema string JSON Schema 位址,提供編輯器驗證與自動補全 "https://opencode.ai/config.json"
model string 預設使用的 LLM 模型 "anthropic/claude-sonnet-4"
permission object 工具執行權限策略 {"*": "ask", "bash": "allow"}
theme string UI 主題(light / dark) "dark"
keybind object 自訂快捷鍵綁定 {"toggleTheme": "ctrl+t"}
editor object 外部編輯器設定 {"default": "code"}
variables object 自訂變數(支援環境變數參考) {"KEY": "$ENV_MY_KEY"}

3.3 權限系統

OpenCode 的權限系統讓你可以精細控制 AI 代理能夠執行的操作。每個工具可以設定三種權限等級:

權限值 行為 適用場景
allow 自動允許,不詢問 你完全信任的操作(如讀取檔案)
ask 執行前詢問使用者 需要謹慎的操作(如寫入檔案、安裝套件)
deny 直接拒絕執行 你想禁止的操作(如網路請求)

在設定中使用萬用字元 * 來設定全域預設值:

{
  "permission": {
    "*": "ask",      // 所有工具預設為詢問
    "read": "allow",  // 讀取檔案自動允許
    "bash": "allow",  // Shell 命令自動允許
    "write": "ask"    // 寫入檔案需要確認
  }
}
⚡ 安全性建議:除非你完全了解風險,否則不建議將 bash 或 write 設為 allow。保持「詢問」模式可以讓你在 AI 執行可能造成影響的操作前有機會審查。

3.4 變數系統

OpenCode 支援在設定檔中使用變數,讓你可以動態參考環境變數或檔案內容:

{
  "variables": {
    "OPENAI_KEY": "$ENV_OPENAI_API_KEY",
    "PROJECT_NAME": ".project-name"
  }
}

變數參考有兩種形式:

  • $ENV_ 前綴 — 參考環境變數,例如 $ENV_OPENAI_API_KEY 會讀取 OPENAI_API_KEY 環境變數的值
  • 一般文字 — 參考檔案路徑(相對於專案根目錄),OpenCode 會讀取該檔案的內容作為值

變數可以在 opencode.json 的任何欄位中使用 ${變數名稱} 語法來引用:

{
  "variables": {
    "MY_KEY": "$ENV_MY_SECRET_KEY"
  },
  "model": "openai/gpt-5.2",
  // 在其他欄位中引用變數(語法範例)
  "custom_header": "${MY_KEY}"
}

3.5 AGENTS.md:專案自訂指令

如果說 opencode.json 是 OpenCode 的「系統設定」,那麼 AGENTS.md 就是它的「行為指南」。這個 Markdown 檔案位於專案根目錄,用來告訴 OpenCode 你的專案慣例、技術選擇與開發偏好。

你可以透過 /init 指令快速產生 AGENTS.md:

terminal
> /init
◈ 開始初始化 AGENTS.md...
? 專案名稱:my-api-service
? 主要語言:TypeScript
? 測試框架:Vitest
? 程式碼風格:Prettier + ESLint + Biome
? 是否使用 React:否
? 套件管理器:pnpm
✔ AGENTS.md 已建立!
>

產生的 AGENTS.md 內容範例如下:

# my-api-service

## 技術棧
- 語言:TypeScript
- 執行環境:Node.js 22
- 測試:Vitest
- 程式碼風格:Prettier + ESLint + Biome

## 開發慣例
- 使用 pnpm 管理相依套件
- 所有新增功能需附單元測試
- API 路由集中在 src/routes/ 目錄下
- 錯誤處理統一使用 AppError 類別

## 注意事項
- 不要修改 src/types/ 下的自動產生檔案
- 資料庫遷移檔案位於 migrations/ 目錄
📝 撰寫建議:AGENTS.md 的品質直接影響 AI 的輸出品質。建議明確告知:專案使用的技術棧、程式碼風格規範、目錄結構慣例、不該觸碰的檔案或目錄、以及任何你希望 AI 遵循的開發原則。

3.6 設定管理實用指令

OpenCode 提供了幾個方便管理設定的指令:

指令 說明
opencode config show 顯示當前生效的完整設定(合併所有層級)
opencode config set <key> <value> 設定特定欄位的值
opencode config get <key> 查詢特定欄位的值
opencode config edit 用編輯器直接開啟 opencode.json
opencode config validate 驗證 opencode.json 的語法正確性
⚠️ 語法警告:JSON 格式對語法非常敏感——多一個逗號、少一個引號都可能導致設定檔無法解析。編輯後建議執行 opencode config validate 確認語法正確。你也可以使用支援 JSON Schema 的編輯器(如 VS Code)來獲得即時驗證。

章節測驗

測試你對本章內容的理解程度:

OpenCode 的三層設定優先順序(由高到低)為何?

常見問題

opencode.json 與 AGENTS.md 有什麼不同? ▼

opencode.json 是機器設定——它告訴 OpenCode「用哪個模型」、「檔案讀寫權限如何」、「主題是什麼」等技術性參數。AGENTS.md 是行為指南——它以自然語言告訴 AI「這個專案用什麼框架」、「程式碼風格是什麼」、「不要碰哪些檔案」。兩者相輔相成,前者控制能力,後者控制行為。

設定檔修改後需要重啟 OpenCode 嗎? ▼

大部分設定(如 theme、permission)會在 OpenCode 下次讀取時自動生效,無需重啟。部分設定(如 model)可能需要重新載入——但最快的方式是在 TUI 中直接使用 /models 切換,而不需要手動編輯設定檔。

如何在不編輯檔案的情況下暫時改變設定? ▼

在 TUI 中按下 Ctrl+P 開啟設定面板,即可即時調整主題、模型與權限策略。這些變更僅對當前會話有效,不會寫入 opencode.json。如果你想要永久保留變更,可以使用 opencode config set 指令或直接編輯設定檔。