Ú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.
| Dato | Lo que dice el marketing | Lo 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 README | 28,692, confirmado por API — real, no inflado |
| Edad del proyecto | no se menciona | 5 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.

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.

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:
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:
Y 220+ más, según el propio catálogo del dashboard.
Los que se quedan gratis para siempre, sin tarjeta:
DeepSeek V4, sin tope
Tencent Hy3, gratis siempre
DeepSeek V3.2 / R1
GLM-4.7 / 4.5-Flash
Qwen3-Max, Kimi-K2
50+ modelos, 10K/día
~40 RPM gratis
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:

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.

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.
