Blog / ia

OpenCode + OmniRoute: probé la combinación que promete quitarle el medidor a tu agente de código

OpenCode + OmniRoute: probé la combinación que promete quitarle el medidor a tu agente de código

Últimamente veo la misma historia repetida en video tras video: alguien deja su agente de código de paga — Claude Code, Codex, Cursor, el que sea — por una combinación de dos herramientas open source que, según cuentan, hace lo mismo sin el medidor corriendo. El argumento siempre es parecido: la suscripción te ata a un solo laboratorio de IA, con una ventana de horas que se agota justo a media tarea, y estas dos herramientas gratis te devuelven el control.

Sonaba bien. Sonaba, también, exactamente como el tipo de pitch que no me creo sin abrir el código primero. Así que hice eso: instalé las dos piezas, las conecté de verdad, y leí el código fuente de la que hace el trabajo pesado. Esto es lo que encontré.

Las dos piezas del combo

La promesa se arma con dos herramientas separadas que cumplen roles distintos.

El agente es OpenCode: un asistente de código que vive en tu terminal, lee tu repositorio, edita archivos, corre comandos y revisa el resultado contra lo que esos comandos le devuelven. Nada de esto es exclusivo — es el mismo ciclo de leer/editar/correr/corregir que ya conoces de Claude Code o Codex — pero con una diferencia de fondo: es agnóstico al modelo. Tú decides qué cerebro le pones detrás — Claude, GPT, Gemini, Grok, un modelo local por Ollama — y puedes cambiarlo por proyecto.

Los números sí los verifiqué directo en la API de GitHub, no en el marketing del propio sitio: el repositorio (ahora bajo la organización anomalyco, antes ligada al equipo de SST) tiene 189,391 estrellas reales al momento de escribir esto, 23,956 forks, y lleva desde abril de 2025 con actividad diaria — el último commit es de hoy. Es, de lejos, el agente de código open source con más tracción que existe ahorita.

El gateway es OmniRoute: un router que corre en tu propia máquina y expone un solo endpoint compatible con la API de OpenAI. Detrás de ese endpoint hay más de 280 proveedores de IA distintos, con fallback automático si uno se cae o te deja sin cuota. La idea es que OpenCode (o cualquier otra herramienta) nunca hable directo con OpenAI, Anthropic o quien sea — le habla a OmniRoute, y OmniRoute decide a quién reenviar la petición.

Aquí ya empecé a desconfiar de las cifras de marketing, así que las verifiqué una por una contra el código y el dashboard real, no contra el README.

DatoLo que dice el marketingLo que confirmé
Proveedores totales"290+"282, contados en el dashboard real
Proveedores con capa gratis"90+"121 — más de lo que anuncian, no menos
Estrellas en GitHub"28.7k" en el README28,692, confirmado por API — real, no inflado
Edad del proyectono se menciona5 meses (creado 2026-02-13) — crecimiento muy rápido para su edad
Contribuidores"500+" en la descripción del repo~320 reales, y uno solo (el dueño) tiene 3,608 commits contra 214 del siguiente

En corto: los números de alcance (proveedores, capa gratis, estrellas) son reales, incluso conservadores. El de “comunidad” (500+ contribuidores) está inflado — es en la práctica un proyecto de una persona con colaboradores menores, no un esfuerzo colectivo grande. Vale la pena saberlo antes de tratarlo como un proyecto con gobernanza comunitaria real.

Dashboard de OmniRoute con proveedores reales conectados — DeepSeek, Gemini (Google AI Studio) y NVIDIA NIM — en la topología en vivo

Conecté cuentas reales para probarlo a fondo, no solo el proveedor gratis de la prueba final: DeepSeek, Gemini vía Google AI Studio, y NVIDIA NIM, todas activas al mismo tiempo dentro del mismo panel de Proveedores.

Panel de Proveedores de OmniRoute con DeepSeek, Gemini y NVIDIA NIM conectados y activos, junto a proveedores gratis sin cuenta

Con qué se conecta de verdad

Antes de seguir, vale la pena ver la lista completa — con esto es con lo que en verdad estás jugando cuando conectas tu agente a este router.

33 herramientas de código soportadas de fábrica:

