@sienklogic/plan-build-run 2.0.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 (221) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/CLAUDE.md +149 -0
  3. package/LICENSE +21 -0
  4. package/README.md +247 -0
  5. package/dashboard/bin/cli.js +25 -0
  6. package/dashboard/package.json +34 -0
  7. package/dashboard/public/.gitkeep +0 -0
  8. package/dashboard/public/css/layout.css +406 -0
  9. package/dashboard/public/css/status-colors.css +98 -0
  10. package/dashboard/public/js/htmx-title.js +5 -0
  11. package/dashboard/public/js/sidebar-toggle.js +20 -0
  12. package/dashboard/src/app.js +78 -0
  13. package/dashboard/src/middleware/errorHandler.js +52 -0
  14. package/dashboard/src/middleware/notFoundHandler.js +9 -0
  15. package/dashboard/src/repositories/planning.repository.js +128 -0
  16. package/dashboard/src/routes/events.routes.js +40 -0
  17. package/dashboard/src/routes/index.routes.js +31 -0
  18. package/dashboard/src/routes/pages.routes.js +195 -0
  19. package/dashboard/src/server.js +42 -0
  20. package/dashboard/src/services/dashboard.service.js +222 -0
  21. package/dashboard/src/services/phase.service.js +167 -0
  22. package/dashboard/src/services/project.service.js +57 -0
  23. package/dashboard/src/services/roadmap.service.js +171 -0
  24. package/dashboard/src/services/sse.service.js +58 -0
  25. package/dashboard/src/services/todo.service.js +254 -0
  26. package/dashboard/src/services/watcher.service.js +48 -0
  27. package/dashboard/src/views/coming-soon.ejs +11 -0
  28. package/dashboard/src/views/error.ejs +13 -0
  29. package/dashboard/src/views/index.ejs +5 -0
  30. package/dashboard/src/views/layout.ejs +1 -0
  31. package/dashboard/src/views/partials/dashboard-content.ejs +77 -0
  32. package/dashboard/src/views/partials/footer.ejs +3 -0
  33. package/dashboard/src/views/partials/head.ejs +21 -0
  34. package/dashboard/src/views/partials/header.ejs +12 -0
  35. package/dashboard/src/views/partials/layout-bottom.ejs +15 -0
  36. package/dashboard/src/views/partials/layout-top.ejs +8 -0
  37. package/dashboard/src/views/partials/phase-content.ejs +181 -0
  38. package/dashboard/src/views/partials/phases-content.ejs +117 -0
  39. package/dashboard/src/views/partials/roadmap-content.ejs +142 -0
  40. package/dashboard/src/views/partials/sidebar.ejs +38 -0
  41. package/dashboard/src/views/partials/todo-create-content.ejs +53 -0
  42. package/dashboard/src/views/partials/todo-detail-content.ejs +38 -0
  43. package/dashboard/src/views/partials/todos-content.ejs +53 -0
  44. package/dashboard/src/views/phase-detail.ejs +5 -0
  45. package/dashboard/src/views/phases.ejs +5 -0
  46. package/dashboard/src/views/roadmap.ejs +5 -0
  47. package/dashboard/src/views/todo-create.ejs +5 -0
  48. package/dashboard/src/views/todo-detail.ejs +5 -0
  49. package/dashboard/src/views/todos.ejs +5 -0
  50. package/package.json +57 -0
  51. package/plugins/pbr/.claude-plugin/plugin.json +13 -0
  52. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -0
  53. package/plugins/pbr/agents/codebase-mapper.md +271 -0
  54. package/plugins/pbr/agents/debugger.md +281 -0
  55. package/plugins/pbr/agents/executor.md +407 -0
  56. package/plugins/pbr/agents/general.md +164 -0
  57. package/plugins/pbr/agents/integration-checker.md +141 -0
  58. package/plugins/pbr/agents/plan-checker.md +280 -0
  59. package/plugins/pbr/agents/planner.md +358 -0
  60. package/plugins/pbr/agents/researcher.md +363 -0
  61. package/plugins/pbr/agents/synthesizer.md +230 -0
  62. package/plugins/pbr/agents/verifier.md +454 -0
  63. package/plugins/pbr/commands/begin.md +5 -0
  64. package/plugins/pbr/commands/build.md +5 -0
  65. package/plugins/pbr/commands/config.md +5 -0
  66. package/plugins/pbr/commands/continue.md +5 -0
  67. package/plugins/pbr/commands/debug.md +5 -0
  68. package/plugins/pbr/commands/discuss.md +5 -0
  69. package/plugins/pbr/commands/explore.md +5 -0
  70. package/plugins/pbr/commands/health.md +5 -0
  71. package/plugins/pbr/commands/help.md +5 -0
  72. package/plugins/pbr/commands/import.md +5 -0
  73. package/plugins/pbr/commands/milestone.md +5 -0
  74. package/plugins/pbr/commands/note.md +5 -0
  75. package/plugins/pbr/commands/pause.md +5 -0
  76. package/plugins/pbr/commands/plan.md +5 -0
  77. package/plugins/pbr/commands/quick.md +5 -0
  78. package/plugins/pbr/commands/resume.md +5 -0
  79. package/plugins/pbr/commands/review.md +5 -0
  80. package/plugins/pbr/commands/scan.md +5 -0
  81. package/plugins/pbr/commands/setup.md +5 -0
  82. package/plugins/pbr/commands/status.md +5 -0
  83. package/plugins/pbr/commands/todo.md +5 -0
  84. package/plugins/pbr/contexts/dev.md +27 -0
  85. package/plugins/pbr/contexts/research.md +28 -0
  86. package/plugins/pbr/contexts/review.md +36 -0
  87. package/plugins/pbr/hooks/hooks.json +183 -0
  88. package/plugins/pbr/references/agent-anti-patterns.md +24 -0
  89. package/plugins/pbr/references/agent-interactions.md +134 -0
  90. package/plugins/pbr/references/agent-teams.md +54 -0
  91. package/plugins/pbr/references/checkpoints.md +157 -0
  92. package/plugins/pbr/references/common-bug-patterns.md +13 -0
  93. package/plugins/pbr/references/continuation-format.md +212 -0
  94. package/plugins/pbr/references/deviation-rules.md +112 -0
  95. package/plugins/pbr/references/git-integration.md +226 -0
  96. package/plugins/pbr/references/integration-patterns.md +117 -0
  97. package/plugins/pbr/references/model-profiles.md +99 -0
  98. package/plugins/pbr/references/model-selection.md +31 -0
  99. package/plugins/pbr/references/pbr-rules.md +193 -0
  100. package/plugins/pbr/references/plan-authoring.md +181 -0
  101. package/plugins/pbr/references/plan-format.md +283 -0
  102. package/plugins/pbr/references/planning-config.md +213 -0
  103. package/plugins/pbr/references/questioning.md +214 -0
  104. package/plugins/pbr/references/reading-verification.md +127 -0
  105. package/plugins/pbr/references/stub-patterns.md +160 -0
  106. package/plugins/pbr/references/subagent-coordination.md +119 -0
  107. package/plugins/pbr/references/ui-formatting.md +399 -0
  108. package/plugins/pbr/references/verification-patterns.md +198 -0
  109. package/plugins/pbr/references/wave-execution.md +95 -0
  110. package/plugins/pbr/scripts/auto-continue.js +80 -0
  111. package/plugins/pbr/scripts/check-dangerous-commands.js +136 -0
  112. package/plugins/pbr/scripts/check-doc-sprawl.js +102 -0
  113. package/plugins/pbr/scripts/check-phase-boundary.js +196 -0
  114. package/plugins/pbr/scripts/check-plan-format.js +270 -0
  115. package/plugins/pbr/scripts/check-roadmap-sync.js +252 -0
  116. package/plugins/pbr/scripts/check-skill-workflow.js +262 -0
  117. package/plugins/pbr/scripts/check-state-sync.js +476 -0
  118. package/plugins/pbr/scripts/check-subagent-output.js +144 -0
  119. package/plugins/pbr/scripts/config-schema.json +251 -0
  120. package/plugins/pbr/scripts/context-budget-check.js +287 -0
  121. package/plugins/pbr/scripts/event-handler.js +151 -0
  122. package/plugins/pbr/scripts/event-logger.js +92 -0
  123. package/plugins/pbr/scripts/hook-logger.js +76 -0
  124. package/plugins/pbr/scripts/hooks-schema.json +79 -0
  125. package/plugins/pbr/scripts/log-subagent.js +152 -0
  126. package/plugins/pbr/scripts/log-tool-failure.js +88 -0
  127. package/plugins/pbr/scripts/pbr-tools.js +1301 -0
  128. package/plugins/pbr/scripts/post-write-dispatch.js +66 -0
  129. package/plugins/pbr/scripts/post-write-quality.js +207 -0
  130. package/plugins/pbr/scripts/pre-bash-dispatch.js +56 -0
  131. package/plugins/pbr/scripts/pre-write-dispatch.js +62 -0
  132. package/plugins/pbr/scripts/progress-tracker.js +228 -0
  133. package/plugins/pbr/scripts/session-cleanup.js +254 -0
  134. package/plugins/pbr/scripts/status-line.js +285 -0
  135. package/plugins/pbr/scripts/suggest-compact.js +119 -0
  136. package/plugins/pbr/scripts/task-completed.js +45 -0
  137. package/plugins/pbr/scripts/track-context-budget.js +119 -0
  138. package/plugins/pbr/scripts/validate-commit.js +200 -0
  139. package/plugins/pbr/scripts/validate-plugin-structure.js +172 -0
  140. package/plugins/pbr/skills/begin/SKILL.md +545 -0
  141. package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -0
  142. package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -0
  143. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -0
  144. package/plugins/pbr/skills/begin/templates/config.json.tmpl +63 -0
  145. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -0
  146. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -0
  147. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -0
  148. package/plugins/pbr/skills/build/SKILL.md +962 -0
  149. package/plugins/pbr/skills/config/SKILL.md +241 -0
  150. package/plugins/pbr/skills/continue/SKILL.md +127 -0
  151. package/plugins/pbr/skills/debug/SKILL.md +489 -0
  152. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -0
  153. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -0
  154. package/plugins/pbr/skills/discuss/SKILL.md +338 -0
  155. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -0
  156. package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -0
  157. package/plugins/pbr/skills/explore/SKILL.md +362 -0
  158. package/plugins/pbr/skills/health/SKILL.md +186 -0
  159. package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -0
  160. package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -0
  161. package/plugins/pbr/skills/help/SKILL.md +140 -0
  162. package/plugins/pbr/skills/import/SKILL.md +490 -0
  163. package/plugins/pbr/skills/milestone/SKILL.md +673 -0
  164. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -0
  165. package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -0
  166. package/plugins/pbr/skills/note/SKILL.md +212 -0
  167. package/plugins/pbr/skills/pause/SKILL.md +235 -0
  168. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -0
  169. package/plugins/pbr/skills/plan/SKILL.md +628 -0
  170. package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -0
  171. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -0
  172. package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -0
  173. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -0
  174. package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -0
  175. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -0
  176. package/plugins/pbr/skills/quick/SKILL.md +335 -0
  177. package/plugins/pbr/skills/resume/SKILL.md +388 -0
  178. package/plugins/pbr/skills/review/SKILL.md +652 -0
  179. package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -0
  180. package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -0
  181. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -0
  182. package/plugins/pbr/skills/scan/SKILL.md +269 -0
  183. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -0
  184. package/plugins/pbr/skills/setup/SKILL.md +227 -0
  185. package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -0
  186. package/plugins/pbr/skills/shared/config-loading.md +102 -0
  187. package/plugins/pbr/skills/shared/context-budget.md +40 -0
  188. package/plugins/pbr/skills/shared/context-loader-task.md +86 -0
  189. package/plugins/pbr/skills/shared/digest-select.md +79 -0
  190. package/plugins/pbr/skills/shared/domain-probes.md +125 -0
  191. package/plugins/pbr/skills/shared/error-reporting.md +79 -0
  192. package/plugins/pbr/skills/shared/gate-prompts.md +388 -0
  193. package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -0
  194. package/plugins/pbr/skills/shared/progress-display.md +53 -0
  195. package/plugins/pbr/skills/shared/revision-loop.md +81 -0
  196. package/plugins/pbr/skills/shared/state-loading.md +62 -0
  197. package/plugins/pbr/skills/shared/state-update.md +161 -0
  198. package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -0
  199. package/plugins/pbr/skills/status/SKILL.md +353 -0
  200. package/plugins/pbr/skills/todo/SKILL.md +181 -0
  201. package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -0
  202. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -0
  203. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -0
  204. package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -0
  205. package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -0
  206. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -0
  207. package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -0
  208. package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -0
  209. package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -0
  210. package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -0
  211. package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -0
  212. package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -0
  213. package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -0
  214. package/plugins/pbr/templates/continue-here.md.tmpl +73 -0
  215. package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -0
  216. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -0
  217. package/plugins/pbr/templates/research/STACK.md.tmpl +71 -0
  218. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -0
  219. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -0
  220. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -0
  221. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +36 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,56 @@
