axstack 0.9.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 (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/bin/axstack.js +396 -0
  4. package/docs/installation.md +239 -0
  5. package/docs/workflows.md +220 -0
  6. package/package.json +40 -0
  7. package/profiles/presets/claude-only.json +194 -0
  8. package/profiles/presets/codex-only.json +194 -0
  9. package/profiles/presets/mixed.json +194 -0
  10. package/skills/axstack/SKILL.md +81 -0
  11. package/skills/axstack/references/automations.md +368 -0
  12. package/skills/axstack/references/candidate-publication.md +45 -0
  13. package/skills/axstack/references/contracts.md +102 -0
  14. package/skills/axstack/references/lifecycle.md +137 -0
  15. package/skills/axstack/references/orca-runtime.md +109 -0
  16. package/skills/axstack/references/pr-shape.md +39 -0
  17. package/skills/axstack/references/routing.md +129 -0
  18. package/skills/axstack/references/run-record.md +109 -0
  19. package/skills/axstack-align/SKILL.md +121 -0
  20. package/skills/axstack-audit/SKILL.md +137 -0
  21. package/skills/axstack-audit/references/record.md +28 -0
  22. package/skills/axstack-debug/SKILL.md +157 -0
  23. package/skills/axstack-debug/references/packet.md +80 -0
  24. package/skills/axstack-explain/SKILL.md +66 -0
  25. package/skills/axstack-explain/references/visual-qa.md +15 -0
  26. package/skills/axstack-implement/SKILL.md +164 -0
  27. package/skills/axstack-improve/SKILL.md +69 -0
  28. package/skills/axstack-relay/SKILL.md +102 -0
  29. package/skills/axstack-research/SKILL.md +57 -0
  30. package/skills/axstack-research/references/checklist.md +25 -0
  31. package/skills/axstack-review/SKILL.md +343 -0
  32. package/skills/axstack-spec/SKILL.md +67 -0
  33. package/skills/axstack-tickets/SKILL.md +86 -0
  34. package/skills/axstack-watch/SKILL.md +160 -0
  35. package/skills/axstack-watch/references/repair-publication.md +69 -0
  36. package/skills/axstack-watch/references/watch-runtime.md +60 -0
  37. package/src/capabilities.js +138 -0
  38. package/src/claude-settings.js +230 -0
  39. package/src/installer.js +980 -0
  40. package/src/instructions.js +100 -0
  41. package/src/locations.js +43 -0
  42. package/src/manifest.js +251 -0
  43. package/src/posixpath.js +108 -0
  44. package/src/roles.js +142 -0
@@ -0,0 +1,239 @@
1
+ # Installation
2
+
3
+ Axstack's Bun CLI installs owned chat skills plus one selected role snapshot and
4
+ checks host capabilities. Orca is the only supported active runtime. The CLI
5
+ does not dispatch agents, edit Orca settings, run a scheduler, or maintain a
6
+ workflow database.
7
+
8
+ Requirements: Bun >=1.3.14, Git, `gh`, the `gh stack` extension, and a running
9
+ Orca whose version-matched `orchestration` and `orca-cli` guides are available.
10
+ There are no runtime dependencies. Filesystem access uses Bun-backed `node:fs`
11
+ and `node:fs/promises`; no other Node runtime contract is introduced.
12
+
13
+ ## Commands
14
+
15
+ ### Install
16
+
17
+ ```text
18
+ axstack install --preset <mixed|codex-only|claude-only> --bundle <dir> --skills-dir <dir> [--instructions <file>] [--claude-settings <file>|--no-claude-settings] [--harness <name>] [--force] [--yes]
19
+ ```
20
+
21
+ - `--preset` is required. `codex` and `claude` are aliases for the canonical
22
+ `codex-only` and `claude-only` names. Axstack never infers a preset from the
23
+ harness, available tools, provider credentials, subscriptions, or quota.
24
+ - `--bundle` defaults to the package root and contains `skills/` plus
25
+ `profiles/presets/*.json`.
26
+ - `--skills-dir` is required unless a verified harness default resolves it.
27
+ - `--instructions` selects the instruction file that receives Axstack's owned
28
+ marker block. `--harness claude` defaults to `~/.claude/CLAUDE.md`;
29
+ `--harness codex` defaults to `$CODEX_HOME/AGENTS.md` or `~/.codex/AGENTS.md`.
30
+ - `--harness` may resolve the documented `claude`, `codex`, or `opencode`
31
+ skill directory. Grok remains explicit-path only.
32
+ - `--claude-settings` and `--no-claude-settings` control the existing Claude
33
+ Code subagent-default transaction. They do not configure Orca roles.
34
+ - `--force` may replace an edited owned asset; it never adopts or removes
35
+ unrelated state.
36
+ - `--yes` confirms writes under the user's home directory. Tests use temporary
37
+ homes and fixtures only.
38
+
39
+ ## Role presets
40
+
41
+ The selected bundle input is one of:
42
+
43
+ ```text
44
+ profiles/presets/mixed.json
45
+ profiles/presets/codex-only.json
46
+ profiles/presets/claude-only.json
47
+ ```
48
+
49
+ Each has exactly `{ "version": 1, "roles": [...] }` with the same 21 stable
50
+ role IDs. Installation writes `<skills-dir>/axstack/roles.json` as
51
+ `{ "version": 1, "preset": "<selected preset>", "roles": [...] }` and records
52
+ its ownership hash like every other installed skill asset. There is no second
53
+ role store and no Orca configuration merge.
54
+
55
+ ### Check
56
+
57
+ ```text
58
+ axstack check [--bundle <dir>] [--instructions <file>] [--skills-dir <dir>|--harness <name>]
59
+ ```
60
+
61
+ The check separates Bun/Git/`gh stack` availability, resolved Orca executable,
62
+ runtime readiness, required runtime-owned guide discovery, and bundle validity.
63
+ With an instruction target, it separately reports whether the marker block is
64
+ owned, missing, unowned, edited, or bound to a different path.
65
+ It must honor Orca's executable-resolution rules, including the Linux screen
66
+ reader name collision, and must not switch binaries after a failed resolution.
67
+
68
+ A successful check is not provider/model availability, effective permission,
69
+ skill reload, task execution, mobile delivery, or end-to-end compatibility
70
+ proof. Those require their own runtime receipts.
71
+
72
+ ### Uninstall
73
+
74
+ ```text
75
+ axstack uninstall --skills-dir <dir> [--instructions <file>] [--claude-settings <file>|--no-claude-settings] [--harness <name>] [--force] [--yes]
76
+ ```
77
+
78
+ Uninstall removes only unchanged Axstack-owned files whose current bytes match
79
+ the manifest. Edited, custom, unknown, and unrelated files survive. Directories
80
+ are pruned only when empty, and the target root is never removed.
81
+
82
+ ## Owned instruction block
83
+
84
+ The deterministic `<!-- axstack:begin v1 -->` / `<!-- axstack:end -->` block
85
+ contains the target-derived Axstack entry path and model-free routing prose. It
86
+ also routes subagents, delegated workers, reviewers, and cross-harness work
87
+ through Orca's `orca` CLI and forbids harness-native subagent delegation.
88
+
89
+ Create, update, repeated install, check, and uninstall preserve every byte and
90
+ the file mode outside the markers. The manifest binds the canonical instruction
91
+ path and exact block hash while retaining older file/profile hash semantics.
92
+ Uninstall removes only an unchanged owned block plus the recorded separator;
93
+ the instruction file itself remains. Edited or unowned blocks, malformed or
94
+ duplicate markers, symlinks, concurrent edits, and legacy Haoshoku routing text
95
+ are preserved or refused with an explicit report. Combined failures roll back
96
+ skills, instruction bytes and modes, Claude settings, and manifest state; any
97
+ failed recovery is reported as incomplete.
98
+
99
+ `axstack install` exits with status 1 when the selected instruction block is in
100
+ conflict and was preserved, so scripts can detect that routing was not
101
+ installed. A clean or idempotent install exits 0; preserved edits to ordinary
102
+ owned skill files keep their existing non-failing install semantics.
103
+
104
+ ## Safety and ownership behavior
105
+
106
+ The complete bundle is validated before writes:
107
+
108
+ - every skill directory contains a real `SKILL.md`;
109
+ - bundle and destination symlink/escape checks pass;
110
+ - each preset is a real JSON file with version 1, a non-empty `roles` array,
111
+ the filename's selected identity supplied by the caller, and the same role-ID
112
+ set as its peers;
113
+ - every role has valid preserved fields, while the mixed checker and the
114
+ unavailable adviser in each single-provider preset explicitly permit
115
+ `model: null`;
116
+ - obsolete runtime configuration flags fail before mutation with migration
117
+ guidance.
118
+
119
+ Reinstalls are idempotent. Unknown files are never silently overwritten or
120
+ adopted. Edited owned files keep their previous ownership baseline unless
121
+ `--force` explicitly replaces them. Owned files the bundle no longer ships
122
+ are stale: a pristine stale copy (on-disk bytes still match the manifest
123
+ hash) is deleted, dropped from the written manifest, and reported as
124
+ `removed`; an edited or already-missing stale copy is left alone, keeps its
125
+ manifest hash, and stays reported as `stale`. Only manifest-owned paths are
126
+ ever deleted, through the same ownership-hash guard uninstall uses. The stale
127
+ plan is validated read-only before any write, and each deletion re-checks
128
+ its target through that guard immediately before removal, so a copy edited
129
+ during the run is preserved rather than deleted. Partial failures restore overwritten files, restore removed stale
130
+ files with their prior bytes and mode,
131
+ remove files created by that run, restore Claude settings/sidecar state, and
132
+ leave the prior manifest intact. An incomplete rollback reports exact manual
133
+ recovery needs.
134
+
135
+ Manifest validation covers version, owned file shape, safe relative paths, and
136
+ symlink rejection. The role snapshot is ordinary owned data. Invalid or edited
137
+ destination roles are preserved and reported rather than treated as permission
138
+ to rewrite them.
139
+
140
+ ## Role behavior after installation
141
+
142
+ The runtime reads `roles.json` relative to the actually loaded `axstack` skill.
143
+ A new run records the selected preset plus all 21 role rows. An active run keeps
144
+ that snapshot after a later preset install unless the user explicitly changes
145
+ it and accepts the resulting evidence invalidation.
146
+
147
+ The mixed checker has `model: null`; checker dispatch is held and never inherits
148
+ a provider default. The single-provider presets configure the checker. Their
149
+ unavailable adviser remains an explicit same-provider `model: null` role, which
150
+ does not make installation unready; Align and Spec still hold until both Astra
151
+ and Fable can return independent receipts. The current chat drives on whatever
152
+ model runs it; no preset carries a driver role. Every other missing, invalid, unsupported, or unavailable role value holds only
153
+ the affected work. There is no model substitution, subscription inference, or
154
+ quota routing.
155
+
156
+ `modeId` and similar permission fields remain conservative declared intent.
157
+ They do not prove the effective Orca launcher mode, sandboxing, or permission
158
+ parity. Requested provider/model/effort, input acceptance, effective session
159
+ settings, and completed behavior are separate evidence classes.
160
+
161
+ ## Claude Code subagent default
162
+
163
+ The preserved Claude-settings feature manages only
164
+ `env.CLAUDE_CODE_SUBAGENT_MODEL = "opus"` when its existing ownership and
165
+ availability conditions allow. It does not change the main conversation,
166
+ select an Axstack role, force built-in agents, or configure Orca.
167
+
168
+ Axstack merges that one key and preserves all unrelated settings and environment
169
+ values. A pre-existing value is preserved and never adopted. Missing Claude,
170
+ `--no-claude-settings`, or an unconfirmed home write produces a documented skip.
171
+ New settings and ownership files use mode `0600`; existing modes survive.
172
+ Malformed JSON, symlinks, or a conflicting saved path fail before mutation.
173
+
174
+ Ownership remains per key and shared across skill roots through the existing
175
+ `.axstack-settings.json` sidecar. A later installation can join ownership
176
+ without rewriting the value. Uninstall drops one root and removes the key only
177
+ when the last owner leaves and the value remains unchanged. A user edit always
178
+ survives.
179
+
180
+ ## Harness skill locations
181
+
182
+ | Harness | Default directory | Status |
183
+ | --- | --- | --- |
184
+ | Claude | `~/.claude/skills` | documented upstream |
185
+ | Codex | `$CODEX_HOME/skills` (default `~/.codex/skills`) | documented upstream |
186
+ | OpenCode | `~/.config/opencode/skills` | documented upstream |
187
+ | Grok | explicit `--skills-dir` only | auto-discovery unverified |
188
+
189
+ Prefer explicit paths and current upstream CLI guidance. Installing files does
190
+ not prove that a running harness reloaded them.
191
+
192
+ ## Runtime guide discovery
193
+
194
+ The installed Axstack bundle does not own or copy Orca's guides. At an action
195
+ boundary, the skill resolves one Orca executable and loads that binary's
196
+ version-matched `orchestration` and `orca-cli` guides. Automation guidance is
197
+ loaded only for the watch branch. Missing discovery is a setup gap, not a reason
198
+ to fall back or invent commands.
199
+
200
+ Native watch activation is currently held: provider selection exists, but
201
+ model, effort, permission, and bounded-expiry support do not preserve the
202
+ accepted contract. Installation creates no production schedule and adds no
203
+ custom scheduler.
204
+
205
+ ## Historical migration
206
+
207
+ Older releases installed Paseo profiles and used Paseo for execution. Those
208
+ profile records are inert historical manifest provenance after upgrade: they
209
+ do not trigger configuration reads, writes, path-binding refusal, readiness
210
+ checks, uninstall mutation, runtime fallback, or timer cleanup. Preserve them
211
+ for audit and report the explicit migration path.
212
+
213
+ The next ordinary upgrade without `--force` removes pristine retired
214
+ `axstack-handoff` and `axstack-docs` copies directly: they are deleted,
215
+ dropped from the manifest, and reported as removed, while retaining edited
216
+ or already-missing retired copies of axstack-handoff and axstack-docs as
217
+ recorded, preserved stale entries. The
218
+ retired `axstack-driver` row leaves `roles.json` on the next install because
219
+ that file is rewritten as one owned snapshot. A --force uninstall/install
220
+ cycle remains only for discarding edited copies you have decided to abandon;
221
+ edited, custom, and unknown assets otherwise survive. `axstack-explain`
222
+ supersedes the old docs route. Full ownership transfer uses Orca's runtime-owned
223
+ handoff guidance and still requires explicit recipient acceptance.
224
+
225
+ Do not mutate live historical configuration during development or migration
226
+ tests. Host cutover, old-timer cleanup, release installation, and global cleanup
227
+ need separate authority and verified backups.
228
+
229
+ ## Examples
230
+
231
+ ```sh
232
+ axstack install --preset mixed --bundle ./bundle --skills-dir /tmp/ax-skills --instructions /tmp/AGENTS.md
233
+ axstack install --preset mixed --bundle ./bundle --skills-dir /tmp/ax-skills --instructions /tmp/AGENTS.md
234
+ axstack check --bundle ./bundle --skills-dir /tmp/ax-skills --instructions /tmp/AGENTS.md
235
+ axstack uninstall --skills-dir /tmp/ax-skills --instructions /tmp/AGENTS.md
236
+ ```
237
+
238
+ The second install should report no changes. These scratch examples do not
239
+ activate Orca sessions or schedules.
@@ -0,0 +1,220 @@
1
+ # Axstack workflows
2
+
3
+ Chat drives execution. Orca is the only supported active runtime and owns
4
+ worktrees, sessions, supervised dispatch, messaging, settlement, and handoff.
5
+ Axstack owns workflow policy, role data, evidence, and the private derived run
6
+ record. It adds no daemon, scheduler, runtime database, or escalation engine.
7
+
8
+ The bundled skills are self-contained. Retiring another skill does not claim
9
+ Axstack implements that skill's specialist capability.
10
+
11
+ ## Routing and scope identity
12
+
13
+ `axstack` classifies the request and loads only the applicable phase plus shared
14
+ references for routing, lifecycle, Orca runtime boundaries, role/model/risk
15
+ contracts, the run record, and PR shape.
16
+
17
+ Direct routes need no spec ceremony:
18
+
19
+ - `axstack-research` answers one bounded source-backed question.
20
+ - `axstack-explain` separates implemented, intended, tested, live, and unknown
21
+ behavior; complex visuals receive exact-artifact QA where applicable.
22
+ - `axstack-improve` returns a small ranked set of evidenced improvement
23
+ candidates without editing code.
24
+ - `axstack-debug` builds a red loop, diagnoses to root cause, escalates hard
25
+ bugs through adviser-directed investigator fan-out, and hands off a
26
+ classified repair without landing a change.
27
+ - Peer review uses the linked issue, PR description, and repository rules as
28
+ untrusted intent evidence.
29
+ - Existing-PR maintenance uses one accepted maintenance snapshot.
30
+ - Ordinary resume reconciles existing ownership and launches no handoff.
31
+
32
+ Small, clear, bounded one-PR work uses its request or selected issue plus
33
+ explicit acceptance checks and exclusions as a snapshotted small-change intent.
34
+ Substantial work requires an approved spec and matching ticket map, including
35
+ multi-PR or stacked work. Unclear work is clarified, then classified. A deeper phase checks
36
+ the same identity before action; missing preparation names the gap and holds
37
+ only affected work.
38
+
39
+ ## Role presets
40
+
41
+ Installation requires one explicit canonical preset. The three bundle files
42
+ under `profiles/presets/` each contain exactly
43
+ `{ "version": 1, "roles": [...] }` and the same 21 stable IDs.
44
+
45
+ The current chat drives on whatever model runs it; no preset carries a driver
46
+ role.
47
+
48
+ | Preset | Author | Ordered peer reviewers | Astra / Fable advisers | Auditor |
49
+ | --- | --- | --- | --- | --- |
50
+ | `mixed` | Sol medium | Sol medium; Opus medium | Astra high / Fable high | Luna max |
51
+ | `codex-only` | Sol medium | Sol medium; Terra xhigh | Astra high / unavailable | Luna max |
52
+ | `claude-only` | Opus medium | Opus medium; Sonnet xhigh | unavailable / Fable high | Sonnet xhigh |
53
+
54
+ The installed `<skills-dir>/axstack/roles.json` adds the selected preset name:
55
+ `{ "version": 1, "preset": "<name>", "roles": [...] }`. The runtime reads it
56
+ relative to the actually loaded `axstack` skill and records the whole table for
57
+ a new run. Active runs retain their snapshot after later installation changes.
58
+
59
+ Peer roles keep the stable IDs `axstack-reviewer-primary` and
60
+ `axstack-reviewer-secondary`; their provider/model mappings come only from the
61
+ selected preset.
62
+
63
+ The unavailable adviser in each single-provider preset stays explicitly
64
+ `model: null` within that provider's bounds. Installer readiness accepts that
65
+ intentional absence, but Align and Spec hold because both independent receipts
66
+ are required. The mixed checker also stays explicitly `model: null`; checker work holds instead of
67
+ launching a provider default. Missing or unavailable roles hold only affected
68
+ work. Model, effort, and permission values express requested intent until real
69
+ Orca receipts establish the effective session. Stored `modeId` is not permission
70
+ parity or a sandbox. No route is inferred from subscription, quota, harness,
71
+ provider defaults, or installed tools, and no model is substituted silently.
72
+
73
+ ## Orca runtime boundary
74
+
75
+ Immediately before dispatch, delivery processing, settlement, recovery, or
76
+ handoff, load the shared `skills/axstack/references/orca-runtime.md`. It resolves
77
+ one Orca executable, loads that binary's version-matched `orchestration` and
78
+ `orca-cli` guides, and follows their advertised schemas. Axstack does not vendor
79
+ the guides or restate a competing command protocol.
80
+
81
+ Supervised work uses native Run, Task, and Dispatch identity. Preserve actual
82
+ terminal, agent, worktree, requested/effective role, and revision receipts.
83
+ `input_accepted` proves only terminal input; `turn_started` and session
84
+ inspection are separate. Trust, permission, hook-review, authentication, and
85
+ model prompts are visible holds. Never answer trust or permission prompts for a
86
+ worker. Reconcile the existing attempt through the runtime guide before retry,
87
+ so one candidate never gains a duplicate writer.
88
+
89
+ Process each whole delivery before acknowledgment. A `worker_done` belongs only
90
+ to its expected active Task and Dispatch, and its revision evidence still needs
91
+ verification. `consumer_fenced` stops consumption under the stale identity;
92
+ never forge, borrow, or bypass a coordinator identity. Runtime settlement owns
93
+ reuse, retention, and release. A `user_takeover` terminal remains retained and
94
+ is not reused or closed as cleanup.
95
+
96
+ Ordinary restart reconciles the same owner, author, Task, Dispatch, worktree,
97
+ revisions, and pending receipts. Idle, silence, contact loss, or missing status
98
+ never proves exit. Authorized fixes return to the same original author when its
99
+ session and evidence remain valid.
100
+
101
+ ## Phases
102
+
103
+ - `axstack-align` maps facts and dependencies, asks prioritized questions, and
104
+ consults Astra and Fable independently with the same bounded evidence and
105
+ question. It synthesizes disagreements and reuses unchanged receipts.
106
+ - `axstack-spec` writes observable acceptance, exclusions, decisions, and one
107
+ user-approved revision baseline.
108
+ - `axstack-tickets` maps user-visible capabilities to dependency-aware internal
109
+ tasks. Linear is the default selected store with access preflight; repository
110
+ Markdown is explicit fallback. Only the driver mutates lifecycle state.
111
+ - `axstack-implement` uses strict behavioral RED, GREEN, then refactor. The
112
+ narrow accepted structure-preserving route uses old-green and the same check
113
+ new-green. One author writes and returns a local receipt without pushing. The
114
+ owner reconciles it, publishes the unchanged commits through `gh stack`, and
115
+ confirms the remote SHA before review. Local green and CI green remain
116
+ separate evidence.
117
+ - `axstack-review` gives peer PRs two isolated same-brief reviewers and authored
118
+ PRs one eligible cross-family/preset-mapped reviewer. All cover security,
119
+ correctness, integration, requirements, design, and simplicity. Report-only
120
+ never publishes; authorized submission binds the exact commit.
121
+ - `axstack-watch` adopts an existing PR under observation-only, peer, or
122
+ authorized-maintenance scope. A changed head or comment is an event, not
123
+ repair authority. Repairs return to the original author only for a
124
+ run-launched session and receive refreshed authored review before scoped
125
+ `gh stack` publication. `gh stack` publication does not apply to automation
126
+ repairs: the automation session (or a dispatched `axstack-author`) repairs in
127
+ a per-PR child worktree, the local SHA is reviewed and gated, and the repair
128
+ lands by fast-forward `git push` after `proceed`.
129
+ - `axstack-audit` separates execution outcome, procedure, and measurement
130
+ coverage with evidenced denominators; it proposes but never self-edits.
131
+
132
+ One Orca execution host owns a run, one persistent owner owns each PR, and one
133
+ writer owns each candidate. Fanout has no fixed PR count; it follows real
134
+ dependencies, writer isolation, host capacity, and spending limits. Each PR has
135
+ one theme and a measured size under the shared
136
+ [PR-shape policy](../skills/axstack/references/pr-shape.md). The human merges
137
+ by default; review approval never grants merge authority.
138
+ For the rationale band, the autonomous driver records a cohesion rationale. The exception band
139
+ requires a reasonable split attempt and full exception record. These are
140
+ autonomous driver choices; size alone never requires user approval.
141
+
142
+ ## Explicit handoff
143
+
144
+ Only an explicit user request transfers ownership. Record the intended
145
+ recipient, exact scope, revisions, authority, and pending request, then follow
146
+ the runtime-owned `orca-cli` handoff guide. Input acceptance and turn start do
147
+ not transfer ownership. The recipient must explicitly accept the exact handoff;
148
+ only then does the prior owner stop. Missing capability or ambiguous acceptance
149
+ keeps the current owner and a resumable record.
150
+
151
+ ## Notifications and relay
152
+
153
+ Serious security, downtime, data-loss, and major-design risks are raised in a
154
+ prompt immediately and hold dependent dangerous work. This is not a runtime
155
+ gate. An applicable `Notification policy` may use `axstack-relay`; otherwise the
156
+ current Orca conversation is the fallback. The relay delivers one-way through
157
+ native `hermes send`: it checks CLI lookup and the configured target, binds the
158
+ recipient, deduplicates on the run record, records the returned `message_id`,
159
+ and treats Telegram replies as neither receipts nor authority. Delivery failure
160
+ never clears the underlying hold.
161
+
162
+ Healthy watch observations remain quiet. The optional `axstack-monitor` is
163
+ read-only and never sends; `axstack-watchdog` never mutates GitHub and performs
164
+ exactly one kind of send, a gate-authorized automation-health escalation
165
+ recorded in `watchdog.json`.
166
+
167
+ ## Native watch automations
168
+
169
+ The accepted monitoring contract is a five-minute driver automation, an hourly
170
+ watchdog, quiet healthy snapshots, deduplicated actionable events, verified
171
+ handshakes, one owner, and one shared default 24-hour deadline.
172
+
173
+ The user lifted the native-watch hold by user decision on 2026-09-16. The driver
174
+ automation is a mutating owner for the PRs it handles; the watchdog keeps the
175
+ independent read-only contract. The driver is the automation session itself,
176
+ with no `axstack-monitor` or `axstack-owner` role row. Native Orca automations still select only a
177
+ provider, so the driver records its model identity every tick and the watchdog
178
+ treats a mismatch as a safety hold. Axstack adds no custom scheduler, polling
179
+ loop, or historical runtime fallback.
180
+
181
+ ## Automations
182
+
183
+ Two native Orca automations run the installed skills without a human in the
184
+ loop: a driver every five minutes that discovers own and peer PRs, repairs own
185
+ PRs in the mutation allowlist, and reviews peer PRs; and a read-only
186
+ watchdog every hour that reports automation health. After every
187
+ mode-required reviewer settles, the `axstack-auditor` gate returns
188
+ exactly one token, `escalate` or `proceed`.
189
+ `escalate` records and notifies a hold and publishes nothing.
190
+ Only `proceed` plus no unresolved validated blocking finding permits publication
191
+ (a fast-forward push or one `COMMENT` review). The approved contract is
192
+ `docs/specs/orca-automations.md`; the skill-facing restatement an automation
193
+ session loads is `skills/axstack/references/automations.md`.
194
+
195
+ ## Run record and evidence
196
+
197
+ Substantive delegated or resumable work uses one compact `progress.md` rooted at
198
+ `git rev-parse --path-format=absolute --git-common-dir`. It is shared across
199
+ worktrees but never tracked. The driver alone writes it; actual Orca state, Git
200
+ revisions, forge state, and approved scope remain authoritative.
201
+
202
+ Structural checks verify packaging and declared policy, not agent behavior.
203
+ Predeclared scenario evaluation is qualitative behavior evidence, not deterministic proof. Runtime
204
+ compatibility requires actual guide discovery, role/session evidence, worktree
205
+ and Dispatch receipts, completion delivery, and cleanup as applicable. Mobile
206
+ completion and reply behavior remain unverified.
207
+
208
+ ## Historical migration
209
+
210
+ Older releases used Paseo for orchestration. Legacy profile ownership remains
211
+ inert provenance and may be cleaned only through the explicit migration path;
212
+ it never authorizes active configuration reads, writes, timer changes, or
213
+ fallback. Release, installation, cutover, mobile pairing, and old-timer cleanup
214
+ require separate authority.
215
+
216
+ ## Runtime
217
+
218
+ Bun >=1.3.14, with no runtime dependencies. Workflow checks use
219
+ `bun test tests/workflows/`; the only approved Node built-ins are Bun-backed
220
+ `node:fs` and `node:fs/promises`.
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "axstack",
3
+ "version": "0.9.0",
4
+ "description": "Axstack installer and setup CLI: installs owned chat skills and role data, configures supported harness settings, and checks Orca capabilities.",
5
+ "keywords": [
6
+ "claude-code",
7
+ "codex",
8
+ "orca",
9
+ "agents",
10
+ "skills",
11
+ "orchestration"
12
+ ],
13
+ "homepage": "https://github.com/axatbhardwaj/axstack#readme",
14
+ "bugs": "https://github.com/axatbhardwaj/axstack/issues",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/axatbhardwaj/axstack.git"
18
+ },
19
+ "author": "Axat Bhardwaj",
20
+ "type": "module",
21
+ "engines": {
22
+ "bun": ">=1.3.14"
23
+ },
24
+ "bin": {
25
+ "axstack": "bin/axstack.js"
26
+ },
27
+ "files": [
28
+ "bin/",
29
+ "src/",
30
+ "skills/",
31
+ "profiles/",
32
+ "docs/installation.md",
33
+ "docs/workflows.md"
34
+ ],
35
+ "scripts": {
36
+ "test": "bun test",
37
+ "test:all": "bun test"
38
+ },
39
+ "license": "MIT"
40
+ }