omnilane 0.7.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 +209 -0
- package/LICENSE +21 -0
- package/README.ja.md +345 -0
- package/README.ko.md +337 -0
- package/README.md +368 -0
- package/README.zh-CN.md +317 -0
- package/README.zh-TW.md +327 -0
- package/SECURITY.md +37 -0
- package/VERSION +1 -0
- package/bin/omnilane +72 -0
- package/completions/_omnilane +114 -0
- package/completions/omnilane.bash +123 -0
- package/local.sh.example +37 -0
- package/package.json +54 -0
- package/routing.local.yaml.example +41 -0
- package/routing.yaml +34 -0
- package/scripts/configure.sh +134 -0
- package/scripts/dispatch.sh +705 -0
- package/scripts/doctor.sh +166 -0
- package/scripts/jobs.sh +802 -0
- package/scripts/lib/common.sh +247 -0
- package/scripts/lib/i18n.sh +104 -0
- package/scripts/lib/job-timeout.pl +109 -0
- package/scripts/lib/job-worker.sh +23 -0
- package/scripts/release-audit.sh +314 -0
- package/scripts/runners/run-claude.sh +37 -0
- package/scripts/runners/run-codex.sh +51 -0
- package/scripts/runners/run-exec.sh +33 -0
- package/scripts/runners/run-gemini.sh +60 -0
- package/scripts/runners/run-grok.sh +56 -0
- package/scripts/runners/run-vote.sh +119 -0
- package/scripts/ui.py +1236 -0
- package/ui/app.js +1106 -0
- package/ui/index.html +192 -0
- package/ui/styles.css +1023 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable user-visible changes are recorded here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and releases use
|
|
5
|
+
semantic version tags.
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.7.0] - 2026-07-17
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `install.sh --check` reports missing, drifted, and checkout-owned links and
|
|
14
|
+
selected routing reminders without writing. `--dry-run` previews install or
|
|
15
|
+
uninstall actions without loading machine-local routing code.
|
|
16
|
+
- `omnilane completion bash|zsh` prints safe shell completion definitions for
|
|
17
|
+
public commands, routing lanes, and local job IDs without loading executable
|
|
18
|
+
machine-local routing overrides.
|
|
19
|
+
- `omnilane release-audit [--json]` provides an offline, read-only release gate
|
|
20
|
+
for version metadata, tracked package contents, executable modes, rollback
|
|
21
|
+
docs, archive reproducibility, and optional annotated-tag verification.
|
|
22
|
+
- `dispatch.sh --list`, `--explain`, and `--validate` accept `--json` before or
|
|
23
|
+
after the inspection command and return one versioned JSON envelope without
|
|
24
|
+
invoking a provider or creating job state.
|
|
25
|
+
- `dispatch.sh --dry-run` resolves the vendor, overrides, mode, work directory,
|
|
26
|
+
per-call timeout, whole-job timeout, and expected side effects without reading
|
|
27
|
+
task stdin, invoking a provider, or creating job state.
|
|
28
|
+
- `jobs.sh --json list|status|result|stats` emits versioned, machine-readable
|
|
29
|
+
local job summaries. JSON result inspection reports only body availability;
|
|
30
|
+
task, output, and stderr bodies remain private.
|
|
31
|
+
- `jobs.sh wait ID [--timeout N]` waits read-only for one local background job.
|
|
32
|
+
It preserves the recorded job exit, returns 124 on wait timeout, and 125 for
|
|
33
|
+
a dead worker without a recorded exit.
|
|
34
|
+
- `jobs.sh audit [--last N] [--json]` performs a bounded, read-only integrity
|
|
35
|
+
and privacy check of the local job store without printing task or result
|
|
36
|
+
content.
|
|
37
|
+
- `dispatch.sh --help` / `-h` and `jobs.sh help` print full usage on stdout
|
|
38
|
+
with exit 0; misuse keeps the stderr usage error with exit 2.
|
|
39
|
+
- `jobs.sh tail JOB_ID [--lines N]` peeks at the bounded end of one job's
|
|
40
|
+
public output stream, for running and completed jobs, refusing symlinked
|
|
41
|
+
output paths.
|
|
42
|
+
- `jobs.sh retry JOB_ID [--background]` re-dispatches a completed job with its
|
|
43
|
+
recorded lane, vendor, mode, workdir, timeouts, and original task text;
|
|
44
|
+
metadata parsing is fail-closed and running jobs are refused.
|
|
45
|
+
- `jobs.sh prune --older-than DAYS` prunes completed jobs by the timestamp
|
|
46
|
+
embedded in the job id; alone it prunes purely by age, and combined with an
|
|
47
|
+
explicit `--keep N` both conditions must hold.
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
- A bare `jobs.sh` invocation reports usage with exit 2 instead of crashing
|
|
52
|
+
with an unbound-variable error under macOS stock Bash 3.2.
|
|
53
|
+
- An empty routing chain (`lane:` with no candidates) no longer aborts
|
|
54
|
+
`--list` mid-table under Bash 3.2; `--validate` now reports it as
|
|
55
|
+
`FAIL <lane> empty-chain` and keeps scanning later lanes.
|
|
56
|
+
- `jobs.sh prune` no longer crashes under Bash 3.2 when no job is eligible.
|
|
57
|
+
- The configurator's four-voter selection and the vote runner's temp-file
|
|
58
|
+
cleanup no longer hit empty-array expansions under Bash 3.2 `set -u`.
|
|
59
|
+
|
|
60
|
+
## [0.6.0] - 2026-07-16
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
|
|
64
|
+
- `dispatch.sh --explain LANE` reports every fallback candidate and the selected
|
|
65
|
+
decision without invoking a provider or creating job state.
|
|
66
|
+
- `dispatch.sh --validate` checks the effective routing table for duplicate
|
|
67
|
+
lanes, malformed candidates, unknown vendors, and machine-local reachability
|
|
68
|
+
without invoking a provider.
|
|
69
|
+
- `jobs.sh stats [--last N]` summarizes local job outcomes and lane/vendor
|
|
70
|
+
distribution from bounded public metadata without reading task or result bodies.
|
|
71
|
+
- `omnilane doctor --json` emits the same read-only health checks as one escaped,
|
|
72
|
+
machine-readable document while preserving the existing failure exit status.
|
|
73
|
+
- The Live Board can pin one loaded job as a memory-only reference and compare
|
|
74
|
+
its route and public result with the current selection. Comparison remains
|
|
75
|
+
local, read-only, responsive, and plain-text safe.
|
|
76
|
+
|
|
77
|
+
### Changed
|
|
78
|
+
|
|
79
|
+
- Redesigned all five READMEs: a 60-second quickstart section, the feature
|
|
80
|
+
grid folded into How it works, and the Live UI docs promoted to a Live
|
|
81
|
+
Board section with desktop and mobile screenshots
|
|
82
|
+
(`docs/live-board.png`, `docs/live-board-mobile.png`).
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
|
|
86
|
+
- Lock-owner reads no longer leak transient missing-file diagnostics when the
|
|
87
|
+
owner file disappears between the existence check and bounded read; locking
|
|
88
|
+
behavior remains fail-closed.
|
|
89
|
+
|
|
90
|
+
## [0.5.1] - 2026-07-16
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
|
|
94
|
+
- A root `VERSION` source of truth, `omnilane --version`, and CI regression
|
|
95
|
+
coverage that keeps both plugin manifests, the changelog, and all five README
|
|
96
|
+
headings aligned.
|
|
97
|
+
|
|
98
|
+
### Fixed
|
|
99
|
+
|
|
100
|
+
- Codex `work` remains available outside Git worktrees. When no whole-job
|
|
101
|
+
timeout is configured, Omnilane now reuses the resolved per-call watchdog as
|
|
102
|
+
a process-group fuse for that case (up to 999999999 seconds); expiry cleans
|
|
103
|
+
the supervised process group and returns 124. Without the bundled Perl
|
|
104
|
+
supervisor it warns and retains the existing per-call watchdog path instead
|
|
105
|
+
of blocking work.
|
|
106
|
+
|
|
107
|
+
## [0.5.0] - 2026-07-15
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
|
|
111
|
+
- Optional `--job-timeout` and per-lane/global environment controls for one
|
|
112
|
+
aggregate deadline across lock wait, retries, voters, and rounds.
|
|
113
|
+
- Preview-first `jobs prune`, read-only `omnilane doctor`, executable gate
|
|
114
|
+
fallback, and explicit dispatch usage/environment validation.
|
|
115
|
+
- Bundled-Chromium behavior CI, contribution and security policies, and this
|
|
116
|
+
durable changelog.
|
|
117
|
+
|
|
118
|
+
### Changed
|
|
119
|
+
|
|
120
|
+
- Job prompts, results, metadata, PID files, and logs now use owner-only storage
|
|
121
|
+
with bounded control-file parsing and complete JSON escaping.
|
|
122
|
+
- Installer ownership rules preserve regular wrappers and symlinks belonging to
|
|
123
|
+
other checkouts; uninstall remains successful after provider removal.
|
|
124
|
+
- Empty and invalid stale locks can be recovered without stealing a live owner.
|
|
125
|
+
- GitHub Actions now use read-only permissions, stale-run cancellation, and
|
|
126
|
+
verified commit SHA pins.
|
|
127
|
+
|
|
128
|
+
### Fixed
|
|
129
|
+
|
|
130
|
+
- Rejected job-ID traversal, symlinked job stores and job directories,
|
|
131
|
+
malformed exit/PID metadata, unbounded PID reads, ambiguous dispatch
|
|
132
|
+
positionals, and invalid timeout/retry/lock controls.
|
|
133
|
+
- The whole-job supervisor forwards signals, terminates TERM-ignoring process
|
|
134
|
+
groups, preserves normal exit status, and records timeout exit `124` for
|
|
135
|
+
foreground and background jobs.
|
|
136
|
+
- Cross-browser mobile focus restoration tests now wait for the observable
|
|
137
|
+
focus state instead of racing the next animation frame.
|
|
138
|
+
|
|
139
|
+
### Security
|
|
140
|
+
|
|
141
|
+
- Prevented terminal-control injection through rejected control values and
|
|
142
|
+
diagnostic output.
|
|
143
|
+
- Kept prompts and model answers out of world-readable job artifacts and
|
|
144
|
+
prevented local state commands from following foreign symlinks.
|
|
145
|
+
|
|
146
|
+
## [0.4.0] - 2026-07-15
|
|
147
|
+
|
|
148
|
+
### Added
|
|
149
|
+
|
|
150
|
+
- Natural-language consultation rules and an explicit multi-vendor `consult`
|
|
151
|
+
lane with no silent fallback for named targets.
|
|
152
|
+
- `--vendor` selection for direct model consultation.
|
|
153
|
+
- Authenticated, loopback-only Live UI with job summaries, details, SSE updates,
|
|
154
|
+
lifecycle commands, desktop/mobile behavior, and real-browser tests.
|
|
155
|
+
- Per-call and per-lane watchdog overrides through `--timeout` and
|
|
156
|
+
`OMNILANE_TIMEOUT_<LANE>`.
|
|
157
|
+
|
|
158
|
+
### Changed
|
|
159
|
+
|
|
160
|
+
- Published the v0.4.0 guide in English, Traditional Chinese, Simplified
|
|
161
|
+
Chinese, Japanese, and Korean.
|
|
162
|
+
|
|
163
|
+
## [0.3.0] - 2026-07-13
|
|
164
|
+
|
|
165
|
+
### Added
|
|
166
|
+
|
|
167
|
+
- Interactive configurator, global wrapper, opt-in vote panel, fallback model
|
|
168
|
+
documentation, and five-language installer guidance.
|
|
169
|
+
|
|
170
|
+
### Security
|
|
171
|
+
|
|
172
|
+
- Replaced routing `eval` with a literal tokenizer.
|
|
173
|
+
- Made installer marker removal fail closed and uninstall byte-reversible.
|
|
174
|
+
- Added untrusted-data boundaries and cleanup guarantees to vote round two.
|
|
175
|
+
|
|
176
|
+
## [0.2.1] - 2026-07-13
|
|
177
|
+
|
|
178
|
+
### Fixed
|
|
179
|
+
|
|
180
|
+
- Corrected target-directory lock keys and ownership, fail-closed mode
|
|
181
|
+
validation, Grok empty-output handling, background job status, preserved job
|
|
182
|
+
exit codes, read-only Claude advice tools, Gemini workdir behavior, and the
|
|
183
|
+
stock-Perl watchdog fallback.
|
|
184
|
+
|
|
185
|
+
## [0.2.0] - 2026-07-12
|
|
186
|
+
|
|
187
|
+
### Added
|
|
188
|
+
|
|
189
|
+
- Lane fallback chains, the `coding-overflow` lane, background job robustness,
|
|
190
|
+
and a Traditional Chinese README.
|
|
191
|
+
|
|
192
|
+
## [0.1.0] - 2026-07-12
|
|
193
|
+
|
|
194
|
+
### Added
|
|
195
|
+
|
|
196
|
+
- Initial shared routing table, cross-vendor dispatcher, runners, installer,
|
|
197
|
+
and baseline lint fixes.
|
|
198
|
+
|
|
199
|
+
[Unreleased]: https://github.com/Seraphim0916/omnilane/compare/v0.7.0...HEAD
|
|
200
|
+
|
|
201
|
+
[0.7.0]: https://github.com/Seraphim0916/omnilane/compare/v0.6.0...v0.7.0
|
|
202
|
+
[0.6.0]: https://github.com/Seraphim0916/omnilane/compare/v0.5.1...v0.6.0
|
|
203
|
+
[0.5.1]: https://github.com/Seraphim0916/omnilane/compare/v0.5.0...v0.5.1
|
|
204
|
+
[0.5.0]: https://github.com/Seraphim0916/omnilane/compare/v0.4.0...v0.5.0
|
|
205
|
+
[0.4.0]: https://github.com/Seraphim0916/omnilane/compare/v0.3.0...v0.4.0
|
|
206
|
+
[0.3.0]: https://github.com/Seraphim0916/omnilane/compare/v0.2.1...v0.3.0
|
|
207
|
+
[0.2.1]: https://github.com/Seraphim0916/omnilane/compare/v0.2.0...v0.2.1
|
|
208
|
+
[0.2.0]: https://github.com/Seraphim0916/omnilane/compare/v0.1.0...v0.2.0
|
|
209
|
+
[0.1.0]: https://github.com/Seraphim0916/omnilane/releases/tag/v0.1.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Seraphim0916
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ja.md
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# omnilane
|
|
4
|
+
|
|
5
|
+
### ルーティングテーブルは一枚、ハーネスは全部。
|
|
6
|
+
|
|
7
|
+
*メインループはもう、どのモデルを使うか迷わない。*<br/>
|
|
8
|
+
すべてのサブタスクを、その作業が本当に得意なモデルへ——<br/>
|
|
9
|
+
**Claude Code · Codex · Grok Build · Antigravity** を横断、いまのサブスクリプションのままで。
|
|
10
|
+
|
|
11
|
+
<img src="docs/hero.ja.png" alt="omnilane が各サブタスクを Claude Code・Codex・Grok・Antigravity の最適なモデルへ振り分ける" width="820"/>
|
|
12
|
+
|
|
13
|
+
[](https://github.com/Seraphim0916/omnilane/actions/workflows/ci.yml)
|
|
14
|
+
[](LICENSE)
|
|
15
|
+
[](https://github.com/Seraphim0916/omnilane/tags)
|
|
16
|
+
|
|
17
|
+
[English](README.md) · [繁體中文](README.zh-TW.md) · [简体中文](README.zh-CN.md) · **日本語** · [한국어](README.ko.md)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## v0.7.0 の新機能
|
|
24
|
+
|
|
25
|
+
- **ディスパッチを事前にプレビュー** — `--dry-run` は解決済みの実行計画
|
|
26
|
+
(vendor、モデル、モード、タイムアウト、副作用判定)を表示し、モデル呼び出しも
|
|
27
|
+
ジョブ状態の作成も行いません。
|
|
28
|
+
- **バージョン付き JSON で自動化** — `--list`/`--explain`/`--validate` と
|
|
29
|
+
`jobs list|status|result|stats` に `--json` エンベロープを追加。読み取り専用の
|
|
30
|
+
`jobs wait`、`jobs audit`、決定的マニフェスト付きのオフライン
|
|
31
|
+
`omnilane release-audit` も利用できます。
|
|
32
|
+
- **ローカルジョブを一気通貫で操作** — `jobs tail` で出力を覗き、`jobs retry` で
|
|
33
|
+
完了ジョブを fail-closed に再実行、`prune --older-than` で古いジョブを整理。
|
|
34
|
+
`--help` が全コマンドを網羅します。
|
|
35
|
+
- **インストールと補完を安全に** — `install.sh --check`/`--dry-run` は書き込みなしで
|
|
36
|
+
ドリフトを報告し、`omnilane completion bash|zsh` が安全なタブ補完を提供。
|
|
37
|
+
macOS 標準 Bash 3.2 のクラッシュを 5 件修正しました。
|
|
38
|
+
|
|
39
|
+
## v0.6.0 の新機能
|
|
40
|
+
|
|
41
|
+
- **ルーティングをオフラインで説明・検証** — `--explain` で各フォールバック
|
|
42
|
+
候補を確認し、`--validate` で実効ルーティング表全体を検査できます。
|
|
43
|
+
プロバイダー呼び出しやジョブ状態の作成は行いません。
|
|
44
|
+
- **ローカル状態を機械可読データで観測** — 有界な `jobs.sh stats` 集計と
|
|
45
|
+
`omnilane doctor --json` により、タスクや結果本文を漏らさず自動化できます。
|
|
46
|
+
- **Live Board で二つのジョブを比較** — 読み込み済みジョブをメモリ内だけの
|
|
47
|
+
参照スナップショットとして固定し、モデル経路と公開結果を並べて比較できます。
|
|
48
|
+
- **ロック回復時のノイズを削減** — 所有者ファイルが確認と読み取りの間に
|
|
49
|
+
消えた場合も、誤解を招く欠落ファイル診断を出さず fail-closed を維持します。
|
|
50
|
+
|
|
51
|
+
## v0.5.1 の新機能
|
|
52
|
+
|
|
53
|
+
- **Git 管理外で Codex work を利用** — 通常のディレクトリを引き続きサポートし、
|
|
54
|
+
Omnilane は `git init` を要求も自動実行もしません。
|
|
55
|
+
- **非 Git の停止を安全に処理** — 全体上限が未設定なら、解決済みの呼び出し単位
|
|
56
|
+
ウォッチドッグを process group ヒューズとして使い、明示設定の優先順位と終了
|
|
57
|
+
コードの意味は維持します。
|
|
58
|
+
- **表示バージョンを信頼可能に** — `VERSION` が `omnilane --version` と二つの
|
|
59
|
+
plugin manifest を統一し、CI が変更履歴と五言語 README の一致を検査します。
|
|
60
|
+
|
|
61
|
+
## ⚡ 60 秒クイックスタート
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
git clone https://github.com/Seraphim0916/omnilane && cd omnilane
|
|
65
|
+
./install.sh # CLI を検出、スキルを接続、あなたの言語で対話
|
|
66
|
+
omnilane route hardest-coding "auth トークン更新テストの不安定さを修正"
|
|
67
|
+
omnilane ui start # 任意:ブラウザでジョブをライブ表示
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 🧭 仕組み
|
|
71
|
+
|
|
72
|
+
omnilane は、**どの** agentic CLI のメインループでも、サブタスクをレーンに
|
|
73
|
+
分類し、各レーンをその作業が最も得意なベンダー CLI へヘッドレスで
|
|
74
|
+
ディスパッチさせる仕組みです。既存のサブスクリプションログインをそのまま使います:
|
|
75
|
+
|
|
76
|
+
```mermaid
|
|
77
|
+
flowchart LR
|
|
78
|
+
M["メインループ<br/><i>任意の CLI</i>"] --> T{{"routing.yaml<br/>一枚の共有テーブル"}}
|
|
79
|
+
T -->|hardest-coding| C1["Codex — GPT-5.6 Sol"]
|
|
80
|
+
T -->|bulk-mechanical| C2["Codex — GPT-5.6 Terra"]
|
|
81
|
+
T -->|taste-final| C3["Claude — Opus 4.8"]
|
|
82
|
+
T -->|long-context| C4["Gemini — 3.1 Pro"]
|
|
83
|
+
T -->|live-search| C5["Grok — 4.5"]
|
|
84
|
+
T -->|"arbitrate(オプトイン)"| C6["vote — 1-4 モデルパネル"]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- **`routing.yaml`** — レーン → ベンダー+モデル+推論エフォート。
|
|
88
|
+
一つのファイルを四つのハーネスが共有します。
|
|
89
|
+
- **フォールバックチェーン** — レーンには複数の候補を並べられます
|
|
90
|
+
(`codex … | claude … | off`)。実際にインストールされている最初のベンダー
|
|
91
|
+
CLI が選ばれるため、一〜二社の契約でも同じテーブルが機能します。
|
|
92
|
+
- **`scripts/dispatch.sh [--vendor V] <レーン> "<タスク>"`** — テーブルを
|
|
93
|
+
解決し、該当ベンダーの CLI をヘッドレスで起動します。`--vendor` は
|
|
94
|
+
指定ベンダーに固定し、フォールバックしません。
|
|
95
|
+
- **`skills/omnilane/SKILL.md`** — 四つのハーネス共通のスキル:
|
|
96
|
+
自分のモデルを特定し、自分のレーンは自前で実行、残りはディスパッチ。
|
|
97
|
+
|
|
98
|
+
<div align="center">
|
|
99
|
+
|
|
100
|
+
| | | |
|
|
101
|
+
|:---:|:---:|:---:|
|
|
102
|
+
| 🧭 **一枚のテーブル**<br/>四つのハーネスで共有 | 🪂 **フォールバックチェーン**<br/>手持ちの CLI へ自動降格 | 🗳️ **オピニオンパネル**<br/>重大な判断はマルチモデル投票 |
|
|
103
|
+
| 🔒 **安全機構**<br/>ロック · ウォッチドッグ · ネスト禁止 | 🌏 **五言語対応**<br/>インストーラーが母語で対話 | ↩️ **完全可逆**<br/>`--uninstall` で全て元通り |
|
|
104
|
+
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
## 🛤️ レーン一覧(デフォルト。実効値は `scripts/dispatch.sh --list` で確認)
|
|
108
|
+
|
|
109
|
+
| レーン | 第一候補 | バックアップ | 用途 |
|
|
110
|
+
|---|---|---|---|
|
|
111
|
+
| 🔥 hardest-coding | GPT-5.6 Sol (xhigh) | Claude Opus 4.8 (high) | 最難関の実装、根本原因デバッグ、正確性が要の変更 |
|
|
112
|
+
| 🏗️ bulk-mechanical | GPT-5.6 Terra (max) | Claude Sonnet 5 (high) | リファクタ、移行、テスト、大規模スイープ |
|
|
113
|
+
| 🧹 triage | GPT-5.6 Luna (medium) | Gemini 3.5 Flash (Low) | 大量の一次スクリーニング |
|
|
114
|
+
| ⚖️ hard-judgment | GPT-5.6 Sol (max) | Claude Opus 4.8 (high) | アーキテクチャ裁定、深い推論、セカンドオピニオン |
|
|
115
|
+
| ✒️ taste-final | Claude Opus 4.8 (high) | GPT-5.6 Sol (max) | 対外文章、prompt/ドキュメント推敲、スタイル最終審 |
|
|
116
|
+
| 💬 consult | 明示指定したベンダー/モデル | —(フォールバックなし) | 自然言語で直接相談。`--vendor` を必ず維持 |
|
|
117
|
+
| 🎨 ui-draft | GPT-5.6 Sol (xhigh) | Claude Opus 4.8 (high) | デザインシステム/参考画像がある場合の UI ドラフト |
|
|
118
|
+
| 📚 long-context | Gemini 3.1 Pro (High) | Claude Opus 4.8 (high) | 100 万トークン級の長文統合——分析専用、agentic ループ禁止 |
|
|
119
|
+
| ⚡ fast-agentic | Gemini 3.5 Flash (High) | GPT-5.6 Luna (high) | 高速なマルチステップ agentic ループ、マルチモーダル確認 |
|
|
120
|
+
| 📡 live-search | Grok 4.5 | —(off) | リアルタイム X/ウェブ検索とソーシャル文脈 |
|
|
121
|
+
| 🚰 coding-overflow | Grok 4.5 | —(off) | Codex クォータ逼迫時の中級コーディング逃し弁 |
|
|
122
|
+
| 🗳️ arbitrate | off(オプトイン) | — | 内蔵オピニオンパネル(重大な判断用)——デフォルト無効。`routing.local.yaml` で有効化;投票者×ラウンドごとに 1 コール消費 |
|
|
123
|
+
|
|
124
|
+
**バックアップ**はチェーンの次の候補——第一候補のベンダー CLI が未インストールの
|
|
125
|
+
ときにディスパッチが降格する先です。
|
|
126
|
+
|
|
127
|
+
> **Claude Fable 5 はどこ?** 意図的にデフォルト表に入れていません:Claude の
|
|
128
|
+
> 最上位ティアは通常*メインループ自身*であり、ディスパッチされるワーカーでは
|
|
129
|
+
> ないため(価格も Opus より上)。設定メニューのモデル一覧には載っているので、
|
|
130
|
+
> 使いたければ自分でルーティングできます(例:`routing.local.yaml` に
|
|
131
|
+
> `taste-final: claude claude-fable-5 high`)。
|
|
132
|
+
|
|
133
|
+
### 自然言語コンサルテーション
|
|
134
|
+
|
|
135
|
+
`omnilane` スキルまたは `/route` では、普通に
|
|
136
|
+
**「Opus にこのアーキテクチャを厳しく検討してもらって。」** と頼めます。
|
|
137
|
+
自然言語を解釈するのは Agent Skill であり、`dispatch.sh` に自由文の shell
|
|
138
|
+
パーサーを追加するものではありません。
|
|
139
|
+
|
|
140
|
+
- 能力だけを尋ねる質問には、該当レーンで現在最初に利用可能なモデルを回答し、
|
|
141
|
+
モデル呼び出しは行いません。
|
|
142
|
+
- 一般的なベンダー名は、そのベンダー用に `consult` で設定された候補を使います。
|
|
143
|
+
- Opus などの標準モデル別名はスキル表の正確なモデルファミリーに固定します。
|
|
144
|
+
明示した対象が存在しない、または CLI が使えない場合は明確に失敗し、別の
|
|
145
|
+
ベンダーやモデルファミリーへフォールバックしません。
|
|
146
|
+
|
|
147
|
+
<details>
|
|
148
|
+
<summary><b>👉 どのレーンを自分で実行する?メインモデルを選択</b></summary>
|
|
149
|
+
|
|
150
|
+
<br/>
|
|
151
|
+
|
|
152
|
+
上の表はベンダー非依存です——レーンの*最適*モデルは、誰が操縦していても
|
|
153
|
+
変わりません。変わるのは、どのレーンを**自分で実行**するか(すでにそのモデル
|
|
154
|
+
なので追加コールなし)、どれを**ディスパッチ**するか。CLI の `omnilane` スキルが
|
|
155
|
+
該当行を自動適用します。これはその人間向けビューです。
|
|
156
|
+
|
|
157
|
+
- **Claude Code · Fable 5** — 自分で実行:hard-judgment、taste-final、正確性が最重要の難修正。ディスパッチ:機械的コーディング量 → Codex、長文 → Gemini、リアルタイム検索 → Grok。
|
|
158
|
+
- **Claude Code · Opus 4.8** — 自分で実行:taste-final。hard-judgment は Codex Sol へ(素の知能スコアが Opus より上)、コーディングは全て Codex レーン、長文 → Gemini、リアルタイム検索 → Grok。
|
|
159
|
+
- **Codex · Sol** — 自分で実行:hardest-coding、hard-judgment、ui-draft。ディスパッチ:taste-final → Claude、長文 → Gemini、リアルタイム検索 → Grok、大量作業 → Codex Terra。
|
|
160
|
+
- **Codex · Terra** — 自分で実行:bulk-mechanical。本当に最難関の部分は Sol へエスカレーション;taste → Claude、長文 → Gemini、リアルタイム検索 → Grok。
|
|
161
|
+
- **Grok Build · Grok 4.5** — 自分で実行:live-search、coding-overflow(中級コーディング)。難しい作業は全て Codex/Claude/Gemini へ——先に全 API シグネチャと引用事実を検証。
|
|
162
|
+
- **Antigravity · Gemini** — 自分で実行:long-context(3.1 Pro)、fast-agentic(Flash)。コーディング/判断/文章は Codex/Claude へ;リアルタイム検索 → Grok。3.1 Pro では agentic ツールループチェーンを決して受けない。
|
|
163
|
+
|
|
164
|
+
</details>
|
|
165
|
+
|
|
166
|
+
## 🖥️ Live Board
|
|
167
|
+
|
|
168
|
+
すべてのディスパッチは——フォアグラウンドでも `--background` でも——ディスク上の
|
|
169
|
+
ジョブとして記録されます。Live Board はそのジョブストアの上に載る、任意かつ
|
|
170
|
+
読み取り専用のローカルワークベンチです:各モデルに何を頼み、何が返り、どう
|
|
171
|
+
ルーティングされ、まだ実行中かを一目で確認できます。
|
|
172
|
+
|
|
173
|
+
<div align="center">
|
|
174
|
+
|
|
175
|
+
<img src="docs/live-board.png" alt="Omnilane Live Board デスクトップ表示——左にジョブ一覧、右に選択中ジョブのタスク・公開結果・モデルパス" width="820"/>
|
|
176
|
+
|
|
177
|
+
<img src="docs/live-board-mobile.png" alt="Omnilane Live Board モバイル表示——検索可能なジョブ一覧とステータスフィルター" width="280"/>
|
|
178
|
+
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
omnilane ui start # サーバーを起動または再利用し、認証済み URL を表示
|
|
183
|
+
omnilane ui status # ローカルサーバーの状態を確認
|
|
184
|
+
omnilane ui url # 現在の認証済み URL を表示
|
|
185
|
+
omnilane ui stop # 正常に停止
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
デスクトップではジョブ一覧と詳細ペインを別々にスクロールでき、モバイルでは
|
|
189
|
+
一覧/詳細の切り替えと戻る操作、Esc に対応します。Server-Sent Events(SSE)は
|
|
190
|
+
フォーカス中の行を作り直さず更新し、短い切断では最後のスナップショットを保持して
|
|
191
|
+
再接続します。読み込み済みジョブを参照として固定し、別のジョブを選ぶと、モデル
|
|
192
|
+
経路と公開結果を横並びで比較できます。参照スナップショットはブラウザのメモリ内
|
|
193
|
+
だけに保持され、ページを閉じると消えます。`127.0.0.1` のみにバインドし、
|
|
194
|
+
ランダムトークンで保護された読み取り専用画面です。`task.txt` と公開用 `out.txt`
|
|
195
|
+
のみを表示し、ワーカーや
|
|
196
|
+
ベンダーの生ログは表示しません。
|
|
197
|
+
|
|
198
|
+
コアルーティングに Python は不要で、この UI のみ Python 3.9 以降が必要です。
|
|
199
|
+
|
|
200
|
+
## 📦 インストール
|
|
201
|
+
|
|
202
|
+
前提:ルーティングしたいベンダー CLI(`codex`、`claude`、`grok`、`agy`)が
|
|
203
|
+
ログイン済みで `PATH` 上にあること——**持っている分だけで OK**、
|
|
204
|
+
足りないレーンは自動的に降格します。
|
|
205
|
+
|
|
206
|
+
最速:`./install.sh` — 本機の CLI を検出してスキルを接続し、残りのプラグイン
|
|
207
|
+
コマンドを表示、実効ルーティングを出力し、最後に対話式設定メニューを
|
|
208
|
+
提案します(`--uninstall` で元に戻せます)。インストーラーはシステム言語に
|
|
209
|
+
合わせて英/繁中/簡中/日/韓を自動選択(`OMNILANE_LANG=ja` で強制可)。
|
|
210
|
+
さらに任意で、各 CLI の指示ファイル(`~/.claude/CLAUDE.md`、
|
|
211
|
+
`~/.codex/AGENTS.md`、`~/.grok/Agents.md`、`~/.gemini/GEMINI.md`——パスは
|
|
212
|
+
CLI バージョンにより異なる場合あり)へマーカー付きの可逆な
|
|
213
|
+
**常駐ルーティングリマインダー**を追記できます。非対話インストールは
|
|
214
|
+
`OMNILANE_HOOKS=all|none|claude,codex` を指定。手動接続:
|
|
215
|
+
|
|
216
|
+
`./install.sh --check` は変更せずドリフトを検査します。インストールまたは
|
|
217
|
+
`--uninstall` に `--dry-run` を加えると所有対象の操作を事前表示します。
|
|
218
|
+
インストーラー所有のリンクとマーカー付きリマインダーを戻すには、
|
|
219
|
+
`./install.sh --uninstall` を実行します。
|
|
220
|
+
|
|
221
|
+
- **Claude Code**:プラグインとしてインストール(`/route`、`/route-jobs`
|
|
222
|
+
コマンド付き)、または `skills/omnilane` を `~/.claude/skills/` へ。
|
|
223
|
+
- **Codex**:`skills/omnilane` を `~/.codex/skills/` へ配置/リンク。
|
|
224
|
+
- **Grok Build**:`grok plugin install <このリポジトリ> --trust`
|
|
225
|
+
- **Antigravity**:`agy plugin install <このリポジトリ>`(先に
|
|
226
|
+
`agy plugin validate` で確認)
|
|
227
|
+
|
|
228
|
+
## ⚙️ カスタマイズ
|
|
229
|
+
|
|
230
|
+
三層、すべて任意:
|
|
231
|
+
|
|
232
|
+
1. **対話メニュー** — `scripts/configure.sh` が設定可能なレーンを表示し、レーンごとに
|
|
233
|
+
ベンダー → モデル → エフォートを選択(候補リスト+自由入力)、結果を
|
|
234
|
+
`~/.omnilane/routing.local.yaml` に書き込みます。複数ベンダーの `consult`
|
|
235
|
+
は意図的に除外されるため、変更する場合は手動編集します。
|
|
236
|
+
2. **`~/.omnilane/routing.local.yaml`** — 手書きのオーバーライド。
|
|
237
|
+
書式は `routing.yaml` と同じで、ローカルが優先。
|
|
238
|
+
3. **`~/.omnilane/local.sh`** — マシン固有のバイナリパス、プロキシ、認証
|
|
239
|
+
ラッパー。全ランナーが読み込み、コミットされません。
|
|
240
|
+
|
|
241
|
+
確認はいつでも:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
scripts/dispatch.sh --list # 実効テーブル(フォールバック解決を注記)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## 📖 コマンドリファレンス
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
eval "$(omnilane completion bash)" # 現在の Bash で補完を有効化
|
|
251
|
+
source <(omnilane completion zsh) # 現在の Zsh で補完を有効化
|
|
252
|
+
omnilane release-audit [--target VERSION] [--json] # オフライン・読み取り専用のリリースゲート
|
|
253
|
+
omnilane ui start # ローカル Live UI を起動または再利用し、URL を表示
|
|
254
|
+
omnilane ui status # Live UI の稼働状態を表示
|
|
255
|
+
omnilane ui url # 現在の認証済みローカル URL を表示
|
|
256
|
+
omnilane ui stop # Live UI を停止
|
|
257
|
+
omnilane doctor [--json] # ルーティングとローカル実行環境を読み取り専用で診断
|
|
258
|
+
dispatch.sh [--background] [--dry-run] [--mode advise|work] [--workdir DIR]
|
|
259
|
+
[--vendor V] [--model M] [--effort E] [--timeout SEC] [--job-timeout SEC]
|
|
260
|
+
LANE "TASK" # "-" で stdin から読む
|
|
261
|
+
dispatch.sh [--json] --list [--json]
|
|
262
|
+
dispatch.sh [--json] --explain LANE [--json] # 候補ごとの決定理由をオフライン表示
|
|
263
|
+
dispatch.sh [--json] --validate [--json] # プロバイダーを呼ばず実効ルーティングを検証
|
|
264
|
+
jobs.sh [--json] {list | status ID | result ID} # JSON は本文を返さずメタデータのみ
|
|
265
|
+
jobs.sh wait ID [--timeout N] # ジョブ終了値。124 はタイムアウト、125 はワーカー消失
|
|
266
|
+
jobs.sh [--json] stats [--last N] # ローカル成功率とルーティング集計
|
|
267
|
+
jobs.sh audit [--last N] [--json] # 読み取り専用のジョブ整合性・プライバシー検査
|
|
268
|
+
jobs.sh prune [--keep N] [--apply] # 既定はプレビューのみ。完了ジョブだけを対象
|
|
269
|
+
configure.sh # 対話式レーンメニュー
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
終了コード:`2` 使い方エラー(無効なベンダー、または指定ベンダーがレーンに
|
|
273
|
+
ない場合を含む)、`3` レーン無効(off)、`4` チェーン内に利用可能な CLI がない、
|
|
274
|
+
または設定済みの指定ベンダー CLI が利用不可、`5` Round 1 の成功投票者不足、
|
|
275
|
+
`6` Round 2 の反論全失敗、`86` ネストディスパッチ拒否、`87` ロック待ちタイムアウト、
|
|
276
|
+
`124` ジョブ全体タイムアウト。
|
|
277
|
+
それ以外はワーカー自身の終了コードを透過。
|
|
278
|
+
|
|
279
|
+
## 🎭 モード
|
|
280
|
+
|
|
281
|
+
- **advise(デフォルト)** — 読み取り専用ワーカー。Codex は read-only
|
|
282
|
+
サンドボックス、Claude は Read/Glob/Grep のみ、Grok は plan モード。
|
|
283
|
+
- **work** — 指定した `--workdir` 内でのみファイル編集可。Codex は
|
|
284
|
+
workspace-write、Claude は編集自動承認、Gemini は accept-edits モード。
|
|
285
|
+
|
|
286
|
+
## 🔒 安全機構
|
|
287
|
+
|
|
288
|
+
- **ネストディスパッチ禁止** — ワーカーの再ディスパッチを拒否
|
|
289
|
+
(`OMNILANE_DEPTH` ガード、終了コード 86)。
|
|
290
|
+
- **Codex 直列化ロック** — 同一ターゲットディレクトリへの codex
|
|
291
|
+
ディスパッチはキューイング。クラッシュ残留ロックは所有者 PID で検出し
|
|
292
|
+
安全に奪取。
|
|
293
|
+
- **ウォッチドッグ** — 全ワーカーは `timeout`/`gtimeout`、どちらも無ければ
|
|
294
|
+
perl-alarm フォールバック下で実行(素の macOS がこのケース)。上限は
|
|
295
|
+
**CLI 呼び出しごと** に適用され、優先順位は `--timeout SECONDS` > レーン別
|
|
296
|
+
`OMNILANE_TIMEOUT_<LANE>`(例 `OMNILANE_TIMEOUT_HARD_JUDGMENT`) > グローバル
|
|
297
|
+
`OMNILANE_TIMEOUT`(既定 600 秒)。これは呼び出し単位のハングガードであり、
|
|
298
|
+
ジョブ全体の予算ではありません。リトライするベンダー(grok)や vote パネル
|
|
299
|
+
(投票者 × ラウンド)は複数回呼び出すため、総実時間はこの値の数倍になり得ます。
|
|
300
|
+
- **ジョブ全体ヒューズ** — 任意の `--job-timeout SECONDS` はロック待ち、
|
|
301
|
+
リトライ、全投票者・ラウンドを一つの process group 監視下で制限します。
|
|
302
|
+
優先順位はフラグ > `OMNILANE_JOB_TIMEOUT_<LANE>` >
|
|
303
|
+
`OMNILANE_JOB_TIMEOUT` > 無効です。ただし Git worktree 外で Codex の
|
|
304
|
+
`work` を実行し、全体上限が未設定の場合だけ、解決済みの呼び出し単位
|
|
305
|
+
ウォッチドッグを自動的に全体ヒューズとして使います(監視機構の上限は
|
|
306
|
+
999999999 秒)。この自動ヒューズには同梱の Perl 監視機構が必要です。利用
|
|
307
|
+
できない場合は警告し、既存の呼び出し単位ウォッチドッグ経路で非 Git work を
|
|
308
|
+
続行します。その経路でも監視ツールがなければ、別途警告します。
|
|
309
|
+
期限切れは監視対象の process group を終了して 124 を返します。
|
|
310
|
+
大規模リポジトリの深い監査は 2–4 時間(7200–14400 秒)、呼び出し単位は
|
|
311
|
+
30 分から始めるのが目安です。ハードコードされた既定値ではありません。
|
|
312
|
+
- **バックグラウンドジョブ** — `--background` ワーカーは独立した process
|
|
313
|
+
group で動き、呼び出し元の終了後も生存。kill された場合は終了コードを
|
|
314
|
+
記録し、`jobs.sh status` が `dead` を報告。
|
|
315
|
+
- **ペイロード上限** — 巨大なタスクテキストは自動で頭尾トランケート。
|
|
316
|
+
|
|
317
|
+
## 📊 デフォルト値と出典
|
|
318
|
+
|
|
319
|
+
デフォルトのレーン割当は Artificial Analysis の 2026-07 スナップショット
|
|
320
|
+
(AA サイトの生レコードと各社公式価格ページで照合済み)と公開の比較レビューに
|
|
321
|
+
基づきます。これは意見であって法則ではありません——設定メニューと
|
|
322
|
+
`routing.local.yaml` はそのためにあります。
|
|
323
|
+
|
|
324
|
+
## ⚠️ 既知の制限
|
|
325
|
+
|
|
326
|
+
- **Antigravity の print モードにおけるツール呼び出しは現行 CLI ビルドで
|
|
327
|
+
不安定**(拒否または invalid-argument)。long-context レーンの本来の用途
|
|
328
|
+
(本文をタスクに貼り込む長文統合)には影響しません。
|
|
329
|
+
- **Grok に推論エフォートのつまみはありません**。effort 欄はインターフェース
|
|
330
|
+
互換のためだけに存在し、無視されます。
|
|
331
|
+
- **Git 管理外でも Codex の work は利用できます。** 一部の Codex CLI は
|
|
332
|
+
Git worktree 外で停止する可能性があるため、上記の自動ヒューズがこのケースを
|
|
333
|
+
制限し、監視対象の process group を終了します。Omnilane は `git init` を自動実行せず、
|
|
334
|
+
リポジトリの作成も要求しません。
|
|
335
|
+
|
|
336
|
+
## 🌱 ステータス
|
|
337
|
+
|
|
338
|
+
v0.5.1 は Git 管理外でも Codex `work` を利用可能に保ち、process group の
|
|
339
|
+
クリーンアップで停止を制限し、公開バージョン情報を同期します。v0.5.0 の
|
|
340
|
+
インストーラー、ライフサイクル、ジョブストア、期限、診断、リリース CI の
|
|
341
|
+
強化も維持します。Grok/Antigravity のコマンドシェル挙動は CLI バージョンで
|
|
342
|
+
変わる可能性があります。issue と PR を歓迎します。
|
|
343
|
+
|
|
344
|
+
プロジェクト文書:[コントリビューション](CONTRIBUTING.md) ·
|
|
345
|
+
[セキュリティ](SECURITY.md) · [変更履歴](CHANGELOG.md)
|