omnilane 0.21.0 → 0.32.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.
package/README.zh-TW.md CHANGED
@@ -72,11 +72,11 @@ omnilane 讓**任何**一個 agentic CLI 的主迴圈把子任務分類到通道
72
72
  ```mermaid
73
73
  flowchart LR
74
74
  M["主迴圈<br/><i>你在用的任一 CLI</i>"] --> T{{"routing.yaml<br/>一張共用路由表"}}
75
- T -->|hardest-coding| C1["CodexGPT-5.6 Sol"]
76
- T -->|bulk-mechanical| C2["Codex — GPT-5.6 Terra"]
77
- T -->|taste-final| C3["Claude — Opus 5"]
78
- T -->|long-context| C4["Gemini — 3.1 Pro"]
79
- T -->|live-search| C5["Grok — 4.5"]
75
+ T -->|hardest-coding| C1["ClaudeFable 5.1"]
76
+ T -->|bulk-mechanical| C2["Codex — GPT-5.6 Sol"]
77
+ T -->|taste-final| C3["Claude — Fable 5.1"]
78
+ T -->|long-context| C4["Gemini — 3.7 Flash"]
79
+ T -->|live-search| C5["Grok — 4.6"]
80
80
  T -->|"arbitrate(選配)"| C6["vote — 1-4 模型評審團"]
81
81
  ```
82
82
 
@@ -103,24 +103,23 @@ flowchart LR
103
103
 
104
104
  | 通道 | 首選模型 | 備選模型 | 用途 |
105
105
  |---|---|---|---|
