omnilane 0.42.9 → 0.45.0

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.
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "One routing table, native-first or CLI delegation, supervised completion workflows.",
9
- "version": "0.42.9"
9
+ "version": "0.45.0"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "omnilane",
14
14
  "source": "./",
15
15
  "description": "Route each subtask to the model that fits, then delegate through a compatible caller-owned native agent or vendor CLI.",
16
- "version": "0.42.9",
16
+ "version": "0.45.0",
17
17
  "category": "development",
18
18
  "keywords": [
19
19
  "routing",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnilane",
3
- "version": "0.42.9",
3
+ "version": "0.45.0",
4
4
  "description": "One routing table, every harness: classify subtasks into lanes and delegate through compatible caller-owned native agents or vendor CLIs with exact-AA downward policy and supervised jobs.",
5
5
  "author": {
6
6
  "name": "Seraphim0916"
package/CHANGELOG.md CHANGED
@@ -6,6 +6,261 @@ semantic version tags.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.45.0] - 2026-09-22
10
+
11
+ The score registry moves to Artificial Analysis Intelligence Index v4.3.2, the
12
+ lanes are re-allocated on it, and Grok 4.7 joins. **Every host must run
13
+ `omnilane resign` once after upgrading**: the transport overlay is bound to the
14
+ registry snapshot, and until it is rebuilt a model caller is refused on every
15
+ lane with `transport overlay snapshot mismatch`.
16
+
17
+ ### Changed
18
+
19
+ - The registry is re-scored from AA v4.3.2 (snapshot `aa-v4.3.2-2026-09-22-v1`).
20
+ v4.2 and v4.3.2 are different scales and the gaps are uneven (Fable 5.1 max
21
+ 57 → 53, Astra xhigh 54 → 52, Opus 5 medium 50 → 45, Grok 4.6 high 51 → 44,
22
+ Sol high 48 → 42), so ceilings change: Fable 5.1 max, Fable 5.1 xhigh and
23
+ Astra max now tie at 53 and may dispatch to each other, and a mid-effort
24
+ controller that reached nothing in `hard-judgment` under v4.2 now does.
25
+ 25 rows that were estimates are measured; 23 remain estimated. Each row
26
+ carries `score_raw`, and `schema_notes.score_rounding` records the half-up
27
+ rule.
28
+ - `routing.yaml` is rewritten rather than amended. Each lane names the
29
+ measurements that match its kind of work and lists candidates best-first on
30
+ them, and each chain steps down through the score range so that whatever a
31
+ controller's ceiling, the first candidate it can reach is the best one it can
32
+ reach. Eight lanes change their first choice:
33
+ - `hardest-coding`: GPT-6 Astra (xhigh), on Terminal-Bench 4.0 (AA moved to it
34
+ in v4.3; the frontier is saturated on 2.1) and the lowest hallucination rate
35
+ of the top rows. Fable (xhigh) follows; it beats Fable (max) on 4.0 for about
36
+ two thirds of the cost, so `max` is in no chain and stays explicit-only.
37
+ - `bulk-mechanical` and `fast-agentic`: Astra (low). It costs what Sol (high)
38
+ costs and is ahead on coding, speed and hallucination; it is the fastest row
39
+ that still scores near the top on AutomationBench. Claude Haiku leaves
40
+ `fast-agentic`, where it scores close to nothing.
41
+ - `taste-final`: Claude Opus 5 (max), on AA's expert grading of finished
42
+ documents. Grok 4.7 is graded above every Astra row there and precedes Astra.
43
+ - `long-context`: Claude Opus 5 (high, then medium, then low). AA-LCR is
44
+ saturated; on the harder long-context figure Claude leads every other family
45
+ by a wide margin at every effort.
46
+ - `ui-draft`: Astra (high), on MMMU-Pro then Terminal-Bench 4.0.
47
+ - `live-search` and `coding-overflow`: Grok 4.7.
48
+ `hard-judgment` keeps Fable (xhigh) then Astra (xhigh) and gains Opus rungs,
49
+ which hold their graded analytical quality down the effort ladder where Astra
50
+ does not. The figures behind every ordering, generated from the tracked
51
+ extract, are in `docs/model-capabilities-2026-09.md`.
52
+
53
+ ### Added
54
+
55
+ - Grok 4.7: registry rows at xhigh and high, a catalog entry in
56
+ `omnilane configure`, and a place ahead of Grok 4.6 in every lane Grok serves.
57
+ A lane skips a candidate whose transport this host has not proven, so Grok 4.6
58
+ keeps serving until `omnilane resign` has probed 4.7.
59
+ - `scripts/aa_rebaseline.py lanes` prints, per lane, each candidate with the
60
+ measurements that lane is ordered on.
61
+ - Claude Sonnet 5 at xhigh, high, medium and low. AA now scores them; they were
62
+ `unknown_configs`.
63
+ - `scripts/aa_rebaseline.py` (`fetch`, `build`, `report`, `matrix`) regenerates
64
+ the registry from a saved extract of one AA page, byte-reproducibly. The
65
+ extract and per-vendor evidence for this snapshot are tracked under
66
+ `docs/reports/`.
67
+
68
+ ### Fixed
69
+
70
+ - `omnilane resign` now treats a re-scored registry as drift. It compared only
71
+ executables and runner scripts, so on a host where no CLI had moved it
72
+ reported "nothing to re-sign" and left an overlay that dispatch refuses for
73
+ good. With the executables unchanged it reuses the existing probe evidence,
74
+ probes only the rows that have none, and rebuilds the overlay for the new
75
+ snapshot; a vendor whose CLI also moved is still probed in full.
76
+ - `claude claude-sonnet-5 high` was a fallback that could never be dispatched:
77
+ the v4.2 registry had only a non-reasoning row at that effort, which Claude's
78
+ `--effort` cannot select. It now resolves to the adaptive row once probed.
79
+
80
+ ### Removed
81
+
82
+ - `codex/gpt-6-astra-non-reasoning`. AA no longer lists it and Astra rejects
83
+ effort `none`; it moves to `unknown_configs` and its old score is not kept.
84
+
85
+ ### Known gap until `omnilane resign`
86
+
87
+ - `--vendor grok` is refused on every lane (`runtime-mapping-unverified`): with
88
+ `--vendor` a lane takes that vendor's first segment without falling through,
89
+ and it is now 4.7. Add `--model grok-4.6` until the host has proven 4.7.
90
+
91
+ ## [0.44.0] - 2026-09-21
92
+
93
+ The daily `omnilane resign` now also covers a CLI you patch and re-sign
94
+ yourself, and an expired login is reported as what it is.
95
+
96
+ ### Added
97
+
98
+ - `omnilane resign --trust-adhoc VENDOR`. An operator who re-signs a vendor's
99
+ executable adhoc on purpose (a local post-update patch step) records that
100
+ once; from then on an adhoc update of that vendor in the same install
101
+ directory is re-probed unattended, like a same-signer update. An unsigned
102
+ executable, an adhoc one in another directory, and every other vendor still
103
+ stop at exit 20. The trust lives on the vendor's overlay entry
104
+ (`operator_trust`), is carried over by later re-signs, and is a per-vendor
105
+ operator action a model never runs. Works for all four vendors.
106
+
107
+ ### Fixed
108
+
109
+ - An expired login is reported as "not logged in", not as a transient failure.
110
+ After a `claude` update every probe answered `Failed to authenticate: OAuth
111
+ session expired and could not be refreshed`; the sweep counted those as
112
+ selector failures and `omnilane resign` said "Retry later", which cannot help.
113
+ `Failed to authenticate`, `OAuth session expired`, `could not be refreshed`,
114
+ `Invalid API key`, `Unauthorized` and `401` now make the vendor `unprobeable`,
115
+ and the held-vendor message says to log in first.
116
+
117
+
118
+ ## [0.43.1] - 2026-09-21
119
+
120
+ Install this instead of 0.43.0. 0.43.0's first-install scripts do not start on
121
+ Python 3.9, which is the version the README promises.
122
+
123
+ ### Fixed
124
+
125
+ - `scripts/lib/build_overlay.py` and `scripts/lib/probe.py` used `X | None`
126
+ annotations without `from __future__ import annotations`, so on Python 3.9 they
127
+ raised `TypeError` on import. That broke the overlay build in the README's
128
+ first-install steps and `omnilane resign`, which imports both. Every module is
129
+ now import-checked under a real Python 3.9.
130
+ - Two `test_probe_identity` tests still assumed an overlay could be built with no
131
+ vendor executable to pin; since 0.43.0 that correctly yields no mappings. The
132
+ fixture host now has a `claude`. The TOML model-override tests are skipped
133
+ before Python 3.11, where the reader refuses by design (no `tomllib`).
134
+ - CI: the strict doctor acceptance step runs as a human-operator host, because
135
+ 0.43.0 made a host with no transport overlay a warning for model callers. CI had
136
+ been red since 0.42.9 on the Python 3.9 unit tests; it runs `unittest discover`,
137
+ which the local `tests/run.sh` does not cover. Both are now run before a release.
138
+ - Doctor's no-overlay message pointed at a README heading that 0.43.0 renamed.
139
+
140
+ ## [0.43.0] - 2026-09-21
141
+
142
+ **Why this release exists.** In ten days 0.42.x refused every model caller four
143
+ times, each time because of a fact omnilane does not control: a launcher was
144
+ renamed, a runner script changed without the overlay being re-signed, all four
145
+ vendor CLIs updated themselves within a week, and a Codex automation recorded no
146
+ effort. Each one turned into "nothing can be dispatched". 0.43.0 makes each of
147
+ those a narrower, explained outcome, and repairs the common one by itself.
148
+
149
+ **Upgrading.** `npm i -g omnilane@0.43.0`. If a model drives omnilane on this
150
+ machine, run once: `omnilane resign --record-signers`, then schedule
151
+ `omnilane resign` daily inside your desktop login session (README, "Let your AI
152
+ assistant drive omnilane", Step 3). Hosts where only a human dispatches need
153
+ nothing. The skill file was rewritten; re-run `./install.sh`, or reinstall the
154
+ plugin, wherever you installed a copy rather than a link.
155
+
156
+ ### What you will notice
157
+
158
+ - **A caller with no recorded effort is narrowed, not refused.** A Codex
159
+ heartbeat automation wakes a thread without writing an effort, and a `codex`
160
+ launched without `model_reasoning_effort` is the same case. 0.42.9 refused it on
161
+ every lane with `missing-caller-context`. It is now held to its model's
162
+ lowest-scored row (`effort_unverified: true` in the context file,
163
+ `caller_degraded: true` in the decision). Whatever effort really ran scores at
164
+ least that much, so this can only narrow what it may dispatch. A malformed
165
+ effort or a missing model still refuses.
166
+ - **A refusal says which check failed and what to do.** Refused decisions carry
167
+ `failed_gate` (`caller-identity`, `target-transport`, `downward-ceiling`,
168
+ `native-capability`), `reason`, `next_command`, `required_caller_effort`,
169
+ `caller_degraded`, and from dispatch `eligible_lanes` (every lane this caller
170
+ can reach now, with `transport_verified`) and `lane_requirement`.
171
+ - **`omnilane resign` re-signs the overlay after a CLI update.**
172
+ `omnilane resign [--check] [--vendor V] [--approve V] [--record-signers] [--allow-shrink] [--no-smoke] [--json]`
173
+ finds what changed (including a CLI installed *beside* its old file, which the
174
+ hash check never saw), re-probes only that vendor into a staging root, loads
175
+ the staged overlay the way dispatch does, replaces the live file atomically
176
+ with a backup, sends one real dispatch per re-probed vendor, and restores the
177
+ backup if that fails. It is not a rubber stamp: a changed executable is
178
+ re-probed **unattended** only when it carries the code-signing team the overlay
179
+ recorded and sits in the same install location. An adhoc or unsigned binary, a
180
+ new signer, a new directory, or an overlay that recorded no signer stop at exit
181
+ 20 with the exact `--approve` line for the operator. A selector that was
182
+ verified and fails this time keeps its old pin unless `--allow-shrink`.
183
+ `--record-signers` is the operator adopting the signers of what the overlay
184
+ already pins. Exit codes: 0 done or nothing to do, 10 drift (`--check`), 20
185
+ operator needed or a vendor held, 30 rolled back, 2 no overlay configured.
186
+ - **The assistant's own sub-agents, without an external CLI.**
187
+ `omnilane native-context` writes the capability file for the harness it runs
188
+ under from the identity `whoami` reads, so the native path no longer needs a
189
+ hand-written file. `omnilane route --inherit` plans a worker that the host
190
+ spawns with no model and no effort argument: it runs the caller's own runtime,
191
+ so it cannot be an upward dispatch, needs no vendor CLI and no overlay, works
192
+ for an effort-unverified caller, has no CLI fallback, refuses every CLI-only
193
+ lifecycle, and is marked `satisfies_lane_target: false` — never reported as the
194
+ lane's target model. When no identity reaches the gate at all, the capability
195
+ file's `vendor` and `current_model` stand as the host's statement
196
+ (`native-inherited-unverified-caller`, `caller_identity_verified: false`, no
197
+ ceiling, no child context; `omnilane native-context --vendor V --model M`);
198
+ completion is still checked against them. Lane dispatch is unchanged: without
199
+ an identity it is refused. Dispatch now says when a same-vendor target went out
200
+ through the CLI only because no capability file was given.
201
+ - **Codex: run each omnilane command alone.** Codex starts `zsh -lc '<command>'`;
202
+ the shell sets `CODEX_THREAD_ID` and, for one simple command, becomes it. With
203
+ `; echo $?`, `&&`, a pipe or `$(…)` the shell stays between codex and the
204
+ command and the caller cannot be read. The gate is unchanged; the refusal now
205
+ names the process it read and says to run the command by itself. Reproduced
206
+ with `codex exec` 0.155.0 and observed in Codex desktop.
207
+ - **Doctor sees more.** It reports a vendor CLI updated beside its pinned
208
+ executable, names `omnilane resign` as the fix, and with no overlay at all
209
+ warns with the first-install steps instead of passing (it still passes where
210
+ the operator set `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1`).
211
+ - **The skill was rewritten** as a five-step procedure a model follows (who am
212
+ I, pick a lane, dispatch, if refused, collect and verify), with every refusal
213
+ mapped to an action. Overlay maintenance moved to `docs/transport-overlay.md`.
214
+ The README gained a full "let your AI assistant drive omnilane" walkthrough.
215
+
216
+ ### Added
217
+
218
+ - `omnilane resign`, `omnilane native-context`, `omnilane route --inherit`.
219
+ - `scripts/lib/resign.py`, `scripts/lib/cli_provenance.py` (the signer check),
220
+ `scripts/lib/aa_lanes.py` (`eligible_lanes`), `scripts/lib/native_context.py`.
221
+ - `scripts/lib/probe_sweep.py` derives all 55 probe commands from
222
+ `build_overlay.py` and the frozen registry, reports an unauthenticated CLI as
223
+ `unprobeable` instead of recording "not logged in" as a finding, refuses
224
+ keychain-backed CLIs outside a desktop session, and retries one transient
225
+ provider error once.
226
+ - Decision codes `native-inherited-allowed`, `native-inherited-unverified-caller`,
227
+ `native-inherit-unavailable`, `inherit-requires-model-caller`,
228
+ `invalid-degraded-caller`.
229
+ - Overlay evidence for CLI executables records `codesign` facts.
230
+ - `release-audit` checks `runner-pins-current` / `runner-pins-stale`: a release
231
+ whose `scripts/runners/*.sh` no longer match the releasing host's overlay fails,
232
+ which is the mistake 0.42.8 shipped with.
233
+ - `docs/transport-overlay.md`.
234
+
235
+ ### Changed
236
+
237
+ - Caller-context files accept the optional key `effort_unverified: true`; the
238
+ gate refuses it on any row above the model's floor.
239
+ - Native capability files accept the optional keys `inherits_caller_runtime` and
240
+ `caller_identity_verified`. `omnilane jobs status` shows `inherit`,
241
+ `caller_identity_verified` and `satisfies_lane_target` for inherited jobs.
242
+ - `build_overlay.py` resolves the repository from its own location, takes
243
+ `--source`, and lists a vendor with no evidence as unproven instead of aborting.
244
+ - A `codex-code-mode-host` between codex and a command is skipped when looking
245
+ for the process that carries `CODEX_THREAD_ID`.
246
+
247
+ ### Verified, and not
248
+
249
+ - 127 test groups pass; `release-audit --target 0.43.0` passes.
250
+ - Real runs on macOS: re-signing with an automatic rollback; a provider refusing
251
+ probes (old pins kept); **an unattended re-sign of a genuine Codex self-update
252
+ 0.155.0 → 0.155.1** (same signer, no `--approve`, 23 of 23 mappings kept, real
253
+ dispatch answered, exit 0); full `--inherit` cycles in Claude Code and in Codex
254
+ desktop, with a verified and with an unverified caller.
255
+ - Not verified: `--inherit` inside Grok Build; effort inheritance in Grok Build;
256
+ any sub-agent tool in Antigravity (`agy` 1.2.7 shows none); the example macOS
257
+ LaunchAgent in the README. In Claude Code, effort inheritance rests on Anthropic's
258
+ documentation, because a sub-agent cannot see its own effort.
259
+ - Limits: the signer check uses macOS code signatures, so on Linux every changed
260
+ CLI stops for `--approve`. A binary with no real signature, such as a locally
261
+ patched CLI, always stops for `--approve`. Degrading a caller lets it dispatch
262
+ what it may; it does not make an expensive lane reachable.
263
+
9
264
  ## [0.42.9] - 2026-09-13
10
265
 
11
266
  ### Fixed
@@ -1069,7 +1324,11 @@ work to the wrong model, and records the evidence behind the shipped defaults.
1069
1324
  - Initial shared routing table, cross-vendor dispatcher, runners, installer,
1070
1325
  and baseline lint fixes.
1071
1326
 
1072
- [Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.42.9...HEAD
1327
+ [Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.45.0...HEAD
1328
+ [0.45.0]: https://github.com/Seraphim0916/omnilane/compare/v0.44.0...v0.45.0
1329
+ [0.44.0]: https://github.com/Seraphim0916/omnilane/compare/v0.43.1...v0.44.0
1330
+ [0.43.1]: https://github.com/Seraphim0916/omnilane/compare/v0.43.0...v0.43.1
1331
+ [0.43.0]: https://github.com/Seraphim0916/omnilane/compare/v0.42.9...v0.43.0
1073
1332
  [0.42.9]: https://github.com/Seraphim0916/omnilane/compare/v0.42.8...v0.42.9
1074
1333
  [0.42.8]: https://github.com/Seraphim0916/omnilane/compare/v0.42.7...v0.42.8
1075
1334
  [0.42.7]: https://github.com/Seraphim0916/omnilane/compare/v0.42.6...v0.42.7
package/README.ja.md CHANGED
@@ -48,36 +48,133 @@ Cursor、Gemini CLI** など——を使っていますよね。どれも一つ
48
48
 
49
49
  ## ⚡ 60 秒クイックスタート
50
50
 
51
- **一番早い方法——npm でインストール:**
51
+ ターミナルの前にいる人間であれば、すぐにディスパッチできます。
52
+
53
+ **1. インストール。**
52
54
 
53
55
  ```bash
54
- npm i -g omnilane # CLI をインストール
55
- export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 呼び出しているのは人間の操作者
56
- omnilane route hardest-coding "auth トークン更新テストの不安定さを修正"
57
- omnilane doctor # 使える AI CLI / キーを確認
58
- omnilane ui start # 任意:ブラウザでジョブをライブ表示
56
+ npm i -g omnilane
59
57
  ```
60
58
 
61
- **またはリポジトリを clone**(ルーティングテーブルとカスタマイズ用スキルが手に入る):
59
+ またはリポジトリをクローンします。カスタマイズできるルーティングテーブルとスキルも手に入ります。
62
60
 
63
61
  ```bash
64
62
  git clone https://github.com/Seraphim0916/omnilane && cd omnilane
65
- ./install.sh # CLI を検出、スキルを接続、あなたの言語で対話
66
- export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 呼び出しているのは人間の操作者
67
- omnilane route hardest-coding "auth トークン更新テストの不安定さを修正"
63
+ ./install.sh # finds your CLIs, links the skill, speaks your language
64
+ ```
65
+
66
+ **2. 手元にあるものを確認する。** `doctor` は omnilane が到達できるモデル CLI と API キーを一覧し、実際に何が動くのかを教えてくれます。何も変更しません。
67
+
68
+ ```bash
69
+ omnilane doctor
70
+ omnilane list # the routing table this machine resolves
71
+ ```
72
+
73
+ **3. 自分がオペレーターだと宣言してからディスパッチする。**
74
+
75
+ ```bash
76
+ export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1
77
+ omnilane route hardest-coding "fix the flaky auth token refresh"
78
+ omnilane ui start # optional: watch jobs live in your browser
79
+ ```
80
+
81
+ > **なぜ export が必要なのか。** omnilane はディスパッチのたびに「依頼している側の能力スコア」と照合するため、誰が依頼しているのかを示す必要があります。人間は `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1`(または呼び出しごとに `--operator-asserted-human`)で一度宣言すれば済みます。モデルは自分でこれを宣言できません。モデルの身元は、それを起動した CLI から読み取られます。どちらも無い場合、ジョブが作られる前に `missing-caller-context` で拒否されます。
82
+
83
+ 人間が使うだけならここまでで十分です。次の節では、より実用的な構成、つまり AI アシスタント自身にディスパッチさせる方法を説明します。
84
+
85
+ ## 🤖 AI アシスタントに omnilane を運転させる
86
+
87
+ アシスタント(Claude Code、Codex、Grok Build、Antigravity)はスキルファイルを読み、レーンの選び方とディスパッチの方法を学びます。マシンごとに一度、4 ステップです。
88
+
89
+ ### ステップ 1:アシスタントにスキルを渡す
90
+
91
+ `./install.sh` は見つけた CLI すべてにリンクを張ります。手動の場合:
92
+
93
+ | アシスタント | 方法 |
94
+ |---|---|
95
+ | Claude Code | `claude plugin marketplace add <このリポジトリ>` の後に `claude plugin install omnilane@omnilane`(`/route`、`/route-jobs`、完了インボックスも付属)。または `skills/omnilane` を `~/.claude/skills/` にリンク |
96
+ | Codex | `skills/omnilane` を `~/.codex/skills/` にリンク |
97
+ | Grok Build | `grok plugin install <このリポジトリ> --trust` |
98
+ | Antigravity | `agy plugin install <このリポジトリ>`(先に `agy plugin validate <このリポジトリ>` で確認) |
99
+
100
+ ### ステップ 2:「各 CLI が指定したモデルを本当に選ぶ」ことを一度だけ証明する
101
+
102
+ モデルが呼び出し元の場合、ディスパッチできるのはこのマシンが**証明済み**のターゲットだけです。たとえば `codex -m gpt-5.6-sol` が本当に Sol を動かしている、ということです。この証明はローカルファイルで、**トランスポートオーバーレイ(transport overlay)** と呼びます。パッケージには同梱されません。これが無いと、すべてのレーンがモデルの呼び出し元を `runtime-mapping-unverified` で拒否し、`omnilane doctor` は `no overlay configured` と警告します。
103
+
104
+ 通常のデスクトップターミナルで作成してください。(ssh ログインのセッションは、CLI がログインに使うキーチェーンを読めないため、すべてを未ログインと報告します。)
105
+
106
+ ```bash
107
+ cd "$(npm root -g)/omnilane" # or your clone
108
+ ROOT=~/.omnilane/transport-evidence/first-sweep
109
+ python3 scripts/lib/probe_sweep.py --root "$ROOT" # one tiny prompt per selector, about 55 calls
110
+ python3 scripts/lib/build_overlay.py --root "$ROOT"
111
+ cp "$ROOT/transport-contracts.local.json" ~/.omnilane/transport-contracts.local.json
112
+ echo 'export OMNILANE_AA_TRANSPORT_OVERLAY="$HOME/.omnilane/transport-contracts.local.json"' >> ~/.omnilane/local.sh
113
+ omnilane doctor | grep transport-overlay # PASS, with a count per vendor
114
+ ```
115
+
116
+ ログインしていないベンダーは `unprobeable` と報告され、未検証のままになるだけです。他のベンダーは動作します。
117
+
118
+ ### ステップ 3:証明を手作業なしで最新に保つ
119
+
120
+ オーバーレイは各 CLI の実行ファイルをハッシュで固定します。そして **CLI は自分で更新されます**。週に一度ということも珍しくありません。更新後、そのベンダーのレーンはオーバーレイが再署名されるまで拒否されます。`omnilane resign` はこの作業をすべて行います。変わった箇所を見つけ、そのベンダーだけを再プローブし、結果を確認し、差し替え、実際のディスパッチを 1 件送って確かめ、失敗すれば古いファイルに戻します。
121
+
122
+ 何でも再署名するわけではありません。変更された CLI が**無人で**再署名されるのは、記録されているものと同じコード署名チームを持ち、同じ種類のインストール場所にある場合だけです。そこで、受け入れる署名者を一度だけ伝えます。
123
+
124
+ ```bash
125
+ omnilane resign --record-signers # once, right after Step 2
126
+ ```
127
+
128
+ 更新のたびにベンダー CLI を自分でパッチして adhoc で再署名しているなら、それもベンダーごとに一度だけ伝えます。以後は同じインストールディレクトリ内の adhoc な更新も無人で再署名されます。
129
+
130
+ ```bash
131
+ omnilane resign --trust-adhoc claude # 自分で claude を adhoc 署名している場合のみ
132
+ ```
133
+
134
+ あとは毎日実行させます。スケジューラーは何でも構いませんが、必ず**デスクトップのログインセッション内**で動かしてください(CLI にはキーチェーンが必要です)。macOS なら LaunchAgent が使えます。
135
+
136
+ ```bash
137
+ cat > ~/Library/LaunchAgents/dev.omnilane.resign.plist <<'EOF'
138
+ <?xml version="1.0" encoding="UTF-8"?>
139
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
140
+ <plist version="1.0"><dict>
141
+ <key>Label</key><string>dev.omnilane.resign</string>
142
+ <key>ProgramArguments</key><array><string>/bin/zsh</string><string>-lc</string><string>omnilane resign</string></array>
143
+ <key>StartCalendarInterval</key><dict><key>Hour</key><integer>9</integer><key>Minute</key><integer>0</integer></dict>
144
+ <key>StandardOutPath</key><string>/tmp/omnilane-resign.log</string>
145
+ <key>StandardErrorPath</key><string>/tmp/omnilane-resign.log</string>
146
+ </dict></plist>
147
+ EOF
148
+ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/dev.omnilane.resign.plist
68
149
  ```
69
150
 
70
- > **あの export は何のため?** omnilane は呼び出し元自身の能力スコアで各ディスパッチを
71
- > ゲートするため、「誰が依頼しているか」を必ず示す必要があります。端末の前にいる人間は
72
- > `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` を一度設定するか、呼び出しごとに
73
- > `--operator-asserted-human` を付けます。omnilane を動かすモデルは**自分でこれを主張
74
- > できません**。モデルの識別情報は、それを起動した CLI のモデル・effort フラグから自動で
75
- > 読み取られるため、通常のセッションは何も渡す必要がありません。`omnilane whoami` はその
76
- > 識別情報を `--caller-context FILE` として出力します。主張も読み取れる識別情報も無い場合、
77
- > ジョブ生成前に `missing-caller-context` で拒否されます。
151
+ このリリースでは、デスクトップターミナルからの `omnilane resign` を実機で検証しました。Codex の実際の自己更新に対する無人再署名も含みます。上の LaunchAgent は例であり、それ自体は検証していません。`launchctl kickstart gui/$(id -u)/dev.omnilane.resign` で手元のマシンで確認してください。
152
+
153
+ `omnilane resign` の終了コード:
154
+
155
+ | 終了コード | 意味 | あなたがすること |
156
+ |---|---|---|
157
+ | 0 | 変更なし、または変更されたものはすべて再署名済み | 何もしない |
158
+ | 10 | `--check` のみ: 何かが変わった | `omnilane resign` を実行 |
159
+ | 20 | あるベンダーで人の判断が必要: 署名者が新しいか記録が無い、実行ファイルが未署名またはローカルで改変されている、インストール先が変わった、または前回通ったプローブをプロバイダーが今回拒否した | メッセージを読む。「後で再試行」か、確認後に実行すべき `omnilane resign --vendor V --approve V` がそのまま表示される |
160
+ | 30 | 再署名したオーバーレイが実ディスパッチに失敗し、前のものに戻した | 何も壊れていない。ログを読む |
161
+ | 2 | オーバーレイが未設定 | ステップ 2 を行う |
78
162
 
79
- > はじめての方は、まず `omnilane doctor` を実行してください。omnilane が今どのモデル CLI と
80
- > API キーに接続できるかがわかり、実際に何が動くか把握できます。
163
+ 知っておくべき制限が二つあります。署名者の確認は macOS のコード署名を使うため、Linux では CLI が変わるたびに終了コード 20 で止まり `--approve` を求めます。また、正規の署名を持たないバイナリ(ローカルでパッチを当てた CLI など)は必ず承認待ちで止まります。ベンダーとの結び付きを示すものが何も無いからで、それこそがこの確認の目的です。
164
+
165
+ ### ステップ 4:アシスタントの中から試す
166
+
167
+ アシスタントに `omnilane whoami` を実行させてください。自分がどのモデル・どの effort で動いているかと、スコアが返るはずです。続けて小さな仕事を委任させます。「omnilane で triage レーンに、このリポジトリの TODO コメントの数を数えさせて」。
168
+
169
+ 拒否された場合、どの確認で失敗したのか、何をすべきかが拒否メッセージに書かれています。
170
+
171
+ | `failed_gate` | 平たく言うと | 直し方 |
172
+ |---|---|---|
173
+ | `caller-identity` | どのモデルが依頼しているのか omnilane に分からない | `omnilane whoami` をそのツール呼び出しの**唯一のコマンド**として実行させる。特に Codex は `; echo $?`、`&&`、パイプの後ろでは読み取れない |
174
+ | `target-transport` | このマシンがそのターゲットを証明していない、またはその後 CLI が更新された | `omnilane resign`(ステップ 3) |
175
+ | `downward-ceiling` | ターゲットのモデルのスコアが依頼側より高い。モデルは横か下にしか委任できない | 拒否メッセージの `eligible_lanes` から選ぶか、より高い effort でアシスタントを起動する |
176
+
177
+ 既存のスレッドを起こす Codex のオートメーションは effort を記録しません。omnilane はその呼び出し元を拒否する代わりに、そのモデルの最低スコアに制限します。安いレーンはそのまま動き、高いレーンはどの effort なら届くかを教えます。
81
178
 
82
179
  ## 🧭 仕組み
83
180
 
@@ -123,17 +220,17 @@ flowchart LR
123
220
 
124
221
  | レーン | 第一候補 | バックアップ | 用途 |
125
222
  |---|---|---|---|
126
- | 🔥 hardest-coding | Claude Fable 5.1 (max) | GPT-6 Astra (xhigh) → Grok 4.6 → Gemini 3.8 Flash (High) | 最難関の実装、深い根本原因調査、正確性が重要な修正 |
127
- | 🏗️ bulk-mechanical | GPT-5.6 Sol (high) | Gemini 3.8 Flash (High) → Claude Sonnet 5 (high) | リファクタリング、移行、テスト、大規模レビュー——機械的な持久作業 |
128
- | 🧹 triage | GPT-5.6 Luna (high) | Gemini 3.8 Flash (Low) → Claude Haiku 4.5 | 大量スキャン、一次選別 |
129
- | ⚖️ hard-judgment | Claude Fable 5.1 (xhigh) | GPT-6 Astra (xhigh) → Grok 4.6 | アーキテクチャ判断、深い推論、セカンドオピニオン |
130
- | ✒️ taste-final | Claude Fable 5.1 (xhigh) | GPT-6 Astra (xhigh) → Grok 4.6 → Gemini 3.8 Flash (High) | ユーザー向け文章、プロンプト/文書の仕上げ、文体判断 |
131
- | 💬 consult | GPT-6 Astra (xhigh) | Claude Fable 5.1 (xhigh) → Grok 4.6 → Gemini 3.8 Flash (Medium) | 指名モデルへの直接相談。フォールバック防止のため `--vendor` を維持 |
132
- | 🎨 ui-draft | GPT-5.6 Sol (high) | Claude Fable 5.1 (xhigh) → Gemini 3.8 Flash (High) | デザインシステム/参照画像がある場合だけの UI ドラフト |
133
- | 📚 long-context | Gemini 3.8 Flash (Medium) | GPT-5.6 Terra (max) → Claude Opus 5 (medium) | 長文書の抽出と統合。AA-LCR、コスト、スループット順 |
134
- | ⚡ fast-agentic | Gemini 3.8 Flash (Low) | GPT-5.6 Luna (high) → Claude Haiku 4.5 | 高速なマルチステップ agentic ループ、マルチモーダル確認 |
135
- | 📡 live-search | Grok 4.6 | Gemini 3.8 Flash (High) → Claude Sonnet 5 (high) | リアルタイム X/Web 検索とソーシャル文脈 |
136
- | 🚰 coding-overflow | Grok 4.6 | Gemini 3.8 Flash (High) → Kimi K3 → Qwen3 Coder Plus → OpenCode | Codex クォータ不足時の中級コーディング逃がし弁 |
223
+ | 🔥 hardest-coding | GPT-6 Astra (xhigh) | Claude Fable 5.1 (xhigh) → GPT-6 Astra (high) → Claude Fable 5.1 (high) → GPT-6 Astra (medium) → Claude Opus 5 (high) → GPT-6 Astra (low) → GPT-5.6 Sol (xhigh) → Grok 4.7 → Grok 4.6 → Gemini 3.8 Flash (High) | 最難関の実装、深い根本原因調査、正確性が重要な修正 |
224
+ | 🏗️ bulk-mechanical | GPT-6 Astra (low) | GPT-5.6 Sol (high) → Gemini 3.8 Flash (High) → Claude Opus 5 (medium) | リファクタリング、移行、テスト、大規模レビュー——機械的な持久作業 |
225
+ | 🧹 triage | GPT-5.6 Luna (high) | Gemini 3.8 Flash (Low) → Claude Sonnet 5 (low) → Claude Haiku 4.5 | 大量スキャン、一次選別 |
226
+ | ⚖️ hard-judgment | Claude Fable 5.1 (xhigh) | GPT-6 Astra (xhigh) → Claude Opus 5 (max) → GPT-6 Astra (high) → Claude Opus 5 (xhigh) → Claude Opus 5 (high) → Grok 4.7 → Grok 4.6 → Gemini 3.8 Flash (High) | アーキテクチャ判断、深い推論、セカンドオピニオン |
227
+ | ✒️ taste-final | Claude Opus 5 (max) | Claude Fable 5.1 (xhigh) → Claude Opus 5 (xhigh) → Grok 4.7 → GPT-6 Astra (xhigh) → Claude Opus 5 (high) → Grok 4.6 → Gemini 3.8 Flash (High) | ユーザー向け文章、プロンプト/文書の仕上げ、文体判断 |
228
+ | 💬 consult | GPT-6 Astra (xhigh) | Claude Fable 5.1 (xhigh) → Grok 4.7 → Grok 4.6 → Gemini 3.8 Flash (High) | 指名モデルへの直接相談。フォールバック防止のため `--vendor` を維持 |
229
+ | 🎨 ui-draft | GPT-6 Astra (high) | Claude Opus 5 (high) → GPT-6 Astra (low) → Gemini 3.8 Flash (High) | デザインシステム/参照画像がある場合だけの UI ドラフト |
230
+ | 📚 long-context | Claude Opus 5 (high) | Claude Opus 5 (medium) → Claude Opus 5 (low) → GPT-5.6 Terra (max) → Gemini 3.8 Flash (High) | 長文書の抽出と統合。AA-LCR、コスト、スループット順 |
231
+ | ⚡ fast-agentic | GPT-6 Astra (low) | Gemini 3.8 Flash (Medium) → GPT-5.6 Sol (medium) → Claude Opus 5 (low) | 高速なマルチステップ agentic ループ、マルチモーダル確認 |
232
+ | 📡 live-search | Grok 4.7 | Grok 4.6 → Gemini 3.8 Flash (High) → Claude Opus 5 (medium) | リアルタイム X/Web 検索とソーシャル文脈 |
233
+ | 🚰 coding-overflow | Grok 4.7 | Grok 4.6 → Gemini 3.8 Flash (High) → Kimi K3 → Qwen3 Coder Plus → OpenCode | Codex クォータ不足時の中級コーディング逃がし弁 |
137
234
  | 🗳️ arbitrate | off (opt-in vote panel) | — | 重大判断用の内蔵意見パネル。デフォルト無効、`routing.local.yaml` で有効化し、投票者・ラウンドごとに 1 コール |
138
235
 
139
236
  **バックアップ**はチェーンの次の候補——第一候補のベンダー CLI が未インストールの
@@ -170,11 +267,39 @@ flowchart LR
170
267
  - **Claude Code · Opus 5**——自分で実行:hard-judgment(これがデフォルトのレーン)。低いハルシネーション率や価格を優先するときはローカル override で taste-final も担当。最難関コーディング → Fable 5.1 または Sol、bulk → Sol high、long-context/高速ループ → Gemini 3.7 Flash、live-search → Grok。
171
268
  - **Codex · Sol**——自分で実行:hardest-coding、bulk-mechanical、hard-judgment、ui-draft。ディスパッチ:taste-final → Claude、long-context/高速ループ → Gemini 3.7 Flash、live-search → Grok。
172
269
  - **Codex · Terra**——long-context の Codex フォールバックを自分で実行。bulk-mechanical のデフォルトは Sol high に移動。最難関は Sol xhigh、taste → Claude、高速ループ → Gemini 3.7 Flash、live-search → Grok。
173
- - **Grok Build · Grok 4.6**——live-search と coding-overflow を自分で実行し、hardest-coding・hard-judgment・taste-final のフォールバックも兼任。第一候補が使えるときは難しいコーディング/判断/文章を Codex、Claude、Gemini へ送り、API シグネチャと引用事実は検証します。
270
+ - **Grok Build · Grok 4.7 / 4.6**——live-search と coding-overflow を自分で実行し、hardest-coding・hard-judgment・taste-final のフォールバックも兼任。第一候補が使えるときは難しいコーディング/判断/文章を Codex、Claude、Gemini へ送り、API シグネチャと引用事実は検証します。
174
271
  - **Antigravity · Gemini 3.7 Flash**——Medium の long-context/高速ループ、High の bulk/overflow、Low の triage を自分で実行し、High で hardest-coding・taste-final・ui-draft・live-search のフォールバックも兼任。第一候補が使えるときは最難関のコーディング/判断/文章を Codex、Claude へ。
175
272
 
176
273
  </details>
177
274
 
275
+ ## アシスタント自身のサブエージェントを使う
276
+
277
+ omnilane は既定でベンダーのコマンドラインツールに仕事を渡します。仕事をすべきモデルがアシスタント**自身のベンダー**のものである場合、別の CLI を経由するのは回り道です。ログインがもう一つ、プロセスがもう一つ、その CLI が更新されれば壊れる箇所がもう一つ増えます。多くのアシスタントは自分でサブエージェントを起動でき、omnilane はそのための計画を立てられます。方法は二つです。
278
+
279
+ **アシスタントとまったく同じものを動かすワーカー(`--inherit`)。** アシスタントは*モデルも effort も指定せずに*サブエージェントを起動するので、ワーカーは呼び出し元の複製です。複製が本体より強くなることはなく、omnilane のスコア確認が防ごうとしているのはそれだけです。したがってこの経路にはベンダー CLI もトランスポートオーバーレイも不要で、呼び出し元の effort が不明でも、オーバーレイが古くなっていても動きます。
280
+
281
+ ```sh
282
+ omnilane native-context --workdir /absolute/repo --inherits-caller-runtime # prints a capability file
283
+ omnilane route --inherit --native-context /path/printed/above --workdir /absolute/repo triage "Count the TODO comments"
284
+ # -> a PENDING handoff (JSON). The assistant now starts its own sub-agent with no
285
+ # model argument, checks the result, and records it:
286
+ omnilane jobs --json complete-native JOB_ID /absolute/completion.json
287
+ omnilane jobs --json status JOB_ID
288
+ ```
289
+
290
+ 正直な部分: ハンドオフには `satisfies_lane_target: false` と記されます。ここでのレーンは仕事の種類を示すラベルにすぎません。この方法で得た結果は「アシスタント自身のサブエージェント」によるものであり、「hardest-coding のモデル」によるものでは決してありません。呼び出し元より強いモデルを必要とするレーンは、引き続き拒否されます。`--inherits-caller-runtime` は「自分のサブエージェントツールはそう動く」というアシスタント自身の申告であり、omnilane からは観測できません。アシスタントごとに分かっていること:
291
+
292
+ | アシスタント | モデル引数なしのサブエージェント |
293
+ |---|---|
294
+ | Claude Code | メイン会話のモデルを使い、effort はセッションのものを引き継ぐと公式ドキュメントに明記(エージェント定義が指定する場合を除く)。組み込みの general-purpose エージェントで `CLAUDE_CODE_SUBAGENT_MODEL` が未設定のとき成立。本リリースで端から端まで実行済み |
295
+ | Codex | モデルも effort も付けない `collaboration.spawn_agent`。本リリースで端から端まで実行済み |
296
+ | Grok Build | 親のモデルを引き継ぐとドキュメントに明記(同梱の `general-purpose` は `model: inherit`)。effort については記載なし。本リリースでは未実行 |
297
+ | Antigravity | `agy` 1.2.7 にサブエージェントツールが見当たらない。利用不可 |
298
+
299
+ **アシスタントのツールが選択できる特定のモデル。** ツールが実際に受け付けるものを capability ファイルに記述し(`omnilane native-context` の出力から始め、正確なモデルと effort の組ごとに行を追加)、通常の `omnilane route` に `--native-context FILE` を渡します。omnilane がサブエージェントを使うのは、ある行が完全に一致したときだけです。モデル、effort、モード、workdir、ツール、分離方式、ライフサイクルのすべてです。同じベンダーは同じモデルではなく、インストール済みの CLI から推測することもありません。`--executor native` はフォールバックせず失敗し、`--executor cli` は外部 CLI を強制します。ファイルが無いというだけで同一ベンダーのターゲットが CLI を経由した場合、ディスパッチはそれを明示するようになりました。
300
+
301
+ どちらの場合も、サブエージェントはアシスタントのツールとファイルシステムを共有します。OS レベルのサンドボックスは無く、`advise`/`work` は意図であって強制ではありません。バックグラウンド、常駐、名前付きスレッド、複数ラウンド、投票、`sysops` は CLI 経路のままです。プロトコル処理には Python 3.9 以上が必要です。スキーマ、完了ファイル、エージェントの再利用とキャンセル: [docs/native-executor.md](docs/native-executor.md)。
302
+
178
303
  ## 🖥️ Live Board
179
304
 
180
305
  すべてのディスパッチは——フォアグラウンドでも `--background` でも——ディスク上の
@@ -577,6 +702,39 @@ work の別名ではありません。サービス管理など、work の境界
577
702
 
578
703
  ## 📜 リリース履歴
579
704
 
705
+ ## v0.45.0 の新機能
706
+
707
+ - **アップグレード後に `omnilane resign` を一度実行してください。** スコアのレジストリが新しいスナップショットに移り、トランスポートオーバーレイはスナップショットに紐づいています。オーバーレイを再構築するまで、モデル呼び出し元はすべてのレーンで `transport overlay snapshot mismatch` として拒否されます。
708
+ - **スコアは Artificial Analysis Intelligence Index v4.3.2 に準拠。** v4.2 と v4.3.2 は別の尺度で、差も一様ではありません(Fable 5.1 max 57 → 53、Grok 4.6 high 51 → 44、Sol high 48 → 42)。そのため 1 行を追加するのではなく全行を再採点しました。上限も変わります。Fable 5.1 max・Fable 5.1 xhigh・Astra max は 53 で並び、これまで `hard-judgment` で何にも届かなかった中程度 effort のコントローラーも届くようになりました。`scripts/aa_rebaseline.py` は保存した AA の抽出ファイルからレジストリを再構築するので、次の指数改訂は再実行で済みます。
709
+ - **レーン表は手直しではなく書き直しです。** 各レーンはまず「この種の作業に合う測定」を定め、候補をその測定で強い順に並べます。`hardest-coding` は高難度のターミナルコーディング(Terminal-Bench 4.0、最上位モデルでもまだ飽和していないコーディング評価)、`hard-judgment` は専門家レベルの推論と文書の分析品質の採点、`taste-final` は文書の提示品質の採点、`fast-agentic` は自動化の正確さと 1 ステップあたりの時間、`long-context` はより難しい方の長文脈評価、`ui-draft` は画像理解を見ます。8 つのレーンで第一候補が変わりました。`hardest-coding` は Astra (xhigh)、`bulk-mechanical` と `fast-agentic` は Astra (low)、`ui-draft` は Astra (high)、`taste-final` は Opus 5 (max)、`long-context` は Opus 5 (high)、`coding-overflow` は `live-search` と同じく Grok 4.7 が先頭です。どのチェーンもスコアの範囲を順に下っていくので、コントローラーの上限がどこにあっても、最初に届く候補が届く中で最良の候補になります。Fable max と Astra max はどのチェーンにも入っていません。xhigh が同等かそれ以上で、コストは大幅に小さいためです。数値は `docs/model-capabilities-2026-09.md` にあります。
710
+ - **Grok が担当するすべてのレーンに Grok 4.7 を追加**し、Grok 4.6 の前に置きました。4.6 はその後ろに残ります。レーンはこのホストで未検証の候補を飛ばすため、`resign` が 4.7 をプローブするまでは 4.6 が処理します。`--vendor grok` を付けた場合は後ろへ進みません。それまでは `--model grok-4.6` を指定してください。
711
+ - **機能していなかったフォールバックを修正。** `claude claude-sonnet-5 high` は旧レジストリでは決してディスパッチできませんでした。プローブ後は解決されます。
712
+ - アップグレード: `npm i -g omnilane@0.45.0`、続けて `omnilane resign`。Grok 4.7 を使うには、再署名時に `grok` CLI がログイン済みである必要があります。
713
+
714
+ ## v0.44.0 の新機能
715
+
716
+ - **自分でパッチした CLI も無人で再署名されます。** 更新のたびにベンダー CLI をパッチして adhoc で再署名するローカルの手順がある場合、これまでは署名者チェックがそのような更新をすべて `--approve` 待ちで止めていました。ベンダーごとに一度 `omnilane resign --trust-adhoc VENDOR` を実行すれば、同じインストールディレクトリ内の adhoc な更新は同一署名者の更新と同じく毎日の `omnilane resign` で自動的に再署名されます。未署名の実行ファイル、別ディレクトリの adhoc、ほかのベンダーは引き続き停止して確認を求めます。信頼はオーバーレイに記録され、以後どのベンダーの再署名でも保持され、モデルが実行しない運用者の操作です。4 ベンダーすべてに対応。
717
+ - **ログイン期限切れは「再試行」ではなく「ログインしてください」と表示。** `Failed to authenticate`、`OAuth session expired`、`Invalid API key`、`Unauthorized`、`401` はそのベンダーをプローブ不能として扱い、保留メッセージは先にログインするよう案内します。
718
+ - アップグレード: `npm i -g omnilane@0.44.0`。0.42.x からの場合は `omnilane resign --record-signers` も一度実行してください(0.43.0 の説明を参照)。
719
+
720
+ ## v0.43.1 の新機能
721
+
722
+ 0.43.0 ではなくこちらをインストールしてください。0.43.0 では `build_overlay.py` と `probe.py` が Python 3.9 でインポートに失敗し、そのバージョンでは初回インストールのオーバーレイ作成と `omnilane resign` が動きませんでした。ほかに変更はなく、下の 0.43.0 の説明はすべてそのまま当てはまります。アップグレード: `npm i -g omnilane@0.43.1` の後、一度だけ `omnilane resign --record-signers`。
723
+
724
+ ## v0.43.0 の新機能
725
+
726
+ 10 日間で 0.42.x はすべてのモデル呼び出し元を 4 回拒否しました。いずれも omnilane が制御できない事実が原因です。ランチャーの名前変更、再署名なしで変更された runner スクリプト、同じ週に 4 つのベンダー CLI が自己更新、effort を記録しない Codex オートメーション。どれも「何もディスパッチできない」になりました。このリリースは、それぞれをより狭く、説明のつく結果に変え、もっともよくあるものは自動で修復します。
727
+
728
+ - **ベンダー CLI が更新された? `omnilane resign`。** 変わった箇所を見つけ、そのベンダーだけを再プローブし、結果を確認し、差し替え、実ディスパッチ 1 件で確かめ、失敗すれば古いオーバーレイに戻します。新しい実行ファイルが同じコード署名チームを持ち同じ場所にある場合だけ**無人で**再署名し、それ以外は実行すべき `--approve` コマンドを表示して止まります。`omnilane resign --record-signers` を一度実行し、`omnilane resign` を毎日スケジュールすれば、CLI の更新はあなたの問題ではなくなります。Codex の実際の自己更新(0.155.0 → 0.155.1)で検証済み: 承認なし、マッピングはすべて維持、終了コード 0。
729
+ - **拒否がモデルに次の行動を伝える。** 拒否されたディスパッチはすべて `failed_gate`、`reason`、`next_command`、`required_caller_effort`、そして `eligible_lanes`(その呼び出し元がいま*届く*レーン)を持ちます。
730
+ - **effort の記録が無い場合は拒否ではなく範囲を絞る。** Codex のハートビートオートメーションは、すべてのレーンで拒否される代わりに、そのモデルの最低スコアに制限されます。安いレーンは動き続け、高いレーンは必要な effort を示します。
731
+ - **アシスタント自身のサブエージェント。** `omnilane native-context` が、これまで手書きだった capability ファイルを生成します。`omnilane route --inherit` は呼び出し元の複製であるワーカーを計画します。外部 CLI なし、オーバーレイなし、呼び出し元を識別できないときでも動作し、そのレーンのターゲットモデルでは*ない*と正直に記されます。Claude Code と Codex デスクトップで端から端まで実行済み。
732
+ - **Codex: ツール呼び出し 1 回につき omnilane コマンドは 1 つ。** `omnilane whoami; echo $?` は識別できず、`omnilane whoami` 単独なら識別できます。拒否メッセージがそう案内するようになりました。
733
+ - **doctor は場所が変わった CLI を検出**(新しい版が古いファイルの隣に入る場合)し、オーバーレイがまったく無い場合は手順付きで警告します。
734
+ - **スキルとチュートリアルを書き直し。** スキルはモデルが順にたどる 5 ステップの手順になり、この README はアシスタントに omnilane を運転させるまでを順に案内します。
735
+ - **制限。** 無人再署名は macOS のコード署名に依存します。Linux、および未署名またはローカルで改変された CLI では、更新のたびに `--approve` を求めます。`--inherit` は Grok Build 内では未実行で、Antigravity はサブエージェントツールを提供していません。詳細は [CHANGELOG](CHANGELOG.md)。
736
+ - **アップグレード。** `npm i -g omnilane@0.43.0` の後、一度だけ: `omnilane resign --record-signers`。
737
+
580
738
  ## v0.42.9 の新機能
581
739
 
582
740
  - **ランチャー経由の Codex デスクトップ。** ChatGPT.app が codex-profile-switch 経由で