use-opencode-local-provider
dsh plugin: use the opencode local server (OpenCode Zen client channel) as an OpenAI-compatible provider
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 19, 2026
- Updated
- Aug 19, 2026
Introduction
use-opencode-local-provider
A dsh plugin that makes OpenCode Zen available as a local provider in dsh.
How it works
- On load, the plugin ensures an
opencode serveinstance is running (starts it if needed). - It starts a small OpenAI-compatible bridge (
/v1/chat/completions,/v1/models) that translates each request into anopencode servesession via its local HTTP API. - It registers the provider route
opencode-localunder thellm-pi-aisettings section, so it appears in the dsh UI automatically.
The request flow uses the opencode client channel (opencode.ai/zen/go/v1) and does not
need an OpenCode API key, nor does it consume the public /zen/v1 quota.
Installation
In the profile directory (~/.dsh/profiles/<profile>):
dsh plugin --profile <profile> add use-opencode-local-provider
Then add the plugin to cordis.patch.yml:
- entry: use-opencode-local-provider
config:
models: [deepseek-v4-flash-free, hy3-free]
Restart the dsh process. The opencode-local provider appears in the chat UI.
Configuration
| key | default | description |
|---|---|---|
opencodeBin | opencode | path to the opencode binary |
serverHost | 127.0.0.1 | host of the opencode serve instance |
serverPort | 17655 | port of the opencode serve instance |
bridgeHost | 127.0.0.1 | bind host of the local OpenAI-compatible API |
bridgePort | 17656 | port of the local OpenAI-compatible API |
providerId | opencode-local | route name in the llm-pi-ai settings |
providerName | OpenCode Local | display name in the dsh UI |
apiKeyEnv | OPENCODE_API_KEY | env var name dsh uses as the provider's key (the bridge ignores it; pi-ai still requires a credential) |
models | full OpenCode Zen catalog | model ids exposed to dsh |
directory | process.cwd() | working directory of opencode sessions |
streamTimeoutMs | 600000 | max wait for the model to finish (incl. multi-step tool runs) |
permissionReply | once | auto-reply to opencode permission requests: once, always or reject (false = never reply; the run then waits for a manual response or times out) |
Tools and MCP
The bridge lets the model use opencode's own tools — including the MCP servers
connected to opencode. Tool calls are executed by opencode's agent inside the
opencode session (with its sandbox and permission rules); the bridge simply
keeps the run going and returns the final answer. Pending permission requests
are answered automatically according to permissionReply.
Tools are invisible to the dsh agent itself: dsh sees only the chat completions endpoint, so it cannot plan or observe tool calls — the model decides when to use them.
Development
npm install
node -e "import('./lib/index.js').then(m => console.log(Object.keys(m)))"