106
- | 🔥 hardest-coding | GPT-5.6 Sol (xhigh) | Claude Opus 5 (xhigh) | 最難的實作、深度除錯、正確性攸關的修改 |
107
- | 🏗️ bulk-mechanical | GPT-5.6 Terra (max) | Claude Sonnet 5 (high) | 重構、搬遷、測試、大面積掃描——機械耐力活 |
108
- | 🧹 triage | GPT-5.6 Luna (medium) | Gemini 3.6 Flash (Low) | 高量初篩、第一輪過濾 |
109
- | ⚖️ hard-judgment | Claude Opus 5 (xhigh) | GPT-5.6 Sol (max) | 架構仲裁、深度推理、第二意見 |
110
- | ✒️ taste-final | Claude Opus 5 (high) | GPT-5.6 Sol (max) | 對外文字、prompt 與文件打磨、風格終審 |
111
- | 💬 consult | 明確點名的廠商/模型 | (不降級) | 自然語言直接諮詢;必須保留 `--vendor` |
112
- | 🎨 ui-draft | GPT-5.6 Sol (xhigh) | Claude Opus 5 (high) | 有設計規範/參考圖時的 UI 出稿;開放式視覺品味交給 taste-final |
113
- | 📚 long-context | Gemini 3.1 Pro (High) | GPT-5.6 Sol (high) | 百萬 token 掃讀、檢索與長文跨段整合;高速重複迴圈仍優先 Flash |
114
- | ⚡ fast-agentic | GPT-5.6 Luna (max) | Gemini 3.6 Flash (High) | 快速多步驟 agentic 迴圈、多模態檢查 |
115
- | 📡 live-search | Grok 4.5 | —(off) | 即時 X/網路搜尋與社群脈絡 |
116
- | 🚰 coding-overflow | Grok 4.5 | Kimi K3 → Qwen3 Coder Plus → OpenCode | Codex 額度吃緊時的中量級編碼溢流道;事實性宣稱須另行查證 |
117
- | 🗳️ arbitrate | off(選配評審團) | — | 內建意見評審團,重大決定用——預設關閉,要用在 `routing.local.yaml` 開;每評審每輪燒一次額度 |
106
+ | 🔥 hardest-coding | Claude Fable 5.1 (xhigh) | GPT-5.6 Sol (xhigh) | 最難的實作、深度除錯、正確性攸關的修改 |
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 Fable 5.1 (xhigh) | GPT-5.6 Sol (max) → Grok 4.6 | 架構裁決、深度推理、第二意見 |
110
+ | ✒️ taste-final | Claude Fable 5.1 (high) | GPT-5.6 Sol (max) | 對外文字、提示詞/文件潤飾、風格裁決 |
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) | 只有在附設計系統/參考圖時才做 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) | 高速多步驟工具迴圈、多模態檢查 |
115
+ | 📡 live-search | Grok 4.6 | — (`off`) | 即時 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` 啟用,每位評審每輪一次呼叫 |
118
118
 
119
119
  **備選模型**是候選鏈的下一位——首選那家的廠商 CLI 沒裝時,派工就降到它。每條
120
120
  通道都是這樣一條鏈;整條都沒裝時,通道自動降為 `off`。
121
121
 
122
- > **Claude Fable 5 去哪了?** 預設表刻意不放——理由與完整數據見
123
- > [常見問題](#-常見問題)。
122
+ > **Fable 5.1 已進入預設——以及 Opus 5 仍適合放在哪裡。** 三方數據與 Opus override 寫在[常見問題](#-常見問題)。
124
123
 
125
124
  ### 自然語言諮詢
126
125
 
@@ -141,12 +140,12 @@ flowchart LR
141
140
  你哪些通道**自己做**(你本來就是那個模型,省一次呼叫)、哪些**派出去**。你 CLI 裡
142
141
  的 `omnilane` 技能會自動套對的那一列,這裡是給人看的版本。
143
142
 
144
- - **Claude Code · Fable 5** — 自己做:hard-judgment、taste-final、最吃正確性的硬修。派出去:機械編碼量 → Codex、長文 → Gemini、即時搜尋 → Grok。
145
- - **Claude Code · Opus 5** — 自己做:hard-judgment、taste-final。大量編碼走 Codex 通道、長文 → Gemini、即時搜尋 → Grok。
146
- - **Codex · Sol** — 自己做:hardest-coding、hard-judgment、ui-draft。派出去:taste-final → Claude、長文 → Gemini、即時搜尋 Grok、粗活Codex Terra
147
- - **Codex · Terra** 自己做:bulk-mechanical。真正最硬的往上升給 Sol;taste → Claude、長文 → Gemini、即時搜尋 → Grok。
148
- - **Grok Build · Grok 4.5** — 自己做:live-search、coding-overflow(中量級編碼)。所有硬活派給 Codex/Claude/Gemini——先驗每個 API 簽章與引用事實。
149
- - **Antigravity · Gemini** — 自己做:3.1 Pro 的長文與重脈絡 agentic 工作、Flash 的高速重複迴圈。最硬的編碼/判斷/文字派給 Codex/Claude;即時搜尋 → Grok。
143
+ - **Claude Code · Fable 5.1**——自己做:hard-judgment、taste-final、hardest-coding。派出去:bulk → Codex Sol high;long-context/高速迴圈 → Gemini 3.7 Flash;即時搜尋 → Grok。
144
+ - **Claude Code · Opus 5**——需要較低幻覺率或價格時,自己做 hard-judgment、taste-final。最難編碼 Fable 5.1 或 Sol;bulk Sol high;long-context/高速迴圈 → Gemini 3.7 Flash;即時搜尋 → Grok。
145
+ - **Codex · Sol**——自己做:hardest-coding、bulk-mechanical、hard-judgment、ui-draft。派出去:taste-final → Claude;long-context/高速迴圈 → Gemini 3.7 Flash;即時搜尋Grok
146
+ - **Codex · Terra**——自己做 long-context 的 Codex 備援;bulk-mechanical 已改由 Sol high 預設處理。最難處升級 Sol xhigh,taste → Claude,高速迴圈 → Gemini 3.7 Flash,即時搜尋 → Grok。
147
+ - **Grok Build · Grok 4.6**——自己做 live-search、coding-overflow。最難的編碼/判斷/文字交給 CodexClaudeGemini;仍要驗證 API 簽章與引用事實。
148
+ - **Antigravity · Gemini 3.7 Flash**——自己做:Medium long-context/高速迴圈、High bulk/overflow、Low 的 triage。最難編碼/判斷/文字交給 CodexClaude;即時搜尋 → Grok。
150
149
 
151
150
  </details>
152
151
 
@@ -378,6 +377,22 @@ scripts/jobs.sh retry "$ID" --background
378
377
 
379
378
  閒置時不會發出 API 呼叫,也不會增加 API 費用。預設若 900 秒內沒有新信箱訊息或新結果事件,工作程序會自動收尾;整體工作逾時仍是外層上限。處理完成可提早執行 `close`。對已結束或不是即時信箱的工作使用 `jobs.sh send`,會明確報錯並失敗。送出後不需追蹤的工作、沒有即時支援的供應商,或必須從乾淨狀態重跑的情況都不適用;請使用新的派工,或在工作完成後使用 `retry`。
380
379
 
380
+ ## 🎯 目標編排
381
+
382
+ `omnilane goal` 是工頭式工作台帳。迴圈由呼叫端負責,也就是開啟目標的代理工作階段或終端機前的人:派出一份工作,從完成信箱或 `omnilane jobs wait` 收回結果,判斷下一份工作,再重複執行。工作數與秒數預算預設都不設上限;只有傳入 `--budget-jobs N` 或 `--budget-seconds S` 時,才會啟用對應的硬上限。omnilane 只負責記帳;每次 goal dispatch 前會檢查呼叫端設定的上限與預設啟用的重複失敗熔斷器,工頭關閉目標時才彙整報告。
383
+
384
+ ```bash
385
+ GOAL_ID="$(omnilane goal open "修好不穩定的結帳整合" \
386
+ --budget-jobs 4 --budget-seconds 900 --workdir /path/to/repo)"
387
+ JOB_ID="$(omnilane goal dispatch "$GOAL_ID" --mode work hardest-coding \
388
+ "重現結帳失敗,完成最小修正並驗證")"
389
+ omnilane jobs wait "$JOB_ID" --timeout 900
390
+ omnilane goal note "$GOAL_ID" "結帳整合測試已通過"
391
+ omnilane goal close "$GOAL_ID" --summary "結帳整合已穩定"
392
+ ```
393
+
394
+ 目標狀態存放在 `$OMNILANE_HOME/goals/<goal-id>/`。用 `goal status` 可查看預算用量、熔斷次數,以及每份工作陸續寫入的中繼資料與結束狀態。`goal close` 會寫入 `report.md` 並印出路徑。單一而且作法明確的工作直接派工即可;有傳入預算旗標時,該上限是硬限制,不代表保證完成。
395
+
381
396
  ## ❓ 常見問題
382
397
 
383
398
  <details>
@@ -406,45 +421,29 @@ scripts/jobs.sh retry "$ID" --background
406
421
  </details>
407
422
 
408
423
  <details>
409
- <summary><b>Claude Fable 5 去哪了?為什麼預設表不放它?</b></summary>
424
+ <summary><b>Fable 5.1 已進入預設——以及 Opus 5 仍適合放在哪裡</b></summary>
410
425
 
411
426
  <br/>
412
427
 
413
- **因為 Claude 頂級檔通常就是主迴圈本人,不是被派發的工人。** 通道存在的意義,
414
- 是把工作送給「你正在開的那個模型以外」的模型。如果 Fable 5 就是你的主迴圈,把
415
- 判斷和文字再路由回 Fable 5 只是多一次呼叫、毫無增益——所以上面那份「選你的主控
416
- 模型」清單裡,Fable 5 有自己獨立的一列,身分是**主控**:自己做 hard-judgment、
417
- taste-final、最吃正確性的硬修。
418
-
419
- **量測數據也不支持把它當工人。** Artificial Analysis 智慧指數(2026-07-24)
420
- Opus 5(max)61 分、Fable 5(max)60 分——AA 自己的用詞是「實質打平」,而 Epoch AI
421
- 的能力指數排序還是反過來的(Fable 5 161、Opus 5 159)。綜合智力就當它平手。真正
422
- 拉開差距的是 agentic 專業產出,而且差很多:
423
-
424
- | 評測 | Claude Opus 5 (max) | Claude Fable 5 | |
425
- |---|---:|---:|---|
426
- | AA-Briefcase(agentic 知識工作,Elo) | 1720 | 1574 | **+146** |
427
- | GDPval-AA v2(Elo) | 1861 | 1747 | **+114** |
428
- | AA-Briefcase 每任務成本 | $17.79 | $22.30 | **-20%** |
429
- | API 單價,輸入/輸出 每 1M | $5 / $25 | $10 / $50 | **一半** |
430
-
431
- Opus 5 的 max、xhigh、high 三個檔位包辦 AA-Briefcase 前三名,連 `high` 檔都在
432
- 不到一半的每任務成本下贏過 Fable 5。也就是說,Fable 5 貴一倍,卻換不到任何一條
433
- 通道所在意的優勢。
428
+ Fable 5.1 現在領頭 `hardest-coding`、`hard-judgment`、`taste-final`。
429
+ 同為 xhigh 時,它在智慧、代理式工作與編碼都領先 Opus 5;Sol max 則保留為
430
+ 便宜許多的跨廠商判斷備援。
434
431
 
435
- **Fable 5 真正比較強的地方**:事實廣度。它在 AA-Omniscience 上仍領先 Opus 5
436
- (符合兩者的規模差),而 Opus 5 在沒把握時更傾向直接作答——幻覺率 50%,比
437
- Opus 4.8 14 個百分點。任務偏「回想」而非「執行」時,直接點名它:
432
+ | 評測(AA,擷取於 2026-09-02) | Claude Fable 5.1 (xhigh) | Claude Opus 5 (xhigh) | GPT-5.6 Sol (max) |
433
+ |---|---:|---:|---:|
434
+ | 智慧 | 64.8 | 62.5 | 60.9 |
435
+ | 代理式 | 59.8 | 58.4 | 57.8 |
436
+ | 編碼 | 80.7 | 77.0 | 77.4 |
437
+ | 幻覺率(越低越好) | .71 | **.60** | .92 |
438
+ | AA 每任務成本 | $2.65 | $1.80 | **$0.95** |
438
439
 
439
- ```bash
440
- dispatch.sh --vendor claude --model claude-fable-5 --effort high consult "…"
441
- ```
442
-
443
- **這是成本與主迴圈策略的選擇,不是能力判決。** 設定選單的模型清單有列 Fable 5,
444
- 在 `routing.local.yaml` 寫一行就能覆寫預設:
440
+ Fable 5.1 沒進 bulk 或 triage:每 token 價格是 Opus 5 的兩倍,而且每回合
441
+ 消耗最多 Claude Code 訂閱額度。Opus 5 仍是較低幻覺率、較低價格的 Claude
442
+ 選項,並以 medium 留在 `long-context`;也能透過
443
+ `~/.omnilane/routing.local.yaml` 放回任何通道:
445
444
 
446
445
  ```yaml
