Configure your coding agent.
Five terminal coding agents and 2 live models. Copy the configuration for your client and model, then add your key.
qwen/qwen3.8-27b ornith-ai/ornith-1.5-35b-a3b Get a key at the console.
Claude Code
paste in your shell Qwen3.8 27B qwen/qwen3.8-27b
export ANTHROPIC_BASE_URL=https://api.tiyuvta.ai
export ANTHROPIC_AUTH_TOKEN=YOUR_KEY
export ANTHROPIC_MODEL=qwen/qwen3.8-27b
export ANTHROPIC_SMALL_FAST_MODEL=qwen/qwen3.8-27b
export CLAUDE_CODE_MAX_CONTEXT_TOKENS=262144
claude Ornith-1.5 35B-A3B ornith-ai/ornith-1.5-35b-a3b
export ANTHROPIC_BASE_URL=https://api.tiyuvta.ai
export ANTHROPIC_AUTH_TOKEN=YOUR_KEY
export ANTHROPIC_MODEL=ornith-ai/ornith-1.5-35b-a3b
export ANTHROPIC_SMALL_FAST_MODEL=ornith-ai/ornith-1.5-35b-a3b
export CLAUDE_CODE_MAX_CONTEXT_TOKENS=262144
claude Recorded check on Qwen3.8 27B: read a file and wrote a new one, first try. Prints one unrecognized_model line at startup, then works. It is Claude Code labelling an id it does not ship metadata for, not an error from the gateway.
Codex CLI
~/.codex/config.toml Qwen3.8 27B qwen/qwen3.8-27b
model_provider = "tiyuvta"
model = "qwen/qwen3.8-27b"
[model_providers.tiyuvta]
name = "tiyuvta"
base_url = "https://api.tiyuvta.ai/v1"
env_key = "TIYUVTA_API_KEY"
wire_api = "responses" Ornith-1.5 35B-A3B ornith-ai/ornith-1.5-35b-a3b
model_provider = "tiyuvta"
model = "ornith-ai/ornith-1.5-35b-a3b"
[model_providers.tiyuvta]
name = "tiyuvta"
base_url = "https://api.tiyuvta.ai/v1"
env_key = "TIYUVTA_API_KEY"
wire_api = "responses" Recorded check on Qwen3.8 27B: read a file and wrote a new one, first try. Warns once that it has no metadata for this model id, then runs the Responses route normally. Export TIYUVTA_API_KEY in the same shell.
opencode
~/.config/opencode/opencode.json Qwen3.8 27B qwen/qwen3.8-27b
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"tiyuvta": {
"npm": "@ai-sdk/openai-compatible",
"name": "tiyuvta",
"options": {
"baseURL": "https://api.tiyuvta.ai/v1",
"apiKey": "{env:TIYUVTA_API_KEY}"
},
"models": {
"qwen/qwen3.8-27b": { "name": "Qwen3.8 27B" }
}
}
}
} Ornith-1.5 35B-A3B ornith-ai/ornith-1.5-35b-a3b
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"tiyuvta": {
"npm": "@ai-sdk/openai-compatible",
"name": "tiyuvta",
"options": {
"baseURL": "https://api.tiyuvta.ai/v1",
"apiKey": "{env:TIYUVTA_API_KEY}"
},
"models": {
"ornith-ai/ornith-1.5-35b-a3b": { "name": "Ornith-1.5 35B-A3B" }
}
}
}
} Recorded check on Qwen3.8 27B: read a file and wrote a new one, first try. Select the model as tiyuvta/qwen/qwen3.8-27b. No startup warning; the provider name in the config is the prefix you type.
Hermes
~/.hermes/config.yaml Qwen3.8 27B qwen/qwen3.8-27b
provider: tiyuvta
model: qwen/qwen3.8-27b
custom_providers:
- name: tiyuvta
base_url: https://api.tiyuvta.ai/v1
api_mode: openai_chat
key_env: TIYUVTA_API_KEY
models:
- qwen/qwen3.8-27b
context_length: 262144 Ornith-1.5 35B-A3B ornith-ai/ornith-1.5-35b-a3b
provider: tiyuvta
model: ornith-ai/ornith-1.5-35b-a3b
custom_providers:
- name: tiyuvta
base_url: https://api.tiyuvta.ai/v1
api_mode: openai_chat
key_env: TIYUVTA_API_KEY
models:
- ornith-ai/ornith-1.5-35b-a3b
context_length: 262144 Recorded check on Qwen3.8 27B: read a file and wrote a new one, then verified the copy byte for byte. Export TIYUVTA_API_KEY in the same shell. key_env names the variable rather than holding the key, so the config itself stays safe to commit.
Pi
~/.pi/agent/models.json Qwen3.8 27B qwen/qwen3.8-27b
{
"providers": {
"tiyuvta": {
"baseUrl": "https://api.tiyuvta.ai/v1",
"api": "openai-completions",
"apiKey": "$TIYUVTA_API_KEY",
"models": [
{
"id": "qwen/qwen3.8-27b",
"name": "Qwen3.8 27B",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 262144,
"maxTokens": 32768,
"cost": {
"input": 0.40,
"output": 2.03,
"cacheRead": 0.10,
"cacheWrite": 0
}
}
]
}
}
} Ornith-1.5 35B-A3B ornith-ai/ornith-1.5-35b-a3b
{
"providers": {
"tiyuvta": {
"baseUrl": "https://api.tiyuvta.ai/v1",
"api": "openai-completions",
"apiKey": "$TIYUVTA_API_KEY",
"models": [
{
"id": "ornith-ai/ornith-1.5-35b-a3b",
"name": "Ornith-1.5 35B-A3B",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 262144,
"maxTokens": 32768,
"cost": {
"input": 0.25,
"output": 1.20,
"cacheRead": 0.09,
"cacheWrite": 0
}
}
]
}
}
} Recorded check on Qwen3.8 27B: read a file and wrote a new one, first try. Run it as pi --provider tiyuvta --model qwen/qwen3.8-27b. The cost block is what makes Pi report spend correctly, so it is worth keeping accurate.
If the first request fails
common causes- A
400naming a model. The id must match one of the live model ids shown above. Clients that keep other providers switched on may send their ids here too, and an id this gateway does not serve is refused rather than guessed at. Check the live list atGET /v1/models. - A
401. The key is read from the environment in every block above. Export it in the same shell that starts the agent, not in a different tab. - An empty reply. The model thinks before it answers, so a small
max_tokenscan be spent entirely on reasoning with nothing left for the answer. Raise the output ceiling, or sendreasoning_effort: "none"when you want the answer only.
Each client protocol was run end to end against Qwen3.8 27B on 21 Aug 2026, using a read-file then write-file tool loop. Configurations for other live models use the same protocol path with model ids and prices generated from the current roster. Editor clients such as Cursor and Cline, plus the protocol coverage table, are on integrations. Endpoint details are in the API docs.