Tutorial de 9Router: conectar Claude Code, Codex y Cursor a un único router de IA

9Router es un router local para AI coding. Esta guía cubre instalación, integración con Claude Code/Codex/Cursor, endpoint OpenAI-compatible, compresión de tokens, fallback de modelos y rutas multi-cuenta.

9Router es un router local para herramientas de programación con IA. Permite conectar Claude Code, Codex, Cursor, Cline, Copilot, OpenCode, OpenClaw y herramientas similares a un único endpoint compatible con OpenAI, y desde ahí enrutar las solicitudes a distintos modelos y proveedores.

No pretende ser otro cliente de chat. Se coloca entre tus herramientas de programación y los proveedores de modelos para resolver problemas prácticos: formatos de API incompatibles, cambios manuales entre proveedores, consumo rápido de tokens por salidas de herramientas, cortes por cuotas agotadas y configuración complicada de varias cuentas.

Según el README, 9Router admite más de 40 proveedores y más de 100 modelos. Incluye RTK Token Saver, fallback automático, seguimiento de cuotas, rotación multi-cuenta, traducción de formatos y registros de solicitudes. Está escrito en JavaScript, usa Node.js, Next.js, React, Tailwind CSS y LowDB, y tiene licencia MIT.

Para qué sirve

9Router tiene más sentido cuando usas varias herramientas de programación con IA y varias fuentes de modelos al mismo tiempo.

  • Claude Code usa una cuenta de suscripción.
  • Codex o Cursor necesitan un endpoint OpenAI personalizado.
  • Cline, Continue o RooCode necesitan una API compatible con OpenAI.
  • Los proveedores gratuitos sirven para pruebas.
  • GLM, MiniMax o Kimi funcionan como respaldo barato.
  • Los modelos de mayor calidad se reservan para tareas difíciles.

Sin 9Router, cada herramienta necesita su propio endpoint, API key, nombre de modelo y estrategia de fallback. 9Router centraliza todo eso en una capa local.

API local:

1
http://localhost:20128/v1

Dashboard:

1
http://localhost:20128/dashboard

Instalación rápida

Para uso local:

1
2
npm install -g 9router
9router

Desde el código fuente:

1
2
3
4
5
git clone https://github.com/decolua/9router.git
cd 9router
cp .env.example .env
npm install
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev

Modo producción:

1
2
npm run build
PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start

El paquete npm requiere Node.js >=18.0.0. En VPS o Docker, configura JWT_SECRET, INITIAL_PASSWORD, DATA_DIR y API_KEY_SECRET.

Conectar herramientas de programación

Configuración típica:

1
2
3
Base URL: http://localhost:20128/v1
API Key: copiada desde el dashboard de 9Router
Model: nombre de modelo o combo configurado en 9Router

Para Codex CLI:

1
2
3
4
export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-9router-api-key"

codex "your prompt"

Para Cline, Continue o RooCode, elige OpenAI Compatible:

1
2
3
Base URL: http://localhost:20128/v1
API Key: your-9router-api-key
Model: cc/claude-opus-4-7

Los nombres dependen de los proveedores conectados, por ejemplo cc/, cx/, gh/, glm/, minimax/, kr/ y vertex/.

RTK Token Saver

En programación con IA, muchas veces lo que más tokens consume son salidas de herramientas:

  • git diff
  • git status
  • grep
  • find
  • ls
  • tree
  • logs
  • listas largas de archivos

RTK Token Saver comprime esas salidas antes de enviarlas al modelo. El proyecto afirma que puede ahorrar 20%-40% de tokens de entrada en muchas solicitudes.

La ventaja es que no tienes que cambiar de herramienta ni de modelo. Aun así, para logs críticos o contenido completo de archivos, conviene probar primero que la calidad de respuesta no baje.

Fallback automático

Puedes ordenar modelos por prioridad:

1
2
3
1. Modelo de suscripción
2. API barata
3. Proveedor gratuito

Ejemplo:

1
2
3
1. cc/claude-opus-4-7
2. glm/glm-5.1
3. kr/claude-sonnet-4.5

El fallback reduce interrupciones, pero cambia la consistencia de salida. Para refactors grandes, migraciones o tareas sensibles, es mejor fijar un modelo principal.

Cuidado con proveedores gratuitos

