Agentes de programación con IA y harness

Apunte Claude Code, Codex CLI, OpenClaw, Cline, Cursor y más de 25 agentes de programación al gateway con los mismos tres pasos, cada uno con su destino de configuración exacto y los nombres de sus claves.

Todos los agentes de programación con IA leen una URL base y una clave de API de algún sitio: una variable de entorno, un archivo de configuración o un panel de ajustes. Esta página indica de dónde lee cada harness, qué protocolo habla y la particularidad que realmente hace tropezar a la gente. Las configuraciones completas listas para copiar están en la documentación.

1

Apunte base_url al gateway

Por defecto https://your-gateway.gatellm.io; que incluya /v1 depende del SDK (cada ejemplo indica el valor exacto).

2

Cambie a una clave de acceso del gateway

No es una clave upstream sk-…; la misma clave de acceso se monta en la cabecera que espere su SDK.

3

Use el nombre del modelo del gateway

El que haya configurado en la consola, no el nombre oficial del proveedor.

Authorization: Bearer <key>
OpenAI · DashScope · genérico
El prefijo Bearer no distingue mayúsculas de minúsculas
x-api-key: <key>
SDK de Anthropic
También se acepta Authorization
x-goog-api-key: <key>
SDK de Gemini
También se acepta Authorization

Matriz de compatibilidad de harness

HarnessProtocoloSoporteDestino de configuraciónNombres de claves / ajustesDocumentación
Agentes de terminal
Claude CodeAnthropicNativoenv varsANTHROPIC_BASE_URL, ANTHROPIC_API_KEY, ANTHROPIC_MODELConfiguración en GitHub ↗ · Documentación
Codex CLIOpenAI ResponsesNativo~/.codex/config.tomlbase_url, env_key, wire_apiConfiguración en GitHub ↗ · Documentación
Gemini CLIGeminiNativoenv varsGOOGLE_GEMINI_BASE_URL, GEMINI_API_KEYConfiguración en GitHub ↗ · Documentación
OpenClawOpenAI / Anthropic-compatibleCompatible con OpenAIopenclaw.jsonmodels.providers.<id>.baseUrl, models.providers.<id>.apiKeyDocumentación
opencodeOpenAI-compatibleCompatible con OpenAIopencode.jsonprovider.<id>.options.baseURLDocumentación
CrushOpenAI / Anthropic-compatibleCompatible con OpenAIcrush.jsonproviders.<id>.base_url, providers.<id>.typeDocumentación
Factory DroidOpenAI / Anthropic-compatibleCompatible con OpenAI~/.factory/settings.jsoncustomModels[].baseUrl, customModels[].providerDocumentación
GooseOpenAI-compatibleCompatible con OpenAIenv varsOPENAI_HOST, OPENAI_BASE_PATH, OPENAI_API_KEYDocumentación
AiderOpenAI-compatible (LiteLLM)Compatible con OpenAIenv varsOPENAI_API_BASEDocumentación
Qwen CodeOpenAI-compatibleCompatible con OpenAIenv varsOPENAI_BASE_URL, OPENAI_API_KEY, OPENAI_MODELDocumentación
OpenHandsOpenAI-compatible (LiteLLM)Compatible con OpenAI~/.openhands/settings.jsonbase_url, model openai/ prefixDocumentación
Kimi Code CLIOpenAI / AnthropicCompatible con OpenAIconfig.tomlprovidersDocumentación
PlandexOpenAI-compatibleCompatible con OpenAIcustom models JSONbaseUrlDocumentación
SWE-agentOpenAI-compatible (LiteLLM)Compatible con OpenAIenv varsOPENAI_BASE_URLDocumentación
Grok BuildOpenAI-compatibleCompatible con OpenAIconfig.tomlcustom modelsDocumentación
Mistral VibeOpenAI-compatibleCompatible con OpenAI~/.vibe/config.tomlprovidersDocumentación
MiMo CodeOpenAI-compatibleCompatible con OpenAI/connect custom providerbase URL, API keyDocumentación
ForgeCodeOpenAI / AnthropicCompatible con OpenAIsetup wizardbase URLDocumentación
CodebuffOpenAI-compatibleCompatible con OpenAIsettingsbase URL, API keyDocumentación
IDE y extensiones
ClineOpenAI-compatibleCompatible con OpenAISettings → OpenAI CompatibleBase URL, API Key, Model IDDocumentación
Roo CodeOpenAI-compatibleCompatible con OpenAISettings → OpenAI CompatibleBase URL, API Key, Model IDDocumentación
Kilo CodeOpenAI-compatibleCompatible con OpenAISettings → OpenAI CompatibleBase URL, API Key, Model IDDocumentación
ContinueOpenAI-compatibleCompatible con OpenAIconfig.yamlmodels[].apiBaseDocumentación
ZedOpenAI-compatibleCompatible con OpenAIsettings.jsonlanguage_models.openai_compatible.<id>.api_urlDocumentación
CursorOpenAIParcialSettings → Models → Override OpenAI Base URLOverride OpenAI Base URLDocumentación
WindsurfOpenAI-compatibleCompatible con OpenAISettings → Models → BYOK / customBase URL, API KeyDocumentación
GitHub Copilot (BYOK)OpenAI-compatibleCompatible con OpenAIManage Models → OpenAI-compatibleBase URL, API KeyDocumentación
Plataformas gestionadas
WarpOpenAI / Anthropic / Gemini (BYOK)ParcialSettings → BYOKBYOK API keysDocumentación
Amazon Q Developer CLIMCPSin endpoint personalizadoMCP server—Documentación
Devin—Sin endpoint personalizado——Documentación

