概述
在 agent-config/opencode.json 中新增一個名為 yolo 的 Agent 定義,擁有完全寬鬆的權限("*": "allow"),並設定 "default_agent": "build" 確保預設使用受限模式。
父議題:#264
背景
目前 opencode.json 只定義了一個 build Agent,擁有嚴格的 deny-by-default 權限策略。這是受限模式的正確行為,但在 YOLO 模式下,我們需要一個完全不受限的 Agent 來匹配 Copilot 和 Gemini 的 --yolo 行為。
OpenCode 的 Agent 定義會直接對應 ACP 的 Mode ID,因此在 opencode.json 中定義 "yolo" Agent 後,可透過 ACP setSessionMode("yolo") 切換到它。
實作步驟
步驟 1:修改 agent-config/opencode.json
在現有的 "agent" 物件中新增 "yolo" Agent,並在頂層新增 "default_agent" 欄位。
修改前(示意,僅顯示結構):
{
"$schema": "https://opencode.ai/config.json",
"provider": { ... },
"autoupdate": false,
"compaction": { ... },
"agent": {
"build": {
"mode": "primary",
"prompt": "{file:/app/prompts/system_prompt_override.md}",
"permission": {
"*": "deny",
// ... 精細的 allow/deny 規則
}
}
}
}
修改後:
{
"$schema": "https://opencode.ai/config.json",
"provider": { ... },
"autoupdate": false,
"compaction": { ... },
"default_agent": "build",
"agent": {
"build": {
"mode": "primary",
"prompt": "{file:/app/prompts/system_prompt_override.md}",
"permission": {
"*": "deny",
// ... 精細的 allow/deny 規則(維持不變)
}
},
"yolo": {
"mode": "primary",
"prompt": "{file:/app/prompts/system_prompt_override.md}",
"permission": {
"*": "allow"
}
}
}
}
設計決策說明
| 決策 |
理由 |
"mode": "primary" |
OpenCode 在 ACP loadSessionMode() 中會過濾掉 subagent 和 hidden Agent,只有 primary 模式的 Agent 會出現在 availableModes 列表中 |
"prompt" 與 build 相同 |
兩個 Agent 的唯一差異是權限,系統提示詞應保持一致 |
"*": "allow" |
完全不設限,匹配 Copilot (--yolo) 和 Gemini (--yolo) 的 YOLO 行為。不保留 doom_loop、question 等功能性 deny 規則,以求最大一致性 |
"default_agent": "build" |
明確指定預設 Agent 為受限模式的 build,避免未來新增更多 Agent 時產生歧義 |
步驟 2:驗證
- 確認 JSON 格式正確(可用
python3 -m json.tool agent-config/opencode.json)
- 確認現有
build Agent 的權限規則完全未變動
- 確認
yolo Agent 的 mode 為 "primary"(非 "subagent" 或其他值)
注意事項
- 此子任務僅修改配置檔案,不涉及 TypeScript 程式碼
- 不需要修改 Containerfile,因為現有的
COPY 指令已經會複製整個 opencode.json:
COPY --link --chown=$UID:0 --chmod=775 agent-config/opencode.json /home/deno/.config/opencode/opencode.json
測試策略
- 驗證 JSON 語法正確性
- 確認
build Agent 權限規則未被意外修改(diff 比對)
- 此子任務無需撰寫 TypeScript 測試
概述
在
agent-config/opencode.json中新增一個名為yolo的 Agent 定義,擁有完全寬鬆的權限("*": "allow"),並設定"default_agent": "build"確保預設使用受限模式。父議題:#264
背景
目前
opencode.json只定義了一個buildAgent,擁有嚴格的 deny-by-default 權限策略。這是受限模式的正確行為,但在 YOLO 模式下,我們需要一個完全不受限的 Agent 來匹配 Copilot 和 Gemini 的--yolo行為。OpenCode 的 Agent 定義會直接對應 ACP 的 Mode ID,因此在
opencode.json中定義"yolo"Agent 後,可透過 ACPsetSessionMode("yolo")切換到它。實作步驟
步驟 1:修改
agent-config/opencode.json在現有的
"agent"物件中新增"yolo"Agent,並在頂層新增"default_agent"欄位。修改前(示意,僅顯示結構):
{ "$schema": "https://opencode.ai/config.json", "provider": { ... }, "autoupdate": false, "compaction": { ... }, "agent": { "build": { "mode": "primary", "prompt": "{file:/app/prompts/system_prompt_override.md}", "permission": { "*": "deny", // ... 精細的 allow/deny 規則 } } } }修改後:
{ "$schema": "https://opencode.ai/config.json", "provider": { ... }, "autoupdate": false, "compaction": { ... }, "default_agent": "build", "agent": { "build": { "mode": "primary", "prompt": "{file:/app/prompts/system_prompt_override.md}", "permission": { "*": "deny", // ... 精細的 allow/deny 規則(維持不變) } }, "yolo": { "mode": "primary", "prompt": "{file:/app/prompts/system_prompt_override.md}", "permission": { "*": "allow" } } } }設計決策說明
"mode": "primary"loadSessionMode()中會過濾掉subagent和hiddenAgent,只有primary模式的 Agent 會出現在availableModes列表中"prompt"與build相同"*": "allow"--yolo) 和 Gemini (--yolo) 的 YOLO 行為。不保留doom_loop、question等功能性 deny 規則,以求最大一致性"default_agent": "build"build,避免未來新增更多 Agent 時產生歧義步驟 2:驗證
python3 -m json.tool agent-config/opencode.json)buildAgent 的權限規則完全未變動yoloAgent 的mode為"primary"(非"subagent"或其他值)注意事項
COPY指令已經會複製整個opencode.json:COPY --link --chown=$UID:0 --chmod=775 agent-config/opencode.json /home/deno/.config/opencode/opencode.json測試策略
buildAgent 權限規則未被意外修改(diff 比對)