liteagents 2.24.1 → 3.5.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 (160) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/README.md +120 -160
  3. package/installer/cli.js +40 -5
  4. package/installer/installation-engine.js +8 -0
  5. package/package.json +4 -3
  6. package/packages/ampcode/AGENT.md +11 -20
  7. package/packages/ampcode/agents/code-developer.md +11 -17
  8. package/packages/ampcode/agents/orchestrator.md +3 -3
  9. package/packages/ampcode/agents/quality-assurance.md +3 -1
  10. package/packages/ampcode/{commands/brainstorming.md → skills/brainstorming/SKILL.md} +2 -3
  11. package/packages/ampcode/{commands/branch-review.md → skills/branch-review/SKILL.md} +13 -13
  12. package/packages/{claude/commands/docs-builder.md → ampcode/skills/docs-builder/SKILL.md} +1 -1
  13. package/packages/ampcode/{commands/live-canvas.md → skills/live-canvas/SKILL.md} +8 -4
  14. package/packages/ampcode/{commands/refactor.md → skills/refactor/SKILL.md} +57 -9
  15. package/packages/ampcode/{commands/release.md → skills/release/SKILL.md} +4 -4
  16. package/packages/{claude/commands → ampcode/skills}/remember/AGENT_RULES.md +44 -84
  17. package/packages/ampcode/{commands/remember.md → skills/remember/SKILL.md} +86 -13
  18. package/packages/ampcode/{commands → skills}/remember/friction.cjs +0 -0
  19. package/packages/ampcode/skills/remember/stub-check.cjs +206 -0
  20. package/packages/ampcode/skills/remember/sync-rules.cjs +178 -0
  21. package/packages/ampcode/skills/remember/version-check.cjs +214 -0
  22. package/packages/ampcode/skills/root-cause/SKILL.md +220 -0
  23. package/packages/ampcode/{commands/trace-back → skills/root-cause}/find-polluter.sh +0 -0
  24. package/packages/{claude/commands/security.md → ampcode/skills/security/SKILL.md} +1 -1
  25. package/packages/{claude/commands/ship.md → ampcode/skills/ship/SKILL.md} +1 -1
  26. package/packages/ampcode/skills/skill-creator/LICENSE.txt +202 -0
  27. package/packages/ampcode/{commands/skill-creator.md → skills/skill-creator/SKILL.md} +1 -2
  28. package/packages/ampcode/{commands → skills}/skill-creator/scripts/init_skill.py +0 -0
  29. package/packages/ampcode/{commands → skills}/skill-creator/scripts/package_skill.py +0 -0
  30. package/packages/ampcode/{commands → skills}/skill-creator/scripts/quick_validate.py +0 -0
  31. package/packages/ampcode/{commands/stash.md → skills/stash/SKILL.md} +2 -1
  32. package/packages/{claude/commands/test-generate.md → ampcode/skills/test-generate/SKILL.md} +2 -2
  33. package/packages/ampcode/variants.json +2 -2
  34. package/packages/claude/CLAUDE.md +11 -19
  35. package/packages/claude/agents/code-developer.md +11 -17
  36. package/packages/claude/agents/orchestrator.md +4 -5
  37. package/packages/claude/agents/quality-assurance.md +3 -1
  38. package/packages/claude/skills/brainstorming/SKILL.md +1 -2
  39. package/packages/claude/{commands/branch-review.md → skills/branch-review/SKILL.md} +1 -1
  40. package/packages/{ampcode/commands/docs-builder.md → claude/skills/docs-builder/SKILL.md} +7 -7
  41. package/packages/claude/skills/live-canvas/SKILL.md +5 -1
  42. package/packages/claude/{commands/refactor.md → skills/refactor/SKILL.md} +53 -5
  43. package/packages/claude/{commands/release.md → skills/release/SKILL.md} +1 -1
  44. package/packages/{ampcode/commands → claude/skills}/remember/AGENT_RULES.md +38 -78
  45. package/packages/claude/{commands/remember.md → skills/remember/SKILL.md} +86 -13
  46. package/packages/claude/{commands → skills}/remember/friction.cjs +0 -0
  47. package/packages/claude/skills/remember/stub-check.cjs +206 -0
  48. package/packages/claude/skills/remember/sync-rules.cjs +178 -0
  49. package/packages/claude/skills/remember/version-check.cjs +214 -0
  50. package/packages/claude/skills/root-cause/SKILL.md +220 -0
  51. package/packages/{ampcode/commands/security.md → claude/skills/security/SKILL.md} +2 -2
  52. package/packages/{ampcode/commands/ship.md → claude/skills/ship/SKILL.md} +2 -2
  53. package/packages/claude/skills/skill-creator/SKILL.md +1 -2
  54. package/packages/claude/{commands/stash.md → skills/stash/SKILL.md} +2 -1
  55. package/packages/{ampcode/commands/test-generate.md → claude/skills/test-generate/SKILL.md} +3 -3
  56. package/packages/claude/variants.json +1 -2
  57. package/packages/droid/AGENTS.md +10 -16
  58. package/packages/droid/commands/brainstorming.md +1 -4
  59. package/packages/droid/commands/branch-review.md +11 -14
  60. package/packages/droid/commands/docs-builder.md +0 -3
  61. package/packages/droid/commands/live-canvas.md +7 -5
  62. package/packages/droid/commands/refactor.md +55 -10
  63. package/packages/droid/commands/release.md +2 -5
  64. package/packages/droid/commands/remember/AGENT_RULES.md +38 -78
  65. package/packages/droid/commands/remember/stub-check.cjs +206 -0
  66. package/packages/droid/commands/remember/sync-rules.cjs +178 -0
  67. package/packages/droid/commands/remember/version-check.cjs +214 -0
  68. package/packages/droid/commands/remember.md +84 -14
  69. package/packages/droid/commands/root-cause.md +218 -0
  70. package/packages/droid/commands/security.md +0 -3
  71. package/packages/droid/commands/ship.md +0 -3
  72. package/packages/droid/commands/skill-creator/LICENSE.txt +202 -0
  73. package/packages/droid/commands/skill-creator.md +0 -4
  74. package/packages/droid/commands/stash.md +0 -2
  75. package/packages/droid/commands/test-generate.md +1 -4
  76. package/packages/droid/droids/1-create-prd.md +6 -2
  77. package/packages/droid/droids/2-generate-tasks.md +1 -2
  78. package/packages/droid/droids/3-process-task-list.md +1 -2
  79. package/packages/droid/droids/code-developer.md +12 -19
  80. package/packages/droid/droids/feature-planner.md +1 -2
  81. package/packages/droid/droids/market-researcher.md +1 -2
  82. package/packages/droid/droids/orchestrator.md +3 -4
  83. package/packages/droid/droids/quality-assurance.md +4 -3
  84. package/packages/droid/droids/system-architect.md +1 -2
  85. package/packages/droid/droids/ui-designer.md +1 -2
  86. package/packages/opencode/AGENTS.md +10 -16
  87. package/packages/opencode/agent/code-developer.md +11 -17
  88. package/packages/opencode/agent/orchestrator.md +2 -2
  89. package/packages/opencode/agent/quality-assurance.md +3 -1
  90. package/packages/opencode/command/brainstorming.md +1 -4
  91. package/packages/opencode/command/branch-review.md +11 -15
  92. package/packages/opencode/command/docs-builder.md +0 -4
  93. package/packages/opencode/command/live-canvas.md +7 -5
  94. package/packages/opencode/command/refactor.md +55 -11
  95. package/packages/opencode/command/release.md +2 -5
  96. package/packages/opencode/command/remember/AGENT_RULES.md +38 -78
  97. package/packages/opencode/command/remember/stub-check.cjs +206 -0
  98. package/packages/opencode/command/remember/sync-rules.cjs +178 -0
  99. package/packages/opencode/command/remember/version-check.cjs +214 -0
  100. package/packages/opencode/command/remember.md +84 -14
  101. package/packages/opencode/command/root-cause.md +218 -0
  102. package/packages/opencode/command/security.md +0 -4
  103. package/packages/opencode/command/ship.md +0 -3
  104. package/packages/opencode/command/skill-creator/LICENSE.txt +202 -0
  105. package/packages/opencode/command/skill-creator.md +0 -4
  106. package/packages/opencode/command/stash.md +0 -3
  107. package/packages/opencode/command/test-generate.md +1 -5
  108. package/packages/opencode/opencode.jsonc +4 -34
  109. package/packages/subagentic-manual.md +147 -314
  110. package/packages/ampcode/agents/context-builder.md +0 -144
  111. package/packages/ampcode/commands/debug-method.md +0 -297
  112. package/packages/ampcode/commands/live-canvas/README.md +0 -264
  113. package/packages/ampcode/commands/optimize.md +0 -61
  114. package/packages/ampcode/commands/tdd-flow.md +0 -390
  115. package/packages/ampcode/commands/test-traps/example.ts +0 -158
  116. package/packages/ampcode/commands/test-traps.md +0 -378
  117. package/packages/ampcode/commands/trace-back.md +0 -176
  118. package/packages/ampcode/commands/verify-done.md +0 -152
  119. package/packages/claude/agents/context-builder.md +0 -145
  120. package/packages/claude/commands/optimize.md +0 -61
  121. package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/README.md +0 -89
  122. package/packages/claude/skills/debug-method/CREATION-LOG.md +0 -119
  123. package/packages/claude/skills/debug-method/SKILL.md +0 -296
  124. package/packages/claude/skills/debug-method/test-academic.md +0 -14
  125. package/packages/claude/skills/debug-method/test-pressure-1.md +0 -58
  126. package/packages/claude/skills/debug-method/test-pressure-2.md +0 -68
  127. package/packages/claude/skills/debug-method/test-pressure-3.md +0 -69
  128. package/packages/claude/skills/live-canvas/README.md +0 -269
  129. package/packages/claude/skills/tdd-flow/SKILL.md +0 -392
  130. package/packages/claude/skills/test-traps/SKILL.md +0 -378
  131. package/packages/claude/skills/test-traps/example.ts +0 -158
  132. package/packages/claude/skills/trace-back/SKILL.md +0 -176
  133. package/packages/claude/skills/verify-done/SKILL.md +0 -152
  134. package/packages/droid/commands/debug-method.md +0 -297
  135. package/packages/droid/commands/live-canvas/README.md +0 -264
  136. package/packages/droid/commands/optimize.md +0 -61
  137. package/packages/droid/commands/tdd-flow.md +0 -390
  138. package/packages/droid/commands/test-traps/example.ts +0 -158
  139. package/packages/droid/commands/test-traps.md +0 -378
  140. package/packages/droid/commands/trace-back.md +0 -176
  141. package/packages/droid/commands/verify-done.md +0 -152
  142. package/packages/droid/droids/context-builder.md +0 -144
  143. package/packages/opencode/agent/context-builder.md +0 -148
  144. package/packages/opencode/command/debug-method.md +0 -297
  145. package/packages/opencode/command/live-canvas/README.md +0 -264
  146. package/packages/opencode/command/optimize.md +0 -61
  147. package/packages/opencode/command/tdd-flow.md +0 -390
  148. package/packages/opencode/command/test-traps/example.ts +0 -158
  149. package/packages/opencode/command/test-traps.md +0 -378
  150. package/packages/opencode/command/trace-back.md +0 -176
  151. package/packages/opencode/command/verify-done.md +0 -152
  152. /package/packages/ampcode/{commands → skills}/docs-builder/docs-builder.cjs +0 -0
  153. /package/packages/ampcode/{commands → skills}/live-canvas/DESIGN_PRINCIPLES.md +0 -0
  154. /package/packages/ampcode/{commands → skills}/live-canvas/dev/post-variants.html +0 -0
  155. /package/packages/ampcode/{commands → skills}/live-canvas/templates/lab-banner.html +0 -0
  156. /package/packages/ampcode/{commands → skills}/live-canvas/templates/overlay-vanilla.js +0 -0
  157. /package/packages/claude/{commands → skills}/docs-builder/docs-builder.cjs +0 -0
  158. /package/packages/claude/skills/{trace-back → root-cause}/find-polluter.sh +0 -0
  159. /package/packages/droid/commands/{trace-back → root-cause}/find-polluter.sh +0 -0
  160. /package/packages/opencode/command/{trace-back → root-cause}/find-polluter.sh +0 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,212 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## [3.5.0] - 2026-09-05