Claude CodeClaude Code
Codex CLICodex CLI
ClineCline
Kilo CodeKilo Code
Roo CodeRoo Code
ContinueContinue
AiderAider
ForgeCodeForgeCode
jcodejcode
DeepSeek TUIDeepSeek TUI
CodeWhaleCodeWhale
OpenCodeOpenCode
Factory DroidFactory Droid
GitHub Copilot CLICopilot CLI
Cursor CLICursor CLI
SmeltSmelt
PiPi
Grok BuildGrok Build
Hermes AgentHermes Agent
OpenClawOpenClaw
GooseGoose
Open InterpreterOpen Interpreter
Warp AIWarp AI
Agent DeckAgent Deck

Y además: Kiro, Command Code, Antigravity, Windsurf, AMP, y cualquier herramienta compatible con la API de OpenAI.

El catálogo de proveedores, agrupado por los laboratorios grandes que reconocerás:

OpenAIOpenAI
AnthropicAnthropic
GeminiGemini
xAI GrokxAI Grok
DeepSeekDeepSeek
MistralMistral
QwenQwen
Meta LlamaMeta Llama
GroqGroq
NVIDIANVIDIA
MiniMaxMiniMax
CohereCohere
PerplexityPerplexity
Hugging FaceHuggingFace
TogetherTogether
FireworksFireworks
CloudflareCloudflare
BaiduBaidu

Y 220+ más, según el propio catálogo del dashboard.

Los que se quedan gratis para siempre, sin tarjeta:

OpenCode ZenOpenCode Zen
DeepSeek V4, sin tope
Kilo CodeKilo Code
Tencent Hy3, gratis siempre
SiliconFlowSiliconFlow
DeepSeek V3.2 / R1
Z.AI GLMZ.AI GLM
GLM-4.7 / 4.5-Flash
Qoder AIQoder AI
Qwen3-Max, Kimi-K2
Cloudflare AICloudflare AI
50+ modelos, 10K/día
NVIDIA NIMNVIDIA NIM
~40 RPM gratis
CerebrasCerebras
1M tokens/día

Y corre en cualquier lado: pnpm add -g omniroute (o npx omniroute@latest si solo quieres probarlo sin instalar nada), Docker (AMD64/ARM64), app de escritorio con Electron, Raspberry Pi, e incluso Android por Termux sin root — el mismo router, corriendo 24/7 en el celular si quieres.

Ahí es donde este esquema deja de ser solo “ahorro” y se vuelve interesante para un entorno más centralizado: al no depender de un costo fijo de facturación atado a un modelo específico, puedes estar trabajando con un modelo este mes y con otro completamente distinto el que sigue, sin tocar tus aplicaciones ni reconfigurar nada — porque todas siempre le hablan a la misma ruta. El endpoint no cambia; lo único que cambia es a quién decide reenviar la petición del otro lado.

Lo que el marketing no cuenta: abrí el código de seguridad

Esta es la parte que ningún video ni ninguna reseña que encontré se molestó en revisar, y es justo la que más me importa en una herramienta que va a tener las llaves de acceso a todos tus proveedores de IA.

Tus API keys se guardan en texto plano por default. El propio código lo admite, comentado así en src/lib/db/encryption.ts:

Field-Level Encryption — AES-256-GCM

If STORAGE_ENCRYPTION_KEY is not set, operates in passthrough mode
(stores plaintext for development convenience).

Y no es que el marketing lo insinúe nada más — lo dice explícito. Su propio diagrama de “Privado y Local-First” en el README enumera, como una de sus garantías: “credentials encrypted at rest (AES-256-GCM)”, sin ningún matiz. El código de al lado dice lo contrario: viene sin cifrar hasta que tú configures la variable. Si no lo haces, cualquier cosa con acceso a tu carpeta de datos local puede leer tus credenciales de OpenAI, Anthropic o lo que hayas conectado, sin cifrar.

Los guardrails contra inyección de prompts fallan abiertos. Literal, el propio log lo dice cuando algo truena: "${guardrail.name} pre-call failed open". Si un guardrail se cae, la petición sigue pasando en vez de bloquearse. El escáner de inyección además solo revisa los primeros 16KB de cada mensaje y, por default, solo “advierte” — no bloquea nada.

Hay un proxy propio a la nube, activado por default. Buscando en el código encontré esto en src/lib/db/settings.ts:

