关于 opencode
此技能通过 Hermes 的终端和进程工具编排 OpenCode,这是一款开源、支持多模型提供方的编码 Agent。内容涵盖单次任务、交互会话、进度监控、PR 审查,以及在独立工作目录中并行执行任务。
主要功能
- 01使用 opencode run 执行有界任务
- 02管理交互会话并恢复工作
- 03通过进程工具监控进度
- 04使用 OpenCode 审查拉取请求
- 05在独立工作目录并行执行任务
- 06跟踪会话、令牌用量和费用
适用场景
- 01在代码仓库中实现或重构代码
- 02监控长时间运行的编码任务
- 03审查拉取请求并报告问题
- 04将独立修改分配到不同工作目录
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ nousresearch/ hermes-agent --skill opencode安装后在 Claude Code 中输入/opencode确认已加载。
详细介绍
OpenCode CLI
将 OpenCode 作为自主编码 Agent 使用,并通过 Hermes 终端/进程工具进行编排。OpenCode 是一个与提供商无关的开源 AI 编码 Agent,提供 TUI 和 CLI。
何时使用
- 用户明确要求使用 OpenCode
- 你希望使用外部编码 Agent 来实现、重构或审查代码
- 你需要检查进度的长时间编码会话
- 你希望在隔离的工作目录/工作树中并行执行任务
前置条件
- 已安装 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 命令,而是会打开 Agent 选择器对话框。请使用 Ctrl+C(\x03)或 process(action="kill") 退出。
TUI 快捷键
| 按键 | 操作 |
|---|---|
Enter | 提交消息(必要时按两次) |
Tab | 在 Agent(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 Agent(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)
并行工作模式
使用独立的工作目录/工作树来避免冲突:
terminal(command="opencode run 'Fix issue #101 and commit'", workdir="~/.hermes/cache/scratch/issue-101", background=true, pty=true)
terminal(command="opencode run 'Add parser regression tests and commit'", workdir="~/.hermes/cache/scratch/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不是有效命令——它会打开 Agent 选择器。请使用 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。
评论
支持 Markdown