# ๐ OmniRoute โ ๋ฌด๋ฃ AI ๊ฒ์ดํธ์จ์ด
### ์ฝ๋ฉ์ ๋ฉ์ถ์ง ๋ง์ธ์. ์๋ ํด๋ฐฑ์ ํตํด **๋ฌด๋ฃ ๋ฐ ์ ๊ฐํ AI ๋ชจ๋ธ**๋ก ์ค๋งํธ ๋ผ์ฐํ
ํฉ๋๋ค.
_๋ฒ์ฉ API ํ๋ก์ โ ํ๋์ ์๋ํฌ์ธํธ, 67๊ฐ ์ด์์ ๊ณต๊ธ์, ๊ฐ๋ ์ค์ง ์๊ฐ ์์. ์ด์ **MCP ๋ฐ A2A** ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์
์ด ๊ฐ๋ฅํฉ๋๋ค._
**์ฑํ
์๋ฃ โข ์๋ฒ ๋ฉ โข ์ด๋ฏธ์ง ์์ฑ โข ๋น๋์ค โข ์์
โข ์ค๋์ค โข ์์ ์ฌ์ง์ โข **์น ๊ฒ์** โข MCP ์๋ฒ โข A2A ํ๋กํ ์ฝ โข 100% TypeScript**
---
[](https://www.npmjs.com/package/omniroute)
[](https://www.npmjs.com/package/omniroute)
[](https://hub.docker.com/r/diegosouzapw/omniroute)
[](https://hub.docker.com/r/diegosouzapw/omniroute)
[](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
[](https://omniroute.online)
[](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)](docs/i18n/pt-BR/README.md) | ๐ช๐ธ [Espaรฑol](docs/i18n/es/README.md) | ๐ซ๐ท [Franรงais](docs/i18n/fr/README.md) | ๐ฎ๐น [Italiano](docs/i18n/it/README.md) | ๐ท๐บ [ะ ัััะบะธะน](docs/i18n/ru/README.md) | ๐จ๐ณ [ไธญๆ (็ฎไฝ)](docs/i18n/zh-CN/README.md) | ๐ฉ๐ช [Deutsch](docs/i18n/de/README.md) | ๐ฎ๐ณ [เคนเคฟเคจเฅเคฆเฅ](docs/i18n/in/README.md) | ๐น๐ญ [เนเธเธข](docs/i18n/th/README.md) | ๐บ๐ฆ [ะฃะบัะฐัะฝััะบะฐ](docs/i18n/uk-UA/README.md) | ๐ธ๐ฆ [ุงูุนุฑุจูุฉ](docs/i18n/ar/README.md) | ๐ฏ๐ต [ๆฅๆฌ่ช](docs/i18n/ja/README.md) | ๐ป๐ณ [Tiแบฟng Viแปt](docs/i18n/vi/README.md) | ๐ง๐ฌ [ะัะปะณะฐััะบะธ](docs/i18n/bg/README.md) | ๐ฉ๐ฐ [Dansk](docs/i18n/da/README.md) | ๐ซ๐ฎ [Suomi](docs/i18n/fi/README.md) | ๐ฎ๐ฑ [ืขืืจืืช](docs/i18n/he/README.md) | ๐ญ๐บ [Magyar](docs/i18n/hu/README.md) | ๐ฎ๐ฉ [Bahasa Indonesia](docs/i18n/id/README.md) | instagram [ํ๊ตญ์ด](docs/i18n/ko/README.md) | ๐ฒ๐พ [Bahasa Melayu](docs/i18n/ms/README.md) | ๐ณ๐ฑ [Nederlands](docs/i18n/nl/README.md) | ๐ณ๐ด [Norsk](docs/i18n/no/README.md) | ๐ต๐น [Portuguรชs (Portugal)](docs/i18n/pt/README.md) | ๐ท๐ด [Romรขnฤ](docs/i18n/ro/README.md) | ๐ต๐ฑ [Polski](docs/i18n/pl/README.md) | ๐ธ๐ฐ [Slovenฤina](docs/i18n/sk/README.md) | ๐ธ๐ช [Svenska](docs/i18n/sv/README.md) | ๐ต๐ญ [Filipino](docs/i18n/phi/README.md) | ๐จ๐ฟ [ฤeลกtina](docs/i18n/cs/README.md)
---
## ๐ v3.0.0์ ์๋ก์ด ๊ธฐ๋ฅ
> **Upgrading from v2.9.5?** โ See the [full CHANGELOG](CHANGELOG.md#300--2026-03-22-release-candidate--not-yet-merged-to-main) for all changes.
| ๋ฉด์ | ๋ณ๊ฒฝ |
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| ๐ **CodeQL ๋ณด์** | 10๊ฐ ์ด์์ CodeQL ๊ฒฝ๊ณ ์์ : ๋คํญ์ ์ฌ์คํ, ์์ ํ์ง ์์ ๋ฌด์์์ฑ, ์
ธ ์ฃผ์
์์ |
| โ
**๊ฒฝ๋ก ๊ฒ์ฆ** | ์ด์ Zod ์คํค๋ง + `validateBody()` โ CI `check:route-validation:t06` ํต๊ณผ๋ก ๊ฒ์ฆ๋ ๋ชจ๋ 176๊ฐ API ๊ฒฝ๋ก |
| ๐ **omniModel ํ๊ทธ ์ ์ถ** | ๋ด๋ถ `` ํ๊ทธ๊ฐ ๋ ์ด์ SSE ์คํธ๋ฆฌ๋ฐ ์๋ต์์ ํด๋ผ์ด์ธํธ๋ก ๋์ถ๋์ง ์์ต๋๋ค(#585) |
| ๐ **๋ฑ๋ก๋ ํค API** | ๊ณต๊ธ์/๊ณ์ ๋ณ ํ ๋น๋ ์ ์ฉ, ๋ฉฑ๋ฑ์ฑ, SHA-256 ์ ์ฅ์ ๋ฐ ์ ํ์ GitHub ๋ฌธ์ ๋ณด๊ณ ๊ธฐ๋ฅ์ ๊ฐ์ถ `POST /api/v1/registered-keys`์ ํตํด API ํค ์๋ ํ๋ก๋น์ ๋ |
| ๐๏ธ **Scoped API Key Reveal** ๐ | Opt-in recovery of API keys via `ALLOW_API_KEY_REVEAL` |
| ๐จ **๊ณต๊ธ์ ์์ด์ฝ** | PNG๊ฐ ํฌํจ๋ `@lobehub/icons`(SVG)์ ํตํ 130๊ฐ ์ด์์ ๊ณต๊ธ์ ๋ก๊ณ โ ์ผ๋ฐ ํด๋ฐฑ ์ฒด์ธ |
| ๐ **๋ชจ๋ธ ์๋ ๋๊ธฐํ** | ๋ด์ฅ ๋ฐ ์ฌ์ฉ์ ์ ์ OpenAI ํธํ ๊ณต๊ธ์์ ๋ํ ๋ชจ๋ธ ๋ชฉ๋ก์ ๋๊ธฐํํ๊ธฐ ์ํ 24์๊ฐ ์ค์ผ์ค๋ฌ ๋ฐ ์๋ UI ํ ๊ธ |
| ๐ **์คํ์ฝ๋ Zen/Go** | PR #530์ ํตํ @kang-heewon์ ๋ ๊ฐ์ง ์๋ก์ด ์ ๊ณต์: `OpencodeExecutor`๋ฅผ ํตํ ๋ฌด๋ฃ ๋ฑ๊ธ + ๊ตฌ๋
๋ฑ๊ธ |
| ๐ **Gemini CLI OAuth** | Docker์ `GEMINI_OAUTH_CLIENT_SECRET`์ด ๋๋ฝ๋ ๊ฒฝ์ฐ ์คํ ๊ฐ๋ฅํ ์ค๋ฅ(์ํธ์ ์ธ Google ์ค๋ฅ์) |
| ๐ **OpenCode ๊ตฌ์ฑ** | `saveOpenCodeConfig()`์ ์ด์ TOML์ `XDG_CONFIG_HOME`์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋๋ค. |
| ๐ **๊ณ ์ ๋ ๋ชจ๋ธ ์ฌ์ ์** | `body.model`์ด ์ปจํ
์คํธ ์บ์ ๋ณดํธ์์ `pinnedModel`๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋จ |
| ๐ **์ฝ๋ฑ์ค/ํด๋ก๋ ๋ฃจํ** | `tool_result` ๋ธ๋ก์ด ์ด์ ๋ฌดํ ๋ฃจํ๋ฅผ ์ค์งํ๊ธฐ ์ํด ํ
์คํธ๋ก ๋ณํ๋์์ต๋๋ค. |
| ๐ **๋ก๊ทธ์ธ ๋ฆฌ๋๋ ์
** | ๋น๋ฐ๋ฒํธ ์ค์ ์ ๊ฑด๋๋ด ํ ๋ก๊ทธ์ธ์ด ๋ ์ด์ ์ ์ง๋์ง ์์ต๋๋ค. |
| ๐ **Windows ๊ฒฝ๋ก** | MSYS2/Git-Bash ๊ฒฝ๋ก(`/c/...`)๊ฐ ์๋์ผ๋ก `C:\...`๋ก ์ ๊ทํ๋จ |
---
## ๐ผ๏ธ ๋ฉ์ธ ๋์๋ณด๋
---
## ๐ธ ๋์๋ณด๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
Click to see dashboard screenshots
| ํ์ด์ง | Screenshot |
| -------------- | ------------------------------------------------- |
| **Providers** |  |
| **์ฝค๋ณด** |  |
| **๋ถ์** |  |
| **๊ฑด๊ฐ** |  |
| **๋ฒ์ญ๊ฐ** |  |
| **์ค์ ** |  |
| **CLI ๋๊ตฌ** |  |
| **์ฌ์ฉ ๋ก๊ทธ** |  |
| **์๋ํฌ์ธํธ** |  |
---
### ๐ค Free AI Provider for your favorite coding agents
_Connect any AI-powered IDE or CLI tool through OmniRoute โ free API gateway for unlimited coding._
๐ก ๋ชจ๋ ์์ด์ ํธ๋ http://localhost:20128/v1 ๋๋ http://cloud.omniroute.online/v1์ ํตํด ์ฐ๊ฒฐ๋ฉ๋๋ค. โ ํ๋์ ๊ตฌ์ฑ, ๋ฌด์ ํ ๋ชจ๋ธ ๋ฐ ํ ๋น๋
---
## ๐ค ์ OmniRoute์ธ๊ฐ์?
**๋์ ๋ญ๋นํ์ง ๋ง๊ณ ํ๋์ ๋๋ฌํ์ง ๋ง์ธ์.**
-
Subscription quota expires unused every month
-
Rate limits stop you mid-coding
-
Expensive APIs ($20-50/month per provider)
-
Manual switching between providers
**OmniRoute๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.**
- โ
**Maximize subscriptions** - Track quota, use every bit before reset
- โ
**Auto fallback** - Subscription โ API Key โ Cheap โ Free, zero downtime
- โ
**Multi-account** - Round-robin between accounts per provider
- โ
**Universal** - Works with Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, any CLI tool
---
## ๐ง ์ง์
> ๐ฌ **Join our community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) โ Get help, share tips, and stay updated.
- **์น์ฌ์ดํธ**: [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)
- **Contributing**: See [CONTRIBUTING.md](CONTRIBUTING.md), open a PR, or pick a `good first issue`
- **์๋ ํ๋ก์ ํธ**: [9router by decolua](https://github.com/decolua/9router)
### ๐ ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํ์๋์?
When opening an issue, please run the system-info command and attach the generated file:
```bash
npm run system-info
```
๊ทธ๋ฌ๋ฉด Node.js ๋ฒ์ , OmniRoute ๋ฒ์ , OS ์ธ๋ถ ์ ๋ณด, ์ค์น๋ CLI ๋๊ตฌ(qoder, gemini, claude, codex, antigravity, droid ๋ฑ), Docker/PM2 ์ํ, ์์คํ
ํจํค์ง ๋ฑ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ์ฌํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ํญ๋ชฉ์ด ํฌํจ๋ `system-info.txt`์ด ์์ฑ๋ฉ๋๋ค. GitHub ๋ฌธ์ ์ ์ง์ ํ์ผ์ ์ฒจ๋ถํ์ธ์.
---
## ๐ ์๋ ๋ฐฉ์
```
โโโโโโโโโโโโโโโ
โ 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] Qoder, Qwen, Kiro (unlimited)
Result: Never stop coding, minimal cost
```
---
## ๐ฏ What OmniRoute Solves โ 30 Real Pain Points & Use Cases
> **AI ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฐ๋ฐ์๋ ๋งค์ผ ์ด๋ฌํ ๋ฌธ์ ์ ์ง๋ฉดํฉ๋๋ค.** OmniRoute๋ ๋น์ฉ ์ด๊ณผ๋ถํฐ ์ง์ญ์ ์ฐจ๋จ, ์์๋ OAuth ํ๋ฆ๋ถํฐ ํ๋กํ ์ฝ ์ด์ ๋ฐ ๊ธฐ์
๊ด์ฐฐ ๊ฐ๋ฅ์ฑ๊น์ง ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ตฌ์ถ๋์์ต๋๋ค.
๐ธ 1. "๋น์ผ ๊ตฌ๋
๋น์ฉ์ ์ง๋ถํ์ง๋ง ์ฌ์ ํ ํ๋ ๋๋ฌธ์ ์ค๋จ๋ฉ๋๋ค."
Developers pay $20โ200/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.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **์ค๋งํธ 4๊ณ์ธต ํด๋ฐฑ** โ ๊ตฌ๋
ํ ๋น๋์ด ์์ง๋๋ฉด ์๋ ๊ฐ์
์์ด ์๋์ผ๋ก API ํค โ ์ ๋ ดํจ โ ๋ฌด๋ฃ๋ก ๋ฆฌ๋๋ ์
๋ฉ๋๋ค.
- **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
- **์ฌ์ฉ์ ์ ์ ์ฝค๋ณด** โ 6๊ฐ์ง ๊ท ํ ์ ๋ต(์ฑ์ฐ๊ธฐ ์ฐ์ , ๋ผ์ด๋ ๋ก๋น, P2C, ๋ฌด์์, ์ต์ ์ฌ์ฉ, ๋น์ฉ ์ต์ ํ)์ ๊ฐ์ถ ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ํด๋ฐฑ ์ฒด์ธ
- **Codex Business Quotas** โ Business/Team workspace quota monitoring directly in the dashboard
๐ 2. "I need to use multiple providers but each has a different API"
OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. ๊ฐ๋ฐ์๊ฐ ๋ค๋ฅธ ์ ๊ณต์
์ฒด์ ๋ชจ๋ธ์ ํ
์คํธํ๊ฑฐ๋ ์ด๋ค ์ฌ์ด์์ ๋์ฒดํ๋ ค๋ ๊ฒฝ์ฐ SDK๋ฅผ ์ฌ๊ตฌ์ฑํ๊ณ , ์๋ํฌ์ธํธ๋ฅผ ๋ณ๊ฒฝํ๊ณ , ํธํ๋์ง ์๋ ํ์์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. Custom providers (FriendLI, NIM) have non-standard model endpoints.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **Unified Endpoint** โ A single `http://localhost:20128/v1` serves as proxy for all 67+ providers
- **Format Translation** โ Automatic and transparent: OpenAI โ Claude โ Gemini โ Responses API
- **์๋ต ์ญ์ ** โ OpenAI SDK v1.83+๋ฅผ ์์์ํค๋ ๋นํ์ค ํ๋(`x_groq`, `usage_breakdown`, `service_tier`)๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- **Role Normalization** โ Converts `developer` โ `system` for non-OpenAI providers; `system` โ `user` for GLM/ERNIE
- **Think Tag Extraction** โ Extracts `` 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
๐ 3. "My AI provider blocks my region/country"
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.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **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
- **๐ CLI ์ง๋ฌธ ์ผ์น** โ ๊ธฐ๋ณธ CLI ๋ฐ์ด๋๋ฆฌ ์๋ช
๊ณผ ์ผ์นํ๋๋ก ํค๋์ ๋ณธ๋ฌธ ํ๋์ ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ ๊ณ์ ํ๋๊ทธ ์ํ์ ๋ํญ ์ค์
๋๋ค. The proxy IP is preserved โ you get both stealth **and** IP masking simultaneously
๐ 4. "I want to use AI for coding but I have no money"
Not everyone can pay $20โ200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **๋ฌด๋ฃ ๊ณ์ธต ์ ๊ณต์ ๋ด์ฅ** โ 100% ๋ฌด๋ฃ ์ ๊ณต์์ ๋ํ ๊ธฐ๋ณธ ์ง์: Qoder(OAuth๋ฅผ ํตํ 5๊ฐ์ ๋ฌด์ ํ ๋ชจ๋ธ: kimi-k2-thinking, qwen3-coder-plus, deepseek-r1, minimax-m2, kimi-k2), Qwen(4๊ฐ์ ๋ฌด์ ํ ๋ชจ๋ธ: qwen3-coder-plus, qwen3-coder-flash, qwen3-coder-next, Vision-model), Kiro (Claude + AWS Builder ID for free), Gemini CLI (180K tokens/month free)
- **Ollama Cloud** โ Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; `ollamacloud/` ์ ๋์ฌ ์ฌ์ฉ
- **Free-Only Combos** โ Chain `gc/gemini-3-flash โ if/kimi-k2-thinking โ qw/qwen3-coder-plus` = $0/month with zero downtime
- **NVIDIA NIM ๋ฌด๋ฃ ์ก์ธ์ค** โ ~40RPM ๊ฐ๋ฐ - build.nvidia.com์์ 70๊ฐ ์ด์์ ๋ชจ๋ธ์ ์์ํ ๋ฌด๋ฃ ์ก์ธ์ค(ํฌ๋ ๋ง์์ ์์ ์๋ ์ ํ์ผ๋ก ์ ํ)
- **Cost Optimized Strategy** โ Routing strategy that automatically chooses the cheapest available provider
๐ 5. "I need to protect my AI gateway from unauthorized access"
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.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **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
๐ 6. "My provider went down and I lost my coding flow"
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.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **๋ชจ๋ธ๋ณ ํ๋ก ์ฐจ๋จ๊ธฐ** โ ๊ตฌ์ฑ ๊ฐ๋ฅํ ์๊ณ๊ฐ ๋ฐ ์ฟจ๋ค์ด(๋ซํ/์ด๋ฆผ/๋ฐ์ด๋ฆผ)์ ํตํ ์๋ ์ด๊ธฐ/๋ซ๊ธฐ, ๊ณ๋จ์ ๋ธ๋ก ๋ฐฉ์ง๋ฅผ ์ํ ๋ชจ๋ธ๋ณ ๋ฒ์ ์ง์
- **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
๐ง 7. "Configuring each AI tool is tedious and repetitive"
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.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **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 67+ providers
๐ 8. "Managing OAuth tokens from multiple providers is hell"
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. LAN/VPS์ OAuth๋ ํนํ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **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, Qoder
- **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
๐ 9. "I don't know how much I'm spending or where"
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. ์์์น ๋ชปํ ๋น์ฉ์ด ์์ผ ์ ์์ต๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **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
๐ 10. "AI ํธ์ถ์์๋ ์ค๋ฅ ๋ฐ ๋ฌธ์ ๋ฅผ ์ง๋จํ ์ ์์ต๋๋ค."
ํธ์ถ์ด ์คํจํ๋ฉด ๊ฐ๋ฐ์๋ ์๋ ์ ํ, ๋ง๋ฃ๋ ํ ํฐ, ์๋ชป๋ ํ์ ๋๋ ๊ณต๊ธ์ ์ค๋ฅ์ธ์ง ์ ์ ์์ต๋๋ค. ์ฌ๋ฌ ํฐ๋ฏธ๋์ ๊ฑธ์ณ ์กฐ๊ฐํ๋ ๋ก๊ทธ. ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด ๋๋ฒ๊น
์ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช๊ฒ ๋ฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **ํตํฉ ๋ก๊ทธ ๋์๋ณด๋** โ ํญ 4๊ฐ: ์์ฒญ ๋ก๊ทธ, ํ๋ก์ ๋ก๊ทธ, ๊ฐ์ฌ ๋ก๊ทธ, ์ฝ์
- **์ฝ์ ๋ก๊ทธ ๋ทฐ์ด** โ ์์์ผ๋ก ๊ตฌ๋ถ๋ ๋ ๋ฒจ, ์๋ ์คํฌ๋กค, ๊ฒ์, ํํฐ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ค์๊ฐ ํฐ๋ฏธ๋ ์คํ์ผ ๋ทฐ์ด
- **SQLite ํ๋ก์ ๋ก๊ทธ** โ ์๋ฒ๋ฅผ ๋ค์ ์์ํด๋ ์ง์๋๋ ์๊ตฌ ๋ก๊ทธ
- **๋ฒ์ญ๊ธฐ ํ๋ ์ด๊ทธ๋ผ์ด๋** โ 4๊ฐ์ง ๋๋ฒ๊น
๋ชจ๋: ํ๋ ์ด๊ทธ๋ผ์ด๋(ํ์ ๋ฒ์ญ), ์ฑํ
ํ
์คํฐ(์๋ณต), ํ
์คํธ ๋ฒค์น(์ผ๊ด), ๋ผ์ด๋ธ ๋ชจ๋ํฐ(์ค์๊ฐ)
- **์๊ฒฉ ์ธก์ ์์ฒญ** โ p50/p95/p99 ๋๊ธฐ ์๊ฐ + X-์์ฒญ-ID ์ถ์
- **ํ์ ์ ํตํ ํ์ผ ๊ธฐ๋ฐ ๋ก๊น
** โ ์ฝ์ ์ธํฐ์
ํฐ๋ ํฌ๊ธฐ ๊ธฐ๋ฐ ํ์ ์ ํตํด ๋ชจ๋ ๊ฒ์ JSON ๋ก๊ทธ์ ์บก์ฒํฉ๋๋ค.
- **์์คํ
์ ๋ณด ๋ณด๊ณ ์** โ `npm run system-info`์ ์ ์ฒด ํ๊ฒฝ(๋
ธ๋ ๋ฒ์ , OmniRoute ๋ฒ์ , OS, CLI ๋๊ตฌ, Docker/PM2 ์ํ)์์ `system-info.txt`์ ์์ฑํฉ๋๋ค. ์ฆ๊ฐ์ ์ธ ๋ถ๋ฅ๋ฅผ ์ํด ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํ ๋ ์ฒจ๋ถํ์ธ์.
๐๏ธ 11. "๊ฒ์ดํธ์จ์ด ๋ฐฐํฌ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ณต์กํฉ๋๋ค."
๋ค์ํ ํ๊ฒฝ(๋ก์ปฌ, VPS, Docker, ํด๋ผ์ฐ๋)์์ AI ํ๋ก์๋ฅผ ์ค์น, ๊ตฌ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ๋
ธ๋ ์ง์ฝ์ ์
๋๋ค. ํ๋์ฝ๋ฉ๋ ๊ฒฝ๋ก, ๋๋ ํฐ๋ฆฌ์ `EACCES`, ํฌํธ ์ถฉ๋, ํฌ๋ก์ค ํ๋ซํผ ๋น๋์ ๊ฐ์ ๋ฌธ์ ๋ก ์ธํด ๋ง์ฐฐ์ด ๊ฐ์ค๋ฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **npm ์ ์ญ ์ค์น** โ `npm install -g omniroute && omniroute` โ ์๋ฃ
- **Docker ๋ค์ค ํ๋ซํผ** โ AMD64 + ARM64 ๊ธฐ๋ณธ(Apple Silicon, AWS Graviton, Raspberry Pi)
- **Docker Compose ํ๋กํ** โ `base`(CLI ๋๊ตฌ ์์) ๋ฐ `cli`(Claude Code, Codex, OpenClaw ํฌํจ)
- **Electron ๋ฐ์คํฌํ ์ฑ** โ ์์คํ
ํธ๋ ์ด, ์๋ ์์, ์คํ๋ผ์ธ ๋ชจ๋๋ฅผ ๊ฐ์ถ Windows/macOS/Linux์ฉ ๊ธฐ๋ณธ ์ฑ
- **๋ถํ ํฌํธ ๋ชจ๋** โ ๊ณ ๊ธ ์๋๋ฆฌ์ค(์ญ๋ฐฉํฅ ํ๋ก์, ์ปจํ
์ด๋ ๋คํธ์ํน)๋ฅผ ์ํ ๋ณ๋์ ํฌํธ์ ์๋ API ๋ฐ ๋์๋ณด๋
- **ํด๋ผ์ฐ๋ ๋๊ธฐํ** โ Cloudflare Workers๋ฅผ ํตํด ์ฅ์น ๊ฐ ๊ตฌ์ฑ ๋๊ธฐํ
- **DB ๋ฐฑ์
** โ ๋ชจ๋ ์ค์ ์ ์๋ ๋ฐฑ์
, ๋ณต์, ๋ด๋ณด๋ด๊ธฐ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ
๐ 12. "์ธํฐํ์ด์ค๋ ์์ด๋ก๋ง ์ ๊ณต๋๋ฉฐ ์ฐ๋ฆฌ ํ์ ์์ด๋ฅผ ๊ตฌ์ฌํ์ง ์์ต๋๋ค."
์์ด๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ตญ๊ฐ, ํนํ ๋ผํด ์๋ฉ๋ฆฌ์นด, ์์์, ์ ๋ฝ์ ํ์ ์์ด ์ ์ฉ ์ธํฐํ์ด์ค๋ก ์ธํด ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. ์ธ์ด ์ฅ๋ฒฝ์ผ๋ก ์ธํด ์ฑํ์ด ์ค์ด๋ค๊ณ ๊ตฌ์ฑ ์ค๋ฅ๊ฐ ์ฆ๊ฐํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **๋์๋ณด๋ i18n โ 30๊ฐ ์ธ์ด** โ ํ๊ตญ์ด, ์๋์ด, ๋ถ๊ฐ๋ฆฌ์์ด, ๋ด๋งํฌ์ด, ๋
์ผ์ด, ์คํ์ธ์ด, ํ๋๋์ด, ํ๋์ค์ด, ํ๋ธ๋ฆฌ์ด, ํ๋์ด, ํ๊ฐ๋ฆฌ์ด, ์ธ๋๋ค์์์ด, ์ดํ๋ฆฌ์์ด, ์ผ๋ณธ์ด, ๋ง๋ ์ด์ด, ๋ค๋๋๋์ด, ๋
ธ๋ฅด์จ์ด์ด, ํด๋๋์ด, ํฌ๋ฅดํฌ๊ฐ์ด(PT/BR), ๋ฃจ๋ง๋์์ด, ๋ฌ์์์ด, ์ฌ๋ก๋ฐํค์์ด, ์ค์จ๋ด์ด, ํ๊ตญ์ด, ์ฐํฌ๋ผ์ด๋์ด, ๋ฒ ํธ๋จ์ด, ์ค๊ตญ์ด, ํ๋ฆฌํ์ด, ์์ด๋ฅผ ํฌํจํ 500๊ฐ ์ด์์ ํค ๋ฒ์ญ๋จ
- **RTL ์ง์** โ ์๋์ด ๋ฐ ํ๋ธ๋ฆฌ์ด์ ๋ํด ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ง์
- **๋ค๊ตญ์ด README** โ 30๊ฐ์ ์์ ํ ๋ฌธ์ ๋ฒ์ญ
- **์ธ์ด ์ ํ๊ธฐ** โ ์ค์๊ฐ ์ ํ์ ์ํ ํค๋์ ์ง๊ตฌ๋ณธ ์์ด์ฝ
๐ 13. "์ฑํ
์ด์์ ๊ฒ์ด ํ์ํฉ๋๋ค. ์๋ฒ ๋ฉ, ์ด๋ฏธ์ง, ์ค๋์ค๊ฐ ํ์ํฉ๋๋ค."
AI๋ ๋จ์ํ ์ฑํ
์์ฑ์ด ์๋๋๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ , ์ค๋์ค๋ฅผ ๊ธฐ๋กํ๊ณ , RAG์ฉ ์๋ฒ ๋ฉ์ ๋ง๋ค๊ณ , ๋ฌธ์ ์์๋ฅผ ๋ค์ ์ง์ ํ๊ณ , ์ฝํ
์ธ ๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค. ๊ฐ API์๋ ์๋ก ๋ค๋ฅธ ์๋ํฌ์ธํธ์ ํ์์ด ์์ต๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **์๋ฒ ๋ฉ** โ `/v1/embeddings`(6๊ฐ ๊ณต๊ธ์ ๋ฐ 9๊ฐ ์ด์์ ๋ชจ๋ธ ํฌํจ)
- **์ด๋ฏธ์ง ์์ฑ** โ 10๊ฐ ๊ณต๊ธ์์ 20๊ฐ ์ด์์ ๋ชจ๋ธ(OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)์ ๊ฐ์ถ `/v1/images/generations`
- **ํ
์คํธ-๋น๋์ค** โ `/v1/videos/generations` โ ComfyUI(AnimateDiff, SVD) ๋ฐ SD WebUI
- **ํ
์คํธ-์์
** โ `/v1/music/generations` โ ComfyUI(์์ ์ ์ธ ์ค๋์ค ์คํ, MusicGen)
- **์ค๋์ค ์ ์ฌ** โ `/v1/audio/transcriptions` โ Whisper + Nvidia NIM, HuggingFace, Qwen3
- **ํ
์คํธ ์์ฑ ๋ณํ** โ `/v1/audio/speech` โ ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, **Inworld**, **Cartesia**, **PlayHT**, + ๊ธฐ์กด ์ ๊ณต์
์ฒด
- **์กฐ์ ** โ `/v1/moderations` โ ์ฝํ
์ธ ์์ ํ์ธ
- **์ฌ์์** โ `/v1/rerank` โ ๋ฌธ์ ๊ด๋ จ์ฑ ์ฌ์์
- **์๋ต API** โ Codex์ ๋ํ ์ ์ฒด `/v1/responses` ์ง์
๐งช 14. "๋ชจ๋ธ ๊ฐ ํ์ง์ ํ
์คํธํ๊ณ ๋น๊ตํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค."
๊ฐ๋ฐ์๋ ์์ ์ ์ฌ์ฉ ์ฌ๋ก(์ฝ๋, ๋ฒ์ญ, ์ถ๋ก )์ ๊ฐ์ฅ ์ ํฉํ ๋ชจ๋ธ์ ์๊ณ ์ถ์ดํ์ง๋ง ์๋์ผ๋ก ๋น๊ตํ๋ ๊ฒ์ ๋๋ฆฝ๋๋ค. ํตํฉ ํ๊ฐ ๋๊ตฌ๊ฐ ์์ต๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **LLM ํ๊ฐ** โ ์ธ์ฌ๋ง, ์ํ, ์ง๋ฆฌ, ์ฝ๋ ์์ฑ, JSON ์ค์, ๋ฒ์ญ, ๋งํฌ๋ค์ด, ์์ ๊ฑฐ๋ถ๋ฅผ ๋ค๋ฃจ๋ ์ฌ์ ๋ก๋๋ 10๊ฐ์ง ์ฌ๋ก๋ฅผ ์ฌ์ฉํ ๊ณจ๋ ์ธํธ ํ
์คํธ
- **4๊ฐ์ง ์ผ์น ์ ๋ต** โ `exact`, `contains`, `regex`, `custom`(JS ํจ์)
- **๋ฒ์ญ๊ธฐ ํ๋ ์ด๊ทธ๋ผ์ด๋ ํ
์คํธ ๋ฒค์น** โ ์ฌ๋ฌ ์
๋ ฅ ๋ฐ ์์ ์ถ๋ ฅ์ ์ฌ์ฉํ ์ผ๊ด ํ
์คํธ, ๊ณต๊ธ์
์ฒด ๊ฐ ๋น๊ต
- **์ฑํ
ํ
์คํฐ** โ ์๊ฐ์ ์๋ต ๋ ๋๋ง์ ํฌํจํ ์ ์ฒด ์๋ณต
- **๋ผ์ด๋ธ ๋ชจ๋ํฐ** โ ํ๋ก์๋ฅผ ํตํด ํ๋ฅด๋ ๋ชจ๋ ์์ฒญ์ ์ค์๊ฐ ์คํธ๋ฆผ
๐ 15. "์ฑ๋ฅ ์ ํ ์์ด ํ์ฅํด์ผ ํฉ๋๋ค."
์์ฒญ๋์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋์ผํ ์ง๋ฌธ์ ์บ์ฑํ์ง ์์ผ๋ฉด ์ค๋ณต ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. ๋ฉฑ๋ฑ์ฑ์ด ์์ผ๋ฉด ์ค๋ณต ์์ฒญ์ผ๋ก ์ธํด ์ฒ๋ฆฌ๊ฐ ๋ญ๋น๋ฉ๋๋ค. ๊ณต๊ธ์๋ณ ์๊ธ ์ ํ์ ์ค์ํด์ผ ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **์๋ฏธ ์ฒด๊ณ ์บ์** โ 2๊ณ์ธต ์บ์(์๋ช
+ ์๋ฏธ ์ฒด๊ณ)๋ก ๋น์ฉ๊ณผ ๋๊ธฐ ์๊ฐ ๊ฐ์
- **๋ฉฑ๋ฑ์ฑ ์์ฒญ** โ ๋์ผํ ์์ฒญ์ ๋ํ ์ค๋ณต ์ ๊ฑฐ ๊ธฐ๊ฐ์ 5์ด์
๋๋ค.
- **์๋ ์ ํ ๊ฐ์ง** โ ์ ๊ณต์
์ฒด๋ณ RPM, ์ต์ ๊ฐ๊ฒฉ ๋ฐ ์ต๋ ๋์ ์ถ์
- **ํธ์ง ๊ฐ๋ฅํ ์๋ ์ ํ** โ ์ค์ โ ์ง์์ฑ์ ํตํ ๋ณต์๋ ฅ์์ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๊ธฐ๋ณธ๊ฐ
- **API ํค ๊ฒ์ฆ ์บ์** โ ํ๋ก๋์
์ฑ๋ฅ์ ์ํ 3๊ณ์ธต ์บ์
- **์๊ฒฉ ์ธก์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ํ ๋์๋ณด๋** โ p50/p95/p99 ๋๊ธฐ ์๊ฐ, ์บ์ ํต๊ณ, ๊ฐ๋ ์๊ฐ
๐ค 16. "๋ชจ๋ธ ๋์์ ์ ์ญ์ ์ผ๋ก ์ ์ดํ๊ณ ์ถ์ต๋๋ค."
ํน์ ์ธ์ด, ํน์ ์ด์กฐ๋ก ๋ชจ๋ ์๋ต์ ์ํ๊ฑฐ๋ ์ถ๋ก ํ ํฐ์ ์ ํํ๋ ค๋ ๊ฐ๋ฐ์. ๋ชจ๋ ๋๊ตฌ/์์ฒญ์์ ์ด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋นํ์ค์ ์
๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- **์์คํ
ํ๋กฌํํธ ์ฝ์
** โ ๋ชจ๋ ์์ฒญ์ ์ ์ญ ํ๋กฌํํธ ์ ์ฉ
- **์๊ฐ ์์ฐ ๊ฒ์ฆ** โ ์์ฒญ๋ณ ํ ํฐ ํ ๋น ์ ์ด ์ถ๋ก (ํจ์ค์ค๋ฃจ, ์๋, ์ฌ์ฉ์ ์ ์, ์ ์ํ)
- **6๊ฐ์ง ๋ผ์ฐํ
์ ๋ต** โ ์์ฒญ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๋ ๊ธ๋ก๋ฒ ์ ๋ต
- **์์ผ๋์นด๋ ๋ผ์ฐํฐ** โ `provider/*` ํจํด์ ๋ชจ๋ ๊ณต๊ธ์์๊ฒ ๋์ ์ผ๋ก ๋ผ์ฐํ
๋ฉ๋๋ค.
- **์ฝค๋ณด ํ์ฑํ/๋นํ์ฑํ ํ ๊ธ** โ ๋์๋ณด๋์์ ์ง์ ์ฝค๋ณด๋ฅผ ํ ๊ธํฉ๋๋ค.
- **๊ณต๊ธ์ ํ ๊ธ** โ ํ ๋ฒ์ ํด๋ฆญ์ผ๋ก ๊ณต๊ธ์์ ๋ํ ๋ชจ๋ ์ฐ๊ฒฐ์ ํ์ฑํ/๋นํ์ฑํํฉ๋๋ค.
- **์ฐจ๋จ๋ ์ ๊ณต์** โ `/v1/models` ๋ชฉ๋ก์์ ํน์ ์ ๊ณต์๋ฅผ ์ ์ธํฉ๋๋ค.
๐งฐ 17. "์ต๊ณ ์์ค์ ์ ํ ๊ธฐ๋ฅ์ผ๋ก MCP ๋๊ตฌ๊ฐ ํ์ํฉ๋๋ค."
๋ง์ AI ๊ฒ์ดํธ์จ์ด๋ MCP๋ฅผ ์จ๊ฒจ์ง ๊ตฌํ ์ธ๋ถ ์ฌํญ์ผ๋ก๋ง ๋
ธ์ถํฉ๋๋ค. ํ์๋ ๊ฐ์์ ์ด๊ณ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ด์ ๋ ์ด์ด๊ฐ ํ์ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- ๋์๋ณด๋ ํ์ ๋ฐ ์๋ํฌ์ธํธ ํ๋กํ ์ฝ ํญ์ MCP๊ฐ ๋ํ๋ฉ๋๋ค.
- ํ๋ก์ธ์ค, ๋๊ตฌ, ๋ฒ์ ๋ฐ ๊ฐ์ฌ๊ฐ ํฌํจ๋ ์ ์ฉ MCP ๊ด๋ฆฌ ํ์ด์ง
- `omniroute --mcp` ๋ฐ ํด๋ผ์ด์ธํธ ์จ๋ณด๋ฉ์ ์ํ ๊ธฐ๋ณธ ์ ๊ณต ๋น ๋ฅธ ์์
๐ง 18. "๋๊ธฐํ + ์คํธ๋ฆผ ์์
๊ฒฝ๋ก๋ฅผ ๊ฐ์ถ A2A ์ค์ผ์คํธ๋ ์ด์
์ด ํ์ํฉ๋๋ค."
์์ด์ ํธ ์ํฌํ๋ก์๋ ์๋ช
์ฃผ๊ธฐ ์ ์ด๋ฅผ ํตํด ์ง์ ์๋ต๊ณผ ์ฅ๊ธฐ ์คํ ์คํธ๋ฆฌ๋ฐ ์คํ์ด ๋ชจ๋ ํ์ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- `message/send` ๋ฐ `message/stream`์ด ์๋ A2A JSON-RPC ์๋ํฌ์ธํธ(`POST /a2a`)
- ํฐ๋ฏธ๋ ์ํ ์ ํ๋ฅผ ํตํ SSE ์คํธ๋ฆฌ๋ฐ
- `tasks/get` ๋ฐ `tasks/cancel`์ฉ ์์
์๋ช
์ฃผ๊ธฐ API
๐ฐ๏ธ 19. "์ถ์ธก๋ ์ํ๊ฐ ์๋ ์ค์ MCP ํ๋ก์ธ์ค ์ํ๊ฐ ํ์ํฉ๋๋ค"
์ด์ํ์ API์ ์ ๊ทผํ ์ ์๋์ง ์ฌ๋ถ๋ฟ๋ง ์๋๋ผ MCP๊ฐ ์ค์ ๋ก ํ์ฑํ๋์ด ์๋์ง ์์์ผ ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- PID, ํ์์คํฌํ, ์ ์ก, ๋๊ตฌ ๊ฐ์ ๋ฐ ๋ฒ์ ๋ชจ๋๊ฐ ํฌํจ๋ ๋ฐํ์ ํํธ๋นํธ ํ์ผ
- ํํธ๋นํธ + ์ต๊ทผ ํ๋์ ๊ฒฐํฉํ MCP ์ํ API
- ํ๋ก์ธ์ค/๊ฐ๋ ์๊ฐ/ํํธ๋นํธ ์ต์ ์ฑ์ ์ํ UI ์ํ ์นด๋
๐ 20. "๊ฐ์ฌ ๊ฐ๋ฅํ MCP ๋๊ตฌ ์คํ์ด ํ์ํฉ๋๋ค"
๋๊ตฌ๊ฐ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ด์ ์์
์ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒฝ์ฐ ํ์๋ ๋ฒ์ํ์ ์ถ์ ์ฑ์ด ํ์ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- MCP ๋๊ตฌ ํธ์ถ์ ๋ํ SQLite ์ง์ ๊ฐ์ฌ ๋ก๊น
- ๋๊ตฌ, ์ฑ๊ณต/์คํจ, API ํค, ํ์ด์ง ๋งค๊น ๊ธฐ์ค์ผ๋ก ํํฐ๋ง
- ์๋ํ๋ฅผ ์ํ ๋์๋ณด๋ ๊ฐ์ฌ ํ
์ด๋ธ + ํต๊ณ ์๋ํฌ์ธํธ
๐ 21. "ํตํฉ๋น ๋ฒ์๊ฐ ์ง์ ๋ MCP ๊ถํ์ด ํ์ํฉ๋๋ค."
๋ค์ํ ํด๋ผ์ด์ธํธ์๋ ๋๊ตฌ ๋ฒ์ฃผ์ ๋ํ ์ต์ ๊ถํ ์ก์ธ์ค ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- ์ ์ด๋ ๋๊ตฌ ์ก์ธ์ค๋ฅผ ์ํ 9๊ฐ์ ์ธ๋ถํ๋ MCP ๋ฒ์
- MCP ๊ด๋ฆฌ UI์ ๋ฒ์ ์ ์ฉ ๋ฐ ๊ฐ์์ฑ
- ์ด์ ํด๋ง์ ์ํ ์์ ํ ๊ธฐ๋ณธ ์์ธ
โ๏ธ 22. "์ฌ๋ฐฐํฌ ์์ด ์ด์ ์ ์ด๊ฐ ํ์ํฉ๋๋ค"
ํ์ ์ฌ๊ณ ๋๋ ๋น์ฉ ์ด๋ฒคํธ ์ค์ ๋น ๋ฅธ ๋ฐํ์ ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- MCP ๋์๋ณด๋์์ ์ง์ ์ฝค๋ณด ํ์ฑํ ์ ํ
- ์ฌ์ ์ ์๋ ์ ์ฑ
ํฉ์ ๋ณต์๋ ฅ ํ๋กํ ์ ์ฉ
- ๋์ผํ ์ด์ ํจ๋์์ ํ๋ก ์ฐจ๋จ๊ธฐ ์ํ ์ฌ์ค์
๐ 23. "์ค์๊ฐ A2A ์์
์๋ช
์ฃผ๊ธฐ ๊ฐ์์ฑ ๋ฐ ์ทจ์๊ฐ ํ์ํฉ๋๋ค."
์๋ช
์ฃผ๊ธฐ ๊ฐ์์ฑ์ด ์์ผ๋ฉด ์์
์ฌ๊ณ ๋ฅผ ๋ถ๋ฅํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- ํ์ด์ง ๋งค๊น์ ํตํ ์ํ/๊ธฐ์ ๋ณ ์์
๋ชฉ๋ก/ํํฐ๋ง
- ์์
๋ฉํ๋ฐ์ดํฐ, ์ด๋ฒคํธ ๋ฐ ์ํฐํฉํธ์ ๋ํ ๋๋ฆด๋ค์ด
- ์์
์ทจ์ ๋์ ๋ฐ ํ์ธ์ด ํฌํจ๋ UI ์์
๐ 24. "A2A ๋ก๋๋ฅผ ์ํ ํ์ฑ ์คํธ๋ฆผ ๋ฉํธ๋ฆญ์ด ํ์ํฉ๋๋ค"
์คํธ๋ฆฌ๋ฐ ์ํฌํ๋ก์๋ ๋์์ฑ ๋ฐ ๋ผ์ด๋ธ ์ฐ๊ฒฐ์ ๋ํ ์ด์ ํต์ฐฐ๋ ฅ์ด ํ์ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- A2A ์ํ์ ํตํฉ๋ ํ์ฑ ์คํธ๋ฆผ ์นด์ดํฐ
- ๋ง์ง๋ง ์์
ํ์์คํฌํ ๋ฐ ์ํ๋ณ ๊ฐ์
- ์ค์๊ฐ ์ด์ ๋ชจ๋ํฐ๋ง์ ์ํ A2A ๋์๋ณด๋ ์นด๋
๐ชช 25. "ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ํ์ค ์์ด์ ํธ ๊ฒ์์ด ํ์ํฉ๋๋ค."
์ธ๋ถ ํด๋ผ์ด์ธํธ ๋ฐ ์ค์ผ์คํธ๋ ์ดํฐ์๋ ์จ๋ณด๋ฉ์ ์ํด ์ปดํจํฐ์์ ์ฝ์ ์ ์๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- `/.well-known/agent.json`์ ๋
ธ์ถ๋ ์์ด์ ํธ ์นด๋
- ๊ด๋ฆฌ UI์ ํ์๋๋ ๋ฅ๋ ฅ๊ณผ ๊ธฐ์
- A2A ์ํ API์๋ ์๋ํ๋ฅผ ์ํ ๊ฒ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๐งญ 26. "์ ํ UX์์ ํ๋กํ ์ฝ ๊ฒ์ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค"
์ฌ์ฉ์๊ฐ ํ๋กํ ์ฝ ํ๋ฉด์ ๋ฐ๊ฒฌํ ์ ์๋ ๊ฒฝ์ฐ ์ฑํ ๋ฐ ์ง์ ํ์ง์ด ์ ํ๋ฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- ํ๋ก์, MCP, A2A ๋ฐ API ์๋ํฌ์ธํธ์ ๋ํ ํญ์ด ํฌํจ๋ ํตํฉ **์๋ํฌ์ธํธ** ํ์ด์ง
- MCP ๋ฐ A2A์ ๋ํ ์ธ๋ผ์ธ ์๋น์ค ์ํ ํ ๊ธ(์จ๋ผ์ธ/์คํ๋ผ์ธ)
- ๊ฐ์์์ ์ ์ฉ ๊ด๋ฆฌ ํญ์ผ๋ก์ ๋งํฌ
๐งช 27. "์ค์ ํด๋ผ์ด์ธํธ์์ ์๋ํฌ์๋ ํ๋กํ ์ฝ ๊ฒ์ฆ์ด ํ์ํฉ๋๋ค"
๋ชจ์ ํ
์คํธ๋ ์ถ์ ์ ์ ํ๋กํ ์ฝ ํธํ์ฑ์ ๊ฒ์ฆํ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- ์ฑ์ ๋ถํ
ํ๊ณ ์ค์ MCP SDK ํด๋ผ์ด์ธํธ ์ ์ก์ ์ฌ์ฉํ๋ E2E ์ ํ๊ตฐ
- ํ๋ฆ ๊ฒ์, ์ ์ก, ์คํธ๋ฆฌ๋ฐ, ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ทจ์์ ๋ํ A2A ํด๋ผ์ด์ธํธ ํ
์คํธ
- MCP ๊ฐ์ฌ ๋ฐ A2A ์์
API์ ๋ํ ๊ต์ฐจ ํ์ธ ์ฃผ์ฅ
๐ก 28. "๋ชจ๋ ์ธํฐํ์ด์ค์ ๊ฑธ์ณ ํตํฉ๋ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ด ํ์ํฉ๋๋ค."
ํ๋กํ ์ฝ๋ณ๋ก ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ ๋ถํ ํ๋ฉด ์ฌ๊ฐ์ง๋๊ฐ ๋ฐ์ํ๊ณ MTTR์ด ๊ธธ์ด์ง๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- ๋์๋ณด๋/๋ก๊ทธ/๋ถ์์ ํ๋์ ์ ํ์ผ๋ก ํตํฉ
- OpenAI, MCP ๋ฐ A2A ๊ณ์ธต ์ ๋ฐ์ ๊ฑธ์ณ ์ํ + ๊ฐ์ฌ + ์๊ฒฉ ์ธก์ ์์ฒญ
- ์ํ ๋ฐ ์๋ํ๋ฅผ ์ํ ์ด์ API
๐ผ 29. "ํ๋ก์ + ๋๊ตฌ + ์์ด์ ํธ ์ค์ผ์คํธ๋ ์ด์
์ ์ํด ํ๋์ ๋ฐํ์์ด ํ์ํฉ๋๋ค."
์ฌ๋ฌ ๊ฐ๋ณ ์๋น์ค๋ฅผ ์คํํ๋ฉด ์ด์ ๋น์ฉ๊ณผ ์ค๋ฅ ๋ชจ๋๊ฐ ์ฆ๊ฐํฉ๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- OpenAI ํธํ ํ๋ก์, MCP ์๋ฒ, A2A ์๋ฒ๊ฐ ํ๋์ ์คํ์ ์์
- ๊ณต์ ์ธ์ฆ, ๋ณต์๋ ฅ, ๋ฐ์ดํฐ ์ ์ฅ์ ๋ฐ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ
- ๋ชจ๋ ์ํธ ์์ฉ ํ๋ฉด์ ๊ฑธ์ณ ์ผ๊ด๋ ์ ์ฑ
๋ชจ๋ธ
๐ 30. "๊ธ๋ฃจ ์ฝ๋ ํ์ฐ ์์ด ์์ด์ ํธ ์ํฌํ๋ก๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค."
์ฌ๋ฌ ์์ ์๋น์ค์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฒฐํฉํ ๋ ํ์ ์๋๊ฐ ๋๋ ค์ง๋๋ค.
**OmniRoute๊ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ:**
- ํด๋ผ์ด์ธํธ์ ์์ด์ ํธ๋ฅผ ์ํ ํตํฉ ์๋ํฌ์ธํธ ์ ๋ต
- ๋ด์ฅ๋ ํ๋กํ ์ฝ ๊ด๋ฆฌ UI ๋ฐ ์ฐ๊ธฐ ๊ฒ์ฆ ๊ฒฝ๋ก
- ํ๋ก๋์
์ค๋น ๊ธฐ๋ฐ(๋ณด์, ๋ก๊น
, ํ๋ ฅ์ฑ, ๋ฐฑ์
)
### ํ๋ ์ด๋ถ ์์(ํตํฉ ์ฌ์ฉ ์ฌ๋ก)
**ํ๋ ์ด๋ถ A: ์ ๋ฃ ๊ตฌ๋
๊ทน๋ํ + ์ ๋ ดํ ๋ฐฑ์
**
```txt
Combo: "maximize-claude"
1. cc/claude-opus-4-6
2. glm/glm-4.7
3. if/kimi-k2-thinking
Monthly cost: $20 + small backup spend
Outcome: higher quality, near-zero interruption
```
**ํ๋ ์ด๋ถ B: ๋น์ฉ์ด ์ ํ ๋ค์ง ์๋ ์ฝ๋ฉ ์คํ**
```txt
Combo: "free-forever"
1. gc/gemini-3-flash
2. if/kimi-k2-thinking
3. qw/qwen3-coder-plus
Monthly cost: $0
Outcome: stable free coding workflow
```
**ํ๋ ์ด๋ถ C: ์ฐ์ค๋ฌดํด ์์ ๊ฐ๋ ํด๋ฐฑ ์ฒด์ธ**
```txt
Combo: "always-on"
1. cc/claude-opus-4-6
2. cx/gpt-5.2-codex
3. glm/glm-4.7
4. minimax/MiniMax-M2.1
5. if/kimi-k2-thinking
Outcome: deep fallback depth for deadline-critical workloads
```
**ํ๋ ์ด๋ถ D: MCP + A2A๋ฅผ ์ฌ์ฉํ ์์ด์ ํธ ์์
**
```txt
1) Start MCP transport (`omniroute --mcp`) for tool-driven operations
2) Run A2A tasks via `message/send` and `message/stream`
3) Observe via /dashboard/endpoint (MCP and A2A tabs)
4) Toggle services via inline status controls
```
---
## ๐ ๋ฌด๋ฃ๋ก ์์ โ ๊ตฌ์ฑ ๋น์ฉ ์์
> **$0/์**๋ก ๋ช ๋ถ ๋ง์ AI ์ฝ๋ฉ์ ์ค์ ํ ์ ์์ต๋๋ค. ๋ฌด๋ฃ ๊ณ์ ์ ์ฐ๊ฒฐํ๊ณ ๋ด์ฅ๋ **๋ฌด๋ฃ ์คํ** ์ฝค๋ณด๋ฅผ ์ฌ์ฉํ์ธ์.
| ๋จ๊ณ | ์ก์
| ์ ๊ณต์ ์ ๊ธ ํด์ |
| ---- | ---------------------------------------------- | --------------------------------------------------------------- |
| 1 | **Kiro** ์ฐ๊ฒฐ(AWS Builder ID OAuth) | ํด๋ก๋ ์๋คํธ 4.5, ํ์ด์ฟ 4.5 โ **๋ฌด์ ํ** |
| 2 | **Qoder** ์ฐ๊ฒฐ(Google OAuth) | kimi-k2-thinking, qwen3-coder-plus, deepseek-r1... โ **๋ฌด์ ํ** |
| 3 | ์ฐ๊ฒฐ **Qwen**(์ฅ์น ์ฝ๋) | qwen3-coder-plus, qwen3-coder-flash... โ **๋ฌด์ ํ** |
| 4 | **Gemini CLI**(Google OAuth) ์ฐ๊ฒฐ | gemini-3-flash, gemini-2.5-pro โ **180K/์ ๋ฌด๋ฃ** |
| 5 | `/dashboard/combos` โ **๋ฌด๋ฃ ์คํ($0)** ํ
ํ๋ฆฟ | ๋ชจ๋ ๋ฌด๋ฃ ๊ณต๊ธ์๋ฅผ ์๋์ผ๋ก ๋ผ์ด๋ ๋ก๋น |
**IDE/CLI์์ ๋ค์์ ์ง์ ํ์ญ์์ค.** `http://localhost:20128/v1` ยท API ํค: `any-string` ยท ์๋ฃ.
> **์ ํ์ ์ถ๊ฐ ์ ์ฉ ๋ฒ์(๋ฌด๋ฃ):** Groq API ํค(30RPM ๋ฌด๋ฃ), NVIDIA NIM(40RPM ๋ฌด๋ฃ, 70๊ฐ ์ด์์ ๋ชจ๋ธ), Cerebras(100๋ง ํ ํฌ/์ผ), LongCat API ํค(5000๋ง ํ ํฐ/์ผ!), Cloudflare Workers AI(10K ๋ด๋ฐ/์ผ, 50๊ฐ ์ด์์ ๋ชจ๋ธ).
## โก ๋น ๋ฅธ ์์
### 1) ์ค์น ๋ฐ ์คํ
```bash
npm install -g omniroute
omniroute
```
> **pnpm ์ฌ์ฉ์:** ์ค์น ํ `pnpm approve-builds -g`์ ์คํํ์ฌ `better-sqlite3` ๋ฐ `@swc/core`์ ํ์ํ ๊ธฐ๋ณธ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํํฉ๋๋ค.
>
> ```bash
> pnpm install -g omniroute
> pnpm approve-builds -g # Select all packages โ approve
> omniroute
> ```
๋์๋ณด๋๋ `http://localhost:20128`์์ ์ด๋ฆฌ๊ณ API ๊ธฐ๋ณธ URL์ `http://localhost:20128/v1`์
๋๋ค.
| ๋ช
๋ น | ์ค๋ช
|
| ----------------------- | --------------------------------------------------------------- |
| `omniroute` | ์๋ฒ ์์(`PORT=20128`, API ๋ฐ ๋์๋ณด๋๊ฐ โโ๋์ผํ ํฌํธ์ ์์) |
| `omniroute --port 3000` | ํ์ค/API ํฌํธ๋ฅผ 3000์ผ๋ก ์ค์ |
| `omniroute --mcp` | MCP ์๋ฒ ์์(stdio ์ ์ก) |
| `omniroute --no-open` | ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋์ผ๋ก ์ด์ง ์์ |
| `omniroute --help` | ๋์๋ง ํ์ |
์ ํ์ ๋ถํ ํฌํธ ๋ชจ๋:
```bash
PORT=20128 DASHBOARD_PORT=20129 omniroute
# API: http://localhost:20128/v1
# Dashboard: http://localhost:20129
```
### 2) ๊ณต๊ธ์ ์ฐ๊ฒฐ ๋ฐ API ํค ์์ฑ
1. ๋์๋ณด๋ โ `Providers`์ ์ด๊ณ ํ๋ ์ด์์ ๊ณต๊ธ์(OAuth ๋๋ API ํค)๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
2. ๋์๋ณด๋ โ `Endpoints`์ ์ด๊ณ API ํค๋ฅผ ์์ฑํฉ๋๋ค.
3. (์ ํ ์ฌํญ) ๋์๋ณด๋ โ `Combos`์ ์ด๊ณ ํด๋ฐฑ ์ฒด์ธ์ ์ค์ ํฉ๋๋ค.
### 3) ์ฝ๋ฉ ๋๊ตฌ๋ก OmniRoute๋ฅผ ์ง์ ํฉ๋๋ค.
```txt
Base URL: http://localhost:20128/v1
API Key: [copy from Endpoint page]
Model: if/kimi-k2-thinking (or any provider/model prefix)
```
Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode ๋ฐ OpenAI ํธํ SDK์ ํจ๊ป ์๋ํฉ๋๋ค.
### 4) ํ๋กํ ์ฝ ํ์ฑํ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ(v2.0)
**MCP(๋๊ตฌ ๊ธฐ๋ฐ ์์
์ฉ):**
```bash
omniroute --mcp
```
๊ทธ๋ฐ ๋ค์ `stdio`์ ํตํด MCP ํด๋ผ์ด์ธํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ค์๊ณผ ๊ฐ์ ํ
์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- `omniroute_get_health`
- `omniroute_list_combos`
**A2A(์์ด์ ํธ ๊ฐ ์ํฌํ๋ก์ฉ):**
```bash
curl http://localhost:20128/.well-known/agent.json
```
```bash
curl -X POST http://localhost:20128/a2a \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}'
```
### 5) ๋ชจ๋ ๊ฒ์ ์ฒ์๋ถํฐ ๋๊น์ง ํ์ธํ์ธ์(๊ถ์ฅ)
```bash
npm run test:protocols:e2e
```
์ด ์ ํ๊ตฐ์ ์คํ ์ค์ธ ์ฑ์ ๋ํด ์ค์ MCP ๋ฐ A2A ํด๋ผ์ด์ธํธ ํ๋ฆ์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค.
### ๋์: ์์ค์์ ์คํ
```bash
cp .env.example .env
npm install
PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 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๋ฅผ ๋
๋ฆฝํ ๋ฐ์คํฌํฑ ์ฑ์ผ๋ก ์คํํ์ธ์. ๋ก์ปฌ ๋ชจ๋ธ์๋ ํฐ๋ฏธ๋, ๋ธ๋ผ์ฐ์ , ์ธํฐ๋ท์ด ํ์ํ์ง ์์ต๋๋ค. Electron ๊ธฐ๋ฐ ์ฑ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- ๐ฅ๏ธ **๊ธฐ๋ณธ ์ฐฝ** โ ์์คํ
ํธ๋ ์ด ํตํฉ์ด ๊ฐ๋ฅํ ์ ์ฉ ์ฑ ์ฐฝ
- ๐ **์๋ ์์** โ ์์คํ
๋ก๊ทธ์ธ ์ OmniRoute ์คํ
- ๐ **๊ธฐ๋ณธ ์๋ฆผ** โ ํ ๋น๋ ์์ง ๋๋ ๊ณต๊ธ์ ๋ฌธ์ ์ ๋ํ ์๋ฆผ ๋ฐ๊ธฐ
- โก **์ํด๋ฆญ ์ค์น** โ NSIS(Windows), DMG(macOS), AppImage(Linux)
- ๐ **์คํ๋ผ์ธ ๋ชจ๋** โ ๋ฒ๋ค ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ์คํ๋ผ์ธ์ผ๋ก ์๋
### ๋น ๋ฅธ ์์
```bash
# Development mode
npm run electron:dev
# Build for your platform
npm run electron:build # Current platform
npm run electron:build:win # Windows (.exe)
npm run electron:build:mac # macOS (.dmg) โ x64 & arm64
npm run electron:build:linux # Linux (.AppImage)
```
### ์์คํ
ํธ๋ ์ด
์ต์ํ๋๋ฉด OmniRoute๋ ๋น ๋ฅธ ์์
์ ํตํด ์์คํ
ํธ๋ ์ด์ ํ์๋ฉ๋๋ค.
- ๋์๋ณด๋ ์ด๊ธฐ
- ์๋ฒ ํฌํธ ๋ณ๊ฒฝ
- ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ
๐ ์ ์ฒด ๋ฌธ์: [**OMNI_TOKEN_153**](electron/README.md)
---
## ๐ฐ ๊ฐ๊ฒฉ ํ๋์ ๋ณด๊ธฐ
| ๊ณ์ธต | ๊ณต๊ธ์ | ๋น์ฉ | ํ ๋น๋ ์ฌ์ค์ | ์ต๊ณ ์ ๋์ |
| ------------- | ----------------------- | ------------------------------- | --------------- | -------------------------------------- |
| **๐ณ ๊ตฌ๋
** | ํด๋ก๋ ์ฝ๋ (Pro) | $20/์ | 5์๊ฐ + ๋งค์ฃผ | ์ด๋ฏธ ๊ตฌ๋
์ค |
| | ์ฝ๋ฑ์ค(ํ๋ฌ์ค/ํ๋ก) | $20-200/์ | 5์๊ฐ + ๋งค์ฃผ | OpenAI ์ฌ์ฉ์ |
| | ์ ๋ฏธ๋ CLI | **๋ฌด๋ฃ** | 180K/์ + 1K/์ผ | ๋ชจ๋ ์ฌ๋! |
| | GitHub ๋ถ์กฐ์ข
์ฌ | $10-19/์ | ์๊ฐ | GitHub ์ฌ์ฉ์ |
| **๐ API ํค** | ์๋น๋์ NIM | **๋ฌด๋ฃ**(์์ํ ๊ฐ๋ฐ) | ~40RPM | 70๊ฐ ์ด์์ ๊ณต๊ฐ ๋ชจ๋ธ |
| | ๋๋ | **๋ฌด๋ฃ** (100๋ง ํก/์ผ) | 60K TPM/30RPM | ์ธ๊ณ์์ ๊ฐ์ฅ ๋น ๋ฅธ |
| | ๊ทธ๋กํฌ | **๋ฌด๋ฃ**(30RPM) | 14.4KRPD | ์ด๊ณ ์ ๋ผ๋ง/์ ฌ๋ง |
| | DeepSeek V3.2 | 100๋ง ๋ฌ๋ฌ๋น $0.27/$1.10 | ์์ | ์ต๊ณ ์ ๊ฐ๊ฒฉ/ํ์ง ์ถ๋ก |
| | xAI Grok-4 ๊ณ ์ | **100๋ง ๋ฌ๋ฌ๋น $0.20/$0.50** ๐ | ์์ | ๊ฐ์ฅ ๋น ๋ฅธ + ๋๊ตฌ ํธ์ถ, ์ด์ |
| | xAI Grok-4(ํ์ค) | 100๋ง ๋ฌ๋ฌ๋น $0.20/$1.50 ๐ | ์์ | xAI์ ์ถ๋ก ์ฃผ๋ ฅ |
| | ๋ฏธ์คํธ๋ | ๋ฌด๋ฃ ํ๊ฐํ + ์ ๋ฃ | ์๊ธ ์ ํ | ์ ๋ฝ์ AI |
| | ์คํ๋ผ์ฐํฐ | ์ข
๋์ | ์์ | 100๊ฐ ์ด์์ ๋ชจ๋ธ์ด ๊ฒฐํฉ๋์ด ์์ต๋๋ค. |
| **๐ฐ ์ ๋ ดํ** | GLM-5(Z.AI๋ฅผ ํตํด) ๐ | $0.5/1M | ๋งค์ผ ์ค์ 10์ | 128K ์ถ๋ ฅ, ์ต์ ํ๋๊ทธ์ญ |
| | GLM-4.7 | $0.6/1M | ๋งค์ผ ์ค์ 10์ | ์์ฐ ๋ฐฑ์
|
| | ๋ฏธ๋๋งฅ์ค M2.5 ๐ | $0.3/1M ์
๋ ฅ | 5์๊ฐ ๋กค๋ง | ์ถ๋ก + ์์ด์ ํธ ์์
|
| | ๋ฏธ๋๋งฅ์ค M2.1 | $0.2/1M | 5์๊ฐ ๋กค๋ง | ๊ฐ์ฅ ์ ๋ ดํ ์ต์
|
| | Kimi K2.5(๋ฌธ์ท API) ๐ | ์ข
๋์ | ์์ | ์ง์ Moonshot API ์ก์ธ์ค |
| | ํค๋ฏธ K2 | $9/์ ์ ์ก | 1000๋ง ํ ํฐ/์ | ์์ธก ๊ฐ๋ฅํ ๋น์ฉ |
| **๐ ๋ฌด๋ฃ** | ์์ดํ๋ก์ฐ | **$0** | ๋ฌด์ ํ | 5๊ฐ ๋ชจ๋ธ ๋ฌด์ ํ |
| | ํ | **$0** | ๋ฌด์ ํ | 4๊ฐ ๋ชจ๋ธ ๋ฌด์ ํ |
| | ํค๋ก | **$0** | ๋ฌด์ ํ | ํด๋ก๋ ์๋คํธ/ํ์ด์ฟ (AWS ๋น๋) |
| | LongCat ํ๋์๋ผ์ดํธ ๐ | **$0** (5์ฒ๋ง ํ ํฌ/์ผ ๐ฅ) | 1RPS | ์ง๊ตฌ์์์ ๊ฐ์ฅ ํฐ ๋ฌด๋ฃ ํ ๋น๋ |
| | ์๋ถ AI ๐ | **$0** (์ด์ ํ์ ์์) | ์์ฒญ 1๊ฐ/15์ด | GPT-5, ํด๋ก๋, DeepSeek, ๋ผ๋ง 4 |
| | Cloudflare ์์
์ AI ๐ | **$0** (10,000๊ฐ์ ๋ด๋ฐ/์ผ) | ~150ํ/์ผ | 50๊ฐ ์ด์์ ๋ชจ๋ธ, ๊ธ๋ก๋ฒ ์ฃ์ง |
| | ์ค์ผ์ผ์จ์ด AI ๐ | **$0** (์ด 1๋ฐฑ๋ง ํ ํฐ) | ์๊ธ ์ ํ | EU/GDPR, Qwen3 235B, ๋ผ๋ง 70B |
> ๐ **์ ๋ชจ๋ธ ์ถ๊ฐ๋จ(2026๋
3์):** $0.20/$0.50/M์ Grok-4 Fast ์ ํ๊ตฐ(1143ms๋ก ๋ฒค์น๋งํฌ โ Gemini 2.5 ํ๋์๋ณด๋ค 30% ๋น ๋ฆ), 128K ์ถ๋ ฅ์ Z.AI๋ฅผ ํตํ GLM-5, MiniMax M2.5 ์ถ๋ก , DeepSeek V3.2 ์
๋ฐ์ดํธ๋ ๊ฐ๊ฒฉ, Moonshot ์ง์ API๋ฅผ ํตํ Kimi K2.5.
**๐ก $0 ์ฝค๋ณด ์คํ โ ์์ ํ ๋ฌด๋ฃ ์ค์ :**
```
# ๐ Ultimate Free Stack 2026 โ 11 Providers, $0 Forever
Kiro (kr/) โ Claude Sonnet/Haiku UNLIMITED
Qoder (if/) โ kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED
LongCat Lite (lc/) โ LongCat-Flash-Lite โ 50M tokens/day ๐ฅ
Pollinations (pol/) โ GPT-5, Claude, DeepSeek, Llama 4 โ no key needed
Qwen (qw/) โ qwen3-coder-plus, qwen3-coder-flash, qwen3-coder-next UNLIMITED
Gemini (gemini/) โ Gemini 2.5 Flash โ 1,500 req/day free API key
Cloudflare AI (cf/) โ Llama 70B, Gemma 3, Mistral โ 10K Neurons/day
Scaleway (scw/) โ Qwen3 235B, Llama 70B โ 1M free tokens (EU)
Groq (groq/) โ Llama/Gemma ultra-fast โ 14.4K req/day
NVIDIA NIM (nvidia/) โ 70+ open models โ 40 RPM forever
Cerebras (cerebras/) โ Llama/Qwen world-fastest โ 1M tok/day
```
**๋น์ฉ์ด 0์
๋๋ค. ์ฝ๋ฉ์ ์ค๋จํ์ง ๋ง์ญ์์ค.** ์ด๋ฅผ ํ๋์ OmniRoute ์ฝค๋ณด๋ก ๊ตฌ์ฑํ๋ฉด ๋ชจ๋ ํด๋ฐฑ์ด ์๋์ผ๋ก ์ํ๋ฉ๋๋ค. ์๋ ์ ํ์ด ํ์ํ์ง ์์ต๋๋ค.
---
---
## ๐ ๋ฌด๋ฃ ๋ชจ๋ธ โ ์ค์ ๋ก ์ป์ ์ ์๋ ๊ฒ
> ์๋์ ๋ชจ๋ ๋ชจ๋ธ์ **์ ์ฉ์นด๋๊ฐ ํ์ ์์ด 100% ๋ฌด๋ฃ**์
๋๋ค. ํ๋์ ํ ๋น๋์ด ์์ง๋๋ฉด OmniRoute๋ ๋ ์ฌ์ด๋ฅผ ์๋์ผ๋ก ๋ผ์ฐํ
ํฉ๋๋ค. ์ด๋ฅผ ๋ชจ๋ ๊ฒฐํฉํ์ฌ ๊นจ์ง์ง ์๋ $0 ์ฝค๋ณด๋ฅผ ๋ง๋ญ๋๋ค.
### ๐ต CLAUDE ๋ชจ๋ธ(Kiro๋ฅผ ํตํด โ AWS Builder ID)
| ๋ชจ๋ธ | ์ ๋์ฌ | ํ๋ | ๋น์จ ์ ํ |
| ------------------- | ------ | ---------- | --------------------- |
| `claude-sonnet-4.5` | `kr/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ์ผ์ผ ํ๋ ์์ |
| `claude-haiku-4.5` | `kr/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ์ผ์ผ ํ๋ ์์ |
| `claude-opus-4.6` | `kr/` | **๋ฌด์ ํ** | Kiro๋ฅผ ํตํ ์ต์ Opus |
### ๐ข QODER ๋ชจ๋ธ(๋ฌด๋ฃ OAuth โ ์ ์ฉ์นด๋ ์์)
| ๋ชจ๋ธ | ์ ๋์ฌ | ํ๋ | ๋น์จ ์ ํ |
| ------------------ | ------ | ---------- | ---------------- |
| `kimi-k2-thinking` | `if/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
| `qwen3-coder-plus` | `if/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
| `deepseek-r1` | `if/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
| `minimax-m2.1` | `if/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
| `kimi-k2` | `if/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
### ๐ก QWEN ๋ชจ๋ธ(์ฅ์น ์ฝ๋ ์ธ์ฆ)
| ๋ชจ๋ธ | ์ ๋์ฌ | ํ๋ | ๋น์จ ์ ํ |
| ------------------- | ------ | ---------- | ----------------- |
| `qwen3-coder-plus` | `qw/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
| `qwen3-coder-flash` | `qw/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
| `qwen3-coder-next` | `qw/` | **๋ฌด์ ํ** | ๋ณด๊ณ ๋ ํ๋ ์์ |
| `vision-model` | `qw/` | **๋ฌด์ ํ** | ๋ค์ค ๋ชจ๋(์ด๋ฏธ์ง) |
### ๐ฃ GEMINI CLI(Google OAuth)
| ๋ชจ๋ธ | ์ ๋์ฌ | ํ๋ | ๋น์จ ์ ํ |
| ------------------------ | ------ | ---------------------- | ----------- |
| `gemini-3-flash-preview` | `gc/` | **180K ํก/์** + 1K/์ผ | ์๋ณ ์ฌ์ค์ |
| `gemini-2.5-pro` | `gc/` | 180K/์(๊ณต์ ํ) | ๊ณ ํ์ง |
### โซ NVIDIA NIM(๋ฌด๋ฃ API ํค โ build.nvidia.com)
| ๊ณ์ธต | ์ผ์ผ ํ๋ | ๋น์จ ์ ํ | ๋ฉ๋ชจ |
| ------------ | -------------- | ---------- | ----------------------------------------------------- |
| ๋ฌด๋ฃ(๊ฐ๋ฐ์) | ํ ํฐ ํ๋ ์์ | **~40RPM** | 70๊ฐ ์ด์์ ๋ชจ๋ธ; 2025๋
์ค๋ฐ ์์ ๋น์จ ์ ํ์ผ๋ก ์ ํ |
์ธ๊ธฐ ์๋ ๋ฌด๋ฃ ๋ชจ๋ธ: `moonshotai/kimi-k2.5`(Kimi K2.5), `z-ai/glm4.7`(GLM 4.7), `deepseek-ai/deepseek-v3.2`(DeepSeek V3.2), `nvidia/llama-3.3-70b-instruct`, `deepseek/deepseek-r1`
### โช CEREBRAS(๋ฌด๋ฃ API ํค โ inference.cerebras.ai)
| ๊ณ์ธต | ์ผ์ผ ํ๋ | ๋น์จ ์ ํ | ๋ฉ๋ชจ |
| ---- | ----------------- | ------------- | ---------------------------------------- |
| ๋ฌด๋ฃ | **100๋ง ํ ํฐ/์ผ** | 60K TPM/30RPM | ์ธ๊ณ์์ ๊ฐ์ฅ ๋น ๋ฅธ LLM ์ถ๋ก ; ๋งค์ผ ์ฌ์ค์ |
๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ: `llama-3.3-70b`, `llama-3.1-8b`, `deepseek-r1-distill-llama-70b`
### ๐ด GROQ(๋ฌด๋ฃ API ํค โ console.groq.com)
| ๊ณ์ธต | ์ผ์ผ ํ๋ | ๋น์จ ์ ํ | ๋ฉ๋ชจ |
| ---- | ------------- | ------------ | -------------------------------------- |
| ๋ฌด๋ฃ | **14,400RPD** | ๋ชจ๋ธ๋น 30RPM | ์ ์ฉ์นด๋ ์์; 429 ํ๋, ์ฒญ๊ตฌ๋์ง ์์ |
๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ: `llama-3.3-70b-versatile`, `gemma2-9b-it`, `mixtral-8x7b`, `whisper-large-v3`
### ๐ด LONGCAT AI(๋ฌด๋ฃ API ํค โ longcat.chat) ๐
| ๋ชจ๋ธ | ์ ๋์ฌ | ์ผ์ผ ๋ฌด๋ฃ ํ ๋น๋ | ๋ฉ๋ชจ |
| ----------------------------- | ------ | ------------------- | ---------------------------- |
| `LongCat-Flash-Lite` | `lc/` | **5์ฒ๋ง ํ ํฐ** ํ๋ชฉ | ์ฌ์ ์ต๋ ๊ท๋ชจ์ ๋ฌด๋ฃ ํ ๋น๋ |
| `LongCat-Flash-Chat` | `lc/` | 50๋ง ํ ํฐ | ๋ค๋จ๊ณ ์ฑํ
|
| `LongCat-Flash-Thinking` | `lc/` | 50๋ง ํ ํฐ | ์ถ๋ก / CoT |
| `LongCat-Flash-Thinking-2601` | `lc/` | 50๋ง ํ ํฐ | 2026๋
1์ ๋ฒ์ |
| `LongCat-Flash-Omni-2603` | `lc/` | 50๋ง ํ ํฐ | ๋ค์ค ๋ชจ๋ |
> ๊ณต๊ฐ ๋ฒ ํ ๋ฒ์ ์์๋ 100% ๋ฌด๋ฃ์
๋๋ค. ์ด๋ฉ์ผ์ด๋ ์ ํ๋ก [longcat.chat](https://longcat.chat)์ ๊ฐ์
ํ์ธ์. ๋งค์ผ 00:00 UTC์ ์ฌ์ค์ ๋ฉ๋๋ค.
### ๐ข POLLINATIONS AI(API ํค ํ์ ์์) ๐
| ๋ชจ๋ธ | ์ ๋์ฌ | ๋น์จ ์ ํ | ๋ค์ ๊ณต๊ธ์ |
| ---------- | ------ | ------------- | -------------------- |
| `openai` | `pol/` | ์์ฒญ 1๊ฐ/15์ด | GPT-5 |
| `claude` | `pol/` | ์์ฒญ 1๊ฐ/15์ด | ์ธ๋ฅํ ํด๋ก๋ |
| `gemini` | `pol/` | ์์ฒญ 1๊ฐ/15์ด | ๊ตฌ๊ธ ์ ๋ฏธ๋ |
| `deepseek` | `pol/` | ์์ฒญ 1๊ฐ/15์ด | DeepSeek V3 |
| `llama` | `pol/` | ์์ฒญ 1๊ฐ/15์ด | ๋ฉํ ๋ผ๋ง 4 ์ค์นด์ฐํธ |
| `mistral` | `pol/` | ์์ฒญ 1๊ฐ/15์ด | ๋ฏธ์คํธ๋ AI |
> โจ **๋ง์ฐฐ ์์:** ๊ฐ์
์ด๋ API ํค๊ฐ ์์ต๋๋ค. ๋น ํค ํ๋๊ฐ ์๋ Pollinations ๊ณต๊ธ์๋ฅผ ์ถ๊ฐํ๋ฉด ์ฆ์ ์๋ํฉ๋๋ค.
### ๐ CLOUDFLARE WORKERS AI(๋ฌด๋ฃ API ํค โ cloudflare.com) ๐
| ๊ณ์ธต | ์ผ์ผ ๋ด๋ฐ | ๋๋ฑํ ์ฌ์ฉ๋ฒ | ๋ฉ๋ชจ |
| ---- | ---------- | ----------------------------------------- | ----------------------------- |
| ๋ฌด๋ฃ | **10,000** | ~150 LLM ์๋ต / 500์ด ์ค๋์ค / 15K ์๋ฒ ๋ | ๊ธ๋ก๋ฒ ์์ง, 50๊ฐ ์ด์์ ๋ชจ๋ธ |
์ธ๊ธฐ ์๋ ๋ฌด๋ฃ ๋ชจ๋ธ: `@cf/meta/llama-3.3-70b-instruct`, `@cf/google/gemma-3-12b-it`, `@cf/openai/whisper-large-v3-turbo`(๋ฌด๋ฃ ์ค๋์ค!), `@cf/qwen/qwen2.5-coder-15b-instruct`
> [dash.cloudflare.com](https://dash.cloudflare.com)์ API ํ ํฐ + ๊ณ์ ID๊ฐ ํ์ํฉ๋๋ค. ๊ณต๊ธ์ ์ค์ ์ ๊ณ์ ID๋ฅผ ์ ์ฅํฉ๋๋ค.
### ๐ฃ SCALEWAY AI(100๋ง ๊ฐ์ ๋ฌด๋ฃ ํ ํฐ โ scaleway.com) ๐
| ๊ณ์ธต | ๋ฌด๋ฃ ํ ๋น๋ | ์์น | ๋ฉ๋ชจ |
| ---- | ------------------- | ----------- | ------------------------------------------ |
| ๋ฌด๋ฃ | **100๋ง ๊ฐ์ ํ ํฐ** | ๐ซ๐ท ํ๋ฆฌ, EU | ํ๋ ๋ด์์๋ ์ ์ฉ์นด๋๊ฐ ํ์ํ์ง ์์ต๋๋ค |
๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ: `qwen3-235b-a22b-instruct-2507` (Qwen3 235B!), `llama-3.1-70b-instruct`, `mistral-small-3.2-24b-instruct-2506`, `deepseek-v3-0324`
> EU/GDPR์ ์ค์ํฉ๋๋ค. [console.scaleway.com](https://console.scaleway.com)์์ API ํค๋ฅผ ๋ฐ์ผ์ธ์.
> **๐ก ์ต๊ณ ์ ๋ฌด๋ฃ ์คํ(11๊ฐ ์ ๊ณต์, ์์ํ $0):**
>
> ```
> Kiro (kr/) โ Claude Sonnet/Haiku UNLIMITED
> Qoder (if/) โ kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED
> LongCat Lite (lc/) โ LongCat-Flash-Lite โ 50M tokens/day ๐ฅ
> Pollinations (pol/) โ GPT-5, Claude, DeepSeek, Llama 4 โ no key needed
> Qwen (qw/) โ qwen3-coder models UNLIMITED
> Gemini (gemini/) โ Gemini 2.5 Flash โ 1,500 req/day free
> Cloudflare AI (cf/) โ 50+ models โ 10K Neurons/day
> Scaleway (scw/) โ Qwen3 235B, Llama 70B โ 1M free tokens (EU)
> Groq (groq/) โ Llama/Gemma โ 14.4K req/day ultra-fast
> NVIDIA NIM (nvidia/) โ 70+ open models โ 40 RPM forever
> Cerebras (cerebras/) โ Llama/Qwen world-fastest โ 1M tok/day
> ```
## ๐๏ธ ๋ฌด๋ฃ ์ ์ฌ ์ฝค๋ณด
> **$0**์ ๋ชจ๋ ์ค๋์ค/๋น๋์ค ์ ์ฌ โ Deepgram์ด ๋ฌด๋ฃ๋ก 200๋ฌ๋ฌ, AssemblyAI๊ฐ 50๋ฌ๋ฌ๋ก ๋์ฒด, Groq Whisper๋ฅผ ๋ฌด์ ํ ๊ธด๊ธ ๋ฐฑ์
์ผ๋ก ์ ๊ณตํฉ๋๋ค.
| ๊ณต๊ธ์ | ๋ฌด๋ฃ ํฌ๋ ๋ง | ์ต๊ณ ์ ๋ชจ๋ธ | ๋น์จ ์ ํ |
| ----------------- | -------------------- | ------------------------------------------ | ----------------------------------- |
| ๐ข **๋ฅ๊ทธ๋จ** | **$200 ๋ฌด๋ฃ** (๊ฐ์
) | `nova-3` โ ์ต๊ณ ์ ์ ํ์ฑ, 30๊ฐ ์ด์์ ์ธ์ด | ๋ฌด๋ฃ ํฌ๋ ๋ง์๋ RPM ์ ํ์ด ์์ต๋๋ค |
| ๐ต **AssemblyAI** | **$50 ๋ฌด๋ฃ**(๊ฐ์
) | `universal-3-pro` โ ์ฅ, ๊ฐ์ , PII | ๋ฌด๋ฃ ํฌ๋ ๋ง์๋ RPM ์ ํ์ด ์์ต๋๋ค |
| ๐ด **๊ทธ๋กํฌ** | **์์ํ ๋ฌด๋ฃ** | `whisper-large-v3` โ OpenAI ์์ญ์ | 30RPM(์๋ ์ ํ) |
**`/dashboard/combos`์ ์ ์๋ ์ฝค๋ณด:**
```
Name: free-transcription
Strategy: Priority
Nodes:
[1] deepgram/nova-3 โ uses $200 free first
[2] assemblyai/universal-3-pro โ fallback when Deepgram credits run out
[3] groq/whisper-large-v3 โ free forever, emergency fallback
```
๊ทธ๋ฐ ๋ค์ `/dashboard/media` โ **๊ธฐ๋ก** ํญ์์ ์ค๋์ค ๋๋ ๋น๋์ค ํ์ผ์ ์
๋ก๋ํ๊ณ โ ์ฝค๋ณด ์๋ํฌ์ธํธ๋ฅผ ์ ํํ๊ณ โ ์ง์๋๋ ํ์์ผ๋ก ๊ธฐ๋ก์ ๊ฐ์ ธ์ต๋๋ค.
## ๐ก ์ฃผ์ ๊ธฐ๋ฅ
OmniRoute v2.0์ ๋จ์ํ ๋ฆด๋ ์ด ํ๋ก์๊ฐ ์๋ ์ด์ ํ๋ซํผ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค.
### ๐ ์ ๊ท โ ClawRouter์์ ์๊ฐ์ ๋ฐ์ ๊ฐ์ ์ฌํญ(2026๋
3์)
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| -------------------------------- | ---------------------------------------------------------------------------------------------------- |
| โก **Grok-4 ๋น ๋ฅธ ์ ํ๊ตฐ** | $0.20/$0.50/M์ xAI ๋ชจ๋ธ โ ๋ฒค์น๋งํฌ 1143ms(Gemini 2.5 Flash๋ณด๋ค 30% ๋น ๋ฆ) |
| ๐ง **Z.AI๋ฅผ ํตํ GLM-5** | 128K ์ถ๋ ฅ ์ปจํ
์คํธ, $0.5/1M โ GLM ์ ํ๊ตฐ์ ์ต์ ํ๋๊ทธ์ญ |
| ๐ฎ **๋ฏธ๋๋งฅ์ค M2.5** | $0.30/1M์ ์ถ๋ก + ์์ด์ ํธ ์์
โ M2.1์์ ๋ํญ ์
๊ทธ๋ ์ด๋ |
| ๐ฏ **๋ชจ๋ธ๋ณ toolCalling ํ๋๊ทธ** | ๋ ์ง์คํธ๋ฆฌ์ ๋ชจ๋ธ๋ณ `toolCalling: true/false` โ AutoCombo๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ธ์ ๊ฑด๋๋๋๋ค. |
| ๐ **๋ค๊ตญ์ด ์๋ ๊ฐ์ง** | AutoCombo ์ฑ์ ์ PT/ZH/ES/AR ํค์๋ โ ์์ด๊ฐ ์๋ ์ฝํ
์ธ ์ ๋ํ ๋ ๋์ ๋ชจ๋ธ ์ ํ |
| ๐ **๋ฒค์น๋งํฌ ๊ธฐ๋ฐ ํด๋ฐฑ** | ๋ผ์ด๋ธ ์์ฒญ์ ์ค์ p95 ๋๊ธฐ ์๊ฐ์ ์ฝค๋ณด ์ ์๋ฅผ ์ ๊ณตํฉ๋๋ค. AutoCombo๋ ์ค์ ๋ฐ์ดํฐ์์ ํ์ตํฉ๋๋ค |
| ๐ **์ค๋ณต ์ ๊ฑฐ ์์ฒญ** | ์ฝํ
์ธ ํด์ ๊ธฐ๋ฐ ์ค๋ณต ์ ๊ฑฐ ์ฐฝ โ ๋ค์ค ์์ด์ ํธ ์์ , ์ค๋ณต ์ฒญ๊ตฌ ๋ฐฉ์ง |
| ๐ **ํ๋ฌ๊ทธํ ๋ผ์ฐํฐ ์ ๋ต** | ํ์ฅ ๊ฐ๋ฅํ `RouterStrategy` ์ธํฐํ์ด์ค โ ์ฌ์ฉ์ ์ ์ ๋ผ์ฐํ
๋
ผ๋ฆฌ๋ฅผ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ถ๊ฐ |
### ๐ ์ด์ v2.0.9+ โ ํ๋ ์ด๊ทธ๋ผ์ด๋, CLI ์ง๋ฌธ ๋ฐ ACP
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ๐ฎ **๋ชจ๋ธ ๋์ดํฐ** | ๋ชจ๋ ๋ชจ๋ธ์ ์ง์ ํ
์คํธํ ์ ์๋ ๋์๋ณด๋ ํ์ด์ง โ ์ ๊ณต์/๋ชจ๋ธ/์๋ํฌ์ธํธ ์ ํ๊ธฐ, ๋ชจ๋์ฝ ํธ์ง๊ธฐ, ์คํธ๋ฆฌ๋ฐ, ์ค๋จ, ํ์ด๋ฐ |
| ๐ **CLI ์ง๋ฌธ ๋งค์นญ** | ๊ธฐ๋ณธ CLI ์๋ช
๊ณผ ์ผ์นํ๋๋ก ๊ณต๊ธ์๋ณ ํค๋/๋ณธ๋ฌธ ์์ - ์ค์ > ๋ณด์์์ ๊ณต๊ธ์๋ณ๋ก ์ ํํฉ๋๋ค. **ํ๋ก์ IP๋ ๋ณด์กด๋ฉ๋๋ค** |
| ๐ค **ACP ์ง์(์์ด์ ํธ ํด๋ผ์ด์ธํธ ํ๋กํ ์ฝ)** | CLI ์์ด์ ํธ ๊ฒ์(Codex, Claude, Goose, Gemini CLI, OpenClaw + 9๊ฐ ์ด์), ํ๋ก์ธ์ค ์์ฑ๊ธฐ, `/api/acp/agents` ์๋ํฌ์ธํธ |
| ๐ค **ACP ์๋ด์ ๋์๋ณด๋** | ๋๋ฒ๊ทธ โบ ์์ด์ ํธ ํ์ด์ง โ ๋ชจ๋ CLI ๋๊ตฌ์ ๋ํ ์ค์น ์ํ, ๋ฒ์ , ์ฌ์ฉ์ ์ง์ ์์ด์ ํธ ์์์ด ํฌํจ๋ 14๊ฐ ์์ด์ ํธ์ ๊ทธ๋ฆฌ๋์
๋๋ค. **OpenCode** ์ฌ์ฉ์์๊ฒ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ชจ๋ธ๊ณผ ํจ๊ป ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ์ ์๋ ์์ฑํ๋ "opencode.json ๋ค์ด๋ก๋" ๋ฒํผ์ด ํ์๋ฉ๋๋ค. |
| ๐ง **์ฌ์ฉ์ ์ ์ ๋ชจ๋ธ `apiFormat` ๋ผ์ฐํ
** | `apiFormat: "responses"`์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ ์ ๋ชจ๋ธ์ ์ด์ Responses API ๋ฒ์ญ๊ธฐ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋ผ์ฐํ
๋ฉ๋๋ค. |
| ๐ข **Codex ์์
๊ณต๊ฐ ๊ฒฉ๋ฆฌ** | ์ด๋ฉ์ผ๋น ์ฌ๋ฌ Codex ์์
๊ณต๊ฐ - OAuth๋ ์์
๊ณต๊ฐ ID๋ก ์ฐ๊ฒฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ๋ถํฉ๋๋ค |
| ๐ **์ ์ ์๋ ์
๋ฐ์ดํธ** | ๋ฐ์คํฌํ ์ฑ์์ ์
๋ฐ์ดํธ ํ์ธ + ์ฌ์์ ์ ์๋ ์ค์น |
### ๐ค ์์ด์ ํธ ๋ฐ ํ๋กํ ์ฝ ์ด์(v2.0)
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------ |
| ๐ง **MCP ์๋ฒ(16๊ฐ ๋๊ตฌ)** | 3๊ฐ์ง ์ ์ก์ ํตํ IDE/์์ด์ ํธ ๋๊ตฌ: stdio, SSE(`/api/mcp/sse`), ์คํธ๋ฆฌ๋ฐ ๊ฐ๋ฅ HTTP(`/api/mcp/stream`) |
| ๐ค **A2A ์๋ฒ(JSON-RPC + SSE)** | ๋๊ธฐํ ๋ฐ ์คํธ๋ฆฌ๋ฐ ํ๋ฆ์ ํตํ ์์ด์ ํธ ๊ฐ ์์
์คํ |
| ๐งญ **ํตํฉ ์๋ํฌ์ธํธ ํ์ด์ง** | ์๋ํฌ์ธํธ ํ๋ก์, MCP, A2A ๋ฐ API ์๋ํฌ์ธํธ ํญ์ด ์๋ ํญ ๊ด๋ฆฌ ํ์ด์ง |
| ๐๏ธ **์๋น์ค ํ์ฑํ/๋นํ์ฑํ ํ ๊ธ** | ์ค์ ์ง์์ฑ์ ๊ฐ์ถ MCP ๋ฐ A2A์ฉ ON/OFF ์ค์์น(๊ธฐ๋ณธ๊ฐ: OFF) |
| ๐ฐ๏ธ **MCP ๋ฐํ์ ํํธ๋นํธ** | ์ค์ ํ๋ก์ธ์ค ์ํ(pid, ๊ฐ๋ ์๊ฐ, ํํธ๋นํธ ๊ธฐ๊ฐ, ์ ์ก, ๋ฒ์ ๋ชจ๋) |
| ๐ **MCP ๊ฐ์ฌ ์ถ์ ** | ์ฑ๊ณต/์คํจ ๋ฐ ์ฃผ์ ์์ฑ์ด ํฌํจ๋ ํํฐ๋ง ๊ฐ๋ฅํ ๊ฐ์ฌ ๋ก๊ทธ |
| ๐ **MCP ๋ฒ์ ์ ์ฉ** | ์ ์ด๋ ๋๊ตฌ ์ก์ธ์ค๋ฅผ ์ํ 9๊ฐ์ ์ธ๋ถ์ ์ธ ๋ฒ์ ๊ถํ |
| ๐ก **A2A ์์
์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ** | ์์
๋์ด/ํํฐ๋ง, ์ด๋ฒคํธ/์ํฐํฉํธ ๊ฒ์ฌ, ์คํ ์ค์ธ ์์
์ทจ์ |
| ๐ **์์ด์ ํธ ์นด๋ ๊ฒ์** | ํด๋ผ์ด์ธํธ ์๋ ๊ฒ์์ ์ํ `/.well-known/agent.json` |
| ๐งช **ํ๋กํ ์ฝ E2E ํ
์คํธ ํ๋ค์ค** | `test:protocols:e2e`์ ์ค์ MCP SDK + A2A ํด๋ผ์ด์ธํธ ํ๋ฆ |
| โ๏ธ **์๋ ์ ์ด** | ํ๋์ ์ ์ด ํ๋ฉด์์ ์ฝค๋ณด ์ ํ, ํ๋ ฅ์ฑ ํ๋กํ ์ ์ฉ, ์ฐจ๋จ๊ธฐ ์ฌ์ค์ |
### ๐ง ๋ผ์ฐํ
๋ฐ ์ธํ
๋ฆฌ์ ์ค
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| ------------------------------ | ----------------------------------------------------------------- |
| ๐ฏ **์ค๋งํธ 4๊ณ์ธต ํด๋ฐฑ** | ์๋ ๊ฒฝ๋ก: ๊ตฌ๋
โ API ํค โ ์ ๋ ดํ โ ๋ฌด๋ฃ |
| ๐ **์ค์๊ฐ ํ ๋น๋ ์ถ์ ** | ๋ผ์ด๋ธ ํ ํฐ ์ + ๊ณต๊ธ์๋ณ ์นด์ดํธ๋ค์ด ์ฌ์ค์ |
| ๐ **ํ์ ๋ฒ์ญ** | OpenAI โ Claude โ Gemini โ ์คํค๋ง ์์ ๋ณํ์ ํตํ ์๋ต |
| ๐ฅ **๋ค์ค ๊ณ์ ์ง์** | ์ง๋ฅ์ ์ธ ์ ํ์ ํตํด ๊ณต๊ธ์๋น ์ฌ๋ฌ ๊ณ์ |
| ๐ **์๋ ํ ํฐ ์๋ก๊ณ ์นจ** | ์ฌ์๋ ์ OAuth ํ ํฐ์ด ์๋์ผ๋ก ์๋ก ๊ณ ์ณ์ง๋๋ค. |
| ๐จ **๋ง์ถคํ ์ฝค๋ณด** | 6๊ฐ์ง ๋ฐธ๋ฐ์ฑ ์ ๋ต + ํด๋ฐฑ ์ฒด์ธ ์ ์ด |
| ๐ **์์ผ๋์นด๋ ๋ผ์ฐํฐ** | `provider/*` ๋์ ๋ผ์ฐํ
|
| ๐ง **์ฌ๊ณ ์์ฐ ํต์ ** | ํต๊ณผ, ์๋, ์ฌ์ฉ์ ์ ์ ๋ฐ ์ ์ํ ์ถ๋ก ์ ํ |
| ๐ **๋ชจ๋ธ ๋ณ์นญ** | ๋ด์ฅ + ์ฌ์ฉ์ ์ ์ ๋ชจ๋ธ ์จ๋ฆฌ์ด์ฑ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
์์ |
| โก **๋ฐฐ๊ฒฝ ์ ํ** | ์ฐ์ ์์๊ฐ ๋ฎ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ ๋ ดํ ๋ชจ๋ธ๋ก ๋ผ์ฐํ
|
| ๐งช **์์
์ธ์ ์ค๋งํธ ๋ผ์ฐํ
** | ์ฝํ
์ธ ์ ํ๋ณ ๋ชจ๋ธ ์๋ ์ ํ(์ฝ๋ฉ/๋น์ /๋ถ์/์์ฝ) |
| ๐ฌ **์์คํ
ํ๋กฌํํธ ์ฝ์
** | ์ผ๊ด๋๊ฒ ์ ์ฉ๋๋ ๊ธ๋ก๋ฒ ํ๋ ์ ์ด |
| ๐ **์๋ต API ํธํ์ฑ** | Codex ๋ฐ ๊ณ ๊ธ ์์ด์ ํธ ์์
ํ๋ฆ์ ๋ํ ์ ์ฒด `/v1/responses` ์ง์ |
### ๐ต ๋ค์ค ๋ชจ๋ API
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ๐ผ๏ธ **์ด๋ฏธ์ง ์์ฑ** | `/v1/images/generations`(ํด๋ผ์ฐ๋ ๋ฐ ๋ก์ปฌ ๋ฐฑ์๋ ํฌํจ) |
| ๐ **์๋ฒ ๋ฉ** | ๊ฒ์ ๋ฐ RAG ํ์ดํ๋ผ์ธ์ฉ `/v1/embeddings` |
| ๐ค **์ค๋์ค ์ ์ฌ** | `/v1/audio/transcriptions` โ 7๊ฐ ๊ณต๊ธ์(Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), ์๋ ์ธ์ด ๊ฐ์ง, MP4/MP3/WAV ์ง์ |
| ๐ **ํ
์คํธ ์์ฑ ๋ณํ** | `/v1/audio/speech` โ ์ฌ๋ฐ๋ฅธ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์๋ 10๊ฐ ๊ณต๊ธ์(ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
| ๐ฌ **๋น๋์ค ์์ฑ** | `/v1/videos/generations`(ComfyUI + SD WebUI ์ํฌํ๋ก) |
| ๐ต **์์
์ธ๋** | `/v1/music/generations`(ComfyUI ์ํฌํ๋ก) |
| ๐ก๏ธ **์กฐ์ ** | `/v1/moderations` ์์ ํ์ธ |
| ๐ **์ฌ์์** | ๊ด๋ จ์ฑ ์ ์๋ฅผ ์ํ `/v1/rerank` |
| ๐ **์น ๊ฒ์** ๐ | `/v1/search` โ 5๊ฐ ๊ณต๊ธ์(Serper, Brave, Perplexity, Exa, Tavily), ์ 6,500๊ฐ ์ด์์ ๋ฌด๋ฃ, ์๋ ์ฅ์ ์กฐ์น, ์บ์ |
### ๐ก๏ธ ํ๋ ฅ์ฑ, ๋ณด์ ๋ฐ ๊ฑฐ๋ฒ๋์ค
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| ------------------------------ | --------------------------------------------------------------------------- |
| ๐ **ํ๋ก ์ฐจ๋จ๊ธฐ** | ์๊ณ๊ฐ ์ ์ด๋ฅผ ํตํ ๋ชจ๋ธ๋ณ ํธ๋ฆฝ/๋ณต๊ตฌ |
| ๐ฏ **์๋ํฌ์ธํธ ์ธ์ ๋ชจ๋ธ** | ์ฌ์ฉ์ ์ ์ ๋ชจ๋ธ์ ์ง์๋๋ ์๋ํฌ์ธํธ + API ํ์์ ์ ์ธํฉ๋๋ค |
| ๐ก๏ธ **์ฒ๋ฅ ๋ฐฉ์ง ๋ฌด๋ฆฌ** | ์ฌ์๋/๋น์จ ์ด๋ฒคํธ์ ๋ํ ๋ฎคํ
์ค + ์ธ๋งํฌ์ด ๋ณดํธ |
| ๐ง **์๋ฏธ + ์๋ช
์บ์** | ๋ ๊ฐ์ ์บ์ ๋ ์ด์ด๋ก ๋น์ฉ/์ง์ฐ ์๊ฐ ๊ฐ์ |
| โก **๋ฉฑ๋ฑ์ฑ ์์ฒญ** | ์ค๋ณต ๋ณดํธ ์ฐฝ |
| ๐ **TLS ์ง๋ฌธ ์คํธํ** | ๋ธ๋ผ์ฐ์ ์ ์ ์ฌํ TLS ์ง๋ฌธ โ **๋ด ๊ฐ์ง ๋ฐ ๊ณ์ ํ๋๊ทธ ์ง์ ๊ฐ์** |
| ๐ **CLI ์ง๋ฌธ ๋งค์นญ** | ๊ธฐ๋ณธ CLI ์์ฒญ ์๋ช
๊ณผ ์ผ์น โ **ํ๋ก์ IP๋ฅผ ๋ณด์กดํ๋ฉด์ ๊ธ์ง ์ํ์ ์ค์
๋๋ค** |
| ๐ **IP ํํฐ๋ง** | ๋
ธ์ถ๋ ๋ฐฐํฌ์ ๋ํ ํ์ฉ ๋ชฉ๋ก/์ฐจ๋จ ๋ชฉ๋ก ์ ์ด |
| ๐ **ํธ์ง ๊ฐ๋ฅํ ์๋ ์ ํ** | ์ง์์ฑ์ ํตํด ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ ์ญ/๊ณต๊ธ์ ์์ค ์ ํ |
| ๐ **API ํค ๊ด๋ฆฌ + ๋ฒ์ ์ง์ ** | ๋ณด์ ํค ๋ฐ๊ธ/๊ต์ฒด ๋ฐ ๋ชจ๋ธ/๊ณต๊ธ์ ์ ์ด |
| ๐ก๏ธ **๋ณดํธ๋๋ `/models`** | ๋ชจ๋ธ ์นดํ๋ก๊ทธ์ ๋ํ ์ ํ์ ์ธ์ฆ ๊ฒ์ดํ
๋ฐ ๊ณต๊ธ์ ์จ๊ธฐ๊ธฐ |
### ๐ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ๋ฐ ๋ถ์
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| -------------------------------- | ---------------------------------------------------- |
| ๐ **์์ฒญ + ํ๋ก์ ๋ก๊น
** | ์ ์ฒด ์์ฒญ/์๋ต ๋ฐ ํ๋ก์ ๋ก๊น
|
| ๐ **Streamed Detailed Logs** ๐ | Reconstructs SSE payload streams cleanly into the UI |
| ๐ **ํตํฉ ๋ก๊ทธ ๋์๋ณด๋** | ํ ํ์ด์ง์์ ์์ฒญ, ํ๋ก์, ๊ฐ์ฌ ๋ฐ ์ฝ์ ๋ณด๊ธฐ |
| ๐ **์๊ฒฉ ์ธก์ ์์ฒญ** | p50/p95/p99 ๋๊ธฐ ์๊ฐ ๋ฐ ์์ฒญ ์ถ์ |
| ๐ฅ **๊ฑด๊ฐ ๋์๋ณด๋** | ๊ฐ๋ ์๊ฐ, ์ฐจ๋จ๊ธฐ ์ํ, ์ ๊ธ, ์บ์ ํต๊ณ |
| ๐ฐ **๋น์ฉ ์ถ์ ** | ์์ฐ ์ ์ด ๋ฐ ๋ชจ๋ธ๋ณ ๊ฐ๊ฒฉ ๊ฐ์์ฑ |
| ๐ **๋ถ์ ์๊ฐํ** | ๋ชจ๋ธ/๊ณต๊ธ์ ์ฌ์ฉ๋ ํต์ฐฐ๋ ฅ ๋ฐ ์ถ์ธ ๋ณด๊ธฐ |
| ๐งช **ํ๊ฐ ํ๋ ์์ํฌ** | ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋งค์น ์ ๋ต์ ์ฌ์ฉํ ๊ณจ๋ ์ธํธ ํ
์คํธ |
### โ๏ธ ๋ฐฐํฌ ๋ฐ ํ๋ซํผ
| ๊ธฐ๋ฅ | ๊ทธ๊ฒ์ด ํ๋ ์ผ |
| ---------------------------------- | --------------------------------------------------------- | ------------------ |
| ๐ **์ด๋์๋ ๋ฐฐํฌ** | ๋ก์ปฌํธ์คํธ, VPS, Docker, ํด๋ผ์ฐ๋ ํ๊ฒฝ |
| ๐พ **ํด๋ผ์ฐ๋ ๋๊ธฐํ** | ํด๋ผ์ฐ๋ ์์
์๋ฅผ ํตํ ๊ตฌ์ฑ ๋๊ธฐํ |
| ๐ **๋ฐฑ์
/๋ณต์** | ๋ด๋ณด๋ด๊ธฐ/๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ฌํด ๋ณต๊ตฌ ํ๋ฆ |
| ๐ง **์จ๋ณด๋ฉ ๋ง๋ฒ์ฌ** | ์ฒซ ์คํ ์๋ด ์ค์ |
| ๐ง **CLI ๋๊ตฌ ๋์๋ณด๋** | ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ฝ๋ฉ ๋๊ตฌ๋ฅผ ์ํ ์ํด๋ฆญ ์ค์ |
| ๐ฎ **๋ชจ๋ธ ๋์ดํฐ** | ๋์๋ณด๋์์ ๊ณต๊ธ์/๋ชจ๋ธ/์๋ํฌ์ธํธ ํ
์คํธ |
| ๐ **CLI ์ง๋ฌธ ํ ๊ธ** | ์ค์ > ๋ณด์ | ๊ณต๊ธ์๋ณ ์ง๋ฌธ ์ผ์น |
| ๐ **i18n(30๊ฐ ์ธ์ด)** | RTL ์ ์ฉ ๋ฒ์๋ฅผ ํฌํจํ ์ ์ฒด ๋์๋ณด๋ + ๋ฌธ์ ์ธ์ด ์ง์ |
| ๐งน **๋ชจ๋ ๋ชจ๋ธ ์ง์ฐ๊ธฐ** | ๊ณต๊ธ์ ์ธ๋ถ์ ๋ณด์์ ์ํด๋ฆญ ๋ชจ๋ธ ๋ชฉ๋ก ์ญ์ |
| ๐๏ธ **Sidebar Controls** ๐ | Hide components and integrations from Appearance Settings |
| ๐ **์ด์ ํ
ํ๋ฆฟ** | ๋ฒ๊ทธ ๋ฐ ๊ธฐ๋ฅ์ ์ํ ํ์คํ๋ GitHub ํ
ํ๋ฆฟ |
| ๐ **์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ** | `DATA_DIR` ์ ์ฅ ์์น ์ฌ์ ์ |
### ๊ธฐ๋ฅ ์ฌ์ธต ๋ถ์
#### ์ค์ฉ์ ์ธ ๋น์ฉ ๊ด๋ฆฌ๋ฅผ ํตํ ์ค๋งํธ ํด๋ฐฑ
```txt
Combo: "my-coding-stack"
1. cc/claude-opus-4-6
2. nvidia/llama-3.3-70b
3. glm/glm-4.7
4. if/kimi-k2-thinking
```
ํ ๋น๋, ์๋ ๋๋ ์ํ๊ฐ ์คํจํ๋ฉด OmniRoute๋ ์๋ ์ ํ ์์ด ์๋์ผ๋ก ๋ค์ ํ๋ณด๋ก ์ด๋ํฉ๋๋ค.
#### ๋์ ๋ณด์ด๊ณ ์๋ ๊ฐ๋ฅํ ํ๋กํ ์ฝ ๊ด๋ฆฌ
- MCP + A2A๋ UI ๋ฐ ๋ฌธ์์์ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค(์จ๊ฒจ์ง์ง ์์).
- ํ๋กํ ์ฝ ์ํ API๋ ์ค์๊ฐ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋
ธ์ถํฉ๋๋ค(`/api/mcp/*`, `/api/a2a/*`).
- ๋์๋ณด๋์๋ 2์ผ์ฐจ ์์
์ ๋ํ ์์
์ด ํฌํจ๋ฉ๋๋ค(์ฝค๋ณด ํ ๊ธ, ์ฐจ๋จ๊ธฐ ์ฌ์ค์ , ์์
์ทจ์).
#### ๋ฒ์ญ๊ธฐ + ๊ฒ์ฆ ์์
ํ๋ฆ
๋ฒ์ญ๊ธฐ ์์ญ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- **ํ๋ ์ด๊ทธ๋ผ์ด๋**: ๋ณํ ํ์ธ ์์ฒญ
- **์ฑํ
ํ
์คํฐ**: ์ ์ฒด ์์ฒญ/์๋ต ์๋ณต
- **ํ
์คํธ ๋ฒค์น**: ํ ๋ฒ์ ์ฌ๋ฌ ์ฌ๋ก ์คํ
- **๋ผ์ด๋ธ ๋ชจ๋ํฐ**: ์ค์๊ฐ ๊ตํต ์ํฉ ๋ณด๊ธฐ
`npm run test:protocols:e2e`์ ํตํด ์ค์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ ํ๋กํ ์ฝ ๊ฒ์ฆ๋ ๊ฐ๋ฅํฉ๋๋ค.
> ๐ **[MCP Server README](open-sse/mcp-server/README.md)** โ ๋๊ตฌ ์ฐธ์กฐ, IDE ๊ตฌ์ฑ ๋ฐ ํด๋ผ์ด์ธํธ ์
>
> ๐ **[A2A Server README](src/lib/a2a/README.md)** โ ๊ธฐ์ , JSON-RPC ๋ฐฉ๋ฒ, ์คํธ๋ฆฌ๋ฐ ๋ฐ ์์
์๋ช
์ฃผ๊ธฐ
## ๐งช ํ๊ฐ(Evals)
OmniRoute์๋ ๊ณจ๋ ์ธํธ์ ๋ํด LLM ์๋ต ํ์ง์ ํ
์คํธํ๊ธฐ ์ํ ๋ด์ฅ ํ๊ฐ ํ๋ ์์ํฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋์๋ณด๋์ **๋ถ์ โ ํ๊ฐ**๋ฅผ ํตํด ์ก์ธ์คํ์ธ์.
### ๋ด์ฅ ๊ณจ๋ ์ธํธ
์ฌ์ ๋ก๋๋ "OmniRoute Golden Set"์๋ ๋ค์์ ๋ํ ํ
์คํธ ์ฌ๋ก๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- ์ธ์ฌ๋ง, ์ํ, ์ง๋ฆฌ, ์ฝ๋ ์์ฑ
- JSON ํ์ ์ค์, ๋ฒ์ญ, ๋งํฌ๋ค์ด ์์ฑ
- ์์ ๊ฑฐ๋ถ(์ ํด ์ฝํ
์ธ ), ์นด์ดํ
, ๋ถ์ธ ๋
ผ๋ฆฌ
### ํ๊ฐ ์ ๋ต
| ์ ๋ต | ์ค๋ช
| ์ |
| ---------- | -------------------------------------------------------------- | -------------------------------- |
| `exact` | ์ถ๋ ฅ์ ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค | `"4"` |
| `contains` | ์ถ๋ ฅ์๋ ํ์ ๋ฌธ์์ด(๋์๋ฌธ์ ๊ตฌ๋ถ ์ ํจ)์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. | `"Paris"` |
| `regex` | ์ถ๋ ฅ์ ์ ๊ท์ ํจํด๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค | `"1.*2.*3"` |
| `custom` | ์ฌ์ฉ์ ์ ์ JS ํจ์๊ฐ true/false๋ฅผ ๋ฐํํฉ๋๋ค. | `(output) => output.length > 10` |
---
## ๐ ์ค์ ๊ฐ์ด๋
### ํ๋กํ ์ฝ ์ค์ (MCP + A2A)
๐งฉ MCP ์ค์ (๋ชจ๋ธ ์ปจํ
์คํธ ํ๋กํ ์ฝ)
stdio ๋ชจ๋์์ MCP ์ ์ก์ ์์ํฉ๋๋ค.
```bash
omniroute --mcp
```
๊ถ์ฅ๋๋ ๊ฒ์ฆ ํ๋ฆ:
1. stdio๋ฅผ ํตํด MCP ํด๋ผ์ด์ธํธ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
2. `omniroute_get_health`์ ์คํํฉ๋๋ค.
3. `omniroute_list_combos`์ ์คํํฉ๋๋ค.
4. `/dashboard/mcp`์ ์ด์ด ํํธ๋นํธ, ํ๋ ๋ฐ ๊ฐ์ฌ๋ฅผ ํ์ธํฉ๋๋ค.
์๋ํ์ ์ ์ฉํ API:
- `GET /api/mcp/status`
- `GET /api/mcp/tools`
- `GET /api/mcp/audit`
- `GET /api/mcp/audit/stats`
๐ค A2A ์ค์ (Agent2Agent)
์์ด์ ํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
```bash
curl http://localhost:20128/.well-known/agent.json
```
์์
๋ณด๋ด๊ธฐ:
```bash
curl -X POST http://localhost:20128/a2a \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}'
```
์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ:
- `GET /api/a2a/status`
- `GET /api/a2a/tasks`
- `GET /api/a2a/tasks/:id`
- `POST /api/a2a/tasks/:id/cancel`
์ด์ UI:
- ์์
/์ํ/์คํธ๋ฆผ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ๋ฐ ์ฐ๊ธฐ ์์
์ ์ํ `/dashboard/a2a`
๐งช ์ข
๋จ ๊ฐ ํ๋กํ ์ฝ ๊ฒ์ฆ
์ค์ ํด๋ผ์ด์ธํธ์์ ๋ ํ๋กํ ์ฝ์ ๋ชจ๋ ๊ฒ์ฆํฉ๋๋ค.
```bash
npm run test:protocols:e2e
```
์ด๋ ๋ค์์ ํ์ธํฉ๋๋ค.
- MCP SDK ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ/๋ชฉ๋ก/ํธ์ถ
- A2A ๊ฒ์/์ ์ก/์คํธ๋ฆฌ๋ฐ/๊ฐ์ ธ์ค๊ธฐ/์ทจ์
- MCP ๊ฐ์ฌ ๋ฐ A2A ์์
๊ด๋ฆฌ API์ ๋ฐ์ดํฐ ๊ต์ฐจ ํ์ธ
๐ณ ๊ตฌ๋
์ ๊ณต์
์ฒด
### ํด๋ก๋ ์ฝ๋(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
```
#### ์ฝ๋ฑ์ค ๊ณ์ ํ๋ ๊ด๋ฆฌ(5์๊ฐ + ์ฃผ๊ฐ)
์ด์ ๊ฐ Codex ๊ณ์ ์๋ `Dashboard -> Providers`์ ์ ์ฑ
ํ ๊ธ์ด ์์ต๋๋ค.
- `5h` (ON/OFF): 5์๊ฐ ์ฐฝ ์๊ณ๊ฐ ์ ์ฑ
์ ์ํํฉ๋๋ค.
- `Weekly` (ON/OFF): ์ฃผ๊ฐ ์ฐฝ ์๊ณ๊ฐ ์ ์ฑ
์ ์ํํฉ๋๋ค.
- ์๊ณ๊ฐ ๋์: ํ์ฑํ๋ ์ฐฝ์ด ์ฌ์ฉ๋์ 90% ์ด์์ ๋๋ฌํ๋ฉด ํด๋น ๊ณ์ ์ ๊ฑด๋๋๋๋ค.
- ์ํ ๋์: OmniRoute๋ ์๋์ผ๋ก ๋ค์ ์ ๊ฒฉ Codex ๊ณ์ ์ผ๋ก ๋ผ์ฐํ
ํฉ๋๋ค.
- ๋์ ์ฌ์ค์ : ๊ณต๊ธ์ `resetAt` ์๊ฐ์ด ์ง๋๋ฉด ๊ณ์ ์ด ์๋์ผ๋ก ๋ค์ ์๊ฒฉ์ ๊ฐ์ถ๊ฒ ๋ฉ๋๋ค.
์๋๋ฆฌ์ค:
- `5h ON` + `Weekly ON`: ๋ ์ฐฝ์ด ์๊ณ๊ฐ์ ๋๋ฌํ๋ฉด ๊ณ์ ์ ๊ฑด๋๋๋๋ค.
- `5h OFF` + `Weekly ON`: ์ฃผ๊ฐ ์ฌ์ฉ๋๋ง ๊ณ์ ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.
- `5h ON` + `Weekly OFF`: 5์๊ฐ ๋์๋ง ์ฌ์ฉํ๋ฉด ๊ณ์ ์ด ์ฐจ๋จ๋ ์ ์์ต๋๋ค.
- `resetAt` ํต๊ณผ: ๊ณ์ ์ด ์๋์ผ๋ก ์ํ์ ๋ค์ ์์ํฉ๋๋ค(์๋ ์ฌํ์ฑํ ์์).
### 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
```
๐ API ํค ์ ๊ณต์
### NVIDIA NIM(๋ฌด๋ฃ ๊ฐ๋ฐ์ ์ก์ธ์ค โ 70๊ฐ ์ด์์ ๋ชจ๋ธ)
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๊ฐ ์ด์์ ๋ชจ๋ธ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๐ฐ ์ ๋ ดํ ๊ณต๊ธ์(๋ฐฑ์
)
### 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 ์ ํจ ๋น์ฉ!
๐ ๋ฌด๋ฃ ์ ๊ณต์
์ฒด(๊ธด๊ธ ๋ฐฑ์
)
### Qoder(OAuth๋ฅผ ํตํ 5๊ฐ ๋ฌด๋ฃ ๋ชจ๋ธ)
```bash
Dashboard โ Connect Qoder
โ Qoder OAuth login
โ Unlimited usage
Models:
if/kimi-k2-thinking
if/qwen3-coder-plus
if/glm-4.7
if/minimax-m2
if/deepseek-r1
```
### Qwen(์ฅ์น ์ฝ๋๋ฅผ ํตํ 4๊ฐ์ ๋ฌด๋ฃ ๋ชจ๋ธ)
```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
```
๐จ ์ฝค๋ณด ๋ง๋ค๊ธฐ
### ์์ 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!
```
๐ง CLI ํตํฉ
### ์ปค์ 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
```
### ์คํ์ฝ๋
**1๋จ๊ณ:** OmniRoute๋ฅผ ์ฌ์ฉ์ ์ง์ ๊ณต๊ธ์๋ก ์ถ๊ฐํฉ๋๋ค.
```bash
opencode
/connect
# Select "Other" โ Enter ID: "omniroute" โ Enter your OmniRoute API key
```
**2๋จ๊ณ:** ํ๋ก์ ํธ ๋ฃจํธ์์ `opencode.json`์ ์์ฑ/ํธ์งํฉ๋๋ค.
```json
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"omniroute": {
"npm": "@ai-sdk/openai-compatible",
"name": "OmniRoute",
"options": {
"baseURL": "http://localhost:20128/v1"
},
"models": {
"cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" },
"gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" },
"if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" }
}
}
}
}
```
**3๋จ๊ณ:** OpenCode์์ ๋ชจ๋ธ์ ์ ํํฉ๋๋ค.
```bash
/models
# Select any OmniRoute model from the list
```
> **ํ:** OmniRoute `/v1/models` ์๋ํฌ์ธํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ์ `models` ์น์
์ ์ถ๊ฐํ์ธ์. OmniRoute ๋์๋ณด๋์์ `provider/model-id` ํ์์ ์ฌ์ฉํ์ธ์.
---
## ๐ ๋ฌธ์ ํด๊ฒฐ
๋ฌธ์ ํด๊ฒฐ ๊ฐ์ด๋๋ฅผ ํ์ฅํ๋ ค๋ฉด ํด๋ฆญํ์ธ์
**"์ธ์ด ๋ชจ๋ธ์ด ๋ฉ์์ง๋ฅผ ์ ๊ณตํ์ง ์์์ต๋๋ค"**
- ๊ณต๊ธ์ ํ ๋น๋ ์์ง โ ๋์๋ณด๋ ํ ๋น๋ ์ถ์ ๊ธฐ ํ์ธ
- ํด๊ฒฐ ๋ฐฉ๋ฒ: ์ฝค๋ณด ํด๋ฐฑ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ ์ ๋ ดํ ๊ณ์ธต์ผ๋ก ์ ํํ์ธ์.
**๋น์จ ์ ํ**
- ๊ตฌ๋
ํ ๋น๋ ์ด๊ณผ โ GLM/MiniMax๋ก ๋์ฒด
- ์ฝค๋ณด ์ถ๊ฐ: `cc/claude-opus-4-6 โ glm/glm-4.7 โ if/kimi-k2-thinking`
**OAuth ํ ํฐ์ด ๋ง๋ฃ๋์์ต๋๋ค**
- OmniRoute์ ์ํด ์๋ ์๋ก๊ณ ์นจ
- ๋ฌธ์ ๊ฐ ์ง์๋๋ ๊ฒฝ์ฐ: Dashboard โ Provider โ Reconnect
**๋์ ๋น์ฉ**
- ๋์๋ณด๋ โ ๋น์ฉ์์ ์ฌ์ฉ ํต๊ณ๋ฅผ ํ์ธํ์ธ์.
- ๊ธฐ๋ณธ ๋ชจ๋ธ์ GLM/MiniMax๋ก ์ ํ
- ์ค์ํ์ง ์์ ์์
์๋ ๋ฌด๋ฃ ๊ณ์ธต(Gemini CLI, Qoder)์ ์ฌ์ฉํฉ๋๋ค.
**๋์๋ณด๋/API ํฌํธ๊ฐ ์๋ชป๋์์ต๋๋ค**
- `PORT`์ ํ์ค ๊ธฐ๋ณธ ํฌํธ(๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก API ํฌํธ)์
๋๋ค.
- `API_PORT`์ OpenAI ํธํ API ๋ฆฌ์ค๋๋ง ์ฌ์ ์ํฉ๋๋ค.
- `DASHBOARD_PORT`์ ๋์๋ณด๋/Next.js ๋ฆฌ์ค๋๋ง ์ฌ์ ์ํฉ๋๋ค.
- `NEXT_PUBLIC_BASE_URL`์ ๋์๋ณด๋/๊ณต๊ฐ URL๋ก ์ค์ ํฉ๋๋ค(OAuth ์ฝ๋ฐฑ์ฉ).
**ํด๋ผ์ฐ๋ ๋๊ธฐํ ์ค๋ฅ**
- `BASE_URL`์ด ์คํ ์ค์ธ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋์ง ํ์ธํฉ๋๋ค.
- `CLOUD_URL`์ด ์์ ํด๋ผ์ฐ๋ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ๋ฆฌํค๋์ง ํ์ธํ์ธ์.
- `NEXT_PUBLIC_*` ๊ฐ์ ์๋ฒ ์ธก ๊ฐ๊ณผ ์ผ์นํ๋๋ก ์ ์งํฉ๋๋ค.
**์ฒซ ๋ฒ์งธ ๋ก๊ทธ์ธ์ด ์๋ํ์ง ์์ต๋๋ค**
- `.env`์์ `INITIAL_PASSWORD`์ ํ์ธํ์ธ์.
- ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๋์ฒด ๋น๋ฐ๋ฒํธ๋ `123456`์
๋๋ค.
**์์ฒญ ๋ก๊ทธ ์์**
- `.env`์ `ENABLE_REQUEST_LOGS=true`์ ์ค์ ํฉ๋๋ค.
**OpenAI ํธํ ๊ณต๊ธ์์ ๋ํ ์ฐ๊ฒฐ ํ
์คํธ์์ "์๋ชป๋จ"์ด ํ์๋ฉ๋๋ค**
- ๋ง์ ๊ณต๊ธ์๊ฐ `/models` ์๋ํฌ์ธํธ๋ฅผ ๋
ธ์ถํ์ง ์์ต๋๋ค.
- OmniRoute v1.0.6+์๋ ์ฑํ
์๋ฃ๋ฅผ ํตํ ๋์ฒด ๊ฒ์ฆ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- ๊ธฐ๋ณธ URL์ `/v1` ์ ๋ฏธ์ฌ๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธํ์ธ์.
### ๐ ์๊ฒฉ ์๋ฒ์ OAuth
> **โ ๏ธ VPS, Docker ๋๋ ์๊ฒฉ ์๋ฒ์์ OmniRoute๋ฅผ ์คํํ๋ ์ฌ์ฉ์์๊ฒ ์ค์**
#### ์๊ฒฉ ์๋ฒ์์ Antigravity/Gemini CLI OAuth๊ฐ ์คํจํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
**Antigravity** ๋ฐ **Gemini CLI** ๊ณต๊ธ์๋ **Google OAuth 2.0**์ ์ฌ์ฉํฉ๋๋ค. Google์์๋ OAuth ํ๋ฆ์ `redirect_uri`์ด ์ฑ์ Google Cloud Console์ ์ฌ์ ๋ฑ๋ก๋ URI ์ค ํ๋์ ์ ํํ ์ผ์นํ๋๋ก ์๊ตฌํฉ๋๋ค.
OmniRoute์ ๋ฒ๋ค๋ก ์ ๊ณต๋๋ OAuth ์๊ฒฉ ์ฆ๋ช
์ **`localhost`์ ๋ํด์๋ง** ๋ฑ๋ก๋ฉ๋๋ค. ์๊ฒฉ ์๋ฒ(์: `https://omniroute.myserver.com`)์์ OmniRoute์ ์ก์ธ์คํ๋ฉด Google์ ๋ค์์ ํตํ ์ธ์ฆ์ ๊ฑฐ๋ถํฉ๋๋ค.
```
Error 400: redirect_uri_mismatch
```
#### ํด๊ฒฐ ๋ฐฉ๋ฒ: ์์ฒด OAuth ์๊ฒฉ ์ฆ๋ช
๊ตฌ์ฑ
์๋ฒ์ URI๋ฅผ ์ฌ์ฉํ์ฌ Google Cloud Console์์ **OAuth 2.0 ํด๋ผ์ด์ธํธ ID**๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
#### ๋จ๊ณ๋ณ
**1. Google Cloud Console ์ด๊ธฐ**
์ด๋: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
**2. ์ OAuth 2.0 ํด๋ผ์ด์ธํธ ID ์์ฑ**
- **"+ ์๊ฒฉ ์ฆ๋ช
๋ง๋ค๊ธฐ"** โ **"OAuth ํด๋ผ์ด์ธํธ ID"**๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
์ ํ: **"์น ์ ํ๋ฆฌ์ผ์ด์
"**
- ์ด๋ฆ: ์ํ๋ ๊ฒ(์: `OmniRoute Remote`)
**3. ์น์ธ๋ ๋ฆฌ๋๋ ์
URI ์ถ๊ฐ**
**"์น์ธ๋ ๋ฆฌ๋๋ ์
URI"** ํ๋์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.
```
https://your-server.com/callback
```
> `your-server.com`์ ์๋ฒ์ ๋๋ฉ์ธ ๋๋ IP๋ก ๋ฐ๊ฟ๋๋ค(ํ์ํ ๊ฒฝ์ฐ ํฌํธ ํฌํจ(์: `http://45.33.32.156:20128/callback`)).
**4. ์๊ฒฉ ์ฆ๋ช
์ ์ฅ ๋ฐ ๋ณต์ฌ**
์์ฑ ํ Google์ **ํด๋ผ์ด์ธํธ ID** ๋ฐ **ํด๋ผ์ด์ธํธ ๋น๋ฐ๋ฒํธ**๋ฅผ ํ์ํฉ๋๋ค.
**5. ํ๊ฒฝ ๋ณ์ ์ค์ **
`.env`(๋๋ Docker ํ๊ฒฝ ๋ณ์)์์:
```bash
# For Antigravity:
ANTIGRAVITY_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com
ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-your-secret
# For Gemini CLI:
GEMINI_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com
GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-your-secret
GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-your-secret
```
**6. OmniRoute ๋ค์ ์์**
```bash
# npm:
npm run dev
# Docker:
docker restart omniroute
```
**7. ๋ค์ ์ฐ๊ฒฐํด ๋ณด์ธ์**
๋์๋ณด๋ โ ๊ณต๊ธ์ โ Antigravity(๋๋ Gemini CLI) โ OAuth
์ด์ Google์ `https://your-server.com/callback`๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋ฆฌ๋๋ ์
๋ฉ๋๋ค.
---
#### ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ(์ฌ์ฉ์ ์ง์ ์๊ฒฉ ์ฆ๋ช
์์)
์ง๊ธ ๋ฐ๋ก ์๊ฒฉ ์ฆ๋ช
์ ์ค์ ํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ์๋ **์๋ URL ํ๋ฆ**์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. OmniRoute๋ Google ์ธ์ฆ URL์ ์ฝ๋๋ค.
2. ์น์ธ ํ Google์ `localhost`๋ก ๋ฆฌ๋๋ ์
์ ์๋ํฉ๋๋ค(์๊ฒฉ ์๋ฒ์์๋ ์คํจํจ).
3. ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์์ **์ ์ฒด URL์ ๋ณต์ฌ**ํ์ธ์(ํ์ด์ง๊ฐ ๋ก๋๋์ง ์๋ ๊ฒฝ์ฐ์๋ ํด๋น).
4. ํด๋น URL์ OmniRoute ์ฐ๊ฒฐ ๋ชจ๋ฌ์ ํ์๋ ํ๋์ ๋ถ์ฌ๋ฃ์ต๋๋ค.
5. **"์ฐ๊ฒฐ"**์ ํด๋ฆญํ์ธ์.
> ์ด๋ ๋ฆฌ๋๋ ์
ํ์ด์ง ๋ก๋ ์ฌ๋ถ์ ๊ด๊ณ์์ด URL์ ์ธ์ฆ ์ฝ๋๊ฐ ์ ํจํ๊ธฐ ๋๋ฌธ์ ์๋ํฉ๋๋ค.
---
๐ง๐ท ํฌ๋ฅดํฌ๊ฐ์ด ๋ฒ์
#### 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 a 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์ ํตํด ์๋์ผ๋ก ์ฝ๋๋ฅผ ํ์ธํ๊ฑฐ๋ ๋
๋ฆฝ์ ์ผ๋ก ๋ฆฌ๋๋ ์
ํ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค.
---
## ๐ ๏ธ ๊ธฐ์ ์คํ
๊ธฐ์ ์คํ ์ธ๋ถ์ ๋ณด๋ฅผ ํ์ฅํ๋ ค๋ฉด ํด๋ฆญํ์ธ์.
- **๋ฐํ์**: Node.js 18โ22 LTS(โ ๏ธ Node.js 24+๋ **์ง์๋์ง ์์ต๋๋ค** โ `better-sqlite3` ๋ค์ดํฐ๋ธ ๋ฐ์ด๋๋ฆฌ๋ ํธํ๋์ง ์์ต๋๋ค)
- **์ธ์ด**: TypeScript 5.9 โ `src/` ๋ฐ `open-sse/`์์ **100% TypeScript**(v2.0 ์ดํ ํต์ฌ ๋ชจ๋์์๋ `any`์ด 0์)
- **ํ๋ ์์ํฌ**: Next.js 16 + React 19 + Tailwind CSS 4
- **๋ฐ์ดํฐ๋ฒ ์ด์ค**: LowDB(JSON) + SQLite(๋๋ฉ์ธ ์ํ + ํ๋ก์ ๋ก๊ทธ + MCP ๊ฐ์ฌ + ๋ผ์ฐํ
๊ฒฐ์ )
- **์คํค๋ง**: Zod(MCP ๋๊ตฌ I/O ๊ฒ์ฆ, API ๊ณ์ฝ)
- **ํ๋กํ ์ฝ**: MCP(stdio/HTTP) + A2A v0.3(JSON-RPC 2.0 + SSE)
- **์คํธ๋ฆฌ๋ฐ**: ์๋ฒ์์ ๋ณด๋ธ ์ด๋ฒคํธ(SSE)
- **์ธ์ฆ**: OAuth 2.0(PKCE) + JWT + API ํค + MCP ๋ฒ์ ์น์ธ
- **ํ
์คํธ**: Node.js ํ
์คํธ ์คํ๊ธฐ + Vitest(๋จ์, ํตํฉ, E2E๋ฅผ ํฌํจํ 900๊ฐ ์ด์์ ํ
์คํธ)
- **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) | ์์ ๊ฐ ํฌํจ๋ ๋ชจ๋ ์๋ํฌ์ธํธ |
| [MCP Server](open-sse/mcp-server/README.md) | 16 MCP tools, IDE configs, Python/TS/Go clients |
| [A2A Server](src/lib/a2a/README.md) | JSON-RPC 2.0 ํ๋กํ ์ฝ, ์คํฌ, ์คํธ๋ฆฌ๋ฐ, ์์
๊ด๋ฆฌ |
| [Auto-Combo Engine](docs/auto-combo.md) | 6๋จ๊ณ ์ฑ์ , ๋ชจ๋ ํฉ, ์๊ฐ ์น์ |
| [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) | ์คํฌ๋ฆฐ์ท์ ํฌํจํ ์๊ฐ์ ๋์๋ณด๋ ๋๋ฌ๋ณด๊ธฐ |
| [Release Checklist](docs/RELEASE_CHECKLIST.md) | ์ถ์ ์ ์ ํจ์ฑ ๊ฒ์ฌ ๋จ๊ณ |
---
## ๐บ๏ธ ๋ก๋๋งต
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** โ ๋๋ ์์ฒญ์ ๋ํ ๋น๋๊ธฐ์ ์ผ๊ด ์ฒ๋ฆฌ
- ๐ฏ **ํ๊ทธ ๊ธฐ๋ฐ ๋ผ์ฐํ
** โ ์ฌ์ฉ์ ์ ์ ํ๊ทธ ๋ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญ ๋ผ์ฐํ
- ๐ฐ **์ต์ ๋น์ฉ ์ ๋ต** โ ๊ฐ์ฅ ์ ๋ ดํ ์ ๊ณต์
์ฒด๋ฅผ ์๋์ผ๋ก ์ ํํฉ๋๋ค.
> ๐ [**OMNI_TOKEN_342**](docs/new-features/)์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ฒด ๊ธฐ๋ฅ ์ฌ์(217๊ฐ ์ธ๋ถ ์ฌ์)
---
## ๐ฅ ๊ธฐ์ฌ์
[](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 v2.0.0 --title "v2.0.0" --generate-notes
```
---
## ๐ ์คํ ํ์คํ ๋ฆฌ
## ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์คํ๊ฒ์ด์ ๊ฐ ๋จ
## [](https://starchart.cc/diegosouzapw/OmniRoute)
## ๐ ๊ฐ์ฌ์ ๋ง์
์ด ํฌํฌ์ ์๊ฐ์ ์ค ์๋ณธ ํ๋ก์ ํธ์ธ **[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)์ ์ฐธ์กฐํ์ธ์.
---
์ฐ์ค๋ฌดํด์ ์ฝ๋ฉํ๋ ๊ฐ๋ฐ์๋ฅผ ์ํด โค๏ธ์ผ๋ก ๊ตฌ์ถ๋จ
omniroute.online