Changelog
Это содержимое пока не доступно на вашем языке.
1.120.1 — 2026-11-13
Section titled “1.120.1 — 2026-11-13”Four route phrases now name the model they spell, and a Codex pin to GPT-5.6 Sol may run at max.
- "mimo pro" / «мимо про» names MiMo v2.6 Pro through OpenRouter (
ormimopro, paid, ≈ $0.06 a run), as "mimo 2.6 pro" does since 1.119.3. In 1.120.0 "only mimo pro" started the older MiMo v2.5 Pro (mimo25pro) and «только мимо про» the free MiMo v2.6 Flash. - "mimo flash" / «мимо флеш» names the MiMo v2.6 Flash voice of the cheap panel: a new group,
mimoflash, holds exactly that voice's channels, so the run takes the same route as the cheap panel (opencode's free copy where opencode runs). "mimo 2.6 flash" and «мимо 2.6 флеш» too. In 1.120.0 «только мимо флеш» started the paid mimo CLI copy (mimov26flash), and "only mimo flash" and "only mimo 2.6 flash" were refused. - "glm 5.3 flash" / «глм 5.3 флеш» names GLM 5.3 Flash (
ocglm53flashfree, free, through opencode; also "glm-5.3-flash", "glm flash", «глм флеш»). In 1.120.0 it started the paid GLM 5.3 (orglm53); "glm 5.3" alone still names GLM 5.3. - "codex cli" / «кодекс кли» names Codex alone. In 1.120.0 the word "cli" there also named the group of CLI agents, so "only codex cli" ran Codex plus every CLI agent of the cheap panel.
- More words are checked. A word after a model's name that the registry uses to spell another model now stops the route, as a word after a group word does since 1.119.3, and Cyrillic words after a group word or a channel's name are checked too. So "only glm-5.3 flash" (GLM 5.3 in 1.120.0) and «только квен про» (Qwen 3.8 Max in 1.120.0) are refused; the Latin "only qwen pro" still runs Qwen 3.8 Max.
- Codex effort ladders follow Codex's own model list. GPT-5.6 Sol offers low to max (the registry stopped at xhigh), so "only codex 5.6 sol" with
"effort": "max"in your settings now sends max where 1.120.0 sent xhigh; with the kit's default effort (xhigh) nothing changes. GPT-6 Sol's list lostnone. Codex'sultra(max plus sub-agents Codex starts by itself) is in no list and is never sent. GPT-5.5 and GPT-5.4 are no longer in Codex's list; their pins are kept, unmeasured. - New selftest suite
suite_r178_route_residuals(24 checks).
1.120.0 — 2026-11-13
Section titled “1.120.0 — 2026-11-13”Both Muse Spark Contributor voices run in the cheap panel, on the OpenCode Go plan where opencode has it and through OpenRouter elsewhere; without agy no paid Gemini 3.8 Flash starts in its place; an OpenCode Go refusal names what the workspace owner must switch on.
- Two Spark voices. Muse Spark 1.2 Contributor and 1.3 Contributor, each on the first route the machine has: the OpenCode Go plan (
ocspark12go,ocspark13go), then a Meta key (1.2 only,spark12cont), then OpenRouter (orspark12cont,orspark13cont; $0.10 / $0.20 per 1M). The cheap panel has 7 voices, «CLI only» 5, the standard panel 13. The README overlay that switchedocspark12goon is no longer needed. - The Go plan is checked, not assumed. An
opencode-go/channel is ready only whereopencode modelslists its model, so opencode without the Go plan no longer takes the Spark voices away from OpenRouter. In «CLI only» such a machine still starts the two Go channels; the plan now says they will fail and how to leave them out (--skip ocspark12go ocspark13go). - No paid Gemini 3.8 Flash without agy.
orgemini38flash(OpenRouter) starts only when named; up to 1.119.3 it took agy's seat by itself. - The OpenCode Go Privacy switch. A Go workspace refuses both Contributor models until an owner or admin turns on «Allow paid endpoints that train on request data» in the OpenCode Console, Settings › Privacy. The refusal is diagnosed with that action, and
REPORT.md(the channel table) andHANDOFF.mdprint it opposite the refused Spark; DeepSeek's «requires Global regions» refusal on Go is diagnosed the same way. README and INSTALL carry the step. - New selftest suites
suite_r179_kit_defaultsandsuite_r179_i3_go_owner_action.
1.119.3 — 2026-11-09
Section titled “1.119.3 — 2026-11-09”A route that named MiMo v2.6 Pro started the retired Gemini 3.1 Pro instead. A model word in a route now names only the model it spells.
- "pro" and "flash" alone name nothing. Gemini 3.1 Pro (
agy31pro) answered to the bare word "pro" and Gemini 3.6 Flash (agy36flash) to the bare word "flash". A model's own name counts as naming its channel directly, which starts a channel even when it is off or starts only by name. So in 1.119.2 "cheap panel, including codex and mimo 2.6 pro" ran Gemini 3.1 Pro (off since 1.115.0: agy no longer offers its model on our account) and no MiMo Pro; "only qwen pro" and "only gemini 4 pro" added Gemini 3.1 Pro; "only mimo 2.6 flash" and "only glm 5.3 flash" added Gemini 3.6 Flash (off). Both channels keep their full names ("agy31pro", "gemini-3.1-pro", "3.1 pro"; "agy36flash", "gemini-3.6-flash", "3.6 flash"). - "mimo 2.6 pro" names MiMo v2.6 Pro through OpenRouter (
ormimopro, paid, ≈ $0.06 a run), as «мимо 2.6 про» already did; "mimo v2.6 pro" and "mimo-v2.6-pro" too. "add mimo 2.6 pro" adds it to the cheap panel, "only mimo 2.6 pro" runs it alone. "mimocli", «мимо кли» and "mimo cli v2.6" still name the same model through the mimo CLI (mimov26pro, where that CLI is installed). Before, "mimo" was only a group word, and a group word never starts a channel that is off by default, so of the whole group only the free MiMo v2.6 Flash ran. - Words after a group word are checked. A model-looking word after a group word ("mimo", "gemini", ...) that none of the group's channels answers to now stops the route and lists the names the group's channels do answer to, so "only mimo 2.6 flash" and "only gemini 4 pro" are refused. Before, only the words after a channel's own name were checked: words after a group word were dropped and the group's default members ran.
- New selftest suite
suite_r177_route_model_words(21 checks), with a registry census: a one-word model name of a channel that is off or starts only by name may not be a word of another channel's name, label or model.
Known and unchanged: "qwen pro" runs Qwen 3.8 Max (a short word after a channel's name is let through on purpose), "glm 5.3 flash" runs GLM 5.3 (a word after a model's name is not checked), and Cyrillic words after a group word are not checked.
1.119.2 — 2026-11-08
Section titled “1.119.2 — 2026-11-08”Two fixes on the default path. A Grok tool may now run up to 300 s before the inner watchdog stops the run (90 s cut working web searches), and a free API voice whose request gets no response headers sends that request once more inside the same call (DeepSeek V4.1 Flash on NVIDIA's free endpoint lost 10 of its last 24 reviews that way).
- Grok's inner watchdog waits 300 s for every tool (was 90 s since 1.117.0). Measured on the author's machine: 64 Grok web searches, median 58.7 s, the longest 172.3 s, 5 past 90 s; in a 2026-11-09 round the 90 s limit fired as a web search completed (94.6 s) and the whole review was lost under «stayed pending».
GROK_TOOL_SILENCEis 300 s (ORCH_GROK_TOOL_SILENCEstill overrides) andGROK_TOOL_SILENCE_BY_TOOL(web_search300 s) is a per-tool floor the default never lowers. A tool that completed as the watchdog fired is now recorded as such (watchdog_raced: true, «completed as the watchdog fired», its owndiagnose()entry) instead of as a hang. Suitesuite_r175_grok_tool_limits. - A free API voice re-sends one request that got no response headers. When the headers of a request do not arrive within 300 s, the same request is sent once more inside the call; the conversation grows only after a successful round, so the copy carries the pages already read. Once per call and only on channels whose
costisfree: a paid request with no headers may still be queued and billed upstream, so paid channels never re-send. Deadline and stall cuts are never re-sent. The record gainsheaders_resent(after_rounds,at_s,answered) andheaders_waits_s,retriescounts the re-send, anddiagnose()gains two entries forNO RESPONSE HEADERS within(plain, and after the re-send). A copy that fails too costs at most 300 s more, and 1.119.0's free-voice rule then applies unchanged (silence: no retry, no fallback). Measured: DeepSeek V4.1 Flash on NVIDIA's free endpoint, 24 rounds since 2026-10-31, 11 answered, 10 ended on «no response headers within 300 s» (6 on the first request). A live probe on 2026-11-09 got HTTP 504 from NVIDIA's own gateway after ~302 s for a small and a large request alike, so a longer limit would not help, and in such an hour the copy fails too: the re-send rescues a single dropped request;headers_resent[].answeredin the records shows how often. Suitesuite_r176_headers_resend.
1.119.1 — 2026-11-02
Section titled “1.119.1 — 2026-11-02”Latent dispatcher-shape fix found by the first live chat round. routing.initial_plan now carries the chat seat's driver field from the registry into the plan slot — otherwise the dispatcher could not find the driver script for a seat kind, and orchestrate.py --panel chat --chat claude on an enabled chat seat failed with R173_SEAT_DRIVER_MISSING before subprocess.run. Nothing user-visible changed: chat seats still ship enabled: false in the kit and are enabled only through the author's overlay; the fix matters when an operator enables a seat. No chat slot is spent on the failed path (the resolver raises before any subprocess runs), so no live cost ever rode this bug.
- routing.initial_plan copies
driverinto the plan slot (one line). The plan slot's field whitelist did not includedriver, which R173 И-3 added tochannels.jsonfor chat seat kinds. The R173 И-3 suite exercisedcall_chatseat()directly, bypassingmain()'sinitial_plan, so the plan slot's missing field was not caught at the time. One new suite block insuite_r173_i3_seats_topology(e) iterates overclaudeaiseat/cldesktopseat/cgptseat/cgptdeskseatand checks thatinitial_plan(reg)carries each one'sdriverinto the plan slot. - Live-verified on 2026-11-02 by a cheap chat round on Haiku 5.5: driver resolved, subprocess ran, 3,384-byte answer in 42.6 s with
chat_slot_spent: True, planted false claim refuted with the correct release date and a vendor citation. Selftest in SOURCE after the fix: 2521/2521 PASS (R173 И-4b's 4 added to 1.119.0's 2517).
1.119.0 — 2026-11-02
Section titled “1.119.0 — 2026-11-02”Three source-tree features bundle together. A free voice that fails inside its 25-minute window now retries or falls back inside the same round, not after it. Chat panel seats scaffold ships off by default (overlay flips them on). Overlay channels can carry a valid_through date that flips them off automatically.
- Free-voice IN-ROUND retry+fallback rule (R172 И-2; operator's rule 2026-10-31).
orchestrate.mainusesconcurrent.futures.wait(FIRST_COMPLETED)with a nested in-round pool; a free primary's failure is classified by_classify_free_failure(r, elapsed_s, 1500 s)intopast_window/silence/transient+ delay /quota/other. A known transient (429, 5xx) retries the primary once in-round with a 60 s / 30 s delay bounded by the remaining window; a known refusal (provider.quota,provider.free-limit) or an unknown-but-real failure dispatches the fallback at once in-round. Silence (clean exit, no error, no answer) and failure past the 25-minute window end the voice without a retry and without a fallback — the operator's rule verbatim «silence or past 25 min: no fallback». The markerfree_inroundon the primary record blocks the after-round AUTO-RETRY and the after-round fallback from re-firing. Paid and subscription voices keep the after-the-round fallback, unchanged. Env overrides for CI and probe worlds:ORCH_FREE_INROUND_WINDOW(window seconds),ORCH_FREE_INROUND_RETRY_429(429 delay seconds),ORCH_FREE_INROUND_RETRY_5XX(5xx delay seconds). The rule was live-verified on a cheap panel on 2026-11-02: 8/8 behaviours matched the expected branch, 0/4 false positives on paid voices. Suite:suite_r172_i2_free_inround(29 checks a–k). - Chat panel seats scaffold (R173 И-3). Four new channels —
claudeaiseat(chatseat, CDP),cldesktopseat(uiaseat, UI Automation),cgptseat(chatseat),cgptdeskseat(uiaseat) — are present in the kit withdistribution: localandenabled: false; an overlay enables them.--panel chatrefuses to run without--chat claude|chatgpt|both. Drivers live in the author'sseats/directory and are excluded from the kit tree — a chat seat is operated through the author's own browser or desktop app and is not a general-purpose channel. The kill-switch envR173_SEAT_FORBID_LIVEleaveschat_slot_spent: Falseso a refusal does not count a chat slot. The chat panel is exempt from the free-voice in-round rule (D5). Suites:suite_r173_i2_chat_panel_scaffold(wired),suite_r173_i3_seats_topology(a–d3). valid_throughself-expiry in routing (R174 И-1).routing._valid_through_expired(ch, today=None)returns the ISO date when today >valid_through(lexical YYYY-MM-DD compare), None otherwise (shape guard rejects non-string, wrong length, wrong separator, non-digit components).initial_planAND-s expiry intoenabled, writesvalid_through+expired_oninto the plan, and prepends awhyline naming the date.default_enabledis not touched by expiry — a spend-gate can still tell "off by default" from "on but expired". Overlay channels withvalid_throughrevert to off automatically the day after the date — the mechanism IS the reminder, no code change, no manual step. Suite:suite_r174_valid_through(18 checks a–s).
Panel counts stay at the 1.118.0 numbers (cheap 6, standard 12; --ask 4; chat channels off by default). Selftest in SOURCE after this release: 2517/2517 PASS (R174 И-1's 18 + R173 И-3's 8 + R172 И-2's 29 added since 1.118.2).
1.118.2 — 2026-11-02
Section titled “1.118.2 — 2026-11-02”"Second opinion" without a panel name defaults to the cheap panel — the standard panel runs only when explicitly asked for.
- SKILL.md description no longer says "every external reviewer voice at once" — the phrase caused AI agents to pass
--panel standardwhen a user said "second opinion" without specifying a tier. The description now says "the default (cheap) panel" and carries a 🔴 rule: "second opinion" without a tier/panel name = cheap; NEVER pass--panel standardunless the user explicitly asks for it. The same rule is repeated in §0.0 Hard rules and §2. - AGENTS.md carries the same rule for AI agents that read the repository directly.
- Flag table trimmed:
--answer-cap,--attach,--strict-piidescriptions shortened to fit the new rules within the 5000-token auto-compaction budget.
1.118.1 — 2026-11-01
Section titled “1.118.1 — 2026-11-01”Panel r171i3 review findings (A1–A10): the docs now state the worst case for a cheap round with DeepSeek (142 min, not "past an hour"); the OpenRouter 402 advice matches the vendor's remedy (retry after in-flight requests settle); the Qwen 403 cause text is softened; the page-fetch fence IDNA-normalises the host before the name check (Unicode spellings of *.ts.net are caught by the name rule, not only the IP rule); the selftest's fence check covers mapped IPv6, NAT64, 6to4, ULA, loopback, capitals and trailing-dot on every CI leg; the no-key fallback OFF is pinned; Tailscale Funnel pages are mentioned in SECURITY and TECHNICAL; Python floor 3.8→3.9 (aligned to CI); CHANGELOG lists z.ai/зетай; the suite_r153_i5 label covers glm too.
1.118.0 — 2026-11-01
Section titled “1.118.0 — 2026-11-01”DeepSeek V4.1 Flash on NVIDIA's free key takes Step 5 Preview's seat in the cheap panel, with GLM 5.3 Flash as its fallback; «deepseek» and «glm» become family words; the page-fetch tool stops opening Tailscale addresses; CI is green again.
- DeepSeek V4.1 Flash replaces Step 5 Preview, which kept failing real rounds.
nvdeepseekv41flashruns on NVIDIA's free endpoint (NVIDIA_NIM_API_KEY) at effortmax(NVIDIA accepts none..max; n=3 high against max overlapped, so no depth verdict),max_tokens131072,timeout61m, with the page-fetch tool and no web search. Its fallback is GLM 5.3 Flash on the same key (nvglm53flash: off as a voice, effortmax, 20m), started once after the round when DeepSeek ends with under 2000 bytes of text, a timeout included. Without the key the plan names it and prints the fallbackOFF in this run.ocstep5previewnv/nvstep5previeware off and start only by name. Counts on a machine with every key and CLI: cheap 6, standard 12, «CLI only» 3 (2 on a day opencode's free allowance was refused),--ask4 (3). - Measured: the seat is slow, so plan for it. At 20 minutes one live review (~20K tokens of brief and diff) was still reasoning with no answer, hence 61. At 61 minutes the same review's first attempt died silently at 650 s; the automatic retry (the AUTO-RETRY rule, unchanged: the full budget again) answered at 3,556 s of 3,660 with 22 KB and 61,030 reasoning tokens, and opened no page. DeepSeek held that cheap round about 70 minutes. By the rules (not measured), a silent death late in the first attempt, a retry that times out and GLM's turn can hold it past two hours.
- Family words:
deepseek/дипсикandglm/глм/zai/z.ai/зетайare groups over every transport, askimiandgrokare. «не используй glm» also turns DeepSeek's fallback off;--only glmon the cheap panel stops with a route error, because its only startable member there is the paidorglm53;--only deepseekrunsnvdeepseekv41flash. - The page-fetch fence:
citecheck._resolve_publicrefuses every address that is notis_globaland every*.ts.netname before resolving it. Python calls 100.64.0.0/10, the range Tailscale uses, neither private nor global, so such an address used to pass as public. One function serves the citation check and the page-fetch tool the API reviewers call; a reviewer had fetched a tailnet admin page through it. - Two more causes in
diagnose(): Qwen Code's «403 Access to model denied» (the account's Token Plan lapsed or its monthly credits are spent: renewing is the owner's step, and re-running the brief on a paid channel is a spending decision, not a repair) and OpenRouter's «would exceed your available credits» (402; tokens generated before the refusal are billed). - CI green again (red on every release since 1.116.0). The Python 3.9 leg runs on
ubuntu-24.04: setup-python has no 3.9 for Ubuntu 26.04, today'subuntu-latest, so 1.116.0-1.117.2 never ran on 3.9. Three checks had not followed 1.116.0's utf-8 change: two Muse Code environment checks now admit the utf-8 variables, and R138 re-pins the grok bypass prompt (its only change is 1.116.0's utf-8 sentence). SKILL.md is back under its 5,000-token re-attach budget. These were checks lagging the code, not run defects;python selftest.pyon an installed 1.116.0-1.117.2 printed the same failures.orchestrate.pyloses the UTF-8 byte-order mark 1.116.0 put before its#!line. - Not in this release: a free voice's fallback still starts only after the whole round.
1.117.2 — 2026-10-29
Section titled “1.117.2 — 2026-10-29”upgrade.py guard refinement: refuse only author-form targets (no run-behaviour change).
- 1.117.1 refused any
--tocarrying.git— too broad: this machine's.config/opencodeinstall itself lives in a git clone (kit-form content from past upgrades) and needs upgrades. The guard now reads the target'schannels.jsonand refuses only author-form content (anyprompt_suffix, or an enableddistribution: localchannel — the kit ships neither), still naming the.agents/.codexjunctions. Kit-form checkouts upgrade as before.
1.117.1 — 2026-10-29
Section titled “1.117.1 — 2026-10-29”upgrade.py refuses a target that resolves to a source checkout (R166 follow-up, no run-behaviour change).
- On this machine
.agents/skills/model-orchestrationand.codex/...are NTFS junctions to the author source tree (since 2026-09-30): their text differs, so the old same-folder check passed whilecopy_treewrote straight through them into the working copy — twice kit-ifying the source (local channels off, prompt suffixes stripped, a stampedVERSION). An install never carries.git; the guard refuses any--towhose real path holds.git+channels.json(exit 2, nothing written) and names the junctions. The two junctions need no install at all — they read the live source.
1.117.0 — 2026-10-29
Section titled “1.117.0 — 2026-10-29”The inner watchdog (R166): a Grok tool that starts and never finishes stops the run after 90 s of silence instead of the channel timeout.
_run_grokwatches Grok's own session record every poll: a tool pending longer thanGROK_TOOL_SILENCE(90 s,ORCH_GROK_TOOL_SILENCEoverrides) kills the whole tree at once, withinfo["watchdog"]naming the tool and its age. A turn that already ended keeps the R165 linger grace; a hit channel timeout keeps itsTimeoutExpired. The 2026-10-26 hang (run_terminal_commandon a 97 KB pipe no parent drained, 40 min of silence, zero bytes) now costs ~90 s.call_grokclireports the stop as failed-with-partial: no answer text, no outfile (an armed fallback may still run it), aWATCHDOGwarning, Grok's session note plus the stuck tool in the error,watchdog_tool/watchdog_stuck_son the record.diagnose()names the stalled tool and says a longer timeout would not help.- Other CLIs unchanged: this harness has no per-tool progress signal for them (their output arrives at exit), so the watch is Grok-session-specific by measurement.
selftest.pygainssuite_r166_grok_tool_watchdog(stuck child stopped + tree dead, completing tool untouched, tracker unit, record shape, diagnosis). - Also in this release: source-tree repair after a kit→source overwrite (local channels, prompt suffixes, maintainer placeholder back in place; see TECHNICAL). No panel changes.
Older releases: the whole CHANGELOG.md of v1.120.1.