const settings: Record<string, unknown> = {
  cloudEnabled: true,
  ...

cloudEnabled: true es el valor por default de cualquier instalación nueva, salvo que lo apagues a mano desde Configuración → Endpoints. Para una herramienta que se vende como “100% local, sin telemetría”, encontrar un relay propio a servidores de OmniRoute encendido de fábrica fue la sorpresa más grande de toda esta investigación. Se apaga con un clic, pero tienes que saber que existe primero:

Panel de Endpoints de OmniRoute mostrando “OmniRuta en la nube: Deshabilitado — No configurado” después de apagarlo a mano

El password del dashboard por default es CHANGEME, literal. Si no configuras INITIAL_PASSWORD antes de arrancar, así se llama tu contraseña — y el propio arranque te lo advierte en la consola, pero solo ahí, no en ningún otro lado.

Hay un patrocinio pagado con enlaces de afiliado metidos en el producto. Kimi (Moonshot AI) es “official sponsor” de OmniRoute — hay un banner en el dashboard y links con ?aff=omniroute incrustados en la lista de proveedores. Está declarado en el commit ("+ disclosure") y tiene fecha de caducidad programada en el propio código, así que no es un engaño escondido — pero si vas a recomendar esta herramienta como “neutral”, vale la pena saber que no lo es del todo.

Nada de esto es descalificante por sí solo. Pero si vas a poner tus credenciales de pago detrás de este router, cifra tus credenciales a mano, cambia el password, y decide tú si quieres el proxy a la nube prendido — no asumas que el default ya te cuida.

La prueba real: lo conecté de verdad

Todo lo anterior es auditoría de código. Para no quedarme solo con eso, armé el flujo completo con las dos herramientas reales, sin atajos.

Prendí OmniRoute local, conecté uno de sus proveedores sin necesidad de cuenta ni tarjeta (OpenCode Free, uno de esos 121 con capa gratis), generé la API key local desde el Gestor de API, y apunté el CLI real de opencode (v1.18.4) a ese endpoint local con su config estándar. Nada simulado.

Gestor de API de OmniRoute con la clave local generada, usada para conectar el CLI de opencode

opencode run --model omniroute/oc/big-pickle "Responde en una sola linea: 2+2 y el nombre de tu modelo"

Respuesta real, de vuelta por la terminal:

4, mi modelo es oc/big-pickle

Y en los logs del propio OmniRoute quedó el registro exacto de esa petición — proveedor opencode, protocolo openai-chat, status 200, con el conteo real de tokens de entrada y salida. No es una demo de marketing: es el flujo completo, agente en terminal → gateway local → proveedor gratis → respuesta, funcionando de punta a punta en cuestión de minutos.

El balance

La idea de fondo detrás de este combo no es “Claude Code perdió” ni “Codex es peor” — es que, por primera vez, el agente que usas todos los días y el modelo que lo alimenta son dos decisiones separadas. Antes venían pegadas: te suscribes a Claude Code y usas modelos de Anthropic, o a Codex y usas los de OpenAI, o a Cursor y lo que Cursor te deje. Con OpenCode + un gateway como OmniRoute de por medio, el agente deja de estar casado con un solo laboratorio ni con una sola ventana de facturación.

Para el trabajo del día a día — leer código, hacer cambios chicos, correr pruebas, iterar — la capa gratis alcanza de sobra, y no hay ventana de horas que se agote a media tarea. Para el problema realmente difícil donde de verdad quieres el modelo más capaz que existe, sigues pudiendo rentarlo por esa tarea puntual, sea cual sea tu agente de código de cabecera.

Lo que sí cambia es quién carga con el mantenimiento. Un agente de código de paga simplemente funciona en cuanto lo instalas. Aquí eres tú quien conecta las piezas, decide qué proveedores usar, y — si te importa la seguridad de tus credenciales tanto como a mí — quien tiene que entrar al código o a la configuración para apagar lo que viene prendido por default y no debería estarlo. Es gratis, pero no es “gratis y ya” — es gratis con tarea de casa incluida.

Con cuentas reales conectadas (no solo la de prueba), así se ve el día a día: cuota y costo por proveedor, en vivo.

Panel de Provider Quota de OmniRoute mostrando uso real por proveedor — tokens restantes y costo en dólares

Anterior Herdr: probé el multiplexor de terminal hecho para agentes…