11
+
12
+ ### Breaking
13
+ - **Every capability is a skill on Claude Code and Amp.** Claude Code merged
14
+ custom commands into skills (`.claude/commands/deploy.md` and
15
+ `.claude/skills/deploy/SKILL.md` both create `/deploy`, and skills are the
16
+ recommended form), and Amp removed custom commands outright. So
17
+ `packages/claude/commands/` and `packages/ampcode/commands/` are gone, and
18
+ all 13 capabilities ship as `skills/<name>/SKILL.md` in both. The nine that
19
+ are deliberate actions — branch-review, docs-builder, refactor, release,
20
+ remember, security, ship, stash, test-generate — carry
21
+ `disable-model-invocation: true`, so Claude runs them only when you type
22
+ them; the four advisory ones stay auto-loadable. Bundled scripts move with
23
+ their skill. Droid and opencode are unchanged and still use flat commands;
24
+ the mirror converts for them. **Migration:** reinstall; the installer already
25
+ handles a `skills/` directory, and `variants.json` drops its `commands` key
26
+ for those two packages.
27
+ - **The ampcode package ships skills, not commands.** Amp removed custom slash
28
+ commands in favour of skills, so all 13 capabilities now live at
29
+ `packages/ampcode/skills/<name>/SKILL.md` — the same shape Claude Code uses.
30
+ `packages/ampcode/commands/` is gone. **Migration:** reinstall the ampcode
31
+ package; the installer already handles a `skills/` directory.
32
+ - **`/optimize` is removed; `/refactor` absorbs it — catalog goes 14 -> 13.**
33
+ It duplicated `/refactor`'s job shape (a named target, changed in place, no
34
+ behaviour change) and this repo's history shows it was never once used. A
35
+ targeted `/refactor` now runs a performance pass by default: complexity, N+1
36
+ queries, I/O in a loop, repeated recomputation. The grounding rule survives
37
+ the move — findings are always reported, but only *fixed* with real evidence
38
+ (a profile, a log line, or an obviously hot path); everything else is
39
+ reported as "uncertain, needs profiling data" and the code is left alone.
40
+ `/optimize`'s HITL gates move across too: multiple fix shapes, correctness
41
+ traded for speed, concurrency primitives, schema or response-shape changes.
42
+ **Migration:** use `/refactor <target>`; no flag needed.
43
+ - **`trace-back` is merged into `debug-method`, renamed `/root-cause` —
44
+ 15 -> 14.** The backward walk is now Phase 1 step 5 of one skill rather than
45
+ a second skill you had to know to reach for. 468 lines across two files
46
+ became 220 in one. `find-polluter.sh` still ships.
47
+ - **`tdd-flow`, `test-traps` and `verify-done` are removed — 18 -> 15.** The
48
+ repo's own history showed the rules they carried were already being followed
49
+ without them; they cost context on every session to restate it.
50
+
51
+ ### Added
52
+ - **`scripts/mirror.cjs` — the kit packages are generated, not hand-copied.**
53
+ `packages/claude` owns every body; each target file keeps its own
54
+ frontmatter byte-for-byte (that is where the per-kit shape lives — `tools`
55
+ arrays vs permission maps, `Bash(x:*)` vs `Bash(x *)`); the script owns the
56
+ path substitutions between them. `check` runs first in `npm test`, so a
57
+ partial sync can no longer ship. Modes: `check`, `diff`, `sync`, `shapes`.
58
+ - **`scripts/frontmatter.json` — the recorded per-kit frontmatter shape.**
59
+ Frontmatter is meant to differ per kit, so it cannot be verified by diffing.
60
+ It is checked against this file instead: required keys, allowed keys, and
61
+ the kit's `Bash()` style. Generated from the real files by `mirror.cjs
62
+ shapes`, never hand-written.
63
+ - **`docs/product/INSTALLER_GUIDE.md` gained the order of operations** for
64
+ changing a command, skill or subagent, from validating the bug through the
65
+ mirror, the three checks, the docs sweep and the release calls. Root
66
+ `CLAUDE.md` points at it.
67
+
68
+ ### Fixed
69
+
70
+ - **Amp installs delivered no capabilities.** This release moved ampcode from
71
+ `commands/` to `skills/`, but `packages/ampcode/variants.json` was left
72
+ declaring only `agents`. The installer selects content by that field, so
73
+ `selectVariantContent()` returned an empty skills list and an Amp install
74
+ carried 10 agents and zero of the 13 capabilities. Added `"skills": "*"`.
75
+ Caught by `prepublishOnly`'s package validator, which is why the first cut never
76
+ reached the registry.
77
+ - `scripts/validate-package.js` still mapped ampcode's capability directory to
78
+ `commands`; it is `skills`.
79
+ - **Test-count floors realigned.** The Multi-Tool Installation floor moved
80
+ 36 -> 41 (33 to match the capability cut, then +8 for the new
81
+ variant-selection assertions; Claude has no `commands/`
82
+ directory now, so the suite counts three categories per scenario, not four),
83
+ and four floors that had drifted below their suites' actual counts were
84
+ raised to match: docs-builder 497 -> 538, friction 254 -> 323, sync-rules
85
+ 15 -> 25, stub-check 19 -> 24. Each floor was verified to still fail when
86
+ set one above actual.
87
+ - **Command frontmatter was largely invented.** Checked against each tool's own
88
+ docs: `usage:` is not a field in any of the four. Droid commands support only
89
+ `description` and `argument-hint` (tool scoping is explicitly unavailable for
90
+ commands); opencode commands support only `description`, `agent`, `model` and
91
+ `subtask`, and take their name from the filename; Claude Code command files
92
+ ignore `name`. Every unsupported key is removed, so the `allowed-tools` those
93
+ files carried — which did nothing on droid or opencode — is gone. Droid
94
+ subagents lose `when_to_use`, which is not a Factory field; its text is
95
+ folded into `description`, which is what Factory reads for routing.
96
+ `scripts/frontmatter.json` now records the real per-kit schemas and
97
+ `mirror.cjs check` enforces them.
98
+ - **Three kits were sending users to the wrong memory directory.**
99
+ `/branch-review`, `/refactor` and `/release` told droid, ampcode and
100
+ opencode users to look in `.claude/remember/` instead of their own
101
+ `.factory/`, `.amp/` or `.opencode/`. Found by the new mirror check.
102
+ - **`1-create-prd.md` had silently lost five checklist lines in droid only**,
103
+ from an earlier partial hand-mirror. 22 drifted or missing files were
104
+ restored in total, including `skill-creator/LICENSE.txt`, which its own
105
+ frontmatter cites and which was absent from all three kits.
106
+ - **`docs-builder.md` carried claude's `Bash(node:*)` syntax in all three
107
+ other kits**, where the correct form is `Bash(node *)`.
108
+ - **Only a symlink that actually leaves the repo counts as an escape.** The
109
+ previous check flagged in-repo links too; mirrored to all four kits.
110
+
111
+ ### Changed
112
+
113
+ - `npm test` now runs `scripts/validate-package.js` as its last step, so the
114
+ publish-time validator runs locally instead of only inside `publish.yml`.
115
+ The first cut's gate went green on a package publish then rejected.
116
+ - New `testVariantSelectionDelivers` in the multi-tool suite asserts what the
117
+ installer actually *selects* per tool, not what the package tree contains.
118
+ The existing scenarios copy the whole tree and read `variants.json` only to
119
+ check the variant key exists, so they could not see a missing content field.
120
+ - Six commands and skills that had no `allowed-tools` at all — `remember`,
121
+ `stash`, `brainstorming`, `live-canvas`, `root-cause`, `skill-creator` — now
122
+ declare a `Read, Grep, Glob` floor, so those calls stop prompting. Subagents
123
+ are deliberately untouched: claude and ampcode omit `tools` and so inherit
124
+ everything, droid already lists all three, and opencode's `tools` is a
125
+ write/edit/bash permission map where they are not expressible.
126
+ - README and `packages/subagentic-manual.md` rewritten to lead with the
127
+ catalog rather than a pitch.
128
+ - Command READMEs live in `docs/product/` and no longer ship inside the
129
+ packages; the live-canvas-channel README moved out too.
130
+ - `AGENT_RULES.md` testing standards are stated as principles rather than as
131
+ pytest specifics.
132
+
133
+ ## [3.0.0] - 2026-09-04
134
+
135
+ ### Breaking
136
+ - **The `context-builder` subagent is removed — catalog goes 11 -> 10 agents.**
137
+ `docs-builder` supersedes its Tier 2/3 work (creating/splitting `docs/*.md`,
138
+ validated on real corpora; `docs/index.md` via `index-flat` is the sole index,
139
+ same reason `docs/wiki-index.md` was already deleted). Tier 1 (author
140
+ `CLAUDE.md`) was the only unique part, and its one load-bearing invariant —
141
+ `CLAUDE.md` must `@`-include `.claude/remember/MEMORY.md` and nothing else —
142
+ is now a mechanical gate in `stub-check.cjs`, run every `/remember`; a prose
143
+ rule inside a subagent was always the weaker enforcement. **Migration:** for
144
+ the doc-authoring work `context-builder` did, use `/docs-builder`; for a
145
+ cold-start `CLAUDE.md` on a brand-new project, use Claude Code's own `/init`.
146
+ Orchestrator routing's Brownfield workflow now starts at `system-architect`.
147
+
148
+ ### Security
149
+ - **`sync-rules.cjs` and `stub-check.cjs` no longer write through a symlink out
150
+ of the repo they were invoked on.** `/remember` runs across a fleet of sibling
151
+ checkouts, so a relative link only has to reach a neighbor. Three routes were
152
+ reproduced and closed: a dangling link at the write target (followed by
153
+ `writeFileSync` as if the file were merely absent), a symlinked parent
154
+ directory (invisible to a leaf-only `lstat` guard), and a symlinked
155
+ `CLAUDE.md` that `stub-check.cjs` rewrote in place with no rename-away step.
156
+ `escapesRepo()` resolves the deepest existing ancestor with `realpath` and
157
+ confirms the write still lands inside the repo, `lstat`-ing the leaf for the
158
+ dangling case; refusal is loud (an `escapes` action / a skip message), never
159
+ silent. Mirrored to all four kits.
160
+
161
+ ### Added
162
+ - **`AGENT_RULES.md` is now kept current in every repo, instead of written once and
163
+ forgotten.** `remember/sync-rules.cjs` byte-compares the repo copy against the
164
+ template shipped beside it on every `/remember` run: identical does nothing at all,
165
+ absent copies it in, and a differing body is moved to a single `AGENT_RULES.md.bak`
166
+ before the new one lands. The `.bak` is one file, deliberately — a customised body
167
+ survives exactly one release, so fold your changes in before the next update. This
168
+ replaced a bootstrap-once rule that had left a measured 35 local repos many releases
169
+ behind, after three hand sweeps failed to hold.
170
+ - **`remember/stub-check.cjs` asserts the config stub's SHAPE and repairs it.** v2.19
171
+ demoted `AGENT_RULES.md` from an `@`-include to a plain pointer — an `@`-include
172
+ hot-loads ~300 lines into every session — but nothing enforced it, and 21 of 37
173
+ measured repos had drifted back. It also repairs a MEMORY include that is not
174
+ `@<dir>/remember/MEMORY.md`, since a bare `@MEMORY.md` resolves to a nonexistent
175
+ root file and hot memory then silently never loads. It edits only *inside* the
176
+ marker pairs and only the mechanism; the prose in those blocks stays user-owned.
177
+ It will **not** repoint a MEMORY include at a file that does not exist — a repo
178
+ still on the pre-rename `.claude/memory/` layout has a live file at the old path,
179
+ and breaking a working include to satisfy a naming convention is worse than saying
180
+ so.
181
+ - **`remember/version-check.cjs` nudges when the installed liteagents is behind.**
182
+ One line in `/remember` step 0, advice only — it never installs. Any failure
183
+ (offline, DNS, timeout) is a silent skip, because a memory command that hangs on a
184
+ network call is worse than one that misses a nudge. The installer now stamps
185
+ `liteagents_version` into its manifest so the check does not shell out to
186
+ `npm ls -g` on every run (measured 502ms -> 113ms warm).
187
+ - **The installer says where your backup went.** On a reinstall it now closes with the
188
+ path of every install it moved aside, and notes that an edited `AGENT_RULES.md` is
189
+ preserved in the backup's `remember/` folder. A fresh install's output is unchanged.
190
+
191
+ ### Changed
192
+ - **`/remember` reports every write verbatim.** Step 8 relays exactly what
193
+ `version-check.cjs`, `sync-rules.cjs` and `stub-check.cjs` printed, and nothing when
194
+ they printed nothing. Paraphrasing could drop the `AGENT_RULES.md.bak` filename,
195
+ which is the one thing someone who just lost their edits needs.
196
+ - **The stub check survives a quiet run.** Step 1's guard stops the run when there are
197
+ no unprocessed stashes and no friction output — which is exactly the state of a
198
+ stale, unattended repo. `stub-check.cjs` now runs before that stop; skipping it on
199
+ quiet runs is how a repo with nothing to remember stayed broken forever.
200
+ - **`/refactor` hands the review back instead of chaining it.** Step 6's "commit, then
201
+ run `/branch-review`" read as a sequence to execute; a field run started the review
202
+ off the owner's "commit" and the owner objected. It now states that this is a
203
+ sentence to say, that both are the user's separate calls, and that "commit"/"yes"/"go"
204
+ authorizes the commit and nothing after it.
205
+
206
+ ### Fixed
207
+ - Four places stated the memory-include mechanism using the broken bare `@MEMORY.md`
208
+ form, including an anti-pattern table an agent reads before writing the config.
209
+ - `poc/friction-file-referents/README.md` claimed everything needed to audit it was in
210
+ the directory. `score.py` reproduces only the LLM-experiment table (Findings 4-6);
211
+ the mechanical-study numbers (Findings 2-3) come from a run whose script was never
212
+ committed. Now stated precisely.
213
+
214
+ ---
215
+
10
216
  ## [2.24.1] - 2026-09-03
11
217
 
12
218
  ### Changed
package/README.md CHANGED
@@ -9,201 +9,169 @@
9
9
  ╚══════╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝
10
10
  ```
11
11
 
12
- **AI development toolkit with 11 specialized agents and 18 commands per tool**
12
+ **10 specialized agents · 13 commands & skills · Claude · Opencode · Ampcode · Droid**
13
13
 
14
14
  <p align="center">
15
- <img src="https://img.shields.io/github/package-json/v/hamr0/liteagents?label=version&color=2a4f8c" alt="version (auto from package.json)">
15
+ <img src="https://img.shields.io/github/package-json/v/hamr0/liteagents?label=version&color=2a4f8c" alt="version">
16
16
  <img src="https://img.shields.io/badge/license-Apache%202.0-2a4f8c" alt="license: Apache 2.0">
17
17
  </p>
18
18
 
19
- **Supported Tools:**
20
- [![Claude](https://img.shields.io/badge/Claude-Supported-blue?logo=anthropic)](https://claude.ai)
21
- [![Opencode](https://img.shields.io/badge/Opencode-Supported-green)](https://github.com/hamr0/opencode)
22
- [![Ampcode](https://img.shields.io/badge/Ampcode-Supported-orange)](https://github.com/hamr0/ampcode)
23
- [![Droid](https://img.shields.io/badge/Droid-Supported-red)](https://github.com/hamr0/droid)
24
-
25
19
  </div>
26
20
 
27
- Specialized AI agents and workflow commands for product management, agile development, and software engineering. Simple installer supports Claude, Opencode, Ampcode, and Droid.
28
-
29
- ---
21
+ Liteagents started as scaffolding for early LLMs that needed to be told everything.
22
+ It isn't that anymore. Models got smarter, so the toolkit got thinner: specialists you
23
+ call by name or that trigger themselves on domain, wide lanes instead of tight rails,
24
+ constraints on *what* rather than scripts for *how*.
30
25
 
31
- ## Quick Start
26
+ It is actively challenged, pruned and rewritten — things get renamed, added, and
27
+ deleted as models improve. That churn is the point.
32
28
 
33
29
  ```bash
34
- # Option 1: NPX (recommended)
35
- npx liteagents
36
-
37
- # Option 2: Global install (never use sudo)
38
- npm install -g liteagents
39
- liteagents
40
-
41
- # If permission errors:
42
- # mkdir -p ~/.npm-global && npm config set prefix '~/.npm-global'
43
- # echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
30
+ npx liteagents # recommended
31
+ # or: npm install -g liteagents && liteagents (never sudo)
44
32
  ```
45
33
 
46
- ### Supported Tools
34
+ <sub>Permission errors? `mkdir -p ~/.npm-global && npm config set prefix '~/.npm-global'`, then add `~/.npm-global/bin` to your `PATH`.</sub>
47
35
 
48
- - **Claude Code** - 11 subagents + 8 skills + 10 commands (+ optional live-canvas channel plugin)
49
- - **Opencode** - 11 agent references + 18 commands
50
- - **Ampcode** - 11 subagents + 18 commands
51
- - **Droid** - 11 agent references + 18 commands
36
+ ---
52
37
 
53
- **Key Difference:**
54
- - **Claude Code**: Full subagent system with orchestrator + skills (auto-triggering)
55
- - **Opencode / Droid / Ampcode**: Commands only + agent reference documentation
38
+ ## The catalog
39
+
40
+ **Agents** invoke with `@name` (Claude Code) or `/name`.
41
+
42
+ | Agent | What it's for |
43
+ |---|---|
44
+ | `1-create-prd` | Define scope as a PRD — a portal into the work, not a spec to obey |
45
+ | `2-generate-tasks` | Break a PRD into granular, actionable tasks |
46
+ | `3-process-task-list` | Execute tasks one at a time with review checkpoints |
47
+ | `orchestrator` | Read intent, route to the right agent sequence |
48
+ | `code-developer` | Implementation, debugging, refactoring |
49
+ | `quality-assurance` | Test architecture, quality gates, risk assessment |
50
+ | `feature-planner` | Epics, user stories, prioritization, backlog |
51
+ | `market-researcher` | Market and competitive analysis, project discovery |
52
+ | `system-architect` | System design, tech selection, API design, scale |
53
+ | `ui-designer` | UI/UX, wireframes, prototypes, design systems |
54
+
55
+ **Commands & skills** — `/name`.
56
+
57
+ | Command | What it's for |
58
+ |---|---|
59
+ | `/stash` | Snapshot this session's context before compaction or handoff |
60
+ | `/remember` | Fold stashes + friction into hot project memory |
61
+ | `/docs-builder` | Reorg, index, and split a docs corpus so search actually finds things |
62
+ | `/branch-review` | Full pre-merge review — blockers reported, nits to the fix ledger |
63
+ | `/refactor` | Clear the fix ledger; with args, refactor and optimize a named area |
64
+ | `/release` | Docs sweep, version bump, local commit, then hand back the merge sequence |
65
+ | `/security` | Standalone vulnerability audit (also stage 2 of `/branch-review`) |
66
+ | `/ship` | Mechanical pre-deploy gate — tests, build, tree state, pass/fail only |
67
+ | `/test-generate` | Generate a test suite and verify each test exercises real code |
68
+ | `/brainstorming` | Turn a rough idea into a formed design by questioning |
69
+ | `/root-cause` | Find the cause before changing code — evidence, backward trace, one hypothesis, fix at the source |
70
+ | `/live-canvas` | UI variations with click-to-annotate feedback in the browser |
71
+ | `/skill-creator` | Build a new skill |
72
+
73
+ <sub>Claude Code and Amp ship all 13 as skills; Opencode and Droid expose all 13 as commands. All four also ship agent reference docs.</sub>
56
74
 
57
- ### Start Using
75
+ ---
58
76
 
59
- ```bash
60
- # Claude Code examples
61
- @orchestrator help
62
- @1-create-prd Create a PRD for a task management app
63
- /brainstorming Explore authentication approaches
64
- /tdd-flow Implement user login
65
-
66
- # Opencode/Ampcode/Droid examples
67
- /1-create-prd Create a PRD for a task management app
68
- /brainstorming Explore authentication approaches
69
- /tdd-flow Implement user login
70
- ```
77
+ ## The ones that carry the load
71
78
 
72
- ---
79
+ ### `AGENT_RULES.md` — the architect behind every project
73
80
 
74
- ## Hot Memory — project-local learning from your own sessions
81
+ One lightweight, generic, model-agnostic rules doc. It sets **what** matters and leaves
82
+ wide room on **how**: simple over clever, every line has a purpose, surgical changes,
83
+ exhaust the stdlib before reaching for a dependency, POC before you design.
75
84
 
76
- Liteagents ships a two-command pipeline that turns Claude Code's session logs into project-local memory. No databases, no external services, just markdown files the assistant reads via `@MEMORY.md`.
85
+ With smarter models a PRD is a **portal, not a deliverable** the start of a
86
+ conversation. You discover it module by module, reviewing, changing and deleting as
87
+ experience arrives, instead of pinning everything down up front.
77
88
 
78
- ```
79
- /stash → /remember
80
- capture analyze + consolidate
81
- ```
89
+ It is loaded every session, linked from `CLAUDE.md`, and `/remember` keeps it fresh —
90
+ each run byte-compares your copy against the template that shipped with your install.
82
91
 
83
- - **`/stash`** — snapshot the current session's context before compaction or handoff; nudges you to consolidate once a few stashes pile up. The write-up runs on a mid-tier model, dispatched as a background subagent where your tool supports it, so the session isn't blocked on formatting/file I/O
84
- - **`/remember`** — runs friction analysis automatically (mining JSONL session logs across *all* your projects for frustration signals, failed flows, and abandonment patterns, clustered into antigen candidates), then consolidates stashes + friction antigens into `.claude/remember/MEMORY.md`; auto-injected into `CLAUDE.md` via `@MEMORY.md` so every future session benefits. Per-stash extraction runs as concurrent subagent calls on a mid-tier model — no model name hardcoded, so it works with whatever your tool has configured
92
+ | your copy | what happens |
93
+ |---|---|
94
+ | identical | nothing — no write, no output |
95
+ | missing | copied in |
96
+ | different | moved to `AGENT_RULES.md.bak`, template copied in, both reported |
85
97
 
86
- `/remember` also bootstraps a one-time `AGENT_RULES.md` coding-standards template into `.claude/remember/` on first run (never overwritten again after that), referenced separately in `CLAUDE.md` for the assistant to consult when building something new — a static guide, not something the pipeline learns or extracts.
98
+ Edits are never destroyed, but they aren't preserved in place either. `.bak` is a
99
+ *single* file the next update overwrites — a customised body survives one release, not two.
87
100
 
88
- What you get is a memory that *learns from your own mistakes and interventions*, grows quietly in your repo, and works anywhere Claude Code runs. The friction pass inside `/remember` scans all your projects and gives you a per-repo reliability verdict:
101
+ ### `/stash` `/remember` the daily driver
89
102
 
90
103
  ```
91
- Per-Project:
92
- my-app 56% BAD (40/72) median: 16.0 🔴
93
- api-service 40% BAD (2/5) median: 0.5 🟡
94
- web-client 0% BAD (0/1) median: 0.0 ✅
104
+ /stash ──► /remember
105
+ capture consolidate
106
+ ```
95
107
 
96
- WORST: my-app/0203-1630-11eb903a peak=225 turns=127
97
- BEST: web-client/0202-2121-8d8608e1 peak=0 turns=4
108
+ **`/stash`** is project-local: one session, one feature or scope or goal. Start fresh
109
+ on delivery, or when context hits ~30% (never past 40%). The stash is the clean handoff
110
+ to the next session.
98
111
 
99
- Verdict: USEFUL Intervention predictability: 93%
100
- ```
112
+ **`/remember`** fires on the nudge every 5 stashes. It folds those 5 in — and it also
113
+ reads across *all* your projects, mining session logs for where you and the model
114
+ actually collided: corrections, dead ends, abandoned flows. Those become rules, so the
115
+ next session is less wrong than this one.
101
116
 
102
- Results land in `.claude/remember/friction/antigen_review.md` with projects, error patterns, and offending tool sequences called out per cluster — which `/remember` then encodes as rules the next session sees.
117
+ Markdown files, no database, no RAG, always hot in context, and it keeps the nuances of
118
+ each project separate. Runs on a mid-tier model.
103
119
 
104
- > This is the thing in liteagents that nothing else ships. Normal skill bundles give you instructions. The hot-memory pipeline gives you instructions the assistant wrote for itself, from your own logs.
120
+ ### `/docs-builder` the other daily driver
105
121
 
106
- ---
122
+ Markdown gets out of hand. A token-hungry agent then can't find the knowledge that
123
+ matters. (Its own PRD grew from 500 lines to 3k+ as findings piled in — exactly the
124
+ problem it exists to solve.)
107
125
 
108
- ## What's Included
109
-
110
- ### 11 Agents
111
-
112
- **Workflow Agents (3):**
113
- - **1-create-prd** - Define scope with structured Product Requirement Documents
114
- - **2-generate-tasks** - Break PRDs into granular, actionable task lists
115
- - **3-process-task-list** - Execute tasks iteratively with progress tracking and review checkpoints
116
-
117
- **Specialist Agents (8):**
118
- - **orchestrator** - Analyze intent, coordinate workflows, route to optimal agent sequences
119
- - **code-developer** - Implementation, debugging, refactoring, code best practices
120
- - **quality-assurance** - Test architecture, quality gates, requirements traceability, risk assessment
121
- - **context-builder** - Initialize project context, discover documentation, create knowledge bases
122
- - **feature-planner** - Epics, user stories, prioritization, backlog management, retrospectives
123
- - **market-researcher** - Market analysis, competitive research, project discovery, brainstorming
124
- - **system-architect** - System design, technology selection, API design, scalability planning
125
- - **ui-designer** - UI/UX design, wireframes, prototypes, accessibility, design systems
126
-
127
- ### 18 Commands/Skills
128
-
129
- **Auto-Triggering Skills (3)** - Claude Code only:
130
- - **tdd-flow** - Write test first, watch fail, minimal passing code
131
- - **test-traps** - Prevent mocking anti-patterns
132
- - **verify-done** - Verify before claiming done
133
-
134
- **Manual Skills/Commands (15):**
135
-
136
- *Hot Memory Pipeline (2)* — see the [Hot Memory](#hot-memory--project-local-learning-from-your-own-sessions) section above for the full walkthrough:
137
- - **stash** - Snapshot session context to `.claude/stash/` before compaction, handoff, or ending complex work
138
- - **remember** - Consolidate stashes + friction antigens into `.claude/remember/MEMORY.md`; auto-injected via `@.claude/remember/MEMORY.md`
139
-
140
- *Design*:
141
- - **live-canvas** - Design UI variations with click-to-annotate feedback in the browser; ships a companion MCP channel plugin for Claude Code so Saves stream into the session in real time. Other tools use batch mode.
142
-
143
- *Workflow & analysis*:
144
- - **brainstorming** - Structured brainstorming sessions
145
- - **docs-builder** - Reorg a docs corpus, split an oversized doc, search it, keep pages current, index them
146
- - **trace-back** - Trace bugs backward through call stack
147
- - **skill-creator** - Guide for creating new skills
148
- - **debug-method** - Four-phase debugging framework
149
- - **optimize** - Performance analysis
150
- - **refactor** - Safe refactoring with behavior preservation; with no arguments, works through the fix ledger `/branch-review` accumulated
151
- - **branch-review** - Pre-merge gate that reports and never fixes: general review at a chosen effort level, a full security audit that runs at full depth regardless of level, then an adversarial verify pass. Needs a clean tree. Only reproduced Critical/High failures block; everything else lands in the fix ledger for `/refactor`
152
- - **security** - Standalone vulnerability scan; also runs as stage 2 of `/branch-review`
153
- - **ship** - Mechanical pre-deploy gate: every item is answerable by running a command and reading its exit code, recorded as pass/fail/N/A. A check not run is a fail, and N/A needs a stated reason
154
- - **release** - Prepare a release on the current branch: verify → docs sweep → version bump → local commit, then hand back the merge/tag/publish sequence (never pushes). Refuses without a review recorded at the current HEAD SHA
155
- - **test-generate** - Generate test suites
156
-
157
- > **Claude-only plugin:** `live-canvas-channel` is a bundled Claude Code MCP channel plugin that ships under `~/.claude/plugins/live-canvas-marketplace/`. One-time `/plugin install` + a session started with `--dangerously-load-development-channels` unlocks live mode. Skill probes for the channel on each invocation and handholds setup when missing. See [`packages/claude/skills/live-canvas/README.md`](packages/claude/skills/live-canvas/README.md) for the full walkthrough.
126
+ It indexes everything under `/docs` in four buckets — `product/`, `logs/`, `wiki/`,
127
+ `archive/` — reorganizes, indexes, and splits oversized docs so you don't have to.
128
+ Mid-tier model.
158
129
 
159
- ---
130
+ ### `/live-canvas` — the UI every agent CLI was missing
160
131
 
161
- ## Documentation
132
+ A terminal agent can't see your screen, and you can't describe "that padding, on that
133
+ card, but only on mobile" in words without burning ten minutes.
162
134
 
163
- | Document | Description |
164
- |----------|-------------|
165
- | **[INSTALLER_GUIDE.md](docs/product/INSTALLER_GUIDE.md)** | Complete installation guide, troubleshooting, and FAQ |
166
- | **[subagentic-manual.md](packages/subagentic-manual.md)** | Detailed agent/command reference |
167
- | **[remember-README.md](docs/product/remember-README.md)** | How hot memory works — the `/stash` → `/remember` pipeline, the friction sensor, and the antigen ledger |
168
- | **[docs-builder-README.md](docs/product/docs-builder-README.md)** | How `/docs-builder` works — the reorg/cleanup modes, what it measurably costs, and the ledger that tracks doc drift |
169
- | **[branch-review-README.md](docs/product/branch-review-README.md)** | How the pre-merge gate works — the three stages, what blocks a merge, and the `/branch-review` → fix ledger → `/refactor` loop |
135
+ `/live-canvas` spins up one lightweight localhost page with your UI on it. You **click
136
+ the thing that needs changing**, type what you want, and submit. Comment on as many
137
+ elements as you like, all in one pass, then send the batch to the agent.
170
138
 
171
- ---
139
+ Two ways it comes back:
172
140
 
173
- ## Example Workflows
141
+ - **JSON mode** — feedback lands in a file, you tell the agent to read it. Works in any tool.
142
+ - **Live mode** — an MCP channel streams each comment straight into the session, so edits
143
+ land while you're still in the browser. Claude Code only.
174
144
 
175
- **Feature Development:**
176
- ```
177
- @orchestrator I need to add user authentication
178
- # Orchestrator routes to:
179
- # → market-researcher (research approaches)
180
- # → 1-create-prd (requirements)
181
- # → 2-generate-tasks (implementation tasks)
182
- # → 3-process-task-list (execution)
183
- ```
145
+ It also ships with real UI direction baked in, so it can generate variations of a screen
146
+ for you to pick from — no more hours spent nudging divs to find out what you actually wanted.
184
147
 
185
- **Code Quality:**
186
- ```
187
- @quality-assurance Review this PR before merge
188
- /branch-review main medium # review + security audit; blockers reported, the rest to the fix ledger
189
- /refactor # no args: work through the fix ledger branch-review accumulated, between features
190
- /debug-method Investigate this race condition
191
- ```
148
+ ### `/branch-review` → `/release` → `/refactor`
192
149
 
193
- **Architecture & Design:**
194
- ```
195
- @system-architect Design microservices architecture
196
- @ui-designer Create wireframes for mobile checkout
197
- ```
150
+ - **`/branch-review`** — the powerhouse. Reviews every change on a branch, medium depth
151
+ by default. Surfaces confirmed blockers only: real bugs, dead and unused code,
152
+ state-ownership breaks, plus a full OWASP-shaped security pass (no leaked keys, no
153
+ injection, trust boundaries checked) that runs at full depth regardless of level.
154
+ Everything non-blocking goes to the fix ledger.
155
+ - **`/release`** — does the pre-release chores you'd otherwise do by hand: README,
156
+ CHANGELOG, PRD, findings, version bump, local commit. Then it tells you you're ready
157
+ to merge, and hands the sequence back. It never pushes.
158
+ - **`/refactor`** — with no arguments, works the fix ledger. Cumulative by design: nits
159
+ pile up until you choose to clear them, so review and release never drown in them.
198
160
 
199
161
  ---
200
162
 
201
- ## Stats
163
+ ## Deeper docs
202
164
 
203
- - **11** Specialized Agents
204
- - **18** Workflow Commands & Skills
205
- - **4** Supported Tools (Claude, Opencode, Ampcode, Droid)
206
- - **Apache-2.0** License
165
+ | Document | What's in it |
166
+ |---|---|
167
+ | [`/remember`](docs/product/remember-README.md) | The `/stash` `/remember` pipeline, friction sensor, antigen ledger |
168
+ | [`/docs-builder`](docs/product/docs-builder-README.md) | Reorg and cleanup modes, measured cost, the drift ledger |
169
+ | [`/branch-review`](docs/product/branch-review-README.md) | The three stages, what blocks, the fix-ledger loop |
170
+ | [`/live-canvas`](docs/product/live-canvas-README.md) | Both modes, the click-to-annotate overlay, and setup |
171
+ | [live-canvas-channel](docs/product/live-canvas-channel-README.md) | The Claude Code MCP channel plugin — install, protocol, debugging |
172
+ | [Installer guide](docs/product/INSTALLER_GUIDE.md) | Install, custom paths, uninstall, troubleshooting, FAQ — and how to change a command, skill or subagent |
173
+ | [All agents & commands](packages/subagentic-manual.md) | Full agent and command reference |
174
+ | [Doc index](docs/index.md) | Generated index of every doc, rebuilt on each reorg |
207
175
 
208
176
  ---
209
177
 
@@ -213,12 +181,4 @@ Results land in `.claude/remember/friction/antigen_review.md` with projects, err
213
181
  - **GitHub:** https://github.com/hamr0/liteagents
214
182
  - **Issues:** https://github.com/hamr0/liteagents/issues
215
183
 
216
- ---
217
-
218
- ## License
219
-
220
184
  Apache-2.0 © 2026 hamr0 — see [LICENSE](LICENSE).
221
-
222
- ---
223
-
224
- **Need help?** See the [Installer Guide](docs/product/INSTALLER_GUIDE.md) or [open an issue](https://github.com/hamr0/liteagents/issues)
package/installer/cli.js CHANGED
@@ -13,13 +13,16 @@
13
13
  const fs = require('fs');
14
14
  const path = require('path');
15
15
  const readline = require('readline');
16
+ const os = require('os');
16
17
 
17
18
  // Single source of truth for version; UPDATE_VERSION.sh bumps only package.json.
18
19
  const PACKAGE_JSON = require('../package.json');
19
20
  const PACKAGE_VERSION = PACKAGE_JSON.version;
20
21
  // Banner counts derived from the description field — same source as README.
21
- const AGENT_COUNT = (PACKAGE_JSON.description.match(/(\d+)\s+specialized agents/) || [, '11'])[1];
22
- const COMMAND_COUNT = (PACKAGE_JSON.description.match(/(\d+)\s+commands/) || [, '18'])[1];
22
+ const AGENT_COUNT = (PACKAGE_JSON.description.match(/(\d+)\s+specialized agents/) || [, '10'])[1];
23
+ // Claude Code and Amp ship these as skills, Droid and opencode as commands,
24
+ // so the banner counts capabilities rather than naming one shape.
25
+ const CAPABILITY_COUNT = (PACKAGE_JSON.description.match(/(\d+)\s+capabilities/) || [, '13'])[1];
23
26
 
24
27
  // ANSI color codes
25
28
  const colors = {
@@ -30,9 +33,35 @@ const colors = {
30
33
  yellow: '\x1b[33m',
31
34
  cyan: '\x1b[36m',
32
35
  magenta: '\x1b[35m',
33
- red: '\x1b[31m'
36
+ red: '\x1b[31m',
37
+ dim: '\x1b[2m'
34
38
  };
35
39
 
40
+ /**
41
+ * Render the closing note about backed-up installs, printed after `Done!`.
42
+ * Returns '' when backupLog is empty so a fresh install's output is
43
+ * unchanged. Never names `commands/` vs `command/` (opencode uses the
44
+ * singular form) — the note points at the shared `remember/` folder inside
45
+ * the backup, which is the same for every tool.
46
+ *
47
+ * @param {Array<{original: string, backup: string}>} backupLog
48
+ * @returns {string} Text to print (includes its own leading newline), or ''.
49
+ */
50
+ function formatBackupClosingNote(backupLog) {
51
+ if (!backupLog || backupLog.length === 0) {
52
+ return '';
53
+ }
54
+
55
+ const lines = [`${colors.yellow}Previous install(s) backed up:${colors.reset}`];
56
+ for (const entry of backupLog) {
57
+ lines.push(` ${entry.backup.replace(os.homedir(), '~')}`);
58
+ }
59
+ lines.push(`${colors.dim}If you had edited AGENT_RULES.md, your copy is preserved in`);
60
+ lines.push(`each backup's remember/ folder.${colors.reset}`);
61
+
62
+ return `\n${lines.join('\n')}`;
63
+ }
64
+
36
65
  class InteractiveInstaller {
37
66
  constructor() {
38
67
  this.rl = readline.createInterface({
@@ -463,7 +492,7 @@ ${colors.bright}${colors.cyan}██╔══██║██║ ██║█
463
492
  ${colors.bright}${colors.cyan}██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ██║╚██████╗ ██║ ██╗██║ ██║${colors.reset}
464
493
  ${colors.bright}${colors.cyan}╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝${colors.reset}
465
494
 
466
- ${colors.bright}v${PACKAGE_VERSION} | ${AGENT_COUNT} agents + ${COMMAND_COUNT} commands per tool${colors.reset}
495
+ ${colors.bright}v${PACKAGE_VERSION} | ${AGENT_COUNT} agents + ${CAPABILITY_COUNT} capabilities per tool${colors.reset}
467
496
  `);
468
497
  }
469
498
 
@@ -701,6 +730,11 @@ ${colors.bright}v${PACKAGE_VERSION} | ${AGENT_COUNT} agents + ${COMMAND_COUNT} c
701
730
  }
702
731
 
703
732
  console.log(`\n${colors.bright}${colors.green}Done!${colors.reset}`);
733
+
734
+ const closingNote = formatBackupClosingNote(installationEngine.backupLog);
735
+ if (closingNote) {
736
+ console.log(closingNote);
737
+ }
704
738
  }
705
739
 
706
740
  /**
@@ -765,4 +799,5 @@ if (require.main === module) {
765
799
  installer.run().catch(console.error);
766
800
  }
767
801
 
768
- module.exports = InteractiveInstaller;
802
+ module.exports = InteractiveInstaller;
803
+ module.exports.formatBackupClosingNote = formatBackupClosingNote;