omnilane 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,61 @@ semantic version tags.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.0] - 2026-07-19
10
+
11
+ ### Added
12
+
13
+ - `omnilane completion fish` prints a Fish completion script
14
+ (`completions/omnilane.fish`): static command, option, and enum completion for
15
+ every public command, including the direct-API vendors and `jobs cancel`/`rm`.
16
+ Load it with `omnilane completion fish | source`. Dynamic lane-name and job-id
17
+ completion remain Bash/Zsh-only for now.
18
+ - Five OpenAI-compatible direct-API vendors — `deepseek`, `zai` (GLM),
19
+ `mistral`, `groq`, and `cerebras` — join `openrouter` as CLI-free inference
20
+ lanes (curl + a `<VENDOR>_API_KEY`, advise mode only). A single vendor registry
21
+ in `lib/common.sh` (endpoint, key env, and default model per vendor) now drives
22
+ every vendor-name check in `dispatch.sh` and `jobs.sh`, so adding another
23
+ OpenAI-compatible vendor is a one-line registry entry plus a thin runner
24
+ wrapper. `configure` lists them with suggested models. See
25
+ `docs/model-capabilities-2026-07.md` for the July 2026 model/benchmark snapshot
26
+ behind the routing defaults.
27
+ - `omnilane doctor` now reports vendor-CLI availability: which of codex, claude,
28
+ grok, gemini (the `agy` CLI), kimi, qwen, and opencode are reachable, plus
29
+ the direct-API vendors openrouter, deepseek, zai, mistral, groq, and cerebras
30
+ (curl + each `<VENDOR>_API_KEY`). Shown in human and `--json` output;
31
+ the probe mirrors the runners' `*_BIN` overrides and `local.sh` in an isolated
32
+ subshell. It is a `PASS`/`WARN` check and never fails the report.
33
+ - MCP server read-only introspection tools: `explain`, `validate`, `dry_run`,
34
+ `jobs_list`, `jobs_stats`, `jobs_audit`, and `doctor` join the existing
35
+ `route`, `list_lanes`, `jobs_status`, and `jobs_result`, so the MCP surface
36
+ mirrors the CLI's full offline read-only surface. All refuse provider calls and
37
+ create no job state; `dry_run` requires an explicit `workdir` only when `mode`
38
+ is `work`. `jobs_stats`/`jobs_audit` accept an optional `last` and `json`.
39
+ - `configure set|get|unset|list|diff` non-interactive subcommands: script or
40
+ inspect `routing.local.yaml` without a tty. `set` validates the lane, refuses
41
+ unsafe specs, and rolls back on a structural FAIL; `diff` shows how local
42
+ overrides change the effective table versus the defaults. The interactive menu
43
+ is unchanged.
44
+ - `jobs list` and `jobs stats` filters: `--lane` and `--vendor` (and, for
45
+ `list`, `--status running|done`) narrow the output in both human and `--json`
46
+ modes. `list` scans all jobs for up to 20 matches; `stats` filters within its
47
+ `--last` sample and recomputes the success rate and lane/vendor aggregates.
48
+ Invalid filter values exit 2; unfiltered behavior is unchanged.
49
+ - `jobs cancel ID`: stop a running background job. Signals the worker's process
50
+ group (SIGTERM, then SIGKILL after a grace period) so the vendor CLI child
51
+ dies too, and leaves a terminal exit recorded — 143 on graceful stop, 137 if
52
+ force-killed. Idempotent on already-finished, dead, or never-backgrounded jobs.
53
+ - `jobs rm ID`: delete one job's stored directory (task, output, exit, metadata).
54
+ Refuses a job whose worker is still alive — cancel it first — complementing
55
+ `jobs prune`, which only bulk-deletes completed jobs by count or age.
56
+
57
+ ## [0.8.3] - 2026-07-18
58
+
59
+ ### Added
60
+
61
+ - Dependency-free MCP stdio server (`omnilane mcp`) exposing routing, lane
62
+ discovery, and background-job status/results to any MCP-capable host.
63
+
9
64
  ## [0.8.2] - 2026-07-18
10
65
 
11
66
  ### Added
@@ -252,7 +307,9 @@ semantic version tags.
252
307
  - Initial shared routing table, cross-vendor dispatcher, runners, installer,
253
308
  and baseline lint fixes.
254
309
 
