Opencode
將編碼任務委託給 OpenCode CLI 代理,以進行功能實現、重構、PR 審查以及長時間運行的自主會話。需要安裝並認證 opencode CLI。
技能元數據
| 來源 | 捆綁(默認安裝) |
| 路徑 | skills/autonomous-ai-agents/opencode |
| 版本 | 1.2.0 |
| 作者 | Hermes Agent |
| 許可證 | MIT |
| 標籤 | Coding-Agent, OpenCode, Autonomous, Refactoring, Code-Review |
| 相關技能 | claude-code, codex, hermes-agent |
參考:完整 SKILL.md
信息
以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理看到的指令。
OpenCode CLI
使用 OpenCode 作為由 Hermes 終端/進程工具協調的自主編碼工作器。OpenCode 是一個提供商無關的開源 AI 編碼代理,具有 TUI(文本用戶界面)和 CLI(命令行界面)。
何時使用
- 用戶明確要求使用 OpenCode
- 你希望外部編碼代理來實現/重構/審查代碼
- 你需要帶有進度檢查的長時間運行編碼會話
- 你希望在隔離的工作目錄/worktree 中並行執行任務
先決條件
- 已安裝 OpenCode:
npm i -g opencode-ai@latest或brew install anomalyco/tap/opencode - 已配置認證:
opencode auth login或設置提供商環境變量(OPENROUTER_API_KEY 等) - 驗證:
opencode auth list應顯示至少一個提供商 - 用於代碼任務的 Git 倉庫(推薦)
- 交互式 TUI 會話需要
pty=true
二進制解析(重要)
Shell 環境可能會解析不同的 OpenCode 二進制文件。如果終端和 Hermes 之間的行為不同,請檢查:
terminal(command="which -a opencode")
terminal(command="opencode --version")
如果需要,固定明確的二進制路徑:
terminal(command="$HOME/.opencode/bin/opencode run '...'", workdir="~/project", pty=true)
一次性任務
使用 opencode run 執行有界的、非交互式任務:
terminal(command="opencode run 'Add retry logic to API calls and update tests'", workdir="~/project")
使用 -f 附加上下文文件:
terminal(command="opencode run 'Review this config for security issues' -f config.yaml -f .env.example", workdir="~/project")
使用 --thinking 顯示模型思考過程:
terminal(command="opencode run 'Debug why tests fail in CI' --thinking", workdir="~/project")
強制使用特定模型:
terminal(command="opencode run 'Refactor auth module' --model openrouter/anthropic/claude-sonnet-4", workdir="~/project")
交互式會話(後臺)
對於需要多次交換的迭代工作,在後臺啟動 TUI:
terminal(command="opencode", workdir="~/project", background=true, pty=true)
# Returns session_id
# Send a prompt
process(action="submit", session_id="<id>", data="Implement OAuth refresh flow and add tests")
# Monitor progress
process(action="poll", session_id="<id>")
process(action="log", session_id="<id>")
# Send follow-up input
process(action="submit", session_id="<id>", data="Now add error handling for token expiry")
# Exit cleanly — Ctrl+C
process(action="write", session_id="<id>", data="\x03")
# Or just kill the process
process(action="kill", session_id="<id>")
重要: 不要使用 /exit — 它不是有效的 OpenCode 命令,而是會打開代理選擇對話框。請使用 Ctrl+C (\x03) 或 process(action="kill") 退出。
TUI 鍵綁定
| 按鍵 | 操作 |
|---|---|
Enter | 提交消息(如有必要,按兩次) |
Tab | 在代理之間切換(build/plan) |
Ctrl+P | 打開命令面板 |
Ctrl+X L | 切換會話 |
Ctrl+X M | 切換模型 |
Ctrl+X N | 新建會話 |
Ctrl+X E | 打開編輯器 |
Ctrl+C | 退出 OpenCode |
恢復會話
退出後,OpenCode 會打印會話 ID。使用以下命令恢復:
terminal(command="opencode -c", workdir="~/project", background=true, pty=true) # Continue last session
terminal(command="opencode -s ses_abc123", workdir="~/project", background=true, pty=true) # Specific session
常用標誌
| 標誌 | 用途 |
|---|---|
run 'prompt' | 一次性執行並退出 |
--continue / -c | 繼續上一個 OpenCode 會話 |
--session <id> / -s | 繼續特定會話 |
--agent <name> | 選擇 OpenCode 代理(build 或 plan) |
--model provider/model | 強制使用特定模型 |
--format json | 機器可讀的輸出/事件 |
--file <path> / -f | 將文件附加到消息 |
--thinking | 顯示模型思考塊 |
--variant <level> | 推理努力程度(high, max, minimal) |
--title <name> | 命名會話 |
--attach <url> | 連接到正在運行的 opencode 服務器 |
流程
- 驗證工具就緒狀態:
terminal(command="opencode --version")terminal(command="opencode auth list")
- 對於有界任務,使用
opencode run '...'(不需要 pty)。 - 對於迭代任務,使用
background=true, pty=true啟動opencode。 - 使用
process(action="poll"|"log")監控長時間運行的任務。 - 如果 OpenCode 請求輸入,通過
process(action="submit", ...)響應。 - 使用
process(action="write", data="\x03")或process(action="kill")退出。 - 向用戶總結文件更改、測試結果和後續步驟。
PR 審查工作流
OpenCode 有一個內置的 PR 命令:
terminal(command="opencode pr 42", workdir="~/project", pty=true)
或者在臨時克隆中進行審查以實現隔離:
terminal(command="REVIEW=$(mktemp -d) && git clone https://github.com/user/repo.git $REVIEW && cd $REVIEW && opencode run 'Review this PR vs main. Report bugs, security risks, test gaps, and style issues.' -f $(git diff origin/main --name-only | head -20 | tr '\n' ' ')", pty=true)
並行工作模式
使用單獨的工作目錄/worktree 以避免衝突:
terminal(command="opencode run 'Fix issue #101 and commit'", workdir="/tmp/issue-101", background=true, pty=true)
terminal(command="opencode run 'Add parser regression tests and commit'", workdir="/tmp/issue-102", background=true, pty=true)
process(action="list")
會話與成本管理
列出過去的會話:
terminal(command="opencode session list")
檢查令牌使用量和成本:
terminal(command="opencode stats")
terminal(command="opencode stats --days 7 --models anthropic/claude-sonnet-4")
常見陷阱
- 交互式
opencode(TUI)會話需要設置pty=true。opencode run命令不需要 pty。 /exit不是有效命令——它會打開代理選擇器。請使用 Ctrl+C 退出 TUI。- PATH 不匹配可能導致選中錯誤的 OpenCode 二進制文件或模型配置。
- 如果 OpenCode 似乎卡住,請在終止前檢查日誌:
process(action="log", session_id="<id>")
- 避免在並行的 OpenCode 會話間共享同一個工作目錄。
- 在 TUI 中提交時可能需要按兩次 Enter(一次用於確認文本,一次用於發送)。
驗證
冒煙測試:
terminal(command="opencode run 'Respond with exactly: OPENCODE_SMOKE_OK'")
成功標準:
- 輸出包含
OPENCODE_SMOKE_OK - 命令退出時沒有提供程序/模型錯誤
- 對於代碼任務:預期文件已更改且測試通過
規則
- 對於一次性自動化任務,優先使用
opencode run——它更簡單且不需要 pty。 - 僅在需要迭代時使用交互式後臺模式。
- 始終將 OpenCode 會話限定在單個倉庫/工作目錄範圍內。
- 對於長時間運行的任務,從
process日誌中提供進度更新。 - 報告具體結果(更改的文件、測試結果、剩餘風險)。
- 使用 Ctrl+C 或 kill 命令退出交互式會話,切勿使用
/exit。