# 📖 Setup Guide — OmniRoute (āĻŦāĻžāĻ‚āϞāĻž) 🌐 **Languages:** đŸ‡ē🇸 [English](../../../../guides/SETUP_GUIDE.md) ¡ đŸ‡Ē🇹 [am](../../../am/docs/guides/SETUP_GUIDE.md) ¡ 🇸đŸ‡Ļ [ar](../../../ar/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ĻđŸ‡ŋ [az](../../../az/docs/guides/SETUP_GUIDE.md) ¡ 🇧đŸ‡Ŧ [bg](../../../bg/docs/guides/SETUP_GUIDE.md) ¡ 🇧đŸ‡Ļ [bs](../../../bs/docs/guides/SETUP_GUIDE.md) ¡ 🇨đŸ‡ŋ [cs](../../../cs/docs/guides/SETUP_GUIDE.md) ¡ 🇩🇰 [da](../../../da/docs/guides/SETUP_GUIDE.md) ¡ 🇩đŸ‡Ē [de](../../../de/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡Ŧ🇷 [el](../../../el/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡Ē🇸 [es](../../../es/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ĒđŸ‡Ē [et](../../../et/docs/guides/SETUP_GUIDE.md) ¡ 🇮🇷 [fa](../../../fa/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡Ģ🇮 [fi](../../../fi/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡Ģ🇷 [fr](../../../fr/docs/guides/SETUP_GUIDE.md) ¡ 🇮đŸ‡Ē [ga](../../../ga/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [gu](../../../gu/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŗđŸ‡Ŧ [ha](../../../ha/docs/guides/SETUP_GUIDE.md) ¡ 🇮🇱 [he](../../../he/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [hi](../../../hi/docs/guides/SETUP_GUIDE.md) ¡ 🇭🇷 [hr](../../../hr/docs/guides/SETUP_GUIDE.md) ¡ 🇭đŸ‡ē [hu](../../../hu/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡Ļ🇲 [hy](../../../hy/docs/guides/SETUP_GUIDE.md) ¡ 🇮🇩 [id](../../../id/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŗđŸ‡Ŧ [ig](../../../ig/docs/guides/SETUP_GUIDE.md) ¡ 🇮🇹 [it](../../../it/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡¯đŸ‡ĩ [ja](../../../ja/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŦđŸ‡Ē [ka](../../../ka/docs/guides/SETUP_GUIDE.md) ¡ 🇰🇭 [km](../../../km/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [kn](../../../kn/docs/guides/SETUP_GUIDE.md) ¡ 🇰🇷 [ko](../../../ko/docs/guides/SETUP_GUIDE.md) ¡ 🇱🇹 [lt](../../../lt/docs/guides/SETUP_GUIDE.md) ¡ 🇱đŸ‡ģ [lv](../../../lv/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [ml](../../../ml/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [mr](../../../mr/docs/guides/SETUP_GUIDE.md) ¡ 🇲🇾 [ms](../../../ms/docs/guides/SETUP_GUIDE.md) ¡ 🇲🇹 [mt](../../../mt/docs/guides/SETUP_GUIDE.md) ¡ 🇲🇲 [my](../../../my/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŗđŸ‡ĩ [ne](../../../ne/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŗđŸ‡ą [nl](../../../nl/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŗđŸ‡´ [no](../../../no/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [or](../../../or/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [pa](../../../pa/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ĩ🇭 [phi](../../../phi/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ĩ🇱 [pl](../../../pl/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ĩ🇹 [pt](../../../pt/docs/guides/SETUP_GUIDE.md) ¡ 🇧🇷 [pt-BR](../../../pt-BR/docs/guides/SETUP_GUIDE.md) ¡ 🇷🇴 [ro](../../../ro/docs/guides/SETUP_GUIDE.md) ¡ 🇷đŸ‡ē [ru](../../../ru/docs/guides/SETUP_GUIDE.md) ¡ 🇱🇰 [si](../../../si/docs/guides/SETUP_GUIDE.md) ¡ 🇸🇰 [sk](../../../sk/docs/guides/SETUP_GUIDE.md) ¡ 🇸🇮 [sl](../../../sl/docs/guides/SETUP_GUIDE.md) ¡ 🇷🇸 [sr](../../../sr/docs/guides/SETUP_GUIDE.md) ¡ 🇸đŸ‡Ē [sv](../../../sv/docs/guides/SETUP_GUIDE.md) ¡ 🇰đŸ‡Ē [sw](../../../sw/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [ta](../../../ta/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŽđŸ‡ŗ [te](../../../te/docs/guides/SETUP_GUIDE.md) ¡ 🇹🇭 [th](../../../th/docs/guides/SETUP_GUIDE.md) ¡ 🇹🇷 [tr](../../../tr/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ēđŸ‡Ļ [uk-UA](../../../uk-UA/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ĩ🇰 [ur](../../../ur/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ēđŸ‡ŋ [uz](../../../uz/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ģđŸ‡ŗ [vi](../../../vi/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡ŗđŸ‡Ŧ [yo](../../../yo/docs/guides/SETUP_GUIDE.md) ¡ đŸ‡¨đŸ‡ŗ [zh-CN](../../../zh-CN/docs/guides/SETUP_GUIDE.md) ¡ 🇹đŸ‡ŧ [zh-TW](../../../zh-TW/docs/guides/SETUP_GUIDE.md) --- > OmniRoute-āĻāϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϏ⧇āϟāφāĻĒ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏāĨ¤ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ, [README-āĻāϰ āĻĻā§āϰ⧁āϤ āĻļ⧁āϰ⧁](../README.md#-quick-start) āĻĻ⧇āϖ⧁āύāĨ¤ ## āϏ⧂āϚāĻŋāĻĒāĻ¤ā§āϰ - [āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ](#install-methods) - [CLI āϟ⧁āϞ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ](#cli-tool-configuration) - [āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āϏ⧇āϟāφāĻĒ (MCP + A2A)](#protocol-setup-mcp--a2a) - [āϟāĻžāχāĻŽāφāωāϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ](#timeout-configuration) - [āĻ¸ā§āĻĒā§āϞāĻŋāϟ-āĻĒā§‹āĻ°ā§āϟ āĻŽā§‹āĻĄ](#split-port-mode) - [Void Linux (xbps-src)](#void-linux-xbps-src-template) - [āφāύāχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž](#uninstalling) --- ## āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ ### npm (āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ) ```bash npm install -g omniroute omniroute ``` āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄāϟāĻŋ `http://localhost:20128`-āĻ āĻ–ā§‹āϞ⧇ āĻāĻŦāĻ‚ API-āĻāϰ āĻŦ⧇āϏ URL āĻšāϞ⧋ `http://localhost:20128/v1`āĨ¤ ### pnpm ```bash pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/core omniroute ``` > **pnpm āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž:** `better-sqlite3` āĻāĻŦāĻ‚ `@swc/core`-āĻāϰ āύ⧇āϟāĻŋāĻ­ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāϤ⧇ `--allow-build` āĻĢā§āĻ˛ā§āϝāĻžāĻ—āϟāĻŋ āφāĻŦāĻļā§āϝāĻ•āĨ¤ pnpm v11-āĻ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āχāύāĻ¸ā§āϟāϞ⧇āϰ āϜāĻ¨ā§āϝ `pnpm approve-builds -g` āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āύāϝāĻŧāĨ¤ ### Arch Linux (AUR) ```bash yay -S omniroute-bin systemctl --user enable --now omniroute.service ``` [AUR āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ](https://aur.archlinux.org/packages/omniroute-bin) OmniRoute āχāύāĻ¸ā§āϟāϞ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ systemd āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ ### āϏ⧋āĻ°ā§āϏ āĻĨ⧇āϕ⧇ ```bash npm install PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` > **Windows āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āύ⧋āϟ:** āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇, āϞāĻŋāĻ—ā§āϝāĻžāϏāĻŋ `%USERPROFILE%\.omniroute` āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϟāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āύāĻž āĻĨāĻžāĻ•āϞ⧇ OmniRoute `%APPDATA%\omniroute` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻ­āĻŋāĻ¨ā§āύ āϕ⧋āύ⧋ āĻĄā§‡āϟāĻž-āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϞ⧋āϕ⧇āĻļāύ āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ `DATA_DIR` āϏ⧇āϟ āĻ•āϰ⧁āύāĨ¤ > **āύ⧋āϟ:** āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ `npm install`, `.env.example` āĻĨ⧇āϕ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ `.env` āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āχāύāĻ¸ā§āϟāϞāϗ⧁āϞ⧋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ `.env` āĻ“āĻ­āĻžāϰāϰāĻžāχāϟ āĻ•āϰāĻŦ⧇ āύāĻž, āĻĢāϞ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāĻœā§‡āĻļāύāϗ⧁āϞ⧋ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻĨāĻžāϕ⧇āĨ¤ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āĻŽāĻžāύ āĻĻāĻŋāϝāĻŧ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āφāĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋āϰ āφāϗ⧇ `.env` āĻŽā§āϛ⧇ āĻĻāĻŋāύāĨ¤ ### Docker Compose āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āĻāĻŦāĻ‚ Caddy HTTPS-āϏāĻš āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ Docker āϏ⧇āϟāφāĻĒ⧇āϰ āϜāĻ¨ā§āϝ [Docker āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻž](./DOCKER_GUIDE.md) āĻĻ⧇āϖ⧁āύāĨ¤ ### āĻĄā§‡āĻ¸ā§āĻ•āϟāĻĒ āĻ…ā§āϝāĻžāĻĒ (Electron) OmniRoute-āĻāϰ āϏāĻ™ā§āϗ⧇ Electron 41 + electron-builder 26.10-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻāĻ•āϟāĻŋ āĻĄā§‡āĻ¸ā§āĻ•āϟāĻĒ āĻ°ā§āϝāĻžāĻĒāĻžāϰ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āωāĻĒāϞāĻ­ā§āϝ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϏāĻŽā§‚āĻš (āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻ¸ā§āĻĒ⧇āϏ āϰ⧁āϟ): ```bash npm run electron:dev # āĻšāϟ-āϰāĻŋāϞ⧋āĻĄāϏāĻš āĻĄā§‡āĻ¸ā§āĻ•āϟāĻĒ āϚāĻžāϞāĻžāύ npm run electron:build # āĻŦāĻ°ā§āϤāĻŽāĻžāύ OS-āĻāϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ (āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻļāύāĻžāĻ•ā§āϤ) npm run electron:build:win # Windows āχāύāĻ¸ā§āϟāϞāĻžāϰ (NSIS + āĻĒā§‹āĻ°ā§āĻŸā§‡āĻŦāϞ) npm run electron:build:mac # macOS (dmg + zip, arm64+x64) npm run electron:build:linux # Linux (AppImage + deb + rpm) npm run electron:smoke:packaged # āĻĒā§āϝāĻžāϕ⧇āϜ āĻ•āϰāĻž āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻ¸ā§āĻŽā§‹āĻ• āĻŸā§‡āĻ¸ā§āϟ āϚāĻžāϞāĻžāύ ``` āĻĄā§‡āĻ¸ā§āĻ•āϟāĻĒ āχāύāĻ¸ā§āϟāϞāĻžāϰāϗ⧁āϞ⧋āϰ āϰāĻŋāϞāĻŋāϜ GitHub Releases-āĻāϰ āϏāĻ™ā§āϗ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻĨāĻžāϕ⧇āĨ¤ Electron āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻĒā§‚āĻ°ā§āĻŖāĻžāĻ™ā§āĻ— āĻ—āĻ­ā§€āϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻžāϰ (āϏāĻžāχāύāĻŋāĻ‚, IPC āĻŦā§āϰāĻŋāϜ, āĻĄāĻŋāĻ¸ā§āĻŸā§āϰ⧋) āϜāĻ¨ā§āϝ [`ELECTRON_GUIDE.md`](./ELECTRON_GUIDE.md) āĻĻ⧇āϖ⧁āύ _(āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āϤ⧈āϰāĻŋ)_āĨ¤ ### āĻšā§‡āĻĄāϞ⧇āϏ āϏāĻžāĻ°ā§āĻ­āĻžāϰ (CI/āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ) āĻ…āύāĻŦ⧇āĻ•ā§āώāĻŋāϤ āϏ⧇āϟāφāĻĒ⧇āϰ (Docker, Kubernetes, CI) āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ: ```bash omniroute setup --non-interactive omniroute providers test-batch ``` āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ (`INITIAL_PASSWORD`, `OMNIROUTE_WS_BRIDGE_SECRET` āχāĻ¤ā§āϝāĻžāĻĻāĻŋ) āϏāĻ™ā§āϗ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇ āφāĻĒāύāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϝ⧋āĻ—ā§āϝ āωāĻĒāĻžāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ OmniRoute āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϏ āϚāĻžāϞ⧁ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤ ### CLI āĻ…āĻĒāĻļāύ | āĻ•āĻŽāĻžāĻ¨ā§āĻĄ | āĻŦāĻŋāĻŦāϰāĻŖ | | ----------------------- | ----------------------------------------------------------------------------------------------------- | | `omniroute` | āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ (`PORT=20128`, āĻāĻ•āχ āĻĒā§‹āĻ°ā§āĻŸā§‡ API āĻ“ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ) | | `omniroute setup` | āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ“ āĻĒā§āϰāĻĨāĻŽ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāϤ CLI āĻ…āύāĻŦā§‹āĻ°ā§āĻĄāĻŋāĻ‚ | | `omniroute doctor` | āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞ⧁ āύāĻž āĻ•āϰ⧇āχ āϞ⧋āĻ•āĻžāϞ āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āϚāĻžāϞāĻžāύ | | `omniroute providers` | CLI āĻĨ⧇āϕ⧇ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āϖ⧁āρāϜ⧁āύ, āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ, āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ āĻ“ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ | | `omniroute config` | CLI āϟ⧁āϞ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ — āĻ•āύāĻĢāĻŋāĻ— āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ, āĻĒāĻžāύ, āϏ⧇āϟ āĻ•āϰ⧁āύ āĻ“ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ | | `omniroute status` | āĻ…āĻĢāϞāĻžāχāύ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ — āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ, DB, āϟ⧁āϞ, āĻ•āύāĻĢāĻŋāĻ— | | `omniroute logs` | API āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϞāĻ— āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻ•āϰ⧁āύ (`--follow` āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇) | | `omniroute update` | OmniRoute āφāĻĒāĻĄā§‡āϟ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ āĻŦāĻž āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύ | | `omniroute provider` | āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āϏāĻ‚āϝ⧋āĻ— āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ — āϝ⧋āĻ— āĻ•āϰ⧁āύ, āϤāĻžāϞāĻŋāĻ•āĻžāϭ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ, āϏāϰāĻžāύ, āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύ, āĻĄāĻŋāĻĢāĻ˛ā§āϟ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ | | `omniroute --port 3000` | āĻ•ā§āϝāĻžāύ⧋āύāĻŋāĻ•ā§āϝāĻžāϞ/API āĻĒā§‹āĻ°ā§āϟ 3000-āĻ āϏ⧇āϟ āĻ•āϰ⧁āύ | | `omniroute --mcp` | MCP āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ (stdio āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĒā§‹āĻ°ā§āϟ) | | `omniroute --no-open` | āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϖ⧁āϞāĻŦ⧇āύ āύāĻž | | `omniroute --help` | āϏāĻšāĻžāϝāĻŧāϤāĻž āĻĻ⧇āĻ–āĻžāύ | āĻšā§‡āĻĄāϞ⧇āϏ āϏ⧇āϟāφāĻĒ āĻĢā§āĻ˛ā§āϝāĻžāĻ— āĻŦāĻž āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇: ```bash omniroute setup --non-interactive --password "$OMNIROUTE_PASSWORD" omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY" omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY" --test-provider ``` āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āύāĻž āϖ⧁āϞ⧇āχ āϞ⧋āĻ•āĻžāϞ āĻĄāĻžāϝāĻŧāĻžāĻ—āύāĻ¸ā§āϟāĻŋāĻ• āϚāĻžāϞāĻžāύ: ```bash omniroute doctor omniroute doctor --json omniroute doctor --no-liveness ``` āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āύāĻž āϖ⧁āϞ⧇āχ SSH āĻŦāĻž āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĨ⧇āϕ⧇ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰ⧁āύ: ```bash omniroute providers available omniroute providers available --search openai omniroute providers available --category api-key omniroute providers list omniroute providers test omniroute providers test-all omniroute providers validate ``` --- ## CLI āϟ⧁āϞ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ ### 1) āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ API āϕ⧀ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ 1. Dashboard → `Providers` āϖ⧁āϞ⧁āύ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϤāϤ āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ (OAuth āĻ…āĻĨāĻŦāĻž API āϕ⧀)āĨ¤ 2. Dashboard → `Endpoints` āϖ⧁āϞ⧁āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ API āϕ⧀ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ 3. (āϐāĻšā§āĻ›āĻŋāĻ•) Dashboard → `Combos` āϖ⧁āϞ⧁āύ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĢāϞāĻŦā§āϝāĻžāĻ• āĻšā§‡āχāύ āϏ⧇āϟ āĻ•āϰ⧁āύāĨ¤ ### 2) āφāĻĒāύāĻžāϰ āϕ⧋āĻĄāĻŋāĻ‚ āϟ⧁āϞāϕ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ ```txt āĻŦ⧇āϏ URL: http://localhost:20128/v1 API āϕ⧀: [Endpoint āĻĒ⧃āĻˇā§āĻ āĻž āĻĨ⧇āϕ⧇ āĻ•āĻĒāĻŋ āĻ•āϰ⧁āύ] āĻŽāĻĄā§‡āϞ: if/qwen3.8-max-preview (āĻ…āĻĨāĻŦāĻž āϝ⧇āϕ⧋āύ⧋ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ/āĻŽāĻĄā§‡āϞ āĻĒā§āϰāĻŋāĻĢāĻŋāĻ•ā§āϏ) ``` āφāĻĒāύāĻžāϰ āĻāĻĄāĻŋāϟāϰ `Authorization: Bearer ...` āĻĒāĻžāĻ āĻžāϤ⧇ āύāĻž āĻĒāĻžāϰāϞ⧇, āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻŸā§‹āϕ⧇āύāϝ⧁āĻ•ā§āϤ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āĻŦ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ: ```txt āĻŦ⧇āϏ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/ āĻŽāĻĄā§‡āϞāϏāĻŽā§‚āĻšā§‡āϰ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/models āĻšā§āϝāĻžāϟ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/chat/completions Ollama āĻŸā§āϝāĻžāĻ— URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/api/tags ``` Claude Code, Codex CLI, Cursor, Cline, OpenClaw, OpenCode āĻāĻŦāĻ‚ OpenAI-āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ SDK-āĻāϰ āϏāĻ™ā§āϗ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ #### `setup-*` āĻĻāĻŋāϝāĻŧ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰ⧁āύ āĻŦ⧇āϏ URL āĻāĻŦāĻ‚ āϕ⧀ āĻšāĻžāϤ⧇ āĻĒ⧇āĻ¸ā§āϟ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇, āϞāĻžāχāĻ­ āĻŽāĻĄā§‡āϞ āĻ•ā§āϝāĻžāϟāĻžāϞāĻ— āĻĨ⧇āϕ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϟ⧁āϞ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ•āύāĻĢāĻŋāĻ— OmniRoute-āϕ⧇ āϞāĻŋāĻ–āϤ⧇ āĻĻāĻŋāύāĨ¤ āĻĒā§āϰāϤāĻŋ āϟ⧁āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ: ```bash omniroute setup-codex # ~/.codex/.config.toml āĻĒā§āϰ⧋āĻĢāĻžāχāϞ omniroute setup-claude # ~/.claude/profiles//settings.json omniroute setup-opencode # ~/.config/opencode/opencode.json (openai-āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ) omniroute setup-cline # Cline CLI + VS Code āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āϏ⧇āϟāĻŋāĻ‚āϏ omniroute setup-kilo # Kilo Code omniroute setup-continue # ~/.continue/config.yaml (Continue / cn) omniroute setup-cursor # Cursor-āĻāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϭ⧇āϤāϰ⧇āϰ āϧāĻžāĻĒāϗ⧁āϞ⧋ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰ⧇ omniroute setup-roo # Roo Code āχāĻŽāĻĒā§‹āĻ°ā§āϟ + autoImport āĻĒāϝāĻŧ⧇āĻ¨ā§āϟāĻžāϰ omniroute setup-crush # ~/.config/crush/crush.json omniroute setup-zed # ~/.config/zed/settings.json (openai_compatible) omniroute setup-goose # ~/.config/goose/config.yaml omniroute setup-aider # ~/.aider.conf.yml omniroute setup-qwen # ~/.qwen/settings.json + ~/.qwen/.env ``` āĻāĻ•āϟāĻŋ **āϰāĻŋāĻŽā§‹āϟ** OmniRoute-āĻāϰ āĻŦāĻŋāĻĒāϰ⧀āϤ⧇ āϕ⧋āύ⧋ āϞ⧋āĻ•āĻžāϞ āϟ⧁āϞ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡ `--remote --api-key ` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžāϝāĻŧ, āφāϰ āĻĒā§āϰāĻŋāĻ­āĻŋāωāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āϰāϝāĻŧ⧇āϛ⧇ `--dry-run`āĨ¤ āϏāĻ āĻŋāĻ• env āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϕ⧋āύ⧋ āĻ•āύāĻĢāĻŋāĻ— āύāĻž āϞāĻŋāϖ⧇āχ āĻāĻ•āϟāĻŋ CLI āϚāĻžāϞ⧁ āĻ•āϰāϤ⧇ āĻœā§‡āύ⧇āϰāĻŋāĻ• āϞāĻžā§āϚāĻžāϰ `omniroute run ` (claude, codex, aider, goose, opencode, qwen, gemini) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ; āφāϗ⧇āϰ āĻĒā§āϰāϤāĻŋ-āϟ⧁āϞ āϞāĻžā§āϚāĻžāϰ `omniroute launch` (Claude Code) āĻāĻŦāĻ‚ `omniroute launch-codex` (Codex) āĻāĻ–āύ⧋ āωāĻĒāϞāĻ­ā§āϝāĨ¤ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŸā§‡āĻŦāĻŋāϞ⧇āϰ āϜāĻ¨ā§āϝ (āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϕ⧀ āϞ⧇āϖ⧇, āϏāĻŦ āĻĢā§āĻ˛ā§āϝāĻžāĻ—, āϞ⧋āĻ•āĻžāϞ āĻŦāύāĻžāĻŽ āϰāĻŋāĻŽā§‹āϟ, āĻŦ⧇āϏ-URL `/v1` āĻ•āύāϭ⧇āύāĻļāύ), **[CLI āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύāϏāĻŽā§‚āĻš](./CLI-INTEGRATIONS.md)** āĻĻ⧇āϖ⧁āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϟ⧁āϞ⧇āϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ (Claude Code, Codex CLI, Cursor, Cline, OpenClaw, Kilo Code, Copilot āĻāĻŦāĻ‚ āφāϰāĻ“ āĻ…āύ⧇āĻ•), āύāĻŋāĻŦ⧇āĻĻāĻŋāϤ **[CLI āϟ⧁āϞāϏ āĻ—āĻžāχāĻĄ](../reference/CLI-TOOLS.md)** āĻĻ⧇āϖ⧁āύāĨ¤ --- ## āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āϏ⧇āϟāφāĻĒ (MCP + A2A) ### MCP āϏ⧇āϟāφāĻĒ (Model Context Protocol) stdio āĻŽā§‹āĻĄā§‡ MCP āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĒā§‹āĻ°ā§āϟ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ: ```bash omniroute --mcp ``` āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ āĻĒā§āϰāĻŦāĻžāĻš: ```bash # 1. MCP āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ omniroute --mcp # 2. āφāĻĒāύāĻžāϰ MCP āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻĨ⧇āϕ⧇ āĻ•āϞ āĻ•āϰ⧁āύ: omniroute_get_health # āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āĻ¸ā§āĻŦāĻžāĻ¸ā§āĻĨā§āϝāĻžāĻŦāĻ¸ā§āĻĨāĻž āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ omniroute_list_combos # āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āĻŽā§āĻŦā§‹āϗ⧁āϞ⧋ āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ # 3. āĻ…āĻĨāĻŦāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ E2E āĻ¸ā§āϝ⧁āϟ āϚāĻžāϞāĻžāύ: npm run test:protocols:e2e ``` #### MCP āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ **Claude Code:** ```bash claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp/stream ``` **Cursor / Cline:** āφāĻĒāύāĻžāϰ MCP āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āϝ⧋āĻ— āĻ•āϰ⧁āύ: ```json { "mcpServers": { "omniroute": { "command": "omniroute", "args": ["--mcp"], "env": {} } } } ``` **āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ MCP āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ:** [MCP Server README](../../open-sse/mcp-server/README.md) — 110āϟāĻŋ āϟ⧁āϞ, IDE āĻ•āύāĻĢāĻŋāĻ—, Python/TS/Go āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟāĨ¤ ### A2A āϏ⧇āϟāφāĻĒ (Agent-to-Agent Protocol) Agent Card āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ: ```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."}]}}' ``` **āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ A2A āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ:** [A2A Server README](../../src/lib/a2a/README.md) — JSON-RPC 2.0, āĻ¸ā§āĻ•āĻŋāϞ, āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāĻŋāĻ‚, āϟāĻžāĻ¸ā§āĻ• āϞāĻžāχāĻĢāϏāĻžāχāϕ⧇āϞāĨ¤ --- ## āϟāĻžāχāĻŽāφāωāϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ ### āĻŽā§ŒāϞāĻŋāĻ• āϟāĻžāχāĻŽāφāωāϟ āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϰ āĻļ⧁āϧ⧁ āĻāχ āĻĻ⧁āϟāĻŋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĒā§āϰāϝāĻŧā§‹āϜāύ: | āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ | āĻĄāĻŋāĻĢāĻ˛ā§āϟ | āωāĻĻā§āĻĻ⧇āĻļā§āϝ | | ------------------------ | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | `600000` | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻļ⧁āϰ⧁ āĻšāĻ“āϝāĻŧāĻžāϰ āϟāĻžāχāĻŽāφāωāϟ, āϞ⧁āĻ•āĻžāύ⧋ Undici āϟāĻžāχāĻŽāφāωāϟ, TLS āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ…āύ⧁āϰ⧋āϧ āĻāĻŦāĻ‚ API āĻŦā§āϰāĻŋāϜ āĻ…āύ⧁āϰ⧋āϧ/āĻĒā§āϰāĻ•ā§āϏāĻŋ āϟāĻžāχāĻŽāφāωāĻŸā§‡āϰ āĻ…āĻ­āĻŋāĻ¨ā§āύ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻŽāĻžāĻ¤ā§āϰāĻž | | `STREAM_IDLE_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` āĻĨ⧇āϕ⧇ āωāĻ¤ā§āϤāϰāĻžāϧāĻŋāĻ•āĻžāϰāϏ⧂āĻ¤ā§āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ | OmniRoute SSE āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāĻŋāĻ‚ āϚāĻžāĻ™ā§āĻ•āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝāĻŦāĻ°ā§āϤ⧀ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āĻŦāĻŋāϰāϤāĻŋ | āĻĒāĻļā§āϚāĻžā§ŽāĻŽā§āĻ–ā§€ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āĻž āĻšāϝāĻŧ⧇āϛ⧇: āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ `FETCH_TIMEOUT_MS`, `API_BRIDGE_PROXY_TIMEOUT_MS` āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ¸ā§āϤāϰāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϟāĻžāχāĻŽāφāωāϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻāĻ–āύāĻ“ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ…āĻ­āĻŋāĻ¨ā§āύ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻŽāĻžāĻ¤ā§āϰāĻžāϕ⧇ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄ āĻ•āϰ⧇āĨ¤ ### āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ-āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āύ⧋āϟ Claude Code-āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽāϗ⧁āϞ⧋āϰ (`anthropic-compatible-cc-*`) āϜāĻ¨ā§āϝ, OmniRoute āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻĢ⧇āϚ āϟāĻžāχāĻŽāφāωāϟ āĻĨ⧇āϕ⧇ āφāωāϟāĻŦāĻžāωāĻ¨ā§āĻĄ `X-Stainless-Timeout` āĻšā§‡āĻĄāĻžāϰ āύāĻŋāĻ°ā§āĻŖāϝāĻŧ āĻ•āϰ⧇, āϝāĻžāϤ⧇ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ-āĻĒāĻ•ā§āώ⧇āϰ āϰāĻŋāĻĄ āϟāĻžāχāĻŽāφāωāϟ āφāĻĒāύāĻžāϰ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇āϰ āϏāĻ™ā§āϗ⧇ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āĻĨāĻžāϕ⧇āĨ¤ āϤ⧃āϤ⧀āϝāĻŧ-āĻĒāĻ•ā§āώ⧇āϰ Claude Code-āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻĒā§āϰāĻ•ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ, OmniRoute āĻĄāĻŋāĻĢāĻ˛ā§āϟ `anthropic-beta` āϏ⧇āϟāϕ⧇ āϏāĻ‚āϝāϤ āϰāĻžāϖ⧇ āĻāĻŦāĻ‚ `Client Cache Control`-āϕ⧇ `Auto` āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āϰāĻžāĻ–āĻž āĻšāϞ⧇ āĻļ⧁āϧ⧁ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ-āĻĒā§āϰāĻĻāĻ¤ā§āϤ `cache_control` āĻŽāĻžāĻ°ā§āĻ•āĻžāϰ āĻĢāϰ⧋āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ•āϰ⧇āĨ¤ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽā§‡ āĻŦāĻŋāĻļ⧇āώāĻ­āĻžāĻŦ⧇ āϰāĻŋāĻĄā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāĻž Claude āĻĨāĻŋāĻ‚āĻ•āĻŋāĻ‚ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽā§‡āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇āχ āϕ⧇āĻŦāϞ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻ‚āϝ⧋āϗ⧇āϰ āϜāĻ¨ā§āϝ "Enable redact-thinking beta" āϟāĻ—āϞāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧁āύāĨ¤ ### āωāĻ¨ā§āύāϤ āϟāĻžāχāĻŽāφāωāϟ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄ | āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ | āĻĄāĻŋāĻĢāĻ˛ā§āϟ | āωāĻĻā§āĻĻ⧇āĻļā§āϝ | | ---------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | `FETCH_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` āĻĨ⧇āϕ⧇ āωāĻ¤ā§āϤāϰāĻžāϧāĻŋāĻ•āĻžāϰāϏ⧂āĻ¤ā§āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ | āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻšā§‡āĻĄāĻžāϰ āφāϏāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻļ⧁āϰ⧁āϰ āϟāĻžāχāĻŽāφāωāϟ | | `FETCH_HEADERS_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` āĻĨ⧇āϕ⧇ āωāĻ¤ā§āϤāϰāĻžāϧāĻŋāĻ•āĻžāϰāϏ⧂āĻ¤ā§āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻšā§‡āĻĄāĻžāϰ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ Undici-āĻāϰ āϏāĻŽāϝāĻŧāϏ⧀āĻŽāĻž | | `FETCH_BODY_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` āĻĨ⧇āϕ⧇ āωāĻ¤ā§āϤāϰāĻžāϧāĻŋāĻ•āĻžāϰāϏ⧂āĻ¤ā§āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ | āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻŦāĻĄāĻŋ āϚāĻžāĻ™ā§āĻ•āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝāĻŦāĻ°ā§āϤ⧀ āϏāĻŽāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ Undici-āĻāϰ āϏāĻŽāϝāĻŧāϏ⧀āĻŽāĻž (`0` āĻāϟāĻŋ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧇) | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Undici TCP āϏāĻ‚āϝ⧋āĻ— āϟāĻžāχāĻŽāφāωāϟ | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Undici-āĻāϰ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āĻŋāĻĒ-āĻ…ā§āϝāĻžāϞāĻžāχāĻ­ āϏāϕ⧇āϟ āϟāĻžāχāĻŽāφāωāϟ | | `TLS_CLIENT_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` āĻĨ⧇āϕ⧇ āωāĻ¤ā§āϤāϰāĻžāϧāĻŋāĻ•āĻžāϰāϏ⧂āĻ¤ā§āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ | `wreq-js`-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āϰāĻž TLS āĻĢāĻŋāĻ™ā§āĻ—āĻžāϰāĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϟāĻžāχāĻŽāφāωāϟ | | `API_BRIDGE_PROXY_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` āĻŦāĻž `600000` āĻĨ⧇āϕ⧇ āωāĻ¤ā§āϤāϰāĻžāϧāĻŋāĻ•āĻžāϰāϏ⧂āĻ¤ā§āϰ⧇ āĻĒā§āϰāĻžāĻĒā§āϤ | API āĻĒā§‹āĻ°ā§āϟ āĻĨ⧇āϕ⧇ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻĒā§‹āĻ°ā§āĻŸā§‡ `/v1` āĻĒā§āϰāĻ•ā§āϏāĻŋ āĻĢāϰ⧋āϝāĻŧāĻžāĻ°ā§āĻĄāĻŋāĻ‚āϝāĻŧ⧇āϰ āϟāĻžāχāĻŽāφāωāϟ | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `max(API_BRIDGE_PROXY_TIMEOUT_MS, 300000)` | API āĻŦā§āϰāĻŋāϜ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āχāύāĻ•āĻžāĻŽāĻŋāĻ‚ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϟāĻžāχāĻŽāφāωāϟ | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | API āĻŦā§āϰāĻŋāϜ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āχāύāĻ•āĻžāĻŽāĻŋāĻ‚ āĻšā§‡āĻĄāĻžāϰ⧇āϰ āϟāĻžāχāĻŽāφāωāϟ | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | API āĻŦā§āϰāĻŋāϜ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ•āĻŋāĻĒ-āĻ…ā§āϝāĻžāϞāĻžāχāĻ­ āϟāĻžāχāĻŽāφāωāϟ | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | API āĻŦā§āϰāĻŋāϜ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāϕ⧇āϟ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧāϤāĻžāϰ āϟāĻžāχāĻŽāφāωāϟ (`0` āĻāϟāĻŋ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰ⧇) | > **āĻĻā§āϰāĻˇā§āϟāĻŦā§āϝ:** āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāĻŋāĻ‚ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, `FETCH_TIMEOUT_MS` āĻļ⧁āϧ⧁ āϏāĻ‚āϝ⧋āĻ— āϏ⧇āϟāφāĻĒ / āĻĒā§āϰāĻĨāĻŽ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻžāϰ āϏāĻŽāϝāĻŧāϟ⧁āϕ⧁ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧇āĨ¤ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻšāϝāĻŧ⧇ āϗ⧇āϞ⧇, OmniRoute āĻļ⧁āϧ⧁ āĻĒā§āϰāĻ•ā§ƒāϤ āĻ¸ā§āĻĨāĻŦāĻŋāϰāϤāĻž (`STREAM_IDLE_TIMEOUT_MS`) āĻŦāĻž Undici āĻŦāĻĄāĻŋāϰ āύāĻŋāĻˇā§āĻ•ā§āϰāĻŋāϝāĻŧāϤāĻžāϰ (`FETCH_BODY_TIMEOUT_MS`) āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āχ āĻāϟāĻŋ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰāĻŦ⧇āĨ¤ ### āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻĒā§āϰāĻ•ā§āϏāĻŋ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ Nginx, Caddy, Cloudflare āĻŦāĻž āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āĻĒ⧇āĻ›āύ⧇ OmniRoute āϚāĻžāϞāĻžāύ, āϤāĻžāĻšāϞ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ āϝ⧇ āĻĒā§āϰāĻ•ā§āϏāĻŋāϰ āϟāĻžāχāĻŽāφāωāϟāϗ⧁āϞ⧋āĻ“ āφāĻĒāύāĻžāϰ OmniRoute āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ/āĻĢ⧇āϚ āϟāĻžāχāĻŽāφāωāĻŸā§‡āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋāĨ¤ --- ## āĻĒ⧃āĻĨāĻ•-āĻĒā§‹āĻ°ā§āϟ āĻŽā§‹āĻĄ āωāĻ¨ā§āύāϤ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ (āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻĒā§āϰāĻ•ā§āϏāĻŋ, āĻ•āύāĻŸā§‡āχāύāĻžāϰ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚) API āĻāĻŦāĻ‚ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻĒ⧃āĻĨāĻ• āĻĒā§‹āĻ°ā§āĻŸā§‡ āϚāĻžāϞāĻžāύ: ```bash PORT=20128 DASHBOARD_PORT=20129 omniroute # API: http://localhost:20128/v1 # āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ: http://localhost:20129 ``` --- ## Void Linux (`xbps-src`) āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ Void Linux āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž `xbps-src` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āύ⧇āϟāĻŋāĻ­ āĻĒā§āϝāĻžāϕ⧇āϜ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāχ āĻŦā§āϞāĻ•āϟāĻŋ `srcpkgs/omniroute/template` āĻšāĻŋāϏ⧇āĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ: ```bash # 'omniroute'-āĻāϰ āϜāĻ¨ā§āϝ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĢāĻžāχāϞ pkgname=omniroute version=3.8.0 revision=1 hostmakedepends="nodejs python3 make" depends="openssl" short_desc="Universal AI gateway with smart routing for multiple LLM providers" maintainer="zenobit " license="MIT" homepage="https://github.com/diegosouzapw/OmniRoute" distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" # āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāϞāĻŋāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻšā§‡āĻ•āϏāĻžāĻŽ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻ­āĻžāĻŦ⧇: # curl -L -o /tmp/omniroute.tar.gz "https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" && sha256sum /tmp/omniroute.tar.gz checksum=PLACEHOLDER_REGENERATE_PER_RELEASE system_accounts="_omniroute" omniroute_homedir="/var/lib/omniroute" export NODE_ENV=production export npm_config_engine_strict=false export npm_config_loglevel=error export npm_config_fund=false export npm_config_audit=false do_build() { local _gyp_arch case "$XBPS_TARGET_MACHINE" in aarch64*) _gyp_arch=arm64 ;; armv7*|armv6*) _gyp_arch=arm ;; i686*) _gyp_arch=ia32 ;; *) _gyp_arch=x64 ;; esac NODE_ENV=development npm ci --ignore-scripts npm run build cp -r .next/static .next/standalone/.next/static [ -d public ] && cp -r public .next/standalone/public || true local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js (cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch") local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release mkdir -p "$_bs3_release" cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/" rm -rf .next/standalone/node_modules/@img for _mod in pino-abstract-transport split2 process-warning; do cp -r "node_modules/$_mod" .next/standalone/node_modules/ done } do_check() { npm run test:unit } do_install() { vmkdir usr/lib/omniroute/.next vcopy .next/standalone/. usr/lib/omniroute/.next/standalone for _d in \ .next/standalone/.next/server/app/dashboard \ .next/standalone/.next/server/app/dashboard/settings \ .next/standalone/.next/server/app/dashboard/providers; do touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep" done cat > "${WRKDIR}/omniroute" <<'EOF' #!/bin/sh export PORT="${PORT:-20128}" export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}" export APP_LOG_TO_FILE="${APP_LOG_TO_FILE:-false}" mkdir -p "${DATA_DIR}" exec node /usr/lib/omniroute/.next/standalone/server.js "$@" EOF vbin "${WRKDIR}/omniroute" } post_install() { vlicense LICENSE } ``` --- ## āφāύāχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž | āĻ•āĻŽāĻžāĻ¨ā§āĻĄ | āĻ•āĻžāĻ°ā§āϝāĻ•ā§āϰāĻŽ | | ------------------------ | --------------------------------------------------------------------------------------------- | | `npm run uninstall` | āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ, āϤāĻŦ⧇ `~/.omniroute`-āĻ āĻĨāĻžāĻ•āĻž **āφāĻĒāύāĻžāϰ DB āĻāĻŦāĻ‚ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϰ⧇āϖ⧇ āĻĻ⧇āϝāĻŧ**āĨ¤ | | `npm run uninstall:full` | āĻ…ā§āϝāĻžāĻĒāϟāĻŋ āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ āĻāĻŦāĻ‚ **āϏāĻŽāĻ¸ā§āϤ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ, āϕ⧀ āĻ“ āĻĄā§‡āϟāĻžāĻŦ⧇āϏ āĻ¸ā§āĻĨāĻžāϝāĻŧā§€āĻ­āĻžāĻŦ⧇ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧇**āĨ¤ | > āϏāĻŦ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āφāύāχāύāĻ¸ā§āϟāϞ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻžāϰ āϜāĻ¨ā§āϝ [UNINSTALL.md](./UNINSTALL.md) āĻĻ⧇āϖ⧁āύāĨ¤