OSMEXO LLM Gatewaydocs

Coding agents

Coding agents send a very particular workload: streamed tool calls, tool results fed back as tool messages, files written through tools, and a large context on every turn. OSMEXO speaks the OpenAI wire format, so every agent that takes an OpenAI-compatible base URL works as is. Pick a model that carries the Coding ready badge in the dashboard (filter the list by Coding ready), then set the tool up as below.

Which tools

Measured and working: OpenCode, Cline, Roo Code, Continue, Aider, and Codex in chat mode. Claude Code does not work with OSMEXO: it speaks only the Anthropic Messages protocol, and the same goes for Cursor's Claude integration. Anything else that lets you set an OpenAI-compatible base URL should work; the badge tells you the model side is fine.

Set-up per tool

All of them need the same three things: the base URL __GATEWAY_URL__/v1, your OSMEXO key (sk-llm-…, from API Keys) and a model id such as anthropic/claude-sonnet-5. Key names below are the tools' as of late 2026; check the tool's own docs if a field has moved.

OpenCode

opencode.json in the project (or ~/.config/opencode/opencode.json):

json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "osmexo": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "OSMEXO",
      "options": { "baseURL": "https://api.osmexo.com/v1", "apiKey": "{env:OSMEXO_API_KEY}" },
      "models": { "anthropic/claude-sonnet-5": { "name": "Claude Sonnet 5 via OSMEXO" } }
    }
  },
  "model": "osmexo/anthropic/claude-sonnet-5"
}

Cline and Roo Code

In the extension settings choose the OpenAI Compatible provider, then:

FieldValue
Base URL__GATEWAY_URL__/v1
API keyyour sk-llm-… key
Model IDanthropic/claude-sonnet-5 (any Coding ready id)

Leave "supports streaming" on. For reasoning models (Kimi K3, DeepSeek V4, Gemini Pro) raise the max output tokens if the tool exposes it; see the note on max_tokens below.

Continue

~/.continue/config.yaml:

yaml
models:
  - name: Claude Sonnet 5 via OSMEXO
    provider: openai
    model: anthropic/claude-sonnet-5
    apiBase: https://api.osmexo.com/v1
    apiKey: ${{ secrets.OSMEXO_API_KEY }}
    roles: [chat, edit, apply]

For codebase indexing add an embedding model the same way (roles: [embed], e.g. venice/venice-embed-1).

Aider

Aider reaches OpenAI-compatible endpoints through the openai/ prefix:

bash
export OPENAI_API_BASE=https://api.osmexo.com/v1
export OPENAI_API_KEY=sk-llm-...
aider --model openai/anthropic/claude-sonnet-5

Codex CLI

~/.codex/config.toml, using the chat wire format (OSMEXO's Responses API is a subset; see Responses):

toml
model_provider = "osmexo"
model = "anthropic/claude-sonnet-5"

[model_providers.osmexo]
name = "OSMEXO"
base_url = "https://api.osmexo.com/v1"
env_key = "OSMEXO_API_KEY"
wire_api = "chat"

What "Coding ready" means

Before a model gets the badge, OSMEXO's operators send the agents' workload through the route and judge each step deterministically. The badge is shown only when every required test passed; the model page lists the tests with what happened.

TestRequiredWhat must happen
Streamed tool callyesStreaming on, one function tool: the route streams tool_calls deltas with an id and a name, the arguments assemble to valid JSON, and it finishes with finish_reason: "tool_calls".
Parallel tool callsnoTwo tool calls in one turn when two are asked for. One at a time is slower, not broken.
Tool result round tripyesThe conversation replayed with the assistant tool calls and two tool messages is accepted, and the answer uses the results.
Coding task through toolsyesTold to act only through tools, the model creates prime.py with write_file instead of printing code in chat.
Long context (15k tokens)yesA real source file with one fact hidden in a comment: the route accepts the size and finds the fact.
Cached tokens reportednoThe same long prompt sent twice reports cached prompt tokens on the second call.
JSON schema answernoresponse_format: json_schema with strict: true yields exactly the requested object.

The check judges behaviour on the route, not identity; Verify a Model is the identity check, and you can run that one yourself.

Things to know

  • Caching. Agents resend a large context every turn. Some routes report cached prompt tokens and some do not (the "Cached tokens reported" line on the model page says which). Today cached tokens are billed at the model's input price on every route, so for very long sessions compare the per-token price with the vendor's cached rate before you commit.
  • max_tokens on reasoning models. Kimi K3, DeepSeek V4 and the Gemini Pro models spend part of the output budget thinking before the visible answer or tool call. Give them at least 1,200 output tokens for a tool call and a few thousand for a file; a small budget returns an empty answer. Most agents set this high by default.
  • Streaming. Keep it on. Non-streaming calls must return headers within 60 seconds, which a long file generation can exceed; streamed calls only need to keep sending.
  • One key per tool is enough: budgets, model allow-lists and spend per key are on API Keys, so a runaway agent can only spend what you gave that key.