omnilane 0.34.0 → 0.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/CHANGELOG.md +71 -1
  4. package/README.ja.md +63 -33
  5. package/README.ko.md +63 -32
  6. package/README.md +147 -86
  7. package/README.zh-CN.md +61 -30
  8. package/README.zh-TW.md +124 -75
  9. package/VERSION +1 -1
  10. package/config/aa-model-policy.json +3046 -0
  11. package/docs/aa-model-coverage-2026-09-05.json +29204 -0
  12. package/docs/completion-wakeup.md +126 -0
  13. package/docs/model-capabilities-2026-09.md +380 -0
  14. package/docs/native-executor.md +264 -0
  15. package/docs/release-notes-0.42.1.md +32 -0
  16. package/hooks/routing-instruction.md +101 -40
  17. package/package.json +8 -2
  18. package/plugin.json +2 -2
  19. package/routing.local.yaml.example +8 -3
  20. package/routing.yaml +16 -16
  21. package/scripts/completion-wakeup.py +390 -0
  22. package/scripts/configure.sh +4 -4
  23. package/scripts/dispatch.sh +323 -32
  24. package/scripts/doctor.sh +55 -1
  25. package/scripts/jobs.sh +64 -17
  26. package/scripts/lib/aa_policy.py +473 -0
  27. package/scripts/lib/aa_retry.py +77 -0
  28. package/scripts/lib/common.sh +106 -1
  29. package/scripts/lib/job-worker.sh +314 -20
  30. package/scripts/lib/live-protocol.sh +147 -2
  31. package/scripts/lib/native.py +507 -0
  32. package/scripts/lib/normalize-claude-stream.py +72 -0
  33. package/scripts/lib/prepare-agy-mode.py +374 -0
  34. package/scripts/release-audit.sh +103 -0
  35. package/scripts/runners/run-claude.sh +81 -47
  36. package/scripts/runners/run-codex-live.py +462 -0
  37. package/scripts/runners/run-codex.sh +62 -3
  38. package/scripts/runners/run-gemini.sh +85 -10
  39. package/scripts/runners/run-grok-live.py +426 -0
  40. package/scripts/runners/run-grok.sh +117 -6
  41. package/scripts/runners/run-vote.sh +6 -3
  42. package/skills/omnilane/SKILL.md +217 -81
package/README.md CHANGED
@@ -32,8 +32,8 @@ architecture question runs on whatever you happened to open.
32
32
  **What omnilane does.** It gives your assistant a routing table. Work gets
33
33
  sorted into **lanes** — hardest coding, bulk mechanical, triage, hard judgment,
34
34
  final polish — and each lane names the model that is best (and cheapest) for
35
- it. Your assistant keeps the lanes it is already good at and hands the rest to
36
- another vendor's CLI in the background, using the logins you already have.
35
+ it. The assistant delegates each lane through a compatible caller-owned native
36
+ agent or the existing vendor CLI, even when the worker uses the same model.
37
37
 
38
38
  **What it is not.** Not a proxy, not a new subscription, not another service to
39
39
  keep alive. It is a table plus a dispatch script that runs behind the tool you
@@ -95,7 +95,7 @@ flowchart LR
95
95
  and shells out to the vendor's CLI headlessly. `--vendor` selects one named
96
96
  vendor without fallback.
97
97
  - **`skills/omnilane/SKILL.md`** — a single skill every harness can load:
98
- identify your own model, self-execute your lane, dispatch the rest.
98
+ identify the lane's model and delegate through a compatible native agent or CLI.
99
99
  - **`omnilane mcp`** — the same routing surface as an MCP stdio server,
100
100
  for hosts that integrate via MCP instead of skills.
101
101
 
@@ -115,24 +115,24 @@ actually resolves.
115
115
 
116
116
  | Lane | First choice | Backup | When |
117
117
  |---|---|---|---|
118
- | 🔥 hardest-coding | Claude Fable 5.1 (xhigh) | GPT-5.6 Sol (xhigh) → Grok 4.6 → Gemini 3.7 Flash (High) | Hardest implementation, deep root-cause debug, correctness-critical edits |
119
- | 🏗️ bulk-mechanical | GPT-5.6 Sol (high) | Gemini 3.7 Flash (High) → Claude Sonnet 5 (high) | Refactors, migrations, tests, review sweeps — mechanical endurance |
120
- | 🧹 triage | GPT-5.6 Luna (high) | Gemini 3.7 Flash (Low) → Claude Haiku 4.5 | High-volume scans, first-pass filtering |
121
- | ⚖️ hard-judgment | Claude Opus 5 (xhigh) | GPT-5.6 Sol (max) → Grok 4.6 | Architecture arbitration, deep reasoning, second opinions |
122
- | ✒️ taste-final | Claude Fable 5.1 (high) | GPT-5.6 Sol (max) → Grok 4.6 → Gemini 3.7 Flash (High) | User-facing prose, prompt/doc polish, style arbitration |
123
- | 💬 consult | GPT-5.6 Sol (max) | Claude Fable 5.1 (high) → Grok 4.6 → Gemini 3.7 Flash (High) | Direct named-model consultation; keep `--vendor` to prevent fallback |
124
- | 🎨 ui-draft | GPT-5.6 Sol (xhigh) | Claude Fable 5.1 (high) → Gemini 3.7 Flash (High) | UI drafts only WITH a design system / reference images |
125
- | 📚 long-context | Gemini 3.7 Flash (Medium) | GPT-5.6 Terra (max) → Claude Opus 5 (medium) | Long-document retrieval and synthesis, ordered on AA-LCR, cost, and throughput |
126
- | ⚡ fast-agentic | Gemini 3.7 Flash (Medium) | GPT-5.6 Luna (high) → Claude Haiku 4.5 | Fast multi-step agentic loops, multimodal checks |
127
- | 📡 live-search | Grok 4.6 | Gemini 3.7 Flash (High) → Claude Sonnet 5 (high) | Realtime X/web search and social context |
128
- | 🚰 coding-overflow | Grok 4.6 | Gemini 3.7 Flash (High) → Kimi K3 → Qwen3 Coder Plus → OpenCode | Codex-quota relief valve for mid-tier coding |
118
+ | 🔥 hardest-coding | Claude Fable 5.1 (max) | GPT-6 Astra (xhigh) → Grok 4.6 → Gemini 3.8 Flash (High) | Hardest implementation, deep root-cause debug, correctness-critical edits |
119
+ | 🏗️ bulk-mechanical | GPT-5.6 Sol (high) | Gemini 3.8 Flash (High) → Claude Sonnet 5 (high) | Refactors, migrations, tests, review sweeps — mechanical endurance |
120
+ | 🧹 triage | GPT-5.6 Luna (high) | Gemini 3.8 Flash (Low) → Claude Haiku 4.5 | High-volume scans, first-pass filtering |
121
+ | ⚖️ hard-judgment | Claude Fable 5.1 (xhigh) | GPT-6 Astra (xhigh) → Grok 4.6 | Architecture arbitration, deep reasoning, second opinions |
122
+ | ✒️ taste-final | Claude Fable 5.1 (xhigh) | GPT-6 Astra (xhigh) → Grok 4.6 → Gemini 3.8 Flash (High) | User-facing prose and style arbitration; benchmarks do not prove visual or editorial taste |
123
+ | 💬 consult | GPT-6 Astra (xhigh) | Claude Fable 5.1 (xhigh) → Grok 4.6 → Gemini 3.8 Flash (Medium) | Direct named-model consultation; keep `--vendor` to prevent fallback |
124
+ | 🎨 ui-draft | GPT-5.6 Sol (high) | Claude Fable 5.1 (xhigh) → Gemini 3.8 Flash (High) | UI drafts only with a design system or reference images; no aesthetic benchmark claim |
125
+ | 📚 long-context | Gemini 3.8 Flash (Medium) | GPT-5.6 Terra (max) → Claude Opus 5 (medium) | Long-document synthesis; context size alone does not prove task quality |
126
+ | ⚡ fast-agentic | Gemini 3.8 Flash (Low) | GPT-5.6 Luna (high) → Claude Haiku 4.5 | Fast multi-step tool loops and multimodal checks |
127
+ | 📡 live-search | Grok 4.6 | Gemini 3.8 Flash (High) → Claude Sonnet 5 (high) | Realtime X/web search; backups provide generic web search, not equivalent X context |
128
+ | 🚰 coding-overflow | Grok 4.6 | Gemini 3.8 Flash (High) → Kimi K3 → Qwen3 Coder Plus → OpenCode | Explicit Codex-quota relief; provider failure does not auto-retry another vendor |
129
129
  | 🗳️ arbitrate | off (opt-in vote panel) | — | Built-in opinion panel for big calls — disabled by default; enable it in `routing.local.yaml`, one call per voter per round |
