# CLI Tools โ€” OmniRoute (Filipino) ๐ŸŒ **Languages:** ๐Ÿ‡บ๐Ÿ‡ธ [English](../../../../reference/CLI-TOOLS.md) ยท ๐Ÿ‡ช๐Ÿ‡น [am](../../../am/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฆ [ar](../../../ar/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฟ [az](../../../az/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ง๐Ÿ‡ฌ [bg](../../../bg/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ง๐Ÿ‡ฉ [bn](../../../bn/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ง๐Ÿ‡ฆ [bs](../../../bs/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡จ๐Ÿ‡ฟ [cs](../../../cs/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ฐ [da](../../../da/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฉ๐Ÿ‡ช [de](../../../de/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ท [el](../../../el/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ช๐Ÿ‡ธ [es](../../../es/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ช๐Ÿ‡ช [et](../../../et/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ท [fa](../../../fa/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ซ๐Ÿ‡ฎ [fi](../../../fi/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ซ๐Ÿ‡ท [fr](../../../fr/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ช [ga](../../../ga/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [gu](../../../gu/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ha](../../../ha/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฑ [he](../../../he/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [hi](../../../hi/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ญ๐Ÿ‡ท [hr](../../../hr/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ญ๐Ÿ‡บ [hu](../../../hu/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฆ๐Ÿ‡ฒ [hy](../../../hy/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ฉ [id](../../../id/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [ig](../../../ig/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡น [it](../../../it/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฏ๐Ÿ‡ต [ja](../../../ja/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฌ๐Ÿ‡ช [ka](../../../ka/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ญ [km](../../../km/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [kn](../../../kn/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ท [ko](../../../ko/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฑ๐Ÿ‡น [lt](../../../lt/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ป [lv](../../../lv/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ml](../../../ml/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [mr](../../../mr/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฒ๐Ÿ‡พ [ms](../../../ms/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฒ๐Ÿ‡น [mt](../../../mt/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฒ๐Ÿ‡ฒ [my](../../../my/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ณ๐Ÿ‡ต [ne](../../../ne/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฑ [nl](../../../nl/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ณ๐Ÿ‡ด [no](../../../no/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [or](../../../or/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [pa](../../../pa/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ต๐Ÿ‡ฑ [pl](../../../pl/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ต๐Ÿ‡น [pt](../../../pt/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ง๐Ÿ‡ท [pt-BR](../../../pt-BR/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ท๐Ÿ‡ด [ro](../../../ro/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ท๐Ÿ‡บ [ru](../../../ru/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฑ๐Ÿ‡ฐ [si](../../../si/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฐ [sk](../../../sk/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ธ๐Ÿ‡ฎ [sl](../../../sl/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ท๐Ÿ‡ธ [sr](../../../sr/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ธ๐Ÿ‡ช [sv](../../../sv/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฐ๐Ÿ‡ช [sw](../../../sw/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [ta](../../../ta/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [te](../../../te/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡น๐Ÿ‡ญ [th](../../../th/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡น๐Ÿ‡ท [tr](../../../tr/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡บ๐Ÿ‡ฆ [uk-UA](../../../uk-UA/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ต๐Ÿ‡ฐ [ur](../../../ur/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡บ๐Ÿ‡ฟ [uz](../../../uz/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ป๐Ÿ‡ณ [vi](../../../vi/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡ณ๐Ÿ‡ฌ [yo](../../../yo/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡จ๐Ÿ‡ณ [zh-CN](../../../zh-CN/docs/reference/CLI-TOOLS.md) ยท ๐Ÿ‡น๐Ÿ‡ผ [zh-TW](../../../zh-TW/docs/reference/CLI-TOOLS.md) --- Huling na-update: 2026-08-23 Sumasama ang OmniRoute sa tatlong kategorya ng mga CLI tool na nakalatag sa tatlong nakalaang dashboard page: | Page | Route | Konsepto | Bilang | | -------------- | ----------------------- | -------------------------------------------------------------------------------------------------- | -------------------- | | **CLI Code's** | `/dashboard/cli-code` | Mga coding tool na itinuturo mo sa OmniRoute (Client โ†’ CLI โ†’ OmniRoute โ†’ Provider) | 26 | | **CLI Agents** | `/dashboard/cli-agents` | Mga autonomous agent na itinuturo mo sa OmniRoute (parehong daloy, mas malawak na saklaw) | 10 | | **ACP Agents** | `/dashboard/acp-agents` | Mga CLI na pinapatakbo ng OmniRoute bilang backend sa pamamagitan ng stdio/ACP (baligtad na daloy) | tingnan ang registry | Nagre-redirect ang mga legacy route sa pamamagitan ng 308: `/dashboard/cli-tools` โ†’ `/dashboard/cli-code`, `/dashboard/agents` โ†’ `/dashboard/acp-agents`. --- ## Paano Ito Gumagana ``` CLI Code's / CLI Agents (daloy ng paggamit): Claude / Codex / OpenCode / Cline / KiloCode / Continue / Hermes Agent / Goose / ... โ”‚ โ–ผ (lahat ay nakaturo sa OmniRoute) http://YOUR_SERVER:20128/v1 โ”‚ โ–ผ (niruruta ng OmniRoute sa tamang provider) Anthropic / OpenAI / Gemini / DeepSeek / Groq / Mistral / ... ACP Agents (baligtad na daloy ng pagpapatakbo): Kahilingan ng client โ†’ OmniRoute โ†’ nagpapatakbo ng CLI sa pamamagitan ng stdio/ACP โ†’ tugon ``` **Mga pakinabang:** - Isang API key para pamahalaan ang lahat ng tool - Pagsubaybay sa gastos ng lahat ng CLI sa dashboard - Pagpapalit ng modelo nang hindi muling kino-configure ang bawat tool - Gumagana nang lokal at sa mga remote server (VPS, Docker, Akamai, Cloudflare Tunnel) --- ## Awtomatikong i-configure gamit ang `setup-*` Hindi mo kailangang manu-manong isulat ang config ng bawat tool. May kasamang `setup-*` command ang OmniRoute para sa bawat sinusuportahang CLI na nagbabasa ng **aktuwal** na catalog ng modelo mula sa tumatakbong OmniRoute (lokal o remote) at nagsusulat ng sariling config ng tool sa iyong makina: ```bash omniroute setup-codex omniroute setup-claude omniroute setup-opencode omniroute setup-cline omniroute setup-kilo omniroute setup-continue omniroute setup-cursor omniroute setup-roo omniroute setup-crush omniroute setup-goose omniroute setup-qwen omniroute setup-aider omniroute setup-5dive omniroute setup-zed ``` Tinatanggap ng bawat isa ang `--remote --api-key ` (i-configure ang isang lokal na tool laban sa isang remote na OmniRoute), `--dry-run` (i-preview nang walang pagsusulat), at `--port`. Ang mga tool na walang awtomatikong pagtuklas ng modelo (Cline, Kilo, Roo, Goose, Aider, Qwen, 5dive) ay tumatanggap ng `--model ` (at `--yes` para sa mga non-interactive na pagpapatakbo). Ang `setup-5dive` lamang ang recipe na hindi nagsusulat sa ilalim ng `$HOME`: kino-configure nito ang isang fleet ng 5dive agent sa pamamagitan ng pagsusulat ng root-owned na auth profile sa fleet host, kaya muli nitong isinasagawa ang sarili sa pamamagitan ng `sudo` at wala itong sariling remote mode. Upang maglunsad ng CLI na may wastong env na naka-inject at walang anumang isinusulat na config, gamitin ang generic na launcher na `omniroute run ` (claude, codex, aider, goose, opencode, qwen, gemini โ€” nagmumula ang mga target at alias sa `bin/cli/cli-manifest.mjs`); nananatiling available ang mga legacy na launcher para sa bawat tool na `omniroute launch` (Claude Code) at `omniroute launch-codex` (Codex). Launch-only ang Gemini CLI: isa itong target ng `omniroute run` ngunit wala itong `setup-*`/`configure` recipe. > **Kumpletong sanggunian:** ang pangunahing talahanayan โ€” kung ano ang isinusulat ng bawat command, lahat ng flag, > lokal kumpara sa remote, at kung aling mga tool ang nangangailangan ng `/v1` suffix โ€” ay nasa > **[Mga Integrasyon ng CLI](../guides/CLI-INTEGRATIONS.md)**. ### Pagpapatakbo ng mga ito sa loob ng container Ang isang `setup-*` command na isinagawa sa loob ng OmniRoute container ay nagsusulat sa sariling home ng container, na hindi binabasa ng anumang host CLI at nawawala kasama ng container. Natutukoy iyon ng OmniRoute at nag-e-exit nang may `2` at may mga tagubilin sa halip na magsulat. Dalawang sinusuportahang paraan ang maaaring gamitin โ€” i-install ang CLI sa host at gamitin ang `omniroute connect` sa container, o i-bind-mount ang mga config dir at itakda ang `CLI_CONFIG_HOME` (ang compose `host` profile). Ang bawat `setup-*` command, kasama ang `omniroute configure` at `omniroute config set`, ay tumatanggap ng `--allow-container-write` kapag ang talagang nilalayon mo ay i-configure ang sariling mga CLI ng container; ganoon din ang ginagawa ng `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE=true` para sa server. Tingnan ang [Gabay sa Docker โ†’ Pag-configure ng mga host CLI tool](../guides/DOCKER_GUIDE.md#configuring-host-cli-tools-when-omniroute-runs-in-docker). Ipinapatupad ng **apply endpoint** ng dashboard (`POST /api/cli-tools/apply`) ang parehong guard: sa isang container, ang pagsusulat na ang target ay hindi bind-mounted mula sa host ay sumasagot ng **`422`** na may `containerEphemeralTarget: true`, ang ligtas na text ng error, at โ€” para sa mga tool na may host recipe (claude, codex, opencode, cline, kilo, continue) โ€” isang `hostSetupCommand` (hal. `omniroute setup-opencode`) na patatakbuhin sa host sa halip; walang isinusulat. Patuloy na gumagana ang `dryRun: true` sa container mode at nagbabalik ng na-redact na preview + target path nang hindi ginagalaw ang disk. Ang nilalaman ng preview ay hindi isang configuration na naglalaman ng credential na dapat kopyahin o i-import. Mag-apply gamit ang orihinal na mga input para sa tool/base URL/API key/model sa host, o gamitin ang ipinahiwatig na host-side setup command. Tingnan ang [Seguridad ng configuration ng CLI](../security/CLI-CONFIGURATION.md) para sa preview header at request contract. Sinadya ang behavior na ito at pinoprotektahan laban sa regression ng `tests/unit/api/cli-tools/apply-container-guard.test.ts` โ€” huwag kailanman "ayusin" ang isang 422 sa pamamagitan ng pag-aalis ng guard. --- ## Pinagmumulan ng Katotohanan Ang pinag-isang catalog ay nasa `src/shared/constants/cliTools.ts` bilang `CLI_TOOLS: Record`. Ang bawat entry ay may mga sumusunod na field (tinukoy sa `src/shared/schemas/cliCatalog.ts`): | Field | Type | Paglalarawan | | ----------------------------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------- | | `category` | `"code" \| "agent"` | Kung saang page lumalabas ang tool | | `vendor` | `string` | Pinagmulan ng tool ("Anthropic", "OSS (P. Gauthier)") | | `acpSpawnable` | `boolean` | Maaari ring gamitin bilang ACP Agent (ipinapakita ang badge) | | `baseUrlSupport` | `"full" \| "partial" \| "none"` | Antas ng suporta sa custom endpoint. `"none"` = backlog ng MITM | | `configType` | `"env" \| "custom" \| "guide" \| "custom-builder" \| "mitm"` | Mekanismo ng configuration | | `id`, `name`, `color`, `description`, `docsUrl` | standard | Mga pangunahing field para sa pagpapakita | Ang mga entry na may `baseUrlSupport: "none"` ay **hindi ipinapakita** sa mga page ng dashboard โ€” nakarehistro ang mga ito sa backlog ng MITM para sa plan 11 (tingnan ang `_tasks/features-v3.8.6/refactorpages/_orchestration/_plan11-mitm-backlog.md`). ### Mga antas ng capability (naka-catalog ร— nade-detect ร— nako-configure ร— nailulunsad) Hindi lahat ng naka-catalog na tool ay nade-detect, nako-configure, o nailulunsad. Ang bawat antas ay may iisang pinagmumulan ng deklarasyon, at pinananatiling magkakatugma ang mga ito ng drift test: | Antas | Kahulugan | Idineklara sa | | ------------------ | --------------------------------------------------------------------------- | ----------------------------------------------------------------- | | **Naka-catalog** | Lumalabas sa catalog ng dashboard (pangalan, vendor, docs, uri ng config) | `src/shared/constants/cliTools.ts` (`CLI_TOOLS`) | | **Nade-detect** | Pag-detect ng binary/config, mga health check, mga path ng config | `src/shared/services/cliRuntime.ts` (`CLI_TOOLS` runtime catalog) | | **Nako-configure** | Sinusuportahan ng `omniroute configure ` (may setup recipe) | `bin/cli/cli-manifest.mjs` (`configure: true`) | | **Nailulunsad** | Sinusuportahan ng `omniroute run ` (tinukoy ang env/args injection) | `bin/cli/cli-manifest.mjs` (`run: true`) | Ang `bin/cli/cli-manifest.mjs` ang canonical executable manifest para sa mga command surface ng CLI: kinukuha rito ng `run`, `configure`, at mga shell-completion generator ang kanilang mga listahan ng target, alias resolution (halimbawa, `kilocode`/`kilo-code`/`kilo_cli` โ†’ `kilo`) at wiring ng flag na `--model`. Tinitiyak ng drift guard na `tests/unit/cli/cli-manifest-drift.test.ts` na nananatiling magkakasabay ang manifest, runtime catalog, UI catalog, at bawat consumer surface โ€” kapag may target na idinagdag sa isang surface nang wala sa iba, mabibigo ang suite sa halip na tahimik na magkaroon ng drift. --- ## 1. Katalogo ng CLI Code (27 tool) Lahat ng tool na lumalabas sa `/dashboard/cli-code`. Ang mga may `baseUrlSupport: none` ay ikinokonekta sa pamamagitan ng MITM o manu-manong gabay sa halip na custom na base URL: | id | name | vendor | baseUrlSupport | configType | acpSpawnable | | ------------ | ----------------------- | ----------------------- | -------------- | -------------- | ------------ | | claude | Claude Code | Anthropic | full | env | true | | codex | OpenAI Codex CLI | OpenAI | full | custom | true | | zcode | ZCode (GLM Coding Plan) | Z.ai | none | custom | false | | cline | Cline | OSS (dating Claude Dev) | full | custom | true | | kilo | Kilo Code | Kilo-Org | full | custom | false | | roo | Roo Code | Roo (OSS) | full | guide | false | | continue | Continue | continue.dev | full | guide | false | | aider | Aider | OSS (P. Gauthier) | full | guide | true | | forge | ForgeCode | Antinomy HQ | full | custom | true | | jcode | jcode | 1jehuang (OSS) | full | custom | false | | deepseek-tui | DeepSeek TUI | Hunter Bown (OSS) | full | custom | false | | codewhale | CodeWhale | Hmbown (OSS) | full | custom | false | | opencode | OpenCode | Anomaly (dating SST) | full | guide | true | | droid | Factory Droid | Factory AI | partial | guide | false | | copilot | GitHub Copilot CLI | GitHub/MS | full | custom | false | | cursor-cli | Cursor CLI | Anysphere | partial | guide | true | | smelt | Smelt | leonardcser (OSS) | full | custom | false | | pi | Pi (pi-coding-agent) | M. Zechner (OSS) | full | custom | false | | grok-build | Grok Build | xAI | full | custom | false | | crush | Crush | OSS (Charm) | full | custom | false | | qwen | Qwen Code | Alibaba | full | guide | true | | zed | Zed | Zed Industries | full | guide | false | | cursor | Cursor | Anysphere | none | guide | false | | antigravity | Antigravity | Google | none | mitm | false | | hermes | Hermes | Nous Research | none | guide | false | | kiro | Kiro AI | Amazon | none | mitm | false | | custom | Custom CLI | โ€” | full | custom-builder | false | Ang mga tool na may `baseUrlSupport: "partial"` ay nagpapakita ng badge na "โš  Bahagyang Base URL" sa card ng dashboard. --- ## 2. Katalogo ng mga CLI Agent (10 tool) Mga autonomous agent na makikita sa `/dashboard/cli-agents`: | id | pangalan | vendor | suporta sa baseUrl | maaaring i-spawn sa ACP | | ------------ | ---------------- | ------------------------ | ------------------ | ----------------------- | | hermes-agent | Hermes Agent | Nous Research | full | false | | openclaw | OpenClaw | OSS (P. Steinberger) | full | true | | goose | Goose | Block / Linux Foundation | full | true | | interpreter | Open Interpreter | OSS | full | true | | warp | Warp AI | Warp Inc. | partial | true | | agent-deck | Agent Deck | asheshgoplani (OSS) | full | false | | omp | Oh My Pi | OSS | full | true | | letta | Letta CLI | Letta | full | false | | prime-agent | Prime Agent | Prime Intellect (OSS) | full | false | | 5dive | 5dive | OSS (5dive-ai) | full | false | --- ## 3. Mga ACP Agent (/dashboard/acp-agents) Ipinapakita ng pahinang ito (pinalitan ang pangalan mula sa `/dashboard/agents`) ang mga CLI na maaaring **i-spawn** ng OmniRoute bilang mga backend execution engine sa pamamagitan ng stdio/ACP protocol. Hiwalay na pinamamahalaan ang katalogo sa `src/lib/acp/registry.ts` at **hindi** ito kapareho ng `CLI_TOOLS`. --- ## 4. Backlog ng MITM (hindi ipinapakita sa dashboard) Hindi native na sinusuportahan ng mga sumusunod na CLI ang custom base URL at **hindi nakalista** sa mga pahina ng CLI Code o CLI Agents. Mga kandidato ang mga ito para sa MITM interception sa plan 11: | CLI | Dahilan | | ------------------- | ------------------------------------------------------------------------- | | windsurf | Limitado ang BYOK sa mga piling Claude model + pangkorporasyong URL/token | | amp | Saradong ecosystem (Sourcegraph) | | amazon-q / kiro-cli | AWS SSO auth, walang custom URL | | cowork | Anthropic Desktop, walang nako-configure na endpoint | Tingnan ang `_tasks/features-v3.8.6/refactorpages/_orchestration/_plan11-mitm-backlog.md` para sa kumpletong cross-reference. --- ## 5. Batch Detection API Pinagsasama-sama ang lahat ng tool detection sa pamamagitan ng iisang endpoint: **`GET /api/cli-tools/all-statuses`** - Auth: `requireCliToolsAuth(request)` (kapareho ng iba pang `/api/cli-tools/` route) - Ibinabalik: `Record` (uri: `src/shared/types/cliBatchStatus.ts`) - Estratehiya: `Promise.all` sa lahat ng tool, 5s timeout bawat tool - Cache: in-memory LRU na naka-index ayon sa `mtime` ng config file. Nawawalan ng bisa ang cache kapag nagbago ang mtime. Nire-reset kapag nag-restart ang server. Hugis ng tugon para sa bawat tool: ```ts interface ToolBatchStatus { detection: { installed: boolean; runnable: boolean; version?: string; command?: string; commandPath?: string; reason?: string; }; config: { status: "configured" | "not_configured" | "not_installed" | "unknown" | "other"; endpoint?: string | null; lastConfiguredAt?: string | null; }; error?: string; // nilinis, walang mga stack trace } ``` --- ## 6. Mga Settings Handler para sa mga Bagong Tool Ang mga bagong tool na may `configType: "custom"` ay may mga nakalaang settings API route: | Route | Tool | | ------------------------------------------- | ---------------------------------------------------------------------- | | `POST /api/cli-tools/forge-settings` | ForgeCode (.forge.toml) | | `POST /api/cli-tools/jcode-settings` | jcode (--base-url flag) | | `POST /api/cli-tools/deepseek-tui-settings` | DeepSeek TUI (OPENAI_BASE_URL, legacy) | | `POST /api/cli-tools/codewhale-settings` | CodeWhale (OPENAI_BASE_URL, pangunahin + legacy na `~/.deepseek` sync) | | `POST /api/cli-tools/smelt-settings` | Smelt | | `POST /api/cli-tools/pi-settings` | Pi coding agent | | `POST /api/cli-tools/grok-build-settings` | Grok Build (~/.grok/config.toml, `[model.omniroute]`) | | `POST /api/cli-tools/qwen-settings` | Qwen Code (`~/.qwen/settings.json` + nakalaang `.env` key) | Ginagamit ng lahat ng route ang `sanitizeErrorMessage()` para sa mga tugon sa error (Mahigpit na Panuntunan #12). --- ## 7. Arkitektura ng mga Dashboard Page ### CLI Code (`/dashboard/cli-code`) - `src/app/(dashboard)/dashboard/cli-code/page.tsx` โ€” server component - `src/app/(dashboard)/dashboard/cli-code/CliCodePageClient.tsx` โ€” client grid - `src/app/(dashboard)/dashboard/cli-code/[id]/page.tsx` โ€” page ng detalye ng tool - `src/app/(dashboard)/dashboard/cli-code/components/` โ€” 12 espesyal na tool card + `ToolDetailClient.tsx` ### CLI Agents (`/dashboard/cli-agents`) - `src/app/(dashboard)/dashboard/cli-agents/page.tsx` โ€” server component - `src/app/(dashboard)/dashboard/cli-agents/CliAgentsPageClient.tsx` โ€” client grid - `src/app/(dashboard)/dashboard/cli-agents/[id]/page.tsx` โ€” muling ginagamit ang `ToolDetailClient` ### ACP Agents (`/dashboard/acp-agents`) - `src/app/(dashboard)/dashboard/acp-agents/page.tsx` โ€” server component (inilipat mula sa `agents/`) ### Mga Shared UI Component (`src/shared/components/cli/`) | File | Layunin | | ----------------------- | -------------------------------------------------------- | | `CliToolCard.tsx` | Smart status card (detection + config + endpoint) | | `CliConceptCard.tsx` | Card ng paliwanag sa konsepto para sa bawat page | | `CliComparisonCard.tsx` | Tatlong-column na paghahambing sa iba't ibang uri ng CLI | | `BaseUrlSelect.tsx` | Dropdown ng endpoint (Lokal/Cloud/Custom) | | `ApiKeySelect.tsx` | Tagapili ng API key | | `ManualConfigModal.tsx` | Modal ng config snippet na maaaring kopyahin | ### Shared Hook (`src/shared/hooks/cli/`) | File | Layunin | | ------------------------- | ------------------------------------------------------------------------------------ | | `useToolBatchStatuses.ts` | Kinukuha ang `/api/cli-tools/all-statuses`, pinamamahalaan ang loading/refresh state | --- ## 8. i18n Mga bagong namespace na idinagdag sa plan 14 F9: | Namespace | Layunin | | ----------- | ---------------------------------------------------------------------------------------------------------------- | | `cliCommon` | Mga nakabahaging string (mga label ng card, mga teksto ng konsepto/paghahambing, mga label ng pahina ng detalye) | | `cliCode` | Mga string ng pahina ng CLI Code | | `cliAgents` | Mga string ng pahina ng CLI Agents | | `acpAgents` | Mga string ng pahina ng ACP Agents | May ibinigay na kumpletong salin sa PT-BR at EN. Awtomatikong gumagamit ng EN bilang fallback ang 39 na iba pang locale sa pamamagitan ng namespace-level merge sa `src/i18n/request.ts`. --- ## 9. Mabilisang Pagsisimula ### Hakbang 1 โ€” Kumuha ng OmniRoute API Key 1. Buksan ang `/dashboard/api-manager` โ†’ **Gumawa ng API Key** 2. Bigyan ito ng pangalan (hal. `cli-tools`) at piliin ang lahat ng pahintulot 3. Kopyahin ang key โ€” kakailanganin mo ito para sa bawat CLI sa ibaba > Ganito ang hitsura ng iyong key: `sk-xxxxxxxxxxxxxxxx-xxxxxxxxx` --- ### Hakbang 2 โ€” I-install ang mga CLI Tool Nangangailangan ang lahat ng tool na nakabatay sa npm ng Node.js 22.22.2+ o 24.x: ```bash # Claude Code (Anthropic) npm install -g @anthropic-ai/claude-code # OpenAI Codex npm install -g @openai/codex # OpenCode npm install -g opencode-ai # Cline npm install -g cline # KiloCode npm install -g kilocode # Qwen Code npm install -g @qwen-code/qwen-code # Google Gemini CLI (maaaring ilunsad sa pamamagitan ng `omniroute run gemini` โ†’ /v1beta surface) npm install -g @google/gemini-cli # Aider pip install aider-chat # Smelt cargo install smelt # Nakabatay sa Rust # Pi coding agent # tingnan ang https://github.com/zechnerj/pi-coding-agent para sa pag-install # jcode # tingnan ang https://github.com/1jehuang/jcode para sa pag-install ``` --- ### Hakbang 3 โ€” I-configure sa Pamamagitan ng Dashboard 1. Pumunta sa `http://localhost:20128/dashboard/cli-code` 2. Hanapin ang iyong tool sa grid 3. I-click ang card upang buksan ang pahina ng detalye ng tool 4. Piliin ang iyong API key at base URL 5. I-click ang **Ilapat ang Config** o kopyahin ang snippet ng manual na config --- ### Hakbang 4 โ€” Itakda ang mga Global Environment Variable ```bash # Universal Endpoint ng OmniRoute export OPENAI_BASE_URL="http://localhost:20128/v1" export OPENAI_API_KEY="sk-your-omniroute-key" export ANTHROPIC_BASE_URL="http://localhost:20128" export ANTHROPIC_AUTH_TOKEN="sk-your-omniroute-key" # Binabasa ng Gemini CLI ang GOOGLE_GEMINI_BASE_URL sa ROOT (ang SDK nito mismo ang nagdaragdag ng /v1beta/...) export GOOGLE_GEMINI_BASE_URL="http://localhost:20128" export GEMINI_API_KEY="sk-your-omniroute-key" ``` > Para sa isang **remote server**, palitan ang `localhost:20128` ng IP o domain ng server, > hal. `http://:20128`. --- ### Hakbang 4 โ€” I-configure ang Bawat Tool #### Claude Code ```bash # Gumawa ng ~/.claude/settings.json: mkdir -p ~/.claude && cat > ~/.claude/settings.json << EOF { "env": { "ANTHROPIC_BASE_URL": "http://localhost:20128", "ANTHROPIC_AUTH_TOKEN": "sk-your-omniroute-key" } } EOF ``` Gamitin ang pinag-isang root ng Anthropic gateway para sa Claude Code. Huwag idagdag ang `/v1` dito. **Subukan:** `claude "say hello"` --- #### OpenAI Codex Ang modernong Codex (v0.137+) ay nagbabasa lamang ng `~/.codex/config.toml` โ€” ang lumang `config.yaml` ay para sa legacy npm CLI at tahimik na binabalewala. Nananatili ang API key sa `OMNIROUTE_API_KEY` environment variable (`env_key`), at hindi kailanman sa loob ng file: ```bash mkdir -p ~/.codex && cat > ~/.codex/config.toml << EOF model_provider = "omniroute" [model_providers.omniroute] name = "OmniRoute" base_url = "http://localhost:20128/v1" env_key = "OMNIROUTE_API_KEY" requires_openai_auth = false EOF export OMNIROUTE_API_KEY="sk-your-omniroute-key" ``` Kumpletong sanggunian (mga profile, `wire_api`, mga context window): [CODEX-CLI-CONFIGURATION.md](../guides/CODEX-CLI-CONFIGURATION.md). **Subukan:** `codex "what is 2+2?"` --- #### OpenCode ```bash mkdir -p ~/.config/opencode && cat > ~/.config/opencode/opencode.json << EOF { "\$schema": "https://opencode.ai/config.json", "provider": { "omniroute": { "npm": "@ai-sdk/openai-compatible", "name": "OmniRoute", "options": { "baseURL": "http://localhost:20128/v1", "apiKey": "sk-your-omniroute-key" }, "models": { "claude-sonnet-4-5": { "name": "claude-sonnet-4-5" }, "claude-sonnet-4-5-thinking": { "name": "claude-sonnet-4-5-thinking" }, "gemini-3-flash": { "name": "gemini-3-flash" } } } } } EOF ``` **Subukan:** `opencode` > Gamitin ang `opencode run "your prompt" --model omniroute/claude-sonnet-4-5-thinking --variant high` > upang magpadala ng mga thinking variant. --- #### Cline (CLI o VS Code) **CLI mode:** ```bash mkdir -p ~/.cline/data && cat > ~/.cline/data/globalState.json << EOF { "apiProvider": "openai", "openAiBaseUrl": "http://localhost:20128/v1", "openAiApiKey": "sk-your-omniroute-key" } EOF ``` **VS Code mode:** Mga setting ng Cline extension โ†’ API Provider: `OpenAI Compatible` โ†’ Base URL: `http://localhost:20128/v1` O gamitin ang OmniRoute dashboard โ†’ **CLI Tools โ†’ Cline โ†’ Ilapat ang Config**. --- #### KiloCode (CLI o VS Code) **CLI mode:** ```bash kilocode --api-base http://localhost:20128/v1 --api-key sk-your-omniroute-key ``` **Mga setting ng VS Code:** ```json { "kilo-code.openAiBaseUrl": "http://localhost:20128/v1", "kilo-code.apiKey": "sk-your-omniroute-key" } ``` O gamitin ang OmniRoute dashboard โ†’ **CLI Tools โ†’ KiloCode โ†’ Ilapat ang Config**. --- #### Continue (VS Code Extension) I-edit ang `~/.continue/config.yaml`: ```yaml models: - name: OmniRoute provider: openai model: auto apiBase: http://localhost:20128/v1 apiKey: sk-your-omniroute-key default: true ``` I-restart ang VS Code pagkatapos mag-edit. --- #### VS Code Insiders (`chatLanguageModels.json`) Gamitin ito kapag naka-configure ang VS Code Insiders para sa mga custom endpoint model at gusto mong gumana ang OmniRoute nang walang custom header field. **Inirerekomendang lokasyon:** - Linux: `~/.config/Code - Insiders/User/chatLanguageModels.json` - Windows: `%APPDATA%/Code - Insiders/User/chatLanguageModels.json` **Halimbawa gamit ang naka-tokenize na OmniRoute alias:** ```json [ { "vendor": "customendpoint", "id": "auto", "name": "OmniRoute Auto", "family": "gpt-4", "version": "1.0.0", "url": "http://localhost:20128/api/v1/vscode/sk-your-omniroute-key/chat/completions", "modelsUrl": "http://localhost:20128/api/v1/vscode/sk-your-omniroute-key/models", "requestFormat": "openai-chat-completions", "contextWindow": 256000, "maxOutputTokens": 32768, "auth": { "type": "none" } } ] ``` **Mga tala:** - Palitan ang `sk-your-omniroute-key` ng API key na ginawa sa OmniRoute. - Dapat nakaturo ang field na `url` sa `/api/v1/vscode/{token}/chat/completions`. - Dapat nakaturo ang field na `modelsUrl` sa `/api/v1/vscode/{token}/models`. - Piliin ang karaniwang daloy na `/v1` + Bearer header kapag sinusuportahan ng client ang mga custom header. - Ang mga token na naka-embed sa URL ay fallback para sa compatibility at maaaring lumitaw sa mga log ng editor o history ng proxy. --- #### Kiro CLI (Amazon) ```bash # Mag-log in sa iyong AWS/Kiro account: kiro-cli login # Gumagamit ang CLI ng sarili nitong auth โ€” hindi kailangan ang OmniRoute bilang backend para mismo sa Kiro CLI. # Gamitin ang kiro-cli kasabay ng OmniRoute para sa iba pang mga tool. kiro-cli status ``` Para sa desktop app na **Kiro IDE**, gamitin ang MITM endpoint na inilalantad ng OmniRoute sa ilalim ng `/dashboard/cli-tools โ†’ Kiro`. --- ## 10. Internal na OmniRoute CLI Ang `omniroute` binary ay nagbibigay ng mga command para sa lifecycle ng server, pag-setup, diagnostics, at pamamahala ng provider. Entry point: `bin/omniroute.mjs`. ```bash omniroute # Simulan ang server (default na port 20128) omniroute setup # Interactive na setup wizard omniroute doctor # Suriin ang config, DB, mga port, at runtime omniroute providers list # Mga naka-configure na koneksyon sa provider omniroute providers test-all # Subukan ang bawat aktibong koneksyon omniroute reset-password # I-reset ang admin password omniroute logs # I-stream ang mga request log omniroute health # Detalyadong kalagayan (mga breaker, cache, memory) omniroute --version # Ipakita ang bersyon omniroute --help # Ipakita ang lahat ng command ``` ### Pag-setup at Pagsisimula ```bash omniroute setup # Interactive na setup wizard omniroute setup --non-interactive # CI/automation mode (nagbabasa ng mga env var + flag) omniroute setup --password '' # Direktang itakda ang admin password omniroute setup --add-provider \ --provider openai \ --api-key '' \ --test-provider # Magdagdag at sumubok ng provider sa isang hakbang ``` Mga kinikilalang environment variable para sa non-interactive na pag-setup: | Var | Layunin | | ------------------- | ----------------------------------------------------------------------------------- | | `OMNIROUTE_API_KEY` | API key ng provider (naka-bind sa `--api-key` sa pamamagitan ng Commander `.env()`) | | `DATA_DIR` | I-override ang data directory ng OmniRoute | Ang lahat ng iba pang non-interactive na input ay ipinapasa bilang mga flag, hindi bilang mga environment variable: `--password`, `--provider`, `--provider-name`, `--provider-base-url`, `--default-model` (tingnan ang mga opsyon ng `omniroute setup` sa itaas). ### Diagnostics ```bash omniroute doctor # Suriin ang config, DB, mga port, runtime, memory, at liveness omniroute doctor --json # JSON na nababasa ng machine omniroute doctor --no-liveness # Laktawan ang HTTP health probe omniroute doctor --host 0.0.0.0 # I-override ang liveness host omniroute doctor --liveness-url # I-override ang buong URL ng health endpoint ``` Isinasagawa ng doctor ang mga pagsusuring ito: `Config`, `Database`, `Storage/encryption`, `Port availability`, `Node runtime`, `Native binary` (better-sqlite3), `Memory`, at `Server liveness`. Nagtatapos ito nang may non-zero na exit code kung ang alinmang pagsusuri ay `fail`. ### Pamamahala ng Provider ```bash omniroute providers available # Catalog ng provider ng OmniRoute omniroute providers available --search openai # I-filter ang catalog ayon sa id/pangalan/alias/kategorya omniroute providers available --category api-key # I-filter ayon sa kategorya (api-key, oauth, free, ...) omniroute providers available --json # JSON na nababasa ng machine omniroute providers list # Mga naka-configure na koneksyon sa provider omniroute providers list --json omniroute providers test # Subukan ang isang naka-configure na koneksyon omniroute providers test-all # Subukan ang bawat aktibong koneksyon omniroute providers validate # Lokal lamang na structural validation omniroute providers add --credential-env PROVIDER_KEY omniroute providers import ./providers.json --dry-run --json omniroute providers auth # Umiiral na OAuth flow omniroute providers edit --default-model omniroute providers remove --yes ``` API-first ang `providers add/import/auth/edit/remove` at samakatuwid ay gumagana laban sa aktibong lokal o remote na context. Dapat gamitin ng credential input ang `--credential-stdin` o `--credential-env`; iniulat lamang ng `--dry-run --json` ang na-redact na presensya/hugis. Binabasa ng `providers available` ang catalog ng OmniRoute; pinananatili ng `providers list/test/test-all/validate` ang kanilang lokal na gawi sa SQLite at hindi nangangailangan na tumatakbo ang server. Para sa custom na OpenAI-compatible o Anthropic-compatible na node, ilakip ang mga credential sa node ID na ibinalik ng `omniroute nodes add`, gamit ang `omniroute keys add "$NODE_ID" --stdin`. Nangangailangan ito ng tumatakbong server at management authentication para sa aktibong context. Ginagamit ng CLI ang `POST /api/providers`, na nagva-validate sa node at kinokopya ang mga setting ng endpoint nito sa koneksyon. Ang nawawalang node, pagkabigo sa authorization, o hindi available na server ay nagbabalik ng error nang hindi gumagawa ng lokal na fallback credential. Itinatakda ng `nodes add --base-url` ang endpoint ng node; naiiba ito sa address ng server sa `OMNIROUTE_BASE_URL`. Para sa mga OpenAPI file, gamitin ang `omniroute openapi dump --format json --out ./openapi.json`; pinipili ng global na `--output` ang format ng display ng CLI, hindi ang pangalan ng destination file. ### Pag-recover at Pag-reset ```bash omniroute reset-password # I-reset ang admin password (maaari rin: omniroute-reset-password) omniroute reset-encrypted-columns # Magpakita ng babala + dry-run para sa pag-reset ng naka-encrypt na credential omniroute reset-encrypted-columns --force # Aktuwal na gawing null ang mga naka-encrypt na credential sa SQLite ``` ### Pag-export ng Credential (โš  hawakan nang maingat) ```bash omniroute auth export # Magpakita ng babala + confirmation gate โ€” walang access sa DB omniroute auth export --force # I-export ang NA-DECRYPT na credential ng LAHAT ng koneksyon sa stdout bilang JSON omniroute auth export --force --id # I-export lamang ang tumutugmang koneksyon omniroute auth export --force --format env # Mag-output ng mga linyang OMNIROUTE__= omniroute auth export --force --out creds.json # Sumulat sa isang file (ginawa gamit ang 0600 na mga permission) ``` Ang `auth export` ay **local-only** (direktang pagbabasa sa SQLite, walang HTTP route) at sadyang nagpi-print/nagsusulat ng mga **plaintext** na value ng `apiKey`/`accessToken`/`refreshToken`/`idToken` โ€” iyon ang feature, hindi isang bug. Walang binabasa mula sa database, at walang dine-decrypt, kung walang `--force`. Palaging nagpi-print sa stderr ng banner ng babala bago maglabas ng anumang plaintext. Kinakailangang naka-set ang `STORAGE_ENCRYPTION_KEY`. Ang field na hindi ma-decrypt (lumang key, sirang ciphertext) ay iniuulat bilang `DecryptFailed: true` sa halip na ihinto ang buong export o ilantad ang pinagmulan nitong error. ### Iba pang mga subcommand Ipinapalagay ng mga ito na may tumatakbong OmniRoute server, maliban kung may ibang nakasaad: ```bash omniroute status # Komprehensibong status ng runtime omniroute logs # I-stream ang mga request log (--json, --search, --follow) omniroute config list # Ipakita ang mga naka-configure na CLI tool omniroute provider list # Ilista ang mga available na provider (alias ng providers list) omniroute provider add # Irehistro ang OmniRoute bilang provider sa isang tool omniroute keys add | list | remove # Pamahalaan ang mga API key omniroute models [provider] # Ilista ang mga model (--json, --search) omniroute combo list | switch | create | delete omniroute backup # Gumawa ng snapshot ng config + DB omniroute restore # Mag-restore mula sa nakaraang snapshot omniroute health # Detalyadong health (breakers, cache, memory) omniroute quota # Paggamit sa quota ng provider omniroute cache # Status ng cache omniroute cache clear # I-clear ang mga semantic + signature cache omniroute mcp status | restart # Status / pag-restart ng MCP server omniroute a2a status | card # Status ng A2A server / agent card omniroute tunnel list | create | stop # Pamahalaan ang mga tunnel (cloudflare/tailscale/ngrok) omniroute env show | get | set # Suriin / i-set ang mga env var (pansamantala) omniroute test # Smoke test sa connectivity ng provider omniroute update # Tingnan kung may mga update omniroute completion # Bumuo ng shell completion ``` ### Mga karaniwang flag | Flag | Paglalarawan | | ------------------- | ---------------------------------------------------------- | | `--no-open` | Huwag awtomatikong buksan ang browser sa pagsisimula | | `--port ` | I-override ang API port (default 20128) | | `--mcp` | Patakbuhin bilang MCP server sa stdio (para sa mga IDE) | | `--non-interactive` | CI mode (walang mga prompt; nagbabasa mula sa env/flags) | | `--json` | Machine-readable na JSON output (doctor, providers, atbp.) | | `--help`, `-h` | Ipakita ang help na partikular sa command | | `--version`, `-v` | I-print ang naka-install na version | --- ## Mga Available na API Endpoint | Endpoint | Paglalarawan | Gamit Para Sa | | -------------------------- | ----------------------------------- | --------------------------------------------- | | `/v1/chat/completions` | Karaniwang chat (lahat ng provider) | Lahat ng makabagong tool | | `/v1/responses` | Responses API (format ng OpenAI) | Codex, mga agentic workflow | | `/v1/completions` | Lumang text completion | Mga mas lumang tool na gumagamit ng `prompt:` | | `/v1/embeddings` | Mga text embedding | RAG, paghahanap | | `/v1/images/generations` | Pagbuo ng larawan | GPT-Image, Flux, atbp. | | `/v1/audio/speech` | Text-to-speech | ElevenLabs, OpenAI TTS | | `/v1/audio/transcriptions` | Speech-to-text | Deepgram, AssemblyAI | Mga halimbawang handang i-paste na may tokenized na OmniRoute URL: ```txt Halimbawa ng token: sk-a3ab3c080beaee3a-69f4a4-070d71af Karaniwang OpenAI base: http://localhost:20128/v1 Mga model ng VS Code: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/models Chat ng VS Code: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/chat/completions Mga response ng VS Code: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/responses Mga tag ng Ollama: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/api/tags Chat ng Ollama: http://localhost:20128/api/v1/vscode/sk-a3ab3c080beaee3a-69f4a4-070d71af/api/chat ``` --- ## Pag-troubleshoot | Error | Sanhi | Ayos | | ------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------- | | `Connection refused` | Hindi tumatakbo ang OmniRoute | `omniroute serve` | | `401 Unauthorized` | Maling API key | Tingnan sa `/dashboard/api-manager` | | `No combo configured` | Walang aktibong routing combo | Mag-set up sa `/dashboard/combos` | | Ipinapakita ng CLI ang "not installed" | Wala sa PATH ang binary | Tingnan ang `which ` | | Ipinapakita ng dashboard ang "not detected" pagkatapos mag-install | Luma ang cache | I-click ang "โŸณ Refresh detection" sa dashboard | | Lumang link na `/dashboard/cli-tools` | Bookmark bago ang v3.8.6 | Awtomatikong nire-redirect sa `/dashboard/cli-code` (308) | | Lumang link na `/dashboard/agents` | Bookmark bago ang v3.8.6 | Awtomatikong nire-redirect sa `/dashboard/acp-agents` (308) | ## Pamahalaan ang patakaran ng inference key gamit ang OmniRoute CLI Gumamit ng authenticated na konteksto ng pamamahala (tingnan ang [Remote Mode](../guides/REMOTE-MODE.md)) upang siyasatin o i-update ang isang umiiral na inference key gamit ang ID nito: ```bash omniroute --output json keys policy show KEY_ID omniroute keys policy set KEY_ID --unrestricted omniroute --output json keys policy show KEY_ID ``` Ang `--unrestricted` ay alias para sa `--model-access-mode all`. Nililinis ng update ang allowlist ng model. Pinananatili nito ang mga scope, panuntunan sa koneksyon, naka-block na model, rate limit, at cost limit, kaya maaari pa ring tanggihan ng iba pang kontrol na iyon ang isang request. Ang tahasang `--allowed-models ""` ay pumipili rin ng `all`; pagsamahin ito sa `--model-access-mode restricted` upang mapanatili ang isang restricted na key na walang pinapayagang model. Ang hindi bakanteng listahang pinaghihiwalay ng kuwit ay pumipili ng `restricted` maliban kung tahasang tinukoy. Ang magkasalungat na `all` at hindi bakanteng allowlist ay tatanggihan bago magpadala ng request. Itinatakda ng `--rate-limit 30` ang mga request bawat minuto at pinananatili ang mga panuntunan para sa ibang time window. Pinapagana ng `--max-cost 5` ang pang-araw-araw na USD cap nang hindi binabago ang lingguhang cap; inaalis ng `--max-cost 0` ang pang-araw-araw na cap at pinananatili ang umiiral na usage-limit toggle at lingguhang cap. Hindi nagbabago ang mga policy field na hindi isinama. Binabasa muna ng mga pagbabago sa rate ang kasalukuyang patakaran; iwasan ang magkakasabay na pag-edit sa rate-limit array ng parehong key. Gumagamit ang mga policy command ng authenticated na `GET`/`PATCH /api/keys/{id}` at sumusunod sa aktibong konteksto at global na opsyong `--api-key`. Mga policy field lamang ang nilalaman ng JSON output, nang walang nakaimbak na key o masked na representasyon nito. Hindi maaaring mag-awtorisa ng mga pagbabago sa pamamahala ang isang credential na para lamang sa inference. Kapag may 401/403, kailangang suriin ang credential at konteksto ng pamamahala; hindi nito pinatutunayan na may lokal na pagkabigo sa CLI token o salt. Tingnan ang [CLI Token](../security/CLI_TOKEN.md) para sa hiwalay na kontrata ng lokal na authentication.