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.
- package/LICENSE +21 -0
- package/README.md +132 -0
- package/bin/axstack.js +396 -0
- package/docs/installation.md +239 -0
- package/docs/workflows.md +220 -0
- package/package.json +40 -0
- package/profiles/presets/claude-only.json +194 -0
- package/profiles/presets/codex-only.json +194 -0
- package/profiles/presets/mixed.json +194 -0
- package/skills/axstack/SKILL.md +81 -0
- package/skills/axstack/references/automations.md +368 -0
- package/skills/axstack/references/candidate-publication.md +45 -0
- package/skills/axstack/references/contracts.md +102 -0
- package/skills/axstack/references/lifecycle.md +137 -0
- package/skills/axstack/references/orca-runtime.md +109 -0
- package/skills/axstack/references/pr-shape.md +39 -0
- package/skills/axstack/references/routing.md +129 -0
- package/skills/axstack/references/run-record.md +109 -0
- package/skills/axstack-align/SKILL.md +121 -0
- package/skills/axstack-audit/SKILL.md +137 -0
- package/skills/axstack-audit/references/record.md +28 -0
- package/skills/axstack-debug/SKILL.md +157 -0
- package/skills/axstack-debug/references/packet.md +80 -0
- package/skills/axstack-explain/SKILL.md +66 -0
- package/skills/axstack-explain/references/visual-qa.md +15 -0
- package/skills/axstack-implement/SKILL.md +164 -0
- package/skills/axstack-improve/SKILL.md +69 -0
- package/skills/axstack-relay/SKILL.md +102 -0
- package/skills/axstack-research/SKILL.md +57 -0
- package/skills/axstack-research/references/checklist.md +25 -0
- package/skills/axstack-review/SKILL.md +343 -0
- package/skills/axstack-spec/SKILL.md +67 -0
- package/skills/axstack-tickets/SKILL.md +86 -0
- package/skills/axstack-watch/SKILL.md +160 -0
- package/skills/axstack-watch/references/repair-publication.md +69 -0
- package/skills/axstack-watch/references/watch-runtime.md +60 -0
- package/src/capabilities.js +138 -0
- package/src/claude-settings.js +230 -0
- package/src/installer.js +980 -0
- package/src/instructions.js +100 -0
- package/src/locations.js +43 -0
- package/src/manifest.js +251 -0
- package/src/posixpath.js +108 -0
- 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
|
+
}
|