255
- [Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.8.2...HEAD
310
+ [Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.9.0...HEAD
311
+ [0.9.0]: https://github.com/Seraphim0916/omnilane/compare/v0.8.3...v0.9.0
312
+ [0.8.3]: https://github.com/Seraphim0916/omnilane/compare/v0.8.2...v0.8.3
256
313
  [0.8.2]: https://github.com/Seraphim0916/omnilane/compare/v0.8.1...v0.8.2
257
314
 
258
315
  [0.8.1]: https://github.com/Seraphim0916/omnilane/compare/v0.8.0...v0.8.1
package/README.ja.md CHANGED
@@ -5,8 +5,9 @@
5
5
  ### ルーティングテーブルは一枚、ハーネスは全部。
6
6
 
7
7
  *メインループはもう、どのモデルを使うか迷わない。*<br/>
8
- すべてのサブタスクを、その作業が本当に得意なモデルへ——<br/>
9
- **Claude Code · Codex · Grok Build · Antigravity** を横断、いまのサブスクリプションのままで。
8
+ **Claude Code · Codex · Grok Build · Antigravity** のどれから操縦しても、すべてのサブタスクを<br/>
9
+ その作業が本当に得意なモデルへ——Codex、ClaudeGrok、Gemini、Kimi、Qwen、OpenCode、<br/>
10
+ さらに OpenRouter 経由の任意のホスト型モデル——いまのサブスクリプションのまま、または API キー一つで。
10
11
 
11
12
  <img src="docs/hero.ja.png" alt="omnilane が各サブタスクを Claude Code・Codex・Grok・Antigravity の最適なモデルへ振り分ける" width="820"/>
12
13
 
@@ -20,6 +21,22 @@
20
21
 
21
22
  ---
22
23
 
24
+ ## v0.9.0 の新機能
25
+
26
+ - **OpenAI 互換の direct-API ベンダーを 5 つ追加** — `deepseek`、`zai`(GLM)、
27
+ `mistral`、`groq`、`cerebras` が `openrouter` と同じく CLI 不要のレーンに
28
+ (curl と `<VENDOR>_API_KEY` だけ)。`lib/common.sh` のレジストリに 1 行で
29
+ 追加でき、モデル能力の比較は [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md) を参照。
30
+ - **Fish シェル補完** — `omnilane completion fish | source`。
31
+
32
+ ## v0.8.3 の新機能
33
+
34
+ - **MCP サーバー** — `omnilane mcp` は依存ゼロの stdio MCP サーバーを起動し、
35
+ MCP 対応ホスト(Claude Code、Codex、Gemini CLI、Cursor、OpenCode など)が
36
+ スキルなしで omnilane を発見・呼び出しできます:ツールは `route`、
37
+ `jobs_status`、`jobs_result`、`list_lanes`。`route` は読み取り専用の
38
+ advise がデフォルトで、work モードには明示的な workdir が必須です。
39
+
23
40
  ## v0.8.2 の新機能
24
41
 
25
42
  - **`openrouter` vendor** — `curl` と `OPENROUTER_API_KEY` だけで
@@ -114,8 +131,9 @@ omnilane ui start # 任意:ブラウザでジョブをライブ表示
114
131
  ## 🧭 仕組み
115
132
 
116
133
  omnilane は、**どの** agentic CLI のメインループでも、サブタスクをレーンに
117
- 分類し、各レーンをその作業が最も得意なベンダー CLI へヘッドレスで
118
- ディスパッチさせる仕組みです。既存のサブスクリプションログインをそのまま使います:
134
+ 分類し、各レーンをその作業が最も得意なベンダーへヘッドレスで
135
+ ディスパッチさせる仕組みです。既存のサブスクリプションログインをそのまま
136
+ 使います(`openrouter` vendor は例外:CLI 不要、API キー一つで直接接続):
119
137
 
120
138
  ```mermaid
121
139
  flowchart LR
@@ -138,6 +156,8 @@ flowchart LR
138
156
  指定ベンダーに固定し、フォールバックしません。
139
157
  - **`skills/omnilane/SKILL.md`** — 四つのハーネス共通のスキル:
140
158
  自分のモデルを特定し、自分のレーンは自前で実行、残りはディスパッチ。
159
+ - **`omnilane mcp`** — 同じルーティングを MCP stdio サーバーとして提供。
160
+ スキルではなく MCP で統合するホスト向け。
141
161
 
142
162
  <div align="center">
143
163
 
@@ -243,9 +263,11 @@ omnilane ui stop # 正常に停止
243
263
 
244
264
  ## 📦 インストール
245
265
 
246
- 前提:ルーティングしたいベンダー CLI(`codex`、`claude`、`grok`、`agy`)が
247
- ログイン済みで `PATH` 上にあること——**持っている分だけで OK**、
248
- 足りないレーンは自動的に降格します。
266
+ 前提:ルーティングしたいベンダー CLI(`codex`、`claude`、`grok`、`agy`、
267
+ 任意で `kimi`、`qwen`、`opencode`)がログイン済みで `PATH` 上にあること——
268
+ **持っている分だけで OK**、足りないレーンは自動的に降格します。
269
+ `openrouter` vendor は例外で、CLI は不要——`curl` と環境変数の
270
+ `OPENROUTER_API_KEY` だけで動きます。
249
271
 
250
272
  最速:`./install.sh` — 本機の CLI を検出してスキルを接続し、残りのプラグイン
251
273
  コマンドを表示、実効ルーティングを出力し、最後に対話式設定メニューを
@@ -271,6 +293,31 @@ CLI バージョンにより異なる場合あり)へマーカー付きの可逆
271
293
  - **Antigravity**:`agy plugin install <このリポジトリ>`(先に
272
294
  `agy plugin validate` で確認)
273
295
 
296
+ ### MCP サーバー
297
+
298
+ `omnilane mcp` は依存ゼロでローカル実行される MCP stdio サーバーを起動し、
299
+ MCP 対応ホストがスキルの導入やルーティングリマインダーなしで omnilane を
300
+ 発見・呼び出しできるようにします。ホスト側の設定でインストール済み CLI を
301
+ 指定してください:
302
+
303
+ ```json
304
+ {
305
+ "mcpServers": {
306
+ "omnilane": {
307
+ "command": "omnilane",
308
+ "args": ["mcp"]
309
+ }
310
+ }
311
+ }
312
+ ```
313
+
314
+ サーバーは `route` に加えて、読み取り専用の照会ツール `list_lanes`、`explain`、`validate`、`dry_run`、`jobs_list`、`jobs_status`、`jobs_result`、`jobs_stats`、`jobs_audit`、`doctor` を公開します。
315
+ `route` のデフォルトは読み取り専用の `advise` モードで、`work` を選ぶ呼び
316
+ 出しには明示的な `workdir` が必須です。
317
+
318
+ 実行時に必要なのは Node.js のみ(npm パッケージは不要)。npm 派なら
319
+ `npm install -g omnilane` で MCP サーバーごと CLI をインストールできます。
320
+
274
321
  ## ⚙️ カスタマイズ
275
322
 
276
323
  三層、すべて任意:
@@ -295,6 +342,8 @@ scripts/dispatch.sh --list # 実効テーブル(フォールバック解決
295
342
  ```
296
343
  eval "$(omnilane completion bash)" # 現在の Bash で補完を有効化
297
344
  source <(omnilane completion zsh) # 現在の Zsh で補完を有効化
345
+ omnilane completion fish | source # 現在の Fish で補完を有効化
346
+ omnilane mcp # MCP stdio サーバー(Node.js が必要)
298
347
  omnilane release-audit [--target VERSION] [--json] # オフライン・読み取り専用のリリースゲート
299
348
  omnilane ui start # ローカル Live UI を起動または再利用し、URL を表示
300
349
  omnilane ui status # Live UI の稼働状態を表示
@@ -308,11 +357,15 @@ dispatch.sh [--json] --list [--json]
308
357
  dispatch.sh [--json] --explain LANE [--json] # 候補ごとの決定理由をオフライン表示
309
358
  dispatch.sh [--json] --validate [--json] # プロバイダーを呼ばず実効ルーティングを検証
310
359
  jobs.sh [--json] {list | status ID | result ID} # JSON は本文を返さずメタデータのみ
360
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # 一覧を絞り込み
311
361
  jobs.sh wait ID [--timeout N] # ジョブ終了値。124 はタイムアウト、125 はワーカー消失
312
- jobs.sh [--json] stats [--last N] # ローカル成功率とルーティング集計
362
+ jobs.sh cancel ID # 実行中ジョブを停止:グループに SIGTERM、その後 SIGKILL
363
+ jobs.sh rm ID # 完了/停止ジョブを1件削除(実行中は拒否)
364
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # ローカル成功率とルーティング集計
313
365
  jobs.sh audit [--last N] [--json] # 読み取り専用のジョブ整合性・プライバシー検査
314
366
  jobs.sh prune [--keep N] [--apply] # 既定はプレビューのみ。完了ジョブだけを対象
315
367
  configure.sh # 対話式レーンメニュー
368
+ configure.sh set|get|unset|list|diff LANE [SPEC] # routing.local.yaml を非対話で編集/確認
316
369
  ```
317
370
 
318
371
  終了コード:`2` 使い方エラー(無効なベンダー、または指定ベンダーがレーンに
@@ -325,9 +378,13 @@ configure.sh # 対話式レーンメニ
325
378
  ## 🎭 モード
326
379
 
327
380
  - **advise(デフォルト)** — 読み取り専用ワーカー。Codex は read-only
328
- サンドボックス、Claude は Read/Glob/Grep のみ、Grok は plan モード。
381
+ サンドボックス、Claude は Read/Glob/Grep のみ、Grok は plan モード、
382
+ Kimi と OpenCode はそれぞれの読み取り専用 plan モードに固定、
383
+ OpenRouter は設計上 advise 専用(純推論)。
329
384
  - **work** — 指定した `--workdir` 内でのみファイル編集可。Codex は
330
385
  workspace-write、Claude は編集自動承認、Gemini は accept-edits モード。
386
+ `openrouter` vendor は work モードを明確に拒否します——編集はエージェント型
387
+ CLI ベンダーへ。
331
388
 
332
389
  ## 🔒 安全機構
333
390
 
@@ -381,11 +438,15 @@ configure.sh # 対話式レーンメニ
381
438
 
382
439
  ## 🌱 ステータス
383
440
 
384
- v0.5.1Git 管理外でも Codex `work` を利用可能に保ち、process group の
385
- クリーンアップで停止を制限し、公開バージョン情報を同期します。v0.5.0
386
- インストーラー、ライフサイクル、ジョブストア、期限、診断、リリース CI
387
- 強化も維持します。Grok/Antigravity のコマンドシェル挙動は CLI バージョンで
388
- 変わる可能性があります。issue PR を歓迎します。
441
+ omnilane13 のディスパッチベンダーを備えます——4 つのハーネスネイティブ
442
+ (codex、claude、grok、gemini)、3 つの集約/オーバーフロー CLI(kimi、qwen、
443
+ opencode)、そして CLI 不要の OpenAI 互換 direct-API ベンダー 6 つ(openrouter、
444
+ deepseek、zai、mistral、groq、cerebras)——すべて統一 runner 契約と契約テスト
445
+ 付き。Claude Code `SessionStart` 自動リマインダーと MCP stdio サーバー
446
+ (`omnilane mcp`)も同梱。direct-API と集約系の runner はフェイクバイナリで
447
+ 契約テスト済みです。実モデルでの報告を歓迎します。Grok/Antigravity の
448
+ コマンドシェル挙動は CLI バージョンで変わる可能性があります。issue と PR を
449
+ 歓迎します。
389
450
 
390
451
  プロジェクト文書:[コントリビューション](CONTRIBUTING.md) ·
391
452
  [セキュリティ](SECURITY.md) · [変更履歴](CHANGELOG.md)
package/README.ko.md CHANGED
@@ -5,8 +5,9 @@
5
5
  ### 라우팅 테이블 하나로, 모든 하네스를.
6
6
 
7
7
  *메인 루프가 더 이상 어떤 모델을 쓸지 고민하지 않습니다.*<br/>
8
- 모든 서브태스크를 일을 정말 잘하는 모델에게——<br/>
9
- **Claude Code · Codex · Grok Build · Antigravity** 를 가로질러, 이미 내고 있는 구독 그대로.
8
+ **Claude Code · Codex · Grok Build · Antigravity** 어디서 운전하든, 모든 서브태스크를<br/>
9
+ 일을 정말 잘하는 모델에게——Codex, Claude, Grok, Gemini, Kimi, Qwen, OpenCode,<br/>
10
+ 그리고 OpenRouter 를 통한 모든 호스팅 모델까지——이미 내고 있는 구독 그대로, 또는 API 키 하나로.
10
11
 
11
12
  <img src="docs/hero.ko.png" alt="omnilane 이 각 서브태스크를 Claude Code·Codex·Grok·Antigravity 중 가장 잘하는 모델로 보냅니다" width="820"/>
12
13
 
@@ -20,6 +21,22 @@
20
21
 
21
22
  ---
22
23
 
24
+ ## v0.9.0 새 기능
25
+
26
+ - **OpenAI 호환 direct-API 벤더 5개 추가** — `deepseek`, `zai` (GLM), `mistral`,
27
+ `groq`, `cerebras` 가 `openrouter` 처럼 CLI 없는 레인으로 추가(curl 과
28
+ `<VENDOR>_API_KEY` 만 필요). `lib/common.sh` 레지스트리에 한 줄로 추가되며,
29
+ 모델 능력 비교는 [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md) 참고.
30
+ - **Fish 셸 자동완성** — `omnilane completion fish | source`.
31
+
32
+ ## v0.8.3 새 기능
33
+
34
+ - **MCP 서버** — `omnilane mcp` 는 의존성 없는 stdio MCP 서버를 시작하여,
35
+ MCP 지원 호스트(Claude Code, Codex, Gemini CLI, Cursor, OpenCode 등)가
36
+ 스킬 설치 없이 omnilane 을 발견하고 호출할 수 있습니다: 도구는 `route`,
37
+ `jobs_status`, `jobs_result`, `list_lanes`. `route` 는 읽기 전용 advise 가
38
+ 기본값이며, work 모드는 명시적 workdir 이 필요합니다.
39
+
23
40
  ## v0.8.2 새 기능
24
41
 
25
42
  - **`openrouter` vendor** — `curl`과 `OPENROUTER_API_KEY`만으로
@@ -114,8 +131,9 @@ omnilane ui start # 선택: 브라우저에서 잡을 실시간 확인
114
131
  ## 🧭 동작 방식
115
132
 
116
133
  omnilane 은 **어떤** agentic CLI 든 메인 루프가 서브태스크를 레인으로 분류하고,
117
- 각 레인을 그 작업에 가장 강한 벤더 CLI 로 헤드리스 디스패치하게 해 줍니다.
118
- 기존 구독 로그인을 그대로 사용합니다:
134
+ 각 레인을 그 작업에 가장 강한 벤더로 헤드리스 디스패치하게 해 줍니다.
135
+ 기존 구독 로그인을 그대로 사용합니다(`openrouter` vendor 는 예외: CLI 없이
136
+ API 키 하나로 직접 연결):
119
137
 
120
138
  ```mermaid
121
139
  flowchart LR
@@ -137,6 +155,8 @@ flowchart LR
137
155
  고정하며 폴백하지 않습니다.
138
156
  - **`skills/omnilane/SKILL.md`** — 네 하네스 공용 스킬: 자기 모델을 파악하고,
139
157
  자기 레인은 직접 수행, 나머지는 디스패치.
158
+ - **`omnilane mcp`** — 같은 라우팅을 MCP stdio 서버로 제공.
159
+ 스킬 대신 MCP 로 통합하는 호스트용.
140
160
 
141
161
  <div align="center">
142
162
 
@@ -240,8 +260,10 @@ omnilane ui stop # 정상 중지
240
260
 
241
261
  ## 📦 설치
242
262
 
243
- 전제: 라우팅할 벤더 CLI(`codex`, `claude`, `grok`, `agy`)가 로그인된 채
244
- `PATH` 에 있을 것——**가진 것만 있으면 됩니다**, 없는 레인은 자동 강등.
263
+ 전제: 라우팅할 벤더 CLI(`codex`, `claude`, `grok`, `agy`, 선택적으로
264
+ `kimi`, `qwen`, `opencode`)가 로그인된 채 `PATH` 에 있을 것——**가진 것만
265
+ 있으면 됩니다**, 없는 레인은 자동 강등. `openrouter` vendor 는 예외로 CLI 가
266
+ 필요 없습니다——`curl` 과 환경 변수의 `OPENROUTER_API_KEY` 만 있으면 됩니다.
245
267
 
246
268
  가장 빠른 방법: `./install.sh` — 로컬 CLI 를 감지해 스킬을 연결하고, 나머지
247
269
  플러그인 명령을 안내하며, 실효 라우팅을 출력한 뒤 대화형 설정 메뉴를
@@ -265,6 +287,30 @@ omnilane ui stop # 정상 중지
265
287
  - **Antigravity**: `agy plugin install <이 저장소>`(먼저
266
288
  `agy plugin validate` 로 확인)
267
289
 
290
+ ### MCP 서버
291
+
292
+ `omnilane mcp` 는 의존성 없이 로컬에서 실행되는 MCP stdio 서버를 시작하여,
293
+ MCP 지원 호스트가 스킬 설치나 라우팅 리마인더 없이 omnilane 을 발견하고
294
+ 호출할 수 있게 합니다. 호스트 설정에서 설치된 CLI 를 지정하면 됩니다:
295
+
296
+ ```json
297
+ {
298
+ "mcpServers": {
299
+ "omnilane": {
300
+ "command": "omnilane",
301
+ "args": ["mcp"]
302
+ }
303
+ }
304
+ }
305
+ ```
306
+
307
+ 서버는 `route` 와 함께 읽기 전용 조회 도구 `list_lanes`, `explain`, `validate`, `dry_run`, `jobs_list`, `jobs_status`, `jobs_result`, `jobs_stats`, `jobs_audit`, `doctor` 를 제공합니다.
308
+ `route` 의 기본값은 읽기 전용 `advise` 모드이며, `work` 를 선택한 호출은
309
+ 명시적 `workdir` 을 함께 제공해야 합니다.
310
+
311
+ 실행에 필요한 것은 Node.js 뿐입니다(npm 패키지 없음). npm 을 선호하면
312
+ `npm install -g omnilane` 으로 MCP 서버가 포함된 CLI 를 설치할 수 있습니다.
313
+
268
314
  ## ⚙️ 사용자 설정
269
315
 
270
316
  세 계층, 모두 선택 사항:
@@ -289,6 +335,8 @@ scripts/dispatch.sh --list # 실효 테이블(폴백 해석 주석 포함)
289
335
  ```
290
336
  eval "$(omnilane completion bash)" # 현재 Bash 에서 완성 활성화
291
337
  source <(omnilane completion zsh) # 현재 Zsh 에서 완성 활성화
338
+ omnilane completion fish | source # 현재 Fish 에서 완성 활성화
339
+ omnilane mcp # MCP stdio 서버(Node.js 필요)
292
340
  omnilane release-audit [--target VERSION] [--json] # 오프라인 읽기 전용 릴리스 게이트
293
341
  omnilane ui start # 로컬 Live UI 를 시작하거나 재사용하고 URL 표시
294
342
  omnilane ui status # Live UI 실행 상태 표시
@@ -302,11 +350,15 @@ dispatch.sh [--json] --list [--json]
302
350
  dispatch.sh [--json] --explain LANE [--json] # 후보별 라우팅 결정을 오프라인 설명
303
351
  dispatch.sh [--json] --validate [--json] # 공급자 호출 없이 실효 라우팅 검사
304
352
  jobs.sh [--json] {list | status ID | result ID} # JSON은 본문 없이 메타데이터만 반환
353
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # 목록 필터
305
354
  jobs.sh wait ID [--timeout N] # 작업 종료값, 124 시간 초과, 125 작업자 소실
306
- jobs.sh [--json] stats [--last N] # 로컬 성공률과 라우팅 집계
355
+ jobs.sh cancel ID # 실행 작업 중지: 그룹 SIGTERM 후 SIGKILL
356
+ jobs.sh rm ID # 완료/종료 작업 1건 삭제(실행 중이면 거부)
357
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # 로컬 성공률과 라우팅 집계
307
358
  jobs.sh audit [--last N] [--json] # 읽기 전용 작업 무결성/개인정보 검사
308
359
  jobs.sh prune [--keep N] [--apply] # 기본은 미리보기이며 완료된 작업만 정리
309
360
  configure.sh # 대화형 레인 메뉴
361
+ configure.sh set|get|unset|list|diff LANE [SPEC] # routing.local.yaml 비대화식 편집/확인
310
362
  ```
311
363
 
312
364
  종료 코드: `2` 사용법 오류(잘못된 벤더 또는 지정 벤더가 레인에 없는 경우 포함),
@@ -318,9 +370,12 @@ CLI 를 사용할 수 없음, `5` 1라운드 성공 투표자 부족, `6` 2라
318
370
  ## 🎭 모드
319
371
 
320
372
  - **advise(기본)** — 읽기 전용 워커. Codex 는 read-only 샌드박스,
321
- Claude 는 Read/Glob/Grep 만, Grok 은 plan 모드.
373
+ Claude 는 Read/Glob/Grep 만, Grok 은 plan 모드, Kimi 와 OpenCode 는 각자의
374
+ 읽기 전용 plan 모드 고정, OpenRouter 는 설계상 advise 전용(순수 추론).
322
375
  - **work** — 지정한 `--workdir` 안에서만 파일 수정 허용. Codex 는
323
376
  workspace-write, Claude 는 편집 자동 승인, Gemini 는 accept-edits 모드.
377
+ `openrouter` vendor 는 work 모드를 명확한 오류로 거부합니다——파일 편집은
378
+ 에이전트형 CLI 벤더로 보내세요.
324
379
 
325
380
  ## 🔒 안전 장치
326
381
 
@@ -371,11 +426,14 @@ CLI 를 사용할 수 없음, `5` 1라운드 성공 투표자 부족, `6` 2라
371
426
 
372
427
  ## 🌱 상태
373
428
 
374
- v0.5.1Git 저장소 밖에서도 Codex `work` 를 사용할 수 있게 유지하고 process
375
- group 정리로 멈춤을 제한하며 모든 공개 버전 정보를 동기화합니다. v0.5.0 의 설치
376
- 프로그램, 디스패치 수명주기, 저장소, 전체 기한, 진단, 릴리스 CI 강화도 그대로
377
- 유지합니다. Grok/Antigravity 커맨드 동작은 CLI 버전에 따라 달라질 수 있습니다.
378
- issue PR 환영합니다.
429
+ omnilane13개의 디스패치 벤더를 갖춥니다——4개의 하네스 네이티브(codex,
430
+ claude, grok, gemini), 3개의 집합/오버플로 CLI(kimi, qwen, opencode), 그리고
431
+ CLI 필요 없는 OpenAI 호환 direct-API 벤더 6개(openrouter, deepseek, zai,
432
+ mistral, groq, cerebras)——모두 통일 runner 계약과 계약 테스트를 갖추었고,
433
+ Claude Code `SessionStart` 자동 리마인더와 MCP stdio 서버(`omnilane mcp`)도 포함합니다.
434
+ kimi, qwen, opencode, openrouter 의 runner 는 페이크 바이너리로 계약 테스트를
435
+ 마쳤습니다. 실제 모델 사용 보고를 환영합니다. Grok/Antigravity 커맨드 셸
436
+ 동작은 CLI 버전에 따라 달라질 수 있습니다. issue 와 PR 환영합니다.
379
437
 
380
438
  프로젝트 문서: [기여 가이드](CONTRIBUTING.md) · [보안 정책](SECURITY.md) ·
381
439
  [변경 기록](CHANGELOG.md)
package/README.md CHANGED
@@ -5,8 +5,9 @@
5
5
  ### One routing table, every harness.
6
6
 
7
7
  *Your main loop stops guessing which model to use.*<br/>
8
- Every subtask goes to the model that is actually best at it across<br/>
9
- **Claude Code · Codex · Grok Build · Antigravity**, on the subscriptions you already pay for.
8
+ Drive it from **Claude Code · Codex · Grok Build · Antigravity**, and every subtask goes<br/>
9
+ to the model that is actually best at it Codex, Claude, Grok, Gemini, Kimi, Qwen, OpenCode,<br/>
10
+ or any hosted model via OpenRouter — on the subscriptions you already pay for, or a single API key.
10
11
 
11
12
  <img src="docs/hero.png" alt="omnilane routes each subtask to the best model across Claude Code, Codex, Grok and Antigravity" width="820"/>
12
13
 
@@ -20,6 +21,22 @@ Every subtask goes to the model that is actually best at it — across<br/>
20
21
 
21
22
  ---
22
23
 
24
+ ## What's new in v0.9.0
25
+
26
+ - **Five OpenAI-compatible direct-API vendors** — `deepseek`, `zai` (GLM),
27
+ `mistral`, `groq`, and `cerebras` join `openrouter` as CLI-free lanes (curl +
28
+ a `<VENDOR>_API_KEY`). A one-line `lib/common.sh` registry entry adds each;
29
+ see [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md).
30
+ - **Fish shell completion** — `omnilane completion fish | source`.
31
+
32
+ ## What's new in v0.8.3
33
+
34
+ - **MCP server** — `omnilane mcp` starts a zero-dependency stdio MCP server,
35
+ so any MCP-capable host (Claude Code, Codex, Gemini CLI, Cursor, OpenCode…)
36
+ can discover and call omnilane without installing the skill: tools `route`,
37
+ `jobs_status`, `jobs_result`, and `list_lanes`. `route` defaults to
38
+ read-only advise mode; work mode requires an explicit workdir.
39
+
23
40
  ## What's new in v0.8.2
24
41
 
25
42
  - **`openrouter` vendor** — dispatch straight to the OpenRouter API with
@@ -28,6 +45,12 @@ Every subtask goes to the model that is actually best at it — across<br/>
28
45
  Advise/consult only (it cannot edit files; work mode fails with guidance)
29
46
  and the model slug is mandatory, e.g.
30
47
  `dispatch.sh --vendor openrouter --model anthropic/claude-sonnet-5 consult "..."`.
48
+ - **`deepseek`, `zai`, `mistral`, `groq`, `cerebras` vendors** — the same
49
+ CLI-free direct-API path as `openrouter`, for OpenAI-compatible providers:
50
+ DeepSeek, Z.ai GLM, Mistral, Groq, and Cerebras. Each needs only `curl` and
51
+ its `<VENDOR>_API_KEY`; advise/consult only. A one-line `lib/common.sh`
52
+ registry entry defines each endpoint, key env, and default model. See
53
+ [`docs/model-capabilities-2026-07.md`](docs/model-capabilities-2026-07.md).
31
54
  - **`opencode` vendor** — headless dispatch through the OpenCode
32
55
  multi-provider aggregator CLI (`opencode run`). Advise mode pins OpenCode's
33
56
  built-in read-only `plan` agent; work mode uses `--auto`. Joins the default
@@ -115,8 +138,9 @@ omnilane ui start # optional: watch jobs live in your browser
115
138
  ## 🧭 How it works
116
139
 
117
140
  omnilane lets the main loop of **any** agentic CLI classify subtasks into
118
- lanes and dispatch each lane to the best vendor's CLI — headlessly, using
119
- your existing subscription logins:
141
+ lanes and dispatch each lane to the best vendor — headlessly, using your
142
+ existing subscription logins (or, for the `openrouter` vendor, a direct API
143
+ key with no extra CLI at all):
120
144
 
121
145
  ```mermaid
122
146
  flowchart LR
@@ -139,6 +163,8 @@ flowchart LR
139
163
  vendor without fallback.
140
164
  - **`skills/omnilane/SKILL.md`** — a single skill every harness can load:
141
165
  identify your own model, self-execute your lane, dispatch the rest.
166
+ - **`omnilane mcp`** — the same routing surface as an MCP stdio server,
167
+ for hosts that integrate via MCP instead of skills.
142
168
 
143
169
  <div align="center">
144
170
 
@@ -244,8 +270,10 @@ Core routing does not need Python; only this UI requires Python 3.9 or newer.
244
270
  ## 📦 Install
245
271
 
246
272
  Requirements: the vendor CLIs you want to route to, logged in (`codex`,
247
- `claude`, `grok`, `agy`) and on `PATH` install only the ones you have; the
248
- rest of the table degrades automatically.
273
+ `claude`, `grok`, `agy`, and optionally `kimi`, `qwen`, `opencode`) and on
274
+ `PATH` — install only the ones you have; the rest of the table degrades
275
+ automatically. The `openrouter` vendor is the exception: it needs no CLI,
276
+ only `curl` and an `OPENROUTER_API_KEY` in your environment.
249
277
 
250
278
  Quickest: `./install.sh` — symlinks the skill for the CLIs it finds, prints
251
279
  the plugin commands for the rest, shows your effective routing, and offers the
@@ -272,6 +300,32 @@ Rollback the installer-owned links and marked reminders with
272
300
  - **Antigravity**: `agy plugin install <this repo>` (check first with
273
301
  `agy plugin validate <this repo>`)
274
302
 
303
+ ### MCP server
304
+
305
+ `omnilane mcp` starts a zero-dependency, local MCP stdio server so any
306
+ MCP-capable host can discover and call omnilane without installing the skill or
307
+ adding a routing reminder. Configure the host to launch the installed CLI:
308
+
309
+ ```json
310
+ {
311
+ "mcpServers": {
312
+ "omnilane": {
313
+ "command": "omnilane",
314
+ "args": ["mcp"]
315
+ }
316
+ }
317
+ }
318
+ ```
319
+
320
+ The server exposes `route` plus read-only introspection: `list_lanes`,
321
+ `explain`, `validate`, `dry_run`, `jobs_list`, `jobs_status`, `jobs_result`,
322
+ `jobs_stats`, `jobs_audit`, and `doctor`. `route` defaults to read-only `advise` mode. Calls that select `work` must also
323
+ provide an explicit `workdir`.
324
+
325
+ Node.js is the only runtime requirement (no npm packages). If you prefer
326
+ npm, `npm install -g omnilane` installs the CLI with the MCP server
327
+ included.
328
+
275
329
  ## ⚙️ Configure
276
330
 
277
331
  Three layers, all optional:
@@ -281,6 +335,9 @@ Three layers, all optional:
281
335
  future models), and writes the result to `~/.omnilane/routing.local.yaml`.
282
336
  It intentionally skips the multi-vendor `consult` lane; edit that one by
283
337
  hand if needed. `install.sh` offers to run the menu at the end of a normal install.
338
+ For scripting, `configure set|get|unset|list|diff LANE [SPEC]` edits or inspects the same file
339
+ without a tty — `set` validates the lane and rejects an unsafe or structurally
340
+ invalid spec, rolling back on failure.
284
341
  2. **`~/.omnilane/routing.local.yaml`** — hand-edited overrides, same format
285
342
  as `routing.yaml`; local lines win. See `routing.local.yaml.example`.
286
343
  3. **`~/.omnilane/local.sh`** — per-machine binaries, proxies, auth wrappers;
@@ -299,6 +356,8 @@ omnilane list | route … | jobs … | configure # global wrapper, works anywh
299
356
  # (install.sh links it into ~/.local/bin)
300
357
  eval "$(omnilane completion bash)" # enable Bash completion for this shell
301
358
  source <(omnilane completion zsh) # enable Zsh completion for this shell
359
+ omnilane completion fish | source # enable Fish completion for this shell
360
+ omnilane mcp # MCP stdio server (needs Node.js)
302
361
  omnilane release-audit [--target VERSION] [--json] # offline, read-only release gate
303
362
  omnilane ui start # start/reuse the local Live UI; print its URL
304
363
  omnilane ui status # report whether the Live UI is running
@@ -312,11 +371,15 @@ dispatch.sh [--json] --list [--json]
312
371
  dispatch.sh [--json] --explain LANE [--json] # offline candidate-by-candidate decision trace
313
372
  dispatch.sh [--json] --validate [--json] # lint effective routing; no provider calls
314
373
  jobs.sh [--json] {list | status ID | result ID} # JSON result reports metadata, never bodies
374
+ jobs.sh [--json] list [--lane L] [--vendor V] [--status running|done] # filter the listing
315
375
  jobs.sh wait ID [--timeout N] # job exit; 124 timeout; 125 dead worker
316
- jobs.sh [--json] stats [--last N] # local success and routing aggregates
376
+ jobs.sh cancel ID # stop a running job: group SIGTERM, then SIGKILL
377
+ jobs.sh rm ID # delete one finished/dead job (refuses a running job)
378
+ jobs.sh [--json] stats [--last N] [--lane L] [--vendor V] # local success and routing aggregates
317
379
  jobs.sh audit [--last N] [--json] # read-only job integrity/privacy check
318
380
  jobs.sh prune [--keep N] [--apply] # preview by default; completed jobs only
319
381
  configure.sh # interactive lane menu
382
+ configure.sh set|get|unset|list|diff LANE [SPEC] # script/inspect routing.local.yaml, no tty
320
383
  ```
321
384
 
322
385
  **Big decisions can get a panel, not a person.** The `arbitrate` lane ships
@@ -343,11 +406,13 @@ code passes through.
343
406
  ## 🎭 Modes
344
407
 
345
408
  - **advise** (default) — read-only worker. Codex runs in a read-only sandbox;
346
- Claude gets only Read/Glob/Grep; Grok runs in plan mode. Use for reviews,
347
- questions, second opinions.
409
+ Claude gets only Read/Glob/Grep; Grok runs in plan mode; Kimi and OpenCode
410
+ pin their read-only plan modes; OpenRouter is advise-only by design (pure
411
+ inference). Use for reviews, questions, second opinions.
348
412
  - **work** — the worker may edit files, only inside the `--workdir` you name.
349
413
  Codex gets a workspace-write sandbox; Claude auto-accepts edits; Gemini runs
350
- in accept-edits mode.
414
+ in accept-edits mode. The `openrouter` vendor refuses work mode with a clear
415
+ error — route edits to an agentic CLI vendor instead.
351
416
 
352
417
  ## 🔒 Safety rails
353
418
 
@@ -404,11 +469,15 @@ configurator and `routing.local.yaml` exist so you can disagree.
404
469
 
405
470
  ## 🌱 Status
406
471
 
407
- v0.5.1 keeps Codex `work` usable outside Git while bounding stalls with
408
- process-group cleanup, and synchronizes every public version surface. It builds
409
- on v0.5.0's installer, lifecycle, job-store, deadline, diagnostics, and release
410
- CI hardening. Grok/Antigravity command-shell behavior may still vary across CLI
411
- versions. Issues and PRs welcome.
472
+ omnilane now spans thirteen dispatch vendors four harness natives (codex,
473
+ claude, grok, gemini), three aggregator/overflow CLIs (kimi, qwen, opencode),
474
+ and six CLI-free OpenAI-compatible direct-API vendors (openrouter, deepseek,
475
+ zai, mistral, groq, cerebras) on the uniform runner contract with
476
+ contract tests, plus the Claude Code `SessionStart`
477
+ auto-reminder and an MCP stdio server surface (`omnilane mcp`). The direct-API
478
+ and aggregator runners are contract-tested against fake binaries;
479
+ real-model reports welcome. Grok/Antigravity command-shell behavior may still
480
+ vary across CLI versions. Issues and PRs welcome.
412
481
 
413
482
  Project policies: [Contributing](CONTRIBUTING.md) · [Security](SECURITY.md) ·
414
483
  [Changelog](CHANGELOG.md)