axstack 0.49.0 → 0.50.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/README.md +5 -7
- package/docs/concepts.md +11 -51
- package/docs/host-operations.md +24 -99
- package/docs/installation.md +27 -52
- package/docs/workflows.md +48 -35
- package/package.json +1 -1
- package/profiles/presets/claude-only.json +0 -37
- package/profiles/presets/codex-only.json +0 -36
- package/profiles/presets/mixed.json +4 -41
- package/skills/axstack/references/automations.md +28 -2
- package/skills/axstack/references/autopilot.md +7 -5
- package/skills/axstack/references/candidate-publication.md +1 -0
- package/skills/axstack/references/contracts.md +56 -7
- package/skills/axstack/references/lifecycle.md +20 -5
- package/skills/axstack/references/pr-shape.md +15 -0
- package/skills/axstack/references/pr-triage-nightly.md +14 -2
- package/skills/axstack/references/review-manager-prompt.md +18 -11
- package/skills/axstack/references/role-roster.md +4 -9
- package/skills/axstack/references/routing.md +3 -7
- package/skills/axstack/references/t3-runtime.md +122 -103
- package/skills/axstack/references/test-audit-weekly.md +14 -2
- package/skills/axstack/references/workspace-hygiene.md +14 -2
- package/skills/axstack/scripts/dispatch-plan.js +10 -27
- package/skills/axstack/scripts/resolve-models.js +9 -18
- package/skills/axstack-brainstorm/references/arena.md +2 -2
- package/skills/axstack-cleanup/SKILL.md +6 -3
- package/skills/axstack-implement/SKILL.md +5 -4
- package/skills/axstack-research/SKILL.md +3 -5
- package/skills/axstack-review/SKILL.md +7 -3
- package/skills/axstack-scout/SKILL.md +2 -12
- package/skills/axstack-watch/SKILL.md +43 -8
- package/skills/axstack-watch/references/escalation.md +12 -5
- package/skills/axstack-watch/references/proven-verification.md +1 -1
- package/skills/axstack-watch/references/readiness.md +13 -2
- package/skills/axstack-watch/references/repair-publication.md +1 -1
- package/skills/axstack-watch/references/watch-runtime.md +46 -33
- package/src/instructions.js +4 -3
- package/src/roles.js +3 -6
- package/skills/axstack/scripts/account-usage.js +0 -79
- package/skills/axstack/scripts/pick-instance.js +0 -57
- package/skills/axstack/scripts/sync-default.js +0 -191
- package/skills/axstack/systemd/axstack-default-sync.service +0 -8
- package/skills/axstack/systemd/axstack-default-sync.timer +0 -11
package/README.md
CHANGED
|
@@ -124,18 +124,16 @@ host validation. See [PR-manager setup and safety](docs/host-operations.md#optio
|
|
|
124
124
|
|
|
125
125
|
## Automatic merge boundaries
|
|
126
126
|
|
|
127
|
-
Eligible own PRs use guarded automatic merge; see [merge boundaries, exclusions
|
|
127
|
+
Eligible own PRs use guarded automatic merge; see [merge boundaries, exclusions and accepted risks](docs/workflows.md#automatic-merge-boundaries).
|
|
128
128
|
|
|
129
129
|
## Some notes
|
|
130
130
|
|
|
131
131
|
- T3 Code is the only supported active runtime. Axstack adds no daemon or runtime
|
|
132
|
-
database. The
|
|
133
|
-
`axstack-default-sync` rewrites only T3 `defaultModelSelection`, and
|
|
132
|
+
database. The exception is exactly one opt-in systemd user timer:
|
|
134
133
|
`axstack-single-server` removes duplicate `t3 serve` process trees for one
|
|
135
134
|
base dir while keeping the ownership-lock holder, otherwise the recorded
|
|
136
|
-
server.
|
|
137
|
-
no workflow state and
|
|
138
|
-
[New-chat default sync](docs/host-operations.md#new-chat-default-sync) and
|
|
135
|
+
server. It runs a stateless script, keeps
|
|
136
|
+
no workflow state and launches no agent; see
|
|
139
137
|
[Single T3 server](docs/host-operations.md#single-t3-server).
|
|
140
138
|
- The recorded owning watch thread merges eligible own PRs; excluded PRs use a merge card.
|
|
141
139
|
- This is an early project; expect the workflows to evolve.
|
|
@@ -145,7 +143,7 @@ Eligible own PRs use guarded automatic merge; see [merge boundaries, exclusions,
|
|
|
145
143
|
| Page | Use it for |
|
|
146
144
|
| --- | --- |
|
|
147
145
|
| [Getting started](docs/getting-started.md) | Install, understand `check`, and run a first bounded task. |
|
|
148
|
-
| [Concepts](docs/concepts.md) | Driver threads, phases, roles, presets, holds, evidence and
|
|
146
|
+
| [Concepts](docs/concepts.md) | Driver threads, phases, roles, presets, holds, evidence and provider bindings. |
|
|
149
147
|
| [Guides](docs/guides.md) | Step-by-step journeys for features, fixes, reviews, watches, debugging and releases. |
|
|
150
148
|
| [Workflows](docs/workflows.md) | Routing, review policy, merge boundaries, exclusions and accepted risks. |
|
|
151
149
|
| [Installation](docs/installation.md) | CLI commands, harness paths, configuration, upgrades and troubleshooting. |
|
package/docs/concepts.md
CHANGED
|
@@ -57,58 +57,18 @@ do not belong in it.
|
|
|
57
57
|
|
|
58
58
|
## T3 runtime boundary
|
|
59
59
|
|
|
60
|
-
Delegation uses the `t3-code` MCP.
|
|
61
|
-
|
|
60
|
+
Delegation uses the `t3-code` MCP. Use async `delegate_task` for every role, including authors with
|
|
61
|
+
`isolation:"worktree"` in their own SHA-pinned worktrees.
|
|
62
|
+
Top-level drivers use `t3_thread_launch`.
|
|
63
|
+
Use `t3_thread_launch` as a rare author fallback only when
|
|
64
|
+
worktree isolation is unavailable and record each use in the run record. Configuration read-back,
|
|
62
65
|
run receipts and revision-bound completion are separate from capability
|
|
63
66
|
discovery. Read the [runtime contract](../skills/axstack/references/t3-runtime.md)
|
|
64
67
|
immediately before dispatch, receipt consumption or recovery.
|
|
65
68
|
|
|
66
|
-
##
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
and record the chosen instance ID. `--settings <path>` overrides
|
|
73
|
-
`~/.t3/userdata/settings.json`.
|
|
74
|
-
|
|
75
|
-
For known usage, the score equals `(100 − max known window utilization) × tier weight`.
|
|
76
|
-
For unknown utilization, the score equals the tier weight alone.
|
|
77
|
-
The maximum uses the known utilization windows; an unavailable window is not
|
|
78
|
-
assumed to be empty.
|
|
79
|
-
|
|
80
|
-
| Provider / tier | Weight |
|
|
81
|
-
| --- | --- |
|
|
82
|
-
| Claude Max 20x: `default_claude_max_20x` | 4 |
|
|
83
|
-
| Claude Max 5x: `default_claude_max_5x` | 1 |
|
|
84
|
-
| Codex: `pro` | 4 |
|
|
85
|
-
| Codex: `prolite` | 1 |
|
|
86
|
-
|
|
87
|
-
For an unknown tier, the weight equals 1.
|
|
88
|
-
An account with any window at ≥95% or a reported limit reached is excluded.
|
|
89
|
-
Accounts with missing credentials are skipped.
|
|
90
|
-
Usage is cached for five minutes. Failed requests use stale usage when present,
|
|
91
|
-
otherwise a tier-only unknown score. Codex's plan is unknown until a successful
|
|
92
|
-
usage response, so an uncached failed Codex request has weight 1.
|
|
93
|
-
|
|
94
|
-
Exit 0 prints the selected instance or JSON.
|
|
95
|
-
For dispatched roles, only error exit 1 permits fallback to the canonical instance after validating availability.
|
|
96
|
-
The canonical instances are `codex` and `claudeAgent`.
|
|
97
|
-
Exit 2 (no eligible provider instances) must hold the work without fallback.
|
|
98
|
-
If the driver's own current instance is eligible, it must stay despite headroom differences.
|
|
99
|
-
On error exit 1, the driver must keep its current instance.
|
|
100
|
-
At a turn boundary, an excluded driver with an eligible same-provider sibling
|
|
101
|
-
switches its own calling thread and records the change. Provider, model, class
|
|
102
|
-
and effort remain fixed. Dispatched roles never fail over mid-thread.
|
|
103
|
-
See [Provider bindings](../skills/axstack/references/t3-runtime.md#preflight-and-binding)
|
|
104
|
-
for schedule rebinding and the [policy carve-out](workflows.md#automatic-merge-boundaries).
|
|
105
|
-
|
|
106
|
-
The opt-in `sync-default.js` rotates the New-chat default by elapsed-minus-used pace at a ten-point lead or current exclusion. `AXSTACK_SYNC_POOL` enables cross-driver weekly comparison and model/effort selection; without it, only the same-driver account changes.
|
|
107
|
-
|
|
108
|
-
## Account selection environment
|
|
109
|
-
|
|
110
|
-
`XDG_CACHE_HOME` selects the cache directory; the default is `~/.cache`.
|
|
111
|
-
The usage cache lives at `<cache-dir>/axstack/usage.json`.
|
|
112
|
-
`AXSTACK_CLAUDE_USAGE_URL` is a test-only endpoint override for Claude usage.
|
|
113
|
-
`AXSTACK_CODEX_USAGE_URL` is a test-only endpoint override for Codex usage.
|
|
114
|
-
Local tests use loopback endpoints; these variables are not provider setup steps.
|
|
69
|
+
## Provider bindings
|
|
70
|
+
|
|
71
|
+
Claude binds to T3 instance `claudeAgent`; Codex binds to `codex`.
|
|
72
|
+
Grok binds to `grok`.
|
|
73
|
+
A usage-limited instance holds the work without failover.
|
|
74
|
+
See [Provider bindings](../skills/axstack/references/t3-runtime.md#preflight-and-binding).
|
package/docs/host-operations.md
CHANGED
|
@@ -7,10 +7,10 @@ instructions and local tests do not prove live provider readiness or delivery.
|
|
|
7
7
|
|
|
8
8
|
## T3 setup
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
Hosts can delete author worktrees at merge through `storageCleanup.worktreeOnMerge`.
|
|
11
|
+
`t3_project_read` cannot read `storageCleanup.worktreeOnMerge`.
|
|
12
|
+
Evidence never lives in a worktree and belongs in private `<run>/evidence/<key>/`.
|
|
13
|
+
A missing merged or closed author worktree is expected, not a hold.
|
|
14
14
|
|
|
15
15
|
For remote and Android access on the existing tailnet, run:
|
|
16
16
|
|
|
@@ -23,13 +23,6 @@ Run `t3 serve --tailscale-serve` as a VPS user service and pair the Android
|
|
|
23
23
|
app with `t3 pair`. T3 Connect is outside this setup. Service installation,
|
|
24
24
|
network access, and pairing require their own authorized host checks.
|
|
25
25
|
|
|
26
|
-
Install Antigravity through T3 provider settings using its managed runtime,
|
|
27
|
-
then complete the user's browser sign-in before its canary. T3 uses Google's
|
|
28
|
-
Antigravity ACP agent (`agy_acp_server`); the IDE/`agy` CLI skill paths in the
|
|
29
|
-
installation reference are separate installer targets and do not configure this managed runtime.
|
|
30
|
-
Antigravity roles receive self-contained briefs; its runtime does not read
|
|
31
|
-
`~/.agents/skills`. A missing runtime, sign-in, or canary holds those roles.
|
|
32
|
-
|
|
33
26
|
Grok CLI must be >=1.0.13 on desktop and VPS. T3 advertising Grok does not
|
|
34
27
|
prove the CLI runs.
|
|
35
28
|
|
|
@@ -43,10 +36,9 @@ the affected operation. Provider/model routing, Linear documents through the
|
|
|
43
36
|
executor MCP, and live schedule behavior need separate preflights.
|
|
44
37
|
|
|
45
38
|
Installation creates no production schedule and never enables a timer.
|
|
46
|
-
Axstack allows exactly
|
|
47
|
-
`axstack-default-sync` rewrites only T3 `defaultModelSelection`, and
|
|
39
|
+
Axstack allows exactly one opt-in systemd user timer as a scheduler exception:
|
|
48
40
|
`axstack-single-server` removes duplicate server processes for one base dir.
|
|
49
|
-
|
|
41
|
+
It runs a stateless script, keeps no workflow state and launches no agent.
|
|
50
42
|
Every verified own-PR publication arms or joins the driver's chat-run watch.
|
|
51
43
|
Its bound T3 schedule uses the cadence in [Chat-run watch activation](#chat-run-watch-activation).
|
|
52
44
|
See [Chat-run PR watch](workflows.md#chat-run-pr-watch) for authority, schedule identity and stop conditions.
|
|
@@ -58,11 +50,23 @@ live behavior. See [Review manager](../skills/axstack/references/automations.md)
|
|
|
58
50
|
|
|
59
51
|
## Chat-run watch activation
|
|
60
52
|
|
|
61
|
-
|
|
53
|
+
For parked holds, follow [Parked user-reply holds](../skills/axstack/references/contracts.md#parked-user-reply-holds).
|
|
54
|
+
A parking unwatch never triggers native re-arm or the 5-minute recovery cadence.
|
|
55
|
+
|
|
56
|
+
A bound T3 schedule wakes the driver thread on a 60-minute backstop cadence.
|
|
62
57
|
Unavailable or unarmed native watches for any open member, failed re-arming,
|
|
63
|
-
or
|
|
58
|
+
or an unsettled writer or follow-up without a native completion path restore
|
|
59
|
+
five minutes. A user Stop never activates this recovery. Other waits use 60 minutes
|
|
64
60
|
under [Chat-run watch runtime](../skills/axstack-watch/references/watch-runtime.md#chat-run-watch).
|
|
65
|
-
|
|
61
|
+
For a non-user stop while the PR stays open, follow
|
|
62
|
+
[Native PR links and watches](../skills/axstack/references/t3-runtime.md#native-pr-links-and-watches)
|
|
63
|
+
in that same turn: unsettle the driver thread before native re-arm.
|
|
64
|
+
User Stop stays stopped; the linked procedure owns stop-reason recording,
|
|
65
|
+
diagnostic rate-limit checks and recovery on the next wake after reset.
|
|
66
|
+
Never wait for a GraphQL reset inside a turn. After one PR merge auto-settles a
|
|
67
|
+
multi-PR driver, re-arm the remaining watches through that procedure.
|
|
68
|
+
The digest runs only on schedule wakes; native PR wakes reconcile their event
|
|
69
|
+
and a current-state read.
|
|
66
70
|
The run record holds the schedule ID and driver thread.
|
|
67
71
|
Each wake reconciles all unsettled dispatch attempts
|
|
68
72
|
and runs the own-PR maintenance loop: feedback, base movement, required CI,
|
|
@@ -103,7 +107,7 @@ binding. Continuity lives outside worktrees at
|
|
|
103
107
|
`~/.local/share/axstack/runs/review-manager/progress.md`. Per-PR detached
|
|
104
108
|
review checkouts come from existing host clones; a missing clone holds that job.
|
|
105
109
|
At pass start, follow [Provider bindings](../skills/axstack/references/t3-runtime.md#preflight-and-binding)
|
|
106
|
-
for
|
|
110
|
+
for provider binding.
|
|
107
111
|
|
|
108
112
|
Every pass reconciles saved, GitHub, and native T3 state across the lane before
|
|
109
113
|
admission and reads all discovery pages. Incomplete inventory or unknown
|
|
@@ -130,9 +134,8 @@ retirement. No broad scratch deletion or forced worktree removal applies.
|
|
|
130
134
|
Manual review and user-driven `axstack-watch` remain outside this schedule.
|
|
131
135
|
Requested peer reviews cover any accessible repository. T3 owns schedules,
|
|
132
136
|
threads, runs, and delegated tasks; Axstack adds no queue engine, cursor files,
|
|
133
|
-
or historical runtime fallback. The only scheduler
|
|
134
|
-
systemd user
|
|
135
|
-
and [Single T3 server](#single-t3-server).
|
|
137
|
+
or historical runtime fallback. The only scheduler exception is the opt-in
|
|
138
|
+
systemd user timer described in [Single T3 server](#single-t3-server).
|
|
136
139
|
|
|
137
140
|
## Review automation
|
|
138
141
|
|
|
@@ -155,84 +158,6 @@ Scenario fixtures are behavioral-evaluation inputs, not model-evaluation
|
|
|
155
158
|
results, and neither form is live proof; activation still requires the native
|
|
156
159
|
canary described by the operational contract.
|
|
157
160
|
|
|
158
|
-
## New-chat default sync
|
|
159
|
-
|
|
160
|
-
This opt-in script changes only root `defaultModelSelection` in
|
|
161
|
-
`~/.t3/userdata/settings.json`. Without a pool it changes only the instance
|
|
162
|
-
among enabled accounts of the current Claude/Codex driver.
|
|
163
|
-
`AXSTACK_SYNC_POOL` compares drivers by weekly clocks (>=604800s), without
|
|
164
|
-
plan weights. Weekly remaining quota is `R = 100 - used` for the selected
|
|
165
|
-
weekly window. Prefer the highest band: `R >= 15`, `10 <= R < 15`, then `R < 10`.
|
|
166
|
-
A higher band switches without a pace margin; within the same band, rotation
|
|
167
|
-
needs a ten-point elapsed-minus-used pace lead and the current account wins ties.
|
|
168
|
-
This also applies when every eligible account is below 10% remaining: known
|
|
169
|
-
usable quota stays usable, ranked by pace. Without a pool, only pace applies.
|
|
170
|
-
This is a best-effort weekly reserve preference, not a guaranteed budget for
|
|
171
|
-
future work. The current hard guard still excludes any window at 95% used
|
|
172
|
-
or a reached limit. Excluded/unauthorized/skipped current accounts can escape
|
|
173
|
-
to known candidates before the unknown hold; otherwise any unknown holds,
|
|
174
|
-
even below 10% remaining. No eligible candidate leaves the default untouched.
|
|
175
|
-
Non-current absent credentials
|
|
176
|
-
exclude; malformed/unreadable credentials and unknown/stale usage hold.
|
|
177
|
-
Cache expires after five minutes. Missing defaults stay untouched; OAuth tokens
|
|
178
|
-
are never refreshed. Each host's pool uses only enabled, credentialed drivers:
|
|
179
|
-
|
|
180
|
-
```sh
|
|
181
|
-
AXSTACK_SYNC_POOL=claudeAgent=claude-opus-5-5,codex=gpt-6-astra:medium \
|
|
182
|
-
bun ~/.agents/skills/axstack/scripts/sync-default.js --dry-run
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
Exit 0 prints one token-free JSON decision with proposed selection; dry-run
|
|
186
|
-
never writes. `--settings <path>` selects another file. Pool entries are
|
|
187
|
-
`driver=model[:effort]`: Claude `effort` or Codex `reasoningEffort` options;
|
|
188
|
-
omitted effort omits options. Rotation writes the full pool selection,
|
|
189
|
-
overwriting manual model/effort picks only then. Pin with `AXSTACK_SYNC_DEFAULT=0`
|
|
190
|
-
or a default driver outside the pool. Exit 1 means invalid pool/settings or write
|
|
191
|
-
failure. Save the full selection for rollback. Other bytes stay intact.
|
|
192
|
-
A fsynced sibling preserves mode; original bytes are checked before rename and
|
|
193
|
-
read back afterward. The accepted sub-ms T3 write race can lose an edit;
|
|
194
|
-
read-back mismatch is an error.
|
|
195
|
-
|
|
196
|
-
Validate pool models and efforts against each host's catalog before activation.
|
|
197
|
-
Preserve that host's current Opus effort by including it explicitly when set;
|
|
198
|
-
the illustrative Claude entry above omits effort. If the current Codex default
|
|
199
|
-
still uses Sol, the driver performs a one-time same-account selection migration
|
|
200
|
-
to `gpt-6-astra:medium` during authorized host activation, saving rollback bytes
|
|
201
|
-
and verifying the write/readback. The helper does not enforce models when the
|
|
202
|
-
account stays selected. Only new chats use the changed default; running threads,
|
|
203
|
-
role routing, schedules and `roles.json` stay outside this policy.
|
|
204
|
-
|
|
205
|
-
Under host-mutation authority, install and enable:
|
|
206
|
-
|
|
207
|
-
```sh
|
|
208
|
-
mkdir -p ~/.config/systemd/user
|
|
209
|
-
cp ~/.agents/skills/axstack/systemd/axstack-default-sync.service ~/.config/systemd/user/axstack-default-sync.service
|
|
210
|
-
cp ~/.agents/skills/axstack/systemd/axstack-default-sync.timer ~/.config/systemd/user/axstack-default-sync.timer
|
|
211
|
-
systemctl --user daemon-reload
|
|
212
|
-
systemctl --user enable --now axstack-default-sync.timer
|
|
213
|
-
systemctl --user list-timers axstack-default-sync.timer
|
|
214
|
-
journalctl --user -u axstack-default-sync.service
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
The timer starts about one minute after user-manager startup, then every ten
|
|
218
|
-
minutes. Its monotonic `Persistent=true` timer never replays calendar ticks.
|
|
219
|
-
Override Bun/skills paths via `ExecStart`/`Environment` in
|
|
220
|
-
`systemctl --user edit axstack-default-sync.service`. Add the per-host pool:
|
|
221
|
-
|
|
222
|
-
```ini
|
|
223
|
-
[Service]
|
|
224
|
-
Environment=AXSTACK_SYNC_POOL=claudeAgent=claude-opus-5-5,codex=gpt-6-astra:medium
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
Reload after edits. Logout needs authorized linger; installation never activates units.
|
|
228
|
-
|
|
229
|
-
Disable with `systemctl --user disable --now axstack-default-sync.timer` and
|
|
230
|
-
stop any active one-shot with `systemctl --user stop axstack-default-sync.service`.
|
|
231
|
-
Rollback: remove the pool drop-in, reload, and restore the full selection in T3 Settings.
|
|
232
|
-
The sibling `<settings>.axstack-default-sync.lock` directory prevents overlap
|
|
233
|
-
(unchanged/locked). Empty locks older than sixty seconds are removed and retried
|
|
234
|
-
once; fresh contention reports locked.
|
|
235
|
-
|
|
236
161
|
## Single T3 server
|
|
237
162
|
|
|
238
163
|
This opt-in timer checks once per minute for this user's `t3 serve` processes
|
package/docs/installation.md
CHANGED
|
@@ -81,23 +81,17 @@ independently reviewed through the selected preset's explanation roles.
|
|
|
81
81
|
Repeat installs leave unchanged files untouched. Legacy tool copies are
|
|
82
82
|
released by ownership on upgrade and uninstall; retained copies report why.
|
|
83
83
|
|
|
84
|
-
See [Account selection environment](concepts.md#account-selection-environment)
|
|
85
|
-
for the picker cache directory and test-only usage endpoint variables.
|
|
86
|
-
|
|
87
84
|
## Packaged scripts
|
|
88
85
|
|
|
89
86
|
Run these with Bun from the installed `<skills-dir>/axstack/scripts/` directory:
|
|
90
|
-
`resolve-models.js` (model IDs), `
|
|
91
|
-
`
|
|
92
|
-
`sync-default.js [--settings <path>] [--dry-run]` (New-chat default; `AXSTACK_SYNC_POOL` opts into cross-driver rotation).
|
|
87
|
+
`resolve-models.js` (model IDs), `pr-digest.js` (PR discovery), and
|
|
88
|
+
`archive-evidence.js` (evidence archive).
|
|
93
89
|
`single-server.js [--base-dir <dir>] [--proc-root <dir>] [--grace-seconds N] [--dry-run]` removes
|
|
94
90
|
duplicate `t3 serve` process trees while keeping the ownership-lock holder,
|
|
95
91
|
otherwise the recorded runtime pid.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
See [New-chat default sync](host-operations.md#new-chat-default-sync) and
|
|
100
|
-
[Single T3 server](host-operations.md#single-t3-server) for activation.
|
|
92
|
+
The opt-in systemd user unit files ship in `axstack/systemd/`;
|
|
93
|
+
installation copies them as assets and never enables the timer.
|
|
94
|
+
See [Single T3 server](host-operations.md#single-t3-server) for activation.
|
|
101
95
|
|
|
102
96
|
## Role presets
|
|
103
97
|
|
|
@@ -219,9 +213,13 @@ The deterministic `<!-- axstack:begin v1 -->` / `<!-- axstack:end -->` block
|
|
|
219
213
|
contains the target-derived Axstack entry path and model-free routing prose. It
|
|
220
214
|
also routes every subagent, delegated worker, reviewer, and cross-harness dispatch
|
|
221
215
|
through the `t3-code` MCP. It forbids harness-native subagent tools. The current
|
|
222
|
-
T3 thread is the driver
|
|
223
|
-
|
|
224
|
-
|
|
216
|
+
T3 thread is the driver. Use async `delegate_task` for every role, including authors with
|
|
217
|
+
`isolation:"worktree"` in their own SHA-pinned worktrees.
|
|
218
|
+
Top-level drivers use `t3_thread_launch`.
|
|
219
|
+
Use `t3_thread_launch` as a rare author fallback only when
|
|
220
|
+
worktree isolation is unavailable and record each use in the run record. The standing block
|
|
221
|
+
authorizes top-level driver threads, delegated writers and worktrees;
|
|
222
|
+
it grants no push, merge, release, or host mutation.
|
|
225
223
|
The [runtime reference](../skills/axstack/references/t3-runtime.md) owns the dispatch
|
|
226
224
|
and receipt protocol.
|
|
227
225
|
|
|
@@ -249,12 +247,11 @@ The complete bundle is validated before writes:
|
|
|
249
247
|
- each preset is a real JSON file with version 1, a non-empty `roles` array,
|
|
250
248
|
the filename's selected identity supplied by the caller, and the same role-ID
|
|
251
249
|
set as its peers;
|
|
252
|
-
- every role has valid preserved fields
|
|
253
|
-
|
|
254
|
-
routes explicitly permit `model: null`;
|
|
250
|
+
- every role has valid preserved fields; `axstack-research-x` and the Grok
|
|
251
|
+
arena candidate explicitly permit `model: null`;
|
|
255
252
|
in each single-provider preset, the unavailable adviser and round-2 seat
|
|
256
|
-
explicitly permit `model: null`, as do
|
|
257
|
-
and
|
|
253
|
+
explicitly permit `model: null`, as do the X research route
|
|
254
|
+
and the Grok arena candidate;
|
|
258
255
|
- obsolete runtime configuration flags fail before mutation with migration
|
|
259
256
|
guidance.
|
|
260
257
|
|
|
@@ -290,30 +287,23 @@ the user explicitly changes it and accepts the resulting evidence invalidation.
|
|
|
290
287
|
The `mixed` and `claude-only` presets assign `axstack-auditor`,
|
|
291
288
|
`axstack-research-requirements`, `axstack-research-code`, `axstack-research-web`,
|
|
292
289
|
`axstack-explore-execution` to the Claude Sonnet class at high effort.
|
|
293
|
-
`axstack-explore-codebase`
|
|
290
|
+
`axstack-explore-codebase` adopts Haiku 5.5 high with
|
|
294
291
|
`modelClass: haiku` and the exact `model: claude-haiku-5-5` pin.
|
|
295
292
|
Activation requires that exact ID and high effort in saved T3 capabilities;
|
|
296
|
-
missing either holds
|
|
293
|
+
missing either holds this role without substitution, including Haiku 4.5.
|
|
297
294
|
The `codex-only` assignments for these roles are unchanged.
|
|
298
295
|
Scout adds `axstack-explore-codebase-luna` at Codex Luna xhigh in `mixed` and
|
|
299
|
-
`codex-only`.
|
|
300
|
-
Antigravity `gemini-3.8-flash-medium` at medium effort in `mixed`.
|
|
301
|
-
The missing Scout seats have explicit null models: Luna and Flash in
|
|
302
|
-
`claude-only`, and Flash in `codex-only`.
|
|
296
|
+
`codex-only`. Luna has an explicit null model in `claude-only`.
|
|
303
297
|
The three `-sol` pair seats for auditor, research-code, and explore-execution
|
|
304
298
|
use Sol high in `mixed` and `codex-only`; `claude-only` records intentional
|
|
305
299
|
absences. The paired seats run independently on one brief and the driver
|
|
306
300
|
reconciles their findings.
|
|
307
301
|
|
|
308
|
-
The mixed checker
|
|
309
|
-
|
|
310
|
-
`model: null
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
with `-<effort>` from saved capabilities and record its exact ID.
|
|
314
|
-
Missing effort-suffix matches hold resolution for Antigravity, including empty
|
|
315
|
-
model catalogs. The single-provider presets configure the checker and keep
|
|
316
|
-
both cross-provider research routes as intentional absences. Their
|
|
302
|
+
The mixed checker uses the Claude Sonnet class at low effort, resolved from
|
|
303
|
+
saved capabilities. Mixed `axstack-research-x` uses `grok` with
|
|
304
|
+
`model: null`; T3 resolves its exact model from the first entry for that provider
|
|
305
|
+
in saved capabilities. The single-provider presets configure the checker and
|
|
306
|
+
keep X research as an intentional absence. Their
|
|
317
307
|
unavailable adviser and round-2 seat remain explicit same-provider
|
|
318
308
|
`model: null` roles, which do not make installation unready;
|
|
319
309
|
Align and Spec still hold until both Astra and Opus can return independent
|
|
@@ -326,7 +316,7 @@ the affected work. Codex and Claude class resolution reads the saved T3 capabili
|
|
|
326
316
|
the command below; missing or malformed catalogs hold.
|
|
327
317
|
|
|
328
318
|
```text
|
|
329
|
-
bun skills/axstack/scripts/resolve-models.js --provider <codex|claude|grok
|
|
319
|
+
bun skills/axstack/scripts/resolve-models.js --provider <codex|claude|grok> --capabilities <saved-json> <--class <class>|--model <id|null>> --effort <level> [--exclude <id>]
|
|
330
320
|
```
|
|
331
321
|
|
|
332
322
|
`--class` resolves a class; `--model` selects an exact ID or an explicitly
|
|
@@ -336,11 +326,10 @@ and reports a resolution hold on exit 1.
|
|
|
336
326
|
|
|
337
327
|
A preset model is used as given; class rows resolve to the newest
|
|
338
328
|
matching catalog ID. Resume retains the recorded snapshot without re-resolution.
|
|
339
|
-
Rejection, timeout, quota, and auth failures hold;
|
|
340
|
-
same-model account selection among one driver's instances via `pick-instance.js`,
|
|
329
|
+
Rejection, timeout, quota, and auth failures hold;
|
|
341
330
|
no subscription inference, quota routing, or alternative-model retry applies.
|
|
342
331
|
Follow [Provider bindings](../skills/axstack/references/t3-runtime.md#preflight-and-binding)
|
|
343
|
-
for
|
|
332
|
+
for fixed provider instances and usage-limit holds.
|
|
344
333
|
|
|
345
334
|
`modeId` and similar permission fields remain conservative declared intent.
|
|
346
335
|
They do not prove effective T3 `runtimeMode`, sandboxing, or permission parity.
|
|
@@ -356,20 +345,6 @@ installed shared-root path. The [T3 runtime reference](../skills/axstack/referen
|
|
|
356
345
|
owns model/account authority; [Cleanup](../skills/axstack-cleanup/SKILL.md)
|
|
357
346
|
owns evidence retirement authority.
|
|
358
347
|
|
|
359
|
-
### Account picker
|
|
360
|
-
|
|
361
|
-
```text
|
|
362
|
-
bun skills/axstack/scripts/pick-instance.js --provider <claude|codex> [--settings <t3-settings-json>] [--json]
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
`--settings` overrides the default `~/.t3/userdata/settings.json`; `--json`
|
|
366
|
-
prints the selected instance and scored inventory rather than only its ID.
|
|
367
|
-
The picker uses exit 0 for an eligible selection, exit 1 for invalid input/settings
|
|
368
|
-
or an unexpected failure, and exit 2 when no eligible provider instance remains.
|
|
369
|
-
Follow [Provider bindings](../skills/axstack/references/t3-runtime.md#preflight-and-binding)
|
|
370
|
-
for dispatch fallback, driver stay rules, and holds; selection alone grants no
|
|
371
|
-
provider or model substitution authority.
|
|
372
|
-
|
|
373
348
|
### PR digest
|
|
374
349
|
|
|
375
350
|
```text
|
package/docs/workflows.md
CHANGED
|
@@ -15,10 +15,9 @@ The directly invoked phase loads the applicable shared references for routing,
|
|
|
15
15
|
lifecycle, T3 runtime boundaries, role/model/risk contracts, the run record,
|
|
16
16
|
and PR shape.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
see [Account selection](concepts.md#account-selection). Follow
|
|
18
|
+
Follow
|
|
20
19
|
[Provider bindings](../skills/axstack/references/t3-runtime.md#preflight-and-binding)
|
|
21
|
-
immediately before dispatch
|
|
20
|
+
immediately before dispatch.
|
|
22
21
|
|
|
23
22
|
Direct routes need no spec ceremony:
|
|
24
23
|
|
|
@@ -132,15 +131,13 @@ role.
|
|
|
132
131
|
|
|
133
132
|
In `mixed` and `claude-only`, `axstack-research-requirements`,
|
|
134
133
|
`axstack-research-code`, `axstack-research-web`, and `axstack-explore-execution`
|
|
135
|
-
use the Claude Sonnet class at high effort. `axstack-explore-codebase`
|
|
136
|
-
|
|
134
|
+
use the Claude Sonnet class at high effort. `axstack-explore-codebase` adopts
|
|
135
|
+
Haiku 5.5 high, with class `haiku` and exact pin
|
|
137
136
|
`claude-haiku-5-5`. Missing that ID or high effort in saved T3 capabilities
|
|
138
|
-
holds
|
|
137
|
+
holds that role without substitution. `codex-only` keeps its Codex
|
|
139
138
|
assignments for those roles. Scout adds a Luna xhigh codebase seat in `mixed`
|
|
140
|
-
and `codex-only
|
|
141
|
-
|
|
142
|
-
intentionally absent in `codex-only`. Mixed web-google and X retain their
|
|
143
|
-
source-specific Antigravity and Grok routes.
|
|
139
|
+
and `codex-only`. In `claude-only`, Luna is intentionally absent.
|
|
140
|
+
The mixed X route uses Grok.
|
|
144
141
|
The mixed `axstack-auditor` uses Haiku 5.5 xhigh, pinned to `claude-haiku-5-5`;
|
|
145
142
|
missing that ID or xhigh effort holds without substitution. The mixed
|
|
146
143
|
`axstack-explainer-review` uses Sol medium; `axstack-explainer` pins
|
|
@@ -171,15 +168,14 @@ in codebase findings mode.
|
|
|
171
168
|
The unavailable adviser in each single-provider preset stays explicitly
|
|
172
169
|
`model: null` within that provider's bounds. Installer readiness accepts that
|
|
173
170
|
intentional absence, but Align and Spec hold because both independent receipts
|
|
174
|
-
are required. The mixed checker
|
|
175
|
-
|
|
176
|
-
`model: null`
|
|
177
|
-
in saved T3 capabilities.
|
|
171
|
+
are required. The mixed checker uses the Claude Sonnet class at low effort,
|
|
172
|
+
resolved from saved capabilities. The X route
|
|
173
|
+
uses `grok` with `model: null` and resolves the exact model from the first
|
|
174
|
+
provider entry in saved T3 capabilities. Missing or
|
|
178
175
|
unavailable roles hold only affected work. Requested model, effort, and
|
|
179
176
|
permission values need actual T3 configuration read-back; stored `modeId` is
|
|
180
177
|
neither permission parity nor a sandbox. Rejection, timeout, quota, and auth
|
|
181
|
-
failures hold;
|
|
182
|
-
one driver's instances via `pick-instance.js`, no subscription inference, quota
|
|
178
|
+
failures hold; no subscription inference, quota
|
|
183
179
|
routing, or alternative retry applies.
|
|
184
180
|
|
|
185
181
|
## T3 runtime boundary
|
|
@@ -193,9 +189,13 @@ Capability discovery alone is not execution proof.
|
|
|
193
189
|
|
|
194
190
|
All subagent, delegated-worker, reviewer, and cross-harness work uses T3
|
|
195
191
|
orchestration through the `t3-code` MCP. Do not use harness-native subagent
|
|
196
|
-
tools.
|
|
197
|
-
|
|
198
|
-
|
|
192
|
+
tools. Use async `delegate_task` for every role, including authors with
|
|
193
|
+
`isolation:"worktree"` in their own SHA-pinned worktrees.
|
|
194
|
+
Top-level drivers use `t3_thread_launch`.
|
|
195
|
+
Use `t3_thread_launch` as a rare author fallback only when
|
|
196
|
+
worktree isolation is unavailable and record each use in the run record.
|
|
197
|
+
Reviewers and investigators receive driver-made disposable detached checkouts pinned to candidate
|
|
198
|
+
and base. Repairs return
|
|
199
199
|
to the same author and worktree. The current T3 driver owns coordination and
|
|
200
200
|
forge mutations and never writes an author's tracked files.
|
|
201
201
|
|
|
@@ -203,10 +203,23 @@ Preserve native `taskId/childThreadId/childRunId` or
|
|
|
203
203
|
`threadId/runId/worktree/branch/base SHA`, dispatch key, requested/effective
|
|
204
204
|
configuration, and private evidence. Persist `task_status` before
|
|
205
205
|
`t3_thread_read`; delegated completion needs terminal success, available result,
|
|
206
|
-
settled child runs, and the current `AXSTACK-DONE` marker.
|
|
207
|
-
|
|
206
|
+
settled child runs, and the current `AXSTACK-DONE` marker. Delegated authors also
|
|
207
|
+
require a clean tree, non-empty diff and red/green logs.
|
|
208
|
+
Launched fallback writers send their marker to the driver, which also verifies
|
|
209
|
+
terminal `t3_thread_wait`,
|
|
208
210
|
a clean tree, non-empty diff, and red/green logs. An older attempt never
|
|
209
|
-
completes a newer one. Questions remain incomplete until the resumed run settles.
|
|
211
|
+
completes a newer one. Questions remain incomplete until the answered task or resumed run settles.
|
|
212
|
+
|
|
213
|
+
For a delegated child, detect questions with `t3_pending_request_list(childThreadId)`.
|
|
214
|
+
Never rely on `hasPendingQuestion` alone.
|
|
215
|
+
Codex `request_user_input_async` does not set it.
|
|
216
|
+
Use `t3_pending_request_read`, then confirm the request is still pending with
|
|
217
|
+
`t3_pending_request_list(childThreadId)`, then answer once within existing authority
|
|
218
|
+
using `t3_pending_request_respond`; a second ask holds.
|
|
219
|
+
Independent review rounds require fresh `delegate_task` calls.
|
|
220
|
+
Only author continuation and an answer to a child's own question use the same child.
|
|
221
|
+
Providers without a question tool (grok) and launched writers keep
|
|
222
|
+
the `AXSTACK-QUESTION` marker route.
|
|
210
223
|
|
|
211
224
|
Trust, permission, authentication, and provider safety prompts are holds;
|
|
212
225
|
never answer trust or permission prompts for a worker. Unknown liveness,
|
|
@@ -223,8 +236,8 @@ for explicit ownership transfer.
|
|
|
223
236
|
Rung 1 or 2 design question it loads `axstack-brainstorm` inline and reuses
|
|
224
237
|
its receipt instead of consulting twice; Align owns the interview.
|
|
225
238
|
- `axstack-brainstorm` validates an approach standalone or inline in the driver,
|
|
226
|
-
report-only. Every invocation compares independent Astra, Opus
|
|
227
|
-
|
|
239
|
+
report-only. Every invocation compares independent Astra, Opus and Grok
|
|
240
|
+
candidates, including premise and smallest-change/do-nothing
|
|
228
241
|
checks. The driver scores, picks and grafts; Rung 1 uses no judges. At Rung 2,
|
|
229
242
|
`axstack-arena-judge-opus` judges round 1; disagreement on the base or caller
|
|
230
243
|
re-invocation with the user's rejection triggers fresh Fable/Astra round 2.
|
|
@@ -310,18 +323,19 @@ keeps the current owner and a resumable record.
|
|
|
310
323
|
|
|
311
324
|
## Decisions and holds
|
|
312
325
|
|
|
326
|
+
For parked holds, follow [Parked user-reply holds](../skills/axstack/references/contracts.md#parked-user-reply-holds).
|
|
327
|
+
|
|
313
328
|
Raise user-decision holds and serious-risk holds in the T3 driver thread,
|
|
314
|
-
and the driver ends its turn
|
|
329
|
+
and the driver ends its turn waiting on the decision.
|
|
315
330
|
These include `verification not proven`, merge cards needing user input,
|
|
316
331
|
spec approval and npm stage approval.
|
|
317
332
|
Raise serious risks immediately; attempt bounded safe recovery for blocked operations.
|
|
318
333
|
After bounded safe recovery, raise a genuine blocked operation that still needs
|
|
319
|
-
the user in the T3 driver thread, and the driver ends its turn
|
|
334
|
+
the user in the T3 driver thread, and the driver ends its turn waiting on it.
|
|
320
335
|
Routine questions stay in the T3 driver thread. Progress, CI pending, and completion always stay
|
|
321
336
|
in the T3 driver thread.
|
|
322
337
|
Post the report-only unresolved-rating notice there, deduplicated per comment and
|
|
323
338
|
head. It grants no reply authority and never clears the hold.
|
|
324
|
-
The standalone monitor never sends; the chat-run schedule resumes the driver.
|
|
325
339
|
Healthy watch observations remain quiet.
|
|
326
340
|
|
|
327
341
|
## Chat-run PR watch
|
|
@@ -353,7 +367,8 @@ An incomplete scan leaves readiness `UNKNOWN`.
|
|
|
353
367
|
The chat-run watch never expires or waits for re-authorization while PRs remain open.
|
|
354
368
|
The chat-run watch ends only when all watched PRs merge or close, launched work
|
|
355
369
|
is settled, and release is settled or not applicable, or the user cancels.
|
|
356
|
-
A required PR closed without merging keeps its decision hold
|
|
370
|
+
A required PR closed without merging keeps its decision hold.
|
|
371
|
+
For a required PR closed without merging, apply parking eligibility.
|
|
357
372
|
Follow [Chat-run watch runtime](../skills/axstack-watch/references/watch-runtime.md#chat-run-watch)
|
|
358
373
|
for native lifetime re-arming and quiet cadence changes on the recorded schedule ID.
|
|
359
374
|
Implementation candidates are published and read back before independent
|
|
@@ -417,7 +432,7 @@ review, or return the work to the author. Only a gap the driver cannot close
|
|
|
417
432
|
becomes a `verification not proven` card bound to head and base.
|
|
418
433
|
The card names what is unproven, why, and the action that would settle it.
|
|
419
434
|
|
|
420
|
-
Raise `verification not proven` in the T3 driver thread and end the turn
|
|
435
|
+
Raise `verification not proven` in the T3 driver thread and end the turn waiting
|
|
421
436
|
on the decision, bound to the exact PR head and base.
|
|
422
437
|
A changed PR head or base must supersede its open verification decision card,
|
|
423
438
|
reissuing only if a decision is still needed.
|
|
@@ -515,7 +530,7 @@ those SHAs, counted collaborator approvals and bot votes with each vote's SHA
|
|
|
515
530
|
and stale flag, and the causes holding this merge.
|
|
516
531
|
A card that needs the user's decision (work promotion or work deploying/unknown base,
|
|
517
532
|
`Auto-merge: off`, provenance, or an unclosable verification gap) is a decision
|
|
518
|
-
hold raised in the T3 driver thread; the driver ends its turn
|
|
533
|
+
hold raised in the T3 driver thread; the driver ends its turn waiting on the decision.
|
|
519
534
|
Revalidate the current head and base; the reply clears only its bound cause.
|
|
520
535
|
Person-wait cards follow the clock below.
|
|
521
536
|
A changed head or base requires a refreshed card.
|
|
@@ -559,10 +574,8 @@ Npm publication still requires human stage approval; agents never run
|
|
|
559
574
|
This policy grants no release, npm publish, or host install
|
|
560
575
|
authority. See [Preview authority and operations](host-operations.md#private-pr-previews).
|
|
561
576
|
|
|
562
|
-
Excluded:
|
|
563
|
-
routing
|
|
564
|
-
model routing (provider/model substitution) is excluded. Per-dispatch selection
|
|
565
|
-
among the user's own same-provider, same-model accounts is permitted. Automatic
|
|
577
|
+
Excluded: changes to proxy or hub infrastructure and IP routing; local CI contention handling is deferred. Quota-driven scheduling or
|
|
578
|
+
model routing (provider/model substitution) is excluded. Automatic
|
|
566
579
|
merge of work promotion, deploying-base and unknown-base PRs is excluded.
|
|
567
580
|
Automatic merge of peer PRs is excluded. Previews
|
|
568
581
|
outside the VPS, public previews, and production data are excluded. Nightly triage
|
|
@@ -571,7 +584,7 @@ never sends user messages.
|
|
|
571
584
|
Accepted risks: two agents can miss the same defect while CI is green; spec
|
|
572
585
|
approval is the user's main checkpoint. A head guard does not atomically guard
|
|
573
586
|
base freshness; the concurrent-merge race is held by the post-merge push-failure
|
|
574
|
-
rule. A watch with a
|
|
587
|
+
rule. A watch with a 60-minute backstop and 5-minute recovery
|
|
575
588
|
until PRs land has an accepted token cost. Preview code runs under the same VPS user as agents and is not isolated;
|
|
576
589
|
tests already do, so the added risk is small.
|
|
577
590
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axstack",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.50.0",
|
|
4
4
|
"description": "Axstack installer and setup CLI: installs owned chat skills and role data, configures supported harness settings, and checks T3 Code capabilities.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|