9Router — LLM Gateway¶
1 endpoint, 40+ provider, support free tier kayak Kiro. Bot lo tinggal nunjuk ke 9router, ga perlu daftar 5-10 API key.
Apa itu 9Router¶
9Router itu router/gateway untuk LLM. Konsep mirip OpenRouter, tapi lebih powerful karena:
- Self-hosted (jalan di VPS lo sendiri, port 20128)
- Support subscription provider (Claude Code Pro, Codex Plus, GitHub Copilot) — quota subscription lo masih kepake
- Support free provider (Kiro AI, OpenCode Free, Vertex AI free credit) — Claude unlimited gratis lewat Kiro
- Auto-fallback tier: Subscription → Cheap → Free, zero downtime
- RTK Token Saver — kompres tool_result, hemat 20-40% token per request
- Multi-account round-robin per provider
- OpenAI-compatible API (gampang integrate ke kode apapun)
Hasil: bot lo bisa pake Claude Sonnet 4.5 / GLM-5 / Gemini / DeepSeek dari 1 endpoint, ga perlu nge-juggle banyak API key.
Arsitektur¶
┌──────────────────┐
│ Kai (agent) │
│ main.py │
└────────┬─────────┘
│ OPENAI_BASE_URL=http://127.0.0.1:20128/v1
↓
┌─────────────────────────────────────────┐
│ 9Router (di VPS lo, port 20128) │
│ • RTK Token Saver │
│ • Format translation (OpenAI ↔ Claude) │
│ • Quota tracking + auto fallback │
└────────┬────────────────────────────────┘
│
├─→ Tier 1 (SUBSCRIPTION)
│ • Claude Code Pro/Max
│ • OpenAI Codex Plus/Pro
│ • GitHub Copilot
│
├─→ Tier 2 (CHEAP API key)
│ • GLM ($0.6/1M tokens)
│ • MiniMax ($0.2/1M tokens)
│ • DeepSeek
│ • OpenRouter
│
└─→ Tier 3 (FREE)
• Kiro AI (Claude 4.5 unlimited!)
• OpenCode Free (no auth)
• Vertex AI ($300 credit)
Install 9Router¶
Option A: npm global (paling gampang)¶
Default jalan di port 20128. Dashboard di http://localhost:20128.
Cocok untuk: testing cepat di laptop lo, atau VPS pribadi.
Option B: Docker¶
docker run -d \
--name 9router \
-p 20128:20128 \
-v ~/9router-data:/app/data \
--restart unless-stopped \
decolua/9router:latest
Cocok untuk: production di VPS, isolate dari host.
Option C: Source code (kalo lo mau hack)¶
git clone https://github.com/decolua/9router.git
cd 9router
cp .env.example .env
nano .env # set JWT_SECRET, INITIAL_PASSWORD, dll
npm install
npm run build
PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start
Cocok untuk: develop / customize 9router itu sendiri.
First-time setup¶
1. Buka dashboard¶
Atau via SSH tunnel kalo VPS ga expose port public:
2. Login¶
Username: admin
Password: dari INITIAL_PASSWORD di .env
Setelah login pertama, ganti password lewat dashboard → Settings → Account.
3. Generate API key¶
Dashboard → API Keys → Create new key.
Beri nama: kai-agent (atau apa aja deskriptif).
Copy key, simpan di ~/agent/.env:
4. Connect minimal 1 provider¶
Dashboard → Providers → Connect.
Recommended starter (no signup needed):
- Kiro AI (free Claude unlimited) — login via AWS Builder ID / Google / GitHub
- OpenCode Free (no auth, passthrough proxy)
Detail Kiro di halaman Kiro. Detail alternatif di halaman lainnya.
Integrate ke Kai¶
Update ~/ai-agent/.env (atau ~/agent/.env):
OPENAI_API_KEY=fe_oa_xxxxxxxxxxxxxxxxxxxx
OPENAI_BASE_URL=http://127.0.0.1:20128/v1
OPENAI_MODEL=kr/auto
kr/auto = auto-pick model. Atau pakai spesifik:
Restart bot:
Test chat. Lo harusnya dapet response yang lebih cerdas (Claude Sonnet 4.5).
Naming convention model di 9Router¶
9Router pake prefix berdasarkan provider:
| Prefix | Provider | Contoh model |
|---|---|---|
kr/ |
Kiro AI | kr/claude-sonnet-4.5, kr/glm-5, kr/auto |
cc/ |
Claude Code | cc/claude-opus-4-7, cc/claude-sonnet-4-6 |
cx/ |
Codex | cx/gpt-5.5, cx/gpt-5.4 |
gh/ |
GitHub Copilot | gh/gpt-5, gh/claude-sonnet-4 |
or/ |
OpenRouter | or/anthropic/claude-3.5-sonnet, or/google/gemini-2.0 |
oc/ |
OpenCode Free | oc/claude-3.5-sonnet, oc/gpt-4o |
vx/ |
Vertex AI | vx/gemini-3-pro, vx/claude-sonnet-4 |
glm/ |
GLM (Zhipu) | glm/glm-5, glm/glm-4-plus |
ds/ |
DeepSeek | ds/deepseek-chat, ds/deepseek-coder |
Special: kr/auto — auto pick best available model.
Quota tracking¶
Dashboard → Quota tab:
- Subscription tier: shows quota Claude Code / Codex / Copilot (5-hour + weekly)
- Cheap tier: shows credit balance per provider
- Free tier: usage counter
Bot lo otomatis switch ke tier berikutnya kalo subscription quota habis. Zero downtime.
RTK Token Saver¶
Auto-aktif. Yang dia lakuin:
- Detect tool_result content di request (output dari
git diff,grep -r,ls -la, dll) - Kompres / truncate redundant info
- Save 20-40% token per multi-step agent call
Buat agent kayak Kai yang banyak agentic loop, ini real saving.
Multi-account round-robin¶
Kalo lo punya 2+ akun Kiro (atau 2+ Claude Code Pro):
Dashboard → Providers → Kiro → Add Account.
9Router auto round-robin antara akun. Effective doubling free quota.
Setup systemd (jalan 24/7)¶
sudo tee /etc/systemd/system/9router.service > /dev/null << 'EOF'
[Unit]
Description=9Router LLM Gateway
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/9router
EnvironmentFile=/home/ubuntu/9router/.env
ExecStart=/usr/bin/npm run start
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable 9router
sudo systemctl start 9router
sudo systemctl status 9router
Verify integration¶
Test endpoint langsung:
curl -X POST http://127.0.0.1:20128/v1/chat/completions \
-H "Authorization: Bearer fe_oa_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "kr/auto",
"messages": [{"role": "user", "content": "halo"}]
}'
Expect respond dengan JSON {"choices": [...]}. Kalo error 401 → API key salah. Kalo error 502 → 9router belum running.
Anti-pattern¶
❌ Hardcode 9router URL di kode¶
Hardcode = ga bisa switch ke OpenAI langsung kalo 9router down. Pakai env var:
client = OpenAI(
base_url=os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1"),
api_key=os.environ["OPENAI_API_KEY"]
)
❌ Expose port 20128 ke public¶
Bot lo connect via localhost. Public expose = orang lain bisa pake quota lo + akses dashboard.
Solusi: expose lewat Cloudflare Tunnel atau Tailscale kalo lo butuh akses remote.
❌ Run 9router as root¶
Pake user biasa (ubuntu / agent). systemd User=ubuntu. Kalo error permission, fix folder ownership, bukan jalanin as root.
Pricing & limit (per Mei 2026)¶
| Tier | Cost | Note |
|---|---|---|
| Kiro AI | FREE | Unlimited Claude Sonnet 4.5 + GLM-5 + MiniMax |
| OpenCode Free | FREE | No auth, models auto-fetched |
| Vertex AI | FREE | $300 credit untuk akun GCP baru |
| GLM | $0.6 / 1M tokens | Cheap, decent quality |
| MiniMax | $0.2 / 1M tokens | Cheapest cheap tier |
| OpenRouter | varies | Hub ke 100+ model, pay-per-use |
| Claude Code Pro | $20/bln | 5-hour quota Claude |
| Codex Plus | $20/bln | 5-hour quota GPT-5 |
Strategi optimal: connect Kiro (free) + 1 cheap provider (GLM/DeepSeek) sebagai fallback. Total cost untuk personal agent: $0-2/bulan.
Troubleshooting¶
Bot ga konek ke 9router¶
# Cek 9router running?
curl http://127.0.0.1:20128/v1/models -H "Authorization: Bearer $FREEMODEL_API_KEY"
# Should return JSON list of models
Kalo connection refused:
Response lambat¶
Kalo Kiro lambat (kadang queue), switch ke OpenCode Free sementara, atau bayar untuk Codex Plus / Claude Code Pro.
"All providers failed"¶
Berarti semua tier (subscription + cheap + free) udah quota habis atau down.
Fix:
1. Cek dashboard, refresh token Kiro
2. Add provider baru
3. Atau switch model: kr/auto → oc/claude-3.5-sonnet
Token tracking inaccurate¶
Update 9router¶
# npm version
npm update -g 9router
# Docker version
docker pull decolua/9router:latest
docker stop 9router && docker rm 9router
# rerun docker run command
# Source version
cd ~/9router
git pull
npm install
npm run build
sudo systemctl restart 9router
Resources¶
- Repo: https://github.com/decolua/9router
- Website: https://9router.com
- Docs: https://9router.com/docs
Next step¶
- Connect Kiro AI sebagai backend → halaman Kiro
- Compare alternative backend → halaman alternatives