1
+ # Changelog
2
+
3
+ All notable changes to Plan-Build-Run will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [2.0.0] - 2026-02-17
11
+
12
+ ### Added
13
+ - Token-saving CLI: 6 new commands in `towline-tools.js` — `frontmatter`, `must-haves`, `phase-info`, `state update`, `roadmap update-status`, `roadmap update-plans`
14
+ - Companion web dashboard (Express 5.x, EJS, Pico.css v2, HTMX 2.0) with overview, phase detail, roadmap, todos, and SSE live updates
15
+ - `/dev:import` skill — Import external plan documents into Towline format
16
+ - `/dev:note` skill — Zero-friction idea capture with promote-to-todo support
17
+ - `/dev:setup` skill — Interactive onboarding wizard for new installations
18
+ - `/dev:explore` skill — Socratic conversation for idea exploration
19
+ - `/dev:continue` skill — Execute the next logical step automatically
20
+ - `/dev:health` skill — Validate `.planning/` directory integrity
21
+ - General agent — Lightweight Towline-aware agent for ad-hoc tasks
22
+ - `/dev:build <N> --team` variant — Agent Teams for complex inter-agent coordination
23
+ - `/dev:review <N> --auto-fix` variant — Auto-diagnose and fix verification failures
24
+ - Hook spawn tests for all lifecycle hooks
25
+ - Iterative retrieval protocol for researcher agent
26
+ - Behavioral contexts for agent prompt refinement
27
+ - Published to npm with OIDC trusted publishing
28
+
29
+ ### Changed
30
+ - Skill count increased from 15 to 21
31
+ - Agent count increased from 9 to 10 (added General agent)
32
+ - Hook scripts consolidated: Write/Edit dispatch reduced from 4 spawns to 2
33
+ - All hook scripts now use `logHook()` from `hook-logger.js` for unified logging
34
+ - Agents reference new CLI tooling shortcuts instead of manual YAML parsing
35
+ - README rewritten with badges, comparison table, and acknowledgments
36
+ - Package tarball trimmed from 1.9MB to 305KB via explicit `files` field
37
+
38
+ ### Fixed
39
+ - Windows CI: `parseMustHaves` now trims CRLF line endings
40
+ - Context budget: main orchestrator no longer reads agent definitions (saves ~15% context)
41
+ - Hook logger rotation: `.hook-log` now caps at 200 entries with JSONL format
42
+ - Status line ANSI rendering on Windows terminals
43
+
44
+ ## [1.0.0] - 2025-02-07
45
+
46
+ ### Added
47
+ - Initial release of Plan-Build-Run plugin for Claude Code
48
+ - 15 skills: begin, plan, build, review, discuss, quick, debug, status, pause, resume, milestone, scan, todo, config, help
49
+ - 9 specialized agents: researcher, planner, plan-checker, executor, verifier, integration-checker, debugger, codebase-mapper, synthesizer
50
+ - Hook-enforced quality gates: commit validation, plan format checking, session state injection, pre-compact preservation
51
+ - Wave-based parallel execution via Task() subagents
52
+ - Goal-backward verification at phase and milestone levels
53
+ - Persistent file-based state management (.planning/ directory)
54
+ - Configurable workflow: depth, models, gates, parallelization, git branching
55
+ - Cross-platform Node.js hook scripts (Windows + macOS + Linux)
56
+ - Plugin distribution via npm
package/CLAUDE.md ADDED
@@ -0,0 +1,149 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## What This Is
6
+
7
+ Plan-Build-Run is a **Claude Code plugin** that provides a structured development workflow. It solves context rot — quality degradation as Claude's context window fills up — through disciplined subagent delegation, file-based state, and goal-backward verification. Users invoke `/pbr:*` slash commands (skills) that orchestrate specialized agents via `Task()`.
8
+
9
+ ## Critical Rules
10
+
11
+ - **NEVER add AI co-author lines** to git commits or PRs. No `Co-Authored-By: Claude` or similar. Only add co-author lines referencing actual human contributors.
12
+ - **NEVER inline agent definitions** into skill prompts. Use `subagent_type: "pbr:{name}"` — Claude Code auto-loads agent definitions from `agents/`. Reading agent `.md` files wastes main context.
13
+
14
+ ## Commands
15
+
16
+ ```bash
17
+ npm test # Run all Jest tests (~780 tests, 36 suites)
18
+ npm run lint # ESLint on plugins/pbr/scripts/ and tests/
19
+ npm run validate # Validate plugin directory structure
20
+ npx jest tests/validate-commit.test.js # Run a single test file
21
+ npx jest --coverage # Run with coverage report
22
+ ```
23
+
24
+ Coverage thresholds (enforced in `package.json`): 65% statements, 58% branches, 70% functions, 65% lines.
25
+
26
+ Dashboard (separate dependency tree):
27
+ ```bash
28
+ npm run dashboard:install # One-time install of dashboard deps
29
+ npm run dashboard -- --dir /path/to/project # Launch dashboard for a project
30
+ ```
31
+
32
+ Load the plugin locally for manual testing:
33
+ ```bash
34
+ claude --plugin-dir .
35
+ ```
36
+
37
+ CI runs on Node 18/20/22 across Windows, macOS, and Linux. All three platforms must pass.
38
+
39
+ ## Architecture
40
+
41
+ All plugin code lives under `plugins/pbr/`. Three layers:
42
+
43
+ ### Skills (`skills/{name}/SKILL.md`)
44
+ Markdown files with YAML frontmatter defining slash commands (`/pbr:begin`, `/pbr:plan`, etc.). Each SKILL.md is a complete prompt that tells the orchestrator what to do. Skills read state, interact with the user, and spawn agents.
45
+
46
+ 21 skills: begin, build, config, continue, debug, discuss, explore, health, help, import, milestone, note, pause, plan, quick, resume, review, scan, setup, status, todo.
47
+
48
+ ### Agents (`agents/{name}.md`)
49
+ Markdown files with YAML frontmatter defining specialized subagent prompts. Agents run in fresh `Task()` contexts with clean 200k token windows. Spawned via `subagent_type: "pbr:{name}"` — auto-loaded by Claude Code.
50
+
51
+ 10 agents: researcher, planner, plan-checker, executor, verifier, integration-checker, debugger, codebase-mapper, synthesizer, general.
52
+
53
+ ### Scripts (`scripts/*.js`)
54
+ 28 Node.js hook scripts that fire on Claude Code lifecycle events. Configured in `hooks/hooks.json`. All use CommonJS, must be cross-platform (`path.join()`, not hardcoded separators), and log via `logHook()` from `hook-logger.js`.
55
+
56
+ **Dispatch pattern**: Several hooks use dispatch scripts that fan out to sub-scripts based on the file being written/read:
57
+
58
+ | Hook Event | Entry Script | Delegates To |
59
+ |------------|-------------|-------------|
60
+ | SessionStart | progress-tracker.js | — (injects project state) |
61
+ | PostToolUse (Write\|Edit) | post-write-dispatch.js | check-plan-format.js, check-roadmap-sync.js, check-state-sync.js |
62
+ | PostToolUse (Write\|Edit) | post-write-quality.js | check-doc-sprawl.js, check-skill-workflow.js |
63
+ | PostToolUse (Task) | check-subagent-output.js | — (validates agent output) |
64
+ | PostToolUse (Write\|Edit) | suggest-compact.js | — (context budget warnings) |
65
+ | PostToolUse (Read) | track-context-budget.js | — (tracks reads for budget) |
66
+ | PostToolUseFailure | log-tool-failure.js | — (logs failures) |
67
+ | PreToolUse (Bash) | pre-bash-dispatch.js | validate-commit.js, check-dangerous-commands.js, check-phase-boundary.js |
68
+ | PreToolUse (Write\|Edit) | pre-write-dispatch.js | — (write guards) |
69
+ | PreCompact | context-budget-check.js | — (preserves STATE.md) |
70
+ | Stop | auto-continue.js | — (chains next command) |
71
+ | SubagentStart/Stop | log-subagent.js | — (tracks lifecycle) |
72
+ | SubagentStop | event-handler.js | — (auto-verification trigger) |
73
+ | TaskCompleted | task-completed.js | — (processes task completion) |
74
+ | SessionEnd | session-cleanup.js | — (cleanup) |
75
+
76
+ **Hook exit codes**: 0 = success, 2 = block (PreToolUse hooks that reject a tool call).
77
+
78
+ **`${CLAUDE_PLUGIN_ROOT}`**: Used in hooks.json to reference script paths. Claude Code expands this internally — works on all platforms without shell expansion.
79
+
80
+ ### Supporting directories
81
+
82
+ - **`references/`** — Shared reference docs loaded by skills (plan format, commit conventions, UI formatting, deviation rules)
83
+ - **`templates/`** — EJS-style `.tmpl` files for generated markdown (VERIFICATION.md, SUMMARY.md, etc.)
84
+ - **`commands/`** — Command registration files (one `.md` per command mapping to its skill)
85
+ - **`skills/shared/`** — 14 shared skill fragments extracted from repeated patterns across skills (config-loading, digest-select, revision-loop, context-loader-task, universal-anti-patterns, phase-argument-parsing, gate-prompts, state-loading, state-update, commit-planning-docs, context-budget, domain-probes, progress-display, error-reporting)
86
+
87
+ ## Key Conventions
88
+
89
+ **Commit format**: `{type}({scope}): {description}` — enforced by PreToolUse hook. Types: feat, fix, refactor, test, docs, chore, wip. Scopes: `{NN}-{MM}` (phase-plan), `quick-{NNN}`, `planning`, `tools`, or descriptive word.
90
+
91
+ **Skill frontmatter** (SKILL.md):
92
+ ```yaml
93
+ ---
94
+ name: skill-name
95
+ description: "What this skill does"
96
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Task
97
+ argument-hint: "<N> [--flag]"
98
+ ---
99
+ ```
100
+
101
+ **Agent frontmatter** ({name}.md):
102
+ ```yaml
103
+ ---
104
+ name: agent-name
105
+ description: "What this agent does"
106
+ model: sonnet|inherit|haiku
107
+ memory: none|user|project
108
+ tools:
109
+ - Read
110
+ - Write
111
+ - Bash
112
+ ---
113
+ ```
114
+
115
+ ## Data Flow
116
+
117
+ Skills and agents communicate through files on disk, not messages:
118
+
119
+ ```
120
+ .planning/STATE.md ← source of truth for current position
121
+ .planning/ROADMAP.md ← phase structure, goals, dependencies
122
+ .planning/config.json ← workflow settings (~62 properties across 12 top-level keys)
123
+ .planning/phases/NN-slug/
124
+ PLAN.md ← written by planner, read by executor
125
+ SUMMARY.md ← written by executor, read by orchestrator
126
+ VERIFICATION.md ← written by verifier, read by review skill
127
+ ```
128
+
129
+ The orchestrator stays lean (~15% context) by delegating heavy work to agents. Each agent gets a fresh context window.
130
+
131
+ **Utility library**: `pbr-tools.js` is a shared Node.js library (stateLoad, configLoad, frontmatterParse, mustHavesCollect, etc.) used by multiple hook scripts. It provides CLI subcommands that agents call to avoid wasting tokens on file parsing.
132
+
133
+ ## Testing
134
+
135
+ Tests live in `tests/` using Jest. Test files mirror script names: `validate-commit.test.js` tests `validate-commit.js`.
136
+
137
+ **Fixture project**: `tests/fixtures/fake-project/.planning/` provides read-only fixture data for tests.
138
+
139
+ **Mutation tests**: Use `fs.mkdtempSync()` to create temporary directories — never mutate the fixture project.
140
+
141
+ **`pbr-tools.js` tests** span both `pbr-tools.test.js` and `integration.test.js`.
142
+
143
+ When adding a new hook script, create a corresponding test file. Tests must pass on Windows, macOS, and Linux.
144
+
145
+ ## Dashboard
146
+
147
+ The dashboard (`dashboard/`) is a separate Express.js application with its own dependency tree (`dashboard/package.json`). It provides a web UI for browsing `.planning/` state. Tech: Express 5.x, EJS, Pico.css, HTMX 2.0, chokidar for file watching, SSE for live updates.
148
+
149
+ Dashboard tests use Vitest (not Jest) and live in `dashboard/tests/`. Run with `npm --prefix dashboard test`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Towline Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,247 @@
1
+ <p align="center">
2
+ <img src="./assets/pbr_banner_logo.png" alt="Plan-Build-Run Logo" width="550" />
3
+ </p>
4
+
5
+ <p align="center">
6
+ <strong>Context-engineered development workflow for Claude Code.</strong>
7
+ <br />
8
+ Build ambitious multi-phase software without quality degradation.
9
+ <br />
10
+ Works with any Claude Code plan. Shines on Max.
11
+ <br />
12
+ <br />
13
+ <a href="#why-plan-build-run">Why Plan-Build-Run?</a> &bull;
14
+ <a href="#getting-started">Getting Started</a> &bull;
15
+ <a href="#commands">Commands</a> &bull;
16
+ <a href="#how-it-works">How It Works</a> &bull;
17
+ <a href="https://github.com/SienkLogic/plan-build-run/wiki">Wiki</a> &bull;
18
+ <a href=".github/CONTRIBUTING.md">Contributing</a>
19
+ </p>
20
+
21
+ <p align="center">
22
+ <a href="https://github.com/SienkLogic/plan-build-run/actions"><img src="https://img.shields.io/github/actions/workflow/status/SienkLogic/plan-build-run/ci.yml?style=for-the-badge&label=CI&logo=github" alt="CI Status" /></a>
23
+ <img src="https://img.shields.io/badge/Claude_Code-Plugin-7C3AED?style=for-the-badge&logo=anthropic&logoColor=white" alt="Claude Code Plugin" />
24
+ <img src="https://img.shields.io/badge/Node.js-18%2B-339933?style=for-the-badge&logo=node.js&logoColor=white" alt="Node.js 18+" />
25
+ <a href="LICENSE"><img src="https://img.shields.io/github/license/SienkLogic/plan-build-run?style=for-the-badge" alt="License" /></a>
26
+ <a href="https://www.npmjs.com/package/@sienklogic/plan-build-run"><img src="https://img.shields.io/npm/v/@sienklogic/plan-build-run?style=for-the-badge&logo=npm&logoColor=white" alt="npm" /></a>
27
+ <img src="https://img.shields.io/badge/Tests-780_passing-brightgreen?style=for-the-badge" alt="780 Tests" />
28
+ </p>
29
+
30
+ ---
31
+
32
+ ## The Problem
33
+
34
+ Claude Code is remarkably capable...until your context window fills up. As tokens accumulate during a long session, reasoning quality degrades, hallucinations increase, and the model starts losing track of earlier decisions. This is **context rot**, and it's the primary failure mode when building anything beyond a single-session project.
35
+
36
+ **Plan-Build-Run solves this.** It keeps your main orchestrator under ~15% context usage by delegating heavy work to fresh subagent contexts, each getting a clean 200k token window. All state lives on disk. Sessions are killable at any second without data loss. Whether you're on a free tier or Max 5x, wasted context means wasted budget, and context rot is the biggest source of waste.
37
+
38
+ ## Why Plan-Build-Run?
39
+
40
+ Most AI coding tools treat context as infinite. They index your codebase, track your edits, and hope the model keeps up. That works for single-file changes. It falls apart when you're building something that takes days, spans dozens of files, and requires decisions made on Monday to still hold on Friday.
41
+
42
+ Plan-Build-Run takes a different approach: **structured context isolation**. Instead of stuffing everything into one session, it delegates each operation to a fresh subagent with a clean 200k token window and coordinates through files on disk.
43
+
44
+ <p align="center">
45
+ <img src="./assets/pbr-demo.gif" alt="Plan-Build-Run workflow: begin → plan → build → review" width="800" />
46
+ </p>
47
+
48
+ Goal-backward verification, lifecycle hooks, wave-based parallelism, kill-safe state, and more. See **[What Sets It Apart](https://github.com/SienkLogic/plan-build-run/wiki/What-Sets-It-Apart)** for the full comparison and differentiators.
49
+
50
+ > **When to use Plan-Build-Run:** Multi-phase projects where quality matters. New features spanning 5+ files, large refactors, greenfield builds, anything that would take more than one Claude Code session to complete. Use `depth: quick` or `depth: standard` to control agent spawn count per phase.
51
+ >
52
+ > **When to skip it:** Single-file fixes, quick questions, one-off scripts. Use `/pbr:quick` for atomic commits without full workflow overhead: single executor spawn, no research or verification agents.
53
+
54
+ Works on every Claude Code plan. Use `depth: quick` on Free/Pro, `depth: standard` on Max, `depth: comprehensive` on Max 5x. See **[What Sets It Apart](https://github.com/SienkLogic/plan-build-run/wiki/What-Sets-It-Apart#plan-build-run-on-different-claude-code-plans)** for tier-specific guidance.
55
+
56
+ ---
57
+
58
+ ## Getting Started
59
+
60
+ ### Prerequisites
61
+
62
+ - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 2.1.45+ &nbsp;(`claude --version`)
63
+ - Node.js 18+
64
+
65
+ ### Install
66
+
67
+ ```bash
68
+ # From your terminal
69
+ claude plugin marketplace add SienkLogic/plan-build-run
70
+ claude plugin install pbr@plan-build-run
71
+
72
+ # Or from inside a Claude Code session
73
+ /plugin marketplace add SienkLogic/plan-build-run
74
+ /plugin install pbr@plan-build-run
75
+ ```
76
+
77
+ All `/pbr:*` commands are now available globally.
78
+
79
+ <details>
80
+ <summary><strong>Install scopes</strong></summary>
81
+
82
+ | Scope | Command | Effect |
83
+ |-------|---------|--------|
84
+ | **Global** (default) | `claude plugin install pbr@plan-build-run` | Available in all projects |
85
+ | **Project only** | `claude plugin install pbr@plan-build-run --scope local` | This project only, gitignored |
86
+ | **Team project** | `claude plugin install pbr@plan-build-run --scope project` | Shared via git, teammates get prompted |
87
+
88
+ </details>
89
+
90
+ ### Dashboard (Optional)
91
+
92
+ Plan-Build-Run ships with a companion web dashboard for browsing your project's planning state in a browser. To set it up:
93
+
94
+ ```bash
95
+ # One-time install of dashboard dependencies
96
+ npm run dashboard:install
97
+
98
+ # Launch the dashboard for any project with a .planning/ directory
99
+ npm run dashboard -- --dir /path/to/your/project
100
+ # Opens at http://127.0.0.1:3000
101
+ ```
102
+
103
+ Or run directly:
104
+
105
+ ```bash
106
+ node dashboard/bin/cli.js --dir /path/to/your/project --port 3000
107
+ ```
108
+
109
+ ### Quick Start (Max / Max 5x)
110
+
111
+ Full pipeline with parallel research and multi-agent builds. Best experience.
112
+
113
+ ```bash
114
+ cd your-project && claude
115
+ ```
116
+ ```
117
+ /pbr:begin # Plan-Build-Run asks about your project, researches the domain,
118
+ # scopes requirements, and generates a phased roadmap
119
+
120
+ /pbr:plan 1 # Research + plan the first phase
121
+ /pbr:build 1 # Build it with parallel agents, atomic commits
122
+ /pbr:review 1 # Verify the codebase matches requirements
123
+ /pbr:plan 2 # Repeat for next phase
124
+ ```
125
+
126
+ That's the whole cycle. Everything lands in a `.planning/` directory. Kill your terminal anytime, `/pbr:resume` picks up where you left off.
127
+
128
+ ### Quick Start (Pro / Free)
129
+
130
+ Lighter workflow that still gives you structured state tracking and clean commits.
131
+
132
+ ```bash
133
+ cd your-project && claude
134
+ ```
135
+ ```
136
+ /pbr:setup # Create .planning/ structure without the heavy research step
137
+ /pbr:plan 1 --skip-research # Plan without spawning a research agent
138
+ /pbr:build 1 # Build it
139
+ /pbr:quick # For one-off tasks: single agent, atomic commit, lowest cost
140
+ ```
141
+
142
+ Set `depth: quick` in `/pbr:config` to reduce agent spawns across all workflows.
143
+
144
+ ### Quick Reference
145
+
146
+ | What you want | Command |
147
+ |---------------|---------|
148
+ | Start a new project | `/pbr:begin` (or `/pbr:setup` for lightweight init) |
149
+ | Plan a phase | `/pbr:plan 1` |
150
+ | Build a phase | `/pbr:build 1` |
151
+ | Verify a phase | `/pbr:review 1` |
152
+ | Do something quick | `/pbr:quick` |
153
+ | See where you are | `/pbr:status` |
154
+ | Resume after restart | `/pbr:resume` |
155
+ | Auto-advance | `/pbr:continue` |
156
+ | Change settings | `/pbr:config` |
157
+
158
+ ---
159
+
160
+ ## Commands
161
+
162
+ ### Core Workflow
163
+
164
+ | Command | Description | Agents |
165
+ |---------|-------------|--------|
166
+ | `/pbr:begin` | Start a new project: questioning, research, requirements, roadmap | 4-6 (quick: 2-3) |
167
+ | `/pbr:plan <N>` | Plan a phase: research, plan creation, verification loop | 2-3 (quick: 1-2) |
168
+ | `/pbr:build <N>` | Build a phase: parallel execution in waves, atomic commits | 2-4 (quick: 1-2) |
169
+ | `/pbr:review <N>` | Verify a phase: automated 3-layer checks + conversational UAT | 1 |
170
+
171
+ See **[Commands](https://github.com/SienkLogic/plan-build-run/wiki/Commands)** for all 21 commands with flags, cost-by-depth tables, and detailed descriptions.
172
+
173
+ ---
174
+
175
+ ## How It Works
176
+
177
+ Plan-Build-Run is a **thin orchestrator** that delegates heavy work to fresh subagent contexts via `Task()`. Data flows through files on disk, not through messages.
178
+
179
+ ```
180
+ Main Session (~15% context)
181
+
182
+ ├── Task(researcher) ──▶ writes .planning/research/
183
+ ├── Task(planner) ──▶ writes PLAN.md files
184
+ ├── Task(executor) ──▶ builds code, creates commits
185
+ ├── Task(executor) ──▶ (parallel, same wave)
186
+ └── Task(verifier) ──▶ checks codebase against must-haves
187
+ ```
188
+
189
+ See **[Architecture](https://github.com/SienkLogic/plan-build-run/wiki/Architecture)** for key concepts, the token-saving CLI, data flow details, and supporting directories.
190
+
191
+ ---
192
+
193
+ ## Deep Dive
194
+
195
+ | Topic | Description |
196
+ |-------|-------------|
197
+ | **[Agents](https://github.com/SienkLogic/plan-build-run/wiki/Agents)** | 10 specialized agents with configurable model profiles and file-based communication |
198
+ | **[Configuration](https://github.com/SienkLogic/plan-build-run/wiki/Configuration)** | 12 config keys, depth/model profiles, 16+ feature toggles |
199
+ | **[Hooks](https://github.com/SienkLogic/plan-build-run/wiki/Hooks)** | 15 lifecycle hooks that enforce discipline at zero token cost |
200
+ | **[Project Structure](https://github.com/SienkLogic/plan-build-run/wiki/Project-Structure)** | The `.planning/` directory layout, key files, and file ownership |
201
+ | **[Dashboard](https://github.com/SienkLogic/plan-build-run/wiki/Dashboard)** | Web UI with live updates for browsing project state |
202
+ | **[Philosophy](https://github.com/SienkLogic/plan-build-run/wiki/Philosophy)** | Design principles and platform alignment strategy |
203
+ | **[What Sets It Apart](https://github.com/SienkLogic/plan-build-run/wiki/What-Sets-It-Apart)** | Feature comparison and key differentiators |
204
+
205
+ ---
206
+
207
+ ## Local Development
208
+
209
+ ```bash
210
+ # Clone and install
211
+ git clone https://github.com/SienkLogic/plan-build-run.git
212
+ cd plan-build-run
213
+ npm install
214
+
215
+ # Run tests (758 tests, 36 suites)
216
+ npm test
217
+
218
+ # Lint
219
+ npm run lint
220
+
221
+ # Validate plugin structure
222
+ npm run validate
223
+
224
+ # Load locally for manual testing
225
+ claude --plugin-dir .
226
+ ```
227
+
228
+ CI runs on Node 18/20/22 across Windows, macOS, and Linux. See [CONTRIBUTING.md](.github/CONTRIBUTING.md) for guidelines.
229
+
230
+ ---
231
+
232
+ ## Stats
233
+
234
+ | Metric | Count |
235
+ |--------|-------|
236
+ | Skills (slash commands) | 21 |
237
+ | Specialized agents | 10 |
238
+ | Hook scripts | 28 |
239
+ | Tests | 758 |
240
+ | Test suites | 36 |
241
+ | Config toggles | 12 top-level keys |
242
+
243
+ ---
244
+
245
+ ## License
246
+
247
+ [MIT](LICENSE)
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { Command } from 'commander';
4
+ import { resolve } from 'path';
5
+ import { startServer } from '../src/server.js';
6
+
7
+ const program = new Command();
8
+
9
+ program
10
+ .name('pbr-dashboard')
11
+ .description('Start the Plan-Build-Run planning dashboard')
12
+ .option('-d, --dir <path>', 'Path to Plan-Build-Run project directory', process.cwd())
13
+ .option('-p, --port <number>', 'Server port', '3000')
14
+ .parse();
15
+
16
+ const options = program.opts();
17
+ const projectDir = resolve(options.dir);
18
+ const port = parseInt(options.port, 10);
19
+
20
+ if (isNaN(port) || port < 1 || port > 65535) {
21
+ console.error(`Invalid port: ${options.port}`);
22
+ process.exit(1);
23
+ }
24
+
25
+ startServer({ projectDir, port });
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "plan-build-run-dashboard",
3
+ "version": "0.1.0",
4
+ "description": "Web dashboard for viewing Plan-Build-Run project planning state",
5
+ "type": "module",
6
+ "bin": {
7
+ "pbr-dashboard": "./bin/cli.js"
8
+ },
9
+ "scripts": {
10
+ "start": "node bin/cli.js",
11
+ "dev": "node --watch bin/cli.js",
12
+ "test": "vitest run"
13
+ },
14
+ "keywords": [
15
+ "plan-build-run",
16
+ "dashboard",
17
+ "planning"
18
+ ],
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "@rollup/rollup-win32-x64-msvc": "^4.57.1",
22
+ "chokidar": "^5.0.0",
23
+ "commander": "^12.1.0",
24
+ "ejs": "^3.1.10",
25
+ "express": "^5.1.0",
26
+ "gray-matter": "^4.0.3",
27
+ "helmet": "^8.1.0",
28
+ "marked": "^17.0.1"
29
+ },
30
+ "devDependencies": {
31
+ "memfs": "^4.56.10",
32
+ "vitest": "^3.1.0"
33
+ }
34
+ }
File without changes