omnilane
v0.54.0
Published
One routing table, every harness — classify subtasks into lanes and delegate each lane through a compatible caller-owned native agent or vendor CLI.
Maintainers
Readme
omnilane
一張路由表,四個執行框架通用。
讓主迴圈不再猜要用哪個模型。 從 Claude Code · Codex · Grok Build · Antigravity 任一框架開車,每個子任務都派給 真正最擅長它的模型——Codex、Claude、Grok、Gemini、Kimi、Qwen、OpenCode, 或經 OpenRouter 直達任何託管模型——用你已經在付的訂閱,或一把 API 金鑰。
English · 繁體中文 · 简体中文 · 日本語 · 한국어
目前版本的升級與驗證
只換評分表快照時,呼叫參數與執行檔身分沒變的列會自動沿用既有探測證據;分數或日期更新直接套用新上限,不必執行 omnilane resign、登入圖形桌面或連網,也不改寫覆蓋檔。只有新增或參數合約、執行檔身分有變的列需要 omnilane resign --vendor VENDOR;拒絕訊息會指出列與是否需要圖形終端機。套件內有可信來源快照的舊格式 1 可直接使用;未知的更舊來源請先用 omnilane resign --check 查明。首次設定與簽署者核准規則不變。每日排程改用 omnilane resign --daily(或 bash scripts/resign-daily.sh):失敗保留非零結束碼,並留下私有本機紀錄供 omnilane doctor 顯示,不依賴 Telegram;不會自動安裝排程。
上次探測因 API 錯誤、逾時、未登入、額度或連線問題失敗時,可執行 omnilane resign --vendor VENDOR。非互動執行會對每列等待 20 小時;互動執行或 omnilane resign --retry-failed --vendor VENDOR 可立即重試。這個旗標不會放寬簽署者檢查。失敗證據與時間欄位是否存在都受摘要保護;被修改或刪除時會回報,不會重試。
過期的證據會走只補缺列的流程,不重測健康列。若實測打到的不是宣稱的模型/強度,便是結論類失敗,不會自動重試,加 --retry-failed 也一樣。請執行 omnilane doctor,核對原始請求與工具/供應端的模型對應,修正原因後再安排驗證。以下各版本紀錄描述的是當時行為;目前安裝版本請依本節操作。
🤔 omnilane 是什麼?
問題在哪。 你已經在用某個 AI 寫程式助手——Claude Code、Codex、Cursor、 Gemini CLI 之類。每一個都只接一個模型家族,所以你交代的每件事都跑在那同一個 模型上,不管它適不適合:隨手改個檔名燒掉最貴的模型,真正難的架構問題卻剛好落在 你當下開著的那個。
omnilane 做什麼。 它給你的助手一張路由表。工作被分進通道——最難的實作、 機械粗活、初篩、硬判斷、文字終審——每條通道指名對那件事最強(也最省)的模型。 助手依通道解析目標模型,再委派給能力相符的原生子代理或既有 CLI;同模型也仍須派工。
它不是什麼。 不是 proxy、不是另一筆訂閱、不是又一個要顧的服務。它就是一張表
加一支派工腳本,躲在你現有工具背後跑。./install.sh --uninstall 可完全清除。
你不需要每一家訂閱。 每條通道都是候選鏈,派工時自動採用本機實際裝了的第一個 候選。裝一家或七家都行,整條鏈都沒有的通道就自動關閉,而不是報錯。只有一份訂閱 時,整張預設表會收斂到那一家。
⚡ 60 秒上手
你本人坐在終端機前,現在就可以派工。
1. 安裝。
npm i -g omnilane或是把專案抓下來,順便拿到可以自訂的路由表與技能檔:
git clone https://github.com/Seraphim0916/omnilane && cd omnilane
./install.sh # finds your CLIs, links the skill, speaks your language2. 看看手上有什麼。 doctor 會列出 omnilane 找得到哪些模型 CLI 與 API 金鑰,讓你知道實際會跑哪一個。它不會改任何東西。
omnilane doctor
omnilane list # the routing table this machine resolves3. 表明你是操作者,然後派工。
export OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1
omnilane route hardest-coding "fix the flaky auth token refresh"
omnilane ui start # optional: watch jobs live in your browser為什麼要那行 export? omnilane 每次派工都會拿「發問者的能力分數」去比對,所以派工時得說清楚是誰在問。真人說一次就好:
OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1(或每次帶--operator-asserted-human)。模型不能替自己這樣宣稱,它的身分是從啟動它的 CLI 讀出來的。兩者都沒有的話,派工會在建立任何工作之前就被拒絕,代碼是missing-caller-context。
真人用到這裡就夠了。下面這一節講更實用的用法:讓你的 AI 助理自己派工。
🤖 讓你的 AI 助理來開 omnilane
助理(Claude Code、Codex、Grok Build 或 Antigravity)會讀一份技能檔,裡面教它怎麼選通道、怎麼派工。每台機器做一次,共四步。
第 1 步:把技能交給助理
./install.sh 會替它找到的每個 CLI 建好連結。要手動的話:
| 助理 | 做法 |
|---|---|
| Claude Code | claude plugin marketplace add <本專案路徑>,再 claude plugin install omnilane@omnilane(同時附上 /route、/route-jobs 與完工收件匣);或把 skills/omnilane 連結進 ~/.claude/skills/ |
| Codex | 把 skills/omnilane 連結進 ~/.codex/skills/ |
| Grok Build | grok plugin install <本專案路徑> --trust |
| Antigravity | agy plugin install <本專案路徑>(先用 agy plugin validate <本專案路徑> 檢查) |
第 2 步:證明一次「每個 CLI 真的會選到你指定的模型」
模型來派工時,只能派給這台機器證明過的目標:例如 codex -m gpt-5.6-sol 真的跑的是 Sol。這份證明是一個本機檔案,叫傳輸覆蓋檔(transport overlay)。安裝包裡不會附。沒有它,每條通道都會用 runtime-mapping-unverified 拒絕模型呼叫者,omnilane doctor 也會警告 no overlay configured。
請在一般的桌面終端機裡建立。(用 ssh 登入的工作階段讀不到 CLI 登入用的鑰匙圈,會把每一家都報成沒登入。)
cd "$(npm root -g)/omnilane" # or your clone
ROOT=~/.omnilane/transport-evidence/first-sweep
python3 scripts/lib/probe_sweep.py --root "$ROOT" # one tiny prompt per selector, about 55 calls
python3 scripts/lib/build_overlay.py --root "$ROOT"
cp "$ROOT/transport-contracts.local.json" ~/.omnilane/transport-contracts.local.json
echo 'export OMNILANE_AA_TRANSPORT_OVERLAY="$HOME/.omnilane/transport-contracts.local.json"' >> ~/.omnilane/local.sh
omnilane doctor | grep transport-overlay # PASS, with a count per vendor沒登入的那一家會被標成 unprobeable,就只是維持未驗證,其他家照常可用。
第 3 步:讓這份證明自己保持最新,不用你動手
覆蓋檔是用雜湊值釘住每個 CLI 執行檔的,而這些 CLI 會自己更新,常常一週一次。更新之後,那一家的通道就會被拒,直到覆蓋檔重簽為止。omnilane resign 一個指令做完全部:找出哪裡變了、只重新探測那一家、檢查結果、換上新檔、送一筆真實派工確認,失敗就自動還原舊檔。
它不是什麼都簽。變動過的 CLI 只有在「簽署者跟紀錄上的相同、而且裝在同一類位置」時,才會無人值守地重簽。所以先告訴它一次你接受哪些簽署者:
omnilane resign --record-signers # once, right after Step 2如果你每次更新後都會自己修補某家 CLI、再用 adhoc 重新簽署,也要告訴它一次(每家各一次);之後同一個安裝目錄裡的 adhoc 新版也會無人值守地重簽:
omnilane resign --trust-adhoc claude # 只有你自己會把 claude 簽成 adhoc 時才需要接著讓它每天跑一次。用什麼排程器都行,但一定要跑在你的桌面登入工作階段裡(CLI 需要鑰匙圈)。macOS 可以用 LaunchAgent:
cat > ~/Library/LaunchAgents/dev.omnilane.resign.plist <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>dev.omnilane.resign</string>
<key>ProgramArguments</key><array><string>/bin/zsh</string><string>-lc</string><string>omnilane resign --daily</string></array>
<key>StartCalendarInterval</key><dict><key>Hour</key><integer>9</integer><key>Minute</key><integer>0</integer></dict>
<key>StandardOutPath</key><string>/tmp/omnilane-resign.log</string>
<key>StandardErrorPath</key><string>/tmp/omnilane-resign.log</string>
</dict></plist>
EOF
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/dev.omnilane.resign.plist本版實測過從桌面終端機執行 omnilane resign,包含一次真實的、無人值守的 Codex 自動升級重簽;上面這個 LaunchAgent 包裝只是範例,本身沒有實測過。請在你的機器上用 launchctl kickstart gui/$(id -u)/dev.omnilane.resign 確認。
omnilane resign 的結束碼:
| 結束碼 | 意思 | 你要做的事 |
|---|---|---|
| 0 | 沒有東西變動,或變動的都已重簽 | 不用做 |
| 10 | 只有 --check 會出現:有東西變了 | 執行 omnilane resign |
| 20 | 有一家需要你:簽署者是新的或沒紀錄、執行檔沒簽章或在本機被改過、換了安裝目錄,或供應商這次拒絕了上次通過的探測 | 讀訊息。它會印「稍後重試」,或印出你看過之後該執行的那一行 omnilane resign --vendor V --approve V |
| 30 | 重簽後的覆蓋檔沒通過真實派工,已還原成前一份 | 沒有東西壞掉,讀紀錄即可 |
| 2 | 沒有設定覆蓋檔 | 做第 2 步 |
| 40 (EXIT_HOST_CONFIG) | 主機設定載入失敗,或已設定的覆蓋檔無法讀取、JSON 不合法;不做變更 | 修正 stderr 指出的路徑與原因;每日工作的通知方式由負責人決定 |
| 50 (EXIT_BUSY) | 這台主機已有另一個 omnilane resign 在跑;不讀也不寫 | 等它跑完再執行這一次 |
argparse 的用法錯誤也回傳 2;已設定但讀不到的覆蓋檔回傳 40,不是 2。
兩個限制要知道。簽署者檢查用的是 macOS 的程式碼簽章,所以在 Linux 上,每次 CLI 變動都會停在結束碼 20 等你 --approve。另外,沒有真正簽章的執行檔(例如在本機修補過的 CLI)一定會停下來等核准:沒有任何東西能證明它來自原廠,而這正是這項檢查存在的理由。
第 4 步:在助理裡面試試看
請你的助理執行 omnilane whoami。它應該回報自己是哪個模型、哪個強度,以及一個分數。接著請它派一件小事:「用 omnilane 讓 triage 通道數一數這個專案裡有幾個 TODO 註解」。
如果被拒絕,拒絕訊息會說是哪一關沒過、該怎麼辦:
| failed_gate | 白話 | 怎麼修 |
|---|---|---|
| caller-identity | omnilane 看不出是哪個模型在問 | 讓它把 omnilane whoami 當成那次工具呼叫裡的唯一一條指令。Codex 尤其如此:後面接了 ; echo $?、&& 或管線就讀不到 |
| target-transport | 這台機器還沒證明過那個目標,或 CLI 之後更新過 | omnilane resign(第 3 步) |
| downward-ceiling | 目標模型的分數比發問的模型高;模型只能平派或往下派 | 從拒絕訊息列出的 eligible_lanes 挑一條,或用更高的強度啟動助理 |
Codex 的排程喚醒既有對話串時不會記錄強度。omnilane 這時會把該呼叫者限制在它那個模型的最低分,而不是直接拒絕:便宜的通道照常可用,貴的通道會告訴你要哪個強度才派得動。
🧭 運作方式
omnilane 讓任何一個 agentic CLI 的主迴圈把子任務分類到通道(lane),
再以無頭方式把每條通道派工給該項工作最強的廠商——直接沿用你既有的訂閱登入
(openrouter vendor 例外:免裝任何 CLI,一把 API 金鑰直連):
flowchart LR
M["主迴圈<br/><i>你在用的任一 CLI</i>"] --> T{{"routing.yaml<br/>一張共用路由表"}}
T -->|hardest-coding| C1["Claude — Fable 5.1"]
T -->|bulk-mechanical| C2["Codex — GPT-5.6 Sol"]
T -->|taste-final| C3["Claude — Fable 5.1"]
T -->|long-context| C4["Gemini — 3.7 Flash"]
T -->|live-search| C5["Grok — 4.6"]
T -->|"arbitrate(選配)"| C6["vote — 1-4 模型評審團"]routing.yaml— 通道 → 廠商+模型+推理檔位。一個檔案,四個執行框架共用。- 候選鏈 — 一條通道可以列多個候選(
codex … | claude … | off), 派工時自動採用本機實際裝了的第一個廠商 CLI。只訂一、兩家也能用同一張表。 scripts/dispatch.sh [--vendor V] <通道> "<任務>"— 查表後以無頭方式 呼叫對應廠商的 CLI。--vendor會鎖定點名廠商,不做降級。skills/omnilane/SKILL.md— 一份技能四個框架都能載入: 先解析通道的目標模型,再透過相符的原生子代理或 CLI 派工。omnilane mcp— 同一套路由改以 MCP stdio server 提供, 給走 MCP 而非 skill 整合的宿主。
| | | |
|:---:|:---:|:---:|
| 🧭 一張表四個執行框架共用 | 🪂 候選鏈自動降級到你有裝的 CLI | 🗳️ 意見評審團重大決定多模型投票 |
| 🔒 安全機制排隊鎖 · 看門狗 · 禁巢狀 | 🌏 五種語言安裝器說你的母語 | ↩️ 完全可逆--uninstall 一鍵還原 |
🛤️ 通道一覽(預設值;實際生效值跑 scripts/dispatch.sh --list 看)
AA aa-v4.3.2-2026-10-08-v1:approved(操作者已於 2026-10-08 核准);2026-10-08 已由官方確認 Haiku 5.5 的 claude-haiku-5-5 代號與五種強度,仍待主機傳輸探測。證據。
| 通道 | 首選模型 | 備選模型 | 用途 |
|---|---|---|---|
| 🔥 hardest-coding | GPT-6 Astra(xhigh) | GPT-6.1 Sol(xhigh)→Claude Opus 5.5(medium)→GPT-6.1 Sol(high)→GPT-6 Astra(medium)→GPT-6.1 Sol(medium)→Claude Fable 5.1(medium)→Claude Opus 5(high)→Claude Sonnet 5.5(high)→GPT-6 Astra(low)→Claude Opus 5(medium)→Claude Opus 5.5(low)→Claude Haiku 5.5(xhigh)→Claude Sonnet 5.5(medium)→Claude Opus 5(low)→Grok 4.7(high)→Grok 4.6(high)→Gemini 3.8 Flash(High) | 最難的實作、深度除錯、正確性攸關的修改 |
| 🏗️ bulk-mechanical | GPT-6.1 Sol(medium) | Claude Opus 5.5(medium)→GPT-6 Astra(medium)→GPT-6.1 Sol(high)→Claude Sonnet 5.5(high)→GPT-6.1 Sol(low)→GPT-6 Astra(low)→GPT-6 Sol(high)→GPT-5.6 Sol(high)→Claude Opus 5.5(low)→Claude Haiku 5.5(xhigh)→Claude Sonnet 5.5(medium)→Claude Haiku 5.5(high)→Claude Haiku 5.5(medium)→Claude Haiku 5.5(low)→GPT-6 Sol(medium)→Claude Opus 5(low)→GPT-6 Sol(low)→Gemini 3.8 Flash(High) | 重構、搬遷、測試、大面積掃描等耐力工作 |
| 🧹 triage | GPT-6 Luna(high) | GPT-5.6 Luna(high)→Gemini 3.8 Flash(Low)→Claude Haiku 5.5(medium)→Claude Haiku 5.5(low)→Claude Sonnet 5(low)→Claude Haiku 4.5 | 大量掃描、第一輪篩選 |
| ⚖️ hard-judgment | Claude Opus 5.5(xhigh) | Claude Fable 5.1(xhigh)→ Claude Opus 5.5(medium)→ Claude Fable 5.1(medium)→ Claude Opus 5(high)→ Claude Opus 5(medium)→ Claude Opus 5.5(low)→ GPT-6.1 Sol(xhigh)→ GPT-6 Astra(high)→ Grok 4.7 → Gemini 3.8 Flash(High) | 架構裁決、深度推理、第二意見 |
| ✒️ taste-final | Claude Sonnet 5.5(xhigh) | Claude Opus 5.5(xhigh)→Claude Opus 5.5(high)→Claude Sonnet 5.5(high)→Claude Opus 5.5(medium)→Grok 4.7(high)→Grok 4.6(high)→GPT-6 Astra(xhigh)→Claude Haiku 5.5(xhigh)→Claude Haiku 5.5(high)→Gemini 3.8 Flash(High) | 對外文字與風格裁決;評測不等於審美證明 |
| 💬 consult | GPT-6 Astra(xhigh) | Claude Opus 5.5(xhigh)→ Grok 4.7 → Grok 4.6 → Gemini 3.8 Flash(High) | 直接點名模型諮詢;保留 --vendor 避免降級 |
| 🎨 ui-draft | Claude Opus 5.5(high) | GPT-6.1 Sol(high)→ Claude Opus 5.5(medium)→ GPT-6 Astra(medium)→ GPT-6.1 Sol(medium)→ GPT-6.1 Sol(low)→ Claude Opus 5.5(low)→ GPT-6 Astra(low)→ GPT-6 Sol(medium)→ Gemini 3.8 Flash(High) | 只有附設計系統/參考圖時做 UI 草稿;不把評測誇大成審美證明 |
| 📚 long-context | Claude Opus 5(high) | Claude Opus 5(medium)→ Claude Opus 5(low)→ GPT-5.6 Terra(xhigh)→ Gemini 3.8 Flash(High) | 長文件整合;上下文容量本身不證明任務品質 |
| ⚡ fast-agentic | GPT-6.1 Sol(medium) | GPT-6 Astra(medium)→ GPT-6.1 Sol(low)→ GPT-6 Sol(low)→ GPT-6 Astra(low)→ Gemini 3.8 Flash(Medium)→ Claude Sonnet 5.5(medium)→ Claude Opus 5.5(low) | 高速多步驟工具迴圈、多模態檢查 |
| 📡 live-search | Grok 4.7 | Grok 4.6 → Gemini 3.8 Flash(High)→ Claude Opus 5.5(low)→ off | 即時 X/網頁搜尋;備援只有一般網搜,不等同 X 脈絡 |
| 🚰 coding-overflow | Grok 4.7 | Grok 4.6 → Gemini 3.8 Flash(High)→ Kimi K3 → Qwen3 Coder Plus → OpenCode → off | 顯式 Codex 額度卸載;供應商失敗後不自動跨家重試 |
| 🗳️ arbitrate | off(選配模型評審團) | — | 重大決定的內建意見評審團;預設停用,在 routing.local.yaml 啟用,每位評審每輪一次呼叫 |
備選模型是候選鏈的下一位——首選那家的廠商 CLI 沒裝時,派工就降到它。每條
通道都是這樣一條鏈;整條都沒裝時,通道自動降為 off。
Fable 5.1 與 Astra 現在領頭困難工作。 同條件證據見常見問題。
自然語言諮詢
透過 omnilane 技能或 /route,你可以直接說: 「請 Opus 挑戰這個架構。」
自然語言是由 Agent Skill 判讀,不是在 dispatch.sh 裡做自由文字 shell 解析。
- 只問「哪個模型適合」時,回答相符通道目前第一個可用模型,不發出模型呼叫。
- 只點廠商名時,使用該廠商在
consult通道裡設定的候選模型。 - 點標準模型別名(例如 Opus)時,會鎖定技能表裡的確切模型家族。明確目標 不存在或 CLI 不可用時會清楚失敗,不會暗中換廠商或模型家族。
用助理自己的子代理
omnilane 預設把工作交給廠商的命令列工具。當該做這件事的模型就是助理自己那一家的時候,再繞出去叫另一個 CLI 是多走一趟:多一次登入、多一個程序,那個 CLI 一更新又多一個會壞的地方。多數助理自己就能開子代理,omnilane 可以改成替它規劃這種工作。有兩種做法。
跟助理跑一模一樣東西的工人(--inherit)。 助理開子代理時不指定模型、也不指定強度,工人就是呼叫者的分身。分身不可能比本尊強,而 omnilane 的分數檢查要防的就只有這件事,所以這條路不需要廠商 CLI、不需要傳輸覆蓋檔;呼叫者的強度讀不到、或覆蓋檔過期時,它照樣能用。
omnilane native-context --workdir /absolute/repo --inherits-caller-runtime # prints a capability file
omnilane route --inherit --native-context /path/printed/above --workdir /absolute/repo triage "Count the TODO comments"
# -> a PENDING handoff (JSON). The assistant now starts its own sub-agent with no
# model argument, checks the result, and records it:
omnilane jobs --json complete-native JOB_ID /absolute/completion.json
omnilane jobs --json status JOB_ID老實的部分:交接單上標著 satisfies_lane_target: false。通道在這裡只是「這是哪一類工作」的標籤。這樣做出來的結果是「助理自己的子代理」做的,絕不是「hardest-coding 那個模型」做的;需要比呼叫者更強模型的通道,照樣會被拒。--inherits-caller-runtime 是助理自己聲明「我的子代理工具就是這樣運作」,omnilane 觀察不到。各家目前已知的狀況:
| 助理 | 不帶模型參數的子代理 |
|---|---|
| Claude Code | 官方文件寫明會用主對話的模型,強度沿用工作階段(除非代理定義另有設定)。內建 general-purpose 代理、且沒設 CLAUDE_CODE_SUBAGENT_MODEL 時成立。本版完整跑通過 |
| Codex | collaboration.spawn_agent 不帶模型、不帶強度。本版完整跑通過 |
| Grok Build | 文件寫明沿用上層的模型(內建 general-purpose 代理是 model: inherit);強度沒有文件說明。本版沒跑過 |
| Antigravity | agy 1.2.7 找不到子代理工具。不適用 |
助理的工具能指定的特定模型。 把工具真正接受的東西寫進能力聲明檔(從 omnilane native-context 產生的檔開始,每組確切的模型與強度加一列),再用一般的 omnilane route 帶上 --native-context FILE。只有某一列完全相符時 omnilane 才會用子代理:模型、強度、模式、工作目錄、工具、隔離方式、生命週期都要對上。同一家廠商不等於同一個模型,也不會從你裝了哪些 CLI 去猜。--executor native 不符就失敗、不回退;--executor cli 強制走外部 CLI。如果同廠商的目標只因為沒給檔案而走了 CLI,派工現在會明說。
不管哪一種,子代理都共用助理的工具與檔案系統:沒有作業系統層級的沙箱,advise/work 是意圖,不是強制。背景、常駐、具名對話串、多輪、投票與 sysops 工作仍走 CLI。協定處理需要 Python 3.9 以上。結構定義、完成檔、代理重用與取消:見 docs/native-executor.md。
通道的最佳模型不因主控是誰而改變。以下是角色指引,不是親自執行的豁免:
即使模型相同,也要委派給子代理。呼叫端明示模型、推理強度、任務模式與工作目錄,
並以空工具陣列及 shared-inherited 隔離和生命週期能力同列相符時,才採原生代理;否則走 CLI。
主控負責編排與驗收,工作代理執行任務且不得再派工。
- Claude Code · Fable 5.1——品質敏感工作建議的提示詞層主控;這是角色,不是新通道或自動選模器。最難編碼用 max,判斷/文字用 xhigh;獨立 Codex 複核用 Astra,bulk 用 Sol,長文/高速工作用 Gemini 3.8 Flash,即時搜尋用 Grok。
- Claude Code · Opus 5——顯式點名時可做均衡型提示詞層主控與獨立複核(一般用
high,更深複核可選xhigh),也保留為 long-context 備援;這是選配角色,不是新通道或 hard-judgment 預設。 - Codex · Sol——bulk-mechanical 與有參考限制的 ui-draft 委派並使用 high;最難編碼/判斷升級 Fable 或 Astra,長文/高速工作交 Gemini 3.8 Flash,即時搜尋交 Grok。
- Codex · Astra——提示詞層主控備位與獨立複核者;最難編碼/判斷與 consult/taste 預設用 xhigh,需要時可明確指定
--vendor codex --effort max;顯式 model/effort 永遠優先。 - Codex · Terra——用 max 接 Codex 的 long-context 備援;bulk 留給 Sol high,困難工作升級 Fable/Astra。
- Grok Build · Grok 4.7/4.6——委派 live-search、coding-overflow,並兼任 hardest-coding、hard-judgment、taste-final 的備援。首選人手在的話,最難的編碼/判斷/文字交給 Codex、Claude、Gemini;仍要驗證 API 簽章與引用事實。
- Antigravity · Gemini 3.8 Flash——long-context 用 Medium,fast-agentic/triage 用 Low,bulk/overflow/網搜備援用 High。不要把代理/編碼評測推論成審美或主控權。
🖥️ Live Board
每一次派工——不論前景或 --background——都是落盤的一筆 job。Live Board
是架在這個 job 儲存上、選配且唯讀的本機工作台:每個模型被問了什麼、答了
什麼、怎麼路由、是否還在執行,一眼看完。
omnilane ui start # 啟動或沿用伺服器,印出通過驗證的網址
omnilane ui status # 查看本機伺服器狀態
omnilane ui url # 印出目前通過驗證的網址
omnilane ui stop # 正常停止桌機版的工作清單與詳細內容可各自捲動;手機版使用清單/詳細內容切換,支援返回
鍵與 Esc。伺服器傳送事件(SSE)會即時更新,又不會重建目前聚焦的工作列;短暫
斷線時保留最後畫面並自動重連。可把任何已載入的工作釘成參考,再選另一筆工作,
並排比較模型路徑與公開結果;參考快照只留在瀏覽器記憶體,關頁即消失。服務只綁
127.0.0.1、用隨機 token 保護、全程唯讀。畫面只顯示 task.txt 與公開的
out.txt,不顯示工作端或廠商原始 log。
搜尋與狀態篩選會套用到最近保留的 50 筆工作歷史。按「匯出目前結果」只會把畫面上 目前可見的公開中繼資料下載成 JSON;不含 token、任務本文、結果本文、工作目錄與原始 log。
畫面提供英文、日文、韓文、繁體中文與簡體中文。首次載入依瀏覽器語言決定,可用標題列 的切換器覆寫,選擇會記在本機。
核心路由不需要 Python;只有這個介面需要 Python 3.9 以上。
📦 安裝
前置需求:想路由到的廠商 CLI(codex、claude、grok、agy,另可選
kimi、qwen、opencode)已登入且在 PATH 上——有幾家裝幾家就好,
缺的通道會自動降級。openrouter vendor 是例外:不需要任何 CLI,只要
curl 和環境變數裡的 OPENROUTER_API_KEY。
最快:./install.sh — 自動偵測本機的 CLI、接好技能、列出其餘的外掛安裝指令、
印出這台機器的生效路由表,最後問你要不要進入互動設定選單(--uninstall 可逆)。
安裝介面依系統語言自動切換(英/繁中/簡中/日/韓,可用 OMNILANE_LANG=zh-TW
強制)。另提供選配的各 CLI 常駐路由提示:在各 CLI 指令檔尾端加一段有
標記、可逆的區塊(~/.claude/CLAUDE.md、~/.codex/AGENTS.md、
~/.grok/Agents.md、~/.gemini/GEMINI.md——路徑可能隨 CLI 版本不同),
讓主迴圈記得查路由表;非互動安裝可帶 OMNILANE_HOOKS=all|none|claude,codex。
./install.sh --check 可唯讀檢查漂移;安裝或 --uninstall 加上
--dry-run,可先預覽每個由這份 checkout 擁有的檔案動作。
手動接線:
要回滾安裝器擁有的連結與標記提示,執行 ./install.sh --uninstall。
- Claude Code:以外掛安裝(附
/route、/route-jobs指令,並內建SessionStarthook,開場自動注入路由提醒,不必修改 CLAUDE.md), 或把skills/omnilane放進~/.claude/skills/。 - Codex:把
skills/omnilane放進或連結到~/.codex/skills/。 - Grok Build:
grok plugin install <本 repo 路徑> --trust - Antigravity:
agy plugin install <本 repo 路徑>(先用agy plugin validate檢查)
MCP server
omnilane mcp 會啟動零依賴、跑在本機的 MCP stdio server,讓任何支援 MCP
的宿主不必安裝 skill、也不用加路由提醒,就能發現並呼叫 omnilane。在宿主
設定裡指向已安裝的 CLI 即可:
{
"mcpServers": {
"omnilane": {
"command": "omnilane",
"args": ["mcp"]
}
}
}Server 提供 route,以及一組唯讀查詢工具:list_lanes、explain、validate、dry_run、jobs_list、jobs_status、jobs_result、jobs_stats、jobs_recommend、jobs_audit、doctor,以及必須明確選用的 provider_probe。
route 預設唯讀 advise 模式;選 work 的呼叫必須同時提供明確的
workdir。
唯一的執行需求是 Node.js(不裝任何 npm 套件);也可以直接
npm install -g omnilane,CLI 連同 MCP server 一起裝好。
⚙️ 自訂設定
三層,全部選用:
- 互動選單 —
scripts/configure.sh列出可設定的通道,讓你逐條選 廠商 → 模型 → 推理檔位(有建議清單,也可自由輸入未來的新模型名), 寫進~/.omnilane/routing.local.yaml。多廠商consult會刻意略過, 要改請手動編輯。install.sh裝完會主動問要不要跑。 ~/.omnilane/routing.local.yaml— 手改覆寫檔,格式同routing.yaml, 本機優先。參考routing.local.yaml.example。~/.omnilane/local.sh— 機器專屬的執行檔路徑、proxy、認證包裝; 每個執行器都會載入,永不進版控。參考local.sh.example。
隨時檢查結果:
scripts/dispatch.sh --list # 生效表,標出候選鏈降級與關閉的通道📖 指令參考
omnilane list | route … | jobs … | configure # 全域指令,任何目錄都能用
# (install.sh 會連結進 ~/.local/bin)
eval "$(omnilane completion bash)" # 在目前 Bash 啟用補全
source <(omnilane completion zsh) # 在目前 Zsh 啟用補全
omnilane completion fish | source # 在目前 Fish 啟用補全
omnilane ui start # 啟動或沿用本機 Live UI,印出網址
omnilane ui status # 查看 Live UI 是否運作中
omnilane ui url # 印出目前通過驗證的本機網址
omnilane ui stop # 停止 Live UI
omnilane doctor [--json] [--strict] [--probe V] [--probe-timeout SEC] # 實際探測必須明確選用
# transport-overlay:執行檔路徑不符為 FAIL;供應商雜湊或執行器變動維持 WARN
omnilane benchmark [--json] [--run] [--vendor V] [--cost-per-call V=USD] # 預設只乾跑
dispatch.sh [--background] [--dry-run] [--thread NAME] [--mode advise|work|sysops] [--workdir 目錄]
[--vendor V] [--model M] [--effort E] [--timeout SEC] [--job-timeout SEC]
[--caller-context FILE | --operator-asserted-human] # who is asking
通道 "任務" # "-" 表示從 stdin 讀任務
dispatch.sh [--json] --list [--json]
dispatch.sh [--json] --explain 通道 [--json] # 離線逐候選解釋路由決策
dispatch.sh [--json] --validate [--json] # 離線檢查生效路由,不呼叫模型
jobs.sh [--json] {list | status 工作ID | result 工作ID} # JSON 結果只回中繼資料,不回本文
jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done|dead|pending|cancelled|expired] # 過濾清單
jobs.sh wait 工作ID [--timeout N] # 工作結束碼;124 逾時;125 工作者消失
jobs.sh cancel 工作ID # 停止執行中的工作:整組 SIGTERM,再 SIGKILL
jobs.sh rm 工作ID # 刪除單一已完成/已死工作(執行中會被拒絕)
jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # 本機成功率與路由彙整
jobs.sh [--json] recommend [--last N] [--lane L] [--min-samples N] # 有證據門檻的廠商建議
jobs.sh audit [--last N] [--json] # 唯讀檢查工作完整性與隱私
jobs.sh prune [--keep N] [--apply] # 預設只預覽;只清理已完成工作;--apply 移到 ~/.Trash
omnilane mcp # MCP stdio server(需 Node.js)
omnilane release-audit [--target 版本] [--json] # 離線、唯讀的發布閘門
configure.sh # 互動通道選單
configure.sh set|get|unset|list|diff LANE [SPEC] # 非互動編輯/檢視 routing.local.yamlconfigure diff 在兩份檢視中保留 local.sh 的相同本機可用性設定,因此比較的是路由覆寫,而不是本機程式設定遺失造成的差異。 任一檢查失敗時,會回傳該退出狀態並說明失敗階段,而不會輸出比較結果。
configure get 會傳遞檢查失敗的退出狀態,不會回傳不完整資料或誤報通道不存在。configure list 會回報存在性檢查錯誤;覆寫設定確實缺失或為空時仍正常成功。
configure set 先驗證暫存候選設定,再發布,並保留既有檔案的權限模式。讀取既有路由內容失敗、驗證程式意外失敗或目標通道出現結構錯誤時,原設定保持不變;可用性警告與其他通道錯誤仍按既有規則處理。
configure unset 先完成讀取與篩選,再沿用原本的就地寫入方式更新目標檔案。讀取或篩選失敗時原內容不變;寫入失敗會回報錯誤,但不保證回復。
Bash、Zsh 與 Fish 補全包含文件中的頂層命令、目標命令與工作命令群組。選擇補全只會填入命令文字,不會執行工作操作。
未指定 --vendor 時,benchmark 從有效路由清單取得供應商,並略過顯示用的 unavailable 標記。若沒有可供 benchmark 使用的供應商,會以結束代碼 2 回報未找到設定的供應商;預設仍只乾跑,不呼叫供應商。
工作的 list 與 status 使用一致的觀測狀態。dead 表示沒有記錄退出碼,且工作程序的 PID 無效或已不存在;它不會出現在 --status running 中,可用 --status dead 篩選。result 會說明未記錄退出碼,不再誤稱程序仍在執行。尚無 PID 的啟動階段仍沿用 running 狀態,不會推測退出碼。
背景工作需要 Perl 監督,讓取消能終止受監督的程序群組。
監督本身不新增整體工作期限;沒有適用的工作逾時設定時,中繼資料仍為 job_timeout: null。
受監督的單次呼叫使用 Perl alarm,逾時可能回傳 142;整體工作期限屆滿回傳 124。
jobs close 最多等待 11 秒,包含程序群組清理。
--thread NAME 會在多次單次派工間延續命名的 Claude、Codex、Grok 或 Gemini
對話。0.33.0 會固定供應商、模型、effort 與實體工作目錄;可用
jobs.sh threads、threads show NAME、threads rm NAME 管理本機狀態,
移除狀態不會刪除供應商端工作階段。
jobs recommend 只讀取通過驗證的公開中繼資料與退出碼。候選達到最低樣本數後,
依成功率、樣本數、廠商名稱排序;預設至少三筆已完成工作。它不讀任務/結果本文,
也不修改路由。
doctor --probe V 只會做一次有逾時上限的 advise 模式供應商呼叫,回傳可用性、
選到的模型、耗時與回應位元組數,不回傳回答本文;未帶 --probe 時仍完全離線。
benchmark 使用 benchmarks/workloads.tsv 的固定題組,預設只解析路由、不呼叫供應商;
--run 才是實際呼叫閘門,成本總額也只依 --cost-per-call 明確提供的估值計算。
重大決定可以開評審團,不是問一個人。arbitrate 通道預設關閉——
評審團每評審每輪燒一次額度,所以做成選配。要用就在 routing.local.yaml
寫 arbitrate: vote codex,claude,grok -,或跑設定選單,從
codex/claude/grok/gemini 自選 1-4 個評審。開了之後,同一個問題丟給每個
評審,意見並排回來,由發問的主控模型當主席下裁決。檔位欄填 2 開辯論輪
——每個評審看完整個評審團的意見,只針對分歧互駁。進階使用者可用
exec 廠商換成自己的閘門:arbitrate: exec /路徑/腳本 -,腳本收
MODE WORKDIR EFFORT PROMPT_FILE OUTPUT_FILE、把裁決寫進 OUTPUT_FILE
(見 scripts/runners/run-exec.sh)。
退出碼:2 用法錯誤(包含廠商值不合法,或指定廠商不在該通道)、3 通道已關閉、
4 候選鏈沒有可用 CLI,或指定廠商已設定但其 CLI 不可用、
5 第一輪成功評審太少、6 第二輪沒有任何反駁成功、86 拒絕巢狀派工、
87 等鎖逾時、124 整體任務逾時;
其餘直接透傳工作端自己的退出碼。
🎭 模式
- advise(預設):本機唯讀分析;供應商支援時可用原生網頁/搜尋工具。模型連線保留,修改工具受限;不同供應商的 X/網搜能力不視為等同。
- work:檔案與命令操作限制在明示的
--workdir,關閉代理工具對外連線,但保留模型連線。尚未支援的強制邊界會在呼叫模型前停止,不偷偷變成 sysops。 - sysops:每次派工明示選用,開放代理工具、檔案與網路存取;永遠不是通道預設值,任務須列明可執行操作。
CLI 省略 --workdir 時預設為呼叫端目前目錄;任務書仍應明示工作目錄。MCP route/dry_run 的 work 介面則另行要求明示 workdir。
Codex 與 Claude 的三種模式使用不同政策。Agy advise/sysops 使用獨立的每工作階段原生設定,不替換訂閱認證;Agy 1.1.27 work 已以四個經驗證工具及原生終端沙箱完成限定的新建/續接驗收:工作目錄內讀寫、修改、編譯及越界寫入拒絕通過。外部暫存/快取讀取也受限;每次啟動重寫明示設定,不宣稱設定全程不可變。另一次正式 work 即時/FIFO 兩輪驗收已通過前輪讀回、越界寫入拒絕及正常關閉,來源保持不變。Grok advise 使用原生工具允許/拒絕規則;Grok 1.0.13 的完整一次性 plain 路徑已驗證原生關鍵字搜尋、抓頁及寫入拒絕,使用內部網頁工具 ID 與每筆工作的 MCP 就緒狀態隔離,不關閉掛鉤。若 CONTEXT_MODE_MCP_SENTINEL_DIR 已設為非空值,會在呼叫模型前明確回報衝突,不覆寫原設定。原生子程序網路隔離僅支援 Linux,因此 macOS Grok work 預設仍保留閘門;Grok 即時模式仍須明示 sysops,此次 advise 結果不擴張到其他路徑。OpenRouter 維持僅 advise;其餘供應商不自動納入這份四供應商契約。證據範圍見日期化執行驗收表。
macOS 上的 Grok work:操作者可以只在 routing.local.yaml 加上 option.grok-macos-work: unconfined,啟用沒有隔離的單次 work。預設關閉;關閉時,macOS 的 work 候選鏈會略過 Grok。開啟時 doctor --strict 會失敗。詳見選項、風險與 Grok 工人必用的任務書範本。
🔒 內建安全機制
- 禁止巢狀派工 — 工作端不得再往外派(
OMNILANE_DEPTH守衛,退出碼 86), 杜絕 AI 叫 AI 的額度連環燒。 - Codex 排隊鎖 — 同一目標目錄的 codex 派工自動序列化(鎖以正規化後的 workdir 為鍵);崩潰殘留的鎖以擁有者 PID 偵測後安全接管。
- 看門狗 — 每個工作端跑在
timeout/gtimeout之下,兩者皆無時退到 perl-alarm 後備(原生 macOS 就是這情況),卡死的 CLI 不會掛整晚。 上限作用於每次 CLI 呼叫,優先序由高到低:--timeout SECONDS> 單一通道OMNILANE_TIMEOUT_<LANE>(通道名大寫、-換成_,如OMNILANE_TIMEOUT_HARD_JUDGMENT) > 全域OMNILANE_TIMEOUT(預設 600 秒)。 它是單次呼叫的防卡死看門狗,不是整個任務的時間預算:會重試的 vendor(grok) 或 vote 面板(評審 × 輪次)會發起多次呼叫,總耗時可能是該值的數倍。 - 整體任務保險絲 — 選配的
--job-timeout SECONDS用同一個程序群組監工, 一次涵蓋等鎖、重試、所有評審與輪次。優先序為旗標 >OMNILANE_JOB_TIMEOUT_<LANE>>OMNILANE_JOB_TIMEOUT> 關閉;唯一的自動例外 是 Codex 在 Git worktree 外執行work時,若未設定整體上限,就沿用解析後的 單次呼叫看門狗作為整體保險絲,上限為監工支援的 999999999 秒。到期會清掉 受監工的程序群組並回傳 124。這個自動保險絲需要內附的 Perl 監工;若環境 無法使用,派工會警告但仍透過原有單次呼叫看門狗路徑執行非 Git 工作;若連 單次看門狗工具都沒有,該路徑會另外警告。 像 fubon-autotrade 規模的完整深度審查,建議先從 2–4 小時(7200–14400 秒)起跳,單次呼叫看門狗可先設 30 分鐘;這只是建議值, 不會寫死成預設。 - 背景工作生命週期 —
--background的工作端跑在自己的 process group, 呼叫端退出也不受影響;被殺會落盤退出碼,jobs.sh status會報dead而不是永遠顯示running。 - 任務酬載上限 — 過大的任務文字自動頭尾截斷,防止撐爆工作端脈絡。
📬 即時信箱
即時信箱是常駐背景派工,不是一次性派工。Claude 與 Gemini 保留 --background 自動使用即時信箱的既有行為;Codex 與 Grok 預設維持一次性派工,只有明示 --background --live 才啟用,Grok 另須指定 --mode sysops --workdir DIR。派工者能補傳指示,並負責用 jobs.sh close ID 收尾;閒置上限或設定的整體工作逾時(--job-timeout)仍會使工作結束。
scripts/dispatch.sh --background --vendor claude hard-judgment "檢查逾時測試失敗的原因"
# 將 dispatch 顯示的工作 ID 存成 $ID
scripts/jobs.sh send "$ID" "再確認重試路徑。"
scripts/jobs.sh watch "$ID"
scripts/jobs.sh tail "$ID" --lines 20
scripts/jobs.sh close "$ID"
scripts/jobs.sh retry "$ID" --background前景派工與前景 jobs retry 在工作失敗時也會印出已儲存的公開輸出,再回傳該工作的非零結束代碼。背景派工保留原有 job ID 輸出。
watch 追隨 $JOB_DIR/events.jsonl;tail 讀取公開的 out.txt。Claude、Gemini、Codex 與 Grok 都支援即時信箱,但 Codex/Grok 自動選擇時仍是一次性派工,必須明示 --live。Grok 的 advise/work 即時請求會在啟動前停止,因為 ACP 未強制這些受限模式的邊界;一般 advise 採用一次性原生工具允許/拒絕規則。供應商不支援 --live 時立即失敗。--single-shot 對所有供應商強制一次性派工。--idle-timeout SECONDS 設定閒置上限,預設 900 秒,設為 0 則停用。
閒置時不會發出 API 呼叫,也不會增加 API 費用。預設若 900 秒內沒有新信箱訊息或新結果事件,工作程序會自動收尾;整體工作逾時仍是外層上限。處理完成可提早執行 close。對已結束或不是即時信箱的工作使用 jobs.sh send,會明確報錯並失敗。送出後不需追蹤的工作、沒有即時支援的供應商,或必須從乾淨狀態重跑的情況都不適用;請使用新的派工,或在工作完成後使用 retry。
🎯 目標編排
omnilane goal 是工頭式工作台帳。迴圈由呼叫端負責,也就是開啟目標的代理工作階段或終端機前的人:派出一份工作,從完成信箱或 omnilane jobs wait 收回結果,判斷下一份工作,再重複執行。工作數與秒數預算預設都不設上限;只有傳入 --budget-jobs N 或 --budget-seconds S 時,才會啟用對應的硬上限。omnilane 只負責記帳;每次 goal dispatch 前會檢查呼叫端設定的上限與預設啟用的重複失敗熔斷器,工頭關閉目標時才彙整報告。
GOAL_ID="$(omnilane goal open "修好不穩定的結帳整合" \
--budget-jobs 4 --budget-seconds 900 --workdir /path/to/repo)"
JOB_ID="$(omnilane goal dispatch "$GOAL_ID" --mode work hardest-coding \
"重現結帳失敗,完成最小修正並驗證")"
omnilane jobs wait "$JOB_ID" --timeout 900
omnilane goal note "$GOAL_ID" "結帳整合測試已通過"
omnilane goal close "$GOAL_ID" --summary "結帳整合已穩定"更新中斷後,失敗次數會從持久化工作紀錄重建,不會重複計數。goal close 只在報告寫入成功後關閉目標;若寫入失敗,修正錯誤後可重試關閉。
目標忙碌時會顯示唯讀的鎖定擁有者診斷,並維持結束碼 75。不會自動移除鎖定;紀錄中的 PID 無法證明擁有權,因此復原前仍須人工確認。
目標狀態與報告會如實顯示 dead 和 missing,不再誤稱仍在執行。工作狀態證據不可用或不一致時顯示 unknown,不捏造結束碼或失敗次數。各工作秒數仍是派出後的經過時間,並非實際執行時間;目標預算不變。每份未完成工作各做一次最多兩秒的本機狀態查詢。
正常清理已完成工作的檔案後,目標仍保留已驗證的結束碼、完成時間與截至完成的經過秒數。狀態與報告會另標示 artifacts=missing。沒有已記錄完成結果的工作仍維持遺失或未知,清理不會產生虛構的結束結果。
目標派工會先持久化意圖並預留一個工作名額,再以一次性的領取紀錄,在啟動前綁定意圖與產生的工作 ID。spent_jobs 仍計算已記錄工作;reserved_jobs 表示尚未釐清的提交。未釐清或損壞的台帳會阻擋新派工與結案。對帳只修復紀錄,不啟動工作、不捏造結束碼,也不重試結果不明的提交。
使用執行緒的目標派工,其 stdout 只輸出確切的工作 ID;驗證 ID 後,對應的執行緒通知會顯示在 stderr。直接背景派工仍保留原有的「通知加工作 ID」stdout 格式。
goal dispatch 會啟動背景工作,不支援 --dry-run;該選項會在目標狀態變更前被拒絕。若要預覽路由,請直接使用 omnilane dispatch --dry-run [options] LANE "TASK"。 直接預覽不會繼承目標的工作目錄;需要時請傳入 --workdir DIR。
目標預算紀錄必須使用 JSON 整數,不接受布林值或數字字串。選用上限仍是 null 或 1..999999999;計數器必須非負且位於支援的數值範圍。無效欄位會在更新台帳或派工前被拒絕。工作目錄路徑不支援定位字元、回車、換行或 NUL;一般空白與 Unicode 仍受支援。
派工報錯或結果遺失時,先查看 goal status 再決定是否重新提交:再次執行相同指令仍會建立新意圖,因此保證的是每個意圖最多啟動一次,而不是所有相同指令自動去重。對帳需要有效的既有工作 PID/結束碼證據;若在對帳前清掉證據,預留名額會保持未釐清。已完成對帳的目標歷史不受清理工作檔案影響。舊目標仍可讀取,不會自動回收過期鎖定或恢復結果不明的意圖。
背景工作開始收尾後,HUP/TERM 不會改寫已選定的結束狀態。完成通知會略過已消費紀錄,每次提示最多傳送十筆,包含無法讀取紀錄的通知。
目標狀態存放在 $OMNILANE_HOME/goals/<goal-id>/。用 goal status 可查看預算用量、熔斷次數,以及每份工作陸續寫入的中繼資料與結束狀態。goal close 會寫入 report.md 並印出路徑。單一而且作法明確的工作直接派工即可;有傳入預算旗標時,該上限是硬限制,不代表保證完成。
❓ 常見問題
不用。每條通道都是候選鏈,派工時採用本機實際裝了的第一個候選。只有一份訂閱時,
整張表會收斂到那一家;整條鏈都沒有的通道自動關閉,不會報錯。跑
omnilane doctor 可以看到這台機器現在實際接得到什麼,routing.local.yaml.example
也附了常見情境的起手設定檔(只有 Claude、以 Codex 為主、沒有 Codex)。
不會多出新的去處。派工是呼叫你早就裝好也登入過的廠商 CLI,所以程式碼只會到達
你本來就在用的那幾家。執行器在呼叫訂閱制 CLI 前會剝掉 API 金鑰環境變數,避免
一把殘留的金鑰把你悄悄切到按 token 計費。唯一的例外是 direct-API vendor 家族
(openrouter、deepseek、zai、mistral、groq、cerebras),它們本來就是
拿你設定的金鑰直呼該供應商的 API——這幾家只做 advise,不會改檔。
2026-09-05 更新用 AA v4.2 同檔位比較兩者:Fable/Astra 在 max 為
57/55、xhigh 為 54/54;AA Briefcase 在 max 為 1666/1566、xhigh
為 1657/1540。原生編碼代理比較中,Fable max 完成 70、每題 $9.18、
耗時 24 分鐘;Astra max 完成 67、每題 $4.72、耗時 26.8 分鐘。因此
hardest-coding 用 Fable max,hard-judgment/taste-final 用 Fable
xhigh,Astra 則是 Codex 家族備援與獨立複核者。
品質優先的提示詞層主控首選是 Fable max;Opus high/xhigh 是均衡型主控與
獨立複核選項;Astra 則是沿用 Codex 額度的備位與複核者。這些都是角色建議,
不是新增通道或自動主控選模器。Opus 也保留為 Claude 的 long-context 備援。
推理檔位依任務選,不預設越高一定越好。目前同條件比較與原生編碼證據支持
正確性優先的 hardest-coding 用 max;hard-judgment、taste-final
及具名 Fable 諮詢則以 xhigh 平衡品質與成本。顯式 --model/--effort
永遠覆蓋這些通道路由預設。
派工會沿著候選鏈往下走,用你手上有的第一家。不花任何額度就能先看決策:
scripts/dispatch.sh --explain hardest-coding # 逐候選解釋
scripts/dispatch.sh --list # 整張生效表
scripts/dispatch.sh --dry-run hardest-coding "…" # 完整解析後的計畫,不呼叫模型除非你明講要它改。派工預設是 advise,以各廠商的唯讀沙箱或原生工具權限
維持唯讀,並保留支援的網搜。一般修改使用 --mode work 與明確的 --workdir,
關閉代理工具網路,但保留模型連線。--mode sysops 是 Codex、Claude、Grok、Agy
各自獨立的完整權限政策,不是 work 的別名;只有任務明示允許超出 work 邊界的
操作,例如服務管理,才逐次選用,永遠不是通道預設值。
工作端也不能再往外派——深度守衛會用退出碼 86 拒絕巢狀派工,一道
指令不可能失控變成一整串 AI 燒你的額度。
三個代碼,三種不同的修法。先跑 omnilane doctor——它的 transport-overlay
檢查會直接告訴你問題出在本機設定還是你的請求。
missing-caller-context——沒有身分送到閘門。真人加上
OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1 或 --operator-asserted-human。
模型通常什麼都不用做:dispatch 會從啟動它的 CLI 讀取身分。讀不到時跑
omnilane whoami,它會印出可以帶的 --caller-context FILE,或說明讀不到的確切原因
(缺 --effort、模型別名、查無評分列)。模型不得替自己主張真人豁免。
runtime-mapping-unverified——你的身分沒問題,但目標沒有已驗證的本機請求
選擇器。可能從未探測過,也可能探測失敗;omnilane doctor 與 --json 會以 WARN
逐列顯示代號、請求與實測模型/強度(有紀錄時)、失敗類別與原因、最後探測時間、
證據路徑(不印內容)及下一步。環境類失敗會列出
omnilane resign --retry-failed --vendor VENDOR;結論類不會自動重試,會提示核對原始
請求、工具參數及供應端模型對應。證據損壞時會指出位置,並說明從已知良好備份還原,
或明確執行探測、在新目錄建立證據的方式。因額度上限造成的拒絕,仍須等額度恢復。
invalid-policy-input 搭配 "transport contract evidence changed"——以上皆非。
是 overlay 本身載不起來,因此所有廠商都會被拒。常見成因是廠商 CLI 升級:
overlay 釘住每家的執行檔與 runner 腳本雜湊,而 Codex 與 Claude 的證據路徑內嵌
版本目錄,升級後是檔案消失而非雜湊改變。帶標籤的證據只降級自己那一家;
未標籤的證據(例如探測清單)仍會關閉整個閘門。doctor 會指名檔案與廠商,
重簽流程寫在派工技能裡。
它說明這次探測把「誰回答的」釘到多緊。它不影響你能不能派工。
billed-model——供應商自己說出它計費的模型。claude 放在 modelUsage;
grok 在 --output-format json 下也一樣。這是供應商開的收據。
client-echo——CLI 記下自己送出的模型,而且那筆紀錄與你的請求相符。
codex 記在 session rollout,agy 寫進 cli.log。這是 CLI 自己抄的訂單,
不是收據:它證明請求照原樣送出去了,不能證明是誰接的。
selector-only——CLI 收下選擇器,其餘不表態。v0.42.6 之前探測的每一條映射
都是這一級。它照樣能派工,只是三級裡最弱的一級;omnilane doctor 會點名
哪幾家值得重探。
三者都不能證明上游供應商身分,也都不會讓任何車道被拒。等級是從探測產出的 東西推導出來的,不是按廠商指定,所以哪支 CLI 開始回報計費模型,下一次重探 就會自動升級,omnilane 不用改。
📊 預設值與資料來源
預設通道配置依據 Artificial Analysis 2026-07 快照(已對 AA 站上原始紀錄與
各廠官方定價頁交叉核對)加上公開對比評測;這些是意見不是定律——
設定選單和 routing.local.yaml 就是讓你不同意用的。完整工作筆記(含各評測的
但書)見 docs/model-capabilities-2026-09.md。
⚠️ 已知限制
- Antigravity 的 print 模式工具呼叫在現行 CLI 版本不穩定(可能被拒或 回無效引數)。long-context 通道的設計本來就是「把內容貼進任務」的長文 整合,不受影響;要讀取 repo 的諮詢請用 claude/codex 候選。
- Grok 沒有推理檔位開關;effort 欄位僅為介面一致而保留,實際忽略。
- 非 Git 的 Codex work 仍受支援。 部分 Codex CLI 版本可能在 Git worktree
外卡住,因此上面的自動保險絲會限制這個情境並清掉受監工的程序群組。Omnilane
不會自動執行
git init,也不要求使用者建立 repo。
📜 版本歷程
v0.54.0 新功能
- 之後評分表換新快照時,請求參數與執行檔身分沒變的列會自動沿用舊的驗證;只有新增或有變的列需要
omnilane resign。這版沿用 0.53.0 的評分表快照。 - API 錯誤、逾時、登入、額度或連線等環境原因造成的探測失敗,可用
omnilane resign --vendor VENDOR重試。非互動執行會對每個失敗列等候 20 小時;互動執行或加上--retry-failed可立即重試,不會因此核准簽署者變更。已確認的模型或強度不符不會自動重試。 - 派工被擋時,訊息會指出廠商與設定列,附上下一步的完整指令,並說明是否需要圖形終端機。
omnilane doctor與omnilane doctor --json逐列列出未驗證設定的請求與觀察身分、失敗原因、探測時間、證據路徑及下一步;證據損壞時也會說明如何還原備份或重新探測。omnilane resign --daily把失敗的非零退出碼與執行中斷留在本機私有狀態,由omnilane doctor顯示,不依賴 Telegram,也不會自動安裝排程。- 升級:
npm i -g [email protected]。從 0.53.0 升級不用重簽;從更早的版本升級,仍要在圖形終端機跑一次omnilane resign。
v0.53.0 新功能
- 升級後每台主機在圖形終端機跑一次
omnilane resign:評分表快照換成aa-v4.3.2-2026-10-08-v1,重簽前所有派工都會被擋,錯誤訊息為transport overlay snapshot mismatch。 - Claude Haiku 5.5 新增五列評分:max 43、xhigh 41、high 38、medium 34、low 29;Claude Sonnet 5.5(low)以 36 分回到表內,共有 120 列已評分設定。Haiku 的模型識別碼與強度已確認,但主機傳輸仍待探測。
taste-final首選改為 Claude Sonnet 5.5(xhigh,52 分)。Haiku 5.5 加入較低分數上限的編碼、批次、初篩與風格裁決候選;未提升為fast-agentic候選。resign改用新的三位數加法驗證回應,不再要求逐字照抄;同時重簽的第二個程序以 50 結束;覆寫設定檔不存在或無法讀取時以 40 結束,不留下鎖定檔。- 前景 Claude 與 Gemini 派工改為單次執行,答案完成後不再等常駐工作階段逾時而以 124 結束;背景派工保留常駐工作階段。
jobs close會等滿 11 秒;工人關閉期間再收到關閉訊號,不再被終止而以 158 結束。jobs rm與jobs prune --apply把工作移到${OMNILANE_TRASH_DIR:-~/.Trash}下每次執行專屬的垃圾桶目錄,以manifest.tsv記錄工作識別碼與原路徑;永久刪除留給操作者決定。- 升級:
npm i -g [email protected],接著omnilane resign。
v0.52.0 新功能
- 升級後每台主機在圖形終端機跑一次
omnilane resign:評分表快照換成aa-v4.3.2-2026-10-02-v2,runner 腳本也改了,重簽前派工會被拒。 - 這份快照撤下三列
gpt-5.4-mini的 Codex 設定(Codex 在 ChatGPT 帳號下拒用),重新評分 GPT-6 Sol 與 Luna 共十二列;fast-agentic改成 GPT-6.1 Sol low 排在 GPT-6 Sol low 之前。 - 新增只限操作者設定的
option.grok-macos-work: unconfined,讓 macOS 上的單次 Grok 工作不經隔離執行。預設關閉,開啟後各處都會標示。 resign探測不到某家時,把它已驗證的對映保留並標pending_recheck;主機設定壞掉時以 40 結束;錨定派工實際執行的那個執行檔。doctor在派工解析到的執行檔與 overlay 釘的不同時回報失敗,並比對已安裝的技能檔與 checkout。- 工作新增
dead狀態;jobs close最多等 11 秒;被閒置上限關掉的 live 工作保留結果;runner 的檔案一建立就是私有權限。 - CI 除了 Linux,也在 macOS 上跑行為檢查。
- 升級:
npm i -g [email protected],接著omnilane resign。
v0.51.1 新功能
- 升級後每台主機跑一次
omnilane resign;先前漏測新模型的主機(例如經 ssh 重簽後的 Sonnet 5.5)只會補測那幾列。請在圖形終端機執行,才讀得到 Claude、Gemini、Grok 的登入。 resign把「這台主機從沒探測過的設定」視為漂移,即使執行檔沒變也一樣。--check會列出這些設定並以 10 結束。測過但失敗的設定不重測;簽署者檢查、--approve、--trust-adhoc不變。- 安裝後仍有未探測的設定時會發出警告並列出名稱。
- 升級:
npm i -g [email protected],接著omnilane resign。
v0.51.0 新功能
- 升級後每台機器都要跑一次
omnilane resign。 政策檔快照換成aa-v4.3.2-2026-09-30-v1;舊的傳輸覆蓋檔不再載入,重簽前所有派工都會被拒絕。 - Claude Sonnet 5.5 與 GPT-6.1 Sol 已評分;依 2026-09-30 的 AA 資料,通道以性價比優先重新排序。
- Claude 呼叫端的身分改從它的工作階段紀錄讀取(目前的模型與強度;啟動旗標作為備援;
OMNILANE_AA_CLAUDE_TRANSCRIPT=0可關閉)。桌面版工作階段中途換過模型或強度, 或用--model default啟動的排程工作,都能正確讀出。 - 主機宣告的原生列:
$OMNILANE_HOME/native-rows.json補上主機子代理工具能跑的 模型/強度組合;native-context --host-rows FILE/--no-host-rows。 - 升級:
npm i -g [email protected],接著omnilane resign。
v0.50.0 新功能
- 升級後每台機器都要跑一次
omnilane resign。 政策檔快照換成aa-v4.3.2-2026-09-27-v1。 - 依 2026-09-27 的 AA 資料更新政策檔:所有分數不變,AA 重新量測了速度,通道都不動。
GPT-6 Sol 與 Luna(medium)被 AA 在 2026-09-26 撤掉的速度數字,用新的
scripts/aa_rebaseline.py fill沿用舊值。 - GPT-6 Sol 與 Luna 已驗證:Codex 額度重置後,模型代號
gpt-6-sol、gpt-6-luna通過resign探測。 - 版號從 0.47 直接跳到 0.50,作為里程碑。
- 升級:
npm i -g [email protected],接著omnilane resign。
v0.47.0 新功能
- 升級後每台機器都要跑一次
omnilane resign。 政策檔快照換成aa-v4.3.2-2026-09-23-v2;overlay 重建之前,模型主控在每條通道都會被拒 (transport overlay snapshot mismatch)。GPT-6 Sol 與 Luna 要等resign能連到 Codex 才驗得到;在那之前,各條鏈會改派排在它們後面的那一列。 - GPT-6 Sol 與 GPT-6 Luna 加入政策檔(Sol 從最高 48 到低 34,Luna 從 37
到 21),
omnilane configure選單加入兩者,另有別名GPT-6 Sol、GPT-6 Luna。 - 每條通道改以性價比排序。 對每個主控上限,鏈會給出品質接近該上限所能拿到
的最好一列、而且最便宜的那一列。品質攸關的通道只在幾乎打平時才換便宜的;
吞吐量通道的容許範圍較寬。所有鏈都不再放最高(max)等級。現在
hardest-coding由 Astra xhigh 領頭、bulk-mechanical由 Opus 5.5 medium、triage由 GPT-6 Luna high、fast-agentic由 GPT-6 Sol high 領頭。scripts/aa_rebaseline.py value可以看每條鏈背後的選擇。 - 升級:
npm i -g [email protected],接著omnilane resign。
v0.46.0 新功能
- 升級後請跑一次
omnilane resign。 政策檔快照換成aa-v4.3.2-2026-09-23-v1,而傳輸覆蓋檔綁的是快照;覆蓋檔重建之前,模型身分的派工在每條車道都會被拒,訊息是transport overlay snapshot mismatch。在resign於本機探測過 Opus 5.5 之前,車道會跳過 Opus 5.5 各列,由下一個候選服務。 - Claude Opus 5.5 加入政策檔與車道(AA v4.3.2:max 58、xhigh 56、high 54、medium 51、low 42),依各車道自己的量測排入。
hardest-coding與ui-draft由它的 xhigh 領先,hard-judgment與taste-final由它的 max 領先,後面接它的 xhigh、high;max 進這兩條鏈是因為在那裡明顯勝過 xhigh,hardest-coding上 max 沒有更高,所以不放。consult的 Claude 格改用它的 xhigh,live-search的 Claude 備援改用它的 medium。以 medium 執行的 Opus 5.5 主控上限是 51,搆不到鏈首那幾列。新增別名Opus 5.5;Opus仍指 Opus 5。數字都在docs/model-capabilities-2026-09.md。 - 另外補上 7 個 AA 列的分數(gpt-5.3-codex、gpt-5.5-instant、gemini-3.5-flash-lite、gpt-oss-120b、gpt-oss-20b),讓以這些模型執行的主控有上限可查;它們不進任何車道。
- 升級:
npm i -g [email protected],接著omnilane resign。
v0.45.0 新功能
- 升級後請跑一次
omnilane resign。 分數政策檔換了新快照,而傳輸覆蓋檔綁的是快照;覆蓋檔重建之前,模型身分的派工在每條車道都會被拒,訊息是transport overlay snapshot mismatch。 - 分數改採 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),所以是整份重新計分,不是只加一列。上限跟著變:Fable 5.1 max、Fable 5.1 xhigh、Astra max 現在同為 53 分;以前在
hard-judgment什麼都派不到的中階主控,現在派得到了。scripts/aa_rebaseline.py會從存下來的 AA 抽取檔重建政策檔,下次指數改版重跑即可。 - 車道表是重寫,不是修補。 每條車道先講明「這類工作該看哪些量測」,候選再依那些量測由強到弱排:
hardest-coding看高難度終端編碼(Terminal-Bench 4.0,頂尖模型還沒把它做滿的那個編碼評測),hard-judgment看專家級推理與文件的分析品質評分,taste-final看文件呈現品質評分,fast-agentic看自動化正確率與每步耗時,long-context看較難的那個長上下文評測,ui-draft看圖像理解。有八條車道換了首選: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。 - Grok 服務的每條車道都加入 Grok 4.7,排在 Grok 4.6 前面,4.6 留在後面:車道會跳過本機尚未驗證的候選,所以在
resign探測過 4.7 之前仍由 4.6 服務。帶--vendor grok時不會往下找;在那之前請指定--model grok-4.6。 - 修掉一個失效的備援。
claude claude-sonnet-5 high在舊政策檔下永遠派不出去;現在探測通過後就能解析。 - 升級:
npm i -g [email protected],接著omnilane resign。要用 Grok 4.7,重簽時grokCLI 必須是登入狀態。
v0.44.0 新功能
- 你自己修補過的 CLI 也能無人值守重簽。 如果本機有個步驟會在每次更新後修補某家 CLI、再用 adhoc 重新簽署,以前簽署者檢查會把每一次這種更新都擋下來等
--approve。現在對該家跑一次omnilane resign --trust-adhoc VENDOR,同一個安裝目錄裡的 adhoc 新版就會跟同簽署者的更新一樣,走每日omnilane resign自動重簽。未簽章的執行檔、換了目錄的 adhoc、其他廠商,仍然會停下來等你。信任記在覆蓋檔上,之後任何一家重簽都會保留,而且是操作者動作,模型不會執行。四家都適用。 - 登入過期會叫你「先登入」,不再說「稍後重試」。
Failed to authenticate、OAuth session expired、Invalid API key、Unauthorized、401現在都會把該家標成無法探測,被擋下來的訊息會叫你先登入。 - 升級:
npm i -g [email protected]。若是從 0.42.x 升上來,另外跑一次omnilane resign --record-signers(見 0.43.0 說明)。
v0.43.1 新功能
請裝這一版,不要裝 0.43.0。0.43.0 的 build_overlay.py 與 probe.py 在 Python 3.9 上一匯入就會出錯,導致該版本上首次安裝的覆蓋檔建立步驟與 omnilane resign 無法執行。其餘沒有變動,下面 0.43.0 的說明全部適用。升級:npm i -g [email protected],然後執行一次 omnilane resign --record-signers。
v0.43.0 新功能
十天之內,0.42.x 有四次把所有模型呼叫者全部拒絕,每一次都是因為 omnilane 管不到的事實:啟動器改了名、runner 腳本改了卻沒重簽、四家廠商 CLI 在同一週各自更新、Codex 排程不記錄強度。每一件都變成「什麼都派不出去」。這一版把它們各自縮小成講得清楚的結果,最常見的那一種還會自己修好。
- 廠商 CLI 更新了?
omnilane resign。 它會找出哪裡變了、只重探那一家、檢查結果、換上去、用一筆真實派工確認,失敗就還原舊的覆蓋檔。只有新執行檔的簽署者相同、位置也相同時,才會無人值守地重簽;其他情況會停下來,印出你該執行的那一行--approve指令。先跑一次omnilane resign --record-signers,再把omnilane resign排成每天執行,之後 CLI 更新就不再是你的事。已用一次真實的 Codex 自動升級(0.155.0 → 0.155.1)驗證:不需核准、映射全數保留、結束碼 0。 - 拒絕訊息會告訴模型該怎麼辦。 每一筆被拒的派工都帶著
failed_gate、reason、next_command、required_caller_effort,以及eligible_lanes(這個呼叫者現在派得動的通道)。 - 沒記錄強度改成縮小範圍,不再全拒。 Codex 心跳排程會被限制在它那個模型的最低分,而不是每條通道都拒。便宜的通道照常可用,貴的會說需要哪個強度。
- 助理自己的子代理。
omnilane native-context會寫出以前得手寫的能力聲明檔;omnilane route --inherit規劃一個「呼叫者分身」工人:不經外部 CLI、不看覆蓋檔、連呼叫者身分讀不到時也能用,而且老實標明不是該通道的目標模型。已在 Claude Code 與 Codex 桌面版完整跑通。 - Codex:每次工具呼叫只下一條 omnilane 指令。
omnilane whoami; echo $?讀不到身分,單獨的omnilane whoami讀得到。拒絕訊息現在會直接這樣提示。 - doctor 看得到搬了家的 CLI(新版裝在舊檔旁邊),完全沒有覆蓋檔時會警告並附上步驟。
- 技能檔與教學重寫。 技能檔現在是模型照著走的五個步驟;這份 README 一步步帶你讓助理來開 omnilane。
- 限制。 無人值守重簽靠的是 macOS 程式碼簽章;在 Linux 上,以及任何沒簽章或在本機改過的 CLI,每次更新都會要你
--approve。--inherit還沒在 Grok Build 裡跑過,Antigravity 沒有提供子代理工具。完整細節見 CHANGELOG。 - 升級。
npm i -g [email protected],然後執行一次:omnilane resign --record-signers。
v0.42.9 新功能
- 經啟動器帶起的 Codex 桌面版。 ChatGPT.app 若透過 codex-profile-switch 啟動 app-server,
程序名稱是
codex-modified;0.42.8 只找名為codex的程序,會直接跳過它,該對話串的每一次派工 都被拒為missing-caller-context。現在認得這個名稱;同目錄的codex-code-mode-host仍不視為 CLI。 - 實機驗收。 2026-09-13 在經啟動器帶起的 Codex 桌面版對話串執行
whoami,退出 0, 讀出codex/gpt-5-6-sol-medium (score 46),來源是codex-modified程序。 升級:npm i -g [email protected]。
v0.42.8 新功能
- Codex 本輪身分。
app-server一律忽略啟動參數的模型與強度預設值。 其他 Codex 啟動保留明確的-m/--model/-c model=.../--config; 沒有指定模型(包括只指定 profile)時,改讀本輪記錄。TOML 模型覆寫需要 Python 3.11+。 - 證據不明就拒絕。 本程序的現行環境與 Codex 直屬子程序的初始環境,必須有相同且符合 UUID 形狀的
CODEX_THREAD_ID。記錄檔在$CODEX_HOME/sessions(預設~/.codex)底下找rollout-*-<對話串>.jsonl,對話串續用之後還會有rollout-*-<對話串>_<工作階段>.jsonl; 取最後寫入的那一份,session_meta.id必須一致。最後一筆turn_context必須有模型、強度與回合 ID; 後面若出現同一個回合 ID 的task_complete/turn_complete(讀取別名)/turn_aborted, 就拒絕沿用過期身分,並在訊息裡寫出兩個回合 ID,以及那份記錄多久沒有被寫入。 - Codex 沙箱拒絕。 仍會先查詢祖先程序;若在
CODEX_SANDBOX=seatbelt下查詢失敗,whoami會說明程序查詢、寫入~/.omnilane與連網都必須把指令移到沙箱外重新執行。 - 隱私與相容。 逐行讀取 JSONL,不把訊息內容放進診斷;
whoami會回報對話串與回合 ID。 不從設定預設值、模型清單、封存或其他對話推斷。其他廠商、明確或繼承的身分、真人聲明 的優先順序不變;OMNILANE_AA_CALLER_FROM_PROCESS=0同時關閉兩條讀取路徑。 - 測試自己清環境。 測試不再沿用派工工人帶進來的
OMNILANE_AA_*;在工人裡跑時, 授權者身分與傳輸對照表的雜湊釘選會蓋掉各夾具自己的真人豁免,害 6 個測試失敗。 - 實機驗收。 2026-09-12 在 Codex 桌面版實測:新開的對話串與續用的對話串(原始記錄檔
前一天就停筆)各跑一次,
whoami與dispatch.sh --dry-run都退出 0,讀出codex/gpt-6-astra-xhigh (score 54)、"allowed":true,而且沒有建立任何工作。 升級:npm i -g [email protected]。
v0.42.7 新功能
- 模型 session 派工不再需要身分檔。 沒給
--caller-context時,dispatch 會沿行程樹往上找到最近的廠商 CLI,讀它啟動時帶的模型與強度。以前不在 omnilane 目錄下的 session 會卡在missing-caller-context,把問題丟回給操作者——2026-09-08 與 2026-09-10 就有三個 session 這樣停下來。 omnilane whoami會把這個身分印成 caller-context 檔,讀不到時說明確切原因(缺--effort、模型別名、claude 那個強度只剩 non-reasoning 列),絕不猜。- 比手寫的檔案更難作假。 閘門只檢查身分檔的格式,不核對它和實際在跑的模型是否一致。啟動旗標是 harness 設的,模型改不了,而且每個 session 各算各的:同一個模型分別開
high和max,上限就是 52 和 54。 - 明確指定仍然優先。
--caller-context檔、worker 繼承的環境、--operator-asserted-human都優先於自動讀取。OMNILANE_AA_CALLER_FROM_PROCESS=0可以恢復「只認檔案」的規則。 - 被拒時會告訴你出路。
missing-caller-context和重試被拒的訊息都改成指向omnilane whoami,不再只給模型兩條走不通的路。 omnilane --version恢復正確。 0.42.6 發版時漏改了VERSION,會回報 0.42.5。- 升級。 npm 發布後執行
npm i -g [email protected]。既有的 repo symlink 安裝更新檢出後確認omnilane --version即可,不需重跑安裝。
v0.42.6 新功能
- 「已驗證」現在會說明是怎麼驗的。 每條 overlay 映射帶一個
evidence_tier:billed-model是供應商自己說出計費的模型(claude、grok),client-echo是 CLI 記下自己送出的模型(codex、agy),selector-only是 CLI 收下選擇器、其餘不表態。白話說:client-echo是 CLI 自己抄的訂單,billed-model是供應商開的收據。 - 只回報,不擋人。 派工照舊只看
runtime_verified,等級低不會讓原本跑得動的車道被拒。已有測試確認三種等級下每個判定都不變。 - 等級跟著證據走,不跟著廠商走。 本次發布之前的探測會重判為
selector-only;哪天某支 CLI 開始回報計費模型,不改程式就自動升級。 omnilane doctor顯示分佈,並點名哪幾家值得重探。- overlay 錨定的是真正在跑的執行檔。 過去路徑寫死在
build_overlay.py裡,會無聲地錨到沒在用的版本——線上 overlay 雜湊的是 claude2.1.263,但每次派工跑的都是2.1.266。現在改用 runner 實際解析到的執行檔。 - 抓到三條已死的車道。
gpt-5.4-mini在 2026-09-07 探測還會過,現在回 HTTP 400——「ChatGPT 帳號使用 Codex 時不支援此模型」。簽好的 overlay 永遠不會發現某條車道在上游死掉,重探才會。那三條移進unproven[]並附上原因,映射剩 46 條。 現行快照aa-v4.3.2-2026-10-02-v2已把這三列移到不具權限的unknown_configs,並移除設定選單別名與探測候選。其他分數和順序不變(計分列 117 -> 114,Codex 57 -> 54)。快照 ID 已改變,每台主機都必須執行omnilane resign;詳見docs/reports/aa-rebaseline-2026-10-02-v2.md。 - 升級。 npm 發布後執行
npm i -g [email protected]。既有的 repo symlink 安裝更新檢出後確認omnilane --version即可,不需重跑安裝。
v0.42.5 新功能
- 升級一支 CLI 不再擋掉所有廠商。 overlay 的證據項目可帶
vendor標籤;帶標籤的項目雜湊漂移或檔案消失時,只讓該廠商降級為unknown-target-runtime。未標籤的證據維持全域 fail-closed。 omnilane doctor會載入 overlay。 新增transport-overlay檢查,失敗時指名是哪個檔案、哪一家廠商,成功時回報各廠商的已驗證映射數——先前 doctor 全綠可以和「閘門拒絕所有派工」同時成立。- 探測會記錄判定。
probe.py以計費的modelUsage判斷 Claude 回應,並在 CLI 靜默改用預設強度時判為失敗。build_overlay.py拒簽未通過的探測,改記進 overlay 的unproven[],不再無聲丟棄。 - 重建工具納入版控。
build_overlay.py與probe.py移入scripts/lib/,並接受--root。 - 升級。 npm 發布後執行
npm i -g [email protected]。既有的 repo symlink 安裝更新檢出後確認omnilane --version即可,不需重跑安裝。
v0.42.4 新功能
- 快速上手現在真的跑得起來。
omnilane route必須知道「是誰在問」,但 60 秒上手漏了這件事,新安裝照抄會直接吃到missing-caller-context且沒有任何指引。現在會先用OMNILANE_AA_OPERATOR_ASSERTED_HUMAN=1表明操作者身分,並說明模型主控該改用什麼。 - 指令參考。
dispatch.sh的用法摘要補上[--caller-context FILE | --operator-asserted-human]。
v0.42.3 新功能
- 純文件更新。 路由、評分、閘門與執行器行為皆未變更。
--caller-context進入快速參考。 派工指令簽名現在明列這個參數,並說明模型主控未帶時會在建立工作前被missing-caller-context拒絕。- 完整的 caller-context 範例。 凍結 exact-AA 下行閘章節補上可直接複製的 JSON 範例,並要求在第一次派工前就建好,而非被拒絕後才補。
- 自己查強度,不要猜。 當執行環境只給模型名稱而沒有強度時,走自己的祖先行程鏈讀出確切旗標;要比對整條鏈,不要抓主機上第一個同名行程。宣告最低分設定是查不到時的退路,不是第一步,因為過低的上限會靜默關掉車道。
- 兩個拒絕碼,兩種修法。
missing-caller-context是沒有提供檔案;runtime-mapping-unverified是目標缺少已驗證的本機選擇器,須以有真實證據支撐的--transport-overlay條目修正,絕不可透過修改凍結登錄檔解決。 - 升級。 npm 發布後執行
npm i -g [email protected]。既有的 repo 符號連結安裝可更新檢出並確認omnilane --version,不需重跑安裝。
v0.42.2 新功能
- Grok 強度確實傳入 CLI。 明示的
low、medium、high、xhigh透過--reasoning-effort傳遞;Grok 4.6 預設路由指定high。 - 本機映射以證據驗證。 主機本機覆寫檔證明精確 CLI 選擇器契約,不調整固定 AA 分數或核准的登錄表 SHA。缺少或錯誤映射仍拒絕派工;即時 ACP 的明示強度在驗證完成前仍封鎖。
- 升級。 npm 發布後執行
npm i -g [email protected]。既有 repo-symlink 安裝更新 checkout 並確認omnilane --version,不需重跑安裝。
v0.42.1 新功能
- 修復 CI 測試資料。 完整 Python discovery 現在會讓舊 routing 與 Grok readiness 測試明示 synthetic-human caller;production 的缺少身分拒絕、核准 registry SHA、向下分數閘、重試 lineage 與 skip 斷言都維持不變。
- 可攜式 lineage 證據。 encoded-effort Gemini spy 改用可攜式 Python 解譯器選擇,並驗證精確的
--model gemini-3.8-flash-high參數組。AA 涵蓋仍是 78 個 scored target、1 個 scored reference-only 項目與 10 個 unknown configuration。 - 修補版升級。 npm 上架後可執行
npm i -g [email protected]。既有 repo-symlink 安裝只要更新 checkout 並執行omnilane --version;除非刻意重新接線,否則不要重跑./install.sh。GitHub release 與 npm 上架仍是兩件事。
v0.42.0 新功能
- 原生優先執行。 路由與執行已拆開:
--executor auto只在主機提供精確且相容的能力內容時使用呼叫端擁有的原生代理,否則維持同一組供應商/模型/努力程度走 CLI。原生 handoff 只是待辦工作,不代表任務完成;呼叫端仍須實際執行並另行寫入已驗證結果。 - 凍結的 exact-AA 向下派工。 內附的 AA v4.2 政策會在每次供應商嘗試前,以目前 caller 與繼承上限進行閘控,產生精確子 caller 內容,並在重試時重新驗證,不繼承模型先前取得的人類豁免。78 個評分配置是政策輸入,不代表 78 個配置都能實際執行。
- 明示原生重用。 重用既有 Codex 代理需要呼叫端已觀察到閒置、同意保留內容,且 runtime 身分完全相符;新代理容量耗盡時不會偷偷改成重用。完成紀錄是 caller attestation,不是上游模型身分認證,也不保證 cold start 一定有容量。
- Codex 完成續驗。
scripts/completion-wakeup.py將 run 綁定主控 thread 與 job 白名單,記錄排程器登錄、輪詢終態事件,並把送達與驗收分開後再關閉。這是定期 heartbeat 輪詢,不是即時 push;沒有支援的 callback 時,主控會直接持續等待。 - 封裝與升級。 npm 套件現在包含 AA 政策、原生/AA/喚醒輔助程式及兩份公開協定文件。npm 發布後可執行
npm i -g [email protected];既有程式庫連結式安裝只需更新至已發布版本並核對omnilane --version,首次安裝或需要重新接線時才審核及執行./install.sh。只有 GitHub 發布不代表 npm 已可下載。
v0.41.1 新功能
Astra 預設 xhigh。
hardest-coding與hard-judgment的 Astra 預設改用xhigh;需要時可明確指定--vendor codex --effort max。供應商順序與其他模型的努力程度維持原樣;這不代表已實測節省 CLI 訂閱額度。Python 3.9 相容性。 Agy 工作目錄政策的建立與清理改用
Path.lstat(),保留符號連結、inode 與並行替換保護。隔離 CI 測試資料。 嚴格 doctor 驗收補齊明示啟用外掛與目錄來源設定;設定缺少、停用或路徑不符仍會失敗。
可攜式離線 CI 測試資料。 測試移除對操作者 HOME 的依賴,採用跨平台權限模式檢查,並依實際平台驗證 Linux/macOS 的即時工作限制。
Bash 3.2 的 Gemini 任務。 保護空任務參數展開,同時保留
set -u、有值時的續接參數,以及既有模式與權限政策。有時間上限的 Codex 即時關閉。 FIFO 背壓與部分寫入會保留位元組順序及未送出尾段,供限時關閉排空處理;若執行器提前退出,已接受但尚未轉送的排隊輸入仍會保留並回報失敗,不會靜默丟棄。其他供應商沿用原有轉送路徑。
npm 上架後升級。 執行
npm i -g [email protected],或更新 checkout 後再跑./install.sh。npm 另行發布,GitHub 發布不代表 npm 已上架。
v0.40.0 新功能
- 明確區分模式並修復 Grok 網頁工具。 advise 唯讀且保留支援的原生搜尋;work 限定明示
--workdir並關閉代理工具網路;sysops 每次明示完整權限。Grok 完整一次性plainadvise 已取得真實搜尋、抓頁及寫入拒絕證據;macOS work 與受限即時模式仍保留閘門。 - Codex 與 Grok 明示即時工作階段。 Codex work 與 Grok sysops 工作可用
--background --live接續補傳與明確關閉;Codex/Grok 自動派工仍維持一次性,Claude/Gemini 則保留既有自動即時行為。Grok advise 因 ACP 沒有強制唯讀邊界,所以拒絕--live。 - 有界且可觀察的關閉流程。 能辨識 EOF 的能力探測、每筆工作的不可變 worker 快照、直譯器/SHA 來源、關閉期限與程序群組清理,能約束卡住或被終止的即時工作,但不宣稱是作業系統沙箱隔離。
- 完成通知與閒置判定修正。 完成通知可處理截斷的 UTF-8 尾端;終態以持久 exit 紀錄為準;閒置時間只在完整結果事件後推進,不受任意串流流量干擾。
- AA 驅動的模型覆蓋。 12 條通道預設已納入 Fable 5.1、GPT-6 Astra 與 Gemini 3.8 Flash,同時保留既有供應商與明示模型覆寫。日期化 AA v4.2 覆蓋快照記錄 643 個榜單設定;模型出現在目錄不等於執行環境已驗證支援。
- 升級。 執行
npm i -g [email protected],或更新 checkout 後再跑./install.sh。
v0.33.0
- 四供應商續談派工。
--thread NAME可讓固定供應商、模型、effort 與 工作目錄的 Claude、Codex、Grok 或 Gemini 對話跨前景或背景單次工作延續; direct-API 供應商、exec、即時模式與釘選衝突都會以清楚的退出碼 2 提示停止。 - 續談狀態管理。
jobs.sh threads、threads show NAME、threads rm NAME可列出、查看或移除本機續談狀態。
v0.32.0
- 依 AA 2026-09 快照全面重評路由。 Fable 5.1 與 Gemini 3.7 Flash 進入預設,數據集中在新的日期化文件。
- 模型目錄同步實際 CLI 軟體介面。 加入 Fable 5.1,移除 agy 已下架的 Gemini 3.5 Flash 項目,並同步投票程式。
- Opus 5 仍可使用。 它留在
long-context,也能透過routing.local.yaml覆寫任何通道。
v0.31.0 新功能
- 目標預算預設無上限。
budget_jobs與budget_seconds現在會以 JSONnull儲存並顯示為unlimited;原先隱含的 8 個工作與 900 秒上限已移除。使用--budget-jobs N或--budget-seconds S才會啟用硬性上限;重複失敗保險絲不是預算,預設仍會啟用。 - 管線中的目標狀態不再誤判失敗。
omnilane goal status的消費端提早關閉管線時,現在會以狀態碼 0 結束,不再引發BrokenPipeError,因此| head與| grep -q可在pipefail下正常運作。
v0.30.0 新功能
- 目標台帳。
omnilane goal open建立預設不限制工作數與秒數的目標台帳;goal dispatch會在每份工作執行前檢查呼叫端設定的工作數或總經過時間上限,以及預設啟用的重複失敗熔斷器。goal note保留呼叫端敘事,goal status顯示預算與各工作紀錄,goal close會寫入goals/<id>/report.md。 - 迴圈由呼叫端掌握。 開啟目標的工作階段或使用者負責選擇、派工、檢視與收尾;omnilane 不會執行內建的規劃模型。
- doctor 檢查。
omnilane doctor現在會檢查目標編排功能。
v0.21.0 新功能
- 明確選擇工作階段模式。 可用
dispatch --live要求常駐工作階段,或以--single-shot強制單次派工;對不支援即時工作階段的供應商,--live會立即失敗並列出可用供應商。 - Gemini 加入即時信箱。 Gemini 透過
agy串流協定加入常駐即時工作,與 Claude 並列支援。 - 即時工作的閒置上限。
--idle-timeout N會自動關閉無人處理的即時工作階段,並在關閉原因與meta.json留下逾時資訊。
v0.20.0 新功能
- Foreman 完成收件匣。 背景派工完成後會寫入私有完成紀錄,內建的 Claude
Code 外掛會在 Foreman 的下一個提示中遞交相符紀錄。輸出尾段已做提示注入防護:
移除控制字元與
U+2028/U+2029,並把工作者輸出框成縮排資料。 - 可安裝的 Claude Code 外掛。
.claude-plugin/marketplace.json使用自指 來源,已發布的 npm tarball 也會包含hooks/、skills/和.claude-plugin/。 - Claude 即時信箱。 常駐背景 Claude 工作可在執行時接收訊息,並寫入
events.jsonl。操作方式請見 📬 即時信箱;其他供應商會明確 退化成單次模式,留下stderr與mode-notice.txt通知;jobs.sh wait最後會印出done exit=N。 - Foreman 工作階段身分。
SessionStarthook 會把 Claudesession_id綁定 至 PID 與開始時間,避免 PID 重用誤判。派工會往上走訪父程序,將foreman_session寫入meta.json與完成紀錄;收件匣先比對工作階段,舊紀錄 才回退到workdir,避免同一 repository 的兩個 Foreman 互拿通知。
v0.15.0 新功能
- 串流保留 Codex 進度證據:
codex exec --json會把 JSONL 事件逐筆寫入out.txt.progress.log,即使逾時也能留下最後做到哪一步。out.txt與工作清單顯示維持不變。 - 逾時診斷回到證據:逾時訊息明示它本身不足以判定原因,提供三步檢查清單,並說明空的 進度日誌不是 Codex 未曾前進的證據。
- 直接指出 rollout 記錄位置:逾時輸出會依第一筆進度事件的
thread_id,印出 ${CODEX_HOME:-$HOME/.codex}/sessions 下對應rollout-*.jsonl的絕對路徑,方便查看 被中斷而未回報的完整對話歷程。
v0.14.0 新功能
- 依證據產生路由建議:
jobs recommend與 MCPjobs_recommend只用已完成工作的 公開中繼資料排序供應商,設有最低樣本門檻,也不會自動修改路由。 - 選配實際能力探測:
doctor --probe V與 MCPprovider_probe可分辨「CLI 已安裝」 和「供應商呼叫真的可用」。doctor 預設仍離線,探測報告不含回答本文。 - Live Board 歷史搜尋、篩選與匯出:搜尋與狀態篩選涵蓋最近 50 筆工作; 「匯出目前結果」只下載篩選後的公開中繼資料。
- 可重現的品質/成本基準:
omnilane benchmark內建固定題組,預設不呼叫供應商;--run才會實際執行,成本也只依明確提供的--cost-per-call估值計算。 - 嚴格安裝驗收:CI 以隔離環境執行
omnilane doctor --strict --json, 不接觸供應商也能抓出 runtime 接線不完整。
v0.13.0 新功能
long-context改用 AA-LCR 排序——那是 Artificial Analysis 的長脈絡推理基準, 量的正是這條通道的工作。Gemini 3.1 Pro 在該榜領先兩個備援,因此它的第一順位 從「未複審」升格為「有據」。- 這條通道原本的建議是反的,已移除。 它原先要人把多跳整合改派給 Claude 候選, 依據是上一代模型的二手數字;以第一手當代數據看,Claude 反而是三個候選裡最弱的。 備援因此換位,GPT-5.6 Sol (high) 排在 Claude Opus 5 (high) 前面。
release-audit --require-tag會標出沒有 GitHub release 的 tag。 只警告不中斷,gh缺席或離線時自動跳過(CI 仍可跑),且只看最近幾個 tag。- 範圍註記: AA-LCR 測的是 10k–100k token 的文件,所以它能定「長文整合誰強」, 定不了 1M 的行為。GPT-5.6 Luna 在該榜居首且便宜得多,刻意不升——這條通道的 招牌工作是 1M 掃讀,而該基準涵蓋不到。
v0.12.0 新功能
以下保留當時版本的歷史說明。目前三種模式的契約以模式為準,包含 0.40.0 獨立的完整權限 sysops 政策。
hardest-coding的 Sol 從max降到xhigh——在 AA 分檔位的 Coding Index 上,Sol 的 xhigh 不但勝過自己的 max,也勝過所有 Claude 檔位,成本還少約三分之一。 這種工作超過 xhigh 之後,多加的 effort 買到的是過度思考,不是正確率。fast-agentic改由 GPT-5.6 Luna 領頭,Gemini 3.6 Flash 退居第二。Luna 在 AA 的 Agentic Index 上大幅領先 Flash,而且 2026-07-30 砍價後每任務成本只剩零頭。 Flash 只剩吞吐量優勢——若你的迴圈受延遲限制,可在本機覆寫把它調回第一。- lane 註解不再放數字。
routing.yaml只說明每條排序「為什麼」成立;所有分數、 價格與吞吐量連同取數日期,一律住在docs/model-capabilities-2026-09.md。數字過期 不再需要動路由表。 - 新增 value profile(在
routing.local.yaml.example):用約一個 Intelligence Index 分數,換每任務成本降三到四成。 - 新增
--mode sysops——等於work拿掉 vendor 沙箱,用於沙箱會擋掉的服務操作。 它會把整台機器的存取權交給工作端,因此只能逐次指定,永遠不能設成 lane 預設。 - 價格與基準數據刷新至 2026-07-30 OpenAI 砍價後的版本,並記錄 AA 的 Coding Index 不是 Coding Agent Index——兩者成分完全不同,數值卻會撞在一起。
v0.11.0 新功能
- Live Board 提供五種語言 —— 英文、日文、韓文、繁體中文與簡體中文。首次載入依
瀏覽器語言決定,可用標題列的切換器覆寫,選擇會記在本機。標題、搜尋提示文字、
篩選按鈕、空狀態與錯誤狀態、內容標記,以及螢幕閱讀器會朗讀的
aria-label全部 涵蓋,<html lang>也跟著切換。 - 工作狀態有翻譯,但讀取狀態的地方不受影響 ——
state-的 CSS class 仍是原始值, 狀態配色不變;搜尋索引同時收錄兩種寫法,打running或譯文都找得到同一筆工作。 - 路由沒有任何變更。 派工行為與 v0.10.4 相同。
v0.10.4 新功能
long-context不再把多跳任務指向錯的模型——這條通道原本自稱長文整合, 首選卻是 Gemini;但公開的百萬 token 多針分數顯示 Claude 領先約三倍,Gemini 強的是單針檢索。通道說明已改為掃讀與檢索,跨來源整合請改用 Claude 候選。 排序刻意不動:那批證據是二手且測的是上一代模型,不足以移動已出貨的預設。- Coding Agent Index 不再被當數字引用——同一個模型在不同版本與 harness 下 讀出 80、78、67 三種值。現在只用來看排序,並記錄每個觀測值的出處。
taste-final補上寫作專項證據——先前完全靠不測文筆的通用與 agentic 指標 排序。已加入 EQ-Bench Creative Writing v3、EQ-Bench Longform 與 Lech Mazur 三個榜,全部取自發布者第一手。- 補上逐檔位成本與吞吐,說明預設為何用
xhigh:拿到與max相同的指數 分數,每任務卻便宜 30-53%。
v0.10.3 新功能
- 五種語言的 README 全面重整——文件開頭改成先講清楚「這是什麼、我為什麼會
想要它」,版本歷程全部收攏到最下方,不再打斷開頭的介紹;新增常見問題,回答
一直被問到的幾件事:是不是每家訂閱都要有、程式碼會被送去哪、為什麼預設表沒有
Fable 5、為什麼用
xhigh而不是max、首選 CLI 沒裝會怎樣、被派工的模型會不會 改檔。 - 修正:外掛資訊檔的版本號沒跟上——
plugin.json與.claude-plugin/plugin.json在 0.10.1、0.10.2 發布後仍寫著0.10.0,導致外掛 安裝顯示錯誤版本。 - 修正:
routing.local.yaml.example還指著已退場的模型——起手設定檔裡的claude-opus-4-8全數改為claude-opus-5(並依通道給對應檔位),Gemini 3.5 Flash 候選改為 3.6 Flash,與 0.10.0 以來的預設值一致。 - 對照原始資料修正智慧指數數字(
docs/model-capabilities-2026-09.md): 那是指數點數不是百分比;補上 AA-Briefcase / GDPval-AA v2 對照,並記下兩項與 預設值相反的結果:Fable 5 在事實知識領先、GPT-5.6 Sol 在呈現品質領先。
v0.10.2 新功能
hardest-coding與hard-judgment的 Claude 檔位由max降為xhigh, 對齊 Anthropic 對 Claude Opus 5 的官方建議:編碼與 agentic 工作從xhigh起跳,high是其他吃智力任務的下限,max保留給正確性重於成本的場合。要拉回去用omnilane configure set <通道> "<設定>"。- 修掉兩條死的 CHANGELOG 比較連結——它們指向從未發布的
v0.10.0tag。
v0.10.1 新功能
- 預設路由加入
claude-opus-5:成為hard-judgment、taste-final第一順位, 也納入最高難度程式任務的備援。 omnilane configure已擴充全部 13 個供應商:共 106 個可選模型,完整收錄 Codex、Claude Code、Grok Build、Antigravity 即時清單,並加入已驗證的 OpenRouter/OpenCode 捷徑;仍可用c輸入自訂模型 ID。
v0.10.0 新功能
- Gemini 3.6 Flash 預設路由——
fast-agentic、triage、bulk-mechanical的 gemini 候選(與Gemini Flash別名)改用 Gemini 3.6 Flash:輸出 token 更少、輸出單價更低、Artificial Analysis 實測輸出速度第一。 - 證據重稽核——路由註解、模型能力筆記與 Gemini 價格表對官方來源刷新。
v0.9.1 新功能
- 修正:
configure set不再刪掉routing.local.yaml裡手寫的註解—— 只改寫自身的戳記行與被取代的 lane。
v0.9.0 新功能
- 五個 OpenAI-compatible direct-API vendor —
deepseek、zai(GLM)、mistral、groq、cerebras,與openrouter同為免 CLI 通道(curl 加一把<VENDOR>_API_KEY);lib/common.shregistry 一行即加一個。詳見docs/model-capabilities-2026-09.md。 - fish shell 補全 —
omnilane completion fish | source。
v0.8.3 新功能
- MCP server —
omnilane mcp啟動零依賴的 stdio MCP server,任何支援 MCP 的宿主(Claude Code、Codex、Gemini CLI、Cursor、OpenCode……)不必安裝 skill 就能發現並呼叫 omnilane:提供route、jobs_status、jobs_result、list_lanes四個工具。route預設唯讀 advise 模式;work 模式必須明確 指定 workdir。
v0.8.2 新功能
openroutervendor — 只要curl加一把OPENROUTER_API_KEY, 就能直連 OpenRouter API 派工:任何 omnilane 安裝都摸得到數百個 託管模型,不必再裝任何代理 CLI。僅限 advise/consult(不能改檔, work 模式會明確報錯指路),模型 slug 必填,例如dispatch.sh --vendor openrouter --model anthropic/claude-sonnet-5 consult "..."。deepseek、zai、mistral、groq、cerebrasvendor — 與openrouter同一條免 CLI 直連 API 路徑,對應 OpenAI-compatible 供應商:DeepSeek、Z.ai GLM、 Mistral、Groq、Cerebras。各只要curl加自己那把<VENDOR>_API_KEY;僅限 advise/consult。端點、金鑰、預設模型由lib/common.sh一行 registry 定義。 詳見docs/model-capabilities-2026-09.md。opencodevendor — 透過 OpenCode 多供應商聚合 CLI 無頭派工 (opencode run)。advise 模式鎖定內建唯讀planagent;work 模式 用--auto。加入預設coding-overflow鏈作為最後備援。
v0.8.1 新功能
- Claude Code 外掛開場自動載入路由提醒 — 外掛新增
SessionStarthook(hooks/hooks.json),於開場(startup|resume|clear)自動注入 路由提醒,裝外掛即生效,不必修改~/.claude/CLAUDE.md。其他 CLI 仍走install.sh的指令檔提醒。
v0.8.0 新功能
- 兩個新派工 vendor —
kimi(Moonshot Kimi Code CLI)與qwen(Alibaba Qwen Code CLI)加入,沿用統一 runner 契約:advise 唯讀、 work 自動核准、剝除 API key 環境變數改用 CLI 自身訂閱登入、空輸出 視為失敗。可用--vendor kimi|qwen直接點名。 - coding-overflow 長出備援鏈 — 額度溢流道改為 grok → kimi → qwen
再到
off,三家裝任一家即可用。runner 以假執行檔完成契約測試; 歡迎回報真實模型實測結果。
v0.7.1 新功能
- 路由表更新(2026-07 模型數據) — hardest-coding 首選改為 GPT-5.6 Sol max 檔位:Artificial Analysis Coding Agent Index v1.1 測得 Sol (max) 80 分為現任最高,汰換舊的「xhigh 勝 max」快照。
- Claude 備援升檔 — hardest-coding 與 hard-judgment 的 Claude Opus 4.8 備援改為 xhigh,依 Anthropic 官方對困難任務與長時間工作的建議。
v0.7.0 新功能
- 先預覽再派工 —
--dry-run印出完整解析後的派工計畫(vendor、模型、 模式、逾時、副作用判定),不呼叫模型、不建立工作狀態。 - 版本化 JSON 自動化 —
--list/--explain/--validate與jobs list|status|result|stats都有--json信封;另有唯讀jobs wait、jobs audit,以及帶可重現 manifest 的離線omnilane release-audit發佈稽核。 - 本機工作一條龍 —
jobs tail窺看即時輸出、jobs retry以 fail-closed 方式重派已完成工作、prune --older-than依時間清理,--help覆蓋所有指令。 - 安裝與補全更安全 —
install.sh --check/--dry-run唯讀回報漂移,omnilane completion bash|zsh提供安全的 tab 補全,並修復五個 macOS 原生 Bash 3.2 崩潰。
v0.6.0 新功能
- 離線看懂並驗證路由 — 用
--explain查看每個備援候選,或用--validate檢查完整生效路由表;都不會呼叫模型或建立工作狀態。 - 用機器可讀資料觀察本機狀態 —
jobs.sh stats提供有界統計,omnilane doctor --json提供健康檢查,又不會洩漏任務或結果正文。 - 在 Live Board 比較兩筆工作 — 把一筆已載入工作釘成只存在記憶體的 參考快照,並排比較模型路徑與公開結果。
- 讓鎖恢復更安靜 — 擁有者檔案在檢查與讀取間消失時,不再洩漏容易誤判的 缺檔診斷,同時維持 fail-closed。
v0.5.1 新功能
- 在非 Git 目錄使用 Codex work — 一般資料夾仍完整支援;Omnilane 不要求、
也絕不會自動執行
git init。 - 乾淨停止非 Git 卡死 — 未設定整體上限時,解析後的單次看門狗會自動成為 程序群組保險絲,同時保留手動 timeout 的優先序與退出碼語意。
- 讓版本顯示可信 —
VERSION現在統一供應omnilane --version與兩份 plugin manifest,CI 會檢查變更紀錄和五語 README 是否一致。
🌱 狀態
omnilane 現有十三個派工 vendor——四個框架原生(codex、claude、grok、gemini)、
三個聚合/溢流 CLI(kimi、qwen、opencode),加上六個免 CLI 的 OpenAI-compatible
直連 API vendor(openrouter、deepseek、zai、mistral、groq、cerebras)——全部走
統一 runner 契約並附 contract 測試,另有 Claude Code SessionStart 自動提醒與
MCP stdio server 介面(omnilane mcp)。直連 API 與聚合 runner 皆以假
執行檔做過契約測試;歡迎回報真實模型使用經驗。Grok/Antigravity 指令殼行為
仍可能隨 CLI 版本變動。歡迎回報 issue 與 PR。
