agent-bios 0.9.1 → 0.9.3
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/claude/guides/claude-prompting.md +30 -12
- package/claude/guides/cli-multi-model-workflow.md +3 -3
- package/codex/guides/claude-prompting.md +30 -12
- package/codex/guides/cli-multi-model-workflow.md +3 -3
- package/config/agent-launch.toml +2 -2
- package/package.json +2 -1
- package/scripts/agent-launch.py +26 -0
- package/scripts/check-parity.sh +27 -2
- package/scripts/install.sh +18 -0
- package/scripts/session-cost.py +1 -0
|
@@ -17,7 +17,7 @@ core_rules:
|
|
|
17
17
|
- name the boundary explicitly — what to do without asking, and what to stop and ask about
|
|
18
18
|
targets:
|
|
19
19
|
- claude-fable-5
|
|
20
|
-
- claude-opus-
|
|
20
|
+
- claude-opus-5
|
|
21
21
|
- claude-sonnet-5
|
|
22
22
|
- claude-haiku-4-5
|
|
23
23
|
verification_focus:
|
|
@@ -55,15 +55,21 @@ pick the path.
|
|
|
55
55
|
## When to add blocks
|
|
56
56
|
|
|
57
57
|
- Long-horizon or autonomous work: give the full spec up front in one
|
|
58
|
-
well-specified turn and run at a high effort.
|
|
59
|
-
cadence
|
|
58
|
+
well-specified turn and run at a high effort. Do **not** add a self-check
|
|
59
|
+
cadence or a dedicated verifier subagent: the helm binding verifies its own
|
|
60
|
+
work unasked, so an instruction to verify buys over-verification instead.
|
|
61
|
+
Deleting inherited verification scaffolding costs no capability — this inverts
|
|
62
|
+
the usual self-check advice, so carve this tier out of a prompt library that
|
|
63
|
+
applies that advice uniformly.
|
|
60
64
|
- Review: state the evidence bar and the verdict shape. This tier follows
|
|
61
65
|
severity filters literally, so "only report high-severity" depresses measured
|
|
62
66
|
recall even as bug-finding improves — ask for every finding with confidence
|
|
63
67
|
and severity attached, and filter downstream.
|
|
64
|
-
- Delegation: say when to delegate
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
- Delegation: say when *not* to delegate, and cap the spawn count. The helm
|
|
69
|
+
binding reaches for subagents readily — the reverse of the binding it replaced
|
|
70
|
+
— and every spawn rebuilds context, reports back, and is then re-read, so
|
|
71
|
+
unbounded delegation multiplies cost and latency. File-based memory and custom
|
|
72
|
+
tools are the opposite case: they still need an explicit when-to-use trigger.
|
|
67
73
|
- Autonomous runs with no human watching: say so. Otherwise it asks permission
|
|
68
74
|
it does not need and blocks. Grant autonomy on minor choices (naming,
|
|
69
75
|
defaults, equivalent approaches) while keeping the ask for scope changes and
|
|
@@ -80,13 +86,17 @@ pick the path.
|
|
|
80
86
|
per subtask, and the orchestrator is not pinned to the slowest one.
|
|
81
87
|
- Effort ladder — `low`, `medium`, `high`, `xhigh`, `max` on the frontier, helm,
|
|
82
88
|
and workhorse bindings; `xhigh` is the best setting for most coding and
|
|
83
|
-
agentic work, `high` a sound default, `low` for cheap subagent scans.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
agentic work, `high` a sound default, `low` for cheap subagent scans. Start
|
|
90
|
+
there and sweep *down* on a real eval set rather than reaching for the top: the
|
|
91
|
+
lower rungs are unusually strong on the helm binding, higher effort up front
|
|
92
|
+
often *reduces* turn count and total cost on agentic work, and some tasks land
|
|
93
|
+
equally well a level down. Effort does not control response length — see
|
|
94
|
+
Working rules.
|
|
87
95
|
- Per-model constraints differ across the `targets` bindings — thinking
|
|
88
96
|
configuration, sampling parameters, and effort support are not uniform, and
|
|
89
|
-
the sweep binding is the most restricted.
|
|
97
|
+
the sweep binding is the most restricted. On the helm binding, for instance,
|
|
98
|
+
thinking is on by default and turning it off is accepted only at `high` effort
|
|
99
|
+
or below. Confirm the constraint against the
|
|
90
100
|
live surface before relying on it in a dispatch; do not assume the frontier
|
|
91
101
|
binding's rules apply to the sweep one.
|
|
92
102
|
|
|
@@ -98,6 +108,13 @@ pick the path.
|
|
|
98
108
|
- Do not add "summarize every N tool calls" scaffolding — this tier narrates on
|
|
99
109
|
its own. If it narrates too much for a coding agent, set a silence default
|
|
100
110
|
instead: text only on a finding, a direction change, or a blocker.
|
|
111
|
+
- Length is a prompting lever, not an effort lever. This tier writes longer
|
|
112
|
+
answers and longer files than its predecessors, and lowering `effort` does not
|
|
113
|
+
reliably shorten visible output — only an explicit instruction does. Calibrate
|
|
114
|
+
the deliverable's length separately from the conversation's.
|
|
115
|
+
- Scope self-correction. Left alone this tier narrates its own earlier mistakes
|
|
116
|
+
at length, which reads as thrash. Ask it to correct only what would change the
|
|
117
|
+
reader's decisions, say it plainly, and carry on.
|
|
101
118
|
- Give it somewhere to write learnings, tell it to consult that place later, and
|
|
102
119
|
give the file a format. It performs notably better with a memory surface.
|
|
103
120
|
- Keep the deliverable readable: the final message is the reader's first look at
|
|
@@ -111,7 +128,8 @@ pick the path.
|
|
|
111
128
|
2. Name the boundaries — what to do freely, what to stop and ask about.
|
|
112
129
|
3. Give each tool a when-to-call description.
|
|
113
130
|
4. Say how progress claims must be grounded, and how the deliverable should read.
|
|
114
|
-
5. Delete the step-by-step scaffolding inherited from older models
|
|
131
|
+
5. Delete the step-by-step scaffolding inherited from older models — including
|
|
132
|
+
any verify-your-work step and any encouragement to delegate — then A/B the
|
|
115
133
|
prompt with it removed before keeping either version.
|
|
116
134
|
|
|
117
135
|
## Sources
|
|
@@ -156,12 +156,12 @@ Write for the next agent and re-verification, not narrative. Required content:
|
|
|
156
156
|
|
|
157
157
|
This is the human-readable projection of concrete models/tools; `config/agent-launch.toml` is the machine launch authority and parity checks keep them aligned. Re-probe when the binding is older than ~8 weeks or a newer observable model/tool changes the surface. `agent-bios install` overwrites deployed bindings, so edit the repo copy.
|
|
158
158
|
|
|
159
|
-
Binding (2026-07-
|
|
159
|
+
Binding (2026-07-25):
|
|
160
160
|
|
|
161
161
|
| Slot | Binding | Notes |
|
|
162
162
|
|---|---|---|
|
|
163
163
|
| FRONTIER | Claude Fable 5 · GPT-5.6 Sol (read-only; max default, task-fit effort including Ultra) | bounded hardest decisions and verdicts |
|
|
164
|
-
| HELM | Claude Opus
|
|
164
|
+
| HELM | Claude Opus 5 (xhigh) · GPT-5.6 Sol (xhigh main; main Ultra requires explicit selection; bounded FRONTIER Ultra allowed) | standing main; Codex defaults bypass, explicit sandbox narrows |
|
|
165
165
|
| WORKHORSE | Claude Sonnet 5 · GPT-5.6 Terra (high) | implementation and per-item judgment |
|
|
166
166
|
| SWEEP | Claude Haiku 4.5 · GPT-5.6 Luna (low) | clear repeatable scans and mechanical work |
|
|
167
167
|
| VERIFIER-A | onto-mcp review | logic/authority kind; tier units per funnel |
|
|
@@ -186,7 +186,7 @@ Dispatch packets:
|
|
|
186
186
|
| GPT-5.6 Sol FRONTIER | outcome, evidence, decision boundary, stop/verification; task-fit effort; read-only |
|
|
187
187
|
| GPT-5.6 Terra WORKHORSE | outcome, frozen scope/inputs, authority, done-when, evidence/report, escalation; high |
|
|
188
188
|
| GPT-5.6 Luna SWEEP | exact search space, rules, ambiguity behavior, stop, output; low; no architecture/debugging |
|
|
189
|
-
| Claude Opus
|
|
189
|
+
| Claude Opus 5 HELM | xhigh for agentic work; high minimum for sensitive judgment; lower only when bounded/cost-led |
|
|
190
190
|
| Claude Sonnet 5 WORKHORSE | exact scope, apply-to-all rules, tools, verification, report; high default |
|
|
191
191
|
| Claude Haiku 4.5 SWEEP | closed, high-volume, latency-sensitive work with exact schema/examples |
|
|
192
192
|
|
|
@@ -17,7 +17,7 @@ core_rules:
|
|
|
17
17
|
- name the boundary explicitly — what to do without asking, and what to stop and ask about
|
|
18
18
|
targets:
|
|
19
19
|
- claude-fable-5
|
|
20
|
-
- claude-opus-
|
|
20
|
+
- claude-opus-5
|
|
21
21
|
- claude-sonnet-5
|
|
22
22
|
- claude-haiku-4-5
|
|
23
23
|
verification_focus:
|
|
@@ -55,15 +55,21 @@ pick the path.
|
|
|
55
55
|
## When to add blocks
|
|
56
56
|
|
|
57
57
|
- Long-horizon or autonomous work: give the full spec up front in one
|
|
58
|
-
well-specified turn and run at a high effort.
|
|
59
|
-
cadence
|
|
58
|
+
well-specified turn and run at a high effort. Do **not** add a self-check
|
|
59
|
+
cadence or a dedicated verifier subagent: the helm binding verifies its own
|
|
60
|
+
work unasked, so an instruction to verify buys over-verification instead.
|
|
61
|
+
Deleting inherited verification scaffolding costs no capability — this inverts
|
|
62
|
+
the usual self-check advice, so carve this tier out of a prompt library that
|
|
63
|
+
applies that advice uniformly.
|
|
60
64
|
- Review: state the evidence bar and the verdict shape. This tier follows
|
|
61
65
|
severity filters literally, so "only report high-severity" depresses measured
|
|
62
66
|
recall even as bug-finding improves — ask for every finding with confidence
|
|
63
67
|
and severity attached, and filter downstream.
|
|
64
|
-
- Delegation: say when to delegate
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
- Delegation: say when *not* to delegate, and cap the spawn count. The helm
|
|
69
|
+
binding reaches for subagents readily — the reverse of the binding it replaced
|
|
70
|
+
— and every spawn rebuilds context, reports back, and is then re-read, so
|
|
71
|
+
unbounded delegation multiplies cost and latency. File-based memory and custom
|
|
72
|
+
tools are the opposite case: they still need an explicit when-to-use trigger.
|
|
67
73
|
- Autonomous runs with no human watching: say so. Otherwise it asks permission
|
|
68
74
|
it does not need and blocks. Grant autonomy on minor choices (naming,
|
|
69
75
|
defaults, equivalent approaches) while keeping the ask for scope changes and
|
|
@@ -80,13 +86,17 @@ pick the path.
|
|
|
80
86
|
per subtask, and the orchestrator is not pinned to the slowest one.
|
|
81
87
|
- Effort ladder — `low`, `medium`, `high`, `xhigh`, `max` on the frontier, helm,
|
|
82
88
|
and workhorse bindings; `xhigh` is the best setting for most coding and
|
|
83
|
-
agentic work, `high` a sound default, `low` for cheap subagent scans.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
agentic work, `high` a sound default, `low` for cheap subagent scans. Start
|
|
90
|
+
there and sweep *down* on a real eval set rather than reaching for the top: the
|
|
91
|
+
lower rungs are unusually strong on the helm binding, higher effort up front
|
|
92
|
+
often *reduces* turn count and total cost on agentic work, and some tasks land
|
|
93
|
+
equally well a level down. Effort does not control response length — see
|
|
94
|
+
Working rules.
|
|
87
95
|
- Per-model constraints differ across the `targets` bindings — thinking
|
|
88
96
|
configuration, sampling parameters, and effort support are not uniform, and
|
|
89
|
-
the sweep binding is the most restricted.
|
|
97
|
+
the sweep binding is the most restricted. On the helm binding, for instance,
|
|
98
|
+
thinking is on by default and turning it off is accepted only at `high` effort
|
|
99
|
+
or below. Confirm the constraint against the
|
|
90
100
|
live surface before relying on it in a dispatch; do not assume the frontier
|
|
91
101
|
binding's rules apply to the sweep one.
|
|
92
102
|
|
|
@@ -98,6 +108,13 @@ pick the path.
|
|
|
98
108
|
- Do not add "summarize every N tool calls" scaffolding — this tier narrates on
|
|
99
109
|
its own. If it narrates too much for a coding agent, set a silence default
|
|
100
110
|
instead: text only on a finding, a direction change, or a blocker.
|
|
111
|
+
- Length is a prompting lever, not an effort lever. This tier writes longer
|
|
112
|
+
answers and longer files than its predecessors, and lowering `effort` does not
|
|
113
|
+
reliably shorten visible output — only an explicit instruction does. Calibrate
|
|
114
|
+
the deliverable's length separately from the conversation's.
|
|
115
|
+
- Scope self-correction. Left alone this tier narrates its own earlier mistakes
|
|
116
|
+
at length, which reads as thrash. Ask it to correct only what would change the
|
|
117
|
+
reader's decisions, say it plainly, and carry on.
|
|
101
118
|
- Give it somewhere to write learnings, tell it to consult that place later, and
|
|
102
119
|
give the file a format. It performs notably better with a memory surface.
|
|
103
120
|
- Keep the deliverable readable: the final message is the reader's first look at
|
|
@@ -111,7 +128,8 @@ pick the path.
|
|
|
111
128
|
2. Name the boundaries — what to do freely, what to stop and ask about.
|
|
112
129
|
3. Give each tool a when-to-call description.
|
|
113
130
|
4. Say how progress claims must be grounded, and how the deliverable should read.
|
|
114
|
-
5. Delete the step-by-step scaffolding inherited from older models
|
|
131
|
+
5. Delete the step-by-step scaffolding inherited from older models — including
|
|
132
|
+
any verify-your-work step and any encouragement to delegate — then A/B the
|
|
115
133
|
prompt with it removed before keeping either version.
|
|
116
134
|
|
|
117
135
|
## Sources
|
|
@@ -156,12 +156,12 @@ Write for the next agent and re-verification, not narrative. Required content:
|
|
|
156
156
|
|
|
157
157
|
This is the human-readable projection of concrete models/tools; `config/agent-launch.toml` is the machine launch authority and parity checks keep them aligned. Re-probe when the binding is older than ~8 weeks or a newer observable model/tool changes the surface. `agent-bios install` overwrites deployed bindings, so edit the repo copy.
|
|
158
158
|
|
|
159
|
-
Binding (2026-07-
|
|
159
|
+
Binding (2026-07-25):
|
|
160
160
|
|
|
161
161
|
| Slot | Binding | Notes |
|
|
162
162
|
|---|---|---|
|
|
163
163
|
| FRONTIER | Claude Fable 5 · GPT-5.6 Sol (read-only; max default, task-fit effort including Ultra) | bounded hardest decisions and verdicts |
|
|
164
|
-
| HELM | Claude Opus
|
|
164
|
+
| HELM | Claude Opus 5 (xhigh) · GPT-5.6 Sol (xhigh main; main Ultra requires explicit selection; bounded FRONTIER Ultra allowed) | standing main; Codex defaults bypass, explicit sandbox narrows |
|
|
165
165
|
| WORKHORSE | Claude Sonnet 5 · GPT-5.6 Terra (high) | implementation and per-item judgment |
|
|
166
166
|
| SWEEP | Claude Haiku 4.5 · GPT-5.6 Luna (low) | clear repeatable scans and mechanical work |
|
|
167
167
|
| VERIFIER-A | onto-mcp review | logic/authority kind; tier units per funnel |
|
|
@@ -186,7 +186,7 @@ Dispatch packets:
|
|
|
186
186
|
| GPT-5.6 Sol FRONTIER | outcome, evidence, decision boundary, stop/verification; task-fit effort; read-only |
|
|
187
187
|
| GPT-5.6 Terra WORKHORSE | outcome, frozen scope/inputs, authority, done-when, evidence/report, escalation; high |
|
|
188
188
|
| GPT-5.6 Luna SWEEP | exact search space, rules, ambiguity behavior, stop, output; low; no architecture/debugging |
|
|
189
|
-
| Claude Opus
|
|
189
|
+
| Claude Opus 5 HELM | xhigh for agentic work; high minimum for sensitive judgment; lower only when bounded/cost-led |
|
|
190
190
|
| Claude Sonnet 5 WORKHORSE | exact scope, apply-to-all rules, tools, verification, report; high default |
|
|
191
191
|
| Claude Haiku 4.5 SWEEP | closed, high-volume, latency-sensitive work with exact schema/examples |
|
|
192
192
|
|
package/config/agent-launch.toml
CHANGED
|
@@ -48,7 +48,7 @@ workhorse = "${CODEX_HOME}/agents/workhorse.toml"
|
|
|
48
48
|
sweep = "${CODEX_HOME}/agents/sweep.toml"
|
|
49
49
|
|
|
50
50
|
[hosts.claude]
|
|
51
|
-
models = ["claude-fable-5", "claude-opus-
|
|
51
|
+
models = ["claude-fable-5", "claude-opus-5", "claude-sonnet-5", "claude-haiku-4-5"]
|
|
52
52
|
# onto review seat used when a CROSS-family main (Codex) routes onto review to
|
|
53
53
|
# this (anthropic/claude) family; must be an onto review-role registered (provider, model).
|
|
54
54
|
onto_review = { provider = "anthropic", model = "claude-fable-5" }
|
|
@@ -58,7 +58,7 @@ model = "claude-fable-5"
|
|
|
58
58
|
effort = "max"
|
|
59
59
|
|
|
60
60
|
[hosts.claude.tiers.helm]
|
|
61
|
-
model = "claude-opus-
|
|
61
|
+
model = "claude-opus-5"
|
|
62
62
|
effort = "xhigh"
|
|
63
63
|
|
|
64
64
|
[hosts.claude.tiers.workhorse]
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-bios",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
|
+
"releaseDate": "2026-07-25",
|
|
4
5
|
"description": "A thin, low-level instruction layer for LLM CLI agents: one set of principles and behavior whichever model you run. Deploys into $HOME by copy via an explicit `agent-bios install`.",
|
|
5
6
|
"bin": {
|
|
6
7
|
"agent-bios": "scripts/install.sh"
|
package/scripts/agent-launch.py
CHANGED
|
@@ -609,6 +609,9 @@ def _build_app_class():
|
|
|
609
609
|
def setup_panel(plan):
|
|
610
610
|
panel = Static("\n".join(setup_summary_lines(plan)), id="al-setup")
|
|
611
611
|
panel.border_title = "Current setup"
|
|
612
|
+
release = version_label()
|
|
613
|
+
if release:
|
|
614
|
+
panel.border_subtitle = release
|
|
612
615
|
return panel
|
|
613
616
|
|
|
614
617
|
class MenuScreen(ModalScreen):
|
|
@@ -1460,6 +1463,13 @@ CORPUS_STATUS_PATH = pathlib.Path(
|
|
|
1460
1463
|
)
|
|
1461
1464
|
)
|
|
1462
1465
|
|
|
1466
|
+
VERSION_INFO_PATH = pathlib.Path(
|
|
1467
|
+
os.environ.get(
|
|
1468
|
+
"AGENT_LAUNCH_VERSION_FILE",
|
|
1469
|
+
str(pathlib.Path.home() / ".local/share/agent-bios/version.json"),
|
|
1470
|
+
)
|
|
1471
|
+
)
|
|
1472
|
+
|
|
1463
1473
|
|
|
1464
1474
|
def load_corpus_status() -> dict[str, Any] | None:
|
|
1465
1475
|
try:
|
|
@@ -1468,6 +1478,22 @@ def load_corpus_status() -> dict[str, Any] | None:
|
|
|
1468
1478
|
return None
|
|
1469
1479
|
|
|
1470
1480
|
|
|
1481
|
+
def version_label() -> str | None:
|
|
1482
|
+
"""The deployed agent-bios version + release date for the TUI, or None when
|
|
1483
|
+
the marker is absent (uninstalled / dev checkout). `agent-bios install`
|
|
1484
|
+
writes it from package.json (version + releaseDate). This is the deploy /
|
|
1485
|
+
system version — distinct from the corpus content version in the distill hub."""
|
|
1486
|
+
try:
|
|
1487
|
+
info = json.loads(VERSION_INFO_PATH.read_text())
|
|
1488
|
+
except (OSError, ValueError):
|
|
1489
|
+
return None
|
|
1490
|
+
version = info.get("version") if isinstance(info, dict) else None
|
|
1491
|
+
if not version:
|
|
1492
|
+
return None
|
|
1493
|
+
released = info.get("releaseDate")
|
|
1494
|
+
return f"agent-bios v{version} · {released}" if released else f"agent-bios v{version}"
|
|
1495
|
+
|
|
1496
|
+
|
|
1471
1497
|
def corpus_summary_lines(status: dict[str, Any] | None) -> list[str]:
|
|
1472
1498
|
"""Panel body for the Session Distill area: which corpus content is
|
|
1473
1499
|
live, through which mechanisms, and whether the corpus is rolled back."""
|
package/scripts/check-parity.sh
CHANGED
|
@@ -273,7 +273,7 @@ for tier, (model, effort) in expected_launch_tiers.items():
|
|
|
273
273
|
|
|
274
274
|
expected_claude_tiers = {
|
|
275
275
|
"frontier": ("claude-fable-5", "max"),
|
|
276
|
-
"helm": ("claude-opus-
|
|
276
|
+
"helm": ("claude-opus-5", "xhigh"),
|
|
277
277
|
"workhorse": ("claude-sonnet-5", "high"),
|
|
278
278
|
"sweep": ("claude-haiku-4-5", "low"),
|
|
279
279
|
}
|
|
@@ -409,7 +409,7 @@ for guide_name in [
|
|
|
409
409
|
mark_fail(f"{guide} SWEEP must bind exact GPT-5.6 Luna")
|
|
410
410
|
for slot, claude_model in (
|
|
411
411
|
("FRONTIER", "Claude Fable 5"),
|
|
412
|
-
("HELM", "Claude Opus
|
|
412
|
+
("HELM", "Claude Opus 5"),
|
|
413
413
|
("WORKHORSE", "Claude Sonnet 5"),
|
|
414
414
|
("SWEEP", "Claude Haiku 4.5"),
|
|
415
415
|
):
|
|
@@ -764,6 +764,26 @@ if launcher.is_file() and launch_profile:
|
|
|
764
764
|
"project an applied setup (customization must not be silently discarded)"
|
|
765
765
|
)
|
|
766
766
|
|
|
767
|
+
# Version line: version_label reads the deployed version marker
|
|
768
|
+
# ($STATE_DIR/version.json) that install writes from package.json. A
|
|
769
|
+
# present marker yields "agent-bios v<version> · <releaseDate>"; an absent
|
|
770
|
+
# one yields None (uninstalled / dev checkout, so the panel shows no line).
|
|
771
|
+
saved_version_path = launcher_module.VERSION_INFO_PATH
|
|
772
|
+
try:
|
|
773
|
+
version_marker = pathlib.Path(tempfile.mkdtemp()) / "version.json"
|
|
774
|
+
version_marker.write_text('{"version": "9.9.9", "releaseDate": "2026-01-02"}')
|
|
775
|
+
launcher_module.VERSION_INFO_PATH = version_marker
|
|
776
|
+
if launcher_module.version_label() != "agent-bios v9.9.9 · 2026-01-02":
|
|
777
|
+
mark_fail(
|
|
778
|
+
"agent-launch version_label wrong with a marker present: "
|
|
779
|
+
f"{launcher_module.version_label()!r}"
|
|
780
|
+
)
|
|
781
|
+
launcher_module.VERSION_INFO_PATH = version_marker.parent / "absent.json"
|
|
782
|
+
if launcher_module.version_label() is not None:
|
|
783
|
+
mark_fail("agent-launch version_label must be None when the marker is absent")
|
|
784
|
+
finally:
|
|
785
|
+
launcher_module.VERSION_INFO_PATH = saved_version_path
|
|
786
|
+
|
|
767
787
|
with tempfile.TemporaryDirectory() as raw_tmp:
|
|
768
788
|
tmp = pathlib.Path(raw_tmp)
|
|
769
789
|
backend = tmp / "backend"
|
|
@@ -806,10 +826,13 @@ if launcher.is_file() and launch_profile:
|
|
|
806
826
|
mark_fail(f"fake launch profile did not replace every backend: {fake_commands!r}")
|
|
807
827
|
fake_profile = pathlib.Path("/nonexistent/unsafe-fixture")
|
|
808
828
|
env = os.environ.copy()
|
|
829
|
+
version_fixture = tmp / "version.json"
|
|
830
|
+
version_fixture.write_text('{"version": "9.9.9", "releaseDate": "2026-01-02"}')
|
|
809
831
|
env.update(
|
|
810
832
|
FAKE_LAUNCH_ARGV=str(argv_log),
|
|
811
833
|
AGENT_LAUNCH_CONFIG=str(fake_profile),
|
|
812
834
|
XDG_CACHE_HOME=str(tmp / "cache"),
|
|
835
|
+
AGENT_LAUNCH_VERSION_FILE=str(version_fixture),
|
|
813
836
|
)
|
|
814
837
|
|
|
815
838
|
pty_env = env.copy()
|
|
@@ -974,6 +997,8 @@ if launcher.is_file() and launch_profile:
|
|
|
974
997
|
< positions[b"Options ("]
|
|
975
998
|
):
|
|
976
999
|
mark_fail("agent-launch layout is not setup then description then options")
|
|
1000
|
+
if b"agent-bios v9.9.9" not in transcript:
|
|
1001
|
+
mark_fail("agent-launch does not show the deployed version line in the setup panel")
|
|
977
1002
|
|
|
978
1003
|
_, picker_status = run_picker_scenario(
|
|
979
1004
|
"root escape cancellation",
|
package/scripts/install.sh
CHANGED
|
@@ -476,6 +476,24 @@ cmd_install() {
|
|
|
476
476
|
else
|
|
477
477
|
log "note: corpus-status projection unavailable (versions.json/ledger missing?)"
|
|
478
478
|
fi
|
|
479
|
+
# Deploy/system version marker for the launcher's TUI version line, read from
|
|
480
|
+
# package.json (version + releaseDate) — distinct from the corpus content
|
|
481
|
+
# version. Best-effort: a failure here never fails the install.
|
|
482
|
+
if [ "$DRY_RUN" != 1 ]; then
|
|
483
|
+
if python3 - "$REPO/package.json" "$STATE_DIR/version.json" <<'PY' 2>/dev/null
|
|
484
|
+
import json, sys
|
|
485
|
+
pkg = json.load(open(sys.argv[1]))
|
|
486
|
+
with open(sys.argv[2], "w") as f:
|
|
487
|
+
json.dump({"version": pkg.get("version"), "releaseDate": pkg.get("releaseDate")}, f)
|
|
488
|
+
f.write("\n")
|
|
489
|
+
PY
|
|
490
|
+
then
|
|
491
|
+
printf '%s\n' "$STATE_DIR/version.json" >> "$MANIFEST"
|
|
492
|
+
info "version marker written ($STATE_DIR/version.json)"
|
|
493
|
+
else
|
|
494
|
+
log "note: version marker not written (package.json unreadable)"
|
|
495
|
+
fi
|
|
496
|
+
fi
|
|
479
497
|
log ""
|
|
480
498
|
log "Verifying deployment..."
|
|
481
499
|
if cmd_verify; then
|
package/scripts/session-cost.py
CHANGED
|
@@ -12,6 +12,7 @@ from datetime import datetime
|
|
|
12
12
|
PRICES = {
|
|
13
13
|
"claude-fable-5": (10.0, 50.0, 1.00, 12.50, 20.0),
|
|
14
14
|
"claude-mythos-5": (10.0, 50.0, 1.00, 12.50, 20.0),
|
|
15
|
+
"claude-opus-5": (5.0, 25.0, 0.50, 6.25, 10.0),
|
|
15
16
|
"claude-opus-4-8": (5.0, 25.0, 0.50, 6.25, 10.0),
|
|
16
17
|
"claude-opus-4-7": (5.0, 25.0, 0.50, 6.25, 10.0),
|
|
17
18
|
"claude-opus-4-6": (5.0, 25.0, 0.50, 6.25, 10.0),
|