npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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.

Readme

omnilane

一張路由表,四個執行框架通用。

讓主迴圈不再猜要用哪個模型。 從 Claude Code · Codex · Grok Build · Antigravity 任一框架開車,每個子任務都派給 真正最擅長它的模型——Codex、Claude、Grok、Gemini、Kimi、Qwen、OpenCode, 或經 OpenRouter 直達任何託管模型——用你已經在付的訂閱,或一把 API 金鑰。

ci license version

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 秒上手 · ❓ 看常見問題

⚡ 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 language

2. 看看手上有什麼。 doctor 會列出 omnilane 找得到哪些模型 CLI 與 API 金鑰,讓你知道實際會跑哪一個。它不會改任何東西。

omnilane doctor
omnilane list         # the routing table this machine resolves

3. 表明你是操作者,然後派工。

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 指令,並內建 SessionStart hook,開場自動注入路由提醒,不必修改 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 一起裝好。

⚙️ 自訂設定

三層,全部選用:

  1. 互動選單 — scripts/configure.sh 列出可設定的通道,讓你逐條選 廠商 → 模型 → 推理檔位(有建議清單,也可自由輸入未來的新模型名), 寫進 ~/.omnilane/routing.local.yaml。多廠商 consult 會刻意略過, 要改請手動編輯。install.sh 裝完會主動問要不要跑。
  2. ~/.omnilane/routing.local.yaml — 手改覆寫檔,格式同 routing.yaml, 本機優先。參考 routing.local.yaml.example。
  3. ~/.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.yaml

configure 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,重簽時 grok CLI 必須是登入狀態。

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 雜湊的是 claude 2.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 完整一次性 plain advise 已取得真實搜尋、抓頁及寫入拒絕證據;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 現在會以 JSON null 儲存並顯示為 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 工作階段身分。 SessionStart hook 會把 Claude session_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 與 MCP jobs_recommend 只用已完成工作的 公開中繼資料排序供應商,設有最低樣本門檻,也不會自動修改路由。
  • 選配實際能力探測:doctor --probe V 與 MCP provider_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.0 tag。

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.sh registry 一行即加一個。詳見 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 新功能

  • openrouter vendor — 只要 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、cerebras vendor — 與 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。
  • opencode vendor — 透過 OpenCode 多供應商聚合 CLI 無頭派工 (opencode run)。advise 模式鎖定內建唯讀 plan agent;work 模式 用 --auto。加入預設 coding-overflow 鏈作為最後備援。

v0.8.1 新功能

  • Claude Code 外掛開場自動載入路由提醒 — 外掛新增 SessionStart hook(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。

專案文件:貢獻指南 · 安全政策 · 變更紀錄