Cómo nombrar el modelo del gateway

Algunos harness fijan su propio ID de modelo y lo envían tal cual. Si su modelo del gateway tiene otro nombre, la primera llamada devuelve 404. Dos formas de alinearlos:

Claude Code
①

Asigne al modelo del gateway exactamente el nombre que solicita el harness: sin configuración adicional.

②

O modifique el harness para que use el nombre de su gateway mediante su variable de entorno de modelo (por ejemplo, ANTHROPIC_MODEL).

Particularidades

El harness fija su propio ID de modelo

Claude Code envía el valor predeterminado que tenga configurado (por ejemplo, claude-opus-5 o claude-sonnet-5), no el nombre de su gateway. O asigne al modelo del gateway exactamente el nombre que solicita el harness, o configure la variable de entorno del modelo del harness (por ejemplo, ANTHROPIC_MODEL) con el nombre de su gateway. Una discrepancia produce 404 model_not_found en el primer mensaje.

Los harness de protocolo Anthropic usan la raíz, no /v1

La URL base para clientes de estilo Anthropic apunta a la raíz del gateway (sin /v1); el cliente añade /v1/messages por su cuenta. Añadir /v1 aquí duplica el segmento de ruta.

Los proveedores personalizados de Codex requieren wire_api="responses"

Codex CLI exige wire_api = "responses" para un bloque personalizado [model_providers.*]. El gateway implementa /v1/responses de forma nativa: apunte allí base_url y asigne env_key a una clave de acceso del gateway.

Los harness basados en LiteLLM quieren el prefijo openai/ en el modelo

Aider, OpenHands y SWE-agent se apoyan en LiteLLM: configure OPENAI_API_BASE con el gateway y dé al modelo un prefijo openai/ (por ejemplo, openai/nombre-del-modelo-del-gateway) para que LiteLLM lo enrute como un endpoint compatible con OpenAI.

De forma predeterminada usan OAuth de suscripción, no su clave

Codex, Gemini CLI y Qwen Code usan por defecto el inicio de sesión OAuth o de suscripción del proveedor. Para pasar por el gateway debe cambiar a autenticación con clave de API (configurar la clave y la URL base explícitamente); de lo contrario, el agente omite el gateway por completo.

Los IDE deducen el soporte de herramientas y visión del ID del modelo

Cline / Roo / Kilo y otros deciden la capacidad de llamada a herramientas y de visión a partir del nombre del modelo. Un nombre personalizado del gateway puede desactivar el function calling; si fallan las llamadas a herramientas, revise las reglas de detección de capacidades del cliente o asigne al modelo un nombre que coincida con una familia conocida.

La inferencia larga añade :keep-alive y _gateway_warning

Durante una inferencia upstream larga, el gateway emite líneas de comentario SSE :keep-alive (inofensivas: omita las líneas que empiezan por :) y, si la transmisión se corta a mitad, inserta un campo _gateway_warning en lugar de devolver un error, para que harness como Claude Code no aborten toda la conversación.

Modo automático de Claude Code: decida quién responde al veredicto de seguridad

En modo automático, Claude Code espera un veredicto del lado del servidor (un campo safeguards en la solicitud) antes de una acción potencialmente peligrosa. Cuando el upstream es Anthropic oficial, el veredicto se produce dentro de esa misma solicitud y el gateway lo deja pasar sin tocarlo. Cuando el upstream es un tercero que ignora el campo, el gateway responde en su lugar, y el valor predeterminado de fábrica (allow_all) libera todas las acciones, lo cual es más permisivo que no intervenir en la llamada. Devuelva una ruta a su upstream escribiendo "anthropic_server_safeguards": "upstream" en el extra_config de ese upstream; la opción de la consola es solo para administradores.

# 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"

Preguntas frecuentes