447
- taste-final: claude claude-fable-5 high
446
+ hard-judgment: claude claude-opus-5 xhigh
448
447
  ```
449
448
 
450
449
  </details>
@@ -501,7 +500,7 @@ vendor 一律當成 `work`,而且它只能逐次明確指定,永遠不是 lane
501
500
  預設通道配置依據 Artificial Analysis 2026-07 快照(已對 AA 站上原始紀錄與
502
501
  各廠官方定價頁交叉核對)加上公開對比評測;這些是意見不是定律——
503
502
  設定選單和 `routing.local.yaml` 就是讓你不同意用的。完整工作筆記(含各評測的
504
- 但書)見 [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md)。
503
+ 但書)見 [`docs/model-capabilities-2026-09.md`](docs/model-capabilities-2026-09.md)。
505
504
 
506
505
  ## ⚠️ 已知限制
507
506
 
@@ -515,6 +514,23 @@ vendor 一律當成 `work`,而且它只能逐次明確指定,永遠不是 lane
515
514
 
516
515
  ## 📜 版本歷程
517
516
 
517
+ ## v0.32.0
518
+
519
+ - **依 AA 2026-09 快照全面重評路由。** Fable 5.1 與 Gemini 3.7 Flash 進入預設,數據集中在新的日期化文件。
520
+ - **模型目錄同步實際 CLI 軟體介面。** 加入 Fable 5.1,移除 agy 已下架的 Gemini 3.5 Flash 項目,並同步投票程式。
521
+ - **Opus 5 仍可使用。** 它留在 `long-context`,也能透過 `routing.local.yaml` 覆寫任何通道。
522
+
523
+ ## v0.31.0 新功能
524
+
525
+ - **目標預算預設無上限。** `budget_jobs` 與 `budget_seconds` 現在會以 JSON `null` 儲存並顯示為 `unlimited`;原先隱含的 8 個工作與 900 秒上限已移除。使用 `--budget-jobs N` 或 `--budget-seconds S` 才會啟用硬性上限;重複失敗保險絲不是預算,預設仍會啟用。
526
+ - **管線中的目標狀態不再誤判失敗。** `omnilane goal status` 的消費端提早關閉管線時,現在會以狀態碼 0 結束,不再引發 `BrokenPipeError`,因此 `| head` 與 `| grep -q` 可在 `pipefail` 下正常運作。
527
+
528
+ ## v0.30.0 新功能
529
+
530
+ - **目標台帳。** `omnilane goal open` 建立預設不限制工作數與秒數的目標台帳;`goal dispatch` 會在每份工作執行前檢查呼叫端設定的工作數或總經過時間上限,以及預設啟用的重複失敗熔斷器。`goal note` 保留呼叫端敘事,`goal status` 顯示預算與各工作紀錄,`goal close` 會寫入 `goals/<id>/report.md`。
531
+ - **迴圈由呼叫端掌握。** 開啟目標的工作階段或使用者負責選擇、派工、檢視與收尾;omnilane 不會執行內建的規劃模型。
532
+ - **doctor 檢查。** `omnilane doctor` 現在會檢查目標編排功能。
533
+
518
534
  ## v0.21.0 新功能
519
535
 
520
536
  - **明確選擇工作階段模式。** 可用 `dispatch --live` 要求常駐工作階段,或以 `--single-shot` 強制單次派工;對不支援即時工作階段的供應商,`--live` 會立即失敗並列出可用供應商。
@@ -584,7 +600,7 @@ vendor 一律當成 `work`,而且它只能逐次明確指定,永遠不是 lane
584
600
  的 Agentic Index 上大幅領先 Flash,而且 2026-07-30 砍價後每任務成本只剩零頭。
585
601
  Flash 只剩吞吐量優勢——若你的迴圈受延遲限制,可在本機覆寫把它調回第一。
586
602
  - **lane 註解不再放數字。**`routing.yaml` 只說明每條排序「為什麼」成立;所有分數、
587
- 價格與吞吐量連同取數日期,一律住在 `docs/model-capabilities-2026-07.md`。數字過期
603
+ 價格與吞吐量連同取數日期,一律住在 `docs/model-capabilities-2026-09.md`。數字過期
588
604
  不再需要動路由表。
589
605
  - **新增 value profile**(在 `routing.local.yaml.example`):用約一個 Intelligence
590
606
  Index 分數,換每任務成本降三到四成。
@@ -630,7 +646,7 @@ vendor 一律當成 `work`,而且它只能逐次明確指定,永遠不是 lane
630
646
  - **修正:`routing.local.yaml.example` 還指著已退場的模型**——起手設定檔裡的
631
647
  `claude-opus-4-8` 全數改為 `claude-opus-5`(並依通道給對應檔位),Gemini 3.5
632
648
  Flash 候選改為 3.6 Flash,與 0.10.0 以來的預設值一致。
633
- - **對照原始資料修正智慧指數數字**(`docs/model-capabilities-2026-07.md`):
649
+ - **對照原始資料修正智慧指數數字**(`docs/model-capabilities-2026-09.md`):
634
650
  那是指數點數不是百分比;補上 AA-Briefcase / GDPval-AA v2 對照,並記下兩項與
635
651
  預設值相反的結果:Fable 5 在事實知識領先、GPT-5.6 Sol 在呈現品質領先。
636
652
 
@@ -670,7 +686,7 @@ vendor 一律當成 `work`,而且它只能逐次明確指定,永遠不是 lane
670
686
  - **五個 OpenAI-compatible direct-API vendor** — `deepseek`、`zai`(GLM)、
671
687
  `mistral`、`groq`、`cerebras`,與 `openrouter` 同為免 CLI 通道(curl 加一把
672
688
  `<VENDOR>_API_KEY`);`lib/common.sh` registry 一行即加一個。詳見
673
- [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md)。
689
+ [`docs/model-capabilities-2026-09.md`](docs/model-capabilities-2026-09.md)。
674
690
  - **fish shell 補全** — `omnilane completion fish | source`。
675
691
 
676
692
  ## v0.8.3 新功能
@@ -692,7 +708,7 @@ vendor 一律當成 `work`,而且它只能逐次明確指定,永遠不是 lane
692
708
  同一條免 CLI 直連 API 路徑,對應 OpenAI-compatible 供應商:DeepSeek、Z.ai GLM、
693
709
  Mistral、Groq、Cerebras。各只要 `curl` 加自己那把 `<VENDOR>_API_KEY`;僅限
694
710
  advise/consult。端點、金鑰、預設模型由 `lib/common.sh` 一行 registry 定義。
695
- 詳見 [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md)。
711
+ 詳見 [`docs/model-capabilities-2026-09.md`](docs/model-capabilities-2026-09.md)。
696
712
  - **`opencode` vendor** — 透過 OpenCode 多供應商聚合 CLI 無頭派工
697
713
  (`opencode run`)。advise 模式鎖定內建唯讀 `plan` agent;work 模式
698
714
  用 `--auto`。加入預設 `coding-overflow` 鏈作為最後備援。
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.21.0
1
+ 0.32.0
package/bin/omnilane CHANGED
@@ -76,9 +76,14 @@ omnilane — one routing table, every harness
76
76
  omnilane list effective routing table
77
77
  omnilane route [--vendor V] [flags] LANE "TASK"
78
78
  dispatch or consult a model
79
- omnilane goal "TEXT" [--budget-jobs N] [--budget-seconds S] [--workdir DIR]
80
- run bounded sequential goal loop
81
- omnilane goal status GOAL_ID inspect goal budget and last action
79
+ omnilane goal open "TEXT" [--budget-jobs N] [--budget-seconds S] [--workdir DIR]
80
+ open a goal; budgets default to unlimited
81
+ omnilane goal dispatch GOAL_ID [dispatch.sh args...]
82
+ budget-gate and start one background job
83
+ omnilane goal note GOAL_ID "TEXT" append a timestamped foreman note
84
+ omnilane goal status GOAL_ID inspect budgets, fuse trips, and recorded jobs
85
+ omnilane goal close GOAL_ID [--summary "TEXT"]
86
+ write the final goal report
82
87
  omnilane jobs [--json] COMMAND [ARGS] list, status, result, stats, recommend, wait, or audit
83
88
  omnilane mcp start the MCP stdio server
84
89
  omnilane completion bash|zsh|fish print a shell completion script
@@ -1,18 +1,27 @@
1
1
  <!-- omnilane-routing:start -->
2
2
  ## omnilane — model routing (persistent reminder)
3
3
 
4
- Before delegating any subtask or choosing a model for a piece of work,
5
- consult the omnilane routing table: run `omnilane list` (or
6
- `scripts/dispatch.sh --list` inside the omnilane repo) and classify the
7
- subtask into a lane. If the lane's first available model is the one you are
8
- running as, self-execute; otherwise dispatch it headlessly:
4
+ Implementation work code edits, new files, tests, builds, deploys is
5
+ dispatched by default, even when the lane's first available model is the one
6
+ you are running as. Consult the routing table with `omnilane list` (or
7
+ `scripts/dispatch.sh --list` inside the omnilane repo), classify the subtask
8
+ into a lane, then dispatch it headlessly:
9
9
 
10
10
  omnilane route [--vendor V] [--mode work] [--workdir DIR] <lane> "<task>"
11
11
 
12
+ Advise mode is the default; pass `--mode work` only with an explicit
13
+ `--workdir`. The commander self-executes only reserved items: planning and
14
+ decomposition, writing task briefs, reviewing reports, acceptance checks,
15
+ replies to the operator, git commit/push, read-only verification, and fixes
16
+ of one line or less. "This lane is mine, so I'll do it myself" is not a
17
+ valid reason to skip dispatch.
18
+
12
19
  If the user explicitly names Claude, Codex, Grok, Gemini, or a canonical model
13
20
  alias, use the omnilane skill's consult rules and keep `--vendor` in the
14
21
  dispatch; an explicit target must not silently fall back.
15
22
 
16
- Lane definitions, modes, and safety rules live in the `omnilane` skill.
17
- Workers must never dispatch again (nested dispatch is refused, exit 86).
23
+ Lane definitions, modes, per-model rows, and safety rules live in the
24
+ `omnilane` skill load it and apply the row for the model you are running
25
+ as; legacy model-routing skill variants are retired. Workers must never
26
+ dispatch again (nested dispatch is refused, exit 86).
18
27
  <!-- omnilane-routing:end -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnilane",
3
- "version": "0.21.0",
3
+ "version": "0.32.0",
4
4
  "description": "One routing table, every harness — classify subtasks into lanes and dispatch each lane to the best vendor's agentic CLI (Codex, Claude, Gemini, Grok) using your existing subscription logins.",
5
5
  "bin": {
6
6
  "omnilane": "bin/omnilane"
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.21.0",
4
+ "version": "0.32.0",
5
5
  "description": "One routing table, every harness: classify subtasks into lanes and auto-dispatch each lane to the best vendor CLI (Codex, Claude Code, Grok Build, Antigravity) with background jobs, depth guard, and serialized codex dispatch."
6
6
  }
@@ -8,7 +8,7 @@
8
8
  # consult is a multi-vendor direct-target chain. configure.sh intentionally
9
9
  # skips it because that menu writes one candidate per lane. If overriding it,
10
10
  # retain every vendor you want to address by name:
11
- # consult: codex gpt-5.6-sol max | claude claude-opus-5 high | grok grok-4.5 - | gemini "Gemini 3.1 Pro (High)" -
11
+ # consult: codex gpt-5.6-sol max | claude claude-fable-5-1 high | grok grok-4.6 - | gemini "Gemini 3.7 Flash (High)" -
12
12
 
13
13
  # ── Starter profiles ─────────────────────────────────────────────
14
14
  # Uncomment ONE block that matches what you actually subscribe to.
@@ -26,10 +26,10 @@
26
26
  # live-search: off - -
27
27
  # coding-overflow: off - -
28
28
 
29
- # Profile: Claude Code (Fable 5) as the main loop — let Fable keep judgment/taste,
29
+ # Profile: Claude Code (Fable 5.1) as the main loop — let Fable keep judgment/taste,
30
30
  # push only coding volume out to Codex.
31
- # hard-judgment: claude claude-fable-5 high
32
- # taste-final: claude claude-fable-5 high
31
+ # hard-judgment: claude claude-fable-5-1 high
32
+ # taste-final: claude claude-fable-5-1 high
33
33
 
34
34
  # Profile: Codex-heavy (Sol main) — keep the hard lanes on Codex, Claude for taste.
35
35
  # taste-final: claude claude-opus-5 high
package/routing.yaml CHANGED
@@ -8,39 +8,37 @@
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).
10
10
  # Every benchmark score, price and throughput figure behind these orderings lives in
11
- # docs/model-capabilities-2026-07.md, with the date it was retrieved. The comments below
11
+ # docs/model-capabilities-2026-09.md, with the date it was retrieved. The comments below
12
12
  # deliberately carry no numbers: they state WHY a lane is ordered the way it is, which
13
13
  # stays true for months, while the numbers move every few weeks. Change an ordering and
14
14
  # you update the doc; a figure going stale should never need a routing-table edit.
15
- # (Audited 2026-07-12; re-audited 2026-07-25, 2026-08-02 and 2026-08-03.)
16
- # defaults follow Artificial Analysis data, 2026-07
15
+ # (Audited 2026-07-12; re-audited 2026-07-25, 2026-08-02, 2026-08-03, and 2026-09-02.)
16
+ # defaults follow Artificial Analysis data, 2026-09
17
17
  # snapshot. Verified against AA site records + vendor pricing pages: Intelligence &
18
18
  # Coding indexes and 7:2:1 blended prices all match (AA field price1mBlended7To2To1);
19
19
  # coding cost-per-task is chart-only (not independently reconstructed). Prices are
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: codex gpt-5.6-sol xhigh | claude claude-opus-5 xhigh # ordered on coding capability specifically, not general intelligence. Sol dropped from max to xhigh on 2026-08-03: on AA's per-effort Coding Index, Sol at xhigh outscores both Sol at max and every Claude tier, at a third less cost — max buys overthinking here, not accuracy. xhigh is also Anthropic's documented starting point for coding/agentic work. Keep Sol first for the established Codex harness lane.
24
- bulk-mechanical: codex gpt-5.6-terra max | claude claude-sonnet-5 high | gemini "Gemini 3.6 Flash (High)" - # ordered on endurance per dollar: Terra leads Sonnet 5 on both intelligence and cost per task
25
- triage: codex gpt-5.6-luna medium | gemini "Gemini 3.6 Flash (Low)" - | claude claude-haiku-4-5 - # high-volume scans, ordered on cost per task: Luna is the cheapest model at its intelligence tier by a wide margin
26
- hard-judgment: claude claude-opus-5 xhigh | codex gpt-5.6-sol max # ordered on agentic knowledge work, where Opus 5 leads Sol on AA's benchmarks. xhigh per Anthropic guidance (high is the documented floor for intelligence-sensitive work; max is for correctness-over-cost only) raise to max locally via `omnilane configure set` if your workload needs it.
27
- taste-final: claude claude-opus-5 high | codex gpt-5.6-sol max # user-facing prose, prompt/doc polish, Chinese phrasing, style arbitration
28
- consult: codex gpt-5.6-sol max | claude claude-opus-5 high | grok grok-4.5 - | gemini "Gemini 3.1 Pro (High)" - # direct named-model consultation; use --vendor to prevent fallback
29
- ui-draft: codex gpt-5.6-sol xhigh | claude claude-opus-5 high # only with a design system / reference images; open-ended visual taste -> taste-final
30
- long-context: gemini "Gemini 3.1 Pro (High)" - | codex gpt-5.6-sol high | claude claude-opus-5 high # all have 1M context; ordered on AA-LCR, which scores exactly this lane's work — extracting and synthesising across long documents — and where Gemini leads both fallbacks. Corrected 2026-08-03: this comment used to send multi-hop synthesis to the Claude candidate on second-hand prior-generation figures, and current first-party per-effort data reverses that, so the two fallbacks swapped. Caveat in docs: AA-LCR runs at 10k-100k tokens, so nothing here settles behaviour at a full 1M
31
- fast-agentic: codex gpt-5.6-luna max | gemini "Gemini 3.6 Flash (High)" - # fast multi-step tool loops. Reordered 2026-08-03: Luna leads Flash on agentic benchmarks AND costs a fraction as much per task, so Flash's remaining edge is raw throughput alone. Keep Flash first only if your loops are latency-bound. Both take image input, so the lane's multimodal checks are unaffected
32
- live-search: grok grok-4.5 - | off # native X/web search lane; no real substitute
33
- coding-overflow: grok grok-4.5 - | kimi kimi-k3 - | qwen qwen3-coder-plus - | opencode - - | off # codex-quota relief valve: mid-tier coding; Grok 4.5 is a capable mid-tier coder but AA measures a high hallucination rate verify every factual claim it ships. qwen3-coder-plus = 2025-09-23 snapshot alias (Qwen 3.6 Plus exists; re-evaluate before swapping). kimi/qwen model fields are CLI aliases adjust to your login. opencode "-" model = its own configured default.
34
- arbitrate: off - - # opinion panel is OPT-IN: it costs one call per voter per round.
23
+ hardest-coding: claude claude-fable-5-1 xhigh | codex gpt-5.6-sol xhigh # ordered on coding capability: the leading Claude tier wins both coding components; Sol remains the established Codex-harness value fallback
24
+ bulk-mechanical: codex gpt-5.6-sol high | gemini "Gemini 3.7 Flash (High)" - | claude claude-sonnet-5 high # ordered on endurance per dollar: Sol dominates Terra within Codex; current Flash is the faster, cheaper middle fallback; Sonnet preserves subscription quota
25
+ triage: codex gpt-5.6-luna high | gemini "Gemini 3.7 Flash (Low)" - | claude claude-haiku-4-5 - # ordered on cost per task at usable intelligence: Luna high buys a meaningful quality lift cheaply; Flash and Haiku are low-cost cross-vendor fallbacks
26
+ hard-judgment: claude claude-fable-5-1 xhigh | codex gpt-5.6-sol max | grok grok-4.6 - # ordered on agentic knowledge work: Fable leads the Claude field; Sol stays ahead of Grok because Grok effort is ignored and its reproduced row is unknown
27
+ taste-final: claude claude-fable-5-1 high | codex gpt-5.6-sol max # ordered on prose and polish: Fable leads Opus on intelligence and factual breadth; Sol is the cross-vendor fallback
28
+ consult: codex gpt-5.6-sol max | claude claude-fable-5-1 high | grok grok-4.6 - | gemini "Gemini 3.7 Flash (High)" - # direct named-model chain uses the strongest current Claude and Flash slots; keep --vendor to prevent fallback
29
+ ui-draft: codex gpt-5.6-sol xhigh | claude claude-fable-5-1 high # ordered for drafts with a design system or reference images: Sol leads measured multimodal and coding evidence; Fable follows for polish
30
+ long-context: gemini "Gemini 3.7 Flash (Medium)" - | codex gpt-5.6-terra max | claude claude-opus-5 medium # ordered on long-context reasoning, then cost and throughput: Flash leads; Terra matches its long-context result; Opus is the cheaper Claude fallback
31
+ fast-agentic: gemini "Gemini 3.7 Flash (Medium)" - | codex gpt-5.6-luna high # ordered on interactive tool-loop latency: Flash gives up little agentic quality for far faster first output; Luna high is the low-latency Codex fallback
32
+ live-search: grok grok-4.6 - | off # native X and web search lane; no real substitute
33
+ coding-overflow: grok grok-4.6 - | gemini "Gemini 3.7 Flash (High)" - | kimi kimi-k3 - | qwen qwen3-coder-plus - | opencode - - | off # coding relief ordered by capability and value: Grok has the lowest frontier hallucination rate; Flash is the cheapest strong coder here; revisit the best-value Qwen tier when its CLI alias can be verified
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.
37
37
  # Custom gate: `arbitrate: exec /path/to/script -`
38
- # Claude Fable 5 (claude-fable-5) is deliberately absent from the defaults: the top Claude tier
39
- # is usually the MAIN LOOP itself, not a dispatched worker, and it prices at twice Opus 5.
40
- # This is a cost / guardrail / main-loop policy choice, NOT a capability verdict AA and
41
- # Epoch AI disagree on which of the two leads general intelligence and call it effectively a
42
- # tie, while Opus 5 leads clearly on agentic knowledge work at a lower cost per task. Fable 5
43
- # does keep the lead on factual breadth, so name it explicitly for recall-heavy consults. If you want
44
- # to route to it anyway, pick it in the configurator or set e.g.
45
- # taste-final: claude claude-fable-5 high
46
- # in ~/.omnilane/routing.local.yaml.
38
+ # Claude Fable 5.1 is in the judgment, taste, and hardest-coding defaults because
39
+ # it leads Opus 5 on every Artificial Analysis axis at the same effort.
40
+ # It is not in bulk or triage: it prices at twice Opus 5 per token and consumes
41
+ # the most subscription quota per turn. Opus 5 remains the lower-hallucination,
42
+ # lower-price Claude choice and can return to any lane via
43
+ # ~/.omnilane/routing.local.yaml, for example:
44
+ # hard-judgment: claude claude-opus-5 xhigh
@@ -151,10 +151,10 @@ esac
151
151
  # Dynamic/API catalogs stay curated — "c" always accepts an exact model ID.
152
152
  CODEX_MODELS=("gpt-5.6" "gpt-5.6-sol" "gpt-5.6-terra" "gpt-5.6-luna" "gpt-5.5" "gpt-5.4" "gpt-5.4-mini" "gpt-5.3-codex-spark")
153
153
  CODEX_EFFORTS=("xhigh" "max" "ultra" "high" "medium" "low" "minimal" "none")
154
- CLAUDE_MODELS=("default" "best" "fable" "opus" "sonnet" "haiku" "opus[1m]" "sonnet[1m]" "opusplan" "claude-fable-5" "claude-opus-5" "claude-sonnet-5" "claude-opus-4-8" "claude-opus-4-7" "claude-opus-4-6" "claude-opus-4-5-20251101" "claude-sonnet-4-6" "claude-sonnet-4-5-20250929" "claude-haiku-4-5" "claude-haiku-4-5-20251001")
154
+ CLAUDE_MODELS=("default" "best" "fable" "opus" "sonnet" "haiku" "opus[1m]" "sonnet[1m]" "opusplan" "claude-fable-5" "claude-fable-5-1" "claude-opus-5" "claude-sonnet-5" "claude-opus-4-8" "claude-opus-4-7" "claude-opus-4-6" "claude-opus-4-5-20251101" "claude-sonnet-4-6" "claude-sonnet-4-5-20250929" "claude-haiku-4-5" "claude-haiku-4-5-20251001")
155
155
  CLAUDE_EFFORTS=("max" "xhigh" "high" "medium" "low" "-")
156
- GEMINI_MODELS=("gemini-3.6-flash-high" "gemini-3.6-flash-medium" "gemini-3.6-flash-low" "gemini-3.5-flash-high" "gemini-3.5-flash-medium" "gemini-3.5-flash-low" "gemini-3.1-pro-high" "gemini-3.1-pro-low" "claude-sonnet-4-6" "claude-opus-4-6-thinking" "gpt-oss-120b-medium")
157
- GROK_MODELS=("grok-4.5" "headroom-grok-build" "grok-4.3-official")
156
+ GEMINI_MODELS=("gemini-3.7-flash-high" "gemini-3.7-flash-medium" "gemini-3.7-flash-low" "gemini-3.6-flash-high" "gemini-3.6-flash-medium" "gemini-3.6-flash-low" "gemini-3.1-pro-high" "gemini-3.1-pro-low" "claude-sonnet-4-6" "claude-opus-4-6-thinking" "gpt-oss-120b-medium")
157
+ GROK_MODELS=("grok-4.6" "headroom-grok-build" "grok-4.3-official")
158
158
  KIMI_MODELS=("kimi-k3" "kimi-k2.7-code" "kimi-k2.5")
159
159
  QWEN_MODELS=("qwen3.7-max" "qwen3.7-plus" "qwen3.6-plus" "qwen3.5-plus" "qwen3-max-2026-01-23" "qwen3-coder-next" "qwen3-coder-plus" "qwen3-coder-flash")
160
160
  # OpenCode models use provider/model form; OpenRouter models use catalog slugs.
package/scripts/doctor.sh CHANGED
@@ -31,6 +31,7 @@ done
31
31
  REPO="${OMNILANE_DOCTOR_REPO:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
32
32
  OMNILANE_HOME="${OMNILANE_HOME:-$HOME/.omnilane}"
33
33
  PROBE_SCRIPT="${OMNILANE_PROVIDER_PROBE_SCRIPT:-$REPO/scripts/provider-probe.sh}"
34
+ GOAL_LOOP="${OMNILANE_DOCTOR_GOAL_LOOP:-$REPO/scripts/lib/goal-loop.sh}"
34
35
  PASS_COUNT=0
35
36
  WARN_COUNT=0
36
37
  FAIL_COUNT=0
@@ -123,6 +124,31 @@ else
123
124
  report PASS state "$OMNILANE_HOME is accessible"
124
125
  fi
125
126
 
127
+ goals_store="$OMNILANE_HOME/goals"
128
+ if [[ ! -f "$GOAL_LOOP" || -L "$GOAL_LOOP" ]]; then
129
+ report FAIL goal-orchestrator "$GOAL_LOOP must be a regular file"
130
+ elif ! /bin/bash -n "$GOAL_LOOP" 2>/dev/null; then
131
+ report FAIL goal-orchestrator "$GOAL_LOOP has invalid bash syntax"
132
+ elif [[ -L "$goals_store" || ( -e "$goals_store" && ! -d "$goals_store" ) ]]; then
133
+ report FAIL goal-orchestrator "$goals_store must be a real directory, not a symlink or file"
134
+ elif [[ -d "$goals_store" ]]; then
135
+ goals_mode="$(stat -f '%Lp' "$goals_store" 2>/dev/null || true)"
136
+ if [[ ! "$goals_mode" =~ ^[0-7]{3,4}$ ]]; then
137
+ goals_mode="$(stat -c '%a' "$goals_store" 2>/dev/null || true)"
138
+ fi
139
+ if [[ "$goals_mode" =~ ^0?700$ ]]; then
140
+ report PASS goal-orchestrator "goal-loop.sh parses; goals store mode is $goals_mode"
141
+ elif [[ -n "$goals_mode" ]]; then
142
+ report WARN goal-orchestrator \
143
+ "goal-loop.sh parses; goals store mode is $goals_mode, owner-only 700 is safer"
144
+ else
145
+ report WARN goal-orchestrator \
146
+ "goal-loop.sh parses; could not determine goals store permissions"
147
+ fi
148
+ else
149
+ report PASS goal-orchestrator "goal-loop.sh parses; goals store is not present yet"
150
+ fi
151
+
126
152
  completion_plugin_state() {
127
153
  local config_dir state
128
154
  config_dir="${CLAUDE_CONFIG_DIR:-${HOME:-}/.claude}"