Docs
Theia IDE
The Theia IDE has a provider for arbitrary OpenAI-compatible models, configured as a list in settings.json. One entry per model id, all of them pointing at the same base URL and the same key.
One entry in ai-features.openAiCustom.customOpenAiModels — model, url and apiKey — puts Kunavo behind Theia Coder, the Architect and inline completion.
{
"ai-features.openAiCustom.customOpenAiModels": [
{
"model": "claude-sonnet-5",
"url": "https://api.kunavo.com/v1",
"id": "kunavo-sonnet-5",
"apiKey": "sk-kn-...",
"developerMessageSettings": "system"
},
{
"model": "claude-haiku-4-5",
"url": "https://api.kunavo.com/v1",
"id": "kunavo-haiku-4-5",
"apiKey": "sk-kn-...",
"developerMessageSettings": "system"
}
]
}url keeps the /v1. Theia's prose does not state a rule — its Readme says only that “model and url are mandatory attributes, indicating the end point and model to use”. What settles the form is the worked example on the same documentation page, for the one vendor there that is not OpenAI: "url": "https://api.mistral.ai/v1". Endpoint root, suffix included — so https://api.kunavo.com/v1 here, not the bare origin. If a request 404s, that field is the first thing to look at; the curl below tells you which of the two shapes the endpoint actually answers on.curl below, and the client's behaviour is between you and Theia.Step by step
- Create a key at
/app/keysand copy it — it is shown once. - Turn the feature on: Theia's docs say to go to Preferences and enable the setting “AI-features => AI Enable”. Nothing below appears until that is done.
- Open the AI Configuration view —
Alt+A, or AI Configuration in the Manage (gear) menu at the bottom-left, right below Settings. Its categories are General, Providers & Models, Model Aliases, Agents, Prompts & Skills, Variables, Tools, Token Usage and MCP Servers. - Add the entries above. The docs describe this as clicking the link in the settings section for OpenAI Compatible Models — the preference is a structured list, and Theia notes that structured settings without a dedicated editor “defer to
settings.json”, which is the file you land in. One object per model id; theurlandapiKeyrepeat. - Point something at it. Under Agents, each agent has a Language Model selector; many agents instead resolve a model alias, so setting
default/code,default/universal,default/code-completion,default/summarizeanddefault/fastunder Model Aliases moves several agents at once. - Send a chat message to Theia Coder, then ask for something that touches a file. The agents in this IDE lean on tool calls and workspace content, so a first run that reads or edits something tells you more than a greeting does — and Token Usage in the same view shows what the turn cost you in tokens.
Checked against the Theia IDE's AI features page, section OpenAI Compatible Models on September 21, 2026. Third-party settings move; if a field name here no longer matches what you see, that page is the authority, not this one.
Verify before you debug the client
One request settles whether a failure is the endpoint, the key, or the configuration file. If this returns JSON, the same base URL and key work in Theia IDE.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Which model id to put in the field
Every text model is reachable as a model id — the live list is GET /v1/models, and the catalog with prices is on the models page. Rates are USD per 1M tokens, input / output.
| Model id | Kunavo in / out | Where it fits in Theia IDE |
|---|---|---|
claude-sonnet-5 | $2.00 / $10.00 | Theia Coder and the default/code alias — the model that edits files |
claude-opus-5 | $2.00 / $10.00 | the Architect in Plan Mode, where a wrong plan is the expensive mistake |
claude-haiku-4-5 | $0.40 / $2.00 | default/fast and default/summarize — chat naming, lookups, compaction |
gemini-3-8-flash | $0.525 / $2.625 | default/code-completion, where Automatic Code Completion fires as you type |
gpt-5-6-sol | $2.00 / $12.00 | a second opinion from another family — one more entry, same url and key |
What Theia claims for this provider
The LLM Providers Overview table on Theia's own page rates each provider on three axes. This is Theia's claim about Theia, copied from that table on the date above — it is not a Kunavo test result, and the column headed “What that needs from the model id” is the only part of this table written here.
| Theia's row | OpenAI Compatible | What that needs from the model id |
|---|---|---|
| Streaming | Yes (State: Public) | Nothing extra. The Readme documents enableStreaming on the same object, true by default — set it to false if a turn hangs and you want to isolate the stream. |
| Tool Calls | Yes (State: Public) | A model id that supports tools. The agents that edit files, run commands or drive MCP servers are all tool-call agents, so an id without tool support limits you to plain chat. |
| Structured Output | Yes (State: Public) | Nothing extra at configuration time, but it is the axis most likely to differ between ids from different families behind one endpoint. |
Theia adds its own caveat two paragraphs above that table, worth repeating because it is the honest frame for this whole page: not all models “may work out of the box, as they may require specific customizations or optimizations”.
What actually costs money
The Theia IDE is open source and free to download, and its AI features carry no charge of their own — what costs money is the model calls, billed by whoever holds the key in apiKey. Two settings move that bill more than the model choice does, and both are in the docs:
- Automatic Code Completion is on by default, and the docs describe it as making “continuous requests to the underlying LLM while coding”. It is the agent that runs thousands of times a day. Pin
default/code-completionto a cheap id, or switch the agent to manual mode in'AIFeatures'=>'CodeCompletion'and trigger it withCtrl+Alt+Space. - Max Context Lines, in the same settings group, caps how much surrounding file goes into each completion request. Every line of it is billed as input on every keystroke-driven call.
The chat agents are the opposite shape: fewer calls, much larger context, and the same workspace files resent turn after turn. That is the case prompt caching is for — see /docs/caching — and it is why the two halves of the model table above are split by how often the agent fires rather than by how clever it is.
When it does not connect
- 404 — the
url. Kunavo serves/v1/chat/completions, so the field wants the/v1root; a bare origin or a full.../chat/completionsboth miss. - 401 — the key. Theia's Readme says the
apiKey“will be send as a Bearer Token in the authorization request”, which is exactly what ansk-kn-key expects. Note the documented default: with noapiKeyat all, Theia sendsno-key, so a missing field looks like a rejected key rather than a missing one. (truemeans “use the global OpenAI API key” — not what you want here.) - The model id is not in the picker — that list comes from your own
customOpenAiModelsentries, not from the endpoint, so a missing id means a missing object. Theidfield is what the UI shows; leave it out and the model name is used instead. - The first system message is rejected or ignored — that is
developerMessageSettings. It defaults todeveloper, which is an OpenAI-shaped role; Theia's own example for a non-OpenAI vendor setssystem, which is why the block above does.user,mergeWithFollowingUserMessageandskipare the documented alternatives. - Nothing responds at all, anywhere — check Workspace Trust. Theia gates every AI feature behind it, and an untrusted workspace disables the chat input and inline completion and shows an AI Features are Restricted message.
FAQ
How do I use a custom OpenAI-compatible API in the Theia IDE?
Enable AI-features => AI Enable in Preferences, then add an entry to the ai-features.openAiCustom.customOpenAiModels preference. Each entry is an object with model, url, id, apiKey and developerMessageSettings, in that order in Theia's own example; model and url are the mandatory pair. The list is a structured setting, so the IDE sends you to settings.json to edit it. Afterwards, assign the model to an agent under Agents in the AI Configuration view, or to one of the model aliases.
Does the Theia IDE's url field need /v1 at the end?
For an OpenAI-compatible endpoint like Kunavo, yes. Theia's documentation does not state the rule in prose — its Readme says only that model and url indicate the end point and model to use — but the worked example on the same page for a non-OpenAI vendor gives the endpoint root with the suffix: "url": "https://api.mistral.ai/v1". So use https://api.kunavo.com/v1. A missing or doubled /v1 shows up as a 404 rather than an authentication error, which is how you tell it apart from a key problem.
Can the Theia IDE use Claude models without an Anthropic account?
Yes, two ways. Theia ships an Anthropic provider that takes an Anthropic key directly, and it ships an OpenAI Compatible provider that sends an OpenAI-shaped request to whatever url you configure and passes the model id straight through. With the second one the id resolves at that endpoint rather than inside the IDE, so the credential you hold is the endpoint's. Kunavo answers Claude ids on its OpenAI-compatible surface, which is the pairing this page describes.
Which model should I assign to which Theia agent?
Split by how often the agent fires rather than by a ranking, because no one here has benchmarked these ids inside this IDE. Code Completion runs continuously while you type and its context is capped by Max Context Lines, so it wants a cheap id; Theia Coder edits files and needs tool calls; the Architect in Plan Mode is the one place a stronger, more expensive id pays for itself, because a bad plan costs a whole session. Model aliases — default/code, default/code-completion, default/fast and the rest — let you move several agents at once.
Has Kunavo tested the Theia IDE against its endpoint?
No. What was checked, on September 21 2026, is Theia's own documentation: the preference id, the field names and their order, and the base URL form are quoted from theia-ide.org/docs/user_ai/ and from the ai-openai Readme it links to. Kunavo has not run a Theia session, an inline completion or a tool round-trip, and makes no claim about how this client behaves. The one thing you can settle on its own is whether the endpoint and key work, which the curl on this page does.