---
summary: "Use Kilo Gateway's unified API to access many models in OpenClaw"
title: "Kilo Gateway"
read_when:
- You want a single API key for many LLMs
- You want to run models via Kilo Gateway in OpenClaw
---
Kilo Gateway routes requests to many models behind a single OpenAI-compatible endpoint and API key.
| Property | Value |
| -------- | ---------------------------------- |
| Provider | `kilocode` |
| Auth | `KILOCODE_API_KEY` |
| API | OpenAI-compatible |
| Base URL | `https://api.kilo.ai/api/gateway/` |
## Install plugin
```bash
openclaw plugins install @openclaw/kilocode-provider
openclaw gateway restart
```
## Setup
Go to [app.kilo.ai](https://app.kilo.ai), sign in or create an account, then generate an API key.
```bash
openclaw onboard --auth-choice kilocode-api-key
```
Or set the environment variable directly:
```bash
export KILOCODE_API_KEY="" # pragma: allowlist secret
```
```bash
openclaw models list --provider kilocode
```
## Default model and catalog
The default model is `kilocode/kilo/auto`, a provider-owned smart-routing model. OpenClaw does not
publish a task-to-upstream-model mapping for it; routing behind `kilo/auto` is owned by Kilo Gateway.
At startup OpenClaw queries `GET https://api.kilo.ai/api/gateway/models` and merges discovered models
ahead of a static fallback catalog. The static fallback contains only `kilocode/kilo/auto` (`Kilo Auto`,
`input: ["text", "image"]`, `reasoning: true`, `contextWindow: 1000000`, `maxTokens: 128000`).
Any model on the gateway is addressable as `kilocode/` (for example
`kilocode/anthropic/claude-sonnet-4`, `kilocode/openai/gpt-5.5`). Run `/models kilocode` or
`openclaw models list --provider kilocode` to see the full discovered list.
## Config example
```json5
{
env: { KILOCODE_API_KEY: "" }, // pragma: allowlist secret
agents: {
defaults: {
model: { primary: "kilocode/kilo/auto" },
},
},
}
```
## Behavior notes
Kilo Gateway is OpenRouter-compatible, so it uses the proxy-style OpenAI-compatible request
path rather than native OpenAI request shaping (no `store`, no OpenAI reasoning-effort payload).
- Gemini-backed Kilo refs stay on the proxy-Gemini path: OpenClaw sanitizes Gemini thought
signatures there but does not enable native Gemini replay validation or bootstrap rewrites.
- Requests use a Bearer token built from your API key.
The Kilo stream wrapper adds an `X-KILOCODE-FEATURE` request header (default `openclaw`,
override with the `KILOCODE_FEATURE` env var) and normalizes reasoning-effort payloads for
models that support it.
`kilocode/kilo/auto` and `x-ai/*` refs skip reasoning-effort injection. Use a concrete model
ref such as `kilocode/anthropic/claude-sonnet-4` if you need reasoning support.
- If model discovery fails at startup, OpenClaw falls back to the static catalog containing `kilocode/kilo/auto`.
- Confirm your API key is valid and that your Kilo account has the desired models enabled.
- When Gateway runs as a daemon, ensure `KILOCODE_API_KEY` is available to that process (for example in `~/.openclaw/.env` or via `env.shellEnv`).
## Related
Choosing providers, model refs, and failover behavior.
Full OpenClaw configuration reference.
Kilo Gateway dashboard, API keys, and account management.