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.
Files changed (43) hide show
  1. package/README.md +5 -7
  2. package/docs/concepts.md +11 -51
  3. package/docs/host-operations.md +24 -99
  4. package/docs/installation.md +27 -52
  5. package/docs/workflows.md +48 -35
  6. package/package.json +1 -1
  7. package/profiles/presets/claude-only.json +0 -37
  8. package/profiles/presets/codex-only.json +0 -36
  9. package/profiles/presets/mixed.json +4 -41
  10. package/skills/axstack/references/automations.md +28 -2
  11. package/skills/axstack/references/autopilot.md +7 -5
  12. package/skills/axstack/references/candidate-publication.md +1 -0
  13. package/skills/axstack/references/contracts.md +56 -7
  14. package/skills/axstack/references/lifecycle.md +20 -5
  15. package/skills/axstack/references/pr-shape.md +15 -0
  16. package/skills/axstack/references/pr-triage-nightly.md +14 -2
  17. package/skills/axstack/references/review-manager-prompt.md +18 -11
  18. package/skills/axstack/references/role-roster.md +4 -9
  19. package/skills/axstack/references/routing.md +3 -7
  20. package/skills/axstack/references/t3-runtime.md +122 -103
  21. package/skills/axstack/references/test-audit-weekly.md +14 -2
  22. package/skills/axstack/references/workspace-hygiene.md +14 -2
  23. package/skills/axstack/scripts/dispatch-plan.js +10 -27
  24. package/skills/axstack/scripts/resolve-models.js +9 -18
  25. package/skills/axstack-brainstorm/references/arena.md +2 -2
  26. package/skills/axstack-cleanup/SKILL.md +6 -3
  27. package/skills/axstack-implement/SKILL.md +5 -4
  28. package/skills/axstack-research/SKILL.md +3 -5
  29. package/skills/axstack-review/SKILL.md +7 -3
  30. package/skills/axstack-scout/SKILL.md +2 -12
  31. package/skills/axstack-watch/SKILL.md +43 -8
  32. package/skills/axstack-watch/references/escalation.md +12 -5
  33. package/skills/axstack-watch/references/proven-verification.md +1 -1
  34. package/skills/axstack-watch/references/readiness.md +13 -2
  35. package/skills/axstack-watch/references/repair-publication.md +1 -1
  36. package/skills/axstack-watch/references/watch-runtime.md +46 -33
  37. package/src/instructions.js +4 -3
  38. package/src/roles.js +3 -6
  39. package/skills/axstack/scripts/account-usage.js +0 -79
  40. package/skills/axstack/scripts/pick-instance.js +0 -57
  41. package/skills/axstack/scripts/sync-default.js +0 -191
  42. package/skills/axstack/systemd/axstack-default-sync.service +0 -8
  43. 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, account-selection carve-out and accepted risks](docs/workflows.md#automatic-merge-boundaries).
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 exceptions are exactly two opt-in systemd user timers:
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. Both run stateless scripts, keep
137
- no workflow state and launch no agent; see
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 account selection. |
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. Read-only roles use `delegate_task`; authors
61
- use `t3_thread_launch` with their own pinned worktrees. Configuration read-back,
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
- ## Account selection
67
-
68
- Before each Claude or Codex dispatch or launch, the driver runs
69
- `bun skills/axstack/scripts/pick-instance.js --provider claude|codex`.
70
- The picker selects the enabled account of that provider's T3 driver with the
71
- highest tier-weighted headroom. Save its `--json` output in private evidence
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).
@@ -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
- Set `worktreeCleanup` to `off` for every Axstack project before dispatch;
11
- Axstack preserves author worktrees and salvages evidence before retirement.
12
- The driver reads back this setting via `t3_project_read` where exposed, or
13
- records the setup limitation.
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 two opt-in systemd user timers as scheduler exceptions:
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
- Both run stateless scripts, keep no workflow state and launch no agent.
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
- A bound T3 schedule wakes the driver thread on a normal 30-minute cadence.
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 a resumed question run restore five minutes. Human-only waits use 60 minutes
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
- A T3 "stopped watching" notice triggers a PR re-check and native re-arm in that same turn.
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 account selection and schedule recreation.
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 exceptions are the two opt-in
134
- systemd user timers described in [New-chat default sync](#new-chat-default-sync)
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
@@ -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), `pick-instance.js` (dispatch account),
91
- `pr-digest.js` (PR discovery), `archive-evidence.js` (evidence archive), and
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
- `account-usage.js` shares usage retrieval and the five-minute cache between
97
- picker and sync. The opt-in systemd user unit files ship in `axstack/systemd/`;
98
- installation copies them as assets and never enables either timer.
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; read-only roles use async `delegate_task`, while authors
223
- use `t3_thread_launch` in their own SHA-pinned worktrees. The standing block
224
- authorizes writer launch; it grants no push, merge, release, or host mutation.
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, while the mixed checker,
253
- `axstack-research-web-google`, `axstack-research-x`, and both arena candidate launch-by-agent-id
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 both cross-provider research routes
257
- and both arena candidate seats;
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` and `axstack-monitor` adopt Haiku 5.5 high with
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 these roles without substitution, including Haiku 4.5.
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`. The optional `axstack-explore-codebase-flash` seat uses
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 and `axstack-research-web-google` have provider
309
- `antigravity`; mixed `axstack-research-x` has provider `grok`. All three use
310
- `model: null` with notes authorizing their agent-ID routes; T3 resolves Grok's
311
- exact model from the first entry for that provider in saved capabilities.
312
- For Antigravity `model:null` roles, select the first listed model whose ID ends
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|antigravity> --capabilities <saved-json> <--class <class>|--model <id|null>> --effort <level> [--exclude <id>]
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; outside bounded same-provider,
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 driver account re-selection at turn boundaries and schedule rebinding.
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
- For the picker score, account eligibility, dispatch exits and driver stay rule,
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 or account re-selection.
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` and
136
- `axstack-monitor` adopt Haiku 5.5 high, with class `haiku` and exact pin
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 those roles without substitution. `codex-only` keeps its Codex
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`, and an optional Antigravity Flash medium seat in `mixed`.
141
- In `claude-only`, Luna and Flash are intentionally absent; Flash is also
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 and Google web-research route use provider
175
- `antigravity`; the X route uses `grok`. Those agent-ID routes retain
176
- `model: null` notes and resolve the exact model from the first provider entry
177
- in saved T3 capabilities. Empty Antigravity catalogs hold. Missing or
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; outside bounded same-provider, same-model account selection among
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. Read-only roles use async `delegate_task`; reviewers and investigators
197
- receive driver-made disposable detached checkouts pinned to candidate and base.
198
- Authors use `t3_thread_launch` in their own SHA-pinned worktrees. Repairs return
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. Launched writers
207
- send their marker to the driver, which also verifies terminal `t3_thread_wait`,
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, Grok and
227
- Antigravity candidates, including premise and smallest-change/do-nothing
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 parked on the decision.
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 parked on it.
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 and wake.
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 parked
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 parked on the decision.
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: CLI proxy, account pooling behind a proxy or shared session, and IP
563
- routing; local CI contention handling is deferred. Quota-driven scheduling or
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 30-minute fallback, 5-minute recovery, and 60-minute human wait
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.49.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",