omnilane 0.42.1 → 0.42.4
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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +53 -1
- package/README.ja.md +30 -0
- package/README.ko.md +30 -0
- package/README.md +31 -0
- package/README.zh-CN.md +30 -0
- package/README.zh-TW.md +30 -0
- package/VERSION +1 -1
- package/docs/release-notes-0.42.4.md +47 -0
- package/package.json +2 -2
- package/plugin.json +1 -1
- package/routing.yaml +7 -7
- package/scripts/lib/aa_policy.py +14 -5
- package/scripts/runners/run-grok.sh +12 -2
- package/skills/omnilane/SKILL.md +47 -1
- package/docs/release-notes-0.42.1.md +0 -32
|
@@ -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
|
+
"version": "0.42.4"
|
|
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.
|
|
16
|
+
"version": "0.42.4",
|
|
17
17
|
"category": "development",
|
|
18
18
|
"keywords": [
|
|
19
19
|
"routing",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnilane",
|
|
3
|
-
"version": "0.42.
|
|
3
|
+
"version": "0.42.4",
|
|
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,55 @@ semantic version tags.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.42.4] - 2026-09-07
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- The 60-second start in all five READMEs ran `omnilane route` with no caller
|
|
14
|
+
identity, so a new user following it was refused with `missing-caller-context`
|
|
15
|
+
and the READMEs said nothing about the fix. The quickstart now asserts the
|
|
16
|
+
human operator once with `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1`, and a note
|
|
17
|
+
explains why a dispatch must say who is asking, what a model caller passes
|
|
18
|
+
instead, and what happens when neither is present.
|
|
19
|
+
- The `dispatch.sh` synopsis in the command reference gains
|
|
20
|
+
`[--caller-context FILE | --operator-asserted-human]`.
|
|
21
|
+
|
|
22
|
+
0.42.3 documented this inside the dispatch skill but left the user-facing
|
|
23
|
+
quickstart unchanged, which is the path a new install actually takes.
|
|
24
|
+
|
|
25
|
+
## [0.42.3] - 2026-09-07
|
|
26
|
+
|
|
27
|
+
### Documentation
|
|
28
|
+
|
|
29
|
+
- The dispatch quick reference now shows `--caller-context FILE` in the command
|
|
30
|
+
signature and states that a model caller without it is refused with
|
|
31
|
+
`missing-caller-context` before a job exists.
|
|
32
|
+
- The frozen exact-AA downward gate section gains a complete caller-context
|
|
33
|
+
example and says to build the file before the first dispatch rather than after
|
|
34
|
+
a refusal.
|
|
35
|
+
- New guidance for a harness that names a model but no effort: read the exact
|
|
36
|
+
flags from the launching process by walking your own ancestor chain, matching
|
|
37
|
+
the chain rather than the first same-named process on the host. Declaring the
|
|
38
|
+
lowest-scoring row is documented as the fallback when that yields nothing, not
|
|
39
|
+
as the first move, because an unnecessarily low ceiling silently closes lanes.
|
|
40
|
+
- `missing-caller-context` and `runtime-mapping-unverified` are now distinguished
|
|
41
|
+
with the fix for each, including the warning that the second is never resolved
|
|
42
|
+
by editing the frozen registry whose SHA-256 is pinned in `aa_policy.py`.
|
|
43
|
+
|
|
44
|
+
No routing, scoring, gate, or runner behaviour changes in this release.
|
|
45
|
+
|
|
46
|
+
## [0.42.2] - 2026-09-07
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- Pass explicit Grok effort through `--reasoning-effort` instead of silently discarding it. Accept the CLI's `low`, `medium`, `high`, and `xhigh` selectors; reject invalid values before starting the provider.
|
|
51
|
+
- Require a verified `cli_reasoning_effort` transport contract with the exact CLI flag before admitting scored Grok targets. Host-local overlays retain their host, snapshot, exact identity, and evidence-hash checks; frozen AA scores and the approved registry SHA remain unchanged.
|
|
52
|
+
- Make Grok 4.6 routing defaults explicitly `high`. Missing or stale mappings still fail closed, and explicit effort is rejected on the unsupported live ACP path.
|
|
53
|
+
|
|
54
|
+
### Documentation
|
|
55
|
+
|
|
56
|
+
- Document the distinction between request-selector verification and upstream model identity, and the local overlay refresh required when the CLI or runner changes.
|
|
57
|
+
|
|
9
58
|
## [0.42.1] - 2026-09-07
|
|
10
59
|
|
|
11
60
|
### Fixed
|
|
@@ -837,7 +886,10 @@ work to the wrong model, and records the evidence behind the shipped defaults.
|
|
|
837
886
|
- Initial shared routing table, cross-vendor dispatcher, runners, installer,
|
|
838
887
|
and baseline lint fixes.
|
|
839
888
|
|
|
840
|
-
[Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.42.
|
|
889
|
+
[Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.42.4...HEAD
|
|
890
|
+
[0.42.4]: https://github.com/Seraphim0916/omnilane/compare/v0.42.3...v0.42.4
|
|
891
|
+
[0.42.3]: https://github.com/Seraphim0916/omnilane/compare/v0.42.2...v0.42.3
|
|
892
|
+
[0.42.2]: https://github.com/Seraphim0916/omnilane/compare/v0.42.1...v0.42.2
|
|
841
893
|
[0.42.1]: https://github.com/Seraphim0916/omnilane/compare/v0.42.0...v0.42.1
|
|
842
894
|
[0.42.0]: https://github.com/Seraphim0916/omnilane/compare/v0.41.1...v0.42.0
|
|
843
895
|
[0.41.1]: https://github.com/Seraphim0916/omnilane/compare/v0.40.0...v0.41.1
|
package/README.ja.md
CHANGED
|
@@ -52,6 +52,7 @@ Cursor、Gemini CLI** など——を使っていますよね。どれも一つ
|
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
54
|
npm i -g omnilane # CLI をインストール
|
|
55
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 呼び出しているのは人間の操作者
|
|
55
56
|
omnilane route hardest-coding "auth トークン更新テストの不安定さを修正"
|
|
56
57
|
omnilane doctor # 使える AI CLI / キーを確認
|
|
57
58
|
omnilane ui start # 任意:ブラウザでジョブをライブ表示
|
|
@@ -62,9 +63,17 @@ omnilane ui start # 任意:ブラウザでジ
|
|
|
62
63
|
```bash
|
|
63
64
|
git clone https://github.com/Seraphim0916/omnilane && cd omnilane
|
|
64
65
|
./install.sh # CLI を検出、スキルを接続、あなたの言語で対話
|
|
66
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 呼び出しているのは人間の操作者
|
|
65
67
|
omnilane route hardest-coding "auth トークン更新テストの不安定さを修正"
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
> **あの export は何のため?** omnilane は呼び出し元自身の能力スコアで各ディスパッチを
|
|
71
|
+
> ゲートするため、「誰が依頼しているか」を必ず示す必要があります。端末の前にいる人間は
|
|
72
|
+
> `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` を一度設定するか、呼び出しごとに
|
|
73
|
+
> `--operator-asserted-human` を付けます。omnilane を動かすモデルは**自分でこれを主張
|
|
74
|
+
> できません**。代わりに正確なベンダー・モデル・effort を持つ `--caller-context FILE` を
|
|
75
|
+
> 渡します。どちらも無い場合、ジョブ生成前に `missing-caller-context` で拒否されます。
|
|
76
|
+
|
|
68
77
|
> はじめての方は、まず `omnilane doctor` を実行してください。omnilane が今どのモデル CLI と
|
|
69
78
|
> API キーに接続できるかがわかり、実際に何が動くか把握できます。
|
|
70
79
|
|
|
@@ -292,6 +301,7 @@ omnilane ui stop # Live UI を停止
|
|
|
292
301
|
omnilane doctor [--json] # ルーティングとローカル実行環境を読み取り専用で診断
|
|
293
302
|
dispatch.sh [--background] [--dry-run] [--thread NAME] [--mode advise|work|sysops] [--workdir DIR]
|
|
294
303
|
[--vendor V] [--model M] [--effort E] [--timeout SEC] [--job-timeout SEC]
|
|
304
|
+
[--caller-context FILE | --operator-asserted-human] # who is asking
|
|
295
305
|
LANE "TASK" # "-" で stdin から読む
|
|
296
306
|
dispatch.sh [--json] --list [--json]
|
|
297
307
|
dispatch.sh [--json] --explain LANE [--json] # 候補ごとの決定理由をオフライン表示
|
|
@@ -533,6 +543,26 @@ work の別名ではありません。サービス管理など、work の境界
|
|
|
533
543
|
|
|
534
544
|
## 📜 リリース履歴
|
|
535
545
|
|
|
546
|
+
## v0.42.4 の新機能
|
|
547
|
+
|
|
548
|
+
- **クイックスタートが実際に動くようになりました。** `omnilane route` は「誰が依頼しているか」を必要としますが、60 秒クイックスタートにその記載が無く、新規インストールでは案内無しに `missing-caller-context` で拒否されていました。今は `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` で人間の操作者を一度宣言し、モデル呼び出し元が代わりに渡すものも説明します。
|
|
549
|
+
- **コマンドリファレンス。** `dispatch.sh` の書式に `[--caller-context FILE | --operator-asserted-human]` を追加しました。
|
|
550
|
+
|
|
551
|
+
## v0.42.3 の新機能
|
|
552
|
+
|
|
553
|
+
- **ドキュメントのみの更新。** ルーティング、スコア、ゲート、ランナーの動作は変更していません。
|
|
554
|
+
- **`--caller-context` をクイックリファレンスに明記。** ディスパッチのコマンド書式に追加し、モデル呼び出し元がこれを渡さない場合はジョブ生成前に `missing-caller-context` で拒否されることを明示しました。
|
|
555
|
+
- **caller-context の完全な例。** 凍結 exact-AA 下方ゲートの節に、そのまま使える JSON 例を追加し、拒否されてからではなく最初のディスパッチ前に作成するよう記載しました。
|
|
556
|
+
- **effort は推測せず調べる。** ハーネスがモデル名のみで effort を示さない場合、自分の祖先プロセス連鎖をたどって正確なフラグを読み取ります。同名プロセスの先頭ではなく連鎖を照合してください。最低スコア行の宣言は取得できなかった場合の代替であり最初の手段ではありません。不必要に低い上限はレーンを黙って閉じます。
|
|
557
|
+
- **二つの拒否コード、二つの対処。** `missing-caller-context` はファイル未指定、`runtime-mapping-unverified` は対象にホストローカルの検証済みセレクタが無いことを意味し、実証拠に基づく `--transport-overlay` 項目で解決します。凍結レジストリの編集では決して解決しません。
|
|
558
|
+
- **アップグレード。** npm 公開後に `npm i -g omnilane@0.42.3` を実行します。既存のリポジトリシンボリックリンク導入はチェックアウトを更新し `omnilane --version` を確認すれば、再インストールは不要です。
|
|
559
|
+
|
|
560
|
+
## v0.42.2 の新機能
|
|
561
|
+
|
|
562
|
+
- **Grok の推論強度を CLI に渡します。** 明示的な `low`、`medium`、`high`、`xhigh` は `--reasoning-effort` で渡され、Grok 4.6 の既定ルートは `high` を選択します。
|
|
563
|
+
- **証拠に基づくローカル対応付け。** ホストローカルの overlay で正確な CLI セレクター契約を検証し、固定 AA スコアや承認済み registry SHA は変更しません。対応付けの欠落・誤りは引き続き拒否し、live ACP の明示的な強度指定も検証完了まで拒否します。
|
|
564
|
+
- **更新。** npm 公開後に `npm i -g omnilane@0.42.2` を実行します。既存の repo-symlink インストールは checkout を更新し、再インストールせずに `omnilane --version` を確認できます。
|
|
565
|
+
|
|
536
566
|
## v0.42.1 の新機能
|
|
537
567
|
|
|
538
568
|
- **CI フィクスチャの修復。** 完全な Python discovery では、旧 routing/Grok readiness テストに synthetic-human caller を明示します。production の missing-identity 拒否、承認済み registry SHA、下方向スコア検査、retry lineage、skip assertion は変更しません。
|
package/README.ko.md
CHANGED
|
@@ -51,6 +51,7 @@ Gemini CLI** 같은——를 쓰고 계시죠. 각각은 하나의 모델 계열
|
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
53
|
npm i -g omnilane # CLI 설치
|
|
54
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 호출자는 모델이 아닌 사람 운영자
|
|
54
55
|
omnilane route hardest-coding "간헐적으로 실패하는 auth 토큰 갱신 테스트 수정"
|
|
55
56
|
omnilane doctor # 사용 가능한 AI CLI / 키 확인
|
|
56
57
|
omnilane ui start # 선택: 브라우저에서 잡을 실시간 확인
|
|
@@ -61,9 +62,17 @@ omnilane ui start # 선택: 브라우저에
|
|
|
61
62
|
```bash
|
|
62
63
|
git clone https://github.com/Seraphim0916/omnilane && cd omnilane
|
|
63
64
|
./install.sh # CLI 감지, 스킬 연결, 당신의 언어로 대화
|
|
65
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 호출자는 모델이 아닌 사람 운영자
|
|
64
66
|
omnilane route hardest-coding "간헐적으로 실패하는 auth 토큰 갱신 테스트 수정"
|
|
65
67
|
```
|
|
66
68
|
|
|
69
|
+
> **그 export 는 왜 필요한가요?** omnilane 은 호출자 자신의 능력 점수로 모든 디스패치를
|
|
70
|
+
> 게이트하므로, 디스패치는 «누가 요청하는지»를 반드시 밝혀야 합니다. 터미널 앞의 사람은
|
|
71
|
+
> `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` 을 한 번 설정하거나 호출마다
|
|
72
|
+
> `--operator-asserted-human` 을 붙입니다. omnilane 을 구동하는 모델은 **스스로 이를 주장할
|
|
73
|
+
> 수 없으며**, 대신 정확한 벤더·모델·effort 를 담은 `--caller-context FILE` 을 전달합니다.
|
|
74
|
+
> 둘 다 없으면 잡 생성 전에 `missing-caller-context` 로 거부됩니다.
|
|
75
|
+
|
|
67
76
|
> 처음이신가요? 먼저 `omnilane doctor` 를 실행하세요. omnilane 이 지금 어떤 모델 CLI 와
|
|
68
77
|
> API 키에 접근할 수 있는지 알려 주어, 실제로 무엇이 실행될지 파악할 수 있습니다.
|
|
69
78
|
|
|
@@ -284,6 +293,7 @@ omnilane ui stop # Live UI 중지
|
|
|
284
293
|
omnilane doctor [--json] # 라우팅과 로컬 실행 환경을 읽기 전용으로 진단
|
|
285
294
|
dispatch.sh [--background] [--dry-run] [--thread NAME] [--mode advise|work|sysops] [--workdir DIR]
|
|
286
295
|
[--vendor V] [--model M] [--effort E] [--timeout SEC] [--job-timeout SEC]
|
|
296
|
+
[--caller-context FILE | --operator-asserted-human] # who is asking
|
|
287
297
|
LANE "TASK" # "-" 는 stdin 에서 읽기
|
|
288
298
|
dispatch.sh [--json] --list [--json]
|
|
289
299
|
dispatch.sh [--json] --explain LANE [--json] # 후보별 라우팅 결정을 오프라인 설명
|
|
@@ -518,6 +528,26 @@ work 는 지정한 디렉터리 안의 변경만 허용하며 모델 연결은
|
|
|
518
528
|
|
|
519
529
|
## 📜 릴리스 기록
|
|
520
530
|
|
|
531
|
+
## v0.42.4 새 기능
|
|
532
|
+
|
|
533
|
+
- **퀵스타트가 실제로 동작합니다.** `omnilane route` 는 «누가 요청하는지»를 알아야 하지만 60초 시작에 그 내용이 없어, 새 설치에서는 안내 없이 `missing-caller-context` 로 거부되었습니다. 이제 `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` 로 사람 운영자를 한 번 선언하며, 모델 호출자가 대신 전달할 것도 설명합니다.
|
|
534
|
+
- **명령 참조.** `dispatch.sh` 서식에 `[--caller-context FILE | --operator-asserted-human]` 을 추가했습니다.
|
|
535
|
+
|
|
536
|
+
## v0.42.3 새 기능
|
|
537
|
+
|
|
538
|
+
- **문서 전용 업데이트.** 라우팅, 점수, 게이트, 러너 동작은 변경되지 않았습니다.
|
|
539
|
+
- **`--caller-context` 를 빠른 참조에 명시.** 디스패치 명령 서식에 추가했고, 모델 호출자가 이를 전달하지 않으면 작업 생성 전에 `missing-caller-context` 로 거부된다는 점을 명시했습니다.
|
|
540
|
+
- **완전한 caller-context 예시.** 동결된 exact-AA 하향 게이트 절에 그대로 사용할 수 있는 JSON 예시를 추가하고, 거부된 뒤가 아니라 첫 디스패치 전에 파일을 만들도록 기술했습니다.
|
|
541
|
+
- **effort 는 추측하지 말고 확인.** 하네스가 모델명만 제공하고 effort 를 주지 않으면, 자신의 조상 프로세스 체인을 따라 정확한 플래그를 읽습니다. 호스트의 동일 이름 첫 프로세스가 아니라 체인을 대조해야 합니다. 최저 점수 행 선언은 확인이 불가능할 때의 대안이지 첫 수단이 아닙니다. 불필요하게 낮은 상한은 레인을 조용히 닫습니다.
|
|
542
|
+
- **두 거부 코드, 두 가지 해결.** `missing-caller-context` 는 파일 미전달이고, `runtime-mapping-unverified` 는 대상에 검증된 호스트 로컬 셀렉터가 없다는 뜻으로, 실제 증거에 기반한 `--transport-overlay` 항목으로 해결합니다. 동결 레지스트리 편집으로는 결코 해결되지 않습니다.
|
|
543
|
+
- **업그레이드.** npm 게시 후 `npm i -g omnilane@0.42.3` 을 실행합니다. 기존 리포지토리 심볼릭 링크 설치는 체크아웃을 갱신하고 `omnilane --version` 을 확인하면 되며 재설치는 필요 없습니다.
|
|
544
|
+
|
|
545
|
+
## v0.42.2 새 기능
|
|
546
|
+
|
|
547
|
+
- **Grok 추론 강도를 CLI에 전달합니다.** 명시적 `low`, `medium`, `high`, `xhigh` 선택을 `--reasoning-effort`로 전달하며 Grok 4.6 기본 경로는 `high`를 선택합니다.
|
|
548
|
+
- **증거 기반 로컬 매핑.** 호스트 로컬 overlay로 정확한 CLI 선택자 계약을 검증하며 고정 AA 점수와 승인된 registry SHA는 변경하지 않습니다. 누락되거나 잘못된 매핑은 계속 거부하며 live ACP의 명시적 강도도 검증될 때까지 차단합니다.
|
|
549
|
+
- **업그레이드.** npm 게시 후 `npm i -g omnilane@0.42.2`를 실행합니다. 기존 repo-symlink 설치는 checkout을 업데이트하고 재설치 없이 `omnilane --version`을 확인할 수 있습니다.
|
|
550
|
+
|
|
521
551
|
## v0.42.1 새 기능
|
|
522
552
|
|
|
523
553
|
- **CI 픽스처 복구.** 전체 Python discovery는 기존 routing 및 Grok readiness 테스트에 synthetic-human caller를 명시합니다. production의 missing-identity 거부, 승인된 registry SHA, 하향 점수 검사, retry lineage, skip assertion은 변경하지 않습니다.
|
package/README.md
CHANGED
|
@@ -52,6 +52,7 @@ subscription.
|
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
54
|
npm i -g omnilane # install the CLI
|
|
55
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # you are the operator, not a model
|
|
55
56
|
omnilane route hardest-coding "fix the flaky auth token refresh"
|
|
56
57
|
omnilane doctor # see which AI CLIs / keys you have
|
|
57
58
|
omnilane ui start # optional: watch jobs live in your browser
|
|
@@ -62,9 +63,18 @@ omnilane ui start # optional: watch jobs live
|
|
|
62
63
|
```bash
|
|
63
64
|
git clone https://github.com/Seraphim0916/omnilane && cd omnilane
|
|
64
65
|
./install.sh # finds your CLIs, links the skill, speaks your language
|
|
66
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # you are the operator, not a model
|
|
65
67
|
omnilane route hardest-coding "fix the flaky auth token refresh"
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
> **Why that export?** Omnilane gates every delegation against the caller's own
|
|
71
|
+
> capability score, so a dispatch has to say who is asking. A human at a terminal
|
|
72
|
+
> asserts that once with `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1`, or per call with
|
|
73
|
+
> `--operator-asserted-human`. A model driving omnilane cannot assert it for
|
|
74
|
+
> itself — it passes `--caller-context FILE` carrying its exact vendor, model and
|
|
75
|
+
> effort instead. With neither, the dispatch is refused with
|
|
76
|
+
> `missing-caller-context` before any job is created.
|
|
77
|
+
|
|
68
78
|
> New to this? Run `omnilane doctor` first — it tells you which model CLIs and
|
|
69
79
|
> API keys omnilane can already reach, so you know what will actually run.
|
|
70
80
|
|
|
@@ -372,6 +382,7 @@ omnilane doctor [--json] [--strict] [--probe V] [--probe-timeout SEC] # live pr
|
|
|
372
382
|
omnilane benchmark [--json] [--run] [--vendor V] [--cost-per-call V=USD] # dry-run by default
|
|
373
383
|
dispatch.sh [--background] [--dry-run] [--thread NAME] [--mode advise|work|sysops] [--workdir DIR]
|
|
374
384
|
[--vendor V] [--model M] [--effort E] [--timeout SEC] [--job-timeout SEC]
|
|
385
|
+
[--caller-context FILE | --operator-asserted-human] # who is asking
|
|
375
386
|
LANE "TASK" # "-" reads task from stdin
|
|
376
387
|
dispatch.sh [--json] --list [--json]
|
|
377
388
|
dispatch.sh [--json] --explain LANE [--json] # offline candidate-by-candidate decision trace
|
|
@@ -627,6 +638,26 @@ working notes, including per-benchmark caveats, live in
|
|
|
627
638
|
|
|
628
639
|
## 📜 Release history
|
|
629
640
|
|
|
641
|
+
## What's new in v0.42.4
|
|
642
|
+
|
|
643
|
+
- **The quickstart actually runs now.** `omnilane route` needs to know who is asking; the 60-second start omitted that, so a fresh install hit `missing-caller-context` with no guidance. It now asserts the human operator once with `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1`, and explains what a model caller passes instead.
|
|
644
|
+
- **Command reference.** The `dispatch.sh` synopsis shows `[--caller-context FILE | --operator-asserted-human]`.
|
|
645
|
+
|
|
646
|
+
## What's new in v0.42.3
|
|
647
|
+
|
|
648
|
+
- **Documentation only.** No routing, scoring, gate, or runner behaviour changes.
|
|
649
|
+
- **`--caller-context` is in the quick reference.** The dispatch command signature now shows it, and states that a model caller without it is refused with `missing-caller-context` before a job exists.
|
|
650
|
+
- **A worked caller-context example.** The frozen exact-AA downward gate section gains a complete JSON example, and says to build the file before the first dispatch rather than after a refusal.
|
|
651
|
+
- **Find your own effort instead of guessing.** When a harness names a model but no effort, read the exact flags from the launching process by walking your own ancestor chain; match the chain rather than the first same-named process on the host. Declaring the lowest-scoring row is the fallback, not the first move, because an unnecessarily low ceiling silently closes lanes.
|
|
652
|
+
- **Two refusal codes, two fixes.** `missing-caller-context` means no file was passed; `runtime-mapping-unverified` means the target lacks a proven host-local selector, which is fixed by a `--transport-overlay` entry backed by real evidence and never by editing the frozen registry.
|
|
653
|
+
- **Upgrade.** After npm publication, run `npm i -g omnilane@0.42.3`. Existing repo-symlink installations can update their checkout and verify `omnilane --version` without rerunning installation.
|
|
654
|
+
|
|
655
|
+
## What's new in v0.42.2
|
|
656
|
+
|
|
657
|
+
- **Grok effort reaches the CLI.** Explicit `low`, `medium`, `high`, and `xhigh` selections are passed with `--reasoning-effort`; Grok 4.6 default routes now select `high`.
|
|
658
|
+
- **Evidence-backed local mapping.** A host-local overlay proves the exact CLI selector contract without changing frozen AA scores or the approved registry SHA. Missing or incorrect mappings still deny dispatch; explicit effort on live ACP remains blocked until that surface is verified.
|
|
659
|
+
- **Upgrade.** After npm publication, run `npm i -g omnilane@0.42.2`. Existing repo-symlink installations can update their checkout and verify `omnilane --version` without rerunning installation.
|
|
660
|
+
|
|
630
661
|
## What's new in v0.42.1
|
|
631
662
|
|
|
632
663
|
- **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.
|
package/README.zh-CN.md
CHANGED
|
@@ -47,6 +47,7 @@ Gemini CLI** 之类。每一个都只接一个模型家族,所以你交代的每
|
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
npm i -g omnilane # 装 CLI
|
|
50
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 你是操作者本人,不是模型
|
|
50
51
|
omnilane route hardest-coding "修掉会间歇失败的 auth token 更新测试"
|
|
51
52
|
omnilane doctor # 看你手上有哪些 AI CLI / 金钥
|
|
52
53
|
omnilane ui start # 选配:在浏览器即时看派工
|
|
@@ -57,9 +58,17 @@ omnilane ui start # 选配:在浏览器即时
|
|
|
57
58
|
```bash
|
|
58
59
|
git clone https://github.com/Seraphim0916/omnilane && cd omnilane
|
|
59
60
|
./install.sh # 侦测你的 CLI、接好技能、说你的语言
|
|
61
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 你是操作者本人,不是模型
|
|
60
62
|
omnilane route hardest-coding "修掉会间歇失败的 auth token 更新测试"
|
|
61
63
|
```
|
|
62
64
|
|
|
65
|
+
> **那个 export 是做什么的?** omnilane 会用调用者自己的能力分数来把关每一次派工,
|
|
66
|
+
> 所以派工必须表明「是谁在问」。人类在终端前只要设一次
|
|
67
|
+
> `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1`,或每次带 `--operator-asserted-human`。
|
|
68
|
+
> 模型驱动 omnilane 时**不能替自己主张**这个标志,它要改用 `--caller-context FILE`
|
|
69
|
+
> 提供确切的厂商、模型与强度。两者都没有的话,派工会在创建作业前就被
|
|
70
|
+
> `missing-caller-context` 拒绝。
|
|
71
|
+
|
|
63
72
|
> 第一次用?先跑 `omnilane doctor`——它会告诉你 omnilane 现在能接到哪些模型 CLI 与
|
|
64
73
|
> API 金钥,你就知道实际会跑什么。
|
|
65
74
|
|
|
@@ -267,6 +276,7 @@ omnilane ui stop # 停止 Live UI
|
|
|
267
276
|
omnilane doctor [--json] # 只读检查路由与本地运行环境
|
|
268
277
|
dispatch.sh [--background] [--dry-run] [--thread NAME] [--mode advise|work|sysops] [--workdir 目录]
|
|
269
278
|
[--vendor V] [--model M] [--effort E] [--timeout SEC] [--job-timeout SEC]
|
|
279
|
+
[--caller-context FILE | --operator-asserted-human] # who is asking
|
|
270
280
|
通道 "任务" # "-" 表示从 stdin 读任务
|
|
271
281
|
dispatch.sh [--json] --list [--json]
|
|
272
282
|
dispatch.sh [--json] --explain 通道 [--json] # 离线逐候选解释路由决策
|
|
@@ -493,6 +503,26 @@ scripts/dispatch.sh --dry-run hardest-coding "…" # 完整解析后的计划,
|
|
|
493
503
|
|
|
494
504
|
## 📜 版本历程
|
|
495
505
|
|
|
506
|
+
## v0.42.4 新功能
|
|
507
|
+
|
|
508
|
+
- **快速上手现在真的跑得起来。** `omnilane route` 必须知道「是谁在问」,但 60 秒上手漏了这件事,新安装照抄会直接吃到 `missing-caller-context` 且没有任何指引。现在会先用 `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` 表明操作者身分,并说明模型主控该改用什么。
|
|
509
|
+
- **命令参考。** `dispatch.sh` 的用法摘要补上 `[--caller-context FILE | --operator-asserted-human]`。
|
|
510
|
+
|
|
511
|
+
## v0.42.3 新功能
|
|
512
|
+
|
|
513
|
+
- **纯文档更新。** 路由、评分、闸门与执行器行为均未变更。
|
|
514
|
+
- **`--caller-context` 进入快速参考。** 派工命令签名现已列出该参数,并说明模型主控未携带时会在创建作业前被 `missing-caller-context` 拒绝。
|
|
515
|
+
- **完整的 caller-context 示例。** 冻结 exact-AA 下行闸章节补充了可直接复制的 JSON 示例,并要求在首次派工前建好,而非被拒后才补。
|
|
516
|
+
- **自行查询强度,不要猜测。** 当运行环境只给出模型名称而无强度时,沿自身祖先进程链读取确切标志;应比对整条链,而非主机上第一个同名进程。声明最低分配置是查不到时的退路,而非首选,因为过低的上限会静默关闭车道。
|
|
517
|
+
- **两个拒绝码,两种修法。** `missing-caller-context` 表示未提供文件;`runtime-mapping-unverified` 表示目标缺少已验证的本机选择器,须以真实证据支撑的 `--transport-overlay` 条目修正,绝不可通过修改冻结注册表解决。
|
|
518
|
+
- **升级。** npm 发布后执行 `npm i -g omnilane@0.42.3`。既有的 repo 符号链接安装可更新检出并确认 `omnilane --version`,无需重跑安装。
|
|
519
|
+
|
|
520
|
+
## v0.42.2 新功能
|
|
521
|
+
|
|
522
|
+
- **Grok 强度确实传入 CLI。** 显式的 `low`、`medium`、`high`、`xhigh` 通过 `--reasoning-effort` 传递;Grok 4.6 默认路由指定 `high`。
|
|
523
|
+
- **本机映射以证据验证。** 主机本地覆盖文件证明精确 CLI 选择器契约,不调整固定 AA 分数或获准的注册表 SHA。缺失或错误映射仍拒绝派工;实时 ACP 的显式强度在验证完成前仍阻止执行。
|
|
524
|
+
- **升级。** npm 发布后执行 `npm i -g omnilane@0.42.2`。现有 repo-symlink 安装更新 checkout 并确认 `omnilane --version`,无需重新安装。
|
|
525
|
+
|
|
496
526
|
## v0.42.1 新功能
|
|
497
527
|
|
|
498
528
|
- **修复 CI 测试夹具。** 完整 Python discovery 现在会为旧 routing 与 Grok readiness 测试显式指定 synthetic-human caller;production 的缺失身份拒绝、获准 registry SHA、向下分数闸、重试 lineage 与 skip 断言均保持不变。
|
package/README.zh-TW.md
CHANGED
|
@@ -47,6 +47,7 @@ Gemini CLI** 之類。每一個都只接一個模型家族,所以你交代的每
|
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
npm i -g omnilane # 裝 CLI
|
|
50
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 你是操作者本人,不是模型
|
|
50
51
|
omnilane route hardest-coding "修掉會間歇失敗的 auth token 更新測試"
|
|
51
52
|
omnilane doctor # 看你手上有哪些 AI CLI / 金鑰
|
|
52
53
|
omnilane ui start # 選配:在瀏覽器即時看派工
|
|
@@ -57,9 +58,17 @@ omnilane ui start # 選配:在瀏覽器即時
|
|
|
57
58
|
```bash
|
|
58
59
|
git clone https://github.com/Seraphim0916/omnilane && cd omnilane
|
|
59
60
|
./install.sh # 偵測你的 CLI、接好技能、說你的語言
|
|
61
|
+
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 # 你是操作者本人,不是模型
|
|
60
62
|
omnilane route hardest-coding "修掉會間歇失敗的 auth token 更新測試"
|
|
61
63
|
```
|
|
62
64
|
|
|
65
|
+
> **那個 export 是做什麼的?** omnilane 會用呼叫者自己的能力分數來把關每一次派工,
|
|
66
|
+
> 所以派工必須表明「是誰在問」。人類在終端機前只要設一次
|
|
67
|
+
> `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1`,或每次帶 `--operator-asserted-human`。
|
|
68
|
+
> 模型驅動 omnilane 時**不能替自己主張**這個旗標,它要改用 `--caller-context FILE`
|
|
69
|
+
> 提供確切的廠商、模型與強度。兩者都沒有的話,派工會在建立工作前就被
|
|
70
|
+
> `missing-caller-context` 拒絕。
|
|
71
|
+
|
|
63
72
|
> 第一次用?先跑 `omnilane doctor`——它會告訴你 omnilane 現在能接到哪些模型 CLI 與
|
|
64
73
|
> API 金鑰,你就知道實際會跑什麼。
|
|
65
74
|
|
|
@@ -306,6 +315,7 @@ omnilane doctor [--json] [--strict] [--probe V] [--probe-timeout SEC] # 實際
|
|
|
306
315
|
omnilane benchmark [--json] [--run] [--vendor V] [--cost-per-call V=USD] # 預設只乾跑
|
|
307
316
|
dispatch.sh [--background] [--dry-run] [--thread NAME] [--mode advise|work|sysops] [--workdir 目錄]
|
|
308
317
|
[--vendor V] [--model M] [--effort E] [--timeout SEC] [--job-timeout SEC]
|
|
318
|
+
[--caller-context FILE | --operator-asserted-human] # who is asking
|
|
309
319
|
通道 "任務" # "-" 表示從 stdin 讀任務
|
|
310
320
|
dispatch.sh [--json] --list [--json]
|
|
311
321
|
dispatch.sh [--json] --explain 通道 [--json] # 離線逐候選解釋路由決策
|
|
@@ -534,6 +544,26 @@ scripts/dispatch.sh --dry-run hardest-coding "…" # 完整解析後的計畫,
|
|
|
534
544
|
|
|
535
545
|
## 📜 版本歷程
|
|
536
546
|
|
|
547
|
+
## v0.42.4 新功能
|
|
548
|
+
|
|
549
|
+
- **快速上手現在真的跑得起來。** `omnilane route` 必須知道「是誰在問」,但 60 秒上手漏了這件事,新安裝照抄會直接吃到 `missing-caller-context` 且沒有任何指引。現在會先用 `OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` 表明操作者身分,並說明模型主控該改用什麼。
|
|
550
|
+
- **指令參考。** `dispatch.sh` 的用法摘要補上 `[--caller-context FILE | --operator-asserted-human]`。
|
|
551
|
+
|
|
552
|
+
## v0.42.3 新功能
|
|
553
|
+
|
|
554
|
+
- **純文件更新。** 路由、評分、閘門與執行器行為皆未變更。
|
|
555
|
+
- **`--caller-context` 進入快速參考。** 派工指令簽名現在明列這個參數,並說明模型主控未帶時會在建立工作前被 `missing-caller-context` 拒絕。
|
|
556
|
+
- **完整的 caller-context 範例。** 凍結 exact-AA 下行閘章節補上可直接複製的 JSON 範例,並要求在第一次派工前就建好,而非被拒絕後才補。
|
|
557
|
+
- **自己查強度,不要猜。** 當執行環境只給模型名稱而沒有強度時,走自己的祖先行程鏈讀出確切旗標;要比對整條鏈,不要抓主機上第一個同名行程。宣告最低分設定是查不到時的退路,不是第一步,因為過低的上限會靜默關掉車道。
|
|
558
|
+
- **兩個拒絕碼,兩種修法。** `missing-caller-context` 是沒有提供檔案;`runtime-mapping-unverified` 是目標缺少已驗證的本機選擇器,須以有真實證據支撐的 `--transport-overlay` 條目修正,絕不可透過修改凍結登錄檔解決。
|
|
559
|
+
- **升級。** npm 發布後執行 `npm i -g omnilane@0.42.3`。既有的 repo 符號連結安裝可更新檢出並確認 `omnilane --version`,不需重跑安裝。
|
|
560
|
+
|
|
561
|
+
## v0.42.2 新功能
|
|
562
|
+
|
|
563
|
+
- **Grok 強度確實傳入 CLI。** 明示的 `low`、`medium`、`high`、`xhigh` 透過 `--reasoning-effort` 傳遞;Grok 4.6 預設路由指定 `high`。
|
|
564
|
+
- **本機映射以證據驗證。** 主機本機覆寫檔證明精確 CLI 選擇器契約,不調整固定 AA 分數或核准的登錄表 SHA。缺少或錯誤映射仍拒絕派工;即時 ACP 的明示強度在驗證完成前仍封鎖。
|
|
565
|
+
- **升級。** npm 發布後執行 `npm i -g omnilane@0.42.2`。既有 repo-symlink 安裝更新 checkout 並確認 `omnilane --version`,不需重跑安裝。
|
|
566
|
+
|
|
537
567
|
## v0.42.1 新功能
|
|
538
568
|
|
|
539
569
|
- **修復 CI 測試資料。** 完整 Python discovery 現在會讓舊 routing 與 Grok readiness 測試明示 synthetic-human caller;production 的缺少身分拒絕、核准 registry SHA、向下分數閘、重試 lineage 與 skip 斷言都維持不變。
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.42.
|
|
1
|
+
0.42.4
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Omnilane 0.42.4
|
|
2
|
+
|
|
3
|
+
This patch fixes the user-facing quickstart. It changes no routing, scoring, gate,
|
|
4
|
+
runner, or CLI behaviour.
|
|
5
|
+
|
|
6
|
+
## Why
|
|
7
|
+
|
|
8
|
+
0.42.3 documented `--caller-context` inside the dispatch skill, which is what a
|
|
9
|
+
model driving omnilane reads. It left the READMEs' 60-second start untouched —
|
|
10
|
+
and that is the path a new install actually takes. A user who ran
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm i -g omnilane
|
|
14
|
+
omnilane route hardest-coding "fix the flaky auth token refresh"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
was refused with `missing-caller-context`, and no README section explained the
|
|
18
|
+
flag that resolves it. The gate was working as designed; the documentation simply
|
|
19
|
+
never told a first-time user how to satisfy it.
|
|
20
|
+
|
|
21
|
+
## Changes
|
|
22
|
+
|
|
23
|
+
- The 60-second start in all five READMEs asserts the human operator once with
|
|
24
|
+
`OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1` before the first `omnilane route`.
|
|
25
|
+
- A note after the quickstart explains why a dispatch must say who is asking:
|
|
26
|
+
a human at a terminal asserts it with that variable or `--operator-asserted-human`
|
|
27
|
+
per call; a model driving omnilane cannot assert it for itself and passes
|
|
28
|
+
`--caller-context FILE` with its exact vendor, model, and effort instead; with
|
|
29
|
+
neither, the dispatch is refused before any job is created.
|
|
30
|
+
- The `dispatch.sh` synopsis in the command reference now shows
|
|
31
|
+
`[--caller-context FILE | --operator-asserted-human]`.
|
|
32
|
+
|
|
33
|
+
## Verification boundary
|
|
34
|
+
|
|
35
|
+
`--operator-asserted-human` is cooperative operator metadata. It is not automatic
|
|
36
|
+
model detection and not OS authentication, and this release does not change that.
|
|
37
|
+
A model caller still must not assert it on its own behalf.
|
|
38
|
+
|
|
39
|
+
The frozen AA registry and its approved SHA are unchanged. Coverage remains 78
|
|
40
|
+
scored targets, one scored reference-only entry, and 10 unknown configurations.
|
|
41
|
+
|
|
42
|
+
## Upgrade
|
|
43
|
+
|
|
44
|
+
After npm publication, run `npm i -g omnilane@0.42.4`. An existing repo-symlink
|
|
45
|
+
installation can update its checkout and verify `omnilane --version` without
|
|
46
|
+
rerunning installation. GitHub release and npm publication remain separate
|
|
47
|
+
verification surfaces from Linux CI.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnilane",
|
|
3
|
-
"version": "0.42.
|
|
3
|
+
"version": "0.42.4",
|
|
4
4
|
"description": "One routing table, every harness — classify subtasks into lanes and delegate each lane through a compatible caller-owned native agent or vendor CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"omnilane": "bin/omnilane"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"docs/model-capabilities-2026-09.md",
|
|
30
30
|
"docs/native-executor.md",
|
|
31
31
|
"docs/completion-wakeup.md",
|
|
32
|
-
"docs/release-notes-0.42.
|
|
32
|
+
"docs/release-notes-0.42.4.md",
|
|
33
33
|
"hooks/",
|
|
34
34
|
"skills/",
|
|
35
35
|
".claude-plugin/",
|
package/plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://antigravity.google/schemas/v1/plugin.json",
|
|
3
3
|
"name": "omnilane",
|
|
4
|
-
"version": "0.42.
|
|
4
|
+
"version": "0.42.4",
|
|
5
5
|
"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."
|
|
6
6
|
}
|
package/routing.yaml
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# vendor = codex | claude | grok | gemini | kimi | qwen | opencode | openrouter
|
|
4
4
|
# openrouter is direct-API (needs only OPENROUTER_API_KEY + curl) and advise/consult
|
|
5
5
|
# only — it cannot edit files, so it is not in the default work-capable chains.
|
|
6
|
-
# effort = codex reasoning effort / claude --effort / agy thinking suffix /
|
|
6
|
+
# effort = codex reasoning effort / claude --effort / agy thinking suffix / grok --reasoning-effort
|
|
7
7
|
# Fallback chain: the first candidate whose vendor CLI is installed wins, so the
|
|
8
8
|
# same table degrades gracefully when you only subscribe to one or two vendors.
|
|
9
9
|
# Override any line in ~/.omnilane/routing.local.yaml (same format; local wins).
|
|
@@ -20,17 +20,17 @@
|
|
|
20
20
|
# standard short-context API tier — on subscription CLIs treat $ as relative ranking.
|
|
21
21
|
# Your own job outcomes (~/.omnilane/jobs/) outrank these priors; edit lanes to match.
|
|
22
22
|
|
|
23
|
-
hardest-coding: claude claude-fable-5-1 max | codex gpt-6-astra xhigh | grok grok-4.6
|
|
23
|
+
hardest-coding: claude claude-fable-5-1 max | codex gpt-6-astra xhigh | grok grok-4.6 high | gemini gemini-3.8-flash-high - # correctness-first coding: Fable max leads the same-condition comparison; Astra xhigh is the default Codex quality/cost tradeoff; explicit --effort max remains available; Grok and Flash keep cross-vendor depth
|
|
24
24
|
bulk-mechanical: codex gpt-5.6-sol high | gemini gemini-3.8-flash-high - | claude claude-sonnet-5 high # endurance and migration work stays on proven Sol high; Flash 3.8 refreshes the fast middle fallback; Sonnet preserves cross-vendor depth
|
|
25
25
|
triage: codex gpt-5.6-luna high | gemini gemini-3.8-flash-low - | claude claude-haiku-4-5 - # first-pass filtering favors the low-cost Luna row; Flash low and Haiku remain cheap cross-vendor fallbacks
|
|
26
|
-
hard-judgment: claude claude-fable-5-1 xhigh | codex gpt-6-astra xhigh | grok grok-4.6
|
|
27
|
-
taste-final: claude claude-fable-5-1 xhigh | codex gpt-6-astra xhigh | grok grok-4.6
|
|
28
|
-
consult: codex gpt-6-astra xhigh | claude claude-fable-5-1 xhigh | grok grok-4.6
|
|
26
|
+
hard-judgment: claude claude-fable-5-1 xhigh | codex gpt-6-astra xhigh | grok grok-4.6 high # strongest same-condition judgment row first, then an independently verified Codex family and Grok; this lane is not a controller selector
|
|
27
|
+
taste-final: claude claude-fable-5-1 xhigh | codex gpt-6-astra xhigh | grok grok-4.6 high | gemini gemini-3.8-flash-high - # final prose and style still require human taste review; general quality evidence orders the candidates without claiming an aesthetic benchmark
|
|
28
|
+
consult: codex gpt-6-astra xhigh | claude claude-fable-5-1 xhigh | grok grok-4.6 high | gemini gemini-3.8-flash-medium - # direct named-model consultation chain; keep --vendor to pin the requested family and prevent fallback
|
|
29
29
|
ui-draft: codex gpt-5.6-sol high | claude claude-fable-5-1 xhigh | gemini gemini-3.8-flash-high - # UI drafts require a design system or references; measured coding/agent evidence supports the order but does not prove visual taste
|
|
30
30
|
long-context: gemini gemini-3.8-flash-medium - | codex gpt-5.6-terra max | claude claude-opus-5 medium # Flash medium leads long-document synthesis; Terra and Opus stay because context capacity alone does not prove task quality
|
|
31
31
|
fast-agentic: gemini gemini-3.8-flash-low - | codex gpt-5.6-luna high | claude claude-haiku-4-5 - # low-latency tool loops favor Flash low; Luna and Haiku retain cross-vendor fallback depth
|
|
32
|
-
live-search: grok grok-4.6
|
|
33
|
-
coding-overflow: grok grok-4.6
|
|
32
|
+
live-search: grok grok-4.6 high | gemini gemini-3.8-flash-high - | claude claude-sonnet-5 high | off # Grok remains the native X/web choice; Flash and Sonnet provide generic web-search fallback, not equivalent social context
|
|
33
|
+
coding-overflow: grok grok-4.6 high | gemini gemini-3.8-flash-high - | kimi kimi-k3 - | qwen qwen3-coder-plus - | opencode - - | off # explicit quota-relief lane; keep all existing non-Codex fallbacks and do not infer unverified Qwen aliases from another harness
|
|
34
34
|
arbitrate: off - - # opinion panel remains opt-in because each voter and round consumes quota
|
|
35
35
|
# Enable: `arbitrate: vote codex,claude,grok -` (any 1-4 of codex/claude/grok/gemini)
|
|
36
36
|
# Debate round (each voter rebuts the others): set the effort field to 2.
|
package/scripts/lib/aa_policy.py
CHANGED
|
@@ -164,7 +164,11 @@ def apply_transport_overlay(registry: dict[str, Any]) -> None:
|
|
|
164
164
|
_check(mapping.get("verification") == "request-selector-contract", "unsupported overlay verification")
|
|
165
165
|
_check(mapping.get("runtime_effort") == row["effort"], "overlay effort mismatch")
|
|
166
166
|
selector_type = mapping.get("selector_type", "model_and_effort")
|
|
167
|
-
_check(selector_type in ("model_and_effort", "model_id_encoded_effort"), "unknown selector type")
|
|
167
|
+
_check(selector_type in ("model_and_effort", "model_id_encoded_effort", "cli_reasoning_effort"), "unknown selector type")
|
|
168
|
+
if selector_type == "cli_reasoning_effort":
|
|
169
|
+
_check(row["vendor"] == "grok", "unsupported CLI-effort vendor")
|
|
170
|
+
_check(mapping.get("cli_flag") == "--reasoning-effort", "unproven CLI-effort flag")
|
|
171
|
+
_check(mapping.get("runtime_effort") in ("low", "medium", "high", "xhigh"), "unsupported CLI effort")
|
|
168
172
|
if selector_type == "model_id_encoded_effort":
|
|
169
173
|
_check(row["vendor"] == "gemini", "unsupported encoded-effort vendor")
|
|
170
174
|
_check(mapping.get("runtime_model") in row["transport_mapping"].get("candidate_model_ids", []), "unproven encoded model selector")
|
|
@@ -175,6 +179,7 @@ def apply_transport_overlay(registry: dict[str, Any]) -> None:
|
|
|
175
179
|
status="verified", runtime_verified=True,
|
|
176
180
|
runtime_model=mapping["runtime_model"], runtime_effort=mapping["runtime_effort"],
|
|
177
181
|
selector_type=selector_type,
|
|
182
|
+
cli_flag=mapping.get("cli_flag") if selector_type == "cli_reasoning_effort" else None,
|
|
178
183
|
verification="request-selector-contract", upstream_identity_verified=False,
|
|
179
184
|
overlay_sha256=digest, overlay_host=overlay["host"],
|
|
180
185
|
)
|
|
@@ -248,10 +253,14 @@ def _runtime_target(registry: dict[str, Any], vendor: str, model: str,
|
|
|
248
253
|
candidates.append(row)
|
|
249
254
|
else:
|
|
250
255
|
unresolved.append(row["id"])
|
|
251
|
-
if vendor == "grok" and candidates
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
256
|
+
if vendor == "grok" and candidates and any(
|
|
257
|
+
row["transport_mapping"].get("selector_type") != "cli_reasoning_effort"
|
|
258
|
+
or row["transport_mapping"].get("cli_flag") != "--reasoning-effort"
|
|
259
|
+
or effort not in ("low", "medium", "high", "xhigh")
|
|
260
|
+
for row in candidates
|
|
261
|
+
):
|
|
262
|
+
# Only the verified single-shot CLI selector proves scored effort.
|
|
263
|
+
# Legacy/encoded selectors and live ACP remain unsupported.
|
|
255
264
|
return None, "runtime-effort-discarded", {"vendor": vendor, "model": model, "effort": effort}
|
|
256
265
|
if len(candidates) == 1:
|
|
257
266
|
return candidates[0], "runtime-mapping-verified", {}
|
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
# omnilane runner: Grok Build CLI
|
|
4
4
|
# Usage: run-grok.sh MODE WORKDIR MODEL EFFORT PROMPT_FILE OUTPUT_FILE
|
|
5
|
-
# EFFORT is
|
|
5
|
+
# Explicit EFFORT is passed through Grok CLI's reasoning-effort selector.
|
|
6
6
|
|
|
7
7
|
source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh"
|
|
8
8
|
|
|
9
9
|
MODE="$1"; WORKDIR="$2"; MODEL="$3"; EFFORT="$4"; PROMPT_FILE="$5"; OUTPUT_FILE="$6"
|
|
10
|
-
|
|
10
|
+
EFFORT_ARGS=()
|
|
11
|
+
case "$EFFORT" in
|
|
12
|
+
low|medium|high|xhigh) EFFORT_ARGS=(--reasoning-effort "$EFFORT") ;;
|
|
13
|
+
-|"") ;; # Unspecified effort has no scored runtime mapping.
|
|
14
|
+
*) echo "omnilane: invalid Grok reasoning effort '$EFFORT'" >&2; exit 2 ;;
|
|
15
|
+
esac
|
|
11
16
|
|
|
12
17
|
GROK_BIN="${GROK_BIN:-grok}"
|
|
13
18
|
RUN_TIMEOUT="${OMNILANE_TIMEOUT:-600}"
|
|
@@ -78,6 +83,10 @@ if [[ "$MODE" != "sysops" && -n "$LIVE_INBOX" ]]; then
|
|
|
78
83
|
exit 2
|
|
79
84
|
fi
|
|
80
85
|
if [[ -n "$LIVE_INBOX" && -p "$LIVE_INBOX" ]]; then
|
|
86
|
+
if [[ ${#EFFORT_ARGS[@]} -gt 0 ]]; then
|
|
87
|
+
echo "omnilane: explicit Grok reasoning effort is not verified for live ACP; use single-shot" >&2
|
|
88
|
+
exit 2
|
|
89
|
+
fi
|
|
81
90
|
EVENTS_FILE="${OUTPUT_FILE}.events.jsonl"
|
|
82
91
|
STDERR_FILE="${OUTPUT_FILE}.stderr.log"
|
|
83
92
|
PROGRESS_FILE="${OUTPUT_FILE}.progress.log"
|
|
@@ -145,6 +154,7 @@ fi
|
|
|
145
154
|
ARGS=(--cwd "$WORKDIR" --model "$MODEL"
|
|
146
155
|
--no-memory --no-subagents --no-plan --no-alt-screen
|
|
147
156
|
--output-format plain --verbatim --prompt-file "$PROMPT_FILE")
|
|
157
|
+
[[ ${#EFFORT_ARGS[@]} -eq 0 ]] || ARGS+=("${EFFORT_ARGS[@]}")
|
|
148
158
|
[[ ${#THREAD_ARGS[@]} -eq 0 ]] || ARGS+=("${THREAD_ARGS[@]}")
|
|
149
159
|
ARGS+=("${MODE_ARGS[@]}")
|
|
150
160
|
# Web/X search stays ON by default for advise and sysops.
|
package/skills/omnilane/SKILL.md
CHANGED
|
@@ -17,7 +17,12 @@ You (the main loop) may be Claude, GPT, Grok, or Gemini. The procedure is identi
|
|
|
17
17
|
reading public results, acceptance, operator replies, git commit/push and
|
|
18
18
|
governance edits. Workers execute the assigned task and never delegate again.
|
|
19
19
|
Read-only work uses advise; edits require `--mode work --workdir <repo>`.
|
|
20
|
-
`<repo>/scripts/dispatch.sh [--executor auto|native|cli] [--native-context FILE] [--vendor V] [--mode work] [--workdir DIR] <lane> "<task>"`
|
|
20
|
+
`<repo>/scripts/dispatch.sh --caller-context FILE [--executor auto|native|cli] [--native-context FILE] [--vendor V] [--mode work] [--workdir DIR] <lane> "<task>"`
|
|
21
|
+
|
|
22
|
+
A model caller MUST pass `--caller-context`; without it every dispatch is
|
|
23
|
+
refused with `missing-caller-context` before a job exists. Build that file
|
|
24
|
+
before the first dispatch — see **Frozen exact-AA downward gate** for the
|
|
25
|
+
schema, a worked example, and what to do when your own effort is unverifiable.
|
|
21
26
|
|
|
22
27
|
Add `--background` for long tasks; poll with `scripts/jobs.sh status|result <id>`.
|
|
23
28
|
Use `--thread NAME` when later claude, codex, grok or gemini dispatches
|
|
@@ -332,6 +337,47 @@ that exact frozen score and the inherited ceiling. Targets at or below it are al
|
|
|
332
337
|
unknown identities and unresolved request-selector mappings fail closed. No family,
|
|
333
338
|
displayed grade, highest-effort assumption, retry or fallback grants an uplift.
|
|
334
339
|
|
|
340
|
+
Build the file before the first dispatch, not after a refusal. Every field is an
|
|
341
|
+
exact identity: `caller` must reproduce one `scored_configs` row byte-for-byte,
|
|
342
|
+
and `snapshot_id` must equal the registry's own `snapshot.id`.
|
|
343
|
+
|
|
344
|
+
```json
|
|
345
|
+
{
|
|
346
|
+
"schema_version": 1,
|
|
347
|
+
"snapshot_id": "<registry snapshot.id>",
|
|
348
|
+
"kind": "model",
|
|
349
|
+
"caller": {"vendor": "claude", "model": "claude-opus-5", "effort": "high",
|
|
350
|
+
"reasoning": "adaptive", "fallback": null},
|
|
351
|
+
"inherited_ceiling": 52
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Set `inherited_ceiling` to your own row's score when you are the root caller, or
|
|
356
|
+
to the ceiling you were handed when you are a child.
|
|
357
|
+
|
|
358
|
+
**When your harness names a model but no effort, look before you guess.** The
|
|
359
|
+
launching process usually carries the exact flags. Walk your own ancestor chain
|
|
360
|
+
(`ps -o ppid=,comm= -p <pid>` upward, then `ps -o args= -p <ancestor>`) and read
|
|
361
|
+
its `--model` / `--effort`. Match the ancestor chain rather than the first
|
|
362
|
+
matching process on the host — a second session of the same CLI is common and
|
|
363
|
+
its flags are not yours. This is request-selector evidence, the same class the
|
|
364
|
+
transport overlay carries, and it does not certify upstream identity.
|
|
365
|
+
|
|
366
|
+
Only when that genuinely yields nothing: ask the operator, or declare the
|
|
367
|
+
lowest-scoring row of your model and say so in your report. Understating only
|
|
368
|
+
narrows what you may dispatch to, so it fails in the safe direction — but it is
|
|
369
|
+
the fallback, not the first move, and an unnecessarily low ceiling silently
|
|
370
|
+
closes lanes and pushes the question back onto the operator. Never raise the
|
|
371
|
+
declared effort to unblock a refused target, and never assert
|
|
372
|
+
`--operator-asserted-human` on your own behalf.
|
|
373
|
+
|
|
374
|
+
Two refusal codes mean different things and need different fixes.
|
|
375
|
+
`missing-caller-context` means you passed no file — write one.
|
|
376
|
+
`runtime-mapping-unverified` means the file is fine but the *target* has no proven
|
|
377
|
+
host-local request selector; that is fixed by a `--transport-overlay` entry backed
|
|
378
|
+
by real evidence, never by editing the frozen registry (its sha256 is pinned in
|
|
379
|
+
`scripts/lib/aa_policy.py`, so any edit fails the whole gate closed).
|
|
380
|
+
|
|
335
381
|
A `--transport-overlay /absolute/overlay.json` may prove a small set of host-local
|
|
336
382
|
request selectors using exact identities and hashed local contract evidence. It does
|
|
337
383
|
not change frozen AA scores or certify upstream provider identity. The explicit
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# Omnilane 0.42.1
|
|
2
|
-
|
|
3
|
-
Omnilane 0.42.1 is a test-fixture and packaging patch for the already-published 0.42.0 exact-AA release. It does not rewrite the `v0.42.0` tag or weaken production routing policy.
|
|
4
|
-
|
|
5
|
-
## Fixes
|
|
6
|
-
|
|
7
|
-
- Legacy routing and Grok-readiness tests now explicitly declare a synthetic-human caller. The fixtures no longer depend on ambient caller metadata, while real model calls without exact identity continue to fail closed.
|
|
8
|
-
- The cross-vendor encoded-effort lineage spy uses portable `#!/usr/bin/env python3` and explicit `--background --single-shot` followed by bounded job completion waiting. This isolates the one-shot provider fixture from Gemini's default live/FIFO lifecycle while retaining the exact `--model gemini-3.8-flash-high` selector, model caller/child ceiling, and no-human-exemption assertions.
|
|
9
|
-
- The npm package points at these 0.42.1 notes and retains all five README translations, the AA policy, and the native/completion-wakeup protocol documents.
|
|
10
|
-
|
|
11
|
-
## Policy boundary
|
|
12
|
-
|
|
13
|
-
The approved exact-AA registry SHA pin, missing-identity denial, downward score ceiling, child caller context, retry-lineage intersection, and model-retry human-exemption rules are unchanged. Registry accounting remains:
|
|
14
|
-
|
|
15
|
-
- 78 scored eligible configurations;
|
|
16
|
-
- 1 scored reference-only comparison entry;
|
|
17
|
-
- 10 unknown configurations.
|
|
18
|
-
|
|
19
|
-
## Upgrade
|
|
20
|
-
|
|
21
|
-
After npm publication:
|
|
22
|
-
|
|
23
|
-
```sh
|
|
24
|
-
npm i -g omnilane@0.42.1
|
|
25
|
-
omnilane --version
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
For an existing repo-symlink installation, update the checkout and run `omnilane --version`. Do not rerun `./install.sh` unless intentionally reviewing and changing integration wiring. A GitHub release does not by itself prove npm publication.
|
|
29
|
-
|
|
30
|
-
## Verification target
|
|
31
|
-
|
|
32
|
-
The patch release gate is the complete CI Python discovery command, the full shell suite, package/release policy checks, and a smoke test of the CLI extracted from the built npm tarball. Local preparation records are not packaged release evidence. Published-platform verification must come from the release's GitHub Actions run; local checks alone do not establish a Linux CI pass.
|