Kiro, OpenCode Free y Vertex pueden ser útiles, pero sus reglas cambian. Verifica siempre si el uso es gratuito, si hay límites regionales, si se permite usar herramientas de terceros, si puede haber rate limits o bloqueos, y cuándo caduca la cuota.

9Router enruta solicitudes; no cambia las condiciones del proveedor.

Despliegue local

Para uso personal, basta con escuchar en localhost. Si lo llevas a un VPS o LAN, cambia la contraseña por defecto, configura JWT_SECRET y API_KEY_SECRET, no expongas el dashboard directamente, y exige Bearer API key en /v1/*.

1
2
3
4
5
6
7
docker run -d \
  --name 9router \
  -p 20128:20128 \
  --env-file ./.env \
  -e DATA_DIR=/app/data \
  -v "$HOME/.9router:/app/data" \
  9router

Comprobaciones más allá del Dashboard

No dependas de una ruta /health no documentada. Comprueba primero la Web y después la API autenticada:

1
2
3
curl -fsS http://127.0.0.1:20128/dashboard > /dev/null
curl -fsS http://127.0.0.1:20128/v1/models \
  -H "Authorization: Bearer $NINE_ROUTER_KEY"

Si falla la primera, revisa proceso, puerto, escucha o proxy. Si solo la segunda devuelve 401/403, revisa la API Key. Termina con una petición mínima de chat y confirma el provider elegido por la regla combo.

En Docker también puedes revisar el contenedor y sus últimos registros:

1
2
docker ps --filter name=9router
docker logs --tail 100 9router

Diagnosticar fallos del upstream con registros

DATA_DIR contiene db.json, usage.json y log.txt:

1
2
export DATA_DIR="${DATA_DIR:-$HOME/.9router}"
tail -n 100 "$DATA_DIR/log.txt"
  • 401/403: credencial caducada, permiso ausente u OAuth roto.
  • 429: cuota o límite; comprueba el siguiente nivel de fallback.
  • 5xx, timeout, DNS o TLS: problema del upstream o de red.
  • Cambió de provider y falló: revisa cada elemento del combo.

ENABLE_REQUEST_LOGS=true añade detalle, pero puede guardar datos sensibles. Actívalo brevemente, limita permisos y desactívalo después.

Copia y restauración del directorio de datos

Detén las escrituras y archiva el directorio completo:

1
2
3
4
export DATA_DIR="${DATA_DIR:-$HOME/.9router}"
pm2 stop 9router
tar -C "$DATA_DIR" -czf "$HOME/9router-backup-$(date +%Y%m%d-%H%M%S).tgz" .
pm2 start 9router

La copia puede contener credenciales y API Keys. Para restaurar, detén el servicio, aparta el directorio actual, extrae en un DATA_DIR vacío y valida antes de arrancar:

1
2
3
4
python -m json.tool "$DATA_DIR/db.json" > /dev/null
python -m json.tool "$DATA_DIR/usage.json" > /dev/null
pm2 start 9router
tail -n 100 "$DATA_DIR/log.txt"

En Docker, copia con el contenedor detenido el directorio o volumen de /app/data y repite las verificaciones de Dashboard, /v1/models y chat mínimo.

Resumen

9Router es una puerta de enlace local para herramientas de programación con IA. Unifica Claude Code, Codex, Cursor y Cline en http://localhost:20128/v1, y gestiona selección de modelo, traducción de formatos, compresión de tokens, cuotas y fallback.

Es más útil para usuarios intensivos que ya alternan entre varios proveedores. Empieza con una herramienta y un proveedor, y añade combos poco a poco.

Preguntas frecuentes

¿Qué es este proyecto?

Es un proyecto de herramientas de IA cubierto en este artículo, con foco en qué hace, cómo se usa y cuándo merece la pena probarlo.

¿Para quién es?

Principalmente para desarrolladores y usuarios de herramientas de IA que quieren conectarlo a flujos reales, no solo leer el README.

¿Qué conviene revisar antes de usarlo?

Revisa instalación, herramientas compatibles, límites de datos y permisos, y si el proyecto sigue cambiando rápido.

¿Sirve para producción?

Conviene probarlo primero en un flujo pequeño. Verifica el comportamiento antes de usarlo en tareas sensibles o de producción.

Referencias