What it does
OpenCode Orchestrator keeps a task and its unfinished work connected across turns. Commander handles the goal; Planner, Worker, and Reviewer are optional helpers when the work benefits from them. Mission state is stored in the project's .opencode/ directory.
Install
Requires Node.js >=24.15.0 and OpenCode. On OpenCode 2, let OpenCode install and manage the plugin:
opencode plugin add opencode-orchestrator
opencode plugin list
To remove it, run opencode plugin remove opencode-orchestrator.
For OpenCode 1 versions 1.18.29 and newer, add "plugin": ["opencode-orchestrator"] to your OpenCode opencode.json(c). OpenCode installs configured npm plugins when it starts. The optional orchestrator terminal CLI is available separately with npm install -g opencode-orchestrator.
Use
Select Commander in OpenCode and send a request, or start a continuing mission:
/task "Implement the feature and verify it"
| Command | Purpose |
| --- | --- |
| /task | Start a persisted mission, replacing an active mission in the same project |
| /plan | Prepare a plan without implementing it |
| /stop or /cancel | Stop the active mission |
Ordinary questions and small edits can be handled directly. Roles are used when they help; they are not a required pipeline. Replacing a mission stops its previous session and delegated work before the new goal starts. Existing project TODO and checklist files remain available for the new mission to reconcile.
Mission updates (steps, progress, verification, background tasks, and scratchpad) are sent as a request-only user message after the conversation. Orchestrator preserves the host's system instructions and existing conversation prefix so changing mission state does not invalidate them for provider prompt caching. Cache usage still depends on the provider, model, host, and other plugins; no fixed hit rate is guaranteed.
Configuration
The default installation needs no extra options. On OpenCode 2, set options in opencode.jsonc using the package object:
{
"plugins": [
{
"package": "opencode-orchestrator",
"options": {
"agentConcurrency": { "worker": 4 }
}
}
]
}
See the options schema for all settings. Replace a plain string entry with the object when adding options; keep only one entry for this package. OpenCode 1 uses a plugin array and ["opencode-orchestrator", { ...options }] for options.
If commands are missing, check opencode plugin list on OpenCode 2 or opencode debug config on OpenCode 1.
OpenChamber and other WebUIs
Since 2.0.15, set customRendering to false to disable Orchestrator's display changes. This removes the timestamp/step/duration footer from tool results and preserves completed assistant text without the OpenCode 1 standalone thinking-tag cleanup. The default is true for existing installations.
For OpenCode 1 (including WebUIs backed by OpenCode 1), replace the existing entry in opencode.jsonc:
{
"plugin": [
["opencode-orchestrator", { "customRendering": false }]
]
}
For OpenCode 2:
{
"plugins": [
{
"package": "opencode-orchestrator",
"options": { "customRendering": false }
}
]
}
Keep a single entry for the package, merge this option with any existing options, and restart the OpenCode backend after saving. It applies to newly processed results; previously stored footers remain in the conversation history. Mission tracking, memory, secret redaction, and the outgoing message-size guard remain active. The option controls Orchestrator's presentation changes; OpenCode and the WebUI own their rendering.
Contributing
Pull requests from anyone are appreciated. See CONTRIBUTING.md for development and test commands. If you'd like maintainer access, please open an issue; I'm happy to grant it.
MIT License © agnusdei1207