omnilane 0.10.4 → 0.12.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 +85 -1
- package/README.ja.md +49 -3
- package/README.ko.md +49 -4
- package/README.md +56 -4
- package/README.zh-CN.md +43 -4
- package/README.zh-TW.md +43 -4
- package/VERSION +1 -1
- package/package.json +1 -1
- package/routing.local.yaml.example +21 -0
- package/routing.yaml +17 -15
- package/scripts/dispatch.sh +9 -5
- package/scripts/runners/run-codex.sh +5 -0
- package/ui/app.js +853 -74
- package/ui/index.html +70 -59
- package/ui/styles.css +28 -0
package/routing.yaml
CHANGED
|
@@ -7,9 +7,12 @@
|
|
|
7
7
|
# Fallback chain: the first candidate whose vendor CLI is installed wins, so the
|
|
8
8
|
# same table degrades gracefully when you only subscribe to one or two vendors.
|
|
9
9
|
# Override any line in ~/.omnilane/routing.local.yaml (same format; local wins).
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
10
|
+
# Every benchmark score, price and throughput figure behind these orderings lives in
|
|
11
|
+
# docs/model-capabilities-2026-07.md, with the date it was retrieved. The comments below
|
|
12
|
+
# deliberately carry no numbers: they state WHY a lane is ordered the way it is, which
|
|
13
|
+
# stays true for months, while the numbers move every few weeks. Change an ordering and
|
|
14
|
+
# you update the doc; a figure going stale should never need a routing-table edit.
|
|
15
|
+
# (Audited 2026-07-12; re-audited 2026-07-25, 2026-08-02 and 2026-08-03.)
|
|
13
16
|
# defaults follow Artificial Analysis data, 2026-07
|
|
14
17
|
# snapshot. Verified against AA site records + vendor pricing pages: Intelligence &
|
|
15
18
|
# Coding indexes and 7:2:1 blended prices all match (AA field price1mBlended7To2To1);
|
|
@@ -17,28 +20,27 @@
|
|
|
17
20
|
# standard short-context API tier — on subscription CLIs treat $ as relative ranking.
|
|
18
21
|
# Your own job outcomes (~/.omnilane/jobs/) outrank these priors; edit lanes to match.
|
|
19
22
|
|
|
20
|
-
hardest-coding: codex gpt-5.6-sol
|
|
21
|
-
bulk-mechanical: codex gpt-5.6-terra max | claude claude-sonnet-5 high | gemini "Gemini 3.6 Flash (High)" - #
|
|
22
|
-
triage: codex gpt-5.6-luna medium | gemini "Gemini 3.6 Flash (Low)" - | claude claude-haiku-4-5 - # high-volume scans
|
|
23
|
-
hard-judgment: claude claude-opus-5 xhigh | codex gpt-5.6-sol max #
|
|
23
|
+
hardest-coding: codex gpt-5.6-sol xhigh | claude claude-opus-5 xhigh # ordered on coding capability specifically, not general intelligence. Sol dropped from max to xhigh on 2026-08-03: on AA's per-effort Coding Index, Sol at xhigh outscores both Sol at max and every Claude tier, at a third less cost — max buys overthinking here, not accuracy. xhigh is also Anthropic's documented starting point for coding/agentic work. Keep Sol first for the established Codex harness lane.
|
|
24
|
+
bulk-mechanical: codex gpt-5.6-terra max | claude claude-sonnet-5 high | gemini "Gemini 3.6 Flash (High)" - # ordered on endurance per dollar: Terra leads Sonnet 5 on both intelligence and cost per task
|
|
25
|
+
triage: codex gpt-5.6-luna medium | gemini "Gemini 3.6 Flash (Low)" - | claude claude-haiku-4-5 - # high-volume scans, ordered on cost per task: Luna is the cheapest model at its intelligence tier by a wide margin
|
|
26
|
+
hard-judgment: claude claude-opus-5 xhigh | codex gpt-5.6-sol max # ordered on agentic knowledge work, where Opus 5 leads Sol on AA's benchmarks. xhigh per Anthropic guidance (high is the documented floor for intelligence-sensitive work; max is for correctness-over-cost only) — raise to max locally via `omnilane configure set` if your workload needs it.
|
|
24
27
|
taste-final: claude claude-opus-5 high | codex gpt-5.6-sol max # user-facing prose, prompt/doc polish, Chinese phrasing, style arbitration
|
|
25
28
|
consult: codex gpt-5.6-sol max | claude claude-opus-5 high | grok grok-4.5 - | gemini "Gemini 3.1 Pro (High)" - # direct named-model consultation; use --vendor to prevent fallback
|
|
26
29
|
ui-draft: codex gpt-5.6-sol xhigh | claude claude-opus-5 high # only with a design system / reference images; open-ended visual taste -> taste-final
|
|
27
30
|
long-context: gemini "Gemini 3.1 Pro (High)" - | claude claude-opus-5 high | codex gpt-5.6-sol high # all have 1M context; Gemini leads single-needle retrieval at full length and is the cheapest way to sweep volume, Flash for fast loops. For multi-hop synthesis across a large corpus prefer the claude candidate: published multi-needle scores at 1M favour Claude by a wide margin (see docs/model-capabilities-2026-07.md)
|
|
28
|
-
fast-agentic: gemini "Gemini 3.6 Flash (High)" -
|
|
31
|
+
fast-agentic: codex gpt-5.6-luna max | gemini "Gemini 3.6 Flash (High)" - # fast multi-step tool loops. Reordered 2026-08-03: Luna leads Flash on agentic benchmarks AND costs a fraction as much per task, so Flash's remaining edge is raw throughput alone. Keep Flash first only if your loops are latency-bound. Both take image input, so the lane's multimodal checks are unaffected
|
|
29
32
|
live-search: grok grok-4.5 - | off # native X/web search lane; no real substitute
|
|
30
|
-
coding-overflow: grok grok-4.5 - | kimi kimi-k3 - | qwen qwen3-coder-plus - | opencode - - | off # codex-quota relief valve: mid-tier coding; Grok 4.5
|
|
33
|
+
coding-overflow: grok grok-4.5 - | kimi kimi-k3 - | qwen qwen3-coder-plus - | opencode - - | off # codex-quota relief valve: mid-tier coding; Grok 4.5 is a capable mid-tier coder but AA measures a high hallucination rate — verify every factual claim it ships. qwen3-coder-plus = 2025-09-23 snapshot alias (Qwen 3.6 Plus exists; re-evaluate before swapping). kimi/qwen model fields are CLI aliases — adjust to your login. opencode "-" model = its own configured default.
|
|
31
34
|
arbitrate: off - - # opinion panel is OPT-IN: it costs one call per voter per round.
|
|
32
35
|
# Enable: `arbitrate: vote codex,claude,grok -` (any 1-4 of codex/claude/grok/gemini)
|
|
33
36
|
# Debate round (each voter rebuts the others): set the effort field to 2.
|
|
34
37
|
# Custom gate: `arbitrate: exec /path/to/script -`
|
|
35
38
|
# Claude Fable 5 (claude-fable-5) is deliberately absent from the defaults: the top Claude tier
|
|
36
|
-
# is usually the MAIN LOOP itself, not a dispatched worker, and it prices at twice Opus 5
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
# breadth (AA-Omniscience), so name it explicitly for recall-heavy consults. If you want
|
|
39
|
+
# is usually the MAIN LOOP itself, not a dispatched worker, and it prices at twice Opus 5.
|
|
40
|
+
# This is a cost / guardrail / main-loop policy choice, NOT a capability verdict — AA and
|
|
41
|
+
# Epoch AI disagree on which of the two leads general intelligence and call it effectively a
|
|
42
|
+
# tie, while Opus 5 leads clearly on agentic knowledge work at a lower cost per task. Fable 5
|
|
43
|
+
# does keep the lead on factual breadth, so name it explicitly for recall-heavy consults. If you want
|
|
42
44
|
# to route to it anyway, pick it in the configurator or set e.g.
|
|
43
45
|
# taste-final: claude claude-fable-5 high
|
|
44
46
|
# in ~/.omnilane/routing.local.yaml.
|
package/scripts/dispatch.sh
CHANGED
|
@@ -3,7 +3,7 @@ set -euo pipefail
|
|
|
3
3
|
# omnilane dispatch — one routing table, any harness.
|
|
4
4
|
#
|
|
5
5
|
# Usage:
|
|
6
|
-
# dispatch.sh [--background] [--dry-run] [--mode advise|work] [--workdir DIR]
|
|
6
|
+
# dispatch.sh [--background] [--dry-run] [--mode advise|work|sysops] [--workdir DIR]
|
|
7
7
|
# [--vendor V] [--model M] [--effort E] [--timeout SECONDS]
|
|
8
8
|
# [--job-timeout SECONDS] LANE "TASK TEXT"
|
|
9
9
|
# dispatch.sh [--json] --list [--json]
|
|
@@ -50,7 +50,11 @@ flags:
|
|
|
50
50
|
--background run in the background and print the JOB_ID
|
|
51
51
|
--dry-run print the fully resolved dispatch plan and stop
|
|
52
52
|
before any provider call or job state
|
|
53
|
-
--mode advise|work
|
|
53
|
+
--mode advise|work|sysops
|
|
54
|
+
advise (read-only, default), work (may edit files),
|
|
55
|
+
or sysops (work without the vendor sandbox, for
|
|
56
|
+
service operations like launchctl — codex only;
|
|
57
|
+
other vendors treat it as work)
|
|
54
58
|
--workdir DIR working directory handed to the vendor CLI
|
|
55
59
|
--vendor V pin one configured vendor (codex|claude|grok|gemini|kimi|qwen|opencode|openrouter|deepseek|zai|mistral|groq|cerebras)
|
|
56
60
|
--model M override the routed model
|
|
@@ -124,7 +128,7 @@ print_dry_run_plan() {
|
|
|
124
128
|
local background=no task_source=argument write_worktree=no job_timeout=disabled
|
|
125
129
|
[[ "$BACKGROUND" -eq 1 ]] && background=yes
|
|
126
130
|
[[ "$TASK" == "-" ]] && task_source=stdin
|
|
127
|
-
[[ "$MODE" == "work" ]] && write_worktree=yes
|
|
131
|
+
[[ "$MODE" == "work" || "$MODE" == "sysops" ]] && write_worktree=yes
|
|
128
132
|
[[ -n "$JOB_TIMEOUT" ]] && job_timeout="$JOB_TIMEOUT"
|
|
129
133
|
printf 'dry_run=yes\n'
|
|
130
134
|
print_dry_run_value lane "$LANE"
|
|
@@ -487,7 +491,7 @@ LANE="$1"
|
|
|
487
491
|
TASK="$2"
|
|
488
492
|
[[ "$LANE" =~ ^[a-z][a-z0-9-]*$ ]] || { echo "omnilane: invalid lane name" >&2; exit 2; }
|
|
489
493
|
# A typo like --mode advice must not fall through to the write-enabled branch.
|
|
490
|
-
[[ "$MODE" == "advise" || "$MODE" == "work" ]] || { echo "omnilane: invalid --mode (advise|work)" >&2; exit 2; }
|
|
494
|
+
[[ "$MODE" == "advise" || "$MODE" == "work" || "$MODE" == "sysops" ]] || { echo "omnilane: invalid --mode (advise|work|sysops)" >&2; exit 2; }
|
|
491
495
|
if [[ -n "$OVERRIDE_VENDOR" ]] &&
|
|
492
496
|
! [[ "$OVERRIDE_VENDOR" =~ ^(${OMNILANE_OVERRIDE_VENDOR_ALT})$ ]]; then
|
|
493
497
|
echo "omnilane: invalid vendor (${OMNILANE_OVERRIDE_VENDOR_ALT})" >&2
|
|
@@ -567,7 +571,7 @@ fi
|
|
|
567
571
|
[[ -n "$JOB_TIMEOUT" ]] || JOB_TIMEOUT="${OMNILANE_JOB_TIMEOUT:-}"
|
|
568
572
|
CODEX_NONGIT_WORK=0
|
|
569
573
|
CODEX_NONGIT_AUTO_JOB_TIMEOUT=0
|
|
570
|
-
if [[ "$VENDOR" == "codex" && "$MODE" == "work" ]]; then
|
|
574
|
+
if [[ "$VENDOR" == "codex" && ( "$MODE" == "work" || "$MODE" == "sysops" ) ]]; then
|
|
571
575
|
# The target directory is authoritative. Caller-supplied GIT_* state must not
|
|
572
576
|
# redirect or corrupt discovery, so probe with a minimal clean environment.
|
|
573
577
|
GIT_WORKTREE_STATE="$(env -i PATH="$PATH" HOME="${HOME:-}" \
|
|
@@ -3,6 +3,9 @@ set -euo pipefail
|
|
|
3
3
|
# omnilane runner: OpenAI Codex CLI
|
|
4
4
|
# Usage: run-codex.sh MODE WORKDIR MODEL EFFORT PROMPT_FILE OUTPUT_FILE
|
|
5
5
|
# MODE = advise (read-only, ephemeral) | work (may edit files in WORKDIR)
|
|
6
|
+
# | sysops (work minus the Seatbelt sandbox: service operations like
|
|
7
|
+
# launchctl are denied under workspace-write, so sysops runs with
|
|
8
|
+
# -s danger-full-access; explicit per-dispatch opt-in only)
|
|
6
9
|
|
|
7
10
|
source "$(dirname "${BASH_SOURCE[0]}")/../lib/common.sh"
|
|
8
11
|
|
|
@@ -17,6 +20,8 @@ ARGS=(exec -m "$MODEL" -o "${OUTPUT_FILE}.tmp" --skip-git-repo-check)
|
|
|
17
20
|
[[ -n "$EFFORT" && "$EFFORT" != "-" ]] && ARGS+=(-c "model_reasoning_effort=\"$EFFORT\"")
|
|
18
21
|
if [[ "$MODE" == "advise" ]]; then
|
|
19
22
|
ARGS+=(--ephemeral -s read-only)
|
|
23
|
+
elif [[ "$MODE" == "sysops" ]]; then
|
|
24
|
+
ARGS+=(-s danger-full-access)
|
|
20
25
|
else
|
|
21
26
|
ARGS+=(-s workspace-write)
|
|
22
27
|
fi
|