AI coding in your IDE: Kilo Code, Cline, OpenCode & more
OpenAI-compatible API for Kilo Code, Cline, OpenCode, Zed, Aider and goose: base URL, key, model IDs and a ready-made config for each tool.
SovrGPT offers an OpenAI-compatible API. Any coding tool that accepts a custom base URL can use it to work with open models in European data centres. Your requests go to no US model provider such as OpenAI, Anthropic or Google.
You need three values:
- Base URL:
https://sovrgpt.com/api/v1 - API key: format
sov_…, created under Settings → API keys with scopechat. It is sent asAuthorization: Bearer sov_…. - Model ID:
qwen3.6-35b-a3bfor agentic work, or a model without a cold start from the table below.
Recommended models
| Model ID | Operation | Context | Cold start | What for |
|---|---|---|---|---|
qwen3.6-35b-a3b | self-operated, EU | 131k | measured 7–9 min | Default for agents: multi-step tasks, tool chains, changes across several files |
stackit-qwen3.8-27b | Germany (STACKIT) | 262k | none | instant answers in the editor; our standard Qwen |
tensorx-kimi-k2.7-code | European partner data centre (Ireland/Finland) | 131k | none | heavy agentic runs; always thinks |
GET /v1/models lists the models your organisation may use, each with context_window,
effort_levels and cold_start_hint.
Use a model with at least 131k context for agents. Cline's system prompt alone takes about 11,700 tokens, and OpenHands requires at least 22,000. Then comes the conversation: from roughly turn 30, each request carries 25,000–35,000 tokens. With 32k context the tool compacts all the time, and the agent seems to lose the thread.
Cold start and timeout
Self-operated models run on rented GPU servers that shut down when idle. The first request after a pause therefore waits several minutes; after that, answers take seconds. Many plugins give up before then, and the error looks like a broken server.
- Set your plugin's timeout to at least 900 seconds. Most clients abort after 60–120 seconds by default.
- Or use a model without a cold start:
stackit-qwen3.8-27bortensorx-kimi-k2.7-code.
Setup per tool
Kilo Code
Kilo Code runs in VS Code, JetBrains and on the command line, is MIT licensed and has a German
UI. It fetches the model list itself from GET /v1/models, so you never type model IDs by hand.
Settings → Providers → Custom provider at the bottom
| Field | Value |
|---|---|
| Provider ID | any, e.g. sovrgpt |
| Display name | SovrGPT |
| Provider API | OpenAI Compatible |
| Base URL | https://sovrgpt.com/api/v1 |
| API key | sov_… |
| Models | pick from the list, e.g. qwen3.6-35b-a3b |
The context window and output limit (limit) go into the file kilo.jsonc. It uses the same
format as opencode.json below. Before the first run, turn telemetry off
and set permissions.
Cline (VS Code)
API Provider → OpenAI Compatible
| Field | Value |
|---|---|
| Base URL | https://sovrgpt.com/api/v1 |
| API Key | sov_… |
| Model ID | qwen3.6-35b-a3b |
| Context Window | 131072 |
| Max Output Tokens | 8192 |
Set the last two fields by hand: for a custom provider, Cline cannot detect the context window.
Too high, and you eventually get max_tokens must be less than: max_context_length - input_tokens. Too low, and the tool compacts for no reason.
OpenCode
opencode.json:
{
"provider": {
"sovrgpt": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://sovrgpt.com/api/v1",
"apiKey": "sov_..."
},
"models": {
"qwen3.6-35b-a3b": {
"name": "SovrGPT Coder mini",
"limit": { "context": 131072, "output": 8192 }
},
"stackit-qwen3.8-27b": {
"name": "SovrGPT · STACKIT (no cold start)",
"limit": { "context": 262144, "output": 8192 }
}
}
}
}
}limit tells the tool how much context is left. For a custom provider it does not know the
window otherwise.
Zed
settings.json:
{
"language_models": {
"openai_compatible": {
"SovrGPT": {
"api_url": "https://sovrgpt.com/api/v1",
"available_models": [
{ "name": "qwen3.6-35b-a3b", "max_tokens": 131072 }
]
}
}
}
}Enter the key in Zed's provider settings, not in settings.json.
Aider
export OPENAI_API_BASE=https://sovrgpt.com/api/v1
export OPENAI_API_KEY=sov_...
aider --model openai/qwen3.6-35b-a3bAider needs no tool calling; it works with diff formats. Its own docs warn that most models get distracted "above about 25k tokens" anyway.
Qwen Code (command line)
~/.qwen/.env:
OPENAI_API_KEY=sov_...
OPENAI_BASE_URL=https://sovrgpt.com/api/v1
OPENAI_MODEL=qwen3.6-35b-a3b
QWEN_CODE_LANG=deQWEN_CODE_LANG=de switches the UI to German. Qwen Code ships with
approval mode auto, see permissions.
goose
goose lists SovrGPT as a provider of its own once you put the file custom_sovrgpt.json into
~/.config/goose/custom_providers/ (macOS/Linux) or
%APPDATA%\Block\goose\config\custom_providers\ (Windows):
{
"name": "custom_sovrgpt",
"engine": "openai",
"display_name": "SovrGPT",
"api_key_env": "SOVRGPT_API_KEY",
"base_url": "https://sovrgpt.com/api/v1/chat/completions",
"models": [
{ "name": "stackit-qwen3.8-27b", "context_limit": 262144 },
{ "name": "tensorx-kimi-k2.7-code", "context_limit": 131072 }
],
"supports_streaming": true,
"requires_auth": true
}Here base_url is the full address up to /chat/completions. Set the key as the environment
variable SOVRGPT_API_KEY, or enter it for the provider in goose Desktop, which stores it in the
keyring.
Without a provider file, use the built-in OpenAI provider:
OPENAI_HOST=https://sovrgpt.com
OPENAI_BASE_PATH=api/v1/chat/completions
OPENAI_API_KEY=sov_...OPENAI_HOST is the root address only; the path goes into OPENAI_BASE_PATH. A 404 almost
always means something is wrong here. goose does not read the key from config.yaml; it belongs
in the keyring (goose configure) or in the environment variable. goose runs autonomously by
default, see permissions.
Theia
In the settings (settings.json):
{
"ai-features.openAiCustom.customOpenAiModels": [
{
"model": "qwen3.6-35b-a3b",
"url": "https://sovrgpt.com/api/v1",
"id": "sovrgpt-coder",
"apiKey": "sov_...",
"developerMessageSettings": "system"
}
]
}OpenHands
Model openai/qwen3.6-35b-a3b, base URL https://sovrgpt.com/api/v1, API key sov_….
OpenHands needs at least 22,000 tokens of context; all recommended models have at least 131k.
Cursor
Under Settings → Models, Cursor accepts a custom OpenAI base URL. Enter
https://sovrgpt.com/api/v1 and the sov_… key, and add the model ID by hand.
Limitation: tab completion and indexing run over Cursor's own servers, whichever model you pick. Only chat and agent requests reach SovrGPT. Cline, Zed and OpenCode also send chat and agent to the base URL, but open connections of their own as well, see telemetry.
Claude Code and Codex CLI
Neither can be connected today. Claude Code only speaks the Anthropic protocol, and Codex CLI only
the Responses API (wire_api = "responses"). SovrGPT offers the OpenAI-compatible Chat
Completions interface, but neither an Anthropic-compatible route nor /v1/responses.
Roo Code and Continue (no longer maintained)
Neither tool receives updates any more:
- Roo Code was shut down on 15 May 2026, and its repository is archived.
- Continue is "no longer actively maintained" according to its own README, and its repository is read-only.
Use Kilo Code or OpenCode instead. If you come from Roo Code, you will find the same fields in Cline.
Turn telemetry off
Your model requests go to SovrGPT. Several tools also open their own connections to the outside by default:
| Tool | What runs by default | How to turn it off |
|---|---|---|
| Kilo Code | its own telemetry package | VS Code: telemetry.telemetryLevel set to off; command line: KILO_TELEMETRY_LEVEL=off |
| Cline | usage and error events, even with your own API key | VS Code: Settings → General → clear Allow error and usage reporting; command line: "telemetryOptOut": true in ~/.cline/data/settings/global-settings.json |
| Zed | usage data and crash reports; once signed in, predictions as you type (Zeta) over Zed's servers | "telemetry": { "diagnostics": false, "metrics": false } and "edit_predictions": { "provider": "none" } in settings.json |
| OpenCode | sessions can be shared; downloads updates and fetches the model list from models.dev | "share": "disabled" and "autoupdate": false in opencode.json, OPENCODE_DISABLE_MODELS_FETCH=true |
| Forge | every prompt in plain text, the conversation on errors, plus working directory, command-line arguments and user name go to PostHog (USA); also e-mail addresses from Git, SSH keys and, on macOS, the Apple ID | FORGE_TRACKER=false only drops the e-mail addresses; the events themselves cannot be turned off |
| Prime Agent | telemetry | telemetry.enabled = false |
| Cursor | tab completion and indexing over Cursor's own servers | cannot be turned off |
This list is not complete, and the switch names change between versions. If it matters legally, check your installation's network connections as well as its settings.
Set permissions
Several of the tools above write files and run commands without asking, out of the box:
| Tool | Default | Turn on prompts |
|---|---|---|
| goose | runs autonomously (GOOSE_MODE: auto) | GOOSE_MODE: approve in config.yaml |
| Qwen Code | approval mode auto | "tools": { "approvalMode": "default" } in ~/.qwen/settings.json |
| Cline (command line) | executes automatically | --auto-approve false |
| OpenCode | almost every tool set to allow, including writing and commands | configuration below |
| Kilo Code | reading and writing set to allow; commands ask first, except a list such as cat, ls, grep, cp, mv, mkdir, tar | configuration below |
For OpenCode and Kilo Code, put this into the configuration:
{
"permission": {
"*": "ask",
"read": {
"*": "allow",
"*.env": "ask",
"*.env.*": "ask",
"*.env.example": "allow"
},
"grep": "allow",
"glob": "allow"
},
"share": "disabled"
}Reading, searching and listing files go through, except for .env files; everything else asks
first. A plain "read": "allow" would lift the prompt for .env files, because the last matching
rule wins.
In a company, put the same file into the system directory. Users cannot override it there, so the base URL and permissions are enforced.
| System | OpenCode | Kilo Code |
|---|---|---|
| Windows | %ProgramData%\opencode | %ProgramData%\kilo |
| Linux | /etc/opencode/ | /etc/kilo/ |
| macOS | /Library/Application Support/opencode/ | /Library/Application Support/kilo/ |
Thinking effort per request (reasoning_effort)
We accept the OpenAI field reasoning_effort (low | medium | high) at the top level; in the
Python SDK via extra_body. SovrGPT translates it into the parameter the model expects. Whether a
model evaluates it is stated in effort_levels in GET /v1/models. An empty array means we
measured no effective graded control for that model.
| Model | effort_levels | Effect |
|---|---|---|
qwen3.6-35b-a3b | low, medium, high | Thinking budget 128 / 512 / unlimited tokens; high thinks about 14 times as much as low |
stackit-qwen3.8-27b | low, medium, high | measured on a hard task at 316 / 411 / 757 thinking tokens; thinking can also be switched on or off via chat_template_kwargs.enable_thinking |
tensorx-kimi-k2.7-code | (empty) | Always thinks; cannot be switched off |
With high, raise max_tokens too, because the chain of thought counts against the answer
budget. With an unlimited thinking budget and max_tokens 2000, qwen3.6-35b-a3b returned an
empty answer.
Withdrawn model IDs
qwen3-coder-next-fp8 and deepseek-v4-flash no longer exist. A request with either ID ends with
HTTP 404 and the code model_withdrawn (see Chat Completions).
Use qwen3.6-35b-a3b instead; DeepSeek V4 Flash is available without a cold start as
tensorx-deepseek-v4-flash. The role names coder, coding, qwen-coder and qwen3-coder
already point to qwen3.6-35b-a3b.
Code context and memory: prom.codes
Besides the model, what matters is what the agent knows about your repository. prom.codes is a standalone platform from the same house as SovrGPT, hosted in Europe. Over MCP it provides code context (semantic search, symbol graph, references) and a memory in which agents keep facts, decisions and conventions across sessions. Both work on their own as well.
Limits
- No inline completion: there is no FIM endpoint (
fill-in-the-middle), so no "ghost text" in the editor. Chat and agentic work do function. usage.cached_tokensis always 0. That is a gap in the inference software. Tools that derive a cache ratio or cost estimate from it show wrong values there.
We tested the connection (base URL, key, model list), tool calls including streaming, the cold start times and the thinking control. We have not tested a long, multi-step agent run with any of these tools. Problems such as infinite loops, a lost tool result or exhausted context usually appear only from around turn 10. How well an agent works with our models over many steps is therefore still open. For a procurement, we measure your case on request.
Related: Models · API reference · MCP server