compound-agent 1.7.4 → 1.7.6

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/CHANGELOG.md CHANGED
@@ -7,6 +7,41 @@ All notable changes to this project will be documented in this file.
7
7
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## [1.7.6] - 2026-03-12
11
+
12
+ ### Added
13
+
14
+ - **`ca install-beads` command**: Standalone subcommand to install the beads CLI via the official script. Includes a platform guard (skips on Windows with `exitCode 1`), an "already installed" short-circuit, a `--yes` flag to bypass the confirmation hint (safe: never runs `curl | bash` without explicit opt-in), `spawnSync` with a 60-second timeout, and a post-install shell-reload warning. Non-TTY mode without `--yes` prints the install command as a copy-pasteable hint rather than silently doing nothing.
15
+
16
+ ### Fixed
17
+
18
+ - **Beads hint display**: `printBeadsFullStatus` was silently swallowing the install hint message when the beads CLI was not found. The curl install command is now printed below the "not found" line.
19
+ - **Beads hint text**: `checkBeadsAvailable` now returns the actual `curl -sSL ... | bash` install command in its message instead of a bare repo URL.
20
+ - **Doctor fix message**: `ca doctor` now shows `Run: ca install-beads` for the missing-beads check instead of pointing to a URL.
21
+ - **`ca knowledge` description**: Reframed from "Ask the project docs any question" to "Semantic search over project docs — use keyword phrases, not questions" in both the live prime template and the setup template, reflecting the underlying embedding RAG retrieval mechanism.
22
+
23
+ ## [1.7.5] - 2026-03-12
24
+
25
+ ### Added
26
+
27
+ - **`ca feedback` command**: Surfaces the GitHub Discussions URL for bug reports and feature requests. `ca feedback --open` opens the page directly in the browser. Cross-platform (macOS `open`, Windows `start`, Linux `xdg-open`).
28
+ - **Star and feedback prompt in `ca about`**: TTY sessions now see a star-us link and the GitHub Discussions URL after the changelog output.
29
+
30
+ ### Changed
31
+
32
+ - **README overhaul**: Complete rewrite to present compound-agent as a full agentic development environment rather than a memory plugin.
33
+ - New thesis-driven one-liner that names category, mechanism, and benefit
34
+ - "What gets installed" inventory table (15 commands, 24 agent role skills, 7 hooks, 5 phase skills, 5 docs)
35
+ - Three principles section mapping each architecture layer to the problem it solves (Memory / Feedback Loops / Navigable Structure)
36
+ - "Agents are interchangeable" design principle explained in the overview
37
+ - Levels of use replacing flat Quick Start: memory-only, structured workflow, and factory mode with code examples
38
+ - `/compound:architect` promoted to its own section with 4-phase description and context-window motivation
39
+ - Infinity loop elevated from CLI table row to its own section with full flag examples and honest maturity note
40
+ - Automatic hooks table with per-hook descriptions
41
+ - Architecture diagram updated to reflect three-principle mapping and accurate counts
42
+ - Compound loop diagram updated with architect as optional upstream entry point
43
+ - "Open with an AI agent" entry point in the Documentation section
44
+
10
45
  ## [1.7.4] - 2026-03-11
11
46
 
12
47
  ### Added
package/README.md CHANGED
@@ -1,51 +1,79 @@
1
1
  # Compound Agent
2
2
 
