# Remote Mode (తెలుగు) 🌐 **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) · 🇳🇬 [ig](../../../ig/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) · 🇹🇭 [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) --- OmniRoute వేరే చోట నడుస్తున్నప్పుడు (ఒక VPS, హోమ్ సర్వర్, మీ Tailnetలోని మరో మెషీన్), మీ ల్యాప్టాప్లో `omniroute` CLIని అమలు చేయండి. మీరు `omniroute connect`తో ఒకసారి లాగిన్ అయిన తర్వాత, అప్పటి నుంచి **ప్రతి** CLI కమాండ్ ఆ రిమోట్ సర్వర్నే లక్ష్యంగా చేసుకుంటుంది — అవే కమాండ్లు, అదే అవుట్పుట్, కేవలం రిమోట్లో అమలవుతాయి. ఇన్స్టాల్ చేయడానికి రెండో సాధనం ఏదీ లేదు: రిమోట్ మోడ్ అంటే సాధారణ `omniroute` CLIతో పాటు స్కోప్ చేసిన **యాక్సెస్ టోకెన్లు**. ```bash npm install -g omniroute # సాధారణ CLI omniroute connect 192.168.0.15 # లాగిన్ చేయండి (పాస్వర్డ్ → స్కోప్ చేసిన టోకెన్) omniroute models list # ← ఇప్పుడు రిమోట్ సర్వర్ మోడల్లను జాబితా చేస్తుంది omniroute configure codex # ← రిమోట్ కేటలాగ్ నుండి స్థానిక Codex ప్రొఫైల్ను రాస్తుంది ``` --- ## ఇది ఎలా పనిచేస్తుంది ``` మీ ల్యాప్టాప్ రిమోట్ OmniRoute (VPS) ┌────────────────────┐ ┌───────────────────────────────┐ │ omniroute CLI │ POST /api/cli/connect (పాస్వర్డ్ → టోకెన్) │ │ context: vps │ ───────────────► │ స్కోప్ చేసిన యాక్సెస్ టోకెన్ను │ │ baseUrl, token │ Authorization: Bearer oma_live_… │ │ │ ───────────────► │ సృష్టిస్తుంది; ప్రతి నిర్వహణ │ │ కాన్ఫిగ్లను │ ◄─────────────── │ రూట్లో టోకెన్ స్కోప్ను తనిఖీ │ │ స్థానికంగా రాస్తుంది │ │ చేస్తుంది │ └────────────────────┘ └───────────────────────────────┘ ``` - **కాంటెక్స్ట్లు** ఒక్కొక్కటి ఒక్కో సర్వర్ను నిల్వ చేస్తాయి (`~/.omniroute/config.json`, `chmod 600`). `omniroute contexts use ` సక్రియ సర్వర్ను మారుస్తుంది; `default` స్థానికమైనది. - **యాక్సెస్ టోకెన్లు** (`oma_live_…`) నిర్వహణ కమాండ్లకు అనుమతినిస్తాయి. అవి ఇన్ఫరెన్స్ API కీలు (`sk-…`, `/v1/chat/completions` కోసం ఉపయోగించేవి) కంటే వేరు. - టోకెన్ యొక్క SHA-256 హ్యాష్ మాత్రమే సర్వర్ వైపు నిల్వ చేయబడుతుంది. ప్లెయిన్టెక్స్ట్ సృష్టించే సమయంలో **ఒక్కసారి మాత్రమే** చూపబడుతుంది. --- ## కనెక్ట్ చేయడం ### నిర్వహణ పాస్వర్డ్తో (బూట్స్ట్రాప్) ```bash omniroute connect 192.168.0.15 # http://192.168.0.15:20128 కోసం నిర్వహణ పాస్వర్డ్: ******** # ✔ http://192.168.0.15:20128కు కనెక్ట్ అయింది — కాంటెక్స్ట్ '192.168.0.15' (స్కోప్: admin) ``` పాస్వర్డ్ ఫ్లో డిఫాల్ట్గా **admin** టోకెన్ను సృష్టిస్తుంది (మీ వద్ద పాస్వర్డ్ ఉంది కాబట్టి, మీకు ఇప్పటికే పూర్తి నియంత్రణ ఉంది). `--scope`తో స్కోప్ను తగ్గించండి: ```bash omniroute connect 192.168.0.15 --scope write ``` ఎంపికలు: `--port

` (హోస్ట్లో పోర్ట్ లేనప్పుడు), `--name ` (కాంటెక్స్ట్ పేరు), `--scope read|write|admin`. పూర్తి URL ఎలాంటి మార్పు లేకుండా ఉపయోగించబడుతుంది: `omniroute connect https://omni.example.com`. ### ముందుగా రూపొందించిన టోకెన్తో డ్యాష్బోర్డ్లో (లేదా `omniroute tokens create`తో) స్కోప్ చేసిన టోకెన్ను రూపొందించి, దాన్ని పేస్ట్ చేయండి — పాస్వర్డ్ అవసరం లేదు: ```bash omniroute connect 192.168.0.15 --key oma_live_xxxxxxxx ``` CLI దాన్ని `GET /api/cli/whoami` ద్వారా ధృవీకరించి, సక్రియ కాంటెక్స్ట్గా సేవ్ చేస్తుంది. --- ## స్కోప్లు శ్రేణీకృతమైన మూడు స్థాయిలు (`admin ⊃ write ⊃ read`): | స్కోప్ | చేయగలిగేవి | | ------- | ------------------------------------------------------------------------------------ | | `read` | జాబితా/పరిశీలన — `models list`, `providers status`, `logs`, `usage`, `cost` | | `write` | read **+** కాన్ఫిగర్/వర్తింపజేయడం — `setup-codex`, `keys add`, `config set`, కాంబోలు | | `admin` | write **+** నిర్వహణ — `tokens` CRUD, ప్రొవైడర్లను జోడించడం, సేవలు, పాలసీ, oauth | ప్రతి రూట్కు అవసరమైన స్కోప్ను సర్వర్ HTTP పద్ధతి (`GET`→read, మార్పులు→write) ఆధారంగా, అలాగే సున్నితమైన ఉపరితలాల కోసం admin అనుమతి జాబితాను (`/api/cli/tokens`, `/api/providers` మార్పులు, `/api/oauth`, `/api/services`, …) ఉపయోగించి నిర్ధారిస్తుంది. తగినంత స్కోప్ లేని టోకెన్కు స్పష్టమైన సందేశంతో `403` వస్తుంది. > ప్రాసెస్లను ప్రారంభించే రూట్లు (`/api/services/*`, `/api/mcp/*`, …) > **loopback-only**గానే ఉంటాయి — స్కోప్ ఏదైనా సరే, రిమోట్ టోకెన్ వాటిని ఎప్పటికీ యాక్సెస్ చేయలేదు. --- ## రిమోట్ ఇన్స్టాలేషన్లో Antigravityని కనెక్ట్ చేయడం Antigravity, Google యొక్క firstparty/nativeapp సమ్మతి స్క్రీన్ను ఉపయోగిస్తుంది. **లూప్బ్యాక్ రీడైరెక్ట్** (`http://127.0.0.1:/callback`)ను **సైన్-ఇన్ను ఆమోదించే బ్రౌజర్ నుంచి యాక్సెస్ చేయగలిగినప్పుడు** మాత్రమే Google ఆథరైజేషన్ కోడ్ను విడుదల చేస్తుంది. రిమోట్ VPS ఇన్స్టాలేషన్లో ఆ లూప్బ్యాక్ మీ మెషీన్పై కాకుండా సర్వర్పై ఉంటుంది, కాబట్టి సమ్మతి స్క్రీన్ **ఎప్పటికీ నిలిచిపోతుంది మరియు కోడ్ను అసలు విడుదల చేయదు** — సాధారణ "కాల్బ్యాక్ URLను పేస్ట్ చేయండి" ఫాల్బ్యాక్లో పేస్ట్ చేయడానికి ఏమీ ఉండదు. (ఇది Google వైపు ఉన్న పరిమితి: బండిల్ చేసిన Antigravity డెస్క్టాప్ క్లయింట్ను ఉపయోగించే ఏ ప్రాక్సీలోనైనా ఇదే సమస్య సంభవిస్తుంది, OmniRouteలో మాత్రమే కాదు.) మీరు చిక్కుకుపోకముందే డ్యాష్బోర్డ్ దీన్ని గుర్తిస్తుంది: localhost కాని చిరునామా నుంచి **Providers → Antigravity → Connect**ను తెరిస్తే, సాధారణ "కాల్బ్యాక్ URLను కాపీ చేయండి" నోటీసుకు బదులుగా దిగువ రెండు పరిష్కారాలు కనిపిస్తాయి; ప్రతి దానిలోనూ మీ host మరియు port ముందుగానే పూరించబడి ఉంటాయి. (LAN చిరునామా కూడా ఇందులోకి వస్తుంది — ఈ కాల్బ్యాక్ పరంగా `192.168.x.x` localhost కాదు.) రిమోట్ OmniRouteకు Antigravityని కనెక్ట్ చేయడానికి రెండు మద్దతు ఉన్న మార్గాలు ఉన్నాయి. ### ఎంపిక A — లోకల్ లాగిన్ హెల్పర్ (సిఫార్సు చేయబడింది) `127.0.0.1`ను యాక్సెస్ చేయగలిగే **మీ స్వంత కంప్యూటర్లో** OAuthను అమలు చేయండి. హెల్పర్ Googleతో నేరుగా కమ్యూనికేట్ చేస్తుంది, అందువల్ల డ్యాష్బోర్డ్ వెర్షన్ పూర్తి చేయలేని చోట సమ్మతి ప్రక్రియ పూర్తవుతుంది. **మీరు ఇప్పటికే కనెక్ట్ అయి ఉంటే** (`omniroute connect `), కాపీ చేయాల్సిందేమీ లేదు — హెల్పర్ మీ తరఫున ఆ ఇన్స్టాలేషన్కు క్రెడెన్షియల్ను అందిస్తుంది: ```bash # మీ LOCAL మెషీన్లో (Node.js + బ్రౌజర్ అవసరం): omniroute connect 192.168.0.15 # ఒక్కసారి — admin-scoped context tokenను జారీ చేస్తుంది npx omniroute login antigravity # ↳ Google సమ్మతిని తెరిచి, లోకల్ లూప్బ్యాక్ portలో కాల్బ్యాక్ను స్వీకరించి, # దాన్ని ఎక్స్చేంజ్ చేసి, యాక్టివ్ కాంటెక్స్ట్కు క్రెడెన్షియల్ను POST చేస్తుంది: # # Antigravity http://192.168.0.15:20128లో కనెక్ట్ అయింది (కనెక్షన్ abc123). # పేస్ట్ చేయాల్సిందేమీ లేదు — మీరు ఈ టెర్మినల్ను మూసివేయవచ్చు. ``` యాక్టివ్ కాంటెక్స్ట్ మరొక మెషీన్ను సూచించినప్పుడల్లా push స్వయంచాలకంగా జరుగుతుంది. `--push` / `--no-push`తో ఏ విధంగానైనా దాన్ని బలవంతం చేయవచ్చు లేదా `--context `తో నిర్దిష్ట కాంటెక్స్ట్ను లక్ష్యంగా ఎంచుకోవచ్చు. **మీ మెషీన్ VPSను చేరుకోలేకపోయినా** (ఫైర్వాల్ చేయబడి ఉంటే, SSH లేకపోతే, పూర్తిగా వేరుచేసిన డెస్క్ అయితే), ఈ హెల్పర్ అయినప్పటికీ పనిచేస్తుంది — దానికి నిజంగా _అవసరమయ్యేది_ Google మాత్రమే. `--no-push`ను ఉపయోగించండి లేదా push విఫలమవనివ్వండి: మీరు ఇప్పటికే పూర్తి చేసిన ఆథరైజేషన్ను విస్మరించకుండా, అది blobను ప్రింట్ చేయడానికి ఫాల్బ్యాక్ అవుతుంది. ```bash npx omniroute login antigravity --no-push # omniroute-cred-v1.eyJ2IjoxLCJ... ``` ఆ తర్వాత, **రిమోట్** డ్యాష్బోర్డ్లో: **Providers → Antigravity → Connect**కు వెళ్లి, `omniroute-cred-v1.…` blobను **Step 2** ఫీల్డ్లో పేస్ట్ చేయండి (ఇది కాల్బ్యాక్ URL లేదా క్రెడెన్షియల్ blobలో దేనినైనా అంగీకరిస్తుంది). OmniRoute దాన్ని డీకోడ్ చేసి, Cloud Code ఆన్బోర్డింగ్ను సర్వర్ వైపు అమలు చేసి, కనెక్షన్ను శాశ్వతంగా భద్రపరుస్తుంది. > ఈ blobలో refresh token ఉంటుంది — దాన్ని పాస్వర్డ్లా పరిగణించండి. push మార్గంలో అది > మీ కాంటెక్స్ట్కు చెందిన ప్రామాణీకరించిన కనెక్షన్ ద్వారా ఒక్కసారి పంపబడుతుంది; పేస్ట్ మార్గంలో > మీ డ్యాష్బోర్డ్ కనెక్షన్ ద్వారా పంపబడుతుంది. ఏ మార్గంలోనైనా అది నిల్వలో ఎన్క్రిప్ట్ చేసి భద్రపరచబడుతుంది మరియు > విజయవంతమైన push దాన్ని మీ టెర్మినల్లో ఎప్పుడూ ప్రింట్ చేయదు. ఫ్లాగ్లు: `--no-browser` (స్వయంచాలకంగా తెరవడానికి బదులుగా URLను ప్రింట్ చేస్తుంది), `--port ` (లూప్బ్యాక్ portను స్థిరపరుస్తుంది), `--timeout `, `--push` / `--no-push` (స్వయంచాలక డెలివరీని ఓవర్రైడ్ చేస్తాయి), `--context ` (నిర్దిష్ట కాంటెక్స్ట్ను లక్ష్యంగా ఎంచుకుంటుంది). ### ఎంపిక B — SSH లోకల్-ఫార్వర్డ్ టన్నెల్ మీకు VPSకు SSH యాక్సెస్ ఉంటే, లూప్బ్యాక్ కాల్బ్యాక్ టన్నెల్ ద్వారా తిరిగి సర్వర్కు చేరేలా డ్యాష్బోర్డ్ portను ఫార్వర్డ్ చేయండి: ```bash # మీ LOCAL మెషీన్లో: ssh -L 20128:127.0.0.1:20128 user@your-vps # ఆ తర్వాత మీ LOCAL బ్రౌజర్లో http://localhost:20128ను తెరిచి, Antigravityని సాధారణంగా # కనెక్ట్ చేయండి — ఇప్పుడు 127.0.0.1:20128/callback రీడైరెక్ట్ SSH ద్వారా VPSకు చేరుతుంది. ``` మీరు డ్యాష్బోర్డ్ను `localhost:20128`గా యాక్సెస్ చేస్తున్నందున, Google సమ్మతి పూర్తవుతుంది మరియు అదే టన్నెల్ ద్వారా కాల్బ్యాక్ సర్వర్కు అందించబడుతుంది — blob అవసరం లేదు. కనెక్షన్ యాక్టివ్గా కనిపించే వరకు టన్నెల్ను తెరిచి ఉంచండి. దిగువ ఉన్న స్థిర-లూప్బ్యాక్ ప్రొవైడర్లకు భిన్నంగా, ఇక్కడ **ఒక ఫార్వర్డ్ సరిపోతుంది**: Antigravity కాల్బ్యాక్ డ్యాష్బోర్డ్ portనే ఉపయోగిస్తుంది, కాబట్టి టన్నెల్ చేయడానికి ప్రొవైడర్కు ప్రత్యేకమైన రెండో port అవసరం లేదు. > పూర్తిగా headless ప్రత్యామ్నాయం కోసం (హెల్పర్ లేదు, టన్నెల్ లేదు), మీ **స్వంత** > Google OAuth వెబ్ క్రెడెన్షియల్స్ + పబ్లిక్ base URLను కాన్ఫిగర్ చేయండి; ప్రొవైడర్కు చెందిన OAuth > environment variablesను చూడండి. పై రెండు ఎంపికలకు అదనపు Google సెటప్ అవసరం లేదు. --- ## రిమోట్ ఇన్స్టాల్లో Codex / Grokను కనెక్ట్ చేయడం (స్థిర-లూప్బ్యాక్ ప్రొవైడర్లు) Codex, xAI (`xai-oauth`) మరియు Grok CLI (`grok-cli`) తమ అప్స్ట్రీమ్ OAuth యాప్తో ఒక **స్థిరమైన** లూప్బ్యాక్ `redirect_uri`ను నమోదు చేస్తాయి. OmniRoute దాన్ని మార్చలేదు — ప్రొవైడర్ ఎల్లప్పుడూ బ్రౌజర్ను అదే హార్డ్కోడ్ చేసిన చిరునామాకు తిరిగి పంపుతుంది: | ప్రొవైడర్ | ప్రొవైడర్ రీడైరెక్ట్ చేసే స్థిర కాల్బ్యాక్ | | ----------- | ------------------------------------------ | | `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` అంటే **బ్రౌజర్ నడుస్తున్న మెషీన్**, అయితే OmniRoute యొక్క PKCE కాల్బ్యాక్ సర్వర్ **సర్వర్ యొక్క** లూప్బ్యాక్పై వింటుంది. డ్యాష్బోర్డ్ను `http://192.168.0.15:20128` వంటి LAN చిరునామాలో తెరిస్తే, ఆ రెండూ ఎప్పటికీ అనుసంధానం కావు: ఆథరైజేషన్ కోడ్ మీ స్వంత ల్యాప్టాప్లోని `localhost:1455`కు చేరుతుంది, అక్కడ ఏదీ వినడం ఉండదు, మరియు ప్రొవైడర్ ఎలాంటి ఎర్రర్ను చూపకుండానే సైన్-ఇన్ను విఫలం చేస్తుంది. పాపప్ను తెరవడానికి ముందే డ్యాష్బోర్డ్ దీన్ని గుర్తించి, లాగిన్ నిశ్శబ్దంగా విఫలం అయ్యేలా వదిలేయకుండా టన్నెల్ కమాండ్ను చూపిస్తుంది (#8046). ### పరిష్కారం — **రెండు** పోర్ట్లనూ ఫార్వర్డ్ చేయండి ```bash # BROWSER నడుస్తున్న మెషీన్లో: ssh -L 20128:127.0.0.1:20128 -L 1455:127.0.0.1:1455 @192.168.0.15 # ఆపై http://localhost:20128కు వెళ్లి, అక్కడి నుంచి Codexను కనెక్ట్ చేయండి ``` రెండు ఫార్వర్డ్లు అవసరం; ఒక్కదాన్ని మాత్రమే ఫార్వర్డ్ చేసినా విఫలమవుతుంది: - **`20128`** (డ్యాష్బోర్డ్ పోర్ట్) మూలాన్ని నిజమైన localhostగా చేస్తుంది; దీనివల్లే OmniRoute PKCE కాల్బ్యాక్ సర్వర్ను ప్రారంభిస్తుంది — LAN మూలం ఎప్పటికీ ఆ బ్రాంచ్కు చేరదు. - **`1455`** (ప్రొవైడర్ యొక్క స్థిర కాల్బ్యాక్ పోర్ట్) బ్రౌజర్ తిరిగి పంపబడే స్థలం; అది టన్నెల్ ద్వారా సర్వర్ లూప్బ్యాక్కు చేరాలి. xAI లేదా Grok CLIను కనెక్ట్ చేస్తున్నప్పుడు `1455` స్థానంలో `56121`/`56122`ను, అలాగే `20128` స్థానంలో మీ వాస్తవ డ్యాష్బోర్డ్ పోర్ట్ను ఉపయోగించండి. కనెక్షన్ యాక్టివ్గా కనిపించే వరకు టన్నెల్ను తెరిచి ఉంచండి. > **SSH యాక్సెస్ లేదా?** Codex మరియు Grok CLI పేస్ట్ చేసిన టోకెన్ను కూడా అంగీకరిస్తాయి — కనెక్ట్ డైలాగ్లోని **Paste API > Key** / **Import auth.json** ట్యాబ్ను ఉపయోగించండి. ఆ మార్గంలో లూప్బ్యాక్ > కాల్బ్యాక్ ఉండదు, కాబట్టి అది ఏ మూలం నుంచైనా పనిచేస్తుంది. అదనంగా, Codex నేరుగా ఇచ్చిన యాక్సెస్ > టోకెన్ను లేదా `~/.codex/auth.json` సెషన్ బ్లాబ్ను కూడా అంగీకరిస్తుంది. --- ## టోకెన్లను నిర్వహించడం ```bash omniroute tokens create --name "laptop" --scope write [--expires 30] # ↳ secret ను ఒక్కసారి మాత్రమే ప్రింట్ చేస్తుంది — ఇప్పుడే కాపీ చేయండి omniroute tokens list # మాస్క్ చేయబడింది: id, name, scope, prefix, status, expiry omniroute tokens revoke # వెంటనే రద్దు చేయి omniroute tokens scopes # మూడు scopes ను వివరిస్తుంది ``` `tokens` కమాండ్‌లకు **admin** credential అవసరం. మీరు dashboard లో **Settings → Access Tokens** కింద కూడా టోకెన్లను నిర్వహించవచ్చు (సృష్టించు, రద్దు చేయి, ఒక్కసారి కాపీ చేయి). సృష్టికర్త కలిగి ఉన్నదానికంటే ఎక్కువ privilege ఉన్న టోకెన్‌ను ఎప్పటికీ తయారు చేయలేరు. `admin` టోకెన్‌ను operator మాత్రమే సృష్టించగలరు — dashboard session, సర్వర్‌లోనే ఉన్న స్థానిక CLI, లేదా పాస్‌వర్డ్‌తో `omniroute connect`. Machine credentials (`admin` access token, లేదా `manage`/`admin` scope ఉన్న API key) `write` మరియు `read` టోకెన్లను మాత్రమే తయారు చేయగలవు; `--scope admin` అడిగితే `403` వస్తుంది. Login నిలిపివేయడం minting ను తెరవదు: ఏ scope అయినా access token అనేది ఎల్లప్పుడూ-ధృవీకరించబడిన routes అంగీకరించే credential, కాబట్టి ఏ scope లోనైనా అనామక call కు `401` వస్తుంది. --- ## రిమోట్ కేటలాగ్ నుండి coding CLIని కాన్ఫిగర్ చేయడం `omniroute configure` **సక్రియ సర్వర్** యొక్క ప్రత్యక్ష model catalog ను చదువుతుంది, మరియు **మీ** మెషీన్‌పై ఒక config ను వ్రాస్తుంది. ```bash omniroute configure codex # Providers: glm, kmc, ollamacloud, opencode-go, … # Provider: glm # Model id: glm/glm-5.2 # ✔ ~/.codex/glm52.config.toml వ్రాయబడింది # ఉపయోగించండి: codex --profile glm52 # non-interactive omniroute configure codex --provider glm --model glm/glm-5.2 --name glm52 # తరచుగా వాడే model ను interactive picker పైభాగంలో ఉంచండి omniroute configure codex --provider glm --model glm/glm-5.2 --favorite --yes ``` Picker `model-preferences.json` ఫైల్‌లో model IDs ను మాత్రమే ఉంచుతుంది (URLs లేదా credentials ఎప్పుడూ కాదు), context మరియు CLI target వారీగా వేరు చేసి. Favorites ను recent selections కంటే ముందు చూపుతారు; ఎంచుకున్న model ను ఆ context/target జాబితా నుండి తీసివేయడానికి `--unfavorite` ఉపయోగించండి. వ్రాయబడిన profile inference key ను env var (`OMNIROUTE_API_KEY`) ద్వారా సూచిస్తుంది — secret ఎప్పుడూ disk పై వ్రాయబడదు. ఒకసారి మాత్రమే చేసే ప్రాథమిక Codex సెటప్ (`[model_providers.omniroute]` block) కోసం, [CODEX-CLI-CONFIGURATION.md](./CODEX-CLI-CONFIGURATION.md) చూడండి. ### config వ్రాయకుండా రిమోట్‌కు వ్యతిరేకంగా CLIని ప్రారంభించడం `omniroute run ` కూడా సక్రియ context ను గౌరవిస్తుంది: రిమోట్ base URL మరియు context credential ప్రారంభించబడిన process కు మాత్రమే inject చేయబడతాయి. ```bash omniroute connect 192.168.0.15 omniroute run claude --model openai/gpt-5.4 # Claude Code → రిమోట్ omniroute run gemini --model glm/glm-5.2 -- --skip-trust -p "hello" omniroute run opencode --model glm/glm-5.2 -- run "reply OK" # ఖచ్చితంగా ఏమి spawn అవుతుందో ముందే చూడండి (env KEY NAMES మాత్రమే, values కాదు): omniroute run codex --dry-run --json ``` Targets: `claude`, `codex`, `aider`, `goose`, `opencode`, `qwen`, `gemini` (ఒకే మూలం: `bin/cli/cli-manifest.mjs`). Qwen మరియు Gemini తాత్కాలిక, వేరుచేసిన home లో నడుస్తాయి, అది నిష్క్రమణలో తీసివేయబడుతుంది. కాబట్టి launch ఎప్పుడూ మీ వ్యక్తిగత tool configuration ను తాకదు — లేదా అందులోకి లీక్ కాదు. ### ప్రతి CLI కోసం సెటప్ కమాండ్‌లు ప్రతి మద్దతు ఉన్న CLI కు రిమోట్-అవగాహన సెటప్ కమాండ్ ఉంది (అన్నీ సక్రియ context ను గౌరవిస్తాయి, లేదా `--remote --api-key `): | CLI | కమాండ్ | ఏమి వ్రాస్తుంది | | ----------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Codex | `omniroute setup-codex` | `~/.codex/.config.toml` profiles (model వారీగా) | | Claude Code | `omniroute setup-claude` | `~/.claude/profiles//settings.json` (model వారీగా) | | OpenCode | `omniroute setup-opencode` | `~/.config/opencode/opencode.json` — catalog లోని ప్రతి model తో `omniroute` openai-compatible provider (`opencode -m omniroute/` తో అమలు చేయండి) | | Cline | `omniroute setup-cline` | `~/.cline/data/{globalState,secrets}.json` (CLI mode) + VS Code extension settings ను అతికించడానికి ప్రింట్ చేస్తుంది (OpenAI-compatible, Base URL **without** `/v1`) | | Kilo Code | `omniroute setup-kilo` | `~/.local/share/kilo/auth.json` (CLI) + VS Code `kilocode.*` settings — OpenAI-compatible, Base URL **with** `/v1` | | Continue | `omniroute setup-continue` | `~/.continue/config.yaml` (VS Code/JetBrains + `cn` CLI) — `provider: openai`, `apiBase` **with** `/v1`, key `${{ secrets.OMNIROUTE_API_KEY }}` ద్వారా | | Cursor | `omniroute setup-cursor` | in-app దశలను ప్రింట్ చేస్తుంది (Settings → Models → Override OpenAI Base URL **with** `/v1` + key + model). Cursor config అపారదర్శక SQLite — chat panel మాత్రమే | | Roo Code | `omniroute setup-roo` | Roo import JSON (`~/.omniroute/roo-settings.json`) వ్రాస్తుంది + `roo-cline.autoImportSettingsPath` సెట్ చేస్తుంది + UI దశలను ప్రింట్ చేస్తుంది (OpenAI-compatible, Base URL **with** `/v1`) | | Crush | `omniroute setup-crush` | `~/.config/crush/crush.json` — `openai-compat` provider, `base_url` **with** `/v1`, key `$OMNIROUTE_API_KEY` ద్వారా | | Zed | `omniroute setup-zed` | `~/.config/zed/settings.json` — `language_models.openai_compatible.omniroute`, `api_url` **with** `/v1`, key ను Zed `$OMNIROUTE_API_KEY` నుండి చదువుతుంది (ఎప్పుడూ వ్రాయబడదు) | | Goose | `omniroute setup-goose` | `~/.config/goose/config.yaml` (`GOOSE_PROVIDER=openai` + `OPENAI_HOST` **without** `/v1` + `GOOSE_MODEL`) + env recipe | | Aider | `omniroute setup-aider` | `~/.aider.conf.yml` (`openai-api-base` **without** `/v1` + `model: openai/`) + env recipe (`aider --message --yes`) | | Qwen Code | `omniroute setup-qwen` | `~/.qwen/settings.json` V4 `modelProviders.openai` entry + `~/.qwen/.env` లో `OMNIROUTE_API_KEY` | ```bash # OpenCode (openai-compatible provider, catalog లోని అన్ని models, రిమోట్ VPS) omniroute setup-opencode --remote http://192.168.0.15:20128 --api-key oma_live_xxx omniroute setup-opencode --only glm,kimi # సరిపోలే models ను మాత్రమే ఉంచుతుంది opencode -m omniroute/glm/glm-5.2 "..." # ముందుగా OMNIROUTE_API_KEY ను export చేయండి ``` > OpenCode కు మరింత సమృద్ధమైన **plugin** integration కూడా ఉంది: `omniroute setup opencode` (ఇప్పుడు `--remote` ద్వారా రిమోట్-అవగాహనతో) `@omniroute/opencode-plugin` ను ఇన్‌స్టాల్ చేస్తుంది. > `setup-opencode` తేలికైన openai-compatible ప్రత్యామ్నాయం. API key ను `{env:OMNIROUTE_API_KEY}` ద్వారా సూచిస్తారు — ఎప్పుడూ disk పై వ్రాయబడదు. > > OpenCode v2 పై, బదులుగా `@omniroute/opencode-plugin-v2` ను ఉపయోగించండి: అదే catalog, కానీ వేరే loader contract. Integration కనెక్ట్ అయినప్పుడు అది key ను OpenCode యొక్క సొంత credential store నుండి చదువుతుంది, కాబట్టి రిమోట్ gateway కు `opencode.json` లో key అవసరం లేదు. --- ## సందర్భాలను నిర్వహించడం (సర్వర్ల మధ్య మారడం) ఒక **సందర్భం** అనేది సేవ్ చేయబడిన సర్వర్ (baseUrl + credential + scope). `omniroute connect` ఒకటి సృష్టిస్తుంది మరియు దానిని సక్రియం చేస్తుంది; అప్పటి నుండి ప్రతి ఆదేశం దానిని లక్ష్యంగా చేసుకుంటుంది. `omniroute contexts`తో వాటిని నిర్వహించండి మరియు వాటి మధ్య మారండి: ```bash omniroute contexts list # అన్ని సందర్భాలు; సక్రియమైనది ● తో గుర్తించబడింది omniroute contexts current # సక్రియ సర్వర్, ధృవీకరణ స్థితి, స్కోప్ ``` ```text | పేరు | బేస్ URL | ధృవీకరణ | స్కోప్ | వివరణ ● | vps | http://100.67.86.91:20128 | టోకెన్ | అడ్మిన్ | రిమోట్ ఓమ్నిరూట్ (…) | default | http://localhost:20128 | ✗ | | ``` **సర్వర్లను మార్చండి** — ప్రతి తదుపరి ఆదేశం సక్రియ సందర్భాన్ని అనుసరిస్తుంది: ```bash omniroute contexts use vps # → అన్ని ఆదేశాలు ఇప్పుడు రిమోట్ VPSని తాకుతాయి omniroute tokens list # (VPSకి వ్యతిరేకంగా నడుస్తుంది) omniroute contexts use default # → లోకల్ హోస్ట్కి తిరిగి omniroute tokens list # (స్థానిక సర్వర్కి వ్యతిరేకంగా నడుస్తుంది) ``` **మాన్యువల్గా ఒక సందర్భాన్ని జోడించండి** (`connect`కి బదులుగా), తనిఖీ చేయండి లేదా పేరు మార్చండి: ```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 # ఒక సందర్భం కోసం పూర్తి వివరాలు omniroute contexts rename staging stg ``` **ఒక సందర్భాన్ని తొలగించండి** — నిర్ధారణ కోసం అడుగుతుంది; దానిని దాటవేయడానికి `--yes`ని పాస్ చేయండి (స్క్రిప్ట్లు / నాన్-ఇంటరాక్టివ్ షెల్ల కోసం అవసరం, లేకపోతే సురక్షితంగా తిరస్కరిస్తాయి): ```bash omniroute contexts remove stg --yes ``` > `default` (localhost)ని తొలగించలేము. సక్రియ సందర్భాన్ని తొలగించడం `default`కి తిరిగి వస్తుంది. > చిట్కా: ఒక సందర్భాన్ని తొలగించడం అనేది **స్థానిక** సేవ్ చేయబడిన క్రెడెన్షియల్ను మాత్రమే తొలగిస్తుంది — > వాస్తవానికి యాక్సెస్ను నిలిపివేయడానికి `omniroute tokens revoke `తో సర్వర్లో టోకెన్ను రద్దు చేయండి. **సందర్భాలను ఎగుమతి / దిగుమతి చేయండి** (ఉదా. వాటిని యంత్రాల మధ్య తరలించడానికి). ఎగుమతులు డిఫాల్ట్గా క్రెడెన్షియల్లను వదిలివేస్తాయి, ఫైల్ ఫాల్బ్యాక్ ద్వారా నిల్వ చేయబడిన క్రెడెన్షియల్లతో సహా. పోర్టబుల్ క్రెడెన్షియల్-బేరింగ్ బ్యాకప్ అవసరమైనప్పుడు `--include-secrets`ని స్పష్టంగా ఉపయోగించండి: ```bash omniroute contexts export --out contexts.json # సవరించబడింది; డిఫాల్ట్ గమ్యం: stdout omniroute contexts export --include-secrets --out private-contexts.json omniroute contexts import contexts.json # ఓవర్రైట్; ఇప్పటికే ఉన్న వాటిని ఉంచడానికి --merge omniroute contexts migrate --yes # లెగసీ ప్లెయిన్టెక్స్ట్ టోకెన్లను కీచైన్కు తరలించండి ``` `--include-secrets` ఎగుమతి చేయడానికి ముందు కీచైన్ రిఫరెన్స్లను పరిష్కరిస్తుంది మరియు ఏదైనా రిఫరెన్స్ చేయబడిన క్రెడెన్షియల్ను చదవలేకపోతే విఫలమవుతుంది. `--no-secrets` ఎల్లప్పుడూ ప్రాధాన్యతనిస్తుంది. ఎగుమతి ఫైల్లు మోడ్ `0600`తో అణువుగా వ్రాయబడతాయి. స్పష్టమైన రహస్య-బేరింగ్ ఎగుమతిని రహస్య పదార్థంగా పరిగణించండి. ఉపయోగించదగిన OS కీచైన్ లేని హెడ్లెస్ సిస్టమ్లలో, CLI మోడ్ `0600`తో `config.json`కి తిరిగి వస్తుంది మరియు ఒక-సారి హెచ్చరికను ముద్రిస్తుంది; ఈ మోడ్లో డిఫాల్ట్ ఎగుమతి సవరించబడినదిగా ఉంటుంది. --- ## త్వరిత ఎండ్-టు-ఎండ్ తనిఖీ రిమోట్ సెటప్ను మొదటి నుండి ధృవీకరించడానికి కాపీ-పేస్ట్ చేయగల లైఫ్సైకిల్ — కనెక్ట్ చేయడం, స్కోప్ చేయబడిన టోకెన్ను సృష్టించడం, కమాండ్ను రూట్ చేయడం, తిరిగి మారడం మరియు సెటప్ను తొలగించడం. `192.168.0.15`ను మీ సర్వర్ హోస్ట్/IPతో భర్తీ చేయండి (Tailscale, LAN లేదా పబ్లిక్ `https://…` URL). ```bash # 1. కనెక్ట్ చేయండి (పాస్వర్డ్ → admin టోకెన్, యాక్టివ్గా మారే కాంటెక్స్ట్గా సేవ్ చేయబడుతుంది) omniroute connect 192.168.0.15 # లేదా: --key oma_live_xxxx (పాస్వర్డ్ లేదు) omniroute contexts current # రిమోట్ సర్వర్ + స్కోప్ను చూపిస్తుంది # 2. దాన్ని ఉపయోగించండి — మేనేజ్మెంట్ కమాండ్లు ఇప్పుడు రిమోట్కు వ్యతిరేకంగా రన్ అవుతాయి omniroute tokens create --name laptop --scope read # మరింత పరిమితమైన టోకెన్ను సృష్టిస్తుంది omniroute tokens list # రిమోట్ నుండి మాస్క్ చేసిన జాబితా # 3. అటూ ఇటూ మారండి omniroute contexts use default # → లోకల్ omniroute contexts use 192-168-0-15 # → మళ్లీ రిమోట్ (`contexts list` నుండి వచ్చిన పేరు) # 4. తొలగించండి. గమనిక: `contexts remove` కేవలం లోకల్ క్రెడెన్షియల్ను మాత్రమే తొలగిస్తుంది — # అది సర్వర్లోని టోకెన్ను రద్దు చేయదు. మీరు యాక్సెస్ను నిజంగా నిలిపివేయాలనుకుంటే, # ముందుగా సర్వర్ వైపు టోకెన్ను రద్దు చేయండి. omniroute tokens revoke # సర్వర్లో యాక్సెస్ను నిలిపివేస్తుంది omniroute contexts remove 192-168-0-15 --yes # లోకల్ కాంటెక్స్ట్ను తొలగిస్తుంది (యాక్టివ్గా ఉన్నా → defaultకు తిరిగి మారుతుంది), ప్రాంప్ట్ ఉండదు ``` > `--yes`, `contexts remove`ను నాన్-ఇంటరాక్టివ్గా చేస్తుంది (స్క్రిప్ట్లు/CIలో అవసరం; అది లేకుండా, > నాన్-ఇంటరాక్టివ్ షెల్ నిలిచిపోవడానికి బదులుగా సురక్షితంగా తిరస్కరిస్తుంది). **యాక్టివ్** > కాంటెక్స్ట్ను తొలగిస్తే ఆటోమేటిక్గా `default`కు తిరిగి మారుతుంది. --- ## భద్రతా గమనికలు - టోకెన్ సాధారణ పాఠ్యం ఒక్కసారి మాత్రమే చూపబడుతుంది; SHA-256 హాష్ మాత్రమే నిల్వ చేయబడుతుంది (API కీల్లాగే). - `omniroute connect` లాగిన్ బ్రూట్-ఫోర్స్ లాకౌట్ను మరియు ఆడిట్ లాగింగ్ను మళ్లీ ఉపయోగిస్తుంది. - రవాణా కోసం HTTPS లేదా Tailnetకు ప్రాధాన్యం ఇవ్వండి; LAN/Tailscale సౌలభ్యం కోసం కేవలం హోస్ట్ను ఇచ్చినప్పుడు అది డిఫాల్ట్గా `http://`ను ఉపయోగిస్తుంది — TLS కోసం పూర్తి `https://…` URLను పంపండి. - సిఫార్సు చేయబడిన స్థానిక కాంటెక్స్ట్ ఫైల్ `~/.omniroute/config.json` (`chmod 600`); ఇందులో `credentialRef` మాత్రమే ఉంటుంది. టోకెన్ స్వయంగా OS కీచైన్లో (`keytar`) నిల్వ చేయబడుతుంది మరియు లాగ్లలో ఎప్పుడూ ముద్రించబడదు. పనిచేసే స్థానిక కీచైన్ లేని హెడ్లెస్ ఇన్స్టాలేషన్లు అదే `0600` ఫైల్ను స్పష్టమైన ఫాల్బ్యాక్గా ఉపయోగించి, ఒక్కసారి హెచ్చరికను జారీ చేస్తాయి. కీచైన్ బ్యాకెండ్ను ఇన్స్టాల్ చేసిన తర్వాత `omniroute contexts migrate --yes`ను ఉపయోగించండి. --- ## API ఎండ్పాయింట్లు (సూచన) | పద్ధతి | రూట్ | ప్రామాణీకరణ | పరిధి | | ------ | --------------------- | ----------------- | ----------------------------------- | | POST | `/api/cli/connect` | నిర్వహణ పాస్వర్డ్ | — (పబ్లిక్, పాస్వర్డ్తో నియంత్రితం) | | GET | `/api/cli/whoami` | యాక్సెస్ టోకెన్ | చదవడం | | GET | `/api/cli/tokens` | యాక్సెస్ టోకెన్ | అడ్మిన్ | | POST | `/api/cli/tokens` | యాక్సెస్ టోకెన్ | అడ్మిన్ | | DELETE | `/api/cli/tokens/:id` | యాక్సెస్ టోకెన్ | అడ్మిన్ | పూర్తి స్కీమాల కోసం [openapi.yaml](../openapi.yaml) చూడండి.