130
130
 
131
131
  The **backup** is the next candidate in the lane's `routing.yaml` chain — what
132
132
  dispatch falls back to when the first-choice vendor CLI is not installed. Every
133
133
  lane is such a chain; when nothing in it is installed the lane degrades to `off`.
134
134
 
135
- > **Fable 5.1 is in the defaults — and where Opus 5 still fits.** See the current three-way evidence and Opus override in the [FAQ](#-faq).
135
+ > **Fable 5.1 and Astra now lead hard work.** See the current same-condition evidence in [FAQ](#-faq).
136
136
 
137
137
  ### Natural-language consultation
138
138
 
@@ -147,22 +147,71 @@ request; this is not a free-form shell parser in `dispatch.sh`.
147
147
  table. If an explicit target is absent or unavailable, the command fails
148
148
  clearly instead of falling back to another vendor or family.
149
149
 
150
+ ## Native-first delegation, terminal-compatible
151
+
152
+ Model routing and execution are separate. `--executor auto` (default) selects
153
+ a caller-owned native tool only from explicit structured capabilities. Without
154
+ that context a standalone terminal uses legacy CLI. `--executor cli` forces
155
+ the old behavior; `--executor native` rejects missing/incompatible capability.
156
+ Same vendor is not same model; explicit model/vendor/effort are preserved.
157
+ On native rejection, auto reports a CLI reason and keeps the exact resolved
158
+ target rather than substituting another vendor/model.
159
+
160
+ ```sh
161
+ # Standalone terminal: CLI dry run, no jobs or provider calls.
162
+ omnilane route --executor auto --dry-run hardest-coding "Review this change"
163
+
164
+ # Host supplies honest shared/inherited capability JSON; inspect the linked schema.
165
+ omnilane route --executor native --native-context /absolute/capability.json --workdir /absolute/repo hardest-coding "Review this change"
166
+ # The host now spawns its native agent tool, waits and writes actual evidence.
167
+ omnilane jobs --json complete-native JOB_ID /absolute/completion.json
168
+ omnilane jobs --json status JOB_ID
169
+ omnilane jobs --json result JOB_ID
170
+ omnilane jobs --json list --status pending
171
+ ```
172
+
173
+ Native route emits **pending handoff JSON**, not a shell-native invocation or
174
+ completed job. Codex `collaboration.spawn_agent` has no sandbox/tool/workdir
175
+ restriction parameters and inherits parent tools/filesystem. Its honest request
176
+ and matching capability row explicitly use `shared-inherited` with empty tool
177
+ arrays; `advise`/`work` and workdir are task intent, not an OS boundary. Hard
178
+ isolation remains same-model CLI in auto and rejects forced native.
179
+
180
+ The caller spawns the real agent with the exact resolved model/effort, then
181
+ ingests the actual agent ID, runtime model/effort/vendor/harness/backend,
182
+ outcome, public result, and evidence. An explicit model override uses
183
+ `fork_turns: "none"` or bounded positive history, never `fork_turns: "all"`.
184
+ Unknown caller current model may be omitted when the route explicitly selects
185
+ an exact model declared by the matching capability row. Duplicate completion is
186
+ rejected. Native cancellation never signals PIDs; the caller separately stops
187
+ any spawned agent.
188
+
189
+ Background/durable/live/named CLI sessions, sysops, unsupported isolation,
190
+ vote/arbitration and multi-round paths remain CLI-only. Native integration is
191
+ limited to list/status/result/cancel/completion, not CLI wait/retry/mailbox or
192
+ goal-loop. Protocol handling needs Python 3.9+; legacy terminal CLI remains
193
+ compatible. Tests are fixtures, not live native acceptance. The parent alone
194
+ syncs the host AGENTS managed block after review.
195
+ See [schemas, complete examples and limitations](docs/native-executor.md).
196
+
150
197
  <details>
151
- <summary><b>👉 Which lanes do you run yourself? Pick your main model</b></summary>
198
+ <summary><b>Model-role guidance (delegation still required)</b></summary>
152
199
 
153
200
  <br/>
154
201
 
155
- The table above is vendor-neutral — the *best* model for a lane doesn't change
156
- with who is driving. What changes is which lanes you **self-execute** (you
157
- already are that model, so no second call) versus **dispatch**. Your harness's
158
- `omnilane` skill applies the right row automatically; this is the human view.
202
+ The best model for a lane does not change with the commander. These are role
203
+ hints, not self-execution exemptions: even a same-model task is delegated.
204
+ A native agent is eligible only when the caller explicitly confirms the exact
205
+ model, effort, mode, workdir, tools, isolation and lifecycle. Otherwise use CLI.
206
+ The commander orchestrates and validates; workers do not delegate again.
159
207
 
160
- - **Claude Code · Fable 5.1** — self-execute: taste-final, hardest-coding. Dispatch hard-judgment → Opus 5; bulk → Codex Sol high; long-context and fast loops → Gemini 3.7 Flash; live-search → Grok.
161
- - **Claude Code · Opus 5** — self-execute: hard-judgment, its default lane. Use a local override for taste-final when its lower hallucination rate or price is preferred. Dispatch hardest coding → Fable 5.1 or Sol, bulk → Sol high, long-context and fast loops → Gemini 3.7 Flash, live-search → Grok.
162
- - **Codex · Sol** — self-execute: hardest-coding, bulk-mechanical, hard-judgment, ui-draft. Dispatch taste-final → Claude, long-context and fast loops → Gemini 3.7 Flash, live-search → Grok.
163
- - **Codex · Terra** — self-execute: long-context as the Codex fallback. Bulk-mechanical now defaults to Sol high; escalate hardest pieces to Sol xhigh, taste → Claude, fast loops → Gemini 3.7 Flash, live-search → Grok.
164
- - **Grok Build · Grok 4.6** — self-execute: live-search and coding-overflow, plus fallback duty in hardest-coding, hard-judgment, and taste-final. Dispatch primary hard coding/judgment/taste work to Codex/Claude/Gemini when available; verify API signatures and cited facts.
165
- - **Antigravity · Gemini 3.7 Flash** — self-execute: long-context and fast loops at Medium, bulk/overflow at High, triage at Low, plus fallback duty (High) in hardest-coding, taste-final, ui-draft, and live-search. Dispatch primary hardest coding/judgment/taste to Codex/Claude when available.
208
+ - **Claude Code · Fable 5.1** — recommended prompt-level controller for quality-sensitive work; this is a role, not a lane or automatic selector. Delegate hardest-coding at max and judgment/taste at xhigh; use Astra for an independent Codex review, Sol for bulk, Gemini 3.8 Flash for long/fast work, and Grok for live search.
209
+ - **Claude Code · Opus 5** — balanced prompt-level controller and independent reviewer when explicitly selected (`high`, or `xhigh` for deeper review), plus long-context fallback. This is an opt-in role, not a new lane or the default hard-judgment route.
210
+ - **Codex · Sol** — delegate bulk-mechanical and constrained ui-draft at high. Escalate hardest coding and judgment to Fable/Astra; route long/fast work to Gemini 3.8 Flash and live search to Grok.
211
+ - **Codex · Astra** — prompt-level controller backup and independent reviewer. Use xhigh by default for hardest coding/judgment and consult/taste; explicitly select `--vendor codex --effort max` when needed. Explicit model/effort always win.
212
+ - **Codex · Terra** — delegate the Codex long-context fallback at max. Bulk stays on Sol high; escalate hard work to Fable/Astra.
213
+ - **Grok Build · Grok 4.6** — delegate live-search and coding-overflow, plus fallback duty in hardest-coding, hard-judgment, and taste-final. Dispatch primary hard coding/judgment/taste work to Codex/Claude/Gemini when available; verify API signatures and cited facts.
214
+ - **Antigravity · Gemini 3.8 Flash** — delegate long-context Medium, fast-agentic/triage Low, and bulk/overflow/web fallbacks High. Do not infer visual taste or controller authority from agent/coding benchmarks.
166
215
 
167
216
  </details>
168
217
 
@@ -379,20 +428,13 @@ code passes through.
379
428
 
380
429
  ## 🎭 Modes
381
430
 
382
- - **advise** (default) — read-only worker. Codex runs in a read-only sandbox;
383
- Claude gets only Read/Glob/Grep; Grok runs in plan mode; Kimi and OpenCode
384
- pin their read-only plan modes; OpenRouter is advise-only by design (pure
385
- inference). Use for reviews, questions, second opinions.
386
- - **work** — the worker may edit files, only inside the `--workdir` you name.
387
- Codex gets a workspace-write sandbox; Claude auto-accepts edits; Gemini runs
388
- in accept-edits mode. The `openrouter` vendor refuses work mode with a clear
389
- error — route edits to an agentic CLI vendor instead.
390
- - **sysops** — `work` minus the vendor sandbox, for service operations the
391
- sandbox denies (`launchctl` and friends). Codex runs it with
392
- `-s danger-full-access`; every other vendor treats it as plain `work`. This
393
- hands the worker full access to the machine, so it is an explicit
394
- per-dispatch opt-in and can never be a lane default. Reach for it only when
395
- you have watched `work` fail on a sandbox denial.
431
+ - **advise** (default): read-only local analysis with native web/search tools where the vendor supports them. Model/provider traffic stays available; agent mutation tools are restricted. This is not a promise of identical X/web capabilities across vendors.
432
+ - **work**: local file and command work confined to the explicit `--workdir`, with agent-tool network access disabled. This does not disable the model/provider connection. Unsupported enforcement fails before provider startup rather than silently becoming sysops.
433
+ - **sysops**: explicit per-dispatch opt-in to unrestricted agent tools and filesystem/network access. It is never a lane default; the task must state the allowed operations.
434
+
435
+ The CLI defaults `--workdir` to the caller’s current directory when omitted; task briefs should still specify it explicitly. The MCP `route`/`dry_run` work interface separately requires an explicit `workdir`.
436
+
437
+ Codex and Claude have distinct policies for all three modes. Agy advise/sysops use isolated per-session native app settings without replacing subscription authentication; Agy 1.1.27 work has bounded new/resume acceptance using four validated tools and the native terminal sandbox: workspace read/write/edit/build and policy-denied outside writes passed. External temp/cache reads are also restricted; settings are explicitly regenerated at each start rather than claimed immutable. A separate real two-turn work live/FIFO check passed readback, outside-write denial and normal close with unchanged sources. Grok advise uses native tool allow/deny rules; its complete single-shot `plain` path has verified native keyword search, page fetching, and a denied write on Grok 1.0.13. It uses internal web-tool IDs and job-local MCP readiness without disabling hooks. An existing nonempty `CONTEXT_MODE_MCP_SENTINEL_DIR` conflicts with this advise scope and stops before provider startup rather than being overwritten. Grok work remains gated on macOS because native child-network isolation is Linux-only, and Grok live requires explicit sysops; the advise result does not validate these other paths. OpenRouter remains advise-only; other vendors are not implicitly covered by this four-vendor contract. See the [dated runtime gate](docs/model-capabilities-2026-09.md#f-mode-runtime-gate-2026-09-06) for evidence boundaries.
396
438
 
397
439
  ## 🔒 Safety rails
398
440
 
@@ -430,7 +472,7 @@ code passes through.
430
472
 
431
473
  ## 📬 Live mailbox
432
474
 
433
- A live mailbox is a resident Claude or Gemini background dispatch, not a one-shot dispatch. The foreman opens it with `--background`, can send another instruction while it is still running, and is responsible for closing it with `jobs.sh close ID`. Leaving it unattended does not make it permanent: the idle cap and configured whole-job timeout (`--job-timeout`) can still end it.
475
+ A live mailbox is a resident background dispatch, not a one-shot dispatch. Claude and Gemini retain their existing automatic live behavior with `--background`. Codex and Grok default to single-shot; opt in with `--background --live` (Grok additionally requires `--mode sysops --workdir DIR`). The foreman can send another instruction while it is running and is responsible for closing it with `jobs.sh close ID`. The idle cap and configured whole-job timeout (`--job-timeout`) can still end it.
434
476
 
435
477
  ```bash
436
478
  scripts/dispatch.sh --background --vendor claude hard-judgment "Review the timeout failure"
@@ -442,7 +484,7 @@ scripts/jobs.sh close "$ID"
442
484
  scripts/jobs.sh retry "$ID" --background
443
485
  ```
444
486
 
445
- `watch` follows `$JOB_DIR/events.jsonl`; `tail` reads the public `out.txt`. Live mailbox support covers Claude and Gemini; other vendors run as normal one-shot dispatches, with a notice sent to stderr and stored in `$JOB_DIR/mode-notice.txt`. `--live` requires a resident session and fails fast when the resolved vendor is not capable. `--single-shot` forces one-shot execution even for Claude or Gemini. `--idle-timeout SECONDS` sets the inactivity cap (default 900; `0` disables it).
487
+ `watch` follows `$JOB_DIR/events.jsonl`; `tail` reads the public `out.txt`. Live mailbox support covers Claude, Gemini, Codex, and Grok. Automatic selection remains single-shot for Codex/Grok; only explicit `--live` opts them in. Grok advise rejects `--live` because ACP does not enforce its read-only boundary; normal advise uses single-shot native tool allow/deny rules. `--live` fails fast for unsupported vendors. `--single-shot` forces one-shot execution for every vendor. `--idle-timeout SECONDS` sets the inactivity cap (default 900; `0` disables it).
446
488
 
447
489
  An idle mailbox makes no API calls and incurs no API spend. By default it closes after 900 seconds without a new inbox message or result event, while the whole-job timeout remains the outer cap. Close it sooner when its exchange is finished. `jobs.sh send` to a finished job or a job that is not live fails with a clear error. Do not use this for fire-and-forget work, vendors without live support, or a clean-slate rerun; start a fresh dispatch (or retry a completed job) instead.
448
490
 
@@ -496,53 +538,36 @@ with the key you set — those are advise-only and never edit files.
496
538
  </details>
497
539
 
498
540
  <details>
499
- <summary><b>Fable 5.1 is in the defaults — and where Opus 5 still fits</b></summary>
541
+ <summary><b>Why do Fable 5.1 and Astra now lead hard work?</b></summary>
500
542
 
501
543
  <br/>
502
544
 
503
- Fable 5.1 now leads `hardest-coding` and `taste-final`. At matched xhigh
504
- effort it leads Opus 5 on intelligence, agentic work, and coding. Sol max
505
- remains the far cheaper cross-vendor judgment fallback. `hard-judgment`
506
- itself now defaults to Opus 5 xhigh: it returns 97.7% of Fable's agentic
507
- score at 68% of the cost and a lower hallucination rate, so on that lane's
508
- own per-cost criterion the cheaper configuration wins.
509
-
510
- | Benchmark (AA, retrieved 2026-09-02) | Claude Fable 5.1 (xhigh) | Claude Opus 5 (xhigh) | GPT-5.6 Sol (max) |
511
- |---|---:|---:|---:|
512
- | Intelligence | 64.8 | 62.5 | 60.9 |
513
- | Agentic | 59.8 | 58.4 | 57.8 |
514
- | Coding | 80.7 | 77.0 | 77.4 |
515
- | Hallucination rate (lower is better) | .71 | **.60** | .92 |
516
- | AA $/task | $2.65 | $1.80 | **$0.95** |
517
-
518
- Fable 5.1 is not a bulk or triage default: it costs twice Opus 5 per token and
519
- consumes the most Claude Code subscription quota per turn. Opus 5 now leads
520
- `hard-judgment` by default, stays in `long-context` at medium, and remains
521
- selectable everywhere through `~/.omnilane/routing.local.yaml` — for example,
522
- to bring Fable back:
523
-
524
- ```yaml
525
- hard-judgment: claude claude-fable-5-1 xhigh
526
- ```
545
+ The 2026-09-05 refresh compares the two on AA v4.2 under matching effort:
546
+ Fable/Astra score 57/55 at max and 54/54 at xhigh; AA Briefcase is
547
+ 1666/1566 at max and 1657/1540 at xhigh. In the native coding-agent comparison,
548
+ Fable max completes 70 at $9.18/task in 24 minutes and Astra max completes 67
549
+ at $4.72/task in 26.8 minutes. That supports Fable max for
550
+ `hardest-coding`, Fable xhigh for `hard-judgment`/`taste-final`, and Astra as
551
+ the Codex-family fallback or independent reviewer.
552
+
553
+ Fable max is the quality-first prompt-level controller. Opus high/xhigh is
554
+ the balanced controller and independent-review option; Astra is the existing-
555
+ Codex-quota backup/reviewer. These are role recommendations, not a new lane or
556
+ automatic controller selector. Opus also remains the Claude `long-context`
557
+ fallback.
527
558
 
528
559
  </details>
529
560
 
530
561
  <details>
531
- <summary><b>Why do the Claude lanes use <code>xhigh</code> instead of <code>max</code>?</b></summary>
562
+ <summary><b>Why does hardest coding use <code>max</code> while other Claude lanes use <code>xhigh</code>?</b></summary>
532
563
 
533
564
  <br/>
534
565
 
535
- Because more effort is not monotonically better. Anthropic documents `xhigh` as
536
- the starting point for coding and agentic work, `high` as the floor for other
537
- intelligence-sensitive work, and `max` as the setting for cases where
538
- correctness outweighs cost. Independent testing agrees: on Vals.ai's Vibe Code
539
- Bench, Opus 5 scores 89.8% at `high` but only 88.3% at `xhigh` and 88.4% at
540
- `max` — the top tiers produce more elaborate solutions that fail more often.
541
- Raise any lane locally if your workload disagrees:
542
-
543
- ```bash
544
- omnilane configure set hard-judgment "claude claude-opus-5 max"
545
- ```
566
+ Effort is selected per task, not assumed to improve monotonically. The current
567
+ same-condition and native coding evidence justifies max for correctness-first
568
+ `hardest-coding`; xhigh remains the quality/cost default for
569
+ `hard-judgment`, `taste-final`, and named Fable consultation. Explicit
570
+ `--model` and `--effort` always override these route defaults.
546
571
 
547
572
  </details>
548
573
 
@@ -567,13 +592,13 @@ scripts/dispatch.sh --dry-run hardest-coding "…" # fully resolved plan, no p
567
592
 
568
593
  <br/>
569
594
 
570
- Only if you ask for it. Dispatch defaults to `advise`, a read-only mode enforced
571
- per vendor (read-only sandbox, plan mode, or read-only tool set depending on the
572
- CLI). Editing requires both `--mode work` and an explicit `--workdir`. A third
573
- mode, `--mode sysops`, is `work` minus the vendor sandbox — for service
574
- operations the sandbox denies (e.g. `launchctl`); codex runs it with
575
- `-s danger-full-access`, other vendors treat it as `work`, and it is an
576
- explicit per-dispatch opt-in, never a lane default. Workers
595
+ Only if you ask for it. Dispatch defaults to `advise`, with per-vendor read-only
596
+ sandbox or native tool permissions and supported web search. For bounded edits,
597
+ use `--mode work` with an explicit `--workdir`; agent-tool networking is disabled
598
+ while the model connection remains available. `--mode sysops` is a separate,
599
+ explicit full-access policy for Codex, Claude, Grok, and Agy, not an alias for
600
+ work. Use it only when the task explicitly permits operations outside work's
601
+ boundary, such as service management. It is never a lane default. Workers
577
602
  also cannot dispatch again — the depth guard refuses nested fan-out with exit 86,
578
603
  so one command can never spiral into a chain of agents spending your quota.
579
604
 
@@ -602,6 +627,40 @@ working notes, including per-benchmark caveats, live in
602
627
 
603
628
  ## 📜 Release history
604
629
 
630
+ ## What's new in v0.42.1
631
+
632
+ - **CI fixture repair.** Full Python discovery now gives legacy routing and Grok-readiness fixtures an explicit synthetic-human caller, while production missing-identity denial, the approved registry SHA, downward score checks, retry lineage, and skip assertions remain unchanged.
633
+ - **Portable lineage evidence.** The encoded-effort Gemini spy uses a portable Python interpreter selector and verifies the exact `--model gemini-3.8-flash-high` pair. AA coverage remains 78 scored targets, one scored reference-only entry, and 10 unknown configurations.
634
+ - **Patch upgrade.** After npm publication, run `npm i -g omnilane@0.42.1`. For an existing repo-symlink installation, update the checkout and run `omnilane --version`; do not rerun `./install.sh` unless deliberately rewiring integrations. GitHub release and npm publication remain separate.
635
+
636
+ ## What's new in v0.42.0
637
+
638
+ - **Native-first execution.** Routing and execution are separate: `--executor auto` uses a caller-owned native agent only when the host supplies an exact compatible capability context, and otherwise keeps the same vendor/model/effort on the CLI path. A native handoff is pending work, not a completed job; the caller executes it and records verified completion separately.
639
+ - **Frozen exact-AA downward delegation.** The checked-in AA v4.2 policy gates every provider attempt against the current caller and inherited ceiling, carries an exact child context, and revalidates retries without inheriting a model's earlier human exemption. Its 78 scored configurations are policy inputs, not a claim that all 78 are runnable.
640
+ - **Explicit native reuse.** Reusing an existing Codex agent requires caller-observed idle state, preserved-context consent, and an exact runtime match; capacity exhaustion never silently changes a new-agent request into reuse. Completion is caller-attested evidence, not independent certification of upstream model identity or a cold-start guarantee.
641
+ - **Codex completion wakeup.** `scripts/completion-wakeup.py` binds a run to a controller thread and job allowlist, records scheduler registration, polls terminal events, and separates delivery from acceptance before closing. This is scheduled heartbeat polling, not instant push; without a supported callback the controller keeps waiting directly.
642
+ - **Package and upgrade.** The npm tarball now carries the AA policy, native/AA/wakeup helpers, and both public protocol documents. After npm publication, run `npm i -g omnilane@0.42.0`. Existing repo-symlink installations only need the checkout updated to the released revision and `omnilane --version` verified; review `./install.sh` only for first installation or required rewiring. A GitHub release alone does not establish npm availability.
643
+
644
+ ## What's new in v0.41.1
645
+
646
+ - **Astra defaults to xhigh.** In `hardest-coding` and `hard-judgment`, Astra now defaults to `xhigh`; explicitly select `--vendor codex --effort max` when needed. Provider order and other model efforts are unchanged. This is not a claim of measured CLI subscription-quota savings.
647
+
648
+ - **Python 3.9 compatibility.** Agy workspace-policy staging and cleanup now use `Path.lstat()` without weakening symlink, inode, or concurrent-replacement protections.
649
+ - **Isolated CI fixture.** Strict doctor acceptance now supplies explicit plugin-enabled and directory-marketplace settings; missing, disabled, or mismatched settings still fail.
650
+ - **Portable offline CI fixtures.** Tests no longer depend on the operator HOME, use portable permission-mode checks, and verify Linux/macOS live restrictions for the actual platform.
651
+ - **Gemini threads on Bash 3.2.** Empty thread-argument expansion is guarded while preserving `set -u`, populated resume arguments, and existing mode and permission policies.
652
+ - **Bounded Codex live close.** FIFO backpressure and partial writes preserve byte ordering and unsent suffixes for the bounded close drain. If the runner exits before forwarding accepted queued input, that input is retained and the failure is reported rather than silently discarded. Other providers keep their existing forwarding paths.
653
+ - **Upgrade after npm publication.** Run `npm i -g omnilane@0.41.1`, or update your checkout and rerun `./install.sh`. npm publication is handled separately; a GitHub release does not establish npm availability.
654
+
655
+ ## What's new in v0.40.0
656
+
657
+ - **Distinct modes and repaired Grok web access.** Advise is read-only with supported native search, work confines edits to explicit `--workdir` with agent-tool networking off, and sysops explicitly opts into full access. Grok's full single-shot `plain` advise path now has real search/fetch and denied-write evidence; macOS work and restricted live remain gated.
658
+ - **Explicit Codex and Grok live sessions.** `--background --live` enables follow-up prompts and explicit close for Codex work jobs and Grok sysops jobs; automatic Codex/Grok dispatch stays single-shot, while Claude/Gemini keep their existing auto-live behavior. Grok advise rejects `--live` because its ACP surface does not enforce a read-only boundary.
659
+ - **Bounded, observable shutdown.** EOF-aware capability probes, immutable per-job worker snapshots, interpreter/SHA provenance, close deadlines, and process-group cleanup keep stalled or killed live jobs bounded without claiming OS sandbox isolation.
660
+ - **Completion and idle fixes.** Completion delivery tolerates truncated UTF-8 tails, terminal state comes from durable exit records, and idle tracking advances on completed result events rather than arbitrary stream traffic.
661
+ - **AA-informed model coverage.** The 12-lane defaults now cover Fable 5.1, GPT-6 Astra, and Gemini 3.8 Flash while retaining existing vendors and explicit model overrides. A dated AA v4.2 coverage snapshot documents 643 leaderboard configurations; catalog presence is not a runtime capability guarantee.
662
+ - **Upgrade.** Run `npm i -g omnilane@0.40.0`, or update your checkout and rerun `./install.sh`.
663
+
605
664
  ## What's new in v0.33.0
606
665
 
607
666
  - **Four-vendor threaded dispatch.** `--thread NAME` continues pinned Claude,
@@ -707,6 +766,8 @@ working notes, including per-benchmark caveats, live in
707
766
 
708
767
  ## What's new in v0.12.0
709
768
 
769
+ These are historical release notes. The current three-mode contract is defined in [Modes](#-modes), including the separate full-access sysops policy in 0.40.0.
770
+
710
771
  - **`hardest-coding` drops Sol from `max` to `xhigh`** — on AA's per-effort
711
772
  Coding Index, Sol at xhigh outscores Sol at max and every Claude tier while
712
773
  costing about a third less. Past xhigh, effort buys overthinking rather than
package/README.zh-CN.md CHANGED
@@ -103,18 +103,18 @@ flowchart LR
103
103
 
104
104
  | 通道 | 首选模型 | 备选模型 | 用途 |
105
105
  |---|---|---|---|
106
- | 🔥 hardest-coding | Claude Fable 5.1 (xhigh) | GPT-5.6 Sol (xhigh) → Grok 4.6 → Gemini 3.7 Flash (High) | 最难的实现、深度调试、正确性关键的修改 |
107
- | 🏗️ bulk-mechanical | GPT-5.6 Sol (high) | Gemini 3.7 Flash (High) → Claude Sonnet 5 (high) | 重构、迁移、测试、大范围扫描——机械耐力活 |
108
- | 🧹 triage | GPT-5.6 Luna (high) | Gemini 3.7 Flash (Low) → Claude Haiku 4.5 | 大量扫描、第一轮筛选 |
109
- | ⚖️ hard-judgment | Claude Opus 5 (xhigh) | GPT-5.6 Sol (max) → Grok 4.6 | 架构裁决、深度推理、第二意见 |
110
- | ✒️ taste-final | Claude Fable 5.1 (high) | GPT-5.6 Sol (max) → Grok 4.6 → Gemini 3.7 Flash (High) | 对外文字、提示词/文档润色、风格裁决 |
111
- | 💬 consult | GPT-5.6 Sol (max) | Claude Fable 5.1 (high) → Grok 4.6 → Gemini 3.7 Flash (High) | 直接指定模型咨询;保留 `--vendor` 避免降级 |
112
- | 🎨 ui-draft | GPT-5.6 Sol (xhigh) | Claude Fable 5.1 (high) → Gemini 3.7 Flash (High) | 仅在提供设计系统/参考图时生成 UI 草稿 |
113
- | 📚 long-context | Gemini 3.7 Flash (Medium) | GPT-5.6 Terra (max) → Claude Opus 5 (medium) | 长文档提取与综合,按 AA-LCR、成本和吞吐排序 |
114
- | ⚡ fast-agentic | Gemini 3.7 Flash (Medium) | GPT-5.6 Luna (high) → Claude Haiku 4.5 | 高速多步骤工具循环、多模态检查 |
115
- | 📡 live-search | Grok 4.6 | Gemini 3.7 Flash (High) → Claude Sonnet 5 (high) | 实时 X/网页搜索与社交上下文 |
116
- | 🚰 coding-overflow | Grok 4.6 | Gemini 3.7 Flash (High) → Kimi K3 → Qwen3 Coder Plus → OpenCode | Codex 配额耗尽时的中量级编码安全阀 |
117
- | 🗳️ arbitrate | `off`(可选模型评审团) | — | 重大决定的内置意见评审团;默认禁用,在 `routing.local.yaml` 启用,每位评审每轮调用一次 |
106
+ | 🔥 hardest-coding | Claude Fable 5.1 (max) | GPT-6 Astra (xhigh) → Grok 4.6 → Gemini 3.8 Flash (High) | 最难的实现、深度调试、正确性关键的修改 |
107
+ | 🏗️ bulk-mechanical | GPT-5.6 Sol (high) | Gemini 3.8 Flash (High) → Claude Sonnet 5 (high) | 重构、迁移、测试、大范围扫描——机械耐力活 |
108
+ | 🧹 triage | GPT-5.6 Luna (high) | Gemini 3.8 Flash (Low) → Claude Haiku 4.5 | 大量扫描、第一轮筛选 |
109
+ | ⚖️ hard-judgment | Claude Fable 5.1 (xhigh) | GPT-6 Astra (xhigh) → Grok 4.6 | 架构裁决、深度推理、第二意见 |
110
+ | ✒️ taste-final | Claude Fable 5.1 (xhigh) | GPT-6 Astra (xhigh) → Grok 4.6 → Gemini 3.8 Flash (High) | 对外文字、提示词/文档润色、风格裁决 |
111
+ | 💬 consult | GPT-6 Astra (xhigh) | Claude Fable 5.1 (xhigh) → Grok 4.6 → Gemini 3.8 Flash (Medium) | 直接指定模型咨询;保留 `--vendor` 避免降级 |
112
+ | 🎨 ui-draft | GPT-5.6 Sol (high) | Claude Fable 5.1 (xhigh) → Gemini 3.8 Flash (High) | 仅在提供设计系统/参考图时生成 UI 草稿 |
113
+ | 📚 long-context | Gemini 3.8 Flash (Medium) | GPT-5.6 Terra (max) → Claude Opus 5 (medium) | 长文档提取与综合,按 AA-LCR、成本和吞吐排序 |
114
+ | ⚡ fast-agentic | Gemini 3.8 Flash (Low) | GPT-5.6 Luna (high) → Claude Haiku 4.5 | 高速多步骤工具循环、多模态检查 |
115
+ | 📡 live-search | Grok 4.6 | Gemini 3.8 Flash (High) → Claude Sonnet 5 (high) | 实时 X/网页搜索与社交上下文 |
116
+ | 🚰 coding-overflow | Grok 4.6 | Gemini 3.8 Flash (High) → Kimi K3 → Qwen3 Coder Plus → OpenCode | Codex 配额耗尽时的中量级编码安全阀 |
117
+ | 🗳️ arbitrate | off (opt-in vote panel) | — | 重大决定的内置意见评审团;默认禁用,在 `routing.local.yaml` 启用,每位评审每轮调用一次 |
118
118
 
119
119
  **备选模型**是候选链的下一位——首选那家的厂商 CLI 没装时,派发就降到它。每条
120
120
  通道都是这样一条链;整条都没装时,通道自动降为 `off`。
@@ -296,17 +296,13 @@ configure.sh set|get|unset|list|diff LANE [SPEC] # 非交互编辑/查看 rou
296
296
 
297
297
  ## 🎭 模式
298
298
 
299
- - **advise(默认)** — 只读工作端。Codex 跑只读沙箱;Claude 只给
300
- Read/Glob/Grep;Grok 跑 plan 模式;Kimi 与 OpenCode 锁各自的只读
301
- plan 模式;OpenRouter 天生只做 advise(纯推理)。适合审查、提问、第二意见。
302
- - **work** — 允许改文件,仅限你指定的 `--workdir`。Codex 给
303
- workspace-write 沙箱;Claude 自动接受编辑;Gemini 跑 accept-edits 模式。
304
- `openrouter` vendor 会明确拒绝 work 模式——改文件请走代理式 CLI vendor。
305
- - **sysops** — 等于 `work` 拿掉 vendor 沙箱,用于沙箱会挡掉的服务操作
306
- (`launchctl` 之类)。Codex 以 `-s danger-full-access` 执行;其他 vendor
307
- 一律当成普通 `work`。这等于把整台机器的访问权交给工作端,因此只能逐次
308
- 明确指定,永远不能设成 lane 默认值。只有在你亲眼看到 `work` 因沙箱拒绝而
309
- 失败时才动用它。
299
+ - **advise(默认)**:本地只读分析;供应商支持时可用原生网页/搜索工具。保留模型连接,限制修改工具;不同供应商的 X/网页搜索能力并不等同。
300
+ - **work**:文件与命令操作限于显式 `--workdir`,关闭代理工具网络访问,保留模型连接。不支持的强制边界在调用模型前停止,不会静默切换为 sysops。
301
+ - **sysops**:每次派工显式选择,开放代理工具、文件和网络访问;不作为通道默认值,任务必须列明允许的操作。
302
+
303
+ CLI 省略 `--workdir` 时默认使用调用端当前目录;任务说明仍应明确工作目录。MCP `route`/`dry_run` 的 work 接口则单独要求明确的 `workdir`。
304
+
305
+ Codex 和 Claude 的三种模式使用不同策略。Agy advise/sysops 使用独立的原生会话设置,不替换订阅认证;Agy 1.1.27 work 已使用四个经过验证的工具及原生终端沙箱完成限定的新建/续接验收:工作目录内读写、修改、编译及越界写入拒绝通过。外部临时文件/缓存读取也受限;每次启动重写明确设置,不宣称设置全程不可变。另一次正式 work 实时/FIFO 两轮验收已通过前轮读回、越界写入拒绝及正常关闭,源文件保持不变。Grok advise 使用原生工具允许/拒绝规则;Grok 1.0.13 的完整单次 `plain` 路径已验证原生关键词搜索、抓取网页及写入拒绝,采用内部网页工具 ID 和每项作业独立的 MCP 就绪状态,不关闭钩子。`CONTEXT_MODE_MCP_SENTINEL_DIR` 已设置为非空值时,会在调用模型前报告冲突,不覆盖原设置。原生子进程网络隔离仅支持 Linux,因此 macOS Grok work 仍保留前置检查;Grok 实时模式仍要求显式 sysops,这次 advise 结果不扩展到其他路径。OpenRouter 仍仅支持 advise;其他供应商不自动纳入这份四供应商契约。证据范围见[日期化运行验收表](docs/model-capabilities-2026-09.md#f-mode-runtime-gate-2026-09-06)。
310
306
 
311
307
  ## 🔒 内置安全机制
312
308
 
@@ -339,7 +335,7 @@ configure.sh set|get|unset|list|diff LANE [SPEC] # 非交互编辑/查看 rou
339
335
 
340
336
  ## 📬 实时邮箱
341
337
 
342
- 实时邮箱是 Claude 和 Gemini 可用的常驻后台派发,不是一次性派发。派发方以 `--background` 打开后,运行中仍可追加指令,并负责用 `jobs.sh close ID` 收尾。即使无人处理,它也不会永久存在:空闲上限或已配置的整个作业超时(`--job-timeout`)到期后都会终止它。
338
+ 实时邮箱是受支持模式的常驻后台派发,不是一次性派发。派发方以 `--background` 打开后,运行中仍可追加指令,并负责用 `jobs.sh close ID` 收尾。即使无人处理,它也不会永久存在:空闲上限或已配置的整个作业超时(`--job-timeout`)到期后都会终止它。
343
339
 
344
340
  ```bash
345
341
  scripts/dispatch.sh --background --vendor claude hard-judgment "检查超时测试失败的原因"
@@ -351,7 +347,7 @@ scripts/jobs.sh close "$ID"
351
347
  scripts/jobs.sh retry "$ID" --background
352
348
  ```
353
349
 
354
- `watch` 会跟随 `$JOB_DIR/events.jsonl`;`tail` 读取公开的 `out.txt`。目前 Claude 和 Gemini 支持实时邮箱;其他供应商会执行普通的一次性派发,并在 stderr 和 `$JOB_DIR/mode-notice.txt` 留下提示。`--live` 明确要求常驻会话,解析出的供应商不支持时立即失败。`--single-shot` 即使遇到 Claude 或 Gemini 也强制一次性派发。`--idle-timeout SECONDS` 设置空闲上限,默认 900 秒,设为 `0` 可禁用。
350
+ `watch` 跟随 `$JOB_DIR/events.jsonl`;`tail` 读取 `out.txt`。Claude 和 Gemini 保留受支持模式的后台自动实时行为。Codex/Grok 默认一次性,必须显式 `--background --live`;Grok 还要求 `--mode sysops --workdir DIR`,advise/work 的实时请求在启动前停止,因为 ACP 不强制这些模式的边界。不支持实时模式的供应商立即失败。`--single-shot` 强制一次性执行。`--idle-timeout SECONDS` 默认 900 秒,`0` 禁用空闲上限。
355
351
 
356
352
  空闲时不会发出 API 调用,也不会产生 API 费用。默认若 900 秒内没有新邮箱消息或新结果事件,worker 会自动收尾;整个作业超时仍是外层上限。处理结束可提前执行 `close`。向已结束或不是实时邮箱的作业执行 `jobs.sh send` 会明确报错并失败。即发即忘的工作、没有实时支持的供应商,或需要从干净状态重新运行的情况都不适用;请新建一次派发,或在作业完成后使用 `retry`。
357
353
 
@@ -465,11 +461,11 @@ scripts/dispatch.sh --dry-run hardest-coding "…" # 完整解析后的计划,
465
461
 
466
462
  <br/>
467
463
 
468
- 除非你明说要它改。派工默认是 `advise` 只读模式,而且是逐厂商实现的(只读沙箱、
469
- plan 模式,或只给只读工具集)。要改文件必须同时给 `--mode work` 和明确的
470
- `--workdir`。第三种模式 `--mode sysops` 等于 `work` 拿掉 vendor 沙箱,用于沙箱会
471
- 挡掉的服务操作(例如 `launchctl`);codex 以 `-s danger-full-access` 执行,其他
472
- vendor 一律当成 `work`,而且它只能逐次明确指定,永远不是 lane 默认值。
464
+ 除非你明确要求修改。派工默认是 `advise`,通过各厂商的只读沙箱或原生工具权限
465
+ 保持只读,并保留支持的网页搜索。一般修改使用 `--mode work` 和明确的 `--workdir`,
466
+ 关闭代理工具网络,但保留模型连接。`--mode sysops` 是 Codex、Claude、Grok、Agy
467
+ 各自独立的完整权限策略,不是 work 的别名;只有任务明确允许超出 work 边界的
468
+ 操作,例如服务管理,才逐次选择,永远不作为通道默认值。
473
469
  工作端也不能再往外派——深度守卫会用退出码 86 拒绝嵌套派工,一道
474
470
  命令不可能失控变成一整串 AI 烧你的额度。
475
471
 
@@ -497,6 +493,39 @@ vendor 一律当成 `work`,而且它只能逐次明确指定,永远不是 lane
497
493
 
498
494
  ## 📜 版本历程
499
495
 
496
+ ## v0.42.1 新功能
497
+
498
+ - **修复 CI 测试夹具。** 完整 Python discovery 现在会为旧 routing 与 Grok readiness 测试显式指定 synthetic-human caller;production 的缺失身份拒绝、获准 registry SHA、向下分数闸、重试 lineage 与 skip 断言均保持不变。
499
+ - **可移植的 lineage 证据。** encoded-effort Gemini spy 改用可移植的 Python 解释器选择,并验证精确的 `--model gemini-3.8-flash-high` 参数对。AA 覆盖仍为 78 个 scored target、1 个 scored reference-only 项目和 10 个 unknown configuration。
500
+ - **补丁版升级。** npm 发布后可运行 `npm i -g omnilane@0.42.1`。现有 repo-symlink 安装只需更新 checkout 并运行 `omnilane --version`;除非有意重新接线,否则不要再次运行 `./install.sh`。GitHub release 与 npm 发布仍相互独立。
501
+
502
+ ## v0.42.0 新功能
503
+
504
+ - **原生优先执行。** `--executor auto` 只在主机提供精确兼容的能力上下文时使用调用方持有的原生代理;否则保持同一供应商、模型和推理强度走 CLI。原生 handoff 仍是待执行任务,并不代表已经完成。
505
+ - **冻结的 exact-AA 向下委派。** 内置 AA v4.2 策略在每次供应商调用前检查当前 caller 与继承上限,生成精确子上下文,并在重试时重新验证。78 个评分配置是策略输入,不表示 78 个配置都可运行。
506
+ - **明确的原生复用边界。** 复用现有 Codex 代理要求调用方已确认空闲、允许保留上下文且运行身份完全匹配;容量不足不会把新代理请求静默改成复用。完成记录也不是上游模型身份认证或冷启动容量保证。
507
+ - **Codex 完成续验。** `scripts/completion-wakeup.py` 绑定控制线程与任务白名单,记录排程注册,并区分送达和验收。这是定时 heartbeat 轮询,而不是即时推送。
508
+ - **封装与升级。** npm 包现在包含 AA 策略、原生/AA/wakeup 辅助脚本以及公开协议文档。npm 发布后可运行 `npm i -g omnilane@0.42.0`;GitHub release 本身不代表 npm 已上架。
509
+
510
+ ## v0.41.1 新功能
511
+
512
+ - **Astra 默认 xhigh。** `hardest-coding` 与 `hard-judgment` 的 Astra 默认改用 `xhigh`;需要时可明确指定 `--vendor codex --effort max`。供应商顺序与其他模型的推理强度保持不变;这不代表已实测节省 CLI 订阅额度。
513
+
514
+ - **Python 3.9 兼容性。** Agy 工作目录策略的建立与清理改用 `Path.lstat()`,保留符号链接、inode 和并发替换保护。
515
+ - **隔离 CI 测试数据。** 严格 doctor 验收补齐明确启用插件与目录来源设置;设置缺失、停用或路径不匹配时仍会失败。
516
+ - **可移植的离线 CI 测试数据。** 测试移除对操作者 HOME 的依赖,采用跨平台权限模式检查,并按实际平台验证 Linux/macOS 的实时任务限制。
517
+ - **Bash 3.2 的 Gemini 任务。** 保护空任务参数展开,同时保留 `set -u`、非空续接参数以及现有模式与权限策略。
518
+ - **有时间上限的 Codex 实时关闭。** FIFO 背压与部分写入会保留字节顺序及未发送尾段,供限时关闭排空处理;若执行器提前退出,已接受但尚未转发的排队输入仍会保留并报告失败,不会静默丢弃。其他供应商沿用原有转发路径。
519
+ - **npm 上架后升级。** 运行 `npm i -g omnilane@0.41.1`,或更新 checkout 后再次运行 `./install.sh`。npm 单独发布,GitHub 发布不代表 npm 已上架。
520
+
521
+ ## v0.40.0 新功能
522
+
523
+ - **区分模式并修复 Grok 网页工具。** advise 只读并保留支持的原生搜索;work 限于明确的 `--workdir` 且关闭代理工具网络;sysops 每次显式启用完整权限。Grok 完整单次 `plain` advise 已取得真实搜索、抓页和写入拒绝证据;macOS work 与受限实时模式仍保留前置检查。
524
+ - **Codex 与 Grok 显式实时会话。** Codex work 与 Grok sysops 作业可用 `--background --live` 继续发送消息并显式关闭;Codex/Grok 自动派发仍保持单次执行,Claude/Gemini 保留原有自动实时行为。Grok advise 因 ACP 没有可强制执行的只读边界而拒绝 `--live`。
525
+ - **有界且可观测的关闭流程。** 能识别 EOF 的能力探测、每项作业的不可变 worker 快照、解释器/SHA 来源、关闭期限与进程组清理,可限制卡住或被终止的实时作业,但不宣称操作系统沙箱隔离。
526
+ - **AA 驱动的模型覆盖。** 12 条通道默认值已纳入 Fable 5.1、GPT-6 Astra 与 Gemini 3.8 Flash,同时保留现有供应商和显式模型覆盖。日期化 AA v4.2 覆盖快照记录 643 个榜单配置;模型出现在目录中不代表运行环境已验证支持。
527
+ - **升级。** 运行 `npm i -g omnilane@0.40.0`,或更新 checkout 后再次运行 `./install.sh`。
528
+
500
529
  ## v0.33.0 新功能
501
530
 
502
531
  - **四厂商线程派发。** `--thread NAME` 可让固定厂商、模型、effort 与工作
@@ -579,6 +608,8 @@ vendor 一律当成 `work`,而且它只能逐次明确指定,永远不是 lane
579
608
 
580
609
  ## v0.12.0 新功能
581
610
 
611
+ 以下保留当时版本的历史说明。当前三种模式的契约以[模式](#-模式)为准,包括 0.40.0 独立的完整权限 sysops 策略。
612
+
582
613
  - **`hardest-coding` 的 Sol 从 `max` 降到 `xhigh`**——在 AA 分档位的 Coding Index
583
614
  上,Sol 的 xhigh 不但胜过自己的 max,也胜过所有 Claude 档位,成本还少约三分之一。
584
615
  这类工作超过 xhigh 之后,多加的 effort 买到的是过度思考,不是正确率。