OmniRoute/README.ko.md
diegosouzapw 52221488d0 docs: sync all 30 language READMEs with v1.7.3 features + create workflow files
- Synced feature tables across all 28 translated READMEs (Model Aliases, Background Degradation, Rate Limit Persistence, Token Refresh Resilience)
- Updated 6 docs/i18n/*/FEATURES.md with new Settings description
- Created workflows: update-docs.md (with multi-language sync step), generate-release.md, issue-triage.md
2026-03-01 22:02:38 -03:00

1372 lines
62 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div align="center">
<img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
# 🚀 OmniRoute — 무료 AI 게이트웨이
### 코딩을 멈추지 마세요. 자동 폴백을 통해 **무료 및 저가형 AI 모델**로 스마트 라우팅합니다.
_범용 API 프록시 — 하나의 엔드포인트, 36개 이상의 공급자, 가동 중지 시간 없음._
**채팅 완료 • 임베딩 • 이미지 생성 • 오디오 • 순위 재지정 • 100% TypeScript**
---
### 🤖 좋아하는 코딩 에이전트를 위한 무료 AI 제공업체
_무제한 코딩을 위한 무료 API 게이트웨이인 OmniRoute를 통해 AI 기반 IDE 또는 CLI 도구를 연결하세요._
<table>
<tr>
<td align="center" width="110">
<a href="https://github.com/cline/cline">
<img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
<b>OpenClaw</b>
</a><br/>
<sub>⭐ 205K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/HKUDS/nanobot">
<img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
<b>NanoBot</b>
</a><br/>
<sub>⭐ 20.9K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/sipeed/picoclaw">
<img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
<b>PicoClaw</b>
</a><br/>
<sub>⭐ 14.6K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/zeroclaw-labs/zeroclaw">
<img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
<b>ZeroClaw</b>
</a><br/>
<sub>⭐ 9.9K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/nearai/ironclaw">
<img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
<b>IronClaw</b>
</a><br/>
<sub>⭐ 2.1K</sub>
</td>
</tr>
<tr>
<td align="center" width="110">
<a href="https://github.com/anomalyco/opencode">
<img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
<b>OpenCode</b>
</a><br/>
<sub>⭐ 106K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/openai/codex">
<img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
<b>Codex CLI</b>
</a><br/>
<sub>⭐ 60.8K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/anthropics/claude-code">
<img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
<b>Claude Code</b>
</a><br/>
<sub>⭐ 67.3K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/google-gemini/gemini-cli">
<img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
<b>Gemini CLI</b>
</a><br/>
<sub>⭐ 94.7K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/Kilo-Org/kilocode">
<img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
<b>Kilo Code</b>
</a><br/>
<sub>⭐ 15.5K</sub>
</td>
</tr>
</table>
<sub>📡 모든 에이전트는 <code>http://localhost:20128/v1</code> 또는 <code>http://cloud.omniroute.online/v1</code>을 통해 연결됩니다. — 하나의 구성, 무제한 모델 및 할당량</sub>
---
[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
[![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
[🌐 Website](https://omniroute.online) · [🚀 Quick Start](#-quick-start) · [💡 Features](#-key-features) · [📖 Docs](#-documentation) · [💰 Pricing](#-pricing-at-a-glance) · [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
🌐 **Available in:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md)
</div>
---
## 🤔 왜 OmniRoute인가요?
**돈을 낭비하지 말고 한도에 도달하지 마세요.**
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> 구독 할당량은 매달 사용하지 않은 채 만료됩니다.
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> 속도 제한으로 인해 코딩이 중단됩니다.
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> 고가의 API(공급자당 월 $20-50)
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> 공급자 간 수동 전환
**OmniRoute는 이 문제를 해결합니다.**
-**구독 극대화** - 할당량을 추적하고 재설정하기 전에 모든 비트를 사용하세요.
-**자동 대체** - 구독 → API 키 → 저렴한 → 무료, 다운타임 없음
-**다중 계정** - 공급자별 계정 간 라운드 로빈
-**유니버설** - Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, 모든 CLI 도구와 함께 작동
---
## 🔄 작동 방식
```
┌─────────────┐
│ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
│ Tool │
└──────┬──────┘
│ http://localhost:20128/v1
┌─────────────────────────────────────────┐
│ OmniRoute (Smart Router) │
│ • Format translation (OpenAI ↔ Claude) │
│ • Quota tracking + Embeddings + Images │
│ • Auto token refresh │
└──────┬──────────────────────────────────┘
├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
│ ↓ quota exhausted
├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
│ ↓ budget limit
├─→ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
│ ↓ budget limit
└─→ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited)
Result: Never stop coding, minimal cost
```
---
## 🎯 What OmniRoute Solves — 16 Real Pain Points
> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability.
<details>
<summary><b>💸 1. "I pay for an expensive subscription but still get interrupted by limits"</b></summary>
Developers pay $20200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity.
**How OmniRoute solves it:**
- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention
- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly)
- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next
- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized)
- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard
</details>
<details>
<summary><b>🔌 2. "I need to use multiple providers but each has a different API"</b></summary>
OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints.
**How OmniRoute solves it:**
- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers
- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+
- **Role Normalization** — Converts `developer``system` for non-OpenAI providers; `system``user` for GLM/ERNIE
- **Think Tag Extraction** — Extracts `<think>` blocks from models like DeepSeek R1 into standardized `reasoning_content`
- **Structured Output for Gemini** — `json_schema``responseMimeType`/`responseSchema` automatic conversion
- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs
</details>
<details>
<summary><b>🌐 3. "My AI provider blocks my region/country"</b></summary>
Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries.
**How OmniRoute solves it:**
- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key
- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP
- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory`
- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass)
- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing
- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection
</details>
<details>
<summary><b>🆓 4. "I want to use AI for coding but I have no money"</b></summary>
Not everyone can pay $20200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost.
**How OmniRoute solves it:**
- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free)
- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime
- **NVIDIA NIM Free Credits** — 1000 free credits integrated
- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider
</details>
<details>
<summary><b>🔒 5. "I need to protect my AI gateway from unauthorized access"</b></summary>
When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse.
**How OmniRoute solves it:**
- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page
- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle
- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing
- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens
- **Rate Limiter** — Per-IP rate limiting with configurable windows
- **IP Filtering** — Allowlist/blocklist for access control
- **Prompt Injection Guard** — Sanitization against malicious prompt patterns
- **AES-256-GCM Encryption** — Credentials encrypted at rest
</details>
<details>
<summary><b>🛑 6. "My provider went down and I lost my coding flow"</b></summary>
AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application.
**How OmniRoute solves it:**
- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open)
- **Exponential Backoff** — Progressive retry delays
- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms
- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention
- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain
- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency
</details>
<details>
<summary><b>🔧 7. "Configuring each AI tool is tedious and repetitive"</b></summary>
Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time.
**How OmniRoute solves it:**
- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection
- **Onboarding Wizard** — Guided 4-step setup for first-time users
- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers
</details>
<details>
<summary><b>🔑 8. "Managing OAuth tokens from multiple providers is hell"</b></summary>
Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic.
**How OmniRoute solves it:**
- **Auto Token Refresh** — OAuth tokens refresh in background before expiration
- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction
- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers
- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility
- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker
</details>
<details>
<summary><b>📊 9. "I don't know how much I'm spending or where"</b></summary>
Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up.
**How OmniRoute solves it:**
- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider
- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback
- **Per-Model Pricing Configuration** — Configurable prices per model
- **Usage Statistics Per API Key** — Request count and last-used timestamp per key
- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency
</details>
<details>
<summary><b>🐛 10. "I can't diagnose errors and problems in AI calls"</b></summary>
When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error.
**How OmniRoute solves it:**
- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console
- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter
- **SQLite Proxy Logs** — Persistent logs that survive server restarts
- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time)
- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing
- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation
</details>
<details>
<summary><b>🏗️ 11. "Deploying and maintaining the gateway is complex"</b></summary>
Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction.
**How OmniRoute solves it:**
- **npm global install** — `npm install -g omniroute && omniroute` — done
- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi)
- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw)
- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode
- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking)
- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers
- **DB Backups** — Automatic backup, restore, export and import of all settings
</details>
<details>
<summary><b>🌍 12. "The interface is English-only and my team doesn't speak English"</b></summary>
Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors.
**How OmniRoute solves it:**
- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English
- **RTL Support** — Right-to-left support for Arabic and Hebrew
- **Multi-Language READMEs** — 30 complete documentation translations
- **Language Selector** — Globe icon in header for real-time switching
</details>
<details>
<summary><b>🔄 13. "I need more than chat — I need embeddings, images, audio"</b></summary>
AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format.
**How OmniRoute solves it:**
- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models
- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models
- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible
- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis
- **Moderations** — `/v1/moderations` — Content safety checks
- **Reranking** — `/v1/rerank` — Document relevance reranking
- **Responses API** — Full `/v1/responses` support for Codex
</details>
<details>
<summary><b>🧪 14. "I have no way to test and compare quality across models"</b></summary>
Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist.
**How OmniRoute solves it:**
- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal
- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function)
- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison
- **Chat Tester** — Full round-trip with visual response rendering
- **Live Monitor** — Real-time stream of all requests flowing through the proxy
</details>
<details>
<summary><b>📈 15. "I need to scale without losing performance"</b></summary>
As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected.
**How OmniRoute solves it:**
- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency
- **Request Idempotency** — 5s deduplication window for identical requests
- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking
- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence
- **API Key Validation Cache** — 3-tier cache for production performance
- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime
</details>
<details>
<summary><b>🤖 16. "I want to control model behavior globally"</b></summary>
Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical.
**How OmniRoute solves it:**
- **System Prompt Injection** — Global prompt applied to all requests
- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive)
- **6 Routing Strategies** — Global strategies that determine how requests are distributed
- **Wildcard Router** — `provider/*` patterns route dynamically to any provider
- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard
- **Provider Toggle** — Enable/disable all connections for a provider with one click
- **Blocked Providers** — Exclude specific providers from `/v1/models` listing
</details>
## ⚡ 빠른 시작
**1. 전역적으로 설치:**
```bash
npm install -g omniroute
omniroute
```
🎉 대시보드는 `http://localhost:20128`에서 열립니다.
| 명령 | 설명 |
| ----------------------- | ----------------------------- |
| `omniroute` | 서버 시작(기본 포트 20128) |
| `omniroute --port 3000` | 사용자 정의 포트 사용 |
| `omniroute --no-open` | 브라우저를 자동으로 열지 않음 |
| `omniroute --help` | 도움말 표시 |
**2. 무료 공급자 연결:**
대시보드 → 공급자 → **Claude Code** 또는 **Antigravity** 연결 → OAuth 로그인 → 완료!
**3. CLI 도구에서 사용:**
```
Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
Endpoint: http://localhost:20128/v1
API Key: [copy from dashboard]
Model: if/kimi-k2-thinking
```
**그렇습니다!** 무료 AI 모델로 코딩을 시작해 보세요.
**대안 — 소스에서 실행:**
```bash
cp .env.example .env
npm install
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
```
---
## 🐳 도커
OmniRoute는 [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute)에서 공개 Docker 이미지로 제공됩니다.
**빠른 실행:**
```bash
docker run -d \
--name omniroute \
--restart unless-stopped \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest
```
**환경 파일 포함:**
```bash
# Copy and edit .env first
cp .env.example .env
docker run -d \
--name omniroute \
--restart unless-stopped \
--env-file .env \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest
```
**Docker Compose 사용:**
```bash
# Base profile (no CLI tools)
docker compose --profile base up -d
# CLI profile (Claude Code, Codex, OpenClaw built-in)
docker compose --profile cli up -d
```
| 이미지 | 태그 | 사이즈 | 설명 |
| ------------------------ | -------- | ------ | ---------------- |
| `diegosouzapw/omniroute` | `latest` | ~250MB | 최신 안정 릴리스 |
| `diegosouzapw/omniroute` | `1.0.3` | ~250MB | 현재 버전 |
---
---
## 🖥️ 데스크톱 앱 — 오프라인 & 상시 가동
> 🆕 **새 기능!** OmniRoute가 Windows, macOS, Linux용 **네이티브 데스크톱 앱**으로 출시되었습니다.
- 🖥️ **네이티브 윈도우** — 시스템 트레이 통합 전용 창
- 🔄 **자동 시작** — 시스템 로그인 시 OmniRoute 실행
- 🔔 **네이티브 알림** — 할당량 소진 또는 공급자 문제 알림
-**원클릭 설치** — NSIS (Windows), DMG (macOS), AppImage (Linux)
- 🌐 **오프라인 모드** — 내장 서버로 완전 오프라인 작동
```bash
npm run electron:dev # 개발 모드
npm run electron:build # 현재 플랫폼
npm run electron:build:win # Windows (.exe)
npm run electron:build:mac # macOS (.dmg)
npm run electron:build:linux # Linux (.AppImage)
```
📖 전체 문서: [`electron/README.md`](electron/README.md)
---
## 💰 가격 한눈에 보기
| 계층 | 공급자 | 비용 | 할당량 재설정 | 최고의 대상 |
| ------------- | ------------------- | --------------------- | --------------- | ----------------- |
| **💳 구독** | 클로드 코드 (Pro) | $20/월 | 5시간 + 매주 | 이미 구독 중 |
| | 코덱스(플러스/프로) | $20-200/월 | 5시간 + 매주 | OpenAI 사용자 |
| | 제미니 CLI | **무료** | 180K/월 + 1K/일 | 모든 사람! |
| | GitHub 부조종사 | $10-19/월 | 월간 | GitHub 사용자 |
| **🔑 API 키** | 엔비디아 NIM | **무료** (1000크레딧) | 일회성 | 무료 등급 테스트 |
| | 딥시크 | 종량제 | 없음 | 최고의 가격/품질 |
| | 그로크 | 무료 등급 + 유료 | 요금 제한 | 초고속 추론 |
| | xAI(그록) | 종량제 | 없음 | 그록 모델 |
| | 미스트랄 | 무료 등급 + 유료 | 요금 제한 | 유럽의 AI |
| | 오픈라우터 | 종량제 | 없음 | 100개 이상의 모델 |
| **💰 저렴한** | GLM-4.7 | $0.6/1M | 매일 오전 10시 | 예산 백업 |
| | 미니맥스 M2.1 | $0.2/1M | 5시간 롤링 | 가장 저렴한 옵션 |
| | 키미 K2 | $9/월 정액 | 1000만 토큰/월 | 예측 가능한 비용 |
| **🆓 무료** | 아이플로우 | $0 | 무제한 | 8개 모델 무료 |
| | 퀀 | $0 | 무제한 | 3개 모델 무료 |
| | 키로 | $0 | 무제한 | 클로드 프리 |
**💡 전문가 팁:** Gemini CLI(월 180K 무료) + iFlow(무제한 무료) 콤보 = 비용 $0로 시작하세요!
---
## 💡 주요 기능
### 🧠 코어 라우팅 및 인텔리전스
| 기능 | 그것이 하는 일 |
| ----------------------------- | ----------------------------------------------------------------------------- |
| 🎯 **스마트 4계층 폴백** | 자동 경로: 구독 → API 키 → 저렴한 → 무료 |
| 📊 **실시간 할당량 추적** | 라이브 토큰 수 + 공급자별 카운트다운 재설정 |
| 🔄 **형식 번역** | OpenAI ⇔ Claude ⇔ Gemini ⇔ Cursor ⇔ Kiro 심리스 + 반응위생 |
| 👥 **다중 계정 지원** | 지능적인 선택을 통해 공급자당 여러 계정 |
| 🔄 **자동 토큰 새로고침** | 재시도 시 OAuth 토큰이 자동으로 새로 고쳐집니다. |
| 🎨 **맞춤형 콤보** | 6가지 전략: 채우기 우선, 라운드 로빈, p2c, 무작위, 최소 사용, 비용 최적화 |
| 🧩 **맞춤형 모델** | 모든 공급자에 모델 ID 추가 |
| 🌐 **와일드카드 라우터** | `provider/*` 패턴을 모든 공급자에게 동적으로 라우팅 |
| 🧠 **예산 고려** | 추론 모델을 위한 패스스루, 자동, 사용자 정의 및 적응형 모드 |
| 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) |
| ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models |
| 💬 **시스템 프롬프트 삽입** | 모든 요청에 ​​전역 시스템 프롬프트 적용 |
| 📄 **응답 API** | Codex에 대한 전체 OpenAI 응답 API(`/v1/responses`) 지원 |
### 🎵 다중 모드 API
| 기능 | 그것이 하는 일 |
| ----------------------- | ------------------------------------------------------ |
| 🖼️ **이미지 생성** | `/v1/images/generations` — 4개 공급자, 9개 이상의 모델 |
| 📐 **임베딩** | `/v1/embeddings` — 6개 공급자, 9개 이상의 모델 |
| 🎤 **오디오 전사** | `/v1/audio/transcriptions` — 속삭임 호환 |
| 🔊 **텍스트 음성 변환** | `/v1/audio/speech` — 다중 제공자 오디오 합성 |
| 🛡️ **조정** | `/v1/moderations` — 콘텐츠 안전 확인 |
| 🔀 **재순위** | `/v1/rerank` — 문서 관련성 재순위 |
### 🛡️ 복원력 및 보안
| 기능 | 그것이 하는 일 |
| ------------------------------- | ---------------------------------------------------------------------------- |
| 🔌 **회로 차단기** | 구성 가능한 임계값을 사용하여 공급자별 자동 열기/닫기 |
| 🛡️ **천둥 방지 무리** | API 키 공급자에 대한 뮤텍스 + 세마포 속도 제한 |
| 🧠 **의미론적 캐시** | 2계층 캐시(서명 + 의미 체계)로 비용 및 대기 시간 감소 |
| ⚡ **멱등성 요청** | 중복 요청에 대한 5초 중복 제거 기간 |
| 🔒 **TLS 지문 스푸핑** | wreq-js를 통해 TLS 기반 봇 감지 우회 |
| 🌐 **IP 필터링** | API 액세스 제어를 위한 허용 목록/차단 목록 |
| 📊 **편집 가능한 속도 제한** | 시스템 수준에서 구성 가능한 RPM, 최소 간격 및 최대 동시 |
| 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness |
| 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt |
| 🛡 **API 엔드포인트 보호** | `/models` 엔드포인트에 대한 인증 게이팅 + 공급자 차단 |
| 🔒 **프록시 가시성** | 색상으로 구분된 배지: 🟢 글로벌, 🟡 공급자, 🔵 IP 디스플레이를 통한 연결별 |
| 🌐 **3단계 프록시 구성** | 글로벌, 공급자별 또는 연결별 수준에서 프록시 구성 |
### 📊 관찰 가능성 및 분석
| 기능 | 그것이 하는 일 |
| ------------------------- | -------------------------------------------------------------------- |
| 📝 **로깅 요청** | 전체 요청/응답 로그가 포함된 디버그 모드 |
| 💾 **SQLite 프록시 로그** | 영구 프록시 로그는 서버를 다시 시작해도 유지됩니다. |
| 📊 **분석 대시보드** | Recharts 기반: 통계 카드, 모델 사용 차트, 공급자 테이블 |
| 📈 **진행 상황 추적** | 스트리밍을 위한 옵트인 SSE 진행 이벤트 |
| 🧪 **LLM 평가** | 4가지 매치 전략을 사용한 골든 세트 테스트 |
| 🔍 **원격 측정 요청** | p50/p95/p99 대기 시간 집계 + X-요청-ID 추적 |
| 📋 **로그 대시보드** | 통합된 4개 탭 페이지: 요청 로그, 프록시 로그, 감사 로그, 콘솔 |
| 🖥️ **콘솔 로그 뷰어** | 레벨 필터, 검색, 자동 스크롤 기능을 갖춘 실시간 터미널 스타일 뷰어 |
| 📑 **파일 기반 로깅** | 콘솔 인터셉터는 회전을 통해 모든 출력을 JSON 로그 파일로 캡처합니다. |
| 🏥 **건강 대시보드** | 시스템 가동 시간, 회로 차단기 상태, 잠금, 캐시 통계 |
| 💰 **비용 추적** | 예산 관리 + 모델별 가격 구성 |
### ☁️ 배포 및 동기화
| 기능 | 그것이 하는 일 |
| ---------------------------------- | ----------------------------------------------------------------- |
| 💾 **클라우드 동기화** | Cloudflare Workers를 통해 장치 간 구성 동기화 |
| 🌐 **어디서나 배포** | 로컬호스트, VPS, Docker, Cloudflare 작업자 |
| 🔑 **API 키 관리** | 공급자별 API 키 생성, 회전 및 범위 지정 |
| 🧙 **온보딩 마법사** | 처음 사용자를 위한 4단계 안내 설정 |
| 🔧 **CLI 도구 대시보드** | 원클릭 구성 Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
| 🔄 **DB 백업** | 모든 설정에 대한 자동 백업, 복원, 내보내기 및 가져오기 |
| 🌐 **국제화** | next-intl이 포함된 전체 i18n — 영어 + 포르투갈어(브라질) 지원 |
| 🌍 **언어 선택기** | 실시간 언어 전환을 위한 헤더의 지구본 아이콘(🇺🇸/🇧🇷) |
| 📂 **사용자 정의 데이터 디렉터리** | `DATA_DIR` env var는 기본 `~/.omniroute` 저장 경로를 재정의합니다 |
<details>
<summary><b>📖 기능 세부정보</b></summary>
### 🎯 스마트 4계층 폴백
자동 대체 기능을 사용하여 콤보 만들기:
```
Combo: "my-coding-stack"
1. cc/claude-opus-4-6 (your subscription)
2. nvidia/llama-3.3-70b (free NVIDIA API)
3. glm/glm-4.7 (cheap backup, $0.6/1M)
4. if/kimi-k2-thinking (free fallback)
→ Auto switches when quota runs out or errors occur
```
### 📊 실시간 할당량 추적
- 제공자별 토큰 소비
- 카운트다운 재설정(5시간, 매일, 매주)
- 유료 계층에 대한 비용 추정
- 월별 지출 보고서
### 🔄 형식 번역
형식 간 원활한 번역:
- **OpenAI** ← **Claude****Gemini****OpenAI 응답**
- CLI 도구가 OpenAI 형식 전송 → OmniRoute 변환 → 공급자가 기본 형식 수신
- 맞춤형 OpenAI 엔드포인트를 지원하는 모든 도구와 함께 작동
- **응답 삭제** — 엄격한 OpenAI SDK 호환성을 위해 비표준 필드를 제거합니다.
- **역할 정규화** — OpenAI가 아닌 경우 `developer``system`; `system` → GLM/ERNIE 모델의 경우 `user`
- **사고 태그 추출** — 사고 모델의 경우 `<think>` 블록 → `reasoning_content`
- **구조화된 출력** — `json_schema` → Gemini의 `responseMimeType`/`responseSchema`
### 👥 다중 계정 지원
- 공급자당 여러 계정 추가
- 자동 라운드 로빈 또는 우선순위 기반 라우팅
- 한 계정이 할당량에 도달하면 다음 계정으로 대체
### 🔄 자동 토큰 새로고침
- OAuth 토큰은 만료되기 전에 자동으로 새로 고쳐집니다.
- 수동 재인증이 필요하지 않습니다.
- 모든 제공업체에 걸친 원활한 경험
### 🎨 맞춤 콤보
- 무제한 모델 조합 생성
- 6가지 전략: 채우기 우선, 라운드 로빈, 두 가지 선택의 힘, 무작위, 최소 사용, 비용 최적화
- Cloud Sync를 통해 여러 기기에서 콤보를 공유하세요
### 🏥 건강 대시보드
- 시스템 상태(가동 시간, 버전, 메모리 사용량)
- 공급자별 회로 차단기 상태(Closed/Open/Half-Open)
- 속도 제한 상태 및 활성 잠금
- 서명 캐시 통계
- 대기 시간 원격 측정(p50/p95/p99) + 프롬프트 캐시
- 한 번의 클릭으로 건강 상태 재설정
### 🔧 번역기 놀이터
OmniRoute에는 API 번역 디버깅, 테스트 및 모니터링을 위한 **4가지 모드**를 갖춘 강력한 내장 번역기 플레이그라운드가 포함되어 있습니다.
| 모드 | 설명 |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **💻 놀이터** | 직접 형식 변환 — API 요청 본문을 붙여넣고 OmniRoute가 공급자 형식(OpenAI ← Claude ← Gemini ← Responses API) 간에 이를 어떻게 변환하는지 즉시 확인하세요. 예제 템플릿과 형식 자동 감지가 포함되어 있습니다. |
| **💬 채팅 테스터** | OmniRoute를 통해 실제 채팅 요청을 보내고 전체 왕복(입력, 번역된 요청, 공급자 응답, 번역된 응답)을 확인하세요. 콤보 라우팅을 검증하는 데 매우 중요합니다. |
| **🧪 테스트 벤치** | 배치 테스트 모드 — 서로 다른 입력과 예상 출력으로 여러 테스트 케이스를 정의하고, 이를 모두 한 번에 실행하고, 공급자와 모델 간에 결과를 비교합니다. |
| **📱 라이브 모니터** | 실시간 요청 모니터링 — OmniRoute를 통해 들어오는 요청을 감시하고, 실시간으로 발생하는 형식 변환을 확인하고, 문제를 즉시 식별합니다. |
**액세스:** 대시보드 → 번역기(사이드바)
### 💾 클라우드 동기화
- 여러 장치에서 공급자, 콤보 및 설정을 동기화합니다.
- 자동 백그라운드 동기화
- 안전한 암호화 저장
</details>
---
## 🎯 사용 사례
### 사례 1: "Claude Pro를 구독하고 있습니다."
**문제:** 할당량은 사용되지 않은 상태로 만료되며, 코딩 작업이 많은 동안 속도 제한이 발생합니다.
```
Combo: "maximize-claude"
1. cc/claude-opus-4-6 (use subscription fully)
2. glm/glm-4.7 (cheap backup when quota out)
3. if/kimi-k2-thinking (free emergency fallback)
Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
vs. $20 + hitting limits = frustration
```
### 사례 2: "비용이 0이길 원합니다"
**문제:** 구독료를 감당할 수 없고 안정적인 AI 코딩이 필요함
```
Combo: "free-forever"
1. gc/gemini-3-flash (180K free/month)
2. if/kimi-k2-thinking (unlimited free)
3. qw/qwen3-coder-plus (unlimited free)
Monthly cost: $0
Quality: Production-ready models
```
### 사례 3: "중단 없이 연중무휴 코딩이 필요합니다."
**문제:** 마감일, 가동 중지 시간을 감당할 수 없음
```
Combo: "always-on"
1. cc/claude-opus-4-6 (best quality)
2. cx/gpt-5.2-codex (second subscription)
3. glm/glm-4.7 (cheap, resets daily)
4. minimax/MiniMax-M2.1 (cheapest, 5h reset)
5. if/kimi-k2-thinking (free unlimited)
Result: 5 layers of fallback = zero downtime
```
### 사례 4: "OpenClaw에서 무료 AI를 원합니다"
**문제:** 메시징 앱에 AI 도우미가 필요하며 완전 무료입니다.
```
Combo: "openclaw-free"
1. if/glm-4.7 (unlimited free)
2. if/minimax-m2.1 (unlimited free)
3. if/kimi-k2-thinking (unlimited free)
Monthly cost: $0
Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
```
---
## 📖 설정 가이드
<details>
<summary><b>💳 구독 제공업체</b></summary>
### 클로드 코드(Pro/Max)
```bash
Dashboard → Providers → Connect Claude Code
→ OAuth login → Auto token refresh
→ 5-hour + weekly quota tracking
Models:
cc/claude-opus-4-6
cc/claude-sonnet-4-5-20250929
cc/claude-haiku-4-5-20251001
```
**프로 팁:** 복잡한 작업에는 Opus를 사용하고, 속도를 높이려면 Sonnet을 사용하세요. OmniRoute는 모델당 할당량을 추적합니다!
### OpenAI 코덱스(Plus/Pro)
```bash
Dashboard → Providers → Connect Codex
→ OAuth login (port 1455)
→ 5-hour + weekly reset
Models:
cx/gpt-5.2-codex
cx/gpt-5.1-codex-max
```
### Gemini CLI(월 180,000 무료!)
```bash
Dashboard → Providers → Connect Gemini CLI
→ Google OAuth
→ 180K completions/month + 1K/day
Models:
gc/gemini-3-flash-preview
gc/gemini-2.5-pro
```
**최고의 가치:** 엄청난 무료 등급! 유료 등급 이전에 사용하세요.
### GitHub 코파일럿
```bash
Dashboard → Providers → Connect GitHub
→ OAuth via GitHub
→ Monthly reset (1st of month)
Models:
gh/gpt-5
gh/claude-4.5-sonnet
gh/gemini-3-pro
```
</details>
<details>
<summary><b>🔑 API 키 제공자</b></summary>
### NVIDIA NIM(무료 1000 크레딧!)
1. 가입: [build.nvidia.com](https://build.nvidia.com)
2. 무료 API 키 받기(1000 추론 크레딧 포함)
3. 대시보드 → 공급자 추가 → NVIDIA NIM:
- API 키: `nvapi-your-key`
**모델:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` 외 50개 이상
**프로 팁:** OpenAI 호환 API — OmniRoute의 형식 변환과 원활하게 작동합니다!
### 딥시크
1. 가입: [platform.deepseek.com](https://platform.deepseek.com)
2. API 키 받기
3. 대시보드 → 공급자 추가 → DeepSeek
**모델:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
### Groq(무료 등급 사용 가능!)
1. 가입: [console.groq.com](https://console.groq.com)
2. API 키 받기(무료 등급 포함)
3. 대시보드 → 공급자 추가 → Groq
**모델:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
**프로 팁:** 초고속 추론 — 실시간 코딩에 가장 적합합니다!
### OpenRouter(100개 이상의 모델)
1. 가입: [openrouter.ai](https://openrouter.ai)
2. API 키 받기
3. 대시보드 → 공급자 추가 → OpenRouter
**모델:** 단일 API 키를 통해 모든 주요 제공업체의 100개 이상의 모델에 액세스할 수 있습니다.
</details>
<details>
<summary><b>💰 저렴한 공급자(백업)</b></summary>
### GLM-4.7 (일일 재설정, $0.6/1M)
1. 가입: [Zhipu AI](https://open.bigmodel.cn/)
2. Coding Plan에서 API Key 받기
3. 대시보드 → API 키 추가:
- 제공자: `glm`
- API 키: `your-key`
**사용:** `glm/glm-4.7`
**프로 팁:** 코딩 계획은 1/7 비용으로 3배 할당량을 제공합니다! 매일 오전 10시에 초기화됩니다.
### MiniMax M2.1(5시간 재설정, $0.20/1M)
1. 가입: [MiniMax](https://www.minimax.io/)
2. API 키 받기
3. 대시보드 → API Key 추가
**사용:** `minimax/MiniMax-M2.1`
**프로 팁:** 긴 컨텍스트(100만 토큰)를 위한 가장 저렴한 옵션입니다!
### Kimi K2($9/월 정액)
1. 구독: [Moonshot AI](https://platform.moonshot.ai/)
2. API 키 받기
3. 대시보드 → API Key 추가
**사용:** `kimi/kimi-latest`
**프로 팁:** 1,000만 토큰에 대해 고정 $9/월 = $0.90/1M 유효 비용!
</details>
<details>
<summary><b>🆓 무료 제공업체(긴급 백업)</b></summary>
### iFlow(8개 무료 모델)
```bash
Dashboard → Connect iFlow
→ iFlow OAuth login
→ Unlimited usage
Models:
if/kimi-k2-thinking
if/qwen3-coder-plus
if/glm-4.7
if/minimax-m2
if/deepseek-r1
```
### Qwen(3개 무료 모델)
```bash
Dashboard → Connect Qwen
→ Device code authorization
→ Unlimited usage
Models:
qw/qwen3-coder-plus
qw/qwen3-coder-flash
```
### 키로(클로드 프리)
```bash
Dashboard → Connect Kiro
→ AWS Builder ID or Google/GitHub
→ Unlimited usage
Models:
kr/claude-sonnet-4.5
kr/claude-haiku-4.5
```
</details>
<details>
<summary><b>🎨 콤보 만들기</b></summary>
### 예시 1: 구독 최대화 → 저렴한 백업
```
Dashboard → Combos → Create New
Name: premium-coding
Models:
1. cc/claude-opus-4-6 (Subscription primary)
2. glm/glm-4.7 (Cheap backup, $0.6/1M)
3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
Use in CLI: premium-coding
```
### 예시 2: 무료 전용(비용 없음)
```
Name: free-combo
Models:
1. gc/gemini-3-flash-preview (180K free/month)
2. if/kimi-k2-thinking (unlimited)
3. qw/qwen3-coder-plus (unlimited)
Cost: $0 forever!
```
</details>
<details>
<summary><b>🔧 CLI 통합</b></summary>
### 커서 IDE
```
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from OmniRoute dashboard]
Model: cc/claude-opus-4-6
```
### 클로드 코드
원클릭 구성을 위해 대시보드의 **CLI 도구** 페이지를 사용하거나 `~/.claude/settings.json`을 수동으로 편집하세요.
### 코덱스 CLI
```bash
export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-omniroute-api-key"
codex "your prompt"
```
### 오픈클로
**옵션 1 - 대시보드(권장):**
```
Dashboard → CLI Tools → OpenClaw → Select Model → Apply
```
**옵션 2 — 수동:** `~/.openclaw/openclaw.json` 편집:
```json
{
"models": {
"providers": {
"omniroute": {
"baseUrl": "http://127.0.0.1:20128/v1",
"apiKey": "sk_omniroute",
"api": "openai-completions"
}
}
}
}
```
> **참고:** OpenClaw는 로컬 OmniRoute에서만 작동합니다. IPv6 확인 문제를 방지하려면 `localhost` 대신 `127.0.0.1`을 사용하세요.
### 클라인 / 계속 / RooCode
```
Settings → API Configuration:
Provider: OpenAI Compatible
Base URL: http://localhost:20128/v1
API Key: [from OmniRoute dashboard]
Model: if/kimi-k2-thinking
```
</details>
---
## 🧪 평가(Evals)
OmniRoute에는 골든 세트에 대해 LLM 응답 품질을 테스트하기 위한 내장 평가 프레임워크가 포함되어 있습니다. 대시보드의 **분석 → 평가**를 통해 액세스하세요.
### 내장 골든 세트
사전 로드된 "OmniRoute Golden Set"에는 다음을 다루는 10개의 테스트 사례가 포함되어 있습니다.
- 인사말, 수학, 지리, 코드 생성
- JSON 형식 준수, 번역, 마크다운
- 안전 거부(유해 콘텐츠), 카운팅, 부울 논리
### 평가 전략
| 전략 | 설명 | 예 |
| ---------- | -------------------------------------------------------------- | -------------------------------- |
| `exact` | 출력은 정확히 일치해야 합니다 | `"4"` |
| `contains` | 출력에는 하위 문자열(대소문자 구분 안 함)이 포함되어야 합니다. | `"Paris"` |
| `regex` | 출력은 정규식 패턴과 일치해야 합니다 | `"1.*2.*3"` |
| `custom` | 사용자 정의 JS 함수가 true/false를 반환합니다. | `(output) => output.length > 10` |
---
## 🐛 문제 해결
<details>
<summary><b>문제 해결 가이드를 확장하려면 클릭하세요</b></summary>
**"언어 모델이 메시지를 제공하지 않았습니다"**
- 공급자 할당량 소진 → 대시보드 할당량 추적기 확인
- 해결 방법: 콤보 폴백을 사용하거나 더 저렴한 계층으로 전환하세요.
**비율 제한**
- 구독 할당량 초과 → GLM/MiniMax로 대체
- 콤보 추가: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
**OAuth 토큰이 만료되었습니다**
- OmniRoute에 의해 자동 새로고침
- 문제가 지속되는 경우: Dashboard → Provider → Reconnect
**높은 비용**
- 대시보드 → 비용에서 사용 통계를 확인하세요.
- 기본 모델을 GLM/MiniMax로 전환
- 중요하지 않은 작업에는 무료 계층(Gemini CLI, iFlow)을 사용합니다.
**대시보드가 잘못된 포트에서 열립니다**
- `PORT=20128``NEXT_PUBLIC_BASE_URL=http://localhost:20128` 설정
**클라우드 동기화 오류**
- `BASE_URL`이 실행 중인 인스턴스를 가리키는지 확인합니다.
- `CLOUD_URL`이 예상 클라우드 엔드포인트를 가리키는지 확인하세요.
- `NEXT_PUBLIC_*` 값을 서버측 값과 일치하도록 유지합니다.
**첫 번째 로그인이 작동하지 않습니다**
- `.env`에서 `INITIAL_PASSWORD`을 확인하세요.
- 설정되지 않은 경우 대체 비밀번호는 `123456`입니다.
**요청 로그 없음**
- `.env``ENABLE_REQUEST_LOGS=true`을 설정합니다.
**OpenAI 호환 공급자에 대한 연결 테스트에서 "잘못됨"이 표시됩니다**
- 많은 공급자가 `/models` 엔드포인트를 노출하지 않습니다.
- OmniRoute v1.0.6+에는 채팅 완료를 통한 대체 검증이 포함되어 있습니다.
- 기본 URL에 `/v1` 접미사가 포함되어 있는지 확인하세요.
### 🔐 OAuth em Servidor Remoto(원격 OAuth 설정)
<a name="oauth-em-servidor-remoto"></a>
> **⚠️ VPS/Docker/remotor의 OmniRoute를 사용하는 경우 중요**
### OAuth에서 Antigravity/Gemini CLI를 원격 서비스로 사용하려면 어떻게 해야 합니까?
Os는 **반중력****Gemini CLI**를 인증하기 위해 **Google OAuth 2.0**을 입증했습니다. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo.
OAuth는 OmniRoute에 대한 신용 정보를 포함하지 않으므로 **`localhost`**에 대한 액세스 권한을 갖습니다. Quando você acessa o OmniRoute em um servidor remoto (예: `https://omniroute.meuservidor.com`), o Google rejeita autenticação com:
```
Error 400: redirect_uri_mismatch
```
### 해결책: 개인 정보 보호 OAuth 구성
Você precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com a URI do seu servidor.
#### 파쏘 아 파소
**1. Google Cloud Console에 액세스**
아브라: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
**2. Crie um novo OAuth 2.0 클라이언트 ID**
- em 클릭 **"+ 자격 증명 만들기"** → **"OAuth 클라이언트 ID"**
- 적용 분야: **"웹 애플리케이션"**
- 이름: escolha qualquer nome (예: `OmniRoute Remote`)
**3. 승인된 리디렉션 URI로서의 Adicione**
아니요 **"승인된 리디렉션 URI"**, 추가:
```
https://seu-servidor.com/callback
```
> `seu-servidor.com` pelo domínio 또는 IP do seu servidor로 대체합니다(필요한 포트 포함, 예: `http://45.33.32.156:20128/callback`).
**4. 사본을 자격 증명으로 저장**
Após criar, o Google morerá o **클라이언트 ID** e o **클라이언트 비밀번호**.
**5. 다양한 주변 환경으로 구성**
`.env`(Docker의 주변 환경에 따라 다름)이 없습니다.
```bash
# Para Antigravity:
ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
# Para Gemini CLI:
GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
```
**6. Reinicie 또는 OmniRoute**
```bash
# Se usando npm:
npm run dev
# Se usando Docker:
docker restart omniroute
```
**7. Tente conectar novamente**
대시보드 → 공급자 → Antigravity(또는 Gemini CLI) → OAuth
Agora는 `https://seu-servidor.com/callback` 및 자동 기능에 대한 Google 리디렉션을 수정합니다.
---
### 임시 해결 방법(sem configurar credenciais próprias)
Se não quiser criar credenciais próprias agora, ainda é possível usar o fluxo **manual de URL**:
1. OmniRoute는 Google 자동 생성 URL을 확인합니다.
2. Após você autorizar, o Google tentará redirectionar para `localhost` (que falha no servidor remoto)
3. **URL 복사 완료** da barra de endereço do seu browser (mesmo que a página não carregue)
4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute
5. Clique em **"연결"**
> 이 해결 방법은 URL을 통해 자동으로 코드를 확인하거나 독립적으로 리디렉션할 수 있도록 하는 것입니다.
</details>
---
## 🛠️ 기술 스택
- **런타임**: Node.js 1822 LTS(⚠️ Node.js 24+는 **지원되지 않습니다**`better-sqlite3` 네이티브 바이너리는 호환되지 않습니다)
- **언어**: TypeScript 5.9 — `src/``open-sse/`에서 **100% TypeScript**(v1.0.6)
- **프레임워크**: Next.js 16 + React 19 + Tailwind CSS 4
- **데이터베이스**: LowDB(JSON) + SQLite(도메인 상태 + 프록시 로그)
- **스트리밍**: 서버에서 보낸 이벤트(SSE)
- **인증**: OAuth 2.0(PKCE) + JWT + API 키
- **테스트**: Node.js 테스트 실행기(368개 이상의 단위 테스트)
- **CI/CD**: GitHub Actions(자동 npm 게시 + 출시 시 Docker Hub)
- **웹사이트**: [omniroute.online](https://omniroute.online)
- **패키지**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
- **도커**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
- **복원력**: 회로 차단기, 지수 백오프, 천둥 방지 무리, TLS 스푸핑
---
## 📖 문서
| 문서 | 설명 |
| -------------------------------------------- | ------------------------------------------ |
| [User Guide](docs/USER_GUIDE.md) | 공급자, 콤보, CLI 통합, 배포 |
| [API Reference](docs/API_REFERENCE.md) | 예제가 포함된 모든 엔드포인트 |
| [Troubleshooting](docs/TROUBLESHOOTING.md) | 일반적인 문제 및 해결 방법 |
| [Architecture](docs/ARCHITECTURE.md) | 시스템 아키텍처 및 내부 |
| [Contributing](CONTRIBUTING.md) | 개발 설정 및 지침 |
| [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0 사양 |
| [Security Policy](SECURITY.md) | 취약점 보고 및 보안 관행 |
| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | 전체 가이드: VM + nginx + Cloudflare 설정 |
| [Features Gallery](docs/FEATURES.md) | 스크린샷을 포함한 시각적 대시보드 둘러보기 |
### 📸 대시보드 미리보기
<details>
<summary><b>대시보드 스크린샷을 보려면 클릭하세요.</b></summary>
| 페이지 | 스크린샷 |
| -------------- | ------------------------------------------------- |
| **공급자** | ![Providers](docs/screenshots/01-providers.png) |
| **콤보** | ![Combos](docs/screenshots/02-combos.png) |
| **분석** | ![Analytics](docs/screenshots/03-analytics.png) |
| **건강** | ![Health](docs/screenshots/04-health.png) |
| **번역가** | ![Translator](docs/screenshots/05-translator.png) |
| **설정** | ![Settings](docs/screenshots/06-settings.png) |
| **CLI 도구** | ![CLI Tools](docs/screenshots/07-cli-tools.png) |
| **사용 로그** | ![Usage](docs/screenshots/08-usage.png) |
| **엔드포인트** | ![Endpoint](docs/screenshots/09-endpoint.png) |
</details>
---
## 🗺️ 로드맵
OmniRoute에는 여러 개발 단계에 걸쳐 **210개 이상의 기능이 계획되어 있습니다**. 주요 영역은 다음과 같습니다.
| 카테고리 | 계획된 기능 | 하이라이트 |
| --------------------------- | ----------- | ------------------------------------------------------------------------------ |
| 🧠 **라우팅 및 인텔리전스** | 25세 이상 | 최저 대기 시간 라우팅, 태그 기반 라우팅, 실행 전 할당량, P2C 계정 선택 |
| 🔒 **보안 및 규정 준수** | 20세 이상 | SSRF 강화, 자격 증명 클로킹, 엔드포인트당 속도 제한, 관리 키 범위 지정 |
| 📊 **관측성** | 15세 이상 | OpenTelemetry 통합, 실시간 할당량 모니터링, 모델별 비용 추적 |
| 🔄 **공급자 통합** | 20세 이상 | 동적 모델 레지스트리, 공급자 쿨다운, 다중 계정 Codex, Copilot 할당량 구문 분석 |
| ⚡ **성능** | 15세 이상 | 듀얼 캐시 레이어, 프롬프트 캐시, 응답 캐시, 스트리밍 Keepalive, 배치 API |
| 🌐 **생태계** | 10세 이상 | WebSocket API, 구성 핫 리로드, 분산 구성 저장소, 상용 모드 |
### 🔜 출시 예정
- 🔗 **OpenCode 통합** — OpenCode AI 코딩 IDE에 대한 기본 공급자 지원
- 🔗 **TRAE 통합** — TRAE AI 개발 프레임워크를 완벽하게 지원
- 📦 **Batch API** — 대량 요청에 대한 비동기식 일괄 처리
- 🎯 **태그 기반 라우팅** — 사용자 정의 태그 및 메타데이터를 기반으로 요청 라우팅
- 💰 **최저 비용 전략** — 가장 저렴한 제공업체를 자동으로 선택합니다.
> 📝 [link](docs/new-features/)에서 사용 가능한 전체 기능 사양(217개 세부 사양)
---
## 📧 지원
> 💬 **커뮤니티에 가입하세요!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — 도움을 받고, 팁을 공유하고, 최신 소식을 받아보세요.
- **웹사이트**: [omniroute.online](https://omniroute.online)
- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
- **문제**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
- **원래 프로젝트**: [9router by decolua](https://github.com/decolua/9router)
---
## 👥 기여자
[![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
### 기여 방법
1. 저장소 포크
2. 기능 분기 생성(`git checkout -b feature/amazing-feature`)
3. 변경 사항을 커밋합니다(`git commit -m 'Add amazing feature'`).
4. 브랜치(`git push origin feature/amazing-feature`)로 푸시
5. 풀 리퀘스트 열기
자세한 지침은 [CONTRIBUTING.md](CONTRIBUTING.md)을 참조하세요.
### 새 버전 출시
```bash
# Create a release — npm publish happens automatically
gh release create v1.0.6 --title "v1.0.6" --generate-notes
```
---
## 📊 스타 히스토리
<a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
</picture>
</a>
---
## 🙏 감사의 말씀
이 포크에 영감을 준 원본 프로젝트인 **[decolua](https://github.com/decolua)**의 **[9router](https://github.com/decolua/9router)**에게 특별히 감사드립니다. OmniRoute는 추가 기능, 다중 모드 API 및 전체 TypeScript 재작성을 통해 놀라운 기반을 구축합니다.
이 JavaScript 포트에 영감을 준 최초의 Go 구현인 **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)**에게 특별히 감사드립니다.
---
## 📄 라이센스
MIT 라이선스 - 자세한 내용은 [LICENSE](LICENSE)을 참조하세요.
---
<div align="center">
<sub> 연중무휴</sub>을 코딩하는 개발자를 위해 ❤️으로 구축됨
<br/>
<sub><a href="https://omniroute.online">omniroute.online</a></sub>
</div>