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 +58 -1
- package/README.ja.md +75 -14
- package/README.ko.md +71 -13
- package/README.md +84 -15
- package/README.zh-CN.md +59 -11
- package/README.zh-TW.md +73 -11
- package/VERSION +1 -1
- package/bin/omnilane +12 -3
- package/bin/omnilane-mcp +756 -0
- package/completions/omnilane.fish +50 -0
- package/package.json +1 -1
- package/scripts/check.sh +125 -0
- package/scripts/configure.sh +149 -1
- package/scripts/dispatch.sh +4 -4
- package/scripts/doctor.sh +38 -0
- package/scripts/jobs.sh +132 -10
- package/scripts/lib/common.sh +57 -3
- package/scripts/runners/run-cerebras.sh +7 -0
- package/scripts/runners/run-deepseek.sh +7 -0
- package/scripts/runners/run-groq.sh +7 -0
- package/scripts/runners/run-mistral.sh +7 -0
- package/scripts/runners/run-openai-compat.sh +102 -0
- package/scripts/runners/run-openrouter.sh +5 -84
- package/scripts/runners/run-zai.sh +7 -0
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.
|
|
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
|
-
|
|
9
|
-
|
|
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.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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
441
|
+
omnilane は 13 のディスパッチベンダーを備えます——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
|
-
|
|
9
|
-
|
|
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
|
-
각 레인을 그 작업에 가장 강한
|
|
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
|
|
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
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
429
|
+
omnilane 은 13개의 디스패치 벤더를 갖춥니다——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
|
-
|
|
9
|
-
|
|
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
|
|
119
|
-
|
|
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
|
|
248
|
-
rest of the table degrades
|
|
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
|
|
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
|
|
347
|
-
|
|
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
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
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)
|