3
- **Memory. Knowledge. Structure. Accountability. For AI coding agents.**
3
+ > compound-agent is a Claude Code plugin that ships a self-improving development factory into your repository — persistent memory, structured multi-agent workflows, and autonomous loop execution. Fully local. Everything in git.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/compound-agent)](https://www.npmjs.com/package/compound-agent)
6
6
  [![license](https://img.shields.io/npm/l/compound-agent)](LICENSE)
7
7
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.3+-blue)](https://www.typescriptlang.org/)
8
8
 
9
- - **Memory** -- capture mistakes once, surface them forever
10
- - **Knowledge** -- hybrid vector search over your project docs
11
- - **Structure** -- 5-phase workflows with 35+ specialized agents
12
- - **Accountability** -- git-tracked issues, multi-agent reviews, quality gates
9
+ AI coding agents forget everything between sessions. Each session starts with whatever context was prepared for it — nothing more. Because agents carry no persistent state, that state must live in the codebase itself, and any agent that reads the same well-structured context should be able to pick up where another left off. Compound Agent implements this: it captures mistakes once, retrieves them precisely when relevant, and can hand entire systems to an autonomous loop that processes epic by epic with no human intervention.
13
10
 
14
- Fully local. Fully offline. Everything in git.
11
+ ## What gets installed
15
12
 
16
- ## Overview
13
+ `npx ca setup` injects a complete development environment into your repository:
17
14
 
18
- AI coding agents forget everything between sessions. Compound Agent fixes this with a three-layer system: issue tracking at the foundation, semantic memory with vector search in the middle, and structured workflows with multi-agent review on top. It captures knowledge from corrections, discoveries, and completed work, then retrieves it precisely when relevant. Every cycle through the loop makes subsequent cycles smarter.
15
+ | Component | What ships |
16
+ |-----------|-----------|
17
+ | 15 slash commands | `/compound:architect`, `cook-it`, `spec-dev`, `plan`, `work`, `review`, `compound`, `learn-that`, `check-that`, and more |
18
+ | 24 agent role skills | Security reviewers, TDD pair, decomposition convoy, spec writers, test analysers, drift detectors, and more |
19
+ | 7 automatic hooks | Fire on session start, prompt submit, tool use, tool failure, pre-compact, phase guard, and session stop |
20
+ | 5 phase skill files | Full workflow instructions for `architect`, `spec-dev`, `cook-it`, `work`, and `review` |
21
+ | 5 deployed docs | Workflow reference, CLI reference, skills guide, integration guide, and overview |
22
+
23
+ This is not a memory plugin bolted onto a text editor. It is the environment your agents run inside.
24
+
25
+ ## How it works
19
26
 
20
27
  ```mermaid
21
- graph LR
22
- B[SPEC DEV] --> P[PLAN]
23
- P --> W[WORK]
24
- W --> R[REVIEW]
25
- R --> C[COMPOUND]
26
- C --> M[(MEMORY)]
27
- M --> P
28
+ flowchart TD
29
+ A["/compound:architect\nDecompose large system\ninto epics via DDD"] -->|produces epics| L
30
+
31
+ subgraph L["Compound Loop — one cycle per epic"]
32
+ direction LR
33
+ S[SPEC-DEV] --> P[PLAN]
34
+ P --> W[WORK]
35
+ W --> R[REVIEW]
36
+ R --> C[COMPOUND]
37
+ end
38
+
39
+ C -->|writes lessons| M[(MEMORY\nJSONL + SQLite\n+ embeddings)]
40
+ M -->|injects context| P
28
41
 
29
42
  style M fill:#f9f,stroke:#333
43
+ style A fill:#e8f4fd,stroke:#4a9ede
30
44
  ```
31
45
 
46
+ Each cycle through the loop makes the next one smarter. The architect step is optional — use it for systems too large for a single feature cycle.
47
+
32
48
  ```mermaid
33
49
  block-beta
34
50
  columns 1
35
- block:L3["Workflows"]
36
- A["5-phase cycle"] B["35+ specialized agents"] C["Multi-model review"]
51
+ block:L3["Workflows · Feedback Loops"]
52
+ A["15 slash commands"] B["24 specialized agents"] C["Autonomous loop"]
37
53
  end
38
- block:L2["Semantic Memory"]
39
- D["Vector search"] E["Hybrid retrieval"] F["Cross-cutting patterns"]
54
+ block:L2["Semantic Memory · Codebase Memory"]
55
+ D["Vector search"] E["Hybrid retrieval"] F["Cross-session persistence"]
40
56
  end
41
- block:L1["Foundation"]
42
- G["Issue tracking"] H["Git-backed sync"] I["Quality gates"]
57
+ block:L1["Beads Foundation · Navigable Structure"]
58
+ G["Issue tracking"] H["Git-backed sync"] I["Dependency graphs"]
43
59
  end
44
60
 
45
61
  L3 --> L2
46
62
  L2 --> L1
47
63
  ```
48
64
 
65
+ ## Three principles
66
+
67
+ These constraints follow from how AI agents work, and each one maps to a layer of the architecture.
68
+
69
+ | Principle | Without it | Layer |
70
+ |-----------|-----------|-------|
71
+ | **Memory** | Same mistakes every session. Architectural decisions re-derived from scratch. Knowledge locked in human heads where agents cannot reach it. | Semantic Memory |
72
+ | **Feedback loops** | Agents cannot verify their own work. Manual review is the only quality gate. Drift is the default at agent-scale output. | Structured Workflows |
73
+ | **Navigable structure** | Context windows fill with orientation work. Agents make unverifiable assumptions about dependencies and ordering. | Beads Foundation |
74
+
75
+ The three are not independent. Memory without feedback loops is unreliable. Feedback without navigable structure fires blindly. The system works as a whole or not at all.
76
+
49
77
  ## Is this for you?
50
78
 
51
79
  **"It keeps making the same mistake every session."**
@@ -54,20 +82,130 @@ Capture it once. Compound Agent surfaces it automatically before the agent repea
54
82
  **"I explained our auth pattern three sessions ago. Now it's reimplementing from scratch."**
55
83
  Architectural decisions persist as searchable lessons. Next session, they inject into context before planning starts.
56
84
 
57
- **"My agent uses pandas when we standardized on Polars months ago."**
85
+ **"My agent uses pandas when we standardised on Polars months ago."**
58
86
  Preferences survive across sessions and projects. Once captured, they appear at the right moment.
59
87
 
60
88
  **"Code reviews keep catching the same class of bugs."**
61
- 35+ specialized review agents (security, performance, architecture, test coverage) run in parallel. Findings feed back as lessons that become test requirements in future work.
89
+ 24 specialised review agents (security, performance, architecture, test coverage) run in parallel. Findings feed back as lessons that become test requirements in future work.
62
90
 
63
91
  **"I have no idea what my agent actually learned or if it's reliable."**
64
- `ca list` shows all captured knowledge. `ca stats` shows health. `ca wrong <id>` invalidates bad lessons. Everything is git-tracked JSONL -- you can read, diff, and audit it.
92
+ `ca list` shows all captured knowledge. `ca stats` shows health. `ca wrong <id>` invalidates bad lessons. Everything is git-tracked JSONL you can read, diff, and audit it.
65
93
 
66
94
  **"I want structured phases, not just 'go build this'."**
67
95
  Five workflow phases (spec-dev, plan, work, review, compound) with mandatory gates between them. Each phase searches memory and docs for relevant context before starting.
68
96
 
69
97
  **"My agent doesn't read the project docs before making decisions."**
70
- `ca knowledge "auth flow"` runs hybrid search (vector + keyword) over your indexed docs. Agents query it automatically during planning -- ADRs, specs, and standards surface before code gets written.
98
+ `ca knowledge "auth flow"` runs hybrid search (vector + keyword) over your indexed docs. Agents query it automatically during planning ADRs, specs, and standards surface before code gets written.
99
+
100
+ **"I want to hand a large system spec to the machine and walk away."**
101
+ `/compound:architect` decomposes it into epics. `ca loop` processes them autonomously.
102
+
103
+ ## Levels of use
104
+
105
+ ### Level 1 — Memory only
106
+
107
+ Two minutes to set up. Works in any session without changing your existing workflow.
108
+
109
+ ```bash
110
+ # Capture a mistake or preference
111
+ ca learn "Always use Polars, not pandas in this project" --severity high
112
+ ca learn "Auth 401 fix: add X-Request-ID header" --type solution
113
+
114
+ # Search manually anytime
115
+ ca search "polars"
116
+
117
+ # Or let hooks surface it automatically — no command needed
118
+ ```
119
+
120
+ ### Level 2 — Structured workflow
121
+
122
+ One command runs all five phases on a single feature: spec-dev, plan, work (TDD + agent team), review (24 agents), and compound (capture lessons).
123
+
124
+ ```bash
125
+ /compound:cook-it "Add rate limiting to the API"
126
+ ```
127
+
128
+ Run phases individually when you want more control:
129
+
130
+ ```bash
131
+ /compound:spec-dev "Add rate limiting" # Socratic dialogue → EARS spec → Mermaid diagrams
132
+ /compound:plan # Tasks enriched by memory search
133
+ /compound:work # TDD with agent team
134
+ /compound:review # 24 parallel agents with severity gates
135
+ /compound:compound # Capture what was learned
136
+ ```
137
+
138
+ ### Level 3 — Factory mode
139
+
140
+ For systems too large for a single feature cycle. `/compound:architect` decomposes the system; `ca loop` processes the resulting epics autonomously.
141
+
142
+ ```bash
143
+ # Step 1: decompose the system into epics
144
+ /compound:architect "Multi-tenant SaaS: auth, billing, API, admin dashboard"
145
+ # → Socratic dialogue → system-level EARS spec → DDD decomposition
146
+ # → N epics with dependency graph, interface contracts, and scope boundaries
147
+
148
+ # Step 2: generate and run the loop
149
+ ca loop --reviewers claude-sonnet --review-every 3
150
+ ./infinity-loop.sh
151
+ # → Processes each epic in dependency order: spec-dev → plan → work → review → compound
152
+ # → Captures lessons after every cycle, improving subsequent cycles
153
+ ```
154
+
155
+ ## The infinity loop
156
+
157
+ `ca loop` generates a bash script that processes your beads epics sequentially, running the full cook-it cycle on each one. No human intervention required between epics.
158
+
159
+ ```bash
160
+ # Generate script for all ready epics
161
+ ca loop
162
+
163
+ # With periodic review every 3 epics
164
+ ca loop --reviewers claude-sonnet --review-every 3
165
+
166
+ # Target specific epics
167
+ ca loop --epics beads-abc beads-def beads-ghi --max-retries 2
168
+
169
+ # Run it
170
+ ./infinity-loop.sh
171
+ ```
172
+
173
+ The loop respects beads dependency graphs — it only processes epics whose dependencies are complete. If an epic fails after `--max-retries` attempts, it stops and reports before proceeding.
174
+
175
+ **Current maturity**: the loop works and has been used to ship real projects, including compound-agent itself. Two things still required human involvement: specifications had to be written before the loop started, and a human applied fixes after the first review pass surfaced real problems (missing error handling, a migration gap, insufficient test coverage). Fully unattended long-duration runs across many epics are the current area of hardening.
176
+
177
+ ## Automatic hooks
178
+
179
+ Once installed, seven Claude Code hooks fire without any commands:
180
+
181
+ | Hook | When it fires | What it does |
182
+ |------|--------------|--------------|
183
+ | `SessionStart` | Every new session | Loads high-severity lessons into context before you type anything |
184
+ | `PreCompact` | Before context compression | Saves phase state so cook-it survives compaction |
185
+ | `UserPromptSubmit` | Every prompt | Injects relevant memory items into context |
186
+ | `PreToolUse` | During cook-it | Enforces phase gates — prevents jumping ahead |
187
+ | `PostToolUse` | After tool success | Clears failure tracking state |
188
+ | `PostToolUseFailure` | After tool failure | Tracks failures; suggests memory search after repeated errors |
189
+ | `Stop` | Session end | Audits session for uncaptured lessons and unclosed issues |
190
+
191
+ No configuration needed. `npx ca setup` wires them into your `.claude/settings.json`.
192
+
193
+ ## `/compound:architect`
194
+
195
+ AI agents work best on well-scoped problems. When a task exceeds what fits comfortably in one context window, quality degrades — not from lack of capability but from too many competing concerns pulling in different directions.
196
+
197
+ `/compound:architect` addresses this before the cook-it cycle begins. It takes a large system description and produces cook-it-ready epics via a structured 4-phase process:
198
+
199
+ 1. **Socratic** — builds a domain glossary and discovery mindmap; classifies decisions by reversibility
200
+ 2. **Spec** — produces system-level EARS requirements, C4 architecture diagrams, and a scenario table
201
+ 3. **Decompose** — runs 6 parallel subagents (bounded context mapping, dependency analysis, scope sizing, interface design, STPA hazard analysis, structural-semantic gap analysis) then synthesises into a proposed epic structure
202
+ 4. **Materialise** — creates beads epics with scope boundaries, interface contracts, and wired dependencies
203
+
204
+ Three human approval gates separate the phases. Each output epic is sized for one cook-it cycle and includes an EARS subset for traceability back to the system spec.
205
+
206
+ ```bash
207
+ /compound:architect "Build a data pipeline: ingestion, transformation, storage, and API layer"
208
+ ```
71
209
 
72
210
  ## Installation
73
211
 
@@ -104,36 +242,6 @@ If you prefer to configure manually, add to your `package.json`:
104
242
 
105
243
  Then run `pnpm install`.
106
244
 
107
- ## Quick Start
108
-
109
- The five-phase workflow:
110
-
111
- ```
112
- 1. /compound:spec-dev --> Develop precise specifications
113
- 2. /compound:plan --> Create tasks enriched by memory search
114
- 3. /compound:work --> Execute with agent teams + TDD
115
- 4. /compound:review --> Multi-agent review with inter-communication
116
- 5. /compound:compound --> Capture what was learned into memory
117
- ```
118
-
119
- Or run all phases sequentially:
120
-
121
- ```
122
- /compound:cook-it "Add auth to API"
123
- ```
124
-
125
- Additional commands:
126
-
127
- ```
128
- /compound:learn-that --> Capture a lesson from conversation context
129
- /compound:check-that --> Search lessons and apply to current work
130
- /compound:get-a-phd --> Deep research to build agent knowledge
131
- /compound:agentic-audit --> Score codebase against agentic manifesto
132
- /compound:agentic-setup --> Audit then set up agentic infrastructure
133
- ```
134
-
135
- Each phase searches memory for relevant past knowledge and injects it into agent context. The compound phase captures new knowledge, closing the loop.
136
-
137
245
  ## CLI Reference
138
246
 
139
247
  The CLI binary is `ca` (alias: `compound-agent`).
@@ -210,7 +318,7 @@ The CLI binary is `ca` (alias: `compound-agent`).
210
318
  | `ca setup` | One-shot setup (hooks + git pre-commit + model) |
211
319
  | `ca setup --skip-model` | Setup without model download |
212
320
  | `ca setup --uninstall` | Remove all generated files |
213
- | `ca setup --update` | Regenerate files (preserves user customizations) |
321
+ | `ca setup --update` | Regenerate files (preserves user customisations) |
214
322
  | `ca setup --status` | Show installation status |
215
323
  | `ca setup --dry-run` | Show what would change without changing |
216
324
  | `ca setup claude --status` | Check Claude Code integration health |
@@ -243,7 +351,7 @@ confirmation_boost: confirmed=1.3, unconfirmed=1.0
243
351
  ## FAQ
244
352
 
245
353
  **Q: How is this different from mem0?**
246
- A: mem0 is a cloud memory layer for general AI agents. Compound Agent is local-first with git-tracked storage and local embeddings -- no API keys or cloud services needed. It also goes beyond memory with structured workflows, multi-agent review, and issue tracking.
354
+ A: mem0 is a cloud memory layer for general AI agents. Compound Agent is local-first with git-tracked storage and local embeddings no API keys or cloud services needed. It also goes beyond memory with structured workflows, multi-agent review, and issue tracking.
247
355
 
248
356
  **Q: Does this work offline?**
249
357
  A: Yes, completely. Embeddings run locally via node-llama-cpp. No network requests after the initial model download.
@@ -257,6 +365,9 @@ A: The CLI (`ca`) works standalone with any tool. Full hook integration is avail
257
365
  **Q: What happens if the embedding model isn't available?**
258
366
  A: Search gracefully falls back to keyword-only mode. Other commands that require embeddings will tell you what's missing. Run `npx ca doctor` to diagnose issues.
259
367
 
368
+ **Q: Is the loop production-ready?**
369
+ A: The loop works and has been used to ship real projects, including compound-agent itself. Long-duration autonomous runs across many epics are the current area of hardening. For 3–5 epic sequences, it is reliable today.
370
+
260
371
  ## Development
261
372
 
262
373
  ```bash
@@ -297,13 +408,15 @@ pnpm lint # Type check + ESLint
297
408
  | [CHANGELOG.md](https://github.com/Nathandela/compound-agent/blob/main/CHANGELOG.md) | Version history |
298
409
  | [AGENTS.md](https://github.com/Nathandela/compound-agent/blob/main/AGENTS.md) | Agent workflow instructions |
299
410
 
411
+ The most direct way to explore the system is to open this repository with an AI agent and ask it to walk you through the design — the project is structured precisely for that.
412
+
300
413
  ## Acknowledgments
301
414
 
302
415
  Compound Agent builds on ideas and patterns from these projects:
303
416
 
304
417
  | Project | Influence |
305
418
  |---------|-----------|
306
- | [Compound Engineering Plugin](https://github.com/EveryInc/compound-engineering-plugin) | The "compound" philosophy -- each unit of work makes subsequent units easier. Multi-agent review workflows and skills as encoded knowledge. |
419
+ | [Compound Engineering Plugin](https://github.com/EveryInc/compound-engineering-plugin) | The "compound" philosophy each unit of work makes subsequent units easier. Multi-agent review workflows and skills as encoded knowledge. |
307
420
  | [Beads](https://github.com/steveyegge/beads) | Git-backed JSONL + SQLite hybrid storage model, hash-based conflict-free IDs, dependency graphs |
308
421
  | [OpenClaw](https://github.com/openclaw/openclaw) | Claude Code integration patterns and hook-based workflow architecture |
309
422
 
@@ -311,10 +424,10 @@ Also informed by research into [Reflexion](https://arxiv.org/abs/2303.11366) (ve
311
424
 
312
425
  ## Contributing
313
426
 
314
- Bug reports and feature requests are welcome via [Issues](https://github.com/Nathandela/compound-agent/issues). Pull requests are not accepted at this time -- see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
427
+ Bug reports and feature requests are welcome via [Issues](https://github.com/Nathandela/compound-agent/issues). Pull requests are not accepted at this time see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
315
428
 
316
429
  ## License
317
430
 
318
- MIT -- see [LICENSE](LICENSE) for details.
431
+ MIT see [LICENSE](LICENSE) for details.
319
432
 
320
433
  > The embedding model (EmbeddingGemma-300M) is downloaded on-demand and subject to Google's [Gemma Terms of Use](https://ai.google.dev/gemma/terms). See [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md) for full dependency license information.
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import { z } from 'zod';
8
8
  import * as fs from 'fs/promises';
9
9
  import { readFile, mkdir, appendFile, writeFile, chmod, rm, rename, readdir } from 'fs/promises';
10
10
  import { createRequire } from 'module';
11
- import { execSync, execFileSync, spawn } from 'child_process';
11
+ import { execSync, spawnSync, execFileSync, spawn } from 'child_process';
12
12
  import { fileURLToPath } from 'url';
13
13
  import { Command } from 'commander';
14
14
  import chalk5 from 'chalk';
@@ -3132,7 +3132,7 @@ function checkBeadsAvailable() {
3132
3132
  } catch {
3133
3133
  return {
3134
3134
  available: false,
3135
- message: "Beads CLI not found. Recommended for full workflow (issue tracking, deps, TDD pipeline). Install: https://github.com/Nathandela/beads"
3135
+ message: "Beads CLI not found. Recommended for full workflow (issue tracking, deps, TDD pipeline).\nInstall: curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash\nOr run: ca install-beads"
3136
3136
  };
3137
3137
  }
3138
3138
  }
@@ -3313,7 +3313,7 @@ This project uses compound-agent for session memory via **CLI commands**.
3313
3313
  | Command | Purpose |
3314
3314
  |---------|---------|
3315
3315
  | \`npx ca search "query"\` | Search lessons - MUST call before architectural decisions; use anytime you need context |
3316
- | \`npx ca knowledge "query"\` | Ask the project docs any question - MUST call before architectural decisions; use freely |
3316
+ | \`npx ca knowledge "query"\` | Semantic search over project docs - MUST call before architectural decisions; use keyword phrases, not questions |
3317
3317
  | \`npx ca learn "insight"\` | Capture lessons - use AFTER corrections or discoveries |
3318
3318
  | \`npx ca list\` | List all stored lessons |
3319
3319
  | \`npx ca show <id>\` | Show details of a specific lesson |
@@ -3680,6 +3680,8 @@ function printBeadsFullStatus(check) {
3680
3680
  if (check.initialized) {
3681
3681
  console.log(` Beads health: ${check.healthy ? "OK" : `issues found${check.healthMessage ? ` \u2014 ${check.healthMessage}` : ""}`}`);
3682
3682
  }
3683
+ } else if (check.healthMessage) {
3684
+ console.log(` ${check.healthMessage}`);
3683
3685
  }
3684
3686
  }
3685
3687
  function printScopeStatus(scope) {
@@ -9651,7 +9653,7 @@ async function runDoctor(repoRoot) {
9651
9653
  checks.push(pnpmCheck);
9652
9654
  }
9653
9655
  const beadsResult = checkBeadsAvailable();
9654
- checks.push(beadsResult.available ? { name: "Beads CLI", status: "pass" } : { name: "Beads CLI", status: "warn", fix: "Install beads: https://github.com/Nathandela/beads" });
9656
+ checks.push(beadsResult.available ? { name: "Beads CLI", status: "pass" } : { name: "Beads CLI", status: "warn", fix: "Run: ca install-beads" });
9655
9657
  checks.push(checkGitignoreHealth(repoRoot) ? { name: ".gitignore health", status: "pass" } : { name: ".gitignore health", status: "warn", fix: "Run: npx ca setup --update" });
9656
9658
  const docPath = join(repoRoot, "docs", "compound", "README.md");
9657
9659
  checks.push(existsSync(docPath) ? { name: "Usage documentation", status: "pass" } : { name: "Usage documentation", status: "warn", fix: "Run: npx ca setup" });
@@ -10067,7 +10069,7 @@ var TRUST_LANGUAGE_TEMPLATE = `# Compound Agent Active
10067
10069
  | Command | Purpose |
10068
10070
  |---------|---------|
10069
10071
  | \`npx ca search "query"\` | Search lessons - MUST call before architectural decisions; use anytime you need context |
10070
- | \`npx ca knowledge "query"\` | Ask the project docs any question - MUST call before architectural decisions; use freely |
10072
+ | \`npx ca knowledge "query"\` | Semantic search over project docs - MUST call before architectural decisions; use keyword phrases, not questions |
10071
10073
  | \`npx ca learn "insight"\` | Capture lessons - call AFTER corrections or discoveries |
10072
10074
 
10073
10075
  ## Core Constraints
@@ -10905,70 +10907,63 @@ function registerVerifyGatesCommand(program) {
10905
10907
  }
10906
10908
 
10907
10909
  // src/changelog-data.ts
10908
- var CHANGELOG_RECENT = `## [1.7.4] - 2026-03-11
10910
+ var CHANGELOG_RECENT = `## [1.7.6] - 2026-03-12
10909
10911
 
10910
10912
  ### Added
10911
10913
 
10912
- - **Research-enriched phase skills**: Applied insights from 3 PhD-level research documents (Science of Decomposition, Architecture Under Uncertainty, Emergent Behavior in Composed Systems) across all 6 core phase skills:
10913
- - **Architect**: reversibility analysis (Baldwin & Clark), change volatility, 6-subagent convoy (added STPA control structure analyst + structural-semantic gap analyst), implicit interface contracts (threading, backpressure, delivery guarantees), organizational alignment (Team Topologies), multi-criteria validation gate (structural/semantic/organizational/economic), assumption capture with fitness functions and re-decomposition triggers
10914
- - **Spec-dev**: Cynefin classification (Clear/Complicated/Complex), composition EARS templates (timeout/retry interactions), change volatility assessment
10915
- - **Plan**: boundary stability check, Last Responsible Moment identification, change coupling prevention
10916
- - **Work**: Fowler technical debt quadrant (only Prudent/Deliberate accepted), composition boundary verification with metastable failure checks
10917
- - **Review**: composition-specific reviewers (boundary-reviewer, control-structure-reviewer, observability-reviewer), architect assumption validation
10918
- - **Compound**: decomposition quality assessment, assumption tracking (predicted vs actual), emergence root cause classification (Garlan/STPA/phase transition)
10919
- - **Lint graduation in compound phase**: The compound phase (step 10) now spawns a \`lint-classifier\` subagent that classifies each captured insight as LINTABLE, PARTIAL, or NOT_LINTABLE. High-confidence lintable insights are promoted to beads tasks under a "Linting Improvement" epic with self-contained rule specifications. Two rule classes: Class A (native \`rules.json\` \u2014 regex/glob) and Class B (external linter \u2014 AST analysis).
10920
- - **Linter detection module** (\`src/lint/\`): Scans repos for ESLint (flat + legacy configs including TypeScript variants), Ruff (including \`pyproject.toml\`), Clippy, golangci-lint, ast-grep, and Semgrep. Exported from the package as \`detectLinter()\`, \`LinterInfoSchema\`, \`LinterNameSchema\`.
10921
- - **Lint-classifier agent template**: Ships via \`npx ca init\` to \`.claude/agents/compound/lint-classifier.md\`. Includes 7 few-shot examples, Class A/B routing, and linter-aware task creation.
10914
+ - **\`ca install-beads\` command**: Standalone subcommand to install the beads CLI via the official script. Includes a platform guard (skips on Windows with \`exitCode 1\`), an "already installed" short-circuit, a \`--yes\` flag to bypass the confirmation hint (safe: never runs \`curl | bash\` without explicit opt-in), \`spawnSync\` with a 60-second timeout, and a post-install shell-reload warning. Non-TTY mode without \`--yes\` prints the install command as a copy-pasteable hint rather than silently doing nothing.
10922
10915
 
10923
10916
  ### Fixed
10924
10917
 
10925
- - **PhD research output path**: \`/compound:get-a-phd\` now writes user-generated research to \`docs/research/\` instead of \`docs/compound/research/\`. The \`docs/compound/\` directory is reserved for shipped library content; project-specific research no longer pollutes it. Overlap scanning checks both directories.
10918
+ - **Beads hint display**: \`printBeadsFullStatus\` was silently swallowing the install hint message when the beads CLI was not found. The curl install command is now printed below the "not found" line.
10919
+ - **Beads hint text**: \`checkBeadsAvailable\` now returns the actual \`curl -sSL ... | bash\` install command in its message instead of a bare repo URL.
10920
+ - **Doctor fix message**: \`ca doctor\` now shows \`Run: ca install-beads\` for the missing-beads check instead of pointing to a URL.
10921
+ - **\`ca knowledge\` description**: Reframed from "Ask the project docs any question" to "Semantic search over project docs \u2014 use keyword phrases, not questions" in both the live prime template and the setup template, reflecting the underlying embedding RAG retrieval mechanism.
10926
10922
 
10927
- ## [1.7.3] - 2026-03-09
10923
+ ## [1.7.5] - 2026-03-12
10928
10924
 
10929
10925
  ### Added
10930
10926
 
10931
- - **Update notification**: CLI checks npm registry for newer versions on startup (24h file-based cache, non-blocking). Notification displays after command output (TTY only) and in \`ca prime\` context.
10927
+ - **\`ca feedback\` command**: Surfaces the GitHub Discussions URL for bug reports and feature requests. \`ca feedback --open\` opens the page directly in the browser. Cross-platform (macOS \`open\`, Windows \`start\`, Linux \`xdg-open\`).
10928
+ - **Star and feedback prompt in \`ca about\`**: TTY sessions now see a star-us link and the GitHub Discussions URL after the changelog output.
10932
10929
 
10933
- ### Fixed
10934
-
10935
- - **Spec-dev epic type**: \`bd create\` in spec-dev Phase 4 now explicitly uses \`--type=epic\`, preventing epics from defaulting to task type. Plan phase also validates the epic type and corrects it if needed.
10936
- - **Update-check hardening**: Added explicit \`res.ok\` check in \`fetchLatestVersion\`, removed dead \`checkedAt\` cache field, removed redundant type cast.
10930
+ ### Changed
10937
10931
 
10938
- ## [1.7.2] - 2026-03-09
10932
+ - **README overhaul**: Complete rewrite to present compound-agent as a full agentic development environment rather than a memory plugin.
10933
+ - New thesis-driven one-liner that names category, mechanism, and benefit
10934
+ - "What gets installed" inventory table (15 commands, 24 agent role skills, 7 hooks, 5 phase skills, 5 docs)
10935
+ - Three principles section mapping each architecture layer to the problem it solves (Memory / Feedback Loops / Navigable Structure)
10936
+ - "Agents are interchangeable" design principle explained in the overview
10937
+ - Levels of use replacing flat Quick Start: memory-only, structured workflow, and factory mode with code examples
10938
+ - \`/compound:architect\` promoted to its own section with 4-phase description and context-window motivation
10939
+ - Infinity loop elevated from CLI table row to its own section with full flag examples and honest maturity note
10940
+ - Automatic hooks table with per-hook descriptions
10941
+ - Architecture diagram updated to reflect three-principle mapping and accurate counts
10942
+ - Compound loop diagram updated with architect as optional upstream entry point
10943
+ - "Open with an AI agent" entry point in the Documentation section
10944
+
10945
+ ## [1.7.4] - 2026-03-11
10939
10946
 
10940
10947
  ### Added
10941
10948
 
10942
- - **Loop review phase**: \`ca loop\` can now spawn independent AI reviewers (Claude Sonnet, Claude Opus, Gemini, Codex) in parallel after every N completed epics. Reviewers produce severity-tagged reports, an implementer session fixes findings, and reviewers are resumed (not fresh) to verify fixes. Iterates until all approve or max cycles reached. New CLI options: \`--reviewers\`, \`--review-every\`, \`--max-review-cycles\`, \`--review-blocking\`, \`--review-model\`. Gracefully skips unavailable CLIs.
10949
+ - **Research-enriched phase skills**: Applied insights from 3 PhD-level research documents (Science of Decomposition, Architecture Under Uncertainty, Emergent Behavior in Composed Systems) across all 6 core phase skills:
10950
+ - **Architect**: reversibility analysis (Baldwin & Clark), change volatility, 6-subagent convoy (added STPA control structure analyst + structural-semantic gap analyst), implicit interface contracts (threading, backpressure, delivery guarantees), organizational alignment (Team Topologies), multi-criteria validation gate (structural/semantic/organizational/economic), assumption capture with fitness functions and re-decomposition triggers
10951
+ - **Spec-dev**: Cynefin classification (Clear/Complicated/Complex), composition EARS templates (timeout/retry interactions), change volatility assessment
10952
+ - **Plan**: boundary stability check, Last Responsible Moment identification, change coupling prevention
10953
+ - **Work**: Fowler technical debt quadrant (only Prudent/Deliberate accepted), composition boundary verification with metastable failure checks
10954
+ - **Review**: composition-specific reviewers (boundary-reviewer, control-structure-reviewer, observability-reviewer), architect assumption validation
10955
+ - **Compound**: decomposition quality assessment, assumption tracking (predicted vs actual), emergence root cause classification (Garlan/STPA/phase transition)
10956
+ - **Lint graduation in compound phase**: The compound phase (step 10) now spawns a \`lint-classifier\` subagent that classifies each captured insight as LINTABLE, PARTIAL, or NOT_LINTABLE. High-confidence lintable insights are promoted to beads tasks under a "Linting Improvement" epic with self-contained rule specifications. Two rule classes: Class A (native \`rules.json\` \u2014 regex/glob) and Class B (external linter \u2014 AST analysis).
10957
+ - **Linter detection module** (\`src/lint/\`): Scans repos for ESLint (flat + legacy configs including TypeScript variants), Ruff (including \`pyproject.toml\`), Clippy, golangci-lint, ast-grep, and Semgrep. Exported from the package as \`detectLinter()\`, \`LinterInfoSchema\`, \`LinterNameSchema\`.
10958
+ - **Lint-classifier agent template**: Ships via \`npx ca init\` to \`.claude/agents/compound/lint-classifier.md\`. Includes 7 few-shot examples, Class A/B routing, and linter-aware task creation.
10943
10959
 
10944
10960
  ### Fixed
10945
10961
 
10946
- - **Security: command injection in \`ca test-summary --cmd\`**: User-supplied test command is now validated against an allowlist of safe prefixes (\`pnpm\`, \`npm\`, \`vitest\`, etc.) and shell metacharacters are rejected.
10947
- - **Security: shell injection in \`ca doctor\`**: Replaced \`execSync(cmd, {shell})\` with \`execFileSync('bd', ['doctor'])\` to avoid shell interpretation.
10948
- - **Portable timeout for macOS**: Generated loop scripts now use a \`portable_timeout()\` wrapper that tries GNU \`timeout\`, then \`gtimeout\` (Homebrew coreutils), then a shell-based kill/watchdog fallback. Previously failed silently on macOS.
10949
- - **Session ID python3 fallback**: Review phase session ID management now falls back to python3 when \`jq\` is unavailable, with a centralized \`read_session_id()\` helper.
10950
- - **Git diff window stability**: Replaced fragile \`HEAD~$N..HEAD\` commit-count arithmetic with SHA-based \`$REVIEW_BASE_SHA..HEAD\` diff ranges, immune to rebases and cherry-picks.
10951
- - **ID collision risk**: Memory item IDs now use 64-bit entropy (16 hex chars) instead of 32-bit (8 hex chars).
10952
- - **JSONL resilience**: Malformed lines in JSONL files are now skipped with try/catch per line instead of crashing the entire read.
10953
- - **Stdin timeout leak**: \`clearTimeout\` now called in \`finally\` block for stdin reads in retrieval and hooks.
10954
- - **Double JSONL read eliminated**: \`readMemoryItems()\` now returns \`deletedIds\` set, removing the need for a separate \`wasLessonDeleted()\` file read.
10955
- - **FTS5 trigger optimization**: SQLite update trigger now scoped to FTS-indexed columns only, reducing unnecessary FTS rebuilds.
10956
- - **Clustering noise accuracy**: Single-item clusters now correctly returned as \`noise\` instead of an always-empty noise array.
10957
- - **Embed-worker path validation**: \`embed-worker\` command now validates that \`repoRoot\` exists and is a directory before proceeding.
10958
- - **Script check timeout**: Rule-based script checks now have a 30-second default timeout, configurable via \`check.timeout\`.
10959
-
10960
- ### Changed
10961
-
10962
- - **Anchored approval detection**: Review loop now uses \`^REVIEW_APPROVED\` anchored grep to prevent false positives from partial-line matches.
10963
- - **Numeric option validation**: \`--review-every\` and \`--max-review-cycles\` now reject NaN, negative, and non-integer values.
10964
- - **\`isModelUsable()\` replaced**: \`compound\` command now uses lightweight \`isModelAvailable()\` (fs check) instead of loading the 278MB model just to probe.
10965
- - **Dead code removed**: \`addCompoundAgentHook()\`, back-compat hook aliases (\`CLAUDE_READ_TRACKER_HOOK_CONFIG\`, \`CLAUDE_STOP_AUDIT_HOOK_CONFIG\`), and \`wasLessonDeleted()\` removed.
10966
- - **Hardcoded model extracted**: Five occurrences of \`'claude-opus-4-6'\` in loop.ts extracted to \`DEFAULT_MODEL\` constant.
10967
- - **EPIC_ID_PATTERN deduplicated**: \`watch.ts\` now imports \`LOOP_EPIC_ID_PATTERN\` from \`loop.ts\` instead of maintaining a duplicate.
10968
- - **\`warn()\` output corrected**: \`shared.ts\` warn helper now writes to \`stderr\` instead of \`stdout\`.
10969
- - **Templates import fixed**: \`templates.ts\` now imports \`VERSION\` from \`../version.js\` instead of barrel re-export.`;
10962
+ - **PhD research output path**: \`/compound:get-a-phd\` now writes user-generated research to \`docs/research/\` instead of \`docs/compound/research/\`. The \`docs/compound/\` directory is reserved for shipped library content; project-specific research no longer pollutes it. Overlap scanning checks both directories.`;
10970
10963
 
10971
10964
  // src/commands/about.ts
10965
+ var REPO_URL = "https://github.com/Nathandela/compound-agent";
10966
+ var DISCUSSIONS_URL = `${REPO_URL}/discussions`;
10972
10967
  function registerAboutCommand(program) {
10973
10968
  program.command("about").description("Show version, animation, and recent changelog").action(async () => {
10974
10969
  if (process.stdout.isTTY) {
@@ -10978,6 +10973,30 @@ function registerAboutCommand(program) {
10978
10973
  }
10979
10974
  console.log("");
10980
10975
  console.log(CHANGELOG_RECENT);
10976
+ if (process.stdout.isTTY) {
10977
+ console.log("");
10978
+ console.log(`Find this useful? Star us: ${REPO_URL}`);
10979
+ console.log(`Feedback & discussions: ${DISCUSSIONS_URL}`);
10980
+ }
10981
+ });
10982
+ }
10983
+ var REPO_URL2 = "https://github.com/Nathandela/compound-agent";
10984
+ var DISCUSSIONS_URL2 = `${REPO_URL2}/discussions`;
10985
+ function openUrl(url) {
10986
+ const opener = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
10987
+ spawn(opener, [url], { detached: true, stdio: "ignore" }).unref();
10988
+ }
10989
+ function registerFeedbackCommand(program) {
10990
+ program.command("feedback").description("Open GitHub Discussions to share feedback or report issues").option("--open", "Open the Discussions page in your browser").action((opts) => {
10991
+ console.log(`Feedback & discussions: ${DISCUSSIONS_URL2}`);
10992
+ console.log(`Repository: ${REPO_URL2}`);
10993
+ if (opts.open && process.stdout.isTTY) {
10994
+ openUrl(DISCUSSIONS_URL2);
10995
+ console.log("Opening in browser...");
10996
+ } else if (!opts.open) {
10997
+ console.log("");
10998
+ console.log("Run `ca feedback --open` to open in your browser.");
10999
+ }
10981
11000
  });
10982
11001
  }
10983
11002
 
@@ -11264,6 +11283,41 @@ async function cleanLessonsAction() {
11264
11283
  function registerCleanLessonsCommand(program) {
11265
11284
  program.command("clean-lessons").description("Analyze lessons for semantic duplicates and contradictions").action(cleanLessonsAction);
11266
11285
  }
11286
+ var INSTALL_SCRIPT_URL = "https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh";
11287
+ var INSTALL_CMD = `curl -sSL ${INSTALL_SCRIPT_URL} | bash`;
11288
+ function registerInstallBeadsCommand(program) {
11289
+ program.command("install-beads").description("Install the beads CLI via the official install script").option("--yes", "Skip confirmation prompt and install immediately").action((opts) => {
11290
+ if (process.platform === "win32") {
11291
+ console.error("Beads installation is not supported on Windows.");
11292
+ process.exitCode = 1;
11293
+ return;
11294
+ }
11295
+ if (checkBeadsAvailable().available) {
11296
+ console.log("Beads CLI (bd) is already installed.");
11297
+ return;
11298
+ }
11299
+ console.log(`Install script: ${INSTALL_SCRIPT_URL}`);
11300
+ if (!opts.yes) {
11301
+ console.log(`Run manually: ${INSTALL_CMD}`);
11302
+ return;
11303
+ }
11304
+ const result = spawnSync("bash", ["-c", INSTALL_CMD], {
11305
+ stdio: "inherit",
11306
+ timeout: 6e4
11307
+ });
11308
+ if (result.error) {
11309
+ console.error(`Installation error: ${result.error.message}`);
11310
+ process.exitCode = 1;
11311
+ return;
11312
+ }
11313
+ if (result.status !== 0) {
11314
+ console.error(`Install error: process exited with code ${result.status}.`);
11315
+ process.exitCode = 1;
11316
+ return;
11317
+ }
11318
+ console.log("Restart your shell or run: source ~/.bashrc");
11319
+ });
11320
+ }
11267
11321
 
11268
11322
  // src/commands/capture.ts
11269
11323
  function createLessonFromFlags(trigger, insight, confirmed) {
@@ -11879,9 +11933,11 @@ function registerManagementCommands(program) {
11879
11933
  registerTestSummaryCommand(program);
11880
11934
  registerVerifyGatesCommand(program);
11881
11935
  registerAboutCommand(program);
11936
+ registerFeedbackCommand(program);
11882
11937
  registerKnowledgeCommand(program);
11883
11938
  registerKnowledgeIndexCommand(program);
11884
11939
  registerCleanLessonsCommand(program);
11940
+ registerInstallBeadsCommand(program);
11885
11941
  program.command("worktree").description("(removed) Use Claude Code native worktree support").action(() => {
11886
11942
  console.error("ca worktree has been removed. Use Claude Code's native EnterWorktree support instead.");
11887
11943
  process.exitCode = 1;