# Remote Mode (Igbo) 🌐 **Languages:** 🇺🇸 [English](../../../../guides/REMOTE-MODE.md) · 🇪🇹 [am](../../../am/docs/guides/REMOTE-MODE.md) · 🇸🇦 [ar](../../../ar/docs/guides/REMOTE-MODE.md) · 🇦🇿 [az](../../../az/docs/guides/REMOTE-MODE.md) · 🇧🇬 [bg](../../../bg/docs/guides/REMOTE-MODE.md) · 🇧🇩 [bn](../../../bn/docs/guides/REMOTE-MODE.md) · 🇧🇦 [bs](../../../bs/docs/guides/REMOTE-MODE.md) · 🇨🇿 [cs](../../../cs/docs/guides/REMOTE-MODE.md) · 🇩🇰 [da](../../../da/docs/guides/REMOTE-MODE.md) · 🇩🇪 [de](../../../de/docs/guides/REMOTE-MODE.md) · 🇬🇷 [el](../../../el/docs/guides/REMOTE-MODE.md) · 🇪🇸 [es](../../../es/docs/guides/REMOTE-MODE.md) · 🇪🇪 [et](../../../et/docs/guides/REMOTE-MODE.md) · 🇮🇷 [fa](../../../fa/docs/guides/REMOTE-MODE.md) · 🇫🇮 [fi](../../../fi/docs/guides/REMOTE-MODE.md) · 🇫🇷 [fr](../../../fr/docs/guides/REMOTE-MODE.md) · 🇮🇪 [ga](../../../ga/docs/guides/REMOTE-MODE.md) · 🇮🇳 [gu](../../../gu/docs/guides/REMOTE-MODE.md) · 🇳🇬 [ha](../../../ha/docs/guides/REMOTE-MODE.md) · 🇮🇱 [he](../../../he/docs/guides/REMOTE-MODE.md) · 🇮🇳 [hi](../../../hi/docs/guides/REMOTE-MODE.md) · 🇭🇷 [hr](../../../hr/docs/guides/REMOTE-MODE.md) · 🇭🇺 [hu](../../../hu/docs/guides/REMOTE-MODE.md) · 🇦🇲 [hy](../../../hy/docs/guides/REMOTE-MODE.md) · 🇮🇩 [id](../../../id/docs/guides/REMOTE-MODE.md) · 🇮🇹 [it](../../../it/docs/guides/REMOTE-MODE.md) · 🇯🇵 [ja](../../../ja/docs/guides/REMOTE-MODE.md) · 🇬🇪 [ka](../../../ka/docs/guides/REMOTE-MODE.md) · 🇰🇭 [km](../../../km/docs/guides/REMOTE-MODE.md) · 🇮🇳 [kn](../../../kn/docs/guides/REMOTE-MODE.md) · 🇰🇷 [ko](../../../ko/docs/guides/REMOTE-MODE.md) · 🇱🇹 [lt](../../../lt/docs/guides/REMOTE-MODE.md) · 🇱🇻 [lv](../../../lv/docs/guides/REMOTE-MODE.md) · 🇮🇳 [ml](../../../ml/docs/guides/REMOTE-MODE.md) · 🇮🇳 [mr](../../../mr/docs/guides/REMOTE-MODE.md) · 🇲🇾 [ms](../../../ms/docs/guides/REMOTE-MODE.md) · 🇲🇹 [mt](../../../mt/docs/guides/REMOTE-MODE.md) · 🇲🇲 [my](../../../my/docs/guides/REMOTE-MODE.md) · 🇳🇵 [ne](../../../ne/docs/guides/REMOTE-MODE.md) · 🇳🇱 [nl](../../../nl/docs/guides/REMOTE-MODE.md) · 🇳🇴 [no](../../../no/docs/guides/REMOTE-MODE.md) · 🇮🇳 [or](../../../or/docs/guides/REMOTE-MODE.md) · 🇮🇳 [pa](../../../pa/docs/guides/REMOTE-MODE.md) · 🇵🇭 [phi](../../../phi/docs/guides/REMOTE-MODE.md) · 🇵🇱 [pl](../../../pl/docs/guides/REMOTE-MODE.md) · 🇵🇹 [pt](../../../pt/docs/guides/REMOTE-MODE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/guides/REMOTE-MODE.md) · 🇷🇴 [ro](../../../ro/docs/guides/REMOTE-MODE.md) · 🇷🇺 [ru](../../../ru/docs/guides/REMOTE-MODE.md) · 🇱🇰 [si](../../../si/docs/guides/REMOTE-MODE.md) · 🇸🇰 [sk](../../../sk/docs/guides/REMOTE-MODE.md) · 🇸🇮 [sl](../../../sl/docs/guides/REMOTE-MODE.md) · 🇷🇸 [sr](../../../sr/docs/guides/REMOTE-MODE.md) · 🇸🇪 [sv](../../../sv/docs/guides/REMOTE-MODE.md) · 🇰🇪 [sw](../../../sw/docs/guides/REMOTE-MODE.md) · 🇮🇳 [ta](../../../ta/docs/guides/REMOTE-MODE.md) · 🇮🇳 [te](../../../te/docs/guides/REMOTE-MODE.md) · 🇹🇭 [th](../../../th/docs/guides/REMOTE-MODE.md) · 🇹🇷 [tr](../../../tr/docs/guides/REMOTE-MODE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/guides/REMOTE-MODE.md) · 🇵🇰 [ur](../../../ur/docs/guides/REMOTE-MODE.md) · 🇺🇿 [uz](../../../uz/docs/guides/REMOTE-MODE.md) · 🇻🇳 [vi](../../../vi/docs/guides/REMOTE-MODE.md) · 🇳🇬 [yo](../../../yo/docs/guides/REMOTE-MODE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/guides/REMOTE-MODE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/guides/REMOTE-MODE.md) --- Mee ka `omniroute` CLI rụọ ọrụ na laptọọpụ gị ebe OmniRoute n’onwe ya na-arụ ọrụ n’ebe ọzọ (VPS, sava ụlọ, ma ọ bụ kọmputa ọzọ dị na Tailnet gị). Ị ga-eji `omniroute connect` banye otu ugboro, site mgbe ahụ gaa n’ihu, **iwu CLI niile** ga-elekwasị anya na sava ahụ dịpụrụ adịpụ — otu iwu ahụ, otu nsonaazụ ahụ, naanị na a na-eme ya megide sava ahụ dịpụrụ adịpụ. Enweghị ngwá ọrụ nke abụọ ị ga-etinye: ọnọdụ ime ihe n’ebe dịpụrụ adịpụ bụ `omniroute` CLI nkịtị tinyere **access tokens** nwere oke ikike. ```bash npm install -g omniroute # CLI nkịtị omniroute connect 192.168.0.15 # banye (okwuntughe → token nwere oke ikike) omniroute models list # ← ugbu a, ọ na-edepụta model ndị dị na sava DỊPỤRỤ ADỊPỤ omniroute configure codex # ← na-edepụta profaịlụ Codex n'ọrụ mpaghara site na katalọgụ dịpụrụ adịpụ ``` --- ## Otu o si arụ ọrụ ``` laptọọpụ gị OmniRoute dịpụrụ adịpụ (VPS) ┌────────────────────┐ ┌───────────────────────────────┐ │ omniroute CLI │ POST /api/cli/connect (okwuntughe → token) │ │ context: vps │ ───────────────► │ na-emepụta access token nwere │ │ baseUrl, token │ Authorization: Bearer oma_live_… │ │ │ ───────────────► │ ụzọ njikwa ọ bụla, a na-enyocha│ │ na-ede config │ ◄─────────────── │ ikike dịka scope nke token ahụ │ │ N'ỌRỤ MPAGHARA │ └───────────────────────────────┘ └────────────────────┘ ``` - **Contexts** na-echekwa otu sava n’otu (`~/.omniroute/config.json`, `chmod 600`). `omniroute contexts use ` na-agbanwe sava nọ n’ọrụ; `default` bụ nke mpaghara. - **Access tokens** (`oma_live_…`) na-enye ikike maka iwu njikwa. Ha dị iche na igodo inference API (`sk-…`, ndị a na-eji maka `/v1/chat/completions`). - Ọ bụ naanị hash SHA-256 nke token ka a na-echekwa n’akụkụ sava. A na-egosi plaintext **naanị otu ugboro**, mgbe e mepụtara ya. --- ## Ịjikọta ### Site na paswọọdụ njikwa (bootstrap) ```bash omniroute connect 192.168.0.15 # Paswọọdụ njikwa maka http://192.168.0.15:20128: ******** # ✔ Ejikọtala na http://192.168.0.15:20128 — ọnọdụ '192.168.0.15' (oke: admin) ``` Usoro paswọọdụ na-emepụta token **admin** na ndabara (ị nwere paswọọdụ ahụ, yabụ ị nweelarị njikwa zuru ezu). Jiri `--scope` belata oke ikike: ```bash omniroute connect 192.168.0.15 --scope write ``` Nhọrọ: `--port

` (mgbe host enweghị ya), `--name ` (aha ọnọdụ), `--scope read|write|admin`. A ga-asọpụrụ URL zuru ezu dịka ọ dị: `omniroute connect https://omni.example.com`. Mgbe agbanyere nkwenye ihe abụọ maka dashboard (Settings → Security), paswọọdụ naanị agaghị anabata: CLI ga-ajụzi koodu sitere na ngwa onye na-akwado nkwenye (ma ọ bụ koodu mgbake). Nye ya tupu oge eruo site na `--totp ` maka ojiji na-enweghị mmekọrịta onye ọrụ. ### Site na token emepụtara tupu oge eruo Mepụta token nwere oke ikike na dashboard (ma ọ bụ jiri `omniroute tokens create`) ma tinye ya — ọ dịghị paswọọdụ achọrọ: ```bash omniroute connect 192.168.0.15 --key oma_live_xxxxxxxx ``` CLI na-enyocha ya site na `GET /api/cli/whoami` ma chekwaa ya dịka ọnọdụ na-arụ ọrụ. --- ## Oke ikike Ọkwa atọ, nke ahaziri n’usoro ikike (`admin ⊃ write ⊃ read`): | Oke ikike | Ihe ọ nwere ike ime | | --------- | -------------------------------------------------------------------------------- | | `read` | depụta/nyochaa — `models list`, `providers status`, `logs`, `usage`, `cost` | | `write` | read **+** hazie/tinye n’ọrụ — `setup-codex`, `keys add`, `config set`, ngwakọta | | `admin` | write **+** jikwaa — `tokens` CRUD, tinye providers, services, policy, oauth | Sava na-achọpụta oke ikike ụzọ ọ bụla chọrọ site na HTTP method (`GET`→read, mgbanwe→write), tinyere admin allowlist maka akụkụ ndị nwere mmetụta pụrụ iche (mgbanwe `/api/cli/tokens`, `/api/providers`, `/api/oauth`, `/api/services`, …). Token na-enweghị oke ikike zuru ezu ga-enweta `403` tinyere ozi doro anya. > Ụzọ ndị na-amalite process (`/api/services/*`, `/api/mcp/*`, …) na-anọgide > **naanị maka loopback** — token dịpụrụ adịpụ enweghị ike iru ha, n’agbanyeghị oke ikike ya. --- ## Ijikọta Antigravity na nrụnye dịpụrụ adịpụ Antigravity na-eji ihuenyo nkwenye firstparty/nativeapp nke Google. Google na-ewepụta koodu ikike naanị mgbe **loopback redirect** (`http://127.0.0.1:/callback`) **nwere ike iru site na ihe nchọgharị nke kwadoro nbanye ahụ**. Na nrụnye VPS dịpụrụ adịpụ, loopback ahụ dị na sava, ọ bụghị na kọmputa gị, ya mere ihuenyo nkwenye ahụ **na-anọgide na-eche ruo mgbe ebighị ebi ma ọ naghị ewepụta koodu** — usoro ndabere a na-emebu nke “mado URL callback” enweghị ihe ọ bụla a ga-amado. (Nke a bụ mmachi sitere n'akụkụ Google: otu nkwụsị ahụ na-eme na proxy ọ bụla na-eji Antigravity desktop client e tinyere n'ime ya, ọ bụghị naanị OmniRoute.) Dashboard na-achọpụta nke a tupu ịrapara: imepe **Providers → Antigravity → Connect** site na adreesị na-abụghị localhost na-eji ụzọ ngwọta abụọ dị n'okpuru dochie ọkwa izugbe “detuo URL callback”, ebe e tinyelarị host na port gị na nke ọ bụla. (Adreesị LAN sokwa — `192.168.x.x` abụghị localhost n'ihe gbasara callback a.) E nwere ụzọ abụọ akwadoro iji jikọọ Antigravity na OmniRoute dịpụrụ adịpụ. ### Nhọrọ A — ihe enyemaka nbanye mpaghara (a tụrụ aro) Gbaa OAuth na **kọmputa nke gị**, ebe enwere ike iru `127.0.0.1`. Ihe enyemaka ahụ na Google na-ekwurịta okwu ozugbo, ya mere nkwenye ahụ na-agwụcha ebe ụdị nke dashboard enweghị ike ime ya. **Ọ bụrụ na ijikọlarị** (`omniroute connect `), ọ dịghị ihe ị ga-edetu — ihe enyemaka ahụ ga-ebunye credential ahụ na nrụnye ahụ maka gị: ```bash # Na kọmputa MPAGHARA gị (ọ chọrọ Node.js + ihe nchọgharị): omniroute connect 192.168.0.15 # otu ugboro — na-emepụta context token nwere ikike admin npx omniroute login antigravity # ↳ na-emepe nkwenye Google, na-ejide callback na loopback port mpaghara, # na-agbanwe ya, ma na-eziga credential ahụ site na POST gaa na context na-arụ ọrụ: # # Ejikọtala Antigravity na http://192.168.0.15:20128 (njikọ abc123). # Ọ dịghị ihe ị ga-amado — ị nwere ike imechi terminal a. ``` Push ahụ na-eme na-akpaghị aka mgbe ọ bụla context na-arụ ọrụ na-arụtụ aka na igwe ọzọ. Manye ya n'ụzọ ọ bụla site na `--push` / `--no-push`, ma ọ bụ jiri `--context ` rụtụ aka na context akọwapụtara. **Ọ bụrụ na kọmputa gị enweghị ike iru VPS** (firewall gbochiri ya, enweghị SSH, ma ọ bụ tebụl ọrụ kewapụrụ kpamkpam na netwọk), ihe enyemaka ahụ ka na-arụ ọrụ — naanị Google ka ọ _chọrọ_ n'ezie. Jiri `--no-push`, ma ọ bụ hapụ push ahụ ka ọ daa: ọ ga-alaghachi n'ibipụta blob kama ịtụfu ikike ị rụcharala. ```bash npx omniroute login antigravity --no-push # omniroute-cred-v1.eyJ2IjoxLCJ... ``` Mgbe ahụ, na dashboard **dịpụrụ adịpụ**: **Providers → Antigravity → Connect**, ma mado blob `omniroute-cred-v1.…` n'ime mpaghara **Nzọụkwụ 2** (ọ na-anabata ma URL callback ma ọ bụ credential blob). OmniRoute na-eme decode ya, na-agba Cloud Code onboarding n'akụkụ sava, ma na-echekwa njikọ ahụ. > Blob ahụ nwere refresh token — were ya dịka okwuntughe. N'ụzọ push, a na-eziga ya > otu ugboro site na njikọ context gị e ji nkwenye chebe; n'ụzọ mado, a na-eziga ya > site na njikọ dashboard gị. N'ụzọ ọ bụla, a na-echekwa ya n'ụdị ezoro ezo mgbe ọ > nọ na nchekwa, push gara nke ọma agaghịkwa ebipụta ya na terminal gị. Flags: `--no-browser` (bipụta URL kama imepe ya na-akpaghị aka), `--port ` (kpọchie loopback port), `--timeout `, `--push` / `--no-push` (gbanwee nnyefe akpaka), `--context ` (rụtụ aka na context akọwapụtara). ### Nhọrọ B — tunnel SSH local-forward Ọ bụrụ na ị nwere ohere SSH na VPS, zipụ dashboard port n'ihu ka loopback callback nwee ike ịlaghachi na sava site na tunnel ahụ: ```bash # Na kọmputa MPAGHARA gị: ssh -L 20128:127.0.0.1:20128 user@your-vps # wee mepee http://localhost:20128 na ihe nchọgharị MPAGHARA gị ma jikọọ Antigravity # dịka ọ na-adị — redirect 127.0.0.1:20128/callback ga-eru VPS ugbu a site na SSH. ``` Ebe ọ bụ na ị na-eru dashboard dịka `localhost:20128`, nkwenye Google na-agwụcha, a na-ebunyekwa callback ahụ na sava site n'otu tunnel ahụ — ọ dịghị blob achọrọ. Debe tunnel ahụ ka ọ ghe oghe ruo mgbe njikọ ahụ gosiri na ọ na-arụ ọrụ. N'adịghị ka providers nwere fixed-loopback dị n'okpuru, **otu forward ezuola** ebe a: callback Antigravity na-eji dashboard port ahụ n'onwe ya agafe, ya mere enweghị provider-specific port nke abụọ a ga-etinye na tunnel. > Ụzọ ọzọ na-enweghị interface kpamkpam (enweghị ihe enyemaka, enweghị tunnel) bụ > ịhazi **nke gị** Google OAuth web credentials + public base URL; lee environment > variables OAuth nke provider ahụ. Nhọrọ abụọ dị n'elu achọghị nhazi Google ọzọ. --- ## Ijikọta Codex / Grok na nrụnye dịpụrụ adịpụ (ndị na-eweta nwere loopback a kapịrị ọnụ) Codex, xAI (`xai-oauth`) na Grok CLI (`grok-cli`) na-edebanye **adreesị loopback a kapịrị ọnụ** `redirect_uri` n’ngwa OAuth ha dị n’elu. OmniRoute enweghị ike ịgbanwe ya — onye na-eweta na-ezighachi ihe nchọgharị mgbe niile n’otu adreesị ahụ e tinyere kpọmkwem: | Onye na-eweta | Callback a kapịrị ọnụ onye na-eweta na-ezigara ya | | ------------- | ------------------------------------------------- | | `codex` | `http://localhost:1455/auth/callback` | | `xai-oauth` | `http://127.0.0.1:56121/callback` | | `grok-cli` | `http://127.0.0.1:56122/callback` | `localhost` dị ebe ahụ pụtara **igwe na-agba ihe nchọgharị**, ebe sava callback PKCE nke OmniRoute na-ege ntị na loopback nke **sava ahụ**. Mepee ogwe njikwa na adreesị LAN dị ka `http://192.168.0.15:20128`, ha abụọ agaghị ezute: a na-ebuga koodu ikike na `localhost:1455` nke laptọọpụ gị, ebe ọ dịghị ihe na-ege ntị, onye na-ewetakwa agaghị enwe ike ịbanye n’egosighị njehie. Ogwe njikwa na-achọpụta nke a tupu o mepee windo popup ma gosipụta iwu tunnel kama ikwe ka nbanye daa nwayọ n’egosighị ihe ọ bụla (#8046). ### Ndozi — zipụ **ọdụ ụgbọ mmiri abụọ ahụ** n’ihu ```bash # N’igwe na-agba IHE NCHỌGHARỊ: ssh -L 20128:127.0.0.1:20128 -L 1455:127.0.0.1:1455 @192.168.0.15 # emesịa gaa na http://localhost:20128 ma jikọọ Codex site n’ebe ahụ ``` A chọrọ ntụgharị abụọ, ma ntụgharị naanị otu ka ga-ada: - **`20128`** (ọdụ ụgbọ mmiri ogwe njikwa) na-eme ka origin bụrụ localhost n’ezie, nke bụ ihe na-eme ka OmniRoute malite sava callback PKCE ma ọlị — origin LAN anaghị eru ngalaba ahụ. - **`1455`** (ọdụ ụgbọ mmiri callback a kapịrị ọnụ nke onye na-eweta) bụ ebe a na-ezighachi ihe nchọgharị na ya; ọ ga-agafe n’ime tunnel ruo loopback nke sava ahụ. Dochie `1455` na `56121`/`56122` mgbe ị na-ejikọta xAI ma ọ bụ Grok CLI, ma dochie `20128` na ọdụ ụgbọ mmiri ogwe njikwa gị n’ezie. Hapụ tunnel ahụ ka ọ ghe oghe ruo mgbe njikọ ahụ gosiri na ọ na-arụ ọrụ. > **Ị nweghị ohere SSH?** Codex na Grok CLI na-anabatakwa token e madooro — taabụ **Mado Igodo API > ** / **Bubata auth.json** dị na dialog njikọ ahụ. Ụzọ ahụ enweghị callback loopback, > ya mere ọ na-arụ ọrụ site na origin ọ bụla. Codex na-anabatakwa access token nkịtị > ma ọ bụ data nnọkọ `~/.codex/auth.json`. --- ## Njikwa tokens ```bash omniroute tokens create --name "laptop" --scope write [--expires 30] # ↳ na-egosi nzuzo OTU — detuo ya ugbu a omniroute tokens list # ezoro: id, name, scope, prefix, status, expiry omniroute tokens revoke # kagbuo ozugbo omniroute tokens scopes # kọwaa ókè atọ ``` Iwu `tokens` chọrọ akaụntụ **admin**. Ịkwadokwa nwere ike ijikwa tokens na dashboard n'okpuru **Settings → Access Tokens** (mepụta, kagbuo, detuo-otu-ugboro). A pụghị ịmepụta token nwere ọkwa karịa onye mepụtara ya nwere. Token `admin` naanị onye nchịkwa nwere ike imepụta ya: dashboard session, CLI nke ime ụlọ n'otu server ahụ, ma ọ bụ `omniroute connect` na paswọọdụ. Credentials igwe (access token `admin`, ma ọ bụ igodo API nwere `manage`/`admin` scope) nwere ike imepụta tokens `write` na `read` naanị; ọ bụrụ na ha chọọ `--scope admin`, ha na-alọghachi `403`. Ịkwụsị ịbanye abụghị ihe na-emeghe imepụta: access token nke scope ọ bụla bụ credential route ndị chọrọ ntinye mgbe niile na-anabata, ya mere oku anonymous na-enweta `401` n'scope ọ bụla. --- ## Ịtọ CLI coding site na katalọgụ dị anya `omniroute configure` na-agụ katalọgụ model dị ndụ nke **server na-arụ ọrụ** ma na-ede config na **kọmputa gị**. ```bash omniroute configure codex # Ndị na-enye ọrụ: glm, kmc, ollamacloud, opencode-go, … # Provider: glm # Model id: glm/glm-5.2 # ✔ Edere ~/.codex/glm52.config.toml # Jiri ya: codex --profile glm52 # na-enweghị mmekọrịta omniroute configure codex --provider glm --model glm/glm-5.2 --name glm52 # debe model a na-eji oge niile n'elu nhọrọ mmekọrịta omniroute configure codex --provider glm --model glm/glm-5.2 --favorite --yes ``` Onye nhọrọ na-echekwa naanị model IDs (ọ bụghị URLs ma ọ bụ credentials) na faịlụ `model-preferences.json` nke ime ụlọ, nke kewara site na context na CLI target. A na-egosi ndị ahọrọ tupu nhọrọ ndị dị nso; jiri `--unfavorite` iwepụ model ahọrọ site na ndepụta context/target ahụ. Profaịlụ edere na-ezo aka n'igodo inference site na env var (`OMNIROUTE_API_KEY`). A naghị ede nzuzo na disk. Maka nhazi Codex nke mbụ otu ugboro (`[model_providers.omniroute]` block), lee [CODEX-CLI-CONFIGURATION.md](./CODEX-CLI-CONFIGURATION.md). ### Ịmalite CLI megide nke dị anya (enweghị config edere) `omniroute run ` na-erubekwa context na-arụ ọrụ: a na-etinye base URL dị anya na context credential naanị n'usoro a malitere. ```bash omniroute connect 192.168.0.15 omniroute run claude --model openai/gpt-5.4 # Claude Code → remote omniroute run gemini --model glm/glm-5.2 -- --skip-trust -p "hello" omniroute run opencode --model glm/glm-5.2 -- run "reply OK" # Lelee ihe a ga-amalite nke ọma (naanị aha env KEY, ọ bụghị uru): omniroute run codex --dry-run --json ``` Targets: `claude`, `codex`, `aider`, `goose`, `opencode`, `qwen`, `gemini` (isi otu: `bin/cli/cli-manifest.mjs`). Qwen na Gemini na-agba ọsọ n'ụlọ nwa oge dị iche nke a na-ehichapụ mgbe ọ pụpụrụ, ya mere mmalite ahụ anaghị emetụ ma ọ bụ ịpụta n'ime nhazi ngwaọrụ onwe gị. ### Iwu nhazi maka CLI ọ bụla CLI ọ bụla a na-akwado nwere iwu nhazi nke ama maka dị anya (ha niile na-erube context na-arụ ọrụ, ma ọ bụ `--remote --api-key `): | CLI | Iwu | Ihe ọ na-ede | | ----------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Codex | `omniroute setup-codex` | profaịlụ `~/.codex/.config.toml` (maka model ọ bụla) | | Claude Code | `omniroute setup-claude` | `~/.claude/profiles//settings.json` (maka model ọ bụla) | | OpenCode | `omniroute setup-opencode` | `~/.config/opencode/opencode.json`: onye na-enye ọrụ `omniroute` dabara na openai nwere model katalọgụ niile (gbaa `opencode -m omniroute/`) | | Cline | `omniroute setup-cline` | `~/.cline/data/{globalState,secrets}.json` (ụdị CLI) + na-ebipụta ntọala extension VS Code iji wunye (dabara na OpenAI, Base URL **na-enweghị** `/v1`) | | Kilo Code | `omniroute setup-kilo` | `~/.local/share/kilo/auth.json` (CLI) + ntọala VS Code `kilocode.*`: dabara na OpenAI, Base URL **nwere** `/v1` | | Continue | `omniroute setup-continue` | `~/.continue/config.yaml` (VS Code/JetBrains + `cn` CLI): `provider: openai`, `apiBase` **nwere** `/v1`, igodo site na `${{ secrets.OMNIROUTE_API_KEY }}` | | Cursor | `omniroute setup-cursor` | na-ebipụta usoro n'ime app (Settings → Models → Override OpenAI Base URL **nwere** `/v1` + igodo + model). Config Cursor bụ SQLite a na-amaghị, ya mere chat panel naanị | | Roo Code | `omniroute setup-roo` | na-ede Roo import JSON (`~/.omniroute/roo-settings.json`) + na-etinye `roo-cline.autoImportSettingsPath` + na-ebipụta usoro UI (dabara na OpenAI, Base URL **nwere** `/v1`) | | Crush | `omniroute setup-crush` | `~/.config/crush/crush.json`: onye na-enye ọrụ `openai-compat`, `base_url` **nwere** `/v1`, igodo site na `$OMNIROUTE_API_KEY` | | Zed | `omniroute setup-zed` | `~/.config/zed/settings.json`: `language_models.openai_compatible.omniroute`, `api_url` **nwere** `/v1`, Zed na-agụ igodo site na `$OMNIROUTE_API_KEY` (a naghị ede ya) | | Goose | `omniroute setup-goose` | `~/.config/goose/config.yaml` (`GOOSE_PROVIDER=openai` + `OPENAI_HOST` **na-enweghị** `/v1` + `GOOSE_MODEL`) + env recipe | | Aider | `omniroute setup-aider` | `~/.aider.conf.yml` (`openai-api-base` **na-enweghị** `/v1` + `model: openai/`) + env recipe (`aider --message --yes`) | | Qwen Code | `omniroute setup-qwen` | `~/.qwen/settings.json` V4 `modelProviders.openai` entry + `OMNIROUTE_API_KEY` na `~/.qwen/.env` | ```bash # OpenCode (onye na-enye ọrụ dabara na openai, model katalọgụ niile, VPS dị anya) omniroute setup-opencode --remote http://192.168.0.15:20128 --api-key oma_live_xxx omniroute setup-opencode --only glm,kimi # debe naanị model dabara adaba opencode -m omniroute/glm/glm-5.2 "..." # bupụ OMNIROUTE_API_KEY tupu ``` > OpenCode nwekwara ihe mgbakwunye **plugin** bara ụba: `omniroute setup opencode` (nke nwere ike ịma dị anya ugbu a site na `--remote`) na-atụ `@omniroute/opencode-plugin`. > `setup-opencode` bụ nhọrọ ọzọ dị mfe dabara na openai. A na-ezo aka na igodo API site na `{env:OMNIROUTE_API_KEY}`, a naghị ede ya na disk. > > Na OpenCode v2, jiri `@omniroute/opencode-plugin-v2` kama ya: katalọgụ otu, nkwekọrịta loader dị iche. Ọ na-agụ igodo site na ụlọakụ credential nke OpenCode n'onwe ya mgbe a jikọrọ njikọ, ya mere gateway dị anya na-enweghị ihe achọrọ igodo n'ime `opencode.json`. --- ## Ijikwaa contexts (ịgbanwe n'etiti sava) A **context** bụ sava echekwara (baseUrl + credential + scope). `omniroute connect` na-emepụta otu ma mee ka ọ rụọ ọrụ; site mgbe ahụ gaa n'ihu, iwu ọ bụla na-elekwasị anya na ya. Jikwaa ma gbanwee n'etiti ha na `omniroute contexts`: ```bash omniroute contexts list # all contexts; the active one is marked ● omniroute contexts current # the active server, auth status, scope ``` ```text | Name | Base URL | Auth | Scope | Description ● | vps | http://100.67.86.91:20128 | token | admin | Remote OmniRoute (…) | default | http://localhost:20128 | ✗ | | ``` **Gbanwee sava** — iwu ọ bụla na-esote na-agbaso context na-arụ ọrụ: ```bash omniroute contexts use vps # → all commands now hit the remote VPS omniroute tokens list # (na-agba ọsọ megide VPS) omniroute contexts use default # → back to localhost omniroute tokens list # (na-agba ọsọ megide sava mpaghara) ``` **Tinye context n'onwe gị** (n'ọnọdụ `connect`), nyochaa, ma ọ bụ gbanwee aha: ```bash omniroute contexts add staging --url https://staging.example.com:20128 \ --access-token oma_live_xxxx --scope write --description "staging box" omniroute contexts show staging # full details for one context omniroute contexts rename staging stg ``` **Wepụ context** — na-arịọ maka nkwenye; gafere `--yes` ka ịwụpụ ya (achọrọ maka scripts / shells na-abụghị interactive, nke na-ajụ n'enweghị nsogbu): ```bash omniroute contexts remove stg --yes ``` > `default` (localhost) enweghị ike iwepụ. Iwepụ context na-arụ ọrụ na-alaghachi na `default`. Ndụmọdụ: iwepụ context na-ewepụ naanị credential **mpaghara** echekwara — kagbuo token ahụ na sava ahụ na `omniroute tokens revoke ` iji gbuo ohere n'ezie. **Export / import** contexts (dịka ọmụmaatụ, iji bufee ha n'etiti igwe). Exports na-ewepụ credentials na ndabara, gụnyere credentials echekwara site na nkwado faịlụ. Jiri `--include-secrets` n'ụzọ doro anya mgbe achọrọ nkwado nwere ike ibugharị nke nwere credential: ```bash omniroute contexts export --out contexts.json # ezoro ezo; ebe nchekwa ndabara: stdout omniroute contexts export --include-secrets --out private-contexts.json omniroute contexts import contexts.json # dee n'elu; --merge iji debe ndị dị adị omniroute contexts migrate --yes # bufee tokens plaintext ochie na keychain ``` `--include-secrets` na-edozi ntụaka keychain tupu exporting ma na-ada ma ọ bụrụ na enweghị ike ịgụ credential ọ bụla akpọrọ aha. `--no-secrets` na-ebute ụzọ mgbe niile. A na-ede faịlụ export n'ụzọ atomic na mode `0600`. Were export nwere ihe nzuzo doro anya dị ka ihe nzuzo. Na sistemụ na-enweghị isi na-enweghị keychain OS nwere ike iji, CLI na-alaghachi na `config.json` na mode `0600` ma na-ebipụta ịdọ aka ná ntị otu oge; export ndabara na-anọgide na-ezoro ezo na mode a. --- ## Nnwale ọsọ ọsọ site na mmalite ruo na ngwụcha Usoro ndụ ị nwere ike idetuo ma mado iji nyochaa nhazi sava dị anya site na mbido — jikọọ, mepụta token nwere scope, duzie iwu, laghachi azụ, wee kwatuo nhazi ahụ. Dochie `192.168.0.15` na host/IP nke sava gị (Tailscale, LAN, ma ọ bụ URL ọha `https://…`). ```bash # 1. Jikọọ (password → admin token, echekwara dị ka context nke ga-amalite ịrụ ọrụ) omniroute connect 192.168.0.15 # ma ọ bụ: --key oma_live_xxxx (enweghị password) omniroute contexts current # na-egosi sava dị anya + scope # 2. Jiri ya — iwu njikwa na-arụ ọrụ ugbu a megide sava dị anya omniroute tokens create --name laptop --scope read # mepụta token nwere scope pere mpe omniroute tokens list # ndepụta ezobere akụkụ ya, sitere na sava dị anya # 3. Gbanwee gaa ma laghachi omniroute contexts use default # → mpaghara omniroute contexts use 192-168-0-15 # → sava dị anya ọzọ (aha sitere na `contexts list`) # 4. Kwatuo nhazi ahụ. RỊBA AMA: `contexts remove` na-ehichapụ naanị credential MPAGHARA — # ọ naghị akagbu token ahụ na sava. Buru ụzọ kagbuo ya n'akụkụ sava ma ọ bụrụ na # ịchọrọ ịkwụsị ohere n'ezie. omniroute tokens revoke # na-akwụsị ohere na sava omniroute contexts remove 192-168-0-15 --yes # wepụ context mpaghara (ọbụna ma ọ bụrụ na ọ na-arụ ọrụ → a ga-eji default dochie ya), enweghị arịrịọ nkwenye ``` > `--yes` na-eme ka `contexts remove` bụrụ nke na-abụghị interactive (a chọrọ ya na scripts/CI; ma ọ bụrụ na > enweghị ya, shell na-abụghị interactive ga-ajụ n'enweghị nsogbu kama ịnọgide na-eche). Iwepụ context > **na-arụ ọrụ** na-eme ka e jiri `default` dochie ya na-akpaghị aka. --- ## Ihe ndetu gbasara nchekwa - A na-egosi token n'ụdị ederede nkịtị naanị otu ugboro; naanị hash SHA-256 ka a na-echekwa (otu ihe ahụ dịkwa maka igodo API). - `omniroute connect` na-eji ọzọ mkpọchi megide ịnwale okwuntughe ọtụtụ ugboro + ndekọ nyocha nke nbanye. - Ọ ka mma iji HTTPS ma ọ bụ Tailnet maka mbufe ahụ; host nkịtị na-eji `http://` na ndabara maka ịdị mfe na LAN/Tailscale — nyefee URL `https://…` zuru ezu maka TLS. - Faịlụ context mpaghara a kacha akwado bụ `~/.omniroute/config.json` (`chmod 600`) nke nwere naanị `credentialRef`; a na-echekwa token ahụ n'onwe ya na keychain nke OS (`keytar`), a naghị ebipụta ya mgbe ọ bụla na ndekọ. Nwụnye headless ndị na-enweghị keychain native na-arụ ọrụ na-eji otu faịlụ `0600` ahụ dịka nhọrọ ndabere doro anya ma zipụta ịdọ aka ná ntị otu ugboro. Jiri `omniroute contexts migrate --yes` mgbe ị wụnyechara backend keychain. --- ## Ebe njedebe API (ndekọ ntụaka) | Usoro | Ụzọ | Nyocha ikike | Oke | | ------ | --------------------- | --------------------------------------- | ---------------------------- | | POST | `/api/cli/connect` | paswọọdụ; 2FA ma ọ bụrụ na agbanyere ya | — (ọha, paswọọdụ na-achịkwa) | | GET | `/api/cli/whoami` | access token | read | | GET | `/api/cli/tokens` | access token | admin | | POST | `/api/cli/tokens` | access token | admin | | DELETE | `/api/cli/tokens/:id` | access token | admin | Hụ [openapi.yaml](../openapi.yaml) maka schemas zuru ezu.