* docs: deep audit — fix stale config keys, missing commands, and registry drift Cross-checked ~80 high-impact docs pages (getting-started, reference, top-level user-guide, user-guide/features) against the live registries: hermes_cli/commands.py COMMAND_REGISTRY (slash commands) hermes_cli/auth.py PROVIDER_REGISTRY (providers) hermes_cli/config.py DEFAULT_CONFIG (config keys) toolsets.py TOOLSETS (toolsets) tools/registry.py get_all_tool_names() (tools) python -m hermes_cli.main <subcmd> --help (CLI args) reference/ - cli-commands.md: drop duplicate hermes fallback row + duplicate section, add stepfun/lmstudio to --provider enum, expand auth/mcp/curator subcommand lists to match --help output (status/logout/spotify, login, archive/prune/ list-archived). - slash-commands.md: add missing /sessions and /reload-skills entries + correct the cross-platform Notes line. - tools-reference.md: drop bogus '68 tools' headline, drop fictional 'browser-cdp toolset' (these tools live in 'browser' and are runtime-gated), add missing 'kanban' and 'video' toolset sections, fix MCP example to use the real mcp_<server>_<tool> prefix. - toolsets-reference.md: list browser_cdp/browser_dialog inside the 'browser' row, add missing 'kanban' and 'video' toolset rows, drop the stale '38 tools' count for hermes-cli. - profile-commands.md: add missing install/update/info subcommands, document fish completion. - environment-variables.md: dedupe GMI_API_KEY/GMI_BASE_URL rows (kept the one with the correct gmi-serving.com default). - faq.md: Anthropic/Google/OpenAI examples — direct providers exist (not just via OpenRouter), refresh the OpenAI model list. getting-started/ - installation.md: PortableGit (not MinGit) is what the Windows installer fetches; document the 32-bit MinGit fallback. - installation.md / termux.md: installer prefers .[termux-all] then falls back to .[termux]. - nix-setup.md: Python 3.12 (not 3.11), Node.js 22 (not 20); fix invalid 'nix flake update --flake' invocation. - updating.md: 'hermes backup restore --state pre-update' doesn't exist — point at the snapshot/quick-snapshot flow; correct config key 'updates.pre_update_backup' (was 'update.backup'). user-guide/ - configuration.md: api_max_retries default 3 (not 2); display.runtime_footer is the real key (not display.runtime_metadata_footer); checkpoints defaults enabled=false / max_snapshots=20 (not true / 50). - configuring-models.md: 'hermes model list' / 'hermes model set ...' don't exist — hermes model is interactive only. - tui.md: busy_indicator -> tui_status_indicator with values kaomoji|emoji|unicode|ascii (not kawaii|minimal|dots|wings|none). - security.md: SSH backend keys (TERMINAL_SSH_HOST/USER/KEY) live in .env, not config.yaml. - windows-wsl-quickstart.md: there is no 'hermes api' subcommand — the OpenAI-compatible API server runs inside hermes gateway. user-guide/features/ - computer-use.md: approvals.mode (not security.approval_level); fix broken ./browser-use.md link to ./browser.md. - fallback-providers.md: top-level fallback_providers (not model.fallback_providers); the picker is subcommand-based, not modal. - api-server.md: API_SERVER_* are env vars — write to per-profile .env, not 'hermes config set' which targets YAML. - web-search.md: drop web_crawl as a registered tool (it isn't); deep-crawl modes are exposed through web_extract. - kanban.md: failure_limit default is 2, not '~5'. - plugins.md: drop hard-coded '33 providers' count. - honcho.md: fix unclosed quote in echo HONCHO_API_KEY snippet; document that 'hermes honcho' subcommand is gated on memory.provider=honcho; reconcile subcommand list with actual --help output. - memory-providers.md: legacy 'hermes honcho setup' redirect documented. Verified via 'npm run build' — site builds cleanly; broken-link count went from 149 to 146 (no regressions, fixed a few in passing). * docs: round 2 audit fixes + regenerate skill catalogs Follow-up to the previous commit on this branch: Round 2 manual fixes: - quickstart.md: KIMI_CODING_API_KEY mentioned alongside KIMI_API_KEY; voice-mode and ACP install commands rewritten — bare 'pip install ...' doesn't work for curl-installed setups (no pip on PATH, not in repo dir); replaced with 'cd ~/.hermes/hermes-agent && uv pip install -e ".[voice]"'. ACP already ships in [all] so the curl install includes it. - cli.md / configuration.md: 'auxiliary.compression.model' shown as 'google/gemini-3-flash-preview' (the doc's own claimed default); actual default is empty (= use main model). Reworded as 'leave empty (default) or pin a cheap model'. - built-in-plugins.md: added the bundled 'kanban/dashboard' plugin row that was missing from the table. Regenerated skill catalogs: - ran website/scripts/generate-skill-docs.py to refresh all 163 per-skill pages and both reference catalogs (skills-catalog.md, optional-skills-catalog.md). This adds the entries that were genuinely missing — productivity/teams-meeting-pipeline (bundled), optional/finance/* (entire category — 7 skills: 3-statement-model, comps-analysis, dcf-model, excel-author, lbo-model, merger-model, pptx-author), creative/hyperframes, creative/kanban-video-orchestrator, devops/watchers, productivity/shop-app, research/searxng-search, apple/macos-computer-use — and rewrites every other per-skill page from the current SKILL.md. Most diffs are tiny (one line of refreshed metadata). Validation: - 'npm run build' succeeded. - Broken-link count moved 146 -> 155 — the +9 are zh-Hans translation shells that lag every newly-added skill page (pre-existing pattern). No regressions on any en/ page.
238 lines
8.0 KiB
Markdown
238 lines
8.0 KiB
Markdown
---
|
|
title: "Opencode — Delegate coding to OpenCode CLI (features, PR review)"
|
|
sidebar_label: "Opencode"
|
|
description: "Delegate coding to OpenCode CLI (features, PR review)"
|
|
---
|
|
|
|
{/* This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. */}
|
|
|
|
# Opencode
|
|
|
|
Delegate coding to OpenCode CLI (features, PR review).
|
|
|
|
## Skill metadata
|
|
|
|
| | |
|
|
|---|---|
|
|
| Source | Bundled (installed by default) |
|
|
| Path | `skills/autonomous-ai-agents/opencode` |
|
|
| Version | `1.2.0` |
|
|
| Author | Hermes Agent |
|
|
| License | MIT |
|
|
| Platforms | linux, macos, windows |
|
|
| Tags | `Coding-Agent`, `OpenCode`, `Autonomous`, `Refactoring`, `Code-Review` |
|
|
| Related skills | [`claude-code`](/docs/user-guide/skills/bundled/autonomous-ai-agents/autonomous-ai-agents-claude-code), [`codex`](/docs/user-guide/skills/bundled/autonomous-ai-agents/autonomous-ai-agents-codex), [`hermes-agent`](/docs/user-guide/skills/bundled/autonomous-ai-agents/autonomous-ai-agents-hermes-agent) |
|
|
|
|
## Reference: full SKILL.md
|
|
|
|
:::info
|
|
The following is the complete skill definition that Hermes loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
|
|
:::
|
|
|
|
# OpenCode CLI
|
|
|
|
Use [OpenCode](https://opencode.ai) as an autonomous coding worker orchestrated by Hermes terminal/process tools. OpenCode is a provider-agnostic, open-source AI coding agent with a TUI and CLI.
|
|
|
|
## When to Use
|
|
|
|
- User explicitly asks to use OpenCode
|
|
- You want an external coding agent to implement/refactor/review code
|
|
- You need long-running coding sessions with progress checks
|
|
- You want parallel task execution in isolated workdirs/worktrees
|
|
|
|
## Prerequisites
|
|
|
|
- OpenCode installed: `npm i -g opencode-ai@latest` or `brew install anomalyco/tap/opencode`
|
|
- Auth configured: `opencode auth login` or set provider env vars (OPENROUTER_API_KEY, etc.)
|
|
- Verify: `opencode auth list` should show at least one provider
|
|
- Git repository for code tasks (recommended)
|
|
- `pty=true` for interactive TUI sessions
|
|
|
|
## Binary Resolution (Important)
|
|
|
|
Shell environments may resolve different OpenCode binaries. If behavior differs between your terminal and Hermes, check:
|
|
|
|
```
|
|
terminal(command="which -a opencode")
|
|
terminal(command="opencode --version")
|
|
```
|
|
|
|
If needed, pin an explicit binary path:
|
|
|
|
```
|
|
terminal(command="$HOME/.opencode/bin/opencode run '...'", workdir="~/project", pty=true)
|
|
```
|
|
|
|
## One-Shot Tasks
|
|
|
|
Use `opencode run` for bounded, non-interactive tasks:
|
|
|
|
```
|
|
terminal(command="opencode run 'Add retry logic to API calls and update tests'", workdir="~/project")
|
|
```
|
|
|
|
Attach context files with `-f`:
|
|
|
|
```
|
|
terminal(command="opencode run 'Review this config for security issues' -f config.yaml -f .env.example", workdir="~/project")
|
|
```
|
|
|
|
Show model thinking with `--thinking`:
|
|
|
|
```
|
|
terminal(command="opencode run 'Debug why tests fail in CI' --thinking", workdir="~/project")
|
|
```
|
|
|
|
Force a specific model:
|
|
|
|
```
|
|
terminal(command="opencode run 'Refactor auth module' --model openrouter/anthropic/claude-sonnet-4", workdir="~/project")
|
|
```
|
|
|
|
## Interactive Sessions (Background)
|
|
|
|
For iterative work requiring multiple exchanges, start the TUI in background:
|
|
|
|
```
|
|
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>")
|
|
```
|
|
|
|
**Important:** Do NOT use `/exit` — it is not a valid OpenCode command and will open an agent selector dialog instead. Use Ctrl+C (`\x03`) or `process(action="kill")` to exit.
|
|
|
|
### TUI Keybindings
|
|
|
|
| Key | Action |
|
|
|-----|--------|
|
|
| `Enter` | Submit message (press twice if needed) |
|
|
| `Tab` | Switch between agents (build/plan) |
|
|
| `Ctrl+P` | Open command palette |
|
|
| `Ctrl+X L` | Switch session |
|
|
| `Ctrl+X M` | Switch model |
|
|
| `Ctrl+X N` | New session |
|
|
| `Ctrl+X E` | Open editor |
|
|
| `Ctrl+C` | Exit OpenCode |
|
|
|
|
### Resuming Sessions
|
|
|
|
After exiting, OpenCode prints a session ID. Resume with:
|
|
|
|
```
|
|
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
|
|
```
|
|
|
|
## Common Flags
|
|
|
|
| Flag | Use |
|
|
|------|-----|
|
|
| `run 'prompt'` | One-shot execution and exit |
|
|
| `--continue` / `-c` | Continue the last OpenCode session |
|
|
| `--session <id>` / `-s` | Continue a specific session |
|
|
| `--agent <name>` | Choose OpenCode agent (build or plan) |
|
|
| `--model provider/model` | Force specific model |
|
|
| `--format json` | Machine-readable output/events |
|
|
| `--file <path>` / `-f` | Attach file(s) to the message |
|
|
| `--thinking` | Show model thinking blocks |
|
|
| `--variant <level>` | Reasoning effort (high, max, minimal) |
|
|
| `--title <name>` | Name the session |
|
|
| `--attach <url>` | Connect to a running opencode server |
|
|
|
|
## Procedure
|
|
|
|
1. Verify tool readiness:
|
|
- `terminal(command="opencode --version")`
|
|
- `terminal(command="opencode auth list")`
|
|
2. For bounded tasks, use `opencode run '...'` (no pty needed).
|
|
3. For iterative tasks, start `opencode` with `background=true, pty=true`.
|
|
4. Monitor long tasks with `process(action="poll"|"log")`.
|
|
5. If OpenCode asks for input, respond via `process(action="submit", ...)`.
|
|
6. Exit with `process(action="write", data="\x03")` or `process(action="kill")`.
|
|
7. Summarize file changes, test results, and next steps back to user.
|
|
|
|
## PR Review Workflow
|
|
|
|
OpenCode has a built-in PR command:
|
|
|
|
```
|
|
terminal(command="opencode pr 42", workdir="~/project", pty=true)
|
|
```
|
|
|
|
Or review in a temporary clone for isolation:
|
|
|
|
```
|
|
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)
|
|
```
|
|
|
|
## Parallel Work Pattern
|
|
|
|
Use separate workdirs/worktrees to avoid collisions:
|
|
|
|
```
|
|
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")
|
|
```
|
|
|
|
## Session & Cost Management
|
|
|
|
List past sessions:
|
|
|
|
```
|
|
terminal(command="opencode session list")
|
|
```
|
|
|
|
Check token usage and costs:
|
|
|
|
```
|
|
terminal(command="opencode stats")
|
|
terminal(command="opencode stats --days 7 --models anthropic/claude-sonnet-4")
|
|
```
|
|
|
|
## Pitfalls
|
|
|
|
- Interactive `opencode` (TUI) sessions require `pty=true`. The `opencode run` command does NOT need pty.
|
|
- `/exit` is NOT a valid command — it opens an agent selector. Use Ctrl+C to exit the TUI.
|
|
- PATH mismatch can select the wrong OpenCode binary/model config.
|
|
- If OpenCode appears stuck, inspect logs before killing:
|
|
- `process(action="log", session_id="<id>")`
|
|
- Avoid sharing one working directory across parallel OpenCode sessions.
|
|
- Enter may need to be pressed twice to submit in the TUI (once to finalize text, once to send).
|
|
|
|
## Verification
|
|
|
|
Smoke test:
|
|
|
|
```
|
|
terminal(command="opencode run 'Respond with exactly: OPENCODE_SMOKE_OK'")
|
|
```
|
|
|
|
Success criteria:
|
|
- Output includes `OPENCODE_SMOKE_OK`
|
|
- Command exits without provider/model errors
|
|
- For code tasks: expected files changed and tests pass
|
|
|
|
## Rules
|
|
|
|
1. Prefer `opencode run` for one-shot automation — it's simpler and doesn't need pty.
|
|
2. Use interactive background mode only when iteration is needed.
|
|
3. Always scope OpenCode sessions to a single repo/workdir.
|
|
4. For long tasks, provide progress updates from `process` logs.
|
|
5. Report concrete outcomes (files changed, tests, remaining risks).
|
|
6. Exit interactive sessions with Ctrl+C or kill, never `/exit`.
|