์ฝ˜ํ…์ธ ๋กœ ์ด๋™

์–ธ์–ด ์„ ํƒ

ํ˜„์žฌ ์–ธ์–ด: ํ•œ๊ตญ์–ด

CLI model catalog and manual metadata

omniroute models reads the selected serverโ€™s public model catalog first, including its custom and synchronized entries. --output json and --output jsonl return all matching rows, without a table truncation message. Interactive tables show at most 50 rows. JSON preserves public context limits, modalities, capabilities, model source when supplied by the server, and API-format metadata; credentials and compatibility headers are not output. A legacy /api/models fallback is used only when the public endpoint returns HTTP 404, 405 or 501, never after an authentication failure. omniroute completion refresh uses that same catalog. A failed model-catalog request returns a nonzero exit code and preserves the previous completion cache. Bash, Zsh and Fish completion scripts advertise the manual model subcommands.

These operations use the existing authenticated /api/provider-models management API. They honor the same global --context and --base-url selection as other CLI commands. Use the canonical provider ID and the providerโ€™s model ID separately; a model ID containing slashes is valid. Use a configured management context rather than putting credentials into command arguments.

ํ„ฐ๋ฏธ๋„ ์ฐฝ
omniroute models openai --output json
omniroute models manual openai
omniroute models add openai my-model --name "My model" --context-window 32768 --dry-run
omniroute models add openai my-model --name "My model" --context-window 32768
omniroute models edit openai my-model --context-window 65536
omniroute models edit openai my-model --clear-context-window
omniroute models remove openai my-model --dry-run
omniroute models remove openai my-model --yes

Examples describe syntax; replace provider/model IDs with entries belonging to your server. The add operation does not create a provider connection.

  • add refuses an existing custom entry. Optional --max-output-tokens sets the output limit at creation; --api-format sets the modelโ€™s API format and its matching endpoint metadata, such as embeddings rather than chat.
  • edit requires an existing manual entry. Its context limit uses the backendโ€™s independent manual context override; clearing it removes that override, not the original input limit or synchronized metadata.
  • remove requires --yes, except with --dry-run. It requests resetOverride=true, preserving a synchronized entry with the same ID. Bulk deletion is not exposed.
  • --dry-run performs the authenticated preflight read but no write or inference.
  • Every actual mutation reads the manual catalog back. persistenceVerified: true means the requested metadata was observed after the write; it does not mean the model can generate text or call tools. inferenceValidation is always not-run.
  • A readback failure returns a nonzero exit code. The write may already have taken effect; inspect the server before retrying. Concurrent writers are not serialized by this CLI, and the existing API does not provide a compare-and-swap transaction.

Manual entries are unverified. There is no --validate flag and these commands do not issue inference requests or execute tools. A future opt-in validation flow must separate inference credentials from management authentication and establish which exact provider connection produced all three proofs: generation, a nonce-bound synthetic tool call, and continuation after a synthetic tool result. No real tool execution is needed for those proofs.

The existing x-omniroute-connection pin alone is insufficient as a proof receipt: credential selection can intentionally release a pin for cooldown, quota or excluded-account cases, and session affinity participates in selection. See src/sse/services/auth.ts and the forcedConnectionId handling in src/sse/handlers/chat.ts. Before implementing Test & Add, decide a strict-pin or verifiable connection-receipt contract. Tests must then prove no persistence after any failed, truncated, timed-out or wrong-connection response. This is a separate backend contract decision, not a promise made by manual CRUD.


undefined (a58000c7685f)

HagiCode

HagiCode๋Š” ์—์ด์ „ํŠธ ์ฝ”๋”ฉ ์ž‘์—… ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ํ’๋ถ€ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ UI ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ๊ณ„ํš ์ˆ˜๋ฆฝ, ์—์ด์ „ํŠธ ์‹คํ–‰, ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๊ฐœ๋ฐœ์„ ๋” ํฅ๋ฏธ๋กœ์šด ๊ฒฝํ—˜์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํ’๋ถ€ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ UI ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ๊ณ„ํš๋ถ€ํ„ฐ ํ”„๋กœ์ ํŠธ ์ž‘์—…๊นŒ์ง€ ์‰ฝ๊ฒŒ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HagiCode ๋ฐฉ๋ฌธ๋ฌธ์„œ ์ฝ๊ธฐ
  • ์Šค๋งˆํŠธOpenSpec ์›Œํฌํ”Œ๋กœ๋Š” ์˜๋„๋ฅผ ์ œ์•ˆ, ์„ค๊ณ„, ์ž‘์—…์„ ๊ฑฐ์ณ ๋ฐฐํฌ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • ํšจ์œจ์ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์‹คํ–‰์œผ๋กœ ์กฐ์‚ฌ, ๊ตฌํ˜„, ๊ฒ€ํ† ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ์™€ ์ต์ˆ™ํ•œ Agent CLI๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ํฅ๋ฏธ๋กœ์šดํ’๋ถ€ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ UI ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ๊ณ„ํš ์ˆ˜๋ฆฝ, ์—์ด์ „ํŠธ ์‹คํ–‰, ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows์šฉ ๋‹ค์šด๋กœ๋“œ

Microsoft Store์—์„œ ๋ฐ›๊ธฐ๋ชจ๋“  ๋‹ค์šด๋กœ๋“œ

์•„์ด๋””์–ด๋ฅผ ์‹ค์ œ๋กœ ๋ฐฐํฌ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ.

HagiCode๋Š” ์—์ด์ „ํŠธ ์ฝ”๋”ฉ ์ž‘์—… ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. OpenSpec ์›Œํฌํ”Œ๋กœ๋กœ ๋ณ€๊ฒฝ์„ ๊ณ„ํšํ•˜๊ณ , ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์‹คํ–‰์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ, Hero Scenario๋กœ ๊ธด ์ž‘์—…์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ•œ๋ˆˆ์— ๋ณด์—ฌ ์•„์ด๋””์–ด๋ฅผ ์‹ค์ œ๋กœ ๋ฐฐํฌ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์Šค๋งˆํŠธ
OpenSpec ์›Œํฌํ”Œ๋กœ๋Š” ์˜๋„๋ฅผ ์ œ์•ˆ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
ํšจ์œจ์ 
๋‹ค์ค‘ ์—์ด์ „ํŠธ ์‹คํ–‰์œผ๋กœ ์กฐ์‚ฌ, ๊ตฌํ˜„, ๊ฒ€ํ† ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์ฆ๊ฑฐ์šด
ํŽธ๋ฆฌํ•œ UI ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ๊ณ„ํš, ์—์ด์ „ํŠธ ์‹คํ–‰, ํ”„๋กœ์ ํŠธ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.