AI-агенты для программирования и harness
Направьте Claude Code, Codex CLI, OpenClaw, Cline, Cursor и ещё 25+ агентов для программирования на шлюз одинаковыми тремя шагами — с точной целью конфигурации и именами ключей для каждого.
Каждый AI-агент для программирования читает базовый URL и API-ключ откуда-то — из переменной окружения, файла конфигурации или панели настроек. На этой странице перечислено, откуда каждый harness берёт их, на каком протоколе он говорит и какой один подводный камень действительно сбивает людей с толку. Полные готовые конфигурации для копирования — в документации.
Направьте base_url на шлюз
По умолчанию https://your-gateway.gatellm.io — наличие /v1 зависит от SDK (в каждом примере указано точное значение).
Подставьте ключ доступа к шлюзу
Это не upstream-ключ sk-… — один и тот же ключ доступа подставляется в тот заголовок, который ожидает ваш SDK.
Используйте имя модели шлюза
То, которое вы задали в консоли, — а не официальное имя производителя.
Authorization: Bearer <key>x-api-key: <key>x-goog-api-key: <key>Матрица совместимости harness
| Harness | Протокол | Поддержка | Цель конфигурации | Имена ключей / настройки | Документация |
|---|---|---|---|---|---|
| Терминальные агенты | |||||
| Claude Code | Anthropic | Нативно | env vars | ANTHROPIC_BASE_URL, ANTHROPIC_API_KEY, ANTHROPIC_MODEL | Конфигурация на GitHub ↗ · Документация |
| Codex CLI | OpenAI Responses | Нативно | ~/.codex/config.toml | base_url, env_key, wire_api | Конфигурация на GitHub ↗ · Документация |
| Gemini CLI | Gemini | Нативно | env vars | GOOGLE_GEMINI_BASE_URL, GEMINI_API_KEY | Конфигурация на GitHub ↗ · Документация |
| OpenClaw | OpenAI / Anthropic-compatible | OpenAI-compatible | openclaw.json | models.providers.<id>.baseUrl, models.providers.<id>.apiKey | Документация |
| opencode | OpenAI-compatible | OpenAI-compatible | opencode.json | provider.<id>.options.baseURL | Документация |
| Crush | OpenAI / Anthropic-compatible | OpenAI-compatible | crush.json | providers.<id>.base_url, providers.<id>.type | Документация |
| Factory Droid | OpenAI / Anthropic-compatible | OpenAI-compatible | ~/.factory/settings.json | customModels[].baseUrl, customModels[].provider | Документация |
| Goose | OpenAI-compatible | OpenAI-compatible | env vars | OPENAI_HOST, OPENAI_BASE_PATH, OPENAI_API_KEY | Документация |
| Aider | OpenAI-compatible (LiteLLM) | OpenAI-compatible | env vars | OPENAI_API_BASE | Документация |
| Qwen Code | OpenAI-compatible | OpenAI-compatible | env vars | OPENAI_BASE_URL, OPENAI_API_KEY, OPENAI_MODEL | Документация |
| OpenHands | OpenAI-compatible (LiteLLM) | OpenAI-compatible | ~/.openhands/settings.json | base_url, model openai/ prefix | Документация |
| Kimi Code CLI | OpenAI / Anthropic | OpenAI-compatible | config.toml | providers | Документация |
| Plandex | OpenAI-compatible | OpenAI-compatible | custom models JSON | baseUrl | Документация |
| SWE-agent | OpenAI-compatible (LiteLLM) | OpenAI-compatible | env vars | OPENAI_BASE_URL | Документация |
| Grok Build | OpenAI-compatible | OpenAI-compatible | config.toml | custom models | Документация |
| Mistral Vibe | OpenAI-compatible | OpenAI-compatible | ~/.vibe/config.toml | providers | Документация |
| MiMo Code | OpenAI-compatible | OpenAI-compatible | /connect custom provider | base URL, API key | Документация |
| ForgeCode | OpenAI / Anthropic | OpenAI-compatible | setup wizard | base URL | Документация |
| Codebuff | OpenAI-compatible | OpenAI-compatible | settings | base URL, API key | Документация |
| IDE и расширения | |||||
| Cline | OpenAI-compatible | OpenAI-compatible | Settings → OpenAI Compatible | Base URL, API Key, Model ID | Документация |
| Roo Code | OpenAI-compatible | OpenAI-compatible | Settings → OpenAI Compatible | Base URL, API Key, Model ID | Документация |
| Kilo Code | OpenAI-compatible | OpenAI-compatible | Settings → OpenAI Compatible | Base URL, API Key, Model ID | Документация |
| Continue | OpenAI-compatible | OpenAI-compatible | config.yaml | models[].apiBase | Документация |
| Zed | OpenAI-compatible | OpenAI-compatible | settings.json | language_models.openai_compatible.<id>.api_url | Документация |
| Cursor | OpenAI | Частично | Settings → Models → Override OpenAI Base URL | Override OpenAI Base URL | Документация |
| Windsurf | OpenAI-compatible | OpenAI-compatible | Settings → Models → BYOK / custom | Base URL, API Key | Документация |
| GitHub Copilot (BYOK) | OpenAI-compatible | OpenAI-compatible | Manage Models → OpenAI-compatible | Base URL, API Key | Документация |
| Управляемые платформы | |||||
| Warp | OpenAI / Anthropic / Gemini (BYOK) | Частично | Settings → BYOK | BYOK API keys | Документация |
| Amazon Q Developer CLI | MCP | Без пользовательского endpoint | MCP server | — | Документация |
| Devin | — | Без пользовательского endpoint | — | — | Документация |
Как назвать модель шлюза
Некоторые harness фиксируют собственный ID модели и отправляют его дословно. Если ваша модель в шлюзе называется иначе, первый вызов вернёт 404. Два способа согласовать:
Назовите модель шлюза точно так, как её запрашивает harness, — без дополнительной конфигурации.
Или переопределите harness, чтобы он использовал имя вашей модели в шлюзе, через переменную окружения модели (например, ANTHROPIC_MODEL).
Подводные камни
Claude Code отправляет настроенное по умолчанию значение (например, claude-opus-5 или claude-sonnet-5), а не имя в вашем шлюзе. Либо назовите модель шлюза точно так, как её запрашивает harness, либо задайте его переменную окружения модели (например, ANTHROPIC_MODEL) равной имени в шлюзе. Несовпадение → 404 model_not_found на первом сообщении.
Базовый URL для клиентов в стиле Anthropic указывает на корень шлюза (без /v1) — клиент сам добавляет /v1/messages. Если добавить /v1, сегмент пути удвоится.
Codex CLI требует wire_api = "responses" для блока [model_providers.*]. Шлюз нативно реализует /v1/responses — направьте на него base_url и задайте env_key с ключом доступа к шлюзу.
Aider, OpenHands и SWE-agent работают через LiteLLM: задайте OPENAI_API_BASE равным шлюзу и добавьте модели префикс openai/ (например, openai/gateway-model-name), чтобы LiteLLM маршрутизировал её как OpenAI-compatible endpoint.
Codex, Gemini CLI и Qwen Code по умолчанию используют OAuth / вход по подписке производителя. Чтобы направить трафик через шлюз, нужно переключиться на аутентификацию по API-ключу (явно задать ключ и базовый URL) — иначе агент полностью обходит шлюз.
Cline / Roo / Kilo и другие определяют поддержку вызова инструментов и работы с изображениями по имени модели. Пользовательское имя шлюза может отключить вызов функций — если вызовы инструментов не работают, проверьте правила определения возможностей клиента или назовите модель так, чтобы она совпадала с известным семейством.
Во время долгого инференса upstream шлюз выдаёт строки-комментарии SSE :keep-alive (безвредны — пропускайте строки, начинающиеся с :), а при разрыве посреди потока вставляет поле _gateway_warning вместо ошибки, чтобы такие harness, как Claude Code, не прерывали весь диалог.
В автоматическом режиме Claude Code ожидает вердикт со стороны сервера (поле safeguards в запросе) перед потенциально опасным действием. Если upstream — официальный Anthropic, вердикт формируется внутри того же запроса, и шлюз передаёт его без изменений. Если upstream — третья сторона, которая игнорирует это поле, вердикт выносит шлюз — и заводская настройка по умолчанию (allow_all) разрешает любое действие, что мягче, чем не вмешиваться вовсе. Верните маршрут upstream, записав "anthropic_server_safeguards": "upstream" в extra_config этого upstream; настройка в консоли доступна только администраторам.
# Every agent is one base_url + one access key away
export ANTHROPIC_BASE_URL="https://your-gateway.gatellm.io" # Anthropic agents: root (no /v1)
export ANTHROPIC_API_KEY="<gateway access key>"
export OPENAI_API_BASE="https://your-gateway.gatellm.io/v1" # OpenAI-compatible agents: /v1
export OPENAI_API_KEY="<gateway access key>"
# Codex CLI (~/.codex/config.toml) speaks the Responses protocol
# [model_providers.gatellm]
# base_url = "https://your-gateway.gatellm.io/v1"
# wire_api = "responses"