The Windows and Linux desktop packages are unsigned tester artifacts. Install the matching Codex Router version before running them. macOS is excluded until its app can be Developer ID signed and notarized.
What's Changed
- feat: add safe generic OpenAI-compatible providers by @duolahypercho in #496
- Fix Homebrew Core source installation by @duolahypercho in #509
- fix: complete provider API-key pools after Windows repair by @duolahypercho in #507
- Fix model controls overflow and Hy4 branding by @duolahypercho in #511
- fix: preserve custom per-model endpoint routing by @PracticalSwan in #510
- fix: keep sub-agent provider identity in fallback by @jepgambardella in #410
- Add HY4 Preview routes and provider branding by @duolahypercho in #518
- Improve Control Center loading responsiveness by @duolahypercho in #517
- feat: add per-model Perplexity search sidecar by @duolahypercho in #515
- Add local GLM-5.3 and GLM-5.3-Flash models by @duolahypercho in #520
- Fix OpenCode route context windows by @duolahypercho in #521
- fix: restore daily token usage and dashboard ordering by @duolahypercho in #519
- fix: preserve native custom tool streams by @PracticalSwan in #523
- fix: label failover model counts accurately by @PracticalSwan in #525
- fix: report native vision engines in doctor by @PracticalSwan in #526
- fix: keep managed multi-agent config idempotent by @PracticalSwan in #527
- test: wait for Codex app-server teardown by @PracticalSwan in #528
- fix: warn on stale native Codex catalog by @PracticalSwan in #529
- feat: add caller capability rotation by @PracticalSwan in #516
- fix(macOS): keep the tray panel anchored to the status item by @slavakurilyak in #530
- fix: keep Codex router credentials out of config by @PracticalSwan in #531
- feat: add capability-gated per-model embeddings by @duolahypercho in #533
- feat: add capability-gated embeddings by @jepgambardella in #422
- fix: support authenticated Responses WebSockets by @duolahypercho in #532
- test: remove relay cache expiry timing race by @duolahypercho in #534
- test: frame installer wrapper calls safely by @duolahypercho in #535
- Document Command Code plan fallback and harness boundary by @duolahypercho in #536
- Fix Command Code MCP namespace restoration by @duolahypercho in #537
- Fix strict generic provider search capability leaks by @duolahypercho in #540
- Suppress reviewed CodeQL spawn false positives by @duolahypercho in #545
- fix: strip unsupported Console Go search options by @MeltingMadness in #543
- chore(deps): bump Homebrew/actions/setup-homebrew from 2026.08.24.1 to 2026.08.31.1 by @dependabot[bot] in #549
- fix: keep RTK shaping inside routed compaction by @duolahypercho in #556
- test: remove the wrapper log race in the Node wrapper check by @duolahypercho in #561
- Fix Homebrew Core post-install serialization by @duolahypercho in #562
- fix: cool down a provider that named its reset in the body by @duolahypercho in #559
- docs: add the Astro documentation site by @duolahypercho in #560
- fix: preserve completed Responses WebSocket results by @PracticalSwan in #551
- fix: preserve zero-argument wrapper commands by @PracticalSwan in #553
- fix: preserve orphan Codex app tool outputs during routed replay by @B1gM8c in #550
- Fix Muse recursive tool schemas on OpenCode Go by @duolahypercho in #547
- feat: add routed client harness integrations by @duolahypercho in #555
- feat(openclaw): add routed client target by @duolahypercho in #557
- Add Ollama Cloud GLM-5.3 routes by @duolahypercho in #538
- Repair operator-owned Antigravity OAuth integration by @duolahypercho in #542
- fix: decompress request bodies off the event loop and refuse oversize zstd frames early by @duolahypercho in #564
- feat: add safe native ChatGPT account switching (rebased #434) by @duolahypercho in #563
- fix(grok-oauth): suppress repeated progress after stream abort by @Leshabeats in #567
- fix: name the Antigravity allowlist failure instead of reporting a bare 403 by @duolahypercho in #572
- fix: publish routed models in vendor bands so the Codex picker groups them by @duolahypercho in #569
- fix: explain a Windows scheduled-task launch that cannot read its own checkout by @duolahypercho in #570
- fix: hide the console windows Windows background PowerShell helpers create by @duolahypercho in #571
- fix: honor a Retry-After that names a date instead of seconds by @c8dhjp4tyv-bit in #573
- Surface Antigravity 403 SERVICE_DISABLED body and document allowlist requirement by @duolahypercho in #578
- fix: grant Users read access to checkout so Limited task can start by @duolahypercho in #577
- Pin Gemini 3.8 Flash, Muse Spark 1.3, and Claude Fable 5.1 by @duolahypercho in #580
- ci: fix CodeQL runner death by excluding Swift from analysis by @duolahypercho in #576
- Fix namespace restoration for Qwen Plan collaboration calls (#568) by @duolahypercho in #579
- fix: keep a separately billed variant out of its parent's cooldown by @duolahypercho in #584
- Pin OpenCode Zen free Muse Spark 1.3 route by @duolahypercho in #586
- Fix verified search-history replay for routed models by @B1gM8c in #590
- fix: move Cursor-managed composer models onto a routed alias on enable by @duolahypercho in #587
- fix: drop advanced CodeQL workflow that conflicts with default setup by @duolahypercho in #592
- fix: stop Muse Spark 1.3 from copying compaction prompt examples by @duolahypercho in #593
- fix: strip empty tools/tool_choice for all routes, not only qwen38-community by @duolahypercho in #594
- fix: correct Muse Spark metadata, effort labels, and defaults by @duolahypercho in #595
- fix(grok-oauth): expose reasoning summaries in Codex by @duolahypercho in #597
- fix: treat refused Codex account reads as empty instead of failing the panel by @duolahypercho in #596
- fix: import execFileSync for Cursor picker refresh by @duolahypercho in #598
- Group OpenCode Free Muse Spark routes with paid family; flatten recursive tool schemas by @duolahypercho in #599
- fix: advertise image input for OpenCode Free Muse Spark by @duolahypercho in #606
- fix(grok-oauth): terminate streamed gateway failures by @Leshabeats in #602
- fix: allow ChatGPT account switches without disabling the router by @duolahypercho in #604
- fix: keep Control Center in Dock after close by @duolahypercho in #603
- chore(deps-dev): bump fast-uri from 3.1.5 to 3.1.7 in /apps/control-center in the npm_and_yarn group across 1 directory by @dependabot[bot] in #582
- fix: harden routed Responses egress — double-render on text+tool turns, and inline reasoning-tag leaks by @JDLondon7 in #600
- fix: run macOS KeepAlive as launchd Standard, not Adaptive by @Leshabeats in #609
- fix(grok-oauth): keep post-tool repair streams live by @Leshabeats in #610
- fix(opencode): send x-opencode-session on outbound hops by @duolahypercho in #612
- feat(i18n): add Spanish (es) locale by @jhancagonzalez in #585
- fix(namespace-relay): restore dotted tool delimiters (#611) by @duolahypercho in #617
- fix(windows): relaunch router via minute heartbeat trigger (#581) by @duolahypercho in #618
- fix: prune unconfigured providers from enabled-providers.json (#589) by @duolahypercho in #620
- fix(tray): stop usage layout spin from body-side cache writes (#601) by @duolahypercho in #619
- fix: meter tok/s on non-reasoning output tokens by @duolahypercho in #625
- Never require uninstall to see new native models (GPT-6 Astra, GPT-7, o5, etc.) by @duolahypercho in #624
- fix: allow larger Codex request bodies by @PracticalSwan in #615
- fix(macos): select full Xcode for tray builds by @poietor in #607
- fix: detect same-version Codex runtime replacement by @PracticalSwan in #627
- fix: keep routed subagents on parent model by @B1gM8c in #629
- fix: refresh native account catalog directly by @duolahypercho in #635
- fix(windows): preserve explicit service stop with heartbeat by @PracticalSwan in #630
- Fix routed subagents crossing provider billing boundaries by @B1gM8c in #632
- fix(tray): read health natively instead of spawning control every second by @codejunkie99 in #636
- test: make Control Center locale deterministic by @tanakaduxi in #631
- test(windows): isolate doctor routing test from live scheduler by @PracticalSwan in #633
- fix(commandcode): bound tool names and repair recursive schemas by @duolahypercho in #643
- fix(dashboard): total 24h traffic from every provider, not a capped sample by @duolahypercho in #644
- feat: add Muse Spark OpenCode free model by @kimparrot in #634
- fix: repair routed agents on startup by @PracticalSwan in #638
- fix(dashboard): cover the full rolling 24h window by @PracticalSwan in #651
- chore(deps): bump Homebrew/actions/setup-homebrew from 2026.08.31.1 to 2026.09.07.1 by @dependabot[bot] in #656
- chore(deps): bump undici from 8.10.0 to 8.10.2 by @dependabot[bot] in #657
- fix(opencode): replay verified Muse search history by @PracticalSwan in #658
- fix: retry marked routed transport failures once by @PracticalSwan in #659
- fix: keep injected interrupt call ids unique across turns by @PracticalSwan in #660
- fix(commandcode): align forced tool choice with bounded aliases by @PracticalSwan in #650
- fix: preserve native subagent relay auth and quota failures by @PracticalSwan in #637
- fix: read and label usage days in the UTC day space they are written in by @duolahypercho in #647
- fix: keep the account answer that arrived when the other never does by @duolahypercho in #648
- fix(widget): publish router-filled days with their provenance, not as zero by @duolahypercho in #649
- fix(tray): build the settings surface on demand, not on every open by @duolahypercho in #661
- perf(control): probe every target at once instead of one after another by @duolahypercho in #665
- fix(catalog): stop the router freezing the picker at a pre-upgrade native list by @duolahypercho in #666
- Remove the ChatGPT Web provider and its direct Responses path by @duolahypercho in #655
- chore(deps-dev): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #668
- test(doctor): isolate fixture doctor runs from the machine's real service by @duolahypercho in #677
- fix(router): replay web_search_call history as text on chat-wire routes by @duolahypercho in #676
- chore(deps-dev): bump js-yaml from 4.3.1 to 4.3.2 in /apps/control-center in the npm_and_yarn group across 1 directory by @dependabot[bot] in #669
- fix: read active Codex usage from the live login home by @duolahypercho in #642
- fix(tray): size the Standard menu-bar slot to its content by @duolahypercho in #675
- feat(deepseek): add DeepSeek V4.1 Flash routes alongside V4 by @duolahypercho in #682
- fix(deepseek): preserve native Responses streaming and reasoning replay by @asifnawaz in #681
- refactor(deepseek): rename direct V4.1 Flash slug to deepseek/deepseek-v4.1-flash by @duolahypercho in #685
- feat(grok): consolidate runtime reliability, patch compatibility and native Fast by @Leshabeats in #678
- fix: restore client-declared native tool identities by @asifnawaz in #683
- fix(control-center): keep loading when Codex usage probe exits by @slavakurilyak in #662
- fix: allow large DeepSeek reasoning after liveness release by @duolahypercho in #686
- fix: preserve MCP calls after large response preludes by @asifnawaz in #690
- fix: restore pre-flattened call identities on Responses-native routes by @duolahypercho in #694
- fix: count reasoning tokens in tok/s only when generated inside the timed window by @duolahypercho in #695
- fix: keep Grok compaction on Grok transport bounds and meter delivered failures by @duolahypercho in #688
- fix(router): omit foreign item IDs when replaying history to OpenAI by @duolahypercho in #697
- test: remove timer race from Grok post-reasoning bound tests by @duolahypercho in #700
- fix: label routed assistant messages with Codex message phase by @duolahypercho in #702
- fix: relay LiteLLM custom-tool arguments that skip the content wrapper by @duolahypercho in #705
- Add Muse Spark 1.3 (Meta, Command Code) and OpenRouter DeepSeek V4.1 Flash routes by @duolahypercho in #696
- fix: call partialUsage when both Codex account reads answer by @duolahypercho in #698
- fix: refuse provider-prefixed models the router has no route for (fixes #689) by @duolahypercho in #707
- test: wait for the API forwarder before direct DeepSeek turns by @duolahypercho in #704
- fix: keep routed final answers labelled and correct message-phase replay docs by @duolahypercho in #706
- test(grok): keep the Grok cancellation check strict and time the close by @duolahypercho in #709
- feat(ollama-cloud): route DeepSeek V4.1 Flash by @duolahypercho in #711
- test: stop the Electron control center suite from starving itself by @duolahypercho in #713
- test: wait for the Grok forwarder's stderr marker instead of snapshotting it by @duolahypercho in #712
- fix: declare implied tool-schema types for Moonshot routes by @duolahypercho in #723
- fix: close three review defects in the routed-harness publisher by @duolahypercho in #721
- chore: merge CHANGELOG.md bullets instead of conflicting on them by @duolahypercho in #733
- fix: make signed ChatGPT routing rollback-safe by @B1gM8c in #699
- fix: key harvested quota headers by cooldown scope by @c8dhjp4tyv-bit in #728
- feat(grok): present Grok-native file tools and restore Codex execution by @Leshabeats in #701
- fix: admit LiteLLM's echoed prelude in the DeepSeek stream repairs by @duolahypercho in #710
- fix: keep the whitespace an untagged answer starts with by @c8dhjp4tyv-bit in #729
- fix: show Chat Completions reasoning in Codex by @duolahypercho in #708
- fix: keep Hy4 turns alive — replay reasoning natively, recover leaked tool calls by @duolahypercho in #715
- fix: replay reasoning natively for thinking models behind Chat Completions resellers by @duolahypercho in #727
- fix: gate leaked tool-call recovery to Hy4, and make its capture linear by @duolahypercho in #741
- fix(free): free Muse Spark 1.3 keeps web-search history by @antoniofern in #732
- fix(gemini): safely repair dangling nested tool definitions by @gowrath in #720
- Publish routed models into five more coding clients, and keep them current by @duolahypercho in #714
- fix: keep the type a broken $ref cycle was declaring on Moonshot routes by @c8dhjp4tyv-bit in #738
- fix: fail over on zai weekly-window and lapsed-package quota refusals by @chrisl10 in #718
- fix(tray): explain why the login-free and signed-routing switches are disabled by @chrisl10 in #717
- fix: keep an explicit subagent model instead of pinning it to the routed parent by @Corpocore in #742
- fix: locate the checkout through symlinks in every bin/ command by @inchane22 in #730
- chore: remove the unreachable provider circuit-breaker subsystem by @duolahypercho in #747
- fix: strip Hy4's nonce-suffixed reasoning delimiters from the answer (#654) by @duolahypercho in #748
- fix: preserve stored reasoning while removing duplicate references by @B1gM8c in #716
- docs(site): publish the developer documentation with Starlight by @duolahypercho in #752
- Add v2 agent application: deepseek/deepseek-v4.1-flash (draft) by @kouji648-hub in #745
- Set default-tier model aliases in Claude Code launcher by @Hunselvm in #743
- docs(skills): say that create_thread takes a model, because it does by @duolahypercho in #753
- fix(zai): GLM-5.3-Flash reads images natively on the Coding Plan, API and OpenRouter routes by @duolahypercho in #765
- fix(support-bundle): report gitCommit only for the router's own checkout by @duolahypercho in #763
- fix(win): verify the service launchers exist before reporting an install by @duolahypercho in #762
- fix(windows): accept control's tray verbs in codex-router.ps1 by @duolahypercho in #754
- ci: cache the binaries electron-builder downloads by @c8dhjp4tyv-bit in #759
- fix(cursor): preflight and async-inflate the last synchronous zstd path by @duolahypercho in #764
- fix: keep a slow-starting service instead of rolling it back (#760) by @duolahypercho in #767
- fix: drop past reasoning on off-contract Chat routes (#755) by @duolahypercho in #768
- Give the Harness page a Route toggle that can unpublish a client by @duolahypercho in #769
- chore: release v0.6.0 by @duolahypercho in #771
New Contributors
- @MeltingMadness made their first contribution in #543
- @B1gM8c made their first contribution in #550
- @Leshabeats made their first contribution in #567
- @c8dhjp4tyv-bit made their first contribution in #573
- @JDLondon7 made their first contribution in #600
- @jhancagonzalez made their first contribution in #585
- @poietor made their first contribution in #607
- @codejunkie99 made their first contribution in #636
- @tanakaduxi made their first contribution in #631
- @kimparrot made their first contribution in #634
- @asifnawaz made their first contribution in #681
- @antoniofern made their first contribution in #732
- @gowrath made their first contribution in #720
- @chrisl10 made their first contribution in #718
- @Corpocore made their first contribution in #742
- @inchane22 made their first contribution in #730
- @kouji648-hub made their first contribution in #745
- @Hunselvm made their first contribution in #743
Full Changelog: v0.5.1...v0.6.0