OpenCode
Run OpenCode, the open-source terminal coding agent, against Tensor Machine models by adding a custom provider to opencode.json.
OpenCode is an open-source coding agent that runs in your terminal. It has no built-in Tensor Machine provider, but it supports custom OpenAI-compatible providers — which is exactly what our endpoint is. Adding one is a config-file change; no plugin or fork required.
1. Get your endpoint and key
From the console:
- Base URL — API Keys page, OpenAI format:
https://edge.tensormachine.ai/<org>/v1 - Key — Create key, then copy the
sk-tm-…secret (shown once) - Model IDs — My Team → Model access, the
tm/…aliases
Keep the key out of the config file. Export it instead:
export TENSOR_MACHINE_API_KEY="sk-tm-..."Add that line to your shell profile (~/.zshrc, ~/.bashrc) so it survives new terminals.
2. Add the provider
OpenCode reads opencode.json from your project root, and falls back to
~/.config/opencode/opencode.json for a global config. Use the global file if you want
Tensor Machine available in every project.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"tensormachine": {
"npm": "@ai-sdk/openai-compatible",
"name": "Tensor Machine",
"options": {
"baseURL": "https://edge.tensormachine.ai/<org>/v1",
"apiKey": "{env:TENSOR_MACHINE_API_KEY}"
},
"models": {
"tm/qwen3-5-9b": {
"name": "Qwen3 5 9B"
}
}
}
}
}Four things decide whether this works:
npmmust be@ai-sdk/openai-compatible. That package targets/v1/chat/completions, which is what our OpenAI endpoint serves. The other common choice,@ai-sdk/openai, targets/v1/responsesand will not work here. This is the single most common mistake.baseURLends at/v1. OpenCode appends/chat/completionsitself. Adding the path yourself produces a doubled URL and a 404.- Each key under
modelsis a real model ID sent verbatim to us — use thetm/…alias from Model access, not a display name. Thenamefield is only the label in the picker. {env:…}reads an environment variable. If the variable isn't set, OpenCode substitutes an empty string rather than erroring, so a missing key surfaces later as a401— check the export first when you see one.
Add more models by adding more entries under models.
3. Select the model
Start OpenCode and run /models, then pick the Tensor Machine entry. To make it the default,
set the model key to <provider>/<model-id>:
{
"model": "tensormachine/tm/qwen3-5-9b"
}The provider part (tensormachine) is your key from the provider block; the rest is the
model ID. Both slashes are expected — the model ID contains one of its own.
4. Verify
Ask it something trivial and confirm the answer comes back:
opencode run "reply with the word: connected"Then check the console: Usage should show the request against your team, and your balance
should have moved. If the request never reaches us, the problem is local (base URL, key, or
npm package) rather than a workspace setting.
Optional: declare context limits
OpenCode tracks how much context you have left. For built-in providers it pulls those figures automatically; for a custom provider it only knows what you declare:
"models": {
"tm/qwen3-5-9b": {
"name": "Qwen3 5 9B",
"limit": { "context": 32768, "output": 4096 }
}
}Set these to the real context window and max output of the model you chose — they're on the model's card in Model access. The values above are placeholders, not the values for any particular model. Getting them wrong doesn't break requests; it makes OpenCode's remaining-context estimate wrong, so it compacts at the wrong time.
Troubleshooting
| What you see | Usual cause |
|---|---|
401 on every request | TENSOR_MACHINE_API_KEY not exported in the shell that launched OpenCode, or the key was revoked or rotated |
402 / a payment-required error | Workspace balance is ₹0, or a spend limit is exhausted — Billing → Add funds |
403 naming the model | The model isn't in your team's allow-list — My Team → Model access |
404 on the request path | baseURL includes /chat/completions, or is missing /v1 |
Model missing from /models | The provider block didn't load — check the JSON parses and the provider key matches what you put in model |
| Connects, but never edits files | A model-capability problem, not a config one — try another model from your allow-list |
What we've verified
The configuration above follows OpenCode's documented custom-provider format, and the endpoint, auth scheme and error codes it relies on are the ones our API serves and are covered by our own tests. We have not published a certification of any particular model's performance as a coding agent — which model to use is a judgement call, and the Models page is the place to compare.
Overview
Use Tensor Machine models inside the tools you already run — coding agents, CLIs, SDKs and IDEs — by pointing them at your workspace endpoint.
Claude CLI
Point Anthropic's claude command-line tool at your Tensor Machine workspace with two environment variables, so its requests run on India-resident inference.