Saltar al contenido

Recursos · 01/09/2026

FreeRouter: enruta cada tarea al modelo adecuado y úsalo con OpenCode y Orca

FreeRouter es un router de modelos autoalojado y compatible con OpenAI. Clasifica cada petición, elige el modelo adecuado y puede servir como gateway para OpenCode, Orca y otras herramientas.

—
title: «FreeRouter: enruta cada tarea al modelo adecuado y úsalo con OpenCode y Orca»
slug: «freerouter-router-modelos-ia-open-code-orca»
status: draft
date: 2026-09-01
family: «Herramientas y recursos»
category: «Recursos»
tags:
– «FreeRouter»
– «OpenCode»
– «Orca»
– «Agentes de IA»
– «Optimización de costes»
excerpt: «FreeRouter es un router de modelos autoalojado y compatible con OpenAI. Clasifica cada petición, elige el modelo adecuado y puede servir como gateway para OpenCode, Orca y otras herramientas.»
seo_title: «FreeRouter con OpenCode y Orca: guía de uso y aplicaciones»
meta_description: «Qué es FreeRouter, cómo instalarlo y configurarlo, dónde aplicarlo y cómo conectarlo con OpenCode y Orca mediante su API compatible con OpenAI.»
canonical_url: «https://github.com/openfreerouter/freerouter»
—

Elegir un modelo distinto para cada petición suele acabar de la misma manera: o usamos el modelo caro para todo, o cambiamos de proveedor a mano y perdemos tiempo. **FreeRouter** propone una tercera vía: un router de modelos autoalojado que recibe las peticiones de una aplicación, estima su dificultad y las envía al modelo más adecuado.

El proyecto es una alternativa ligera a servicios como OpenRouter. Se ejecuta en local, utiliza tus propias claves de Anthropic, OpenAI, Kimi u otros proveedores y no añade una comisión por token. Su servidor expone una API compatible con OpenAI, así que no hace falta modificar la mayoría de clientes que ya hablan con `/v1/chat/completions`.

## Qué hace FreeRouter

El flujo es sencillo:

«`text
Aplicación → FreeRouter (localhost:18800) → clasificador → modelo elegido
├─ SIMPLE → modelo económico
├─ MEDIUM → modelo equilibrado
├─ COMPLEX → modelo potente
└─ REASONING → modelo de máximo razonamiento
«`

El clasificador puntúa cada mensaje en 14 dimensiones: longitud, vocabulario técnico, sintaxis, ambigüedad, dependencia del contexto, profundidad de razonamiento, creatividad, multimodalidad, complejidad de instrucciones, actualidad del conocimiento, dificultad del código y complejidad matemática, entre otras. También tiene en cuenta los tres mensajes anteriores.

La decisión no es irreversible. Se puede forzar un nivel escribiendo `/simple`, `/max`, `[complex]` o `deep mode:` al principio de la petición; FreeRouter elimina ese prefijo antes de reenviar el texto al proveedor.

Además del enrutado, incluye timeouts por nivel, reintento con un modelo de respaldo, traducción bidireccional entre formatos Anthropic y OpenAI, estadísticas y recarga de configuración sin reiniciar el proceso. El repositorio publica una suite de 75 pruebas para proxy, streaming, herramientas, concurrencia y overrides.

## Instalación rápida

FreeRouter requiere Node.js y se puede compilar desde el repositorio:

«`bash
git clone https://github.com/openfreerouter/freerouter.git
cd freerouter
npm install
npx tsc
node dist/src/server.js
«`

Por defecto escucha en `http://localhost:18800`. Comprueba que está activo:

«`bash
curl http://localhost:18800/health
«`

Después puedes enviar una petición como a cualquier API de OpenAI:

«`bash
curl http://localhost:18800/v1/chat/completions \
-H «Content-Type: application/json» \
-d ‘{
«model»: «auto»,
«messages»: [{«role»: «user», «content»: «Resume qué hace este repositorio»}]
}’
«`

No conviene poner claves dentro del repositorio. FreeRouter busca la configuración en este orden: la ruta indicada por `FREEROUTER_CONFIG`, `./freerouter.config.json` y `~/.config/freerouter/config.json`. Una configuración mínima podría ser:

«`json
{
«providers»: {
«anthropic»: {
«baseUrl»: «https://api.anthropic.com»,
«api»: «anthropic»
},
«kimi»: {
«baseUrl»: «https://api.moonshot.cn»,
«api»: «openai»
}
},
«tiers»: {
«SIMPLE»: {
«model»: «kimi-for-coding»,
«provider»: «kimi»,
«fallback»: «claude-haiku-4-5-20250315»
},
«MEDIUM»: {
«model»: «claude-sonnet-4-5-20250514»,
«provider»: «anthropic»
},
«COMPLEX»: {
«model»: «claude-opus-4-0-20250115»,
«provider»: «anthropic»
},
«REASONING»: {
«model»: «claude-opus-4-0-20250115»,
«provider»: «anthropic»
}
}
}
«`

Los nombres y modelos concretos dependen de las cuentas y de la fecha. Hay que comprobar que cada proveedor acepta el formato configurado y que las claves se cargan como variables de entorno según la documentación del proyecto.

## Dónde aplicarlo

FreeRouter tiene más sentido cuando una aplicación hace muchas peticiones de dificultad desigual:

– **Agentes de programación:** preguntas simples, documentación y tests pueden ir a un modelo barato; una migración compleja puede escalar a uno de razonamiento.
– **Chat interno y soporte:** respuestas frecuentes consumen poco y las consultas ambiguas se reservan para un modelo mejor.
– **Automatizaciones de n8n, scripts o backends:** un único endpoint evita mantener lógica de selección en cada flujo.
– **Revisión y generación de documentos:** clasificación, extracción y redacción pueden repartir costes entre varios niveles.
– **Prototipos multimodelo:** permite comparar proveedores usando la misma interfaz y observar estadísticas por tier.
– **Entornos con requisitos de control:** el gateway permanece en tu máquina o red y las claves no pasan por un agregador externo, aunque el contenido sí llega al proveedor que hayas elegido.

La cifra de ahorro que muestra el README —60–80 % en un escenario de uso dominado por mensajes sencillos— es una estimación del proyecto, no una garantía. Conviene medir tokens, latencia y tasa de fallback con tráfico propio.

## ¿Se puede usar con OpenCode?

**Sí. Es la integración más directa.** OpenCode permite definir proveedores personalizados OpenAI-compatible y cambiar su `baseURL`. En una configuración actual de OpenCode se puede declarar un proveedor que apunte a FreeRouter:

«`jsonc
{
«$schema»: «https://opencode.ai/config.json»,
«model»: «freerouter/auto»,
«provider»: {
«freerouter»: {
«npm»: «@ai-sdk/openai-compatible»,
«name»: «FreeRouter (local)»,
«options»: {
«baseURL»: «http://127.0.0.1:18800/v1»,
«apiKey»: «local-router»
},
«models»: {
«auto»: {
«name»: «Auto (FreeRouter)»
}
}
}
}
}
«`

La clave puede ser un valor local cualquiera si el servidor no exige autenticación; es preferible usar una variable de entorno si se activa la autenticación de FreeRouter. En versiones de OpenCode que usan la sintaxis V2, los mismos campos aparecen bajo `providers`, con `package: «@opencode-ai/ai/providers/openai-compatible»` y `settings.baseURL`.

Una vez guardado el archivo, selecciona `freerouter/auto` o ejecuta OpenCode con ese modelo. Los prefijos `/simple` y `/max` son especialmente útiles aquí: puedes dejar el enrutado automático para el trabajo normal y pedir explícitamente el tier potente cuando vas a tocar arquitectura o código delicado.

## ¿Se puede usar en Orca?

**Sí, pero FreeRouter no se instala como un agente de Orca.** Orca es el entorno que lanza agentes CLI en terminales y worktrees; FreeRouter es el endpoint que esos agentes consumen. La web de Orca lista OpenCode y otros agentes como compatibles, y afirma que cualquier agente CLI puede ejecutarse en su terminal.

La combinación recomendada es:

1. Arrancar FreeRouter en la máquina donde corre el agente (`localhost:18800`).
2. Configurar OpenCode, Codex u otro cliente compatible para usar `http://127.0.0.1:18800/v1` como base URL.
3. Lanzar ese agente desde Orca y trabajar en un worktree aislado.
4. Revisar el diff y las estadísticas de FreeRouter antes de integrar los cambios.

En otras palabras, Orca gestiona terminales, worktrees, tareas paralelas y revisión; FreeRouter gestiona la selección de modelo, los fallbacks y el coste. Si Orca ejecuta el agente en una máquina remota por SSH, `localhost` será el remoto: habría que arrancar FreeRouter allí o exponerlo de forma segura en la red.

No hay indicios en el repositorio de FreeRouter de un plugin nativo para Orca. La compatibilidad es por capas y depende de que el agente elegido permita configurar un endpoint OpenAI-compatible. Tampoco hay que confundir esta integración con la configuración MCP de Orca: MCP sirve para herramientas y orquestación, mientras que FreeRouter es el backend de inferencia.

## Buenas prácticas

– Empieza con dos tiers y pocos modelos; añade complejidad cuando tengas métricas.
– Define un fallback por proveedor y un timeout razonable para que un modelo lento no bloquee al agente.
– Protege `/reload-config`, `/stats` y el endpoint de chat si el servidor sale de `localhost`.
– No envíes datos sensibles a proveedores externos sin revisar sus políticas.
– Registra coste, latencia, errores y calidad por tier; el ahorro solo importa si la tasa de correcciones no aumenta.
– Usa `/max` para tareas críticas y revisa siempre los cambios producidos por un agente con permisos de terminal.

## Conclusión

FreeRouter es una pieza de infraestructura pequeña pero útil: convierte varios proveedores y modelos en un único endpoint, decide automáticamente qué potencia necesita cada petición y permite mantener el control de las claves y de la configuración.

La respuesta corta a las dos preguntas iniciales es **sí**: funciona con **OpenCode** configurando un proveedor OpenAI-compatible, y funciona **dentro de Orca** porque Orca puede lanzar ese agente y FreeRouter actúa como su backend. No sustituye a Orca ni a OpenCode; los complementa.

Yo lo probaría primero con OpenCode en un proyecto de bajo riesgo, midiendo durante una semana qué porcentaje de tareas cae en cada tier, cuánto tarda y cuántas veces es necesario repetir una solución. Con esos datos se puede decidir si merece la pena convertirlo en el gateway común de todo el flujo de desarrollo.

**Enlaces:** [Repositorio de FreeRouter](https://github.com/openfreerouter/freerouter) · [Documentación de proveedores de OpenCode](https://v2.opencode.ai/docs/providers/) · [Agentes compatibles con Orca](https://www.onorca.dev/docs/agents/supported) · [Orca ADE](https://www.onorca.dev/)

— FIN —

Víctor González