acstack 0.0.0-stage → 0.47.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +19 -0
- package/LICENSE +21 -0
- package/README.md +389 -2
- package/THIRD_PARTY_NOTICES +14 -0
- package/TROUBLESHOOTING.md +225 -0
- package/agents/codex/frontend-verifier.toml +352 -0
- package/agents/codex/task-checker.toml +345 -0
- package/agents/codex/task-executor.toml +157 -0
- package/agents/codex/test-writer.toml +149 -0
- package/agents/frontend-verifier.md +351 -0
- package/agents/task-checker.md +344 -0
- package/agents/task-executor.md +156 -0
- package/agents/test-writer.md +148 -0
- package/assets/playwriter-bridge/build-launcher.ps1 +32 -0
- package/assets/playwriter-bridge/doctor.ps1 +450 -0
- package/assets/playwriter-bridge/launcher-src.cs +131 -0
- package/assets/playwriter-bridge/opener.js +330 -0
- package/assets/playwriter-bridge/opener.ps1 +63 -0
- package/assets/playwriter-bridge/register-tasks.ps1 +328 -0
- package/assets/playwriter-bridge/relay.ps1 +50 -0
- package/assets/playwriter-bridge/stop.ps1 +125 -0
- package/assets/playwriter-bridge/sync.ps1 +271 -0
- package/assets/playwriter-bridge/tunnel.ps1 +325 -0
- package/assets/playwriter-bridge/vm-free-port.sh +166 -0
- package/assets/terminal-workspace/client-keybindings.md +87 -0
- package/assets/terminal-workspace/config.example.yaml +334 -0
- package/assets/terminal-workspace/setup.sh +4404 -0
- package/cli/README.md +47 -0
- package/cli/bin/acstack.js +3 -0
- package/cli/dist/index.js +25984 -0
- package/cli/dist/index.js.map +7 -0
- package/cli/package.json +59 -0
- package/docs/adr/0001-ste-writing-standard.md +16 -0
- package/docs/adr/0002-version-gate-not-auto-bump.md +35 -0
- package/docs/adr/0003-handoff-ack-command.md +19 -0
- package/docs/adr/0004-dev-setup-per-host.md +13 -0
- package/docs/adr/0005-two-orchestrators-per-host.md +25 -0
- package/docs/adr/0006-document-opener-service.md +89 -0
- package/docs/adr/0007-lead-check-reads-the-transcript.md +87 -0
- package/docs/adr/0008-cli-audits-skill-interviews.md +37 -0
- package/docs/adr/0009-verify-the-write-not-the-writer.md +51 -0
- package/docs/adr/0010-promote-dev-to-main-by-fast-forward.md +115 -0
- package/docs/adr/0011-node-header-is-the-edge-encoding.md +20 -0
- package/docs/adr/0012-node-kind-is-a-closed-set-of-five.md +31 -0
- package/docs/adr/0013-the-diagram-renderer-is-pure.md +23 -0
- package/docs/adr/0014-reading-a-node-hides-its-generated-diagram.md +29 -0
- package/docs/adr/0015-a-node-id-links-to-its-issue-through-an-anchor.md +37 -0
- package/docs/adr/0016-the-map-root-carries-no-status-of-its-own.md +21 -0
- package/docs/adr/0017-call-impeccable-copy-only-its-questions.md +13 -0
- package/docs/adr/index.md +17 -0
- package/docs/config-reference.md +572 -0
- package/docs/dev-setups.md +164 -0
- package/docs/migrate-0.8.md +28 -0
- package/docs/playwriter-bridge-windows.md +15 -0
- package/docs/terminal-workspace-keys.md +137 -0
- package/docs/terminal-workspace.md +1780 -0
- package/docs/workflows.md +309 -0
- package/hooks/ac-writing-style-reminder.sh +86 -0
- package/hooks/context-pressure.sh +583 -0
- package/hooks/hooks.json +50 -0
- package/hooks/session-start-handoff.sh +165 -0
- package/hooks/session-start.sh +214 -0
- package/orchestrator/AGENTS.md +532 -0
- package/output-styles/ac-writing-style.md +286 -0
- package/package.json +50 -4
- package/pi/agents/frontend-verifier.md +357 -0
- package/pi/agents/task-checker.md +348 -0
- package/pi/agents/task-executor.md +160 -0
- package/pi/agents/test-writer.md +154 -0
- package/pi/extension.ts +723 -0
- package/profiles/fullstack-python.yaml +29 -0
- package/profiles/node-typescript.yaml +23 -0
- package/profiles/python.yaml +24 -0
- package/skills/archive/SKILL.md +160 -0
- package/skills/bootstrap/SKILL.md +109 -0
- package/skills/bridge/HANDOFF.md +93 -0
- package/skills/bridge/SKILL-VM.md +292 -0
- package/skills/bridge/SKILL-WINDOWS.md +526 -0
- package/skills/bridge/SKILL.md +121 -0
- package/skills/browser-verify/SKILL.md +229 -0
- package/skills/code-review/SKILL.md +44 -0
- package/skills/commit/SKILL.md +106 -0
- package/skills/compact-and-continue/SKILL.md +241 -0
- package/skills/explore/SKILL.md +149 -0
- package/skills/grilling/SKILL.md +134 -0
- package/skills/handoff/SKILL.md +250 -0
- package/skills/handoff/launch-herdr.md +197 -0
- package/skills/handoff/launch-without-herdr.md +30 -0
- package/skills/handoff/lead-check.md +59 -0
- package/skills/handoff/outcomes.md +162 -0
- package/skills/handoff/running-agent.md +50 -0
- package/skills/handoff/watch.md +115 -0
- package/skills/host/SKILL.md +247 -0
- package/skills/host/detect-host.sh +297 -0
- package/skills/host/herdr.md +79 -0
- package/skills/host/install-herdr-block.sh +467 -0
- package/skills/host/install-orca.sh +512 -0
- package/skills/host/notes.md +97 -0
- package/skills/host/orca.md +160 -0
- package/skills/host/questions.md +163 -0
- package/skills/host/report.md +42 -0
- package/skills/implement/SKILL.md +230 -0
- package/skills/implement/decision-log.md +62 -0
- package/skills/implement/design-pass.md +32 -0
- package/skills/implement/relaxed-tdd.md +28 -0
- package/skills/map/SKILL.md +250 -0
- package/skills/map/frontend.md +227 -0
- package/skills/map/trackers/files.md +74 -0
- package/skills/map/trackers/github.md +180 -0
- package/skills/map/visuals.md +387 -0
- package/skills/new-worktree/SKILL.md +155 -0
- package/skills/new-worktree/detect-orchestrator.sh +328 -0
- package/skills/new-worktree/detect-orchestrator.test.sh +894 -0
- package/skills/new-worktree/herdr.md +84 -0
- package/skills/new-worktree/orca.md +101 -0
- package/skills/pre-commit-review/SKILL.md +242 -0
- package/skills/pre-commit-review/auto-fix.md +19 -0
- package/skills/pre-commit-review/interactive.md +35 -0
- package/skills/quick-fix/SKILL.md +125 -0
- package/skills/record-context/SKILL.md +106 -0
- package/skills/setup/SKILL.md +250 -0
- package/skills/setup/browser.md +123 -0
- package/skills/setup/design-review.md +97 -0
- package/skills/setup/first-run.md +114 -0
- package/skills/setup/report.md +68 -0
- package/skills/setup/row-fixes.md +196 -0
- package/skills/setup/terminal-workspace.md +153 -0
- package/skills/sync/SKILL.md +171 -0
- package/skills/teardown-worktree/SKILL.md +245 -0
- package/skills/teardown-worktree/detector.md +39 -0
- package/skills/teardown-worktree/herdr.md +113 -0
- package/skills/teardown-worktree/orca.md +61 -0
- package/skills/terminal-workspace/SKILL.md +249 -0
- package/skills/terminal-workspace/components.md +36 -0
- package/skills/terminal-workspace/config-choices.md +69 -0
- package/skills/terminal-workspace/emulator-keys.md +48 -0
- package/skills/terminal-workspace/headless-clipboard.md +175 -0
- package/skills/terminal-workspace/turn-off-and-update.md +104 -0
- package/skills/test-conventions/SKILL.md +59 -0
- package/skills/visual-docs/SKILL.md +246 -0
- package/skills/writing/SKILL.md +231 -0
- package/skills/writing/examples.md +153 -0
- package/skills/writing/vocabulary.md +96 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "acstack",
|
|
3
|
+
"description": "Agentic coding stack where planning grows only as far as needed: a map of decisions, tasks, checks, and handoffs behind a pluggable tracker.",
|
|
4
|
+
"version": "0.47.1",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "ac8318740"
|
|
7
|
+
},
|
|
8
|
+
"repository": "https://github.com/ac8318740/spechub",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"tdd",
|
|
12
|
+
"acstack",
|
|
13
|
+
"agentic-coding",
|
|
14
|
+
"testing",
|
|
15
|
+
"orchestrator",
|
|
16
|
+
"workflow",
|
|
17
|
+
"modular"
|
|
18
|
+
]
|
|
19
|
+
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ac8318740
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,390 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ACStack
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
ACStack is an agentic coding stack. It makes coding agents plan before they code, write tests before implementation, and keep docs matching the code.
|
|
4
|
+
|
|
5
|
+
- **ACStack aims to solve two common failure modes coding agents introduce**
|
|
6
|
+
- The agent starts building before the requirements are clear
|
|
7
|
+
- The agent writes code, then creates tests that pass against that code
|
|
8
|
+
- **ACStack has first-class support for Claude Code and pi**
|
|
9
|
+
- Claude Code installs it as a plugin
|
|
10
|
+
- pi installs it as an npm package
|
|
11
|
+
- **ACStack introduces structure around how your agent works**
|
|
12
|
+
- Every change goes through a test-writer, an implementer, and a checker
|
|
13
|
+
- Every commit updates your specs from the diff
|
|
14
|
+
- **Downside: this structure may make your agent take longer on small tweaks than necessary**
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
Q{"What kind of<br/>request is this?"} -->|"clear enough to build"| IM["Build it<br/>(/acstack:implement)"]
|
|
19
|
+
Q -->|"something stopped working"| QF["Find the root cause first<br/>(/acstack:quick-fix)"]
|
|
20
|
+
Q -->|"still has open questions"| MP["Answer them first<br/>(/acstack:map)"]
|
|
21
|
+
MP -->|"once the questions are answered"| IM
|
|
22
|
+
IM --> C["Commit, and update the docs<br/>(/acstack:commit)"]
|
|
23
|
+
QF --> C
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Every box above is section 2. The rest of this file is reference.
|
|
27
|
+
|
|
28
|
+
| What you want | Where |
|
|
29
|
+
| ------------- | ----- |
|
|
30
|
+
| Quickstart | section 1 |
|
|
31
|
+
| The three commands, and which one to use | section 2 |
|
|
32
|
+
| Configure a project and a machine | section 3 |
|
|
33
|
+
| The CLI | section 4 |
|
|
34
|
+
| Every skill | section 5 |
|
|
35
|
+
| Every agent | section 6 |
|
|
36
|
+
| Output style | section 7 |
|
|
37
|
+
| Terminal workspace | section 8 |
|
|
38
|
+
| Design principles | section 9 |
|
|
39
|
+
| Licence and credits | section 10 |
|
|
40
|
+
|
|
41
|
+
## 1. Quickstart
|
|
42
|
+
|
|
43
|
+
ACStack has first-class support for [Claude Code](https://claude.com/claude-code) and [pi](https://pi.dev).
|
|
44
|
+
|
|
45
|
+
### 1.1. Install on Claude Code
|
|
46
|
+
|
|
47
|
+
You need the Claude Code CLI and Node.js 20 or later.
|
|
48
|
+
|
|
49
|
+
Install the plugin:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
/plugin marketplace add ac8318740/spechub
|
|
53
|
+
/plugin install acstack@spechub
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Then, in your project:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
/acstack:setup
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- `/acstack:setup` detects the project type, then writes `acstack/project.yaml` with workflow settings
|
|
63
|
+
- The SessionStart hook loads the orchestrator instructions whenever it detects an ACStack project
|
|
64
|
+
- Your CLAUDE.md stays clean for project-specific content
|
|
65
|
+
- Upgrading from a version before 0.8.0 means deleting one stale `@import` line (see [docs/migrate-0.8.md](docs/migrate-0.8.md))
|
|
66
|
+
|
|
67
|
+
### 1.2. Install on pi
|
|
68
|
+
|
|
69
|
+
*The same project installs as a [pi](https://pi.dev) package. Subagents come from the `pi-subagents` package.*
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
pi install npm:pi-subagents
|
|
73
|
+
pi install npm:acstack
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Then, in your project, run `/acstack:setup`.
|
|
77
|
+
|
|
78
|
+
- Every skill runs under the same name as on Claude Code, e.g. `/acstack:map`
|
|
79
|
+
- `/acstack map` does the same
|
|
80
|
+
- Both always run the ACStack skill, even when another pi package has a skill called `map`
|
|
81
|
+
- ACStack's skills deliberately don't appear as `/skill:<name>` commands
|
|
82
|
+
- The package gives pi no skills, so `/skill:map` never runs ACStack's map
|
|
83
|
+
- The extension lists the skills in the system prompt instead, so the model still reads one when the task matches
|
|
84
|
+
- `pi/extension.ts` does what the Claude Code hooks do
|
|
85
|
+
- It links the CLI at `~/.claude/acstack/bin/acstack`
|
|
86
|
+
- It adds the orchestrator instructions to the system prompt in an ACStack project
|
|
87
|
+
- It lists ACStack's skills in the system prompt in every session
|
|
88
|
+
- It re-injects a handoff after a compaction
|
|
89
|
+
- It nudges with a continuity-versus-freshness checkpoint as the context fills
|
|
90
|
+
- Continuity keeps useful working context in the same session, using billion-context or host ACP compression when available
|
|
91
|
+
- Freshness uses `/acstack:handoff` when a fresh window or independent read helps more
|
|
92
|
+
- With no thresholds set, the first nudge comes at 200k tokens or half the window, whichever is lower
|
|
93
|
+
- The urgent nudge comes at 500k tokens or 80% of the window, whichever is lower
|
|
94
|
+
- `pi-subagents` finds the four agents through the `pi.subagents` field in `package.json`
|
|
95
|
+
- The agents use your `pi-subagents` default model
|
|
96
|
+
- ACStack warns at session start when `pi-subagents` is missing
|
|
97
|
+
- Allow delegation in `~/.pi/agent/AGENTS.md` – `pi-subagents` only delegates when your request or your instructions allow it:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
When an ACStack skill or the ACStack orchestrator says to launch a subagent, you may delegate to it.
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- Set `"toolActivation": "eager"` in `~/.pi/agent/extensions/subagent/config.json` to offer the `subagent` tool from the first turn (restart pi after)
|
|
104
|
+
- pi has no output styles, so the writing style is a toggle
|
|
105
|
+
- Run `/acstack-writing-style on` to add it to every pi session
|
|
106
|
+
- Run `/acstack-writing-style off` to remove it
|
|
107
|
+
|
|
108
|
+
## 2. The three commands, and which one to use
|
|
109
|
+
|
|
110
|
+
*Pick by what is in your way: nothing, a bug, or an unanswered question.*
|
|
111
|
+
|
|
112
|
+
Two words first, because the third command below uses them.
|
|
113
|
+
|
|
114
|
+
- **A map** is a to-do graph ACStack keeps for one piece of work
|
|
115
|
+
- **A node** is one entry on that graph: one question to answer, or one piece of work to do
|
|
116
|
+
|
|
117
|
+
The three commands:
|
|
118
|
+
|
|
119
|
+
- **The request is clear enough to build** – run `/acstack:implement`
|
|
120
|
+
- It runs the four agents of section 6 on your request
|
|
121
|
+
- A one-line change stays a one-line change
|
|
122
|
+
- **Something already built stopped working** – run `/acstack:quick-fix`
|
|
123
|
+
- It makes the agent find the root cause before it edits anything
|
|
124
|
+
- **The request still has open questions** – run `/acstack:map`
|
|
125
|
+
- The agent interviews you one round at a time
|
|
126
|
+
- Each round asks every question it can answer next
|
|
127
|
+
- Each question comes with the agent's recommended answer
|
|
128
|
+
- You provide feedback on the agent's recommended answer instead of prompting from scratch
|
|
129
|
+
- Some requests only need one question
|
|
130
|
+
- The agent writes that decision down as a short note under `docs/adr/`
|
|
131
|
+
- A big feature may need dozens of questions
|
|
132
|
+
- The agent stores those questions as a **map**
|
|
133
|
+
- You work through the map across several sessions
|
|
134
|
+
|
|
135
|
+
### 2.1. What a map holds
|
|
136
|
+
|
|
137
|
+
*`/acstack:map` builds a map only when a single conversation cannot settle every question.*
|
|
138
|
+
|
|
139
|
+
Each node carries one of five statuses.
|
|
140
|
+
|
|
141
|
+
| Status | Meaning |
|
|
142
|
+
| ------ | ------- |
|
|
143
|
+
| `fog` | anything you cannot yet articulate clearly |
|
|
144
|
+
| `open` | ready to answer or build |
|
|
145
|
+
| `claimed` | someone is working on it now |
|
|
146
|
+
| `resolved` | done |
|
|
147
|
+
| `out-of-scope` | dropped on purpose |
|
|
148
|
+
|
|
149
|
+
Each node also records six things.
|
|
150
|
+
|
|
151
|
+
- **Which earlier answer led to this question**
|
|
152
|
+
- You can read the decisions back in the order you made them
|
|
153
|
+
- **Which other nodes have to finish before this one starts**
|
|
154
|
+
- ACStack uses that to tell you what is ready to start
|
|
155
|
+
- **Who answers it**: you, or the agent working alone
|
|
156
|
+
- **What kind it is**: a destination, a standing note, a decision, research, or work
|
|
157
|
+
- **A short name**, which labels the node in a diagram
|
|
158
|
+
- **Where it lives**: a GitHub issue by default, or a markdown file under `acstack/maps/` with no GitHub remote
|
|
159
|
+
|
|
160
|
+
Almost every node explains itself with a diagram.
|
|
161
|
+
|
|
162
|
+
- The entry node draws the whole map, and collapses the parts you have finished
|
|
163
|
+
- Every other node draws its own question or its own change
|
|
164
|
+
- A legend sits under each diagram, showing only the symbols that diagram uses
|
|
165
|
+
- On GitHub you click a node in the diagram to open its issue
|
|
166
|
+
|
|
167
|
+
Two things ACStack does with a finished map.
|
|
168
|
+
|
|
169
|
+
- **It works through the nodes that are ready to start**, meaning the open ones with nothing unfinished blocking them
|
|
170
|
+
- ACStack calls that set the **frontier**
|
|
171
|
+
- **It packs the whole map into a single brief**
|
|
172
|
+
- A fresh agent session picks up where the last one stopped
|
|
173
|
+
|
|
174
|
+
Every rule in ACStack exists because something went wrong without it, over months of real product development with coding agents.
|
|
175
|
+
|
|
176
|
+
For the full picture of each step and how they connect, read [docs/workflows.md](docs/workflows.md).
|
|
177
|
+
|
|
178
|
+
## 3. Configure a project and a machine
|
|
179
|
+
|
|
180
|
+
*The project states what to run. The machine states what it can do.*
|
|
181
|
+
|
|
182
|
+
- `acstack/project.yaml` holds every project-scoped setting
|
|
183
|
+
- [docs/config-reference.md](docs/config-reference.md) gives each key, its values, its default and what changes
|
|
184
|
+
- `~/.config/acstack/config.json` holds the nine `host.*` axes
|
|
185
|
+
- `/acstack:host` writes eight of them once per machine, and `/acstack:setup` writes the ninth
|
|
186
|
+
- [docs/dev-setups.md](docs/dev-setups.md) gives every axis, what reads it, and how to describe a fresh machine
|
|
187
|
+
- `/acstack:setup` copies the commands and directories from one of three language profiles
|
|
188
|
+
- **python** – pytest, ruff, mypy
|
|
189
|
+
- **node-typescript** – npm test, eslint, tsc
|
|
190
|
+
- **fullstack-python** – Python backend, plus a Node or TypeScript frontend
|
|
191
|
+
- `acstack config check` audits the project and the machine
|
|
192
|
+
- It exits 2 when a required host axis has no value
|
|
193
|
+
|
|
194
|
+
## 4. The CLI
|
|
195
|
+
|
|
196
|
+
*Four storage operations carry the whole map. One fixed path makes the CLI reachable from any agent session.*
|
|
197
|
+
|
|
198
|
+
ACStack ships a Node.js CLI: `acstack config`, `acstack list`, `acstack node ...`, and `acstack archive`.
|
|
199
|
+
|
|
200
|
+
- The storage behind a map provides four operations and nothing more: create, read, update, list
|
|
201
|
+
- GitHub issues are the default
|
|
202
|
+
- The first line of every issue body carries all of that node's edges
|
|
203
|
+
- One call therefore reads the whole map
|
|
204
|
+
- A sub-issue and an issue dependency mirror those edges, so GitHub's own interface draws the map
|
|
205
|
+
- Markdown files are the fallback, one per node under `acstack/maps/<name>/`
|
|
206
|
+
- The CLI builds everything else on those four operations
|
|
207
|
+
- `acstack node frontier` lists what is ready to start now, closest to the original goal first
|
|
208
|
+
- `acstack node walk` packs the whole map into one brief for a fresh session, in the order the decisions happened
|
|
209
|
+
- The brief always includes the original goal, plus any node you marked as worth carrying along
|
|
210
|
+
- `acstack node diagram` draws a map, or any part of one, as a mermaid diagram with a legend under it
|
|
211
|
+
- The skills claim and resolve a node with `update` calls
|
|
212
|
+
|
|
213
|
+
Two symlinks reach the CLI. The SessionStart hook maintains both.
|
|
214
|
+
|
|
215
|
+
- `~/.claude/acstack/bin/acstack` is the fixed path every skill and agent calls
|
|
216
|
+
- Agents therefore do not depend on your shell `PATH`
|
|
217
|
+
- The CLI keeps working across plugin version bumps, non-interactive subshells and fresh agent contexts
|
|
218
|
+
- `~/.local/bin/acstack` is for typing `acstack` at a terminal yourself
|
|
219
|
+
- Add `~/.local/bin` to your `PATH` to use it
|
|
220
|
+
- The hook prints a one-line reminder when it is absent
|
|
221
|
+
- Nothing in the plugin breaks without it
|
|
222
|
+
|
|
223
|
+
If `acstack` does not run after a Claude Code install, read [TROUBLESHOOTING.md](TROUBLESHOOTING.md). A Claude Code session can read it and apply the fix directly.
|
|
224
|
+
|
|
225
|
+
## 5. Every skill
|
|
226
|
+
|
|
227
|
+
*Four groups, ordered by when you reach for them.*
|
|
228
|
+
|
|
229
|
+
### 5.1. Implementation
|
|
230
|
+
|
|
231
|
+
| Skill | Description |
|
|
232
|
+
|-------|-------------|
|
|
233
|
+
| `/acstack:implement` | Build what is ready to start, running the four agents of section 6, whether or not a map exists |
|
|
234
|
+
|
|
235
|
+
For work with open decisions, chart it with `/acstack:map` first.
|
|
236
|
+
|
|
237
|
+
### 5.2. Planning
|
|
238
|
+
|
|
239
|
+
| Skill | Description |
|
|
240
|
+
|-------|-------------|
|
|
241
|
+
| `/acstack:map` | Answer the open questions first, building the to-do graph on the first run and working through it after |
|
|
242
|
+
| `grilling` | The interview itself, asking every question it can answer next per round, each with a recommended answer (the agent invokes it) |
|
|
243
|
+
| `record-context` | Writes a decision down when one lands: a short note, a glossary term, both, or neither (the agent invokes it) |
|
|
244
|
+
|
|
245
|
+
### 5.3. Operations
|
|
246
|
+
|
|
247
|
+
| Skill | Description |
|
|
248
|
+
|-------|-------------|
|
|
249
|
+
| `/acstack:commit` | Commit, and update the specs under `acstack/specs/` from the diff first |
|
|
250
|
+
| `/acstack:archive` | Close a finished map, after checking the decisions reached your specs and notes, then delete the nodes |
|
|
251
|
+
| `/acstack:sync` | Update the specs from code changes, outside a commit |
|
|
252
|
+
| `/acstack:handoff` | Hand work to a visible agent, a new one in its own pane or one already running, with acknowledgement |
|
|
253
|
+
| `/acstack:compact-and-continue` | Anchor the session's load-bearing state to survive compaction, then continue in place |
|
|
254
|
+
|
|
255
|
+
What an effort leaves behind is what matters: updated specs, decision notes, and glossary entries. ACStack throws the nodes away.
|
|
256
|
+
|
|
257
|
+
### 5.4. Setup and supporting
|
|
258
|
+
|
|
259
|
+
| Skill | Description |
|
|
260
|
+
|-------|-------------|
|
|
261
|
+
| `/acstack:setup` | Set up ACStack in a project, and change how a project already set up is configured |
|
|
262
|
+
| `/acstack:host` | Declare this machine's dev setup once, as the `host.*` axes |
|
|
263
|
+
| `/acstack:bootstrap` | Write the first set of specs by reading your existing code |
|
|
264
|
+
| `/acstack:explore` | Thinking partner mode, read-only |
|
|
265
|
+
| `/acstack:quick-fix` | Structured bug fix workflow with root cause analysis |
|
|
266
|
+
| `/acstack:pre-commit-review` | Deep quality review of all changes since last commit |
|
|
267
|
+
| `/acstack:test-conventions` | Test placement rules and naming conventions |
|
|
268
|
+
| `/acstack:code-review` | Linus Torvalds code philosophy for reviews |
|
|
269
|
+
| `/acstack:browser-verify` | agent-browser command reference, CDP troubleshooting, and selector strategy |
|
|
270
|
+
| `/acstack:bridge` | Set up and operate the Playwriter cross-device browser bridge |
|
|
271
|
+
| `/acstack:visual-docs` | Write docs that lead with a diagram and derive structure from it (Minto pyramid) |
|
|
272
|
+
| `/acstack:new-worktree` | Create a git worktree off the remote base branch and continue the task inside it |
|
|
273
|
+
| `/acstack:teardown-worktree` | Retire finished worktrees and delete their merged local and remote branches |
|
|
274
|
+
| `/acstack:terminal-workspace` | Set up a keyboard-only terminal for driving agents on a dev machine |
|
|
275
|
+
|
|
276
|
+
## 6. Every agent
|
|
277
|
+
|
|
278
|
+
*Four agents run in order. The one rule that matters: the test-writer never sees the implementation.*
|
|
279
|
+
|
|
280
|
+
| Agent | Role |
|
|
281
|
+
|-------|------|
|
|
282
|
+
| `test-writer` | Writes tests from requirements only, before the code under strict TDD and after it under relaxed |
|
|
283
|
+
| `task-executor` | TDD phase 2, making tests pass, and it cannot modify tests |
|
|
284
|
+
| `task-checker` | TDD phase 3, verifying everything: mock skepticism, test baseline, regressions, TDD isolation audit |
|
|
285
|
+
| `frontend-verifier` | TDD phase 4, real browser verification via agent-browser CLI, when `project.yaml` configures a frontend |
|
|
286
|
+
|
|
287
|
+
- The agent session you talk to coordinates
|
|
288
|
+
- It hands every piece of research and code to these agents
|
|
289
|
+
- A fail from the task-checker sends the work back to the task-executor with the reason
|
|
290
|
+
- The frontend-verifier runs under three conditions: a configured frontend, changed frontend files, and verification switched on
|
|
291
|
+
|
|
292
|
+
## 7. Output style
|
|
293
|
+
|
|
294
|
+
*The plugin ships one output style. It applies the house standard to every chat reply.*
|
|
295
|
+
|
|
296
|
+
- Claude Code shows the style as `acstack:ac-writing-style`
|
|
297
|
+
- It applies the `writing` skill's plain-language rules and the `visual-docs` skill's Minto pyramid and bullet discipline
|
|
298
|
+
- A reply leads with the answer and puts 90% or more of what follows in bullets
|
|
299
|
+
- Each bullet holds one sentence and ends without a period
|
|
300
|
+
- Sub-bullets nest as far as the point needs, indented four spaces per level
|
|
301
|
+
- Every word has to earn its place: no em dash, no emoji, no puffery, and no contrast clause that does no work
|
|
302
|
+
|
|
303
|
+
How to turn it on:
|
|
304
|
+
|
|
305
|
+
- `/acstack:setup` offers the style on both paths
|
|
306
|
+
- On a new project it comes late
|
|
307
|
+
- It is optional there
|
|
308
|
+
- On a project already set up it is a health-check row
|
|
309
|
+
- The skill writes `outputStyle` for you
|
|
310
|
+
- It asks first
|
|
311
|
+
- Use `~/.claude/settings.json` for every project, or `.claude/settings.local.json` for this one
|
|
312
|
+
- A project value overrides the global one
|
|
313
|
+
- The style applies after `/clear`, or in a new session
|
|
314
|
+
- The plugin never forces it on
|
|
315
|
+
|
|
316
|
+
The style also ships a per-turn reminder:
|
|
317
|
+
|
|
318
|
+
- `hooks/ac-writing-style-reminder.sh` runs on every prompt and re-injects the style's own words
|
|
319
|
+
- A built-in style carries a `turnReminder` field, and a file-based style cannot, so the hook supplies the equivalent
|
|
320
|
+
- It emits two sections lifted straight out of `output-styles/ac-writing-style.md`
|
|
321
|
+
- "Who you are", top-level lines only, which is the persona
|
|
322
|
+
- "Before you send", in full, which is the nine-item checklist
|
|
323
|
+
- It reads those sections at run time, so the reminder can never drift from the style
|
|
324
|
+
- It stays silent under any other output style, and it writes nothing to the transcript
|
|
325
|
+
|
|
326
|
+
## 8. Terminal workspace for driving several agents
|
|
327
|
+
|
|
328
|
+
*An optional keyboard-only setup for running several agents on a remote machine. ACStack works fine without it.*
|
|
329
|
+
|
|
330
|
+
- `/acstack:terminal-workspace` installs every tool and writes every config
|
|
331
|
+
- [docs/terminal-workspace.md](docs/terminal-workspace.md) gives the exact config, every key, and the traps worth knowing
|
|
332
|
+
- The setup builds on herdr, a terminal multiplexer that keeps each agent's terminal running after you disconnect
|
|
333
|
+
- You attach from your own machine with `herdr --remote`
|
|
334
|
+
- Your own clipboard and browser then reach the session
|
|
335
|
+
- Each agent can get its own git worktree, meaning its own checkout on its own branch
|
|
336
|
+
- gh-dash then triages pull requests and diffnav reads diffs, both without leaving the terminal
|
|
337
|
+
|
|
338
|
+
## 9. Design principles
|
|
339
|
+
|
|
340
|
+
*Five rules explain why every default is what it is.*
|
|
341
|
+
|
|
342
|
+
- **Strict TDD holds because of the order the agents run in** – relaxed TDD holds only because the instructions say so
|
|
343
|
+
- Either way the task-executor cannot edit a test file
|
|
344
|
+
- Under strict TDD the test-writer runs first
|
|
345
|
+
- There is no implementation for it to copy
|
|
346
|
+
- Under relaxed TDD it runs second
|
|
347
|
+
- Only its instructions stop it reading the code it is testing
|
|
348
|
+
- The two are not equally safe
|
|
349
|
+
- That is why strict is the default
|
|
350
|
+
- **Your docs never drift from the code** – `/acstack:commit` reads the diff and updates the specs under `acstack/specs/` in the same commit
|
|
351
|
+
- Any agent that spots a spec contradicting the code fixes the spec there and then
|
|
352
|
+
- A spec describes what the code does today
|
|
353
|
+
- It never describes what someone plans to build
|
|
354
|
+
- **Build no more process than the job needs** – a to-do graph appears only when one conversation cannot hold the questions
|
|
355
|
+
- A typo fix gets no machinery
|
|
356
|
+
- A month-long feature gets a map
|
|
357
|
+
- You type the same command either way
|
|
358
|
+
- ACStack works out which it is
|
|
359
|
+
- **Planning gets more effort than coding** – three agents read the relevant code before anyone writes a line
|
|
360
|
+
- Mock audits, regression suites and integration checks follow the implementation
|
|
361
|
+
- **Strict defaults, easy to relax** – run `acstack config set` to change how strict the TDD is, how much the agent does itself, or how it asks you questions
|
|
362
|
+
|
|
363
|
+
## 10. Licence and credits
|
|
364
|
+
|
|
365
|
+
*[MIT](LICENSE). Four projects shaped the design.*
|
|
366
|
+
|
|
367
|
+
- **[OpenSpec](https://github.com/Fission-AI/OpenSpec)** – ACStack forks its CLI from OpenSpec
|
|
368
|
+
- OpenSpec was the core spec engine under the original workflow
|
|
369
|
+
- The map-based concepts all originate there: proposals, designs, tasks, living specs, change management, and archiving
|
|
370
|
+
- **[Taskmaster AI](https://github.com/eyaltoledano/claude-task-master)** – Taskmaster's task management model inspired the orchestrator pattern and the agent coordination approach
|
|
371
|
+
- **[Skills for Real Engineers](https://github.com/mattpocock/skills)** by Matt Pocock – the Wayfinder map, the round-by-round interview, and the durability rule for agent briefs
|
|
372
|
+
- ACStack's node graph is a direct adaptation of Wayfinder
|
|
373
|
+
- MIT licensed, and recorded in [THIRD_PARTY_NOTICES](THIRD_PARTY_NOTICES)
|
|
374
|
+
- Additional inspiration comes from [Superpowers](https://github.com/obra/superpowers), [GSD](https://github.com/gsd-build/get-shit-done) and [Spec Kit](https://github.com/github/spec-kit)
|
|
375
|
+
|
|
376
|
+
The optional terminal workspace installs, but does not bundle, the five tools you drive and the five behind them. Each one keeps its own licence.
|
|
377
|
+
|
|
378
|
+
- [herdr](https://herdr.dev)
|
|
379
|
+
- [tuicr](https://github.com/agavra/tuicr) by agavra, which reviews a pull request inside the terminal
|
|
380
|
+
- [gh-dash](https://github.com/dlvhdr/gh-dash) and [diffnav](https://github.com/dlvhdr/diffnav) by dlvhdr
|
|
381
|
+
- [delta](https://github.com/dandavison/delta) by dandavison
|
|
382
|
+
- [lazygit](https://github.com/jesseduffield/lazygit) by jesseduffield, which stages, commits and pushes on one key
|
|
383
|
+
- [harlequin](https://github.com/tconbeer/harlequin) by tconbeer, the SQL editor this setup opens on one key
|
|
384
|
+
- [yazi](https://github.com/sxyazi/yazi) by sxyazi, the file manager that previews whatever the cursor sits on
|
|
385
|
+
- [mermaid-ascii](https://github.com/AlexanderGrooff/mermaid-ascii) by AlexanderGrooff
|
|
386
|
+
- [glow](https://github.com/charmbracelet/glow) by charmbracelet
|
|
387
|
+
|
|
388
|
+
The optional fork build of tuicr compiles [agavra/tuicr#607](https://github.com/agavra/tuicr/pull/607) by [antonio2368](https://github.com/antonio2368). It also compiles [agavra/tuicr#633](https://github.com/agavra/tuicr/pull/633) and one counts fix not yet submitted upstream, both written for this fork. That build is off by default and temporary.
|
|
389
|
+
|
|
390
|
+
See [docs/terminal-workspace.md](docs/terminal-workspace.md).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
This project includes code derived from OpenSpec CLI, which is licensed under the MIT License.
|
|
2
|
+
|
|
3
|
+
OpenSpec CLI
|
|
4
|
+
Copyright (c) 2024 OpenSpec Contributors
|
|
5
|
+
https://github.com/Fission-AI/OpenSpec
|
|
6
|
+
License: MIT (https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
This project includes concepts and text adapted from Skills for Real Engineers,
|
|
9
|
+
which is licensed under the MIT License.
|
|
10
|
+
|
|
11
|
+
Skills for Real Engineers
|
|
12
|
+
Copyright (c) 2026 Matt Pocock
|
|
13
|
+
https://github.com/mattpocock/skills
|
|
14
|
+
License: MIT (https://opensource.org/licenses/MIT)
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# ACStack troubleshooting
|
|
2
|
+
|
|
3
|
+
*This page covers the Claude Code install path. pi installs ACStack as `npm:acstack`, and uses pi's package tools instead.*
|
|
4
|
+
|
|
5
|
+
**A coding agent can act on this file.** Find the symptom the user reported, run the diagnostic, then apply the fix.
|
|
6
|
+
|
|
7
|
+
- **Claude Code's SessionStart hook maintains everything here**
|
|
8
|
+
- Almost every symptom below is that hook not having run
|
|
9
|
+
- **Restarting Claude Code fixes most of them**
|
|
10
|
+
- The hook runs again on the new session
|
|
11
|
+
- **Each section below is one symptom**, with the command to confirm it and the command to fix it
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
flowchart LR
|
|
15
|
+
H["SessionStart hook<br/>(hooks/hooks.json)"] --> A["Agent path<br/>(~/.claude/acstack/bin/acstack)"]
|
|
16
|
+
H --> U["Human path<br/>(~/.local/bin/acstack)"]
|
|
17
|
+
A --> C["The bundled CLI<br/>(cli/dist/index.js in the plugin cache)"]
|
|
18
|
+
U --> C
|
|
19
|
+
H --> O["Orchestrator instructions<br/>(orchestrator/AGENTS.md, via python3)"]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
| The broken link | Sections |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| Agent path | 1, 4 |
|
|
25
|
+
| Human path | 2 |
|
|
26
|
+
| The bundled CLI | 3 |
|
|
27
|
+
| SessionStart hook | 5 |
|
|
28
|
+
| Orchestrator instructions | 6 |
|
|
29
|
+
|
|
30
|
+
Where the plugin lives, and what points at it:
|
|
31
|
+
|
|
32
|
+
- The plugin lives at `${CLAUDE_PLUGIN_ROOT}` once the user installs it via the marketplace
|
|
33
|
+
- On most installs that resolves to `~/.claude/plugins/cache/spechub/acstack/<version>/`
|
|
34
|
+
- `~/.claude/acstack/bin/acstack` is the **agent-facing** invariant path
|
|
35
|
+
- Every skill and agent in this plugin invokes the CLI through this exact path
|
|
36
|
+
- It does not depend on the user's `PATH`
|
|
37
|
+
- `~/.local/bin/acstack` is the **human convenience** symlink
|
|
38
|
+
- It is useful only when `~/.local/bin` is on `PATH`
|
|
39
|
+
- No plugin functionality rests on it
|
|
40
|
+
- Both symlinks refresh on every SessionStart and point at the current plugin cache version
|
|
41
|
+
- Fix the agent-facing path first
|
|
42
|
+
- Nothing in the plugin works without it
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 1. Agents report `~/.claude/acstack/bin/acstack: No such file or directory`
|
|
47
|
+
|
|
48
|
+
**Symptom**: a skill or agent fails because it cannot find the CLI at `~/.claude/acstack/bin/acstack`.
|
|
49
|
+
|
|
50
|
+
**Diagnose**:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
ls -l ~/.claude/acstack/bin/acstack 2>&1
|
|
54
|
+
ls -d ~/.claude/plugins/cache/spechub/acstack/*/ 2>&1
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Possible causes and fixes**:
|
|
58
|
+
|
|
59
|
+
- **Symlink missing** (`No such file or directory`): the SessionStart hook never ran
|
|
60
|
+
- The user has not started Claude Code on this device since they installed the plugin, or the hook silently failed
|
|
61
|
+
- Fix: ask the user to restart Claude Code so the SessionStart hook fires
|
|
62
|
+
- The hook creates the symlink and prints `acstack: linked agent CLI at ...`
|
|
63
|
+
- Create it by hand if that does not work:
|
|
64
|
+
```bash
|
|
65
|
+
ACSTACK_VERSION=$(ls ~/.claude/plugins/cache/spechub/acstack/ | sort -V | tail -1)
|
|
66
|
+
mkdir -p ~/.claude/acstack/bin
|
|
67
|
+
ln -sfn ~/.claude/plugins/cache/spechub/acstack/$ACSTACK_VERSION/cli/bin/acstack.js ~/.claude/acstack/bin/acstack
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- **Plugin cache missing entirely**: the second `ls` returned nothing
|
|
71
|
+
- Fix: the user has not installed the plugin
|
|
72
|
+
- Run `/plugin marketplace add ac8318740/spechub`, then `/plugin install acstack@spechub` in Claude Code
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 2. `acstack: command not found` (human typed it at a terminal)
|
|
77
|
+
|
|
78
|
+
**Symptom**: the user runs `acstack --help` at the terminal and the shell reports `command not found`, while agents continue to work.
|
|
79
|
+
|
|
80
|
+
This is a **human-ergonomics issue, not a plugin issue.** Agents use `~/.claude/acstack/bin/acstack` directly. This does not affect them. Fix it only if the user types `acstack` at terminals.
|
|
81
|
+
|
|
82
|
+
**Diagnose**:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
ls -l ~/.local/bin/acstack 2>&1
|
|
86
|
+
echo "PATH=$PATH" | tr ':' '\n' | grep -F "$HOME/.local/bin" || echo "MISSING"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Possible causes and fixes**:
|
|
90
|
+
|
|
91
|
+
- **Symlink missing**: the SessionStart hook never ran, or ran and could not write
|
|
92
|
+
- Fix: ask the user to restart Claude Code
|
|
93
|
+
- The hook recreates the human symlink on every session start
|
|
94
|
+
- **PATH missing** (the symlink exists but `MISSING` printed): `~/.local/bin` is not on `$PATH`
|
|
95
|
+
- Fix: add this line to the user's shell rc, then ask them to restart their shell:
|
|
96
|
+
```bash
|
|
97
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
98
|
+
```
|
|
99
|
+
- The shell rc by shell:
|
|
100
|
+
- zsh: `~/.zshrc`
|
|
101
|
+
- bash on Linux: `~/.bashrc`
|
|
102
|
+
- bash on macOS: `~/.bash_profile`
|
|
103
|
+
- fish: `~/.config/fish/config.fish`, and use `set -gx PATH $HOME/.local/bin $PATH`
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 3. `Error [ERR_MODULE_NOT_FOUND]: Cannot find module '.../cli/dist/index.js'`
|
|
108
|
+
|
|
109
|
+
**Symptom**: the CLI runs but Node throws `ERR_MODULE_NOT_FOUND` for `dist/index.js`.
|
|
110
|
+
|
|
111
|
+
**Diagnose**:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
ACSTACK_VERSION=$(ls ~/.claude/plugins/cache/spechub/acstack/ | sort -V | tail -1)
|
|
115
|
+
ls ~/.claude/plugins/cache/spechub/acstack/$ACSTACK_VERSION/cli/dist/index.js 2>&1
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Cause**: the plugin cache holds a version from before the CLI shipped bundled in the repo, meaning before 0.9.2. This should not happen on 0.9.2 or later.
|
|
119
|
+
|
|
120
|
+
**Fix**:
|
|
121
|
+
|
|
122
|
+
- Bump or refresh the plugin cache
|
|
123
|
+
- Run `/plugin` in Claude Code and reinstall the plugin
|
|
124
|
+
- Or delete the cache directory and let Claude Code repull:
|
|
125
|
+
```bash
|
|
126
|
+
rm -rf ~/.claude/plugins/cache/spechub/acstack/<old-version>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
- Confirm the user is on plugin version 0.9.2 or later:
|
|
130
|
+
```bash
|
|
131
|
+
cat ~/.claude/plugins/cache/spechub/acstack/*/.claude-plugin/plugin.json | grep version
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
- Build the CLI in place as a one-shot, if the user is offline or cannot repull:
|
|
135
|
+
```bash
|
|
136
|
+
cd ~/.claude/plugins/cache/spechub/acstack/<version>/cli
|
|
137
|
+
npm install
|
|
138
|
+
npm run build
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 4. Stale symlink, pointing at an old version
|
|
144
|
+
|
|
145
|
+
**Symptom**: `~/.claude/acstack/bin/acstack --version` prints an older number than expected, or commands behave like an older release.
|
|
146
|
+
|
|
147
|
+
**Diagnose**:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
readlink ~/.claude/acstack/bin/acstack
|
|
151
|
+
ls ~/.claude/plugins/cache/spechub/acstack/
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Cause**: an older session set the symlink target. The plugin cache now holds a newer version. The SessionStart hook has not relinked it yet.
|
|
155
|
+
|
|
156
|
+
**Fix**:
|
|
157
|
+
|
|
158
|
+
- Start a new Claude Code session
|
|
159
|
+
- The SessionStart hook detects a stale symlink and relinks it, printing `acstack: updated agent CLI at ...`
|
|
160
|
+
- Or relink by hand:
|
|
161
|
+
```bash
|
|
162
|
+
NEW=$(ls ~/.claude/plugins/cache/spechub/acstack/ | sort -V | tail -1)
|
|
163
|
+
ln -sfn ~/.claude/plugins/cache/spechub/acstack/$NEW/cli/bin/acstack.js ~/.claude/acstack/bin/acstack
|
|
164
|
+
ln -sfn ~/.claude/plugins/cache/spechub/acstack/$NEW/cli/bin/acstack.js ~/.local/bin/acstack
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 5. The SessionStart hook did not run
|
|
170
|
+
|
|
171
|
+
**Symptom**: no `acstack:` lines appear in Claude Code's startup logs. `~/.claude/acstack/bin/acstack` is missing.
|
|
172
|
+
|
|
173
|
+
**Diagnose**:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
cat ~/.claude/plugins/cache/spechub/acstack/*/hooks/hooks.json
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Cause**: the user has not enabled the plugin, or they have disabled hook execution in their Claude Code settings.
|
|
180
|
+
|
|
181
|
+
**Fix**:
|
|
182
|
+
|
|
183
|
+
- Confirm the user has enabled the plugin, with `/plugin list`
|
|
184
|
+
- Check that the user has not disabled hooks in `~/.claude/settings.json`, meaning no `"hooks": false` and no per-event suppression
|
|
185
|
+
- Install the symlinks by hand as a fallback, using the commands in section 1 and section 4
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 6. `python3 not found` warning at session start
|
|
190
|
+
|
|
191
|
+
**Symptom**: the hook prints `acstack: python3 not found; skipping orchestrator injection`.
|
|
192
|
+
|
|
193
|
+
**Cause**: the hook uses `python3` to emit `orchestrator/AGENTS.md` as JSON for `additionalContext` injection.
|
|
194
|
+
|
|
195
|
+
- Without `python3` the orchestrator instructions do not load at all
|
|
196
|
+
- Nothing else reads that file
|
|
197
|
+
- Claude Code does not auto-load instructions from a plugin's own directory
|
|
198
|
+
- Injection is the only path
|
|
199
|
+
- This does not affect the CLI symlinks
|
|
200
|
+
- The `acstack` command keeps working
|
|
201
|
+
|
|
202
|
+
**Fix**: install Python 3. Most systems already have it.
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Debian/Ubuntu
|
|
206
|
+
sudo apt install python3
|
|
207
|
+
# macOS
|
|
208
|
+
brew install python3
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 7. When none of the above matches
|
|
214
|
+
|
|
215
|
+
*This section describes the document, not the plugin. No box in the diagram holds it.*
|
|
216
|
+
|
|
217
|
+
The CLI is a normal Node.js ESM package. To validate the install end to end:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
ACSTACK_VERSION=$(ls ~/.claude/plugins/cache/spechub/acstack/ | sort -V | tail -1)
|
|
221
|
+
node ~/.claude/plugins/cache/spechub/acstack/$ACSTACK_VERSION/cli/bin/acstack.js --help
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
- If that prints help, the CLI is fine and the issue is the symlink
|
|
225
|
+
- If that errors, the issue is the cache contents (see section 3)
|