Skip to content

Sub-task 1: agent-config/opencode.json — 新增 yolo Agent 定義 #265

Description

@bot0419

概述

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() 中會過濾掉 subagenthidden Agent,只有 primary 模式的 Agent 會出現在 availableModes 列表中
"prompt"build 相同 兩個 Agent 的唯一差異是權限,系統提示詞應保持一致
"*": "allow" 完全不設限,匹配 Copilot (--yolo) 和 Gemini (--yolo) 的 YOLO 行為。不保留 doom_loopquestion 等功能性 deny 規則,以求最大一致性
"default_agent": "build" 明確指定預設 Agent 為受限模式的 build,避免未來新增更多 Agent 時產生歧義

步驟 2:驗證

  1. 確認 JSON 格式正確(可用 python3 -m json.tool agent-config/opencode.json
  2. 確認現有 build Agent 的權限規則完全未變動
  3. 確認 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 測試

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions