OpenCode
OpenCode connects as a custom provider: one block in opencode.json with our base URL, your key and the model.
- Base URL
https://api.creeksidecompute.ai/v1- API
- OpenAI Chat Completions
- Model id
qwen/qwen3.8-27b, orqwen/qwen3.6-35b-a3bfor speed, ormeta/muse-glimmer-30b, which always reasons first- Context window
- 131072 tokens, up to 65536 of them output
- Key
- Make one at creeksidecompute.ai/account
Set it up
Make a key. Sign in at creeksidecompute.ai/account with your email and make a key. Each request is paid from prepaid credit: top up by card from $10, or redeem a promotional code.
Put the key in an environment variable. Add this line to your shell profile (for example
~/.zshrc), then open a new terminal:shellexport CREEKSIDE_API_KEY=<your key>Add the provider. Put this in
~/.config/opencode/opencode.jsonto use it in every project, or in a project'sopencode.json:opencode.json{ "$schema": "https://opencode.ai/config.json", "provider": { "creekside": { "npm": "@ai-sdk/openai-compatible", "name": "Creekside", "options": { "baseURL": "https://api.creeksidecompute.ai/v1", "apiKey": "{env:CREEKSIDE_API_KEY}" }, "models": { "qwen/qwen3.8-27b": { "name": "Qwen3.8 27B", "tool_call": true, "reasoning": true, "limit": { "context": 131072, "output": 32768 }, "variants": { "none": { "reasoningEffort": "none" }, "low": { "reasoningEffort": "low" }, "medium": { "reasoningEffort": "medium" }, "high": { "reasoningEffort": "high" } } }, "qwen/qwen3.6-35b-a3b": { "name": "Qwen3.6 35B A3B", "tool_call": true, "reasoning": true, "limit": { "context": 131072, "output": 32768 }, "variants": { "none": { "reasoningEffort": "none" }, "low": { "reasoningEffort": "low" }, "medium": { "reasoningEffort": "medium" }, "high": { "reasoningEffort": "high" } } }, "meta/muse-glimmer-30b": { "name": "Muse Glimmer 30B", "tool_call": true, "reasoning": true, "attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] }, "limit": { "context": 131072, "output": 32768 }, "variants": { "low": { "reasoningEffort": "low" }, "medium": { "reasoningEffort": "medium" }, "high": { "reasoningEffort": "high" } } } } } }, "model": "creekside/qwen/qwen3.8-27b" }limit.contextturns on compaction at the right size: OpenCode compacts when the conversation reaches the window less the output limit. The variants are the thinking switch, below.creekside/is OpenCode's own provider prefix; the model id inside it isqwen/qwen3.8-27b.attachmentandmodalitieslet OpenCode send images to Muse Glimmer 30B, which reads them.Pick the model. The
modelline makes it the default. Otherwise choose it with/models, or run one prompt and exit:opencode run -m creekside/qwen/qwen3.8-27b "Summarise this repository". For speed, usecreekside/qwen/qwen3.6-35b-a3binstead, and for Muse Glimmer 30B,creekside/meta/muse-glimmer-30b.
Thinking
Thinking is off until you pick a variant: with none selected, OpenCode sends no thinking setting. The four variants send reasoning_effort: none keeps thinking off, low, medium and high turn it on. Keep none first: OpenCode uses the first variant for its own small requests, such as session titles.
In the interface, the variant key (ctrl+t by default) cycles through them. In a one-off run, OpenCode 2 takes the variant after a #: opencode run -m creekside/qwen/qwen3.8-27b#high "…"; OpenCode 1 takes --variant high. Add --thinking to print the thinking. Thinking tokens are billed as output.
Muse Glimmer 30B always reasons before it answers, so its variants set how long, not whether: with no variant selected, or at low, it reasons briefly, and medium and high make it reason longer. Its list starts at low for OpenCode's own small requests.
What does not work
- Images and files, on the Qwen models. They are listed for text only. Muse Glimmer 30B's entry takes images.
- Model discovery. OpenCode does not read
/v1/models; it lists only the models in youropencode.json. - Cost display. Without a
costblock OpenCode shows no spend. Your bill uses the prices inGET /v1/models.
Troubleshooting
401invalid API key- OpenCode prints
Error: invalid API key, or says a bearer key is required: it reached us without a good key.{env:CREEKSIDE_API_KEY}becomes an empty key when the variable is not set in the shell that started OpenCode. Set it, then restart OpenCode, or runopencode service restartif OpenCode runs in the background. To test the key alone:curl -s https://api.creeksidecompute.ai/v1/models -H "Authorization: Bearer $CREEKSIDE_API_KEY". 404model … is not served- OpenCode prints
Error: model … is not served: the model id is wrong. Each key undermodelsmust be a model id exactly:qwen/qwen3.8-27b,qwen/qwen3.6-35b-a3bormeta/muse-glimmer-30b.GET /v1/modelslists every id we serve. 400maximum context length is 131072 tokens- The conversation is longer than the model's window. Keep
limit.contextat 131072 so OpenCode compacts before the limit, then run/compactor start a new session. 402or429- A
402means your prepaid credit does not cover the request: add credit at creeksidecompute.ai/account. A429means the key's rate, or the number of requests your account may run at once, is used up; agents that work in parallel reach that sooner. Wait and retry. The API reference lists the limits.
Other tools
Sources, read on 2026-10-11: providers, config, models and variants.