@sienklogic/plan-build-run 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/CHANGELOG.md +56 -56
  2. package/CLAUDE.md +149 -149
  3. package/LICENSE +21 -21
  4. package/README.md +247 -247
  5. package/dashboard/bin/cli.js +25 -25
  6. package/dashboard/package.json +34 -34
  7. package/dashboard/public/css/layout.css +406 -406
  8. package/dashboard/public/css/status-colors.css +98 -98
  9. package/dashboard/public/js/htmx-title.js +5 -5
  10. package/dashboard/public/js/sidebar-toggle.js +20 -20
  11. package/dashboard/src/app.js +78 -78
  12. package/dashboard/src/middleware/errorHandler.js +52 -52
  13. package/dashboard/src/middleware/notFoundHandler.js +9 -9
  14. package/dashboard/src/repositories/planning.repository.js +128 -128
  15. package/dashboard/src/routes/events.routes.js +40 -40
  16. package/dashboard/src/routes/index.routes.js +31 -31
  17. package/dashboard/src/routes/pages.routes.js +245 -195
  18. package/dashboard/src/server.js +42 -42
  19. package/dashboard/src/services/dashboard.service.js +222 -222
  20. package/dashboard/src/services/phase.service.js +220 -167
  21. package/dashboard/src/services/project.service.js +57 -57
  22. package/dashboard/src/services/roadmap.service.js +171 -171
  23. package/dashboard/src/services/sse.service.js +58 -58
  24. package/dashboard/src/services/todo.service.js +254 -254
  25. package/dashboard/src/services/watcher.service.js +48 -48
  26. package/dashboard/src/views/coming-soon.ejs +11 -11
  27. package/dashboard/src/views/error.ejs +13 -13
  28. package/dashboard/src/views/index.ejs +5 -5
  29. package/dashboard/src/views/layout.ejs +1 -1
  30. package/dashboard/src/views/partials/dashboard-content.ejs +77 -77
  31. package/dashboard/src/views/partials/footer.ejs +3 -3
  32. package/dashboard/src/views/partials/head.ejs +21 -21
  33. package/dashboard/src/views/partials/header.ejs +12 -12
  34. package/dashboard/src/views/partials/layout-bottom.ejs +15 -15
  35. package/dashboard/src/views/partials/layout-top.ejs +8 -8
  36. package/dashboard/src/views/partials/phase-content.ejs +188 -181
  37. package/dashboard/src/views/partials/phase-doc-content.ejs +38 -0
  38. package/dashboard/src/views/partials/phases-content.ejs +117 -117
  39. package/dashboard/src/views/partials/roadmap-content.ejs +142 -142
  40. package/dashboard/src/views/partials/sidebar.ejs +38 -38
  41. package/dashboard/src/views/partials/todo-create-content.ejs +53 -53
  42. package/dashboard/src/views/partials/todo-detail-content.ejs +38 -38
  43. package/dashboard/src/views/partials/todos-content.ejs +53 -53
  44. package/dashboard/src/views/phase-detail.ejs +5 -5
  45. package/dashboard/src/views/phase-doc.ejs +5 -0
  46. package/dashboard/src/views/phases.ejs +5 -5
  47. package/dashboard/src/views/roadmap.ejs +5 -5
  48. package/dashboard/src/views/todo-create.ejs +5 -5
  49. package/dashboard/src/views/todo-detail.ejs +5 -5
  50. package/dashboard/src/views/todos.ejs +5 -5
  51. package/package.json +57 -57
  52. package/plugins/pbr/.claude-plugin/plugin.json +13 -13
  53. package/plugins/pbr/UI-CONSISTENCY-GAPS.md +61 -61
  54. package/plugins/pbr/agents/codebase-mapper.md +279 -271
  55. package/plugins/pbr/agents/debugger.md +281 -281
  56. package/plugins/pbr/agents/executor.md +428 -407
  57. package/plugins/pbr/agents/general.md +164 -164
  58. package/plugins/pbr/agents/integration-checker.md +169 -141
  59. package/plugins/pbr/agents/plan-checker.md +296 -280
  60. package/plugins/pbr/agents/planner.md +358 -358
  61. package/plugins/pbr/agents/researcher.md +363 -363
  62. package/plugins/pbr/agents/synthesizer.md +230 -230
  63. package/plugins/pbr/agents/verifier.md +489 -454
  64. package/plugins/pbr/commands/begin.md +5 -5
  65. package/plugins/pbr/commands/build.md +5 -5
  66. package/plugins/pbr/commands/config.md +5 -5
  67. package/plugins/pbr/commands/continue.md +5 -5
  68. package/plugins/pbr/commands/debug.md +5 -5
  69. package/plugins/pbr/commands/discuss.md +5 -5
  70. package/plugins/pbr/commands/explore.md +5 -5
  71. package/plugins/pbr/commands/health.md +5 -5
  72. package/plugins/pbr/commands/help.md +5 -5
  73. package/plugins/pbr/commands/import.md +5 -5
  74. package/plugins/pbr/commands/milestone.md +5 -5
  75. package/plugins/pbr/commands/note.md +5 -5
  76. package/plugins/pbr/commands/pause.md +5 -5
  77. package/plugins/pbr/commands/plan.md +5 -5
  78. package/plugins/pbr/commands/quick.md +5 -5
  79. package/plugins/pbr/commands/resume.md +5 -5
  80. package/plugins/pbr/commands/review.md +5 -5
  81. package/plugins/pbr/commands/scan.md +5 -5
  82. package/plugins/pbr/commands/setup.md +5 -5
  83. package/plugins/pbr/commands/status.md +5 -5
  84. package/plugins/pbr/commands/todo.md +5 -5
  85. package/plugins/pbr/contexts/dev.md +27 -27
  86. package/plugins/pbr/contexts/research.md +28 -28
  87. package/plugins/pbr/contexts/review.md +36 -36
  88. package/plugins/pbr/hooks/hooks.json +183 -183
  89. package/plugins/pbr/references/agent-anti-patterns.md +24 -24
  90. package/plugins/pbr/references/agent-interactions.md +134 -134
  91. package/plugins/pbr/references/agent-teams.md +54 -54
  92. package/plugins/pbr/references/checkpoints.md +157 -157
  93. package/plugins/pbr/references/common-bug-patterns.md +13 -13
  94. package/plugins/pbr/references/config-reference.md +441 -0
  95. package/plugins/pbr/references/continuation-format.md +212 -212
  96. package/plugins/pbr/references/deviation-rules.md +112 -112
  97. package/plugins/pbr/references/git-integration.md +226 -226
  98. package/plugins/pbr/references/integration-patterns.md +117 -117
  99. package/plugins/pbr/references/model-profiles.md +99 -99
  100. package/plugins/pbr/references/model-selection.md +31 -31
  101. package/plugins/pbr/references/pbr-rules.md +193 -193
  102. package/plugins/pbr/references/plan-authoring.md +181 -181
  103. package/plugins/pbr/references/plan-format.md +287 -283
  104. package/plugins/pbr/references/planning-config.md +213 -213
  105. package/plugins/pbr/references/questioning.md +214 -214
  106. package/plugins/pbr/references/reading-verification.md +127 -127
  107. package/plugins/pbr/references/stub-patterns.md +160 -160
  108. package/plugins/pbr/references/subagent-coordination.md +119 -119
  109. package/plugins/pbr/references/ui-formatting.md +461 -399
  110. package/plugins/pbr/references/verification-patterns.md +198 -198
  111. package/plugins/pbr/references/wave-execution.md +95 -95
  112. package/plugins/pbr/scripts/auto-continue.js +80 -80
  113. package/plugins/pbr/scripts/check-dangerous-commands.js +136 -136
  114. package/plugins/pbr/scripts/check-doc-sprawl.js +102 -102
  115. package/plugins/pbr/scripts/check-phase-boundary.js +196 -196
  116. package/plugins/pbr/scripts/check-plan-format.js +270 -270
  117. package/plugins/pbr/scripts/check-roadmap-sync.js +322 -252
  118. package/plugins/pbr/scripts/check-skill-workflow.js +262 -262
  119. package/plugins/pbr/scripts/check-state-sync.js +476 -476
  120. package/plugins/pbr/scripts/check-subagent-output.js +144 -144
  121. package/plugins/pbr/scripts/config-schema.json +251 -251
  122. package/plugins/pbr/scripts/context-budget-check.js +287 -287
  123. package/plugins/pbr/scripts/event-handler.js +151 -151
  124. package/plugins/pbr/scripts/event-logger.js +92 -92
  125. package/plugins/pbr/scripts/hook-logger.js +80 -76
  126. package/plugins/pbr/scripts/hooks-schema.json +79 -79
  127. package/plugins/pbr/scripts/log-subagent.js +164 -152
  128. package/plugins/pbr/scripts/log-tool-failure.js +88 -88
  129. package/plugins/pbr/scripts/pbr-tools.js +1378 -1301
  130. package/plugins/pbr/scripts/post-write-dispatch.js +66 -66
  131. package/plugins/pbr/scripts/post-write-quality.js +207 -207
  132. package/plugins/pbr/scripts/pre-bash-dispatch.js +86 -56
  133. package/plugins/pbr/scripts/pre-write-dispatch.js +97 -62
  134. package/plugins/pbr/scripts/progress-tracker.js +281 -228
  135. package/plugins/pbr/scripts/run-hook.js +92 -0
  136. package/plugins/pbr/scripts/session-cleanup.js +254 -254
  137. package/plugins/pbr/scripts/status-line.js +288 -285
  138. package/plugins/pbr/scripts/suggest-compact.js +119 -119
  139. package/plugins/pbr/scripts/task-completed.js +45 -45
  140. package/plugins/pbr/scripts/track-context-budget.js +149 -119
  141. package/plugins/pbr/scripts/validate-commit.js +200 -200
  142. package/plugins/pbr/scripts/validate-plugin-structure.js +183 -172
  143. package/plugins/pbr/scripts/validate-task.js +106 -0
  144. package/plugins/pbr/skills/begin/SKILL.md +594 -545
  145. package/plugins/pbr/skills/begin/templates/PROJECT.md.tmpl +33 -33
  146. package/plugins/pbr/skills/begin/templates/REQUIREMENTS.md.tmpl +18 -18
  147. package/plugins/pbr/skills/begin/templates/STATE.md.tmpl +49 -49
  148. package/plugins/pbr/skills/begin/templates/config.json.tmpl +64 -63
  149. package/plugins/pbr/skills/begin/templates/researcher-prompt.md.tmpl +19 -19
  150. package/plugins/pbr/skills/begin/templates/roadmap-prompt.md.tmpl +30 -30
  151. package/plugins/pbr/skills/begin/templates/synthesis-prompt.md.tmpl +16 -16
  152. package/plugins/pbr/skills/build/SKILL.md +943 -962
  153. package/plugins/pbr/skills/config/SKILL.md +256 -241
  154. package/plugins/pbr/skills/continue/SKILL.md +164 -127
  155. package/plugins/pbr/skills/debug/SKILL.md +515 -489
  156. package/plugins/pbr/skills/debug/templates/continuation-prompt.md.tmpl +16 -16
  157. package/plugins/pbr/skills/debug/templates/initial-investigation-prompt.md.tmpl +27 -27
  158. package/plugins/pbr/skills/discuss/SKILL.md +347 -338
  159. package/plugins/pbr/skills/discuss/templates/CONTEXT.md.tmpl +61 -61
  160. package/plugins/pbr/skills/discuss/templates/decision-categories.md +9 -9
  161. package/plugins/pbr/skills/explore/SKILL.md +378 -362
  162. package/plugins/pbr/skills/health/SKILL.md +221 -186
  163. package/plugins/pbr/skills/health/templates/check-pattern.md.tmpl +30 -30
  164. package/plugins/pbr/skills/health/templates/output-format.md.tmpl +63 -63
  165. package/plugins/pbr/skills/help/SKILL.md +155 -140
  166. package/plugins/pbr/skills/import/SKILL.md +504 -490
  167. package/plugins/pbr/skills/milestone/SKILL.md +704 -673
  168. package/plugins/pbr/skills/milestone/templates/audit-report.md.tmpl +48 -48
  169. package/plugins/pbr/skills/milestone/templates/stats-file.md.tmpl +30 -30
  170. package/plugins/pbr/skills/note/SKILL.md +231 -212
  171. package/plugins/pbr/skills/pause/SKILL.md +249 -235
  172. package/plugins/pbr/skills/pause/templates/continue-here.md.tmpl +71 -71
  173. package/plugins/pbr/skills/plan/SKILL.md +685 -628
  174. package/plugins/pbr/skills/plan/decimal-phase-calc.md +98 -98
  175. package/plugins/pbr/skills/plan/templates/checker-prompt.md.tmpl +21 -21
  176. package/plugins/pbr/skills/plan/templates/gap-closure-prompt.md.tmpl +32 -32
  177. package/plugins/pbr/skills/plan/templates/planner-prompt.md.tmpl +38 -38
  178. package/plugins/pbr/skills/plan/templates/researcher-prompt.md.tmpl +19 -19
  179. package/plugins/pbr/skills/plan/templates/revision-prompt.md.tmpl +23 -23
  180. package/plugins/pbr/skills/quick/SKILL.md +354 -335
  181. package/plugins/pbr/skills/resume/SKILL.md +402 -388
  182. package/plugins/pbr/skills/review/SKILL.md +686 -652
  183. package/plugins/pbr/skills/review/templates/debugger-prompt.md.tmpl +60 -60
  184. package/plugins/pbr/skills/review/templates/gap-planner-prompt.md.tmpl +40 -40
  185. package/plugins/pbr/skills/review/templates/verifier-prompt.md.tmpl +115 -115
  186. package/plugins/pbr/skills/scan/SKILL.md +304 -269
  187. package/plugins/pbr/skills/scan/templates/mapper-prompt.md.tmpl +201 -201
  188. package/plugins/pbr/skills/setup/SKILL.md +253 -227
  189. package/plugins/pbr/skills/shared/commit-planning-docs.md +35 -35
  190. package/plugins/pbr/skills/shared/config-loading.md +102 -102
  191. package/plugins/pbr/skills/shared/context-budget.md +40 -40
  192. package/plugins/pbr/skills/shared/context-loader-task.md +86 -86
  193. package/plugins/pbr/skills/shared/digest-select.md +79 -79
  194. package/plugins/pbr/skills/shared/domain-probes.md +125 -125
  195. package/plugins/pbr/skills/shared/error-reporting.md +79 -79
  196. package/plugins/pbr/skills/shared/gate-prompts.md +388 -388
  197. package/plugins/pbr/skills/shared/phase-argument-parsing.md +45 -45
  198. package/plugins/pbr/skills/shared/progress-display.md +53 -53
  199. package/plugins/pbr/skills/shared/revision-loop.md +81 -81
  200. package/plugins/pbr/skills/shared/state-loading.md +62 -62
  201. package/plugins/pbr/skills/shared/state-update.md +161 -161
  202. package/plugins/pbr/skills/shared/universal-anti-patterns.md +33 -33
  203. package/plugins/pbr/skills/status/SKILL.md +367 -353
  204. package/plugins/pbr/skills/todo/SKILL.md +198 -181
  205. package/plugins/pbr/templates/CONTEXT.md.tmpl +52 -52
  206. package/plugins/pbr/templates/INTEGRATION-REPORT.md.tmpl +151 -151
  207. package/plugins/pbr/templates/RESEARCH-SUMMARY.md.tmpl +97 -97
  208. package/plugins/pbr/templates/ROADMAP.md.tmpl +40 -40
  209. package/plugins/pbr/templates/SUMMARY.md.tmpl +81 -81
  210. package/plugins/pbr/templates/VERIFICATION-DETAIL.md.tmpl +116 -116
  211. package/plugins/pbr/templates/codebase/ARCHITECTURE.md.tmpl +98 -98
  212. package/plugins/pbr/templates/codebase/CONCERNS.md.tmpl +93 -93
  213. package/plugins/pbr/templates/codebase/CONVENTIONS.md.tmpl +104 -104
  214. package/plugins/pbr/templates/codebase/INTEGRATIONS.md.tmpl +78 -78
  215. package/plugins/pbr/templates/codebase/STACK.md.tmpl +78 -78
  216. package/plugins/pbr/templates/codebase/STRUCTURE.md.tmpl +80 -80
  217. package/plugins/pbr/templates/codebase/TESTING.md.tmpl +107 -107
  218. package/plugins/pbr/templates/continue-here.md.tmpl +73 -73
  219. package/plugins/pbr/templates/prompt-partials/phase-project-context.md.tmpl +37 -37
  220. package/plugins/pbr/templates/research/ARCHITECTURE.md.tmpl +124 -124
  221. package/plugins/pbr/templates/research/STACK.md.tmpl +71 -71
  222. package/plugins/pbr/templates/research/SUMMARY.md.tmpl +112 -112
  223. package/plugins/pbr/templates/research-outputs/phase-research.md.tmpl +81 -81
  224. package/plugins/pbr/templates/research-outputs/project-research.md.tmpl +99 -99
  225. package/plugins/pbr/templates/research-outputs/synthesis.md.tmpl +36 -36
@@ -1,48 +1,48 @@
1
- # Template: Milestone Audit Report
2
- # Used by: milestone/SKILL.md (audit subcommand, Step 5)
3
- # Variables: {version}, {status}, {date}, {phase entries}, {integration results}, {requirements}, {tech debt}
4
-
5
- ---
6
- milestone: "{version}"
7
- status: "{passed | gaps_found | tech_debt}"
8
- date: "{ISO date}"
9
- ---
10
-
11
- # Milestone Audit: {version}
12
-
13
- ## Overall Status: {PASSED / GAPS FOUND / TECH DEBT}
14
-
15
- ## Phase Verification Summary
16
-
17
- | Phase | Verified | Gaps | Integration |
18
- |-------|----------|------|-------------|
19
- | {N}. {name} | {yes/no} | {count} | {ok/issues} |
20
-
21
- ## Integration Check Results
22
-
23
- ### Dependency Graph
24
- {Mermaid or ASCII representation of phase dependencies}
25
-
26
- ### Integration Issues
27
- {List of integration problems found, or "None"}
28
-
29
- - **{Issue}**: {description}
30
- - Affected phases: {list}
31
- - Severity: {critical/high/medium/low}
32
- - Suggested fix: {brief suggestion}
33
-
34
- ## Requirements Coverage
35
-
36
- | Requirement | Status | Verified By |
37
- |-------------|--------|-------------|
38
- | {req} | {covered/uncovered} | {phase/plan or "N/A"} |
39
-
40
- ## Tech Debt Identified
41
-
42
- {Issues that don't block the milestone but should be addressed}
43
-
44
- - {debt item}: {description}
45
-
46
- ## Recommendations
47
-
48
- {Summary of what needs to be done, if anything}
1
+ # Template: Milestone Audit Report
2
+ # Used by: milestone/SKILL.md (audit subcommand, Step 5)
3
+ # Variables: {version}, {status}, {date}, {phase entries}, {integration results}, {requirements}, {tech debt}
4
+
5
+ ---
6
+ milestone: "{version}"
7
+ status: "{passed | gaps_found | tech_debt}"
8
+ date: "{ISO date}"
9
+ ---
10
+
11
+ # Milestone Audit: {version}
12
+
13
+ ## Overall Status: {PASSED / GAPS FOUND / TECH DEBT}
14
+
15
+ ## Phase Verification Summary
16
+
17
+ | Phase | Verified | Gaps | Integration |
18
+ |-------|----------|------|-------------|
19
+ | {N}. {name} | {yes/no} | {count} | {ok/issues} |
20
+
21
+ ## Integration Check Results
22
+
23
+ ### Dependency Graph
24
+ {Mermaid or ASCII representation of phase dependencies}
25
+
26
+ ### Integration Issues
27
+ {List of integration problems found, or "None"}
28
+
29
+ - **{Issue}**: {description}
30
+ - Affected phases: {list}
31
+ - Severity: {critical/high/medium/low}
32
+ - Suggested fix: {brief suggestion}
33
+
34
+ ## Requirements Coverage
35
+
36
+ | Requirement | Status | Verified By |
37
+ |-------------|--------|-------------|
38
+ | {req} | {covered/uncovered} | {phase/plan or "N/A"} |
39
+
40
+ ## Tech Debt Identified
41
+
42
+ {Issues that don't block the milestone but should be addressed}
43
+
44
+ - {debt item}: {description}
45
+
46
+ ## Recommendations
47
+
48
+ {Summary of what needs to be done, if anything}
@@ -1,30 +1,30 @@
1
- # Template: Milestone Stats File
2
- # Used by: milestone/SKILL.md (complete subcommand, Step 5)
3
- # Variables: {version}, {name}, {date}, {days}, {counts}, {accomplishments}, {decisions}, {tech stack}, {patterns}
4
-
5
- # Milestone {version} Stats
6
-
7
- **Name:** {milestone name}
8
- **Completed:** {ISO date}
9
- **Duration:** {days}
10
-
11
- ## Metrics
12
- - Phases: {count}
13
- - Plans executed: {count}
14
- - Quick tasks: {count}
15
- - Total commits: {count}
16
- - Files changed: {count}
17
- - Lines added: {count}
18
- - Lines removed: {count}
19
-
20
- ## Accomplishments
21
- {bulleted list of key features/capabilities built}
22
-
23
- ## Key Decisions
24
- {bulleted list of important decisions made}
25
-
26
- ## Technology Stack
27
- {list of technologies used}
28
-
29
- ## Patterns Established
30
- {list of patterns applied}
1
+ # Template: Milestone Stats File
2
+ # Used by: milestone/SKILL.md (complete subcommand, Step 5)
3
+ # Variables: {version}, {name}, {date}, {days}, {counts}, {accomplishments}, {decisions}, {tech stack}, {patterns}
4
+
5
+ # Milestone {version} Stats
6
+
7
+ **Name:** {milestone name}
8
+ **Completed:** {ISO date}
9
+ **Duration:** {days}
10
+
11
+ ## Metrics
12
+ - Phases: {count}
13
+ - Plans executed: {count}
14
+ - Quick tasks: {count}
15
+ - Total commits: {count}
16
+ - Files changed: {count}
17
+ - Lines added: {count}
18
+ - Lines removed: {count}
19
+
20
+ ## Accomplishments
21
+ {bulleted list of key features/capabilities built}
22
+
23
+ ## Key Decisions
24
+ {bulleted list of important decisions made}
25
+
26
+ ## Technology Stack
27
+ {list of technologies used}
28
+
29
+ ## Patterns Established
30
+ {list of patterns applied}
@@ -1,212 +1,231 @@
1
- ---
2
- name: note
3
- description: "Zero-friction idea capture. Append, list, or promote notes to todos."
4
- allowed-tools: Read, Write, Glob, Grep
5
- argument-hint: "<text> | list | promote <index> [--global]"
6
- ---
7
-
8
- # /pbr:note Quick Note Capture
9
-
10
- You are running the **note** skill. Your job is zero-friction idea capture. One Write call, one confirmation line. No questions, no prompts.
11
-
12
- This skill runs **inline** no Task, no AskUserQuestion, no Bash.
13
-
14
- ---
15
-
16
- ## Scope Detection
17
-
18
- Two scopes exist. Auto-detect which to use:
19
-
20
- 1. **Project scope**: `.planning/NOTES.md` — used when `.planning/` directory exists in cwd
21
- 2. **Global scope**: `~/.claude/notes.md` — used as fallback when no `.planning/`, or when `--global` flag is present
22
-
23
- **`--global` flag**: Strip `--global` from anywhere in `$ARGUMENTS` before parsing. When present, force global scope regardless of whether `.planning/` exists.
24
-
25
- **Important**: Do NOT create `.planning/` if it doesn't exist. If there's no `.planning/` directory, fall back to global scope silently.
26
-
27
- ---
28
-
29
- ## Subcommand Parsing
30
-
31
- Parse `$ARGUMENTS` after stripping `--global`:
32
-
33
- | Condition | Subcommand |
34
- |-----------|------------|
35
- | Arguments are exactly `list` (case-insensitive) | **list** |
36
- | Arguments are exactly `promote <N>` where N is a number | **promote** |
37
- | Arguments are empty (no text at all) | **list** |
38
- | Anything else | **append** (the text IS the note) |
39
-
40
- **Critical**: `list` is only a subcommand when it's the ENTIRE argument. `/pbr:note list of groceries` saves a note with text "list of groceries". Same for `promote` — only a subcommand when followed by exactly one number.
41
-
42
- ---
43
-
44
- ## Subcommand: append
45
-
46
- Append a timestamped note to the target file.
47
-
48
- ### Steps
49
-
50
- 1. Determine scope (project or global) per Scope Detection above
51
- 2. Read the target file if it exists
52
- 3. If the file doesn't exist, create it with this header:
53
-
54
- ```markdown
55
- # Notes
56
-
57
- Quick captures from `/pbr:note`. Ideas worth remembering.
58
-
59
- ---
60
-
61
- ```
62
-
63
- 4. Ensure the file content ends with a newline before appending
64
- 5. Append: `- [YYYY-MM-DD HH:mm] {note text verbatim}`
65
- 6. Write the file
66
- 7. Confirm with exactly one line: `Noted ({scope}): {note text}`
67
- - Where `{scope}` is "project" or "global"
68
-
69
- ### Constraints
70
-
71
- - **Never modify the note text** capture verbatim, including typos
72
- - **Never ask questions** — just write and confirm
73
- - **Timestamp format**: Use local time, `YYYY-MM-DD HH:mm` (24-hour, no seconds)
74
-
75
- ---
76
-
77
- ## Subcommand: list
78
-
79
- Show notes from both project and global scopes.
80
-
81
- ### Steps
82
-
83
- 1. Read `.planning/NOTES.md` (if exists) — these are "project" notes
84
- 2. Read `~/.claude/notes.md` (if exists) — these are "global" notes
85
- 3. Parse entries: lines matching `^- \[` are notes
86
- 4. Exclude lines containing `[promoted]` from active counts (but still show them, dimmed)
87
- 5. Number all active entries sequentially starting at 1 (across both scopes)
88
- 6. If total active entries > 20, show only the last 10 with a note about how many were omitted
89
-
90
- ### Display Format
91
-
92
- ```
93
- Notes:
94
-
95
- Project (.planning/NOTES.md):
96
- 1. [2026-02-08 14:32] refactor the hook system to support async validators
97
- 2. [promoted] [2026-02-08 14:40] add rate limiting to the API endpoints
98
- 3. [2026-02-08 15:10] consider adding a --dry-run flag to build
99
-
100
- Global (~/.claude/notes.md):
101
- 4. [2026-02-08 10:00] cross-project idea about shared config
102
-
103
- {count} active note(s). Use `/pbr:note promote <N>` to convert to a todo.
104
- ```
105
-
106
- If a scope has no file or no entries, show: `(no notes)`
107
-
108
- ---
109
-
110
- ## Subcommand: promote
111
-
112
- Convert a note into a todo file.
113
-
114
- ### Steps
115
-
116
- 1. Run the **list** logic to build the numbered index (both scopes)
117
- 2. Find entry N from the numbered list
118
- 3. If N is invalid or refers to an already-promoted note, tell the user and stop
119
- 4. **Requires `.planning/` directory** — if it doesn't exist, warn: "Todos require a Plan-Build-Run project. Run `/pbr:begin` to initialize one, or use `/pbr:todo add` in an existing project."
120
- 5. Ensure `.planning/todos/pending/` directory exists
121
- 6. Generate todo ID: `{YYYYMMDD}-{NNN}` where NNN is sequential within the day (check existing files)
122
- 7. Extract the note text (everything after the timestamp)
123
- 8. Create `.planning/todos/pending/{id}.md`:
124
-
125
- ```yaml
126
- ---
127
- id: {id}
128
- area: general
129
- priority: normal
130
- created: {ISO-timestamp}
131
- source: "promoted from /pbr:note"
132
- ---
133
-
134
- # {note text}
135
-
136
- ## Context
137
- Promoted from quick note captured on {original date}.
138
-
139
- ## Notes
140
- (empty)
141
- ```
142
-
143
- 9. Mark the original note as promoted: replace `- [` with `- [promoted] [` on that line
144
- 10. Confirm: `Promoted note {N} to todo {id}: {note text}`
145
-
146
- ---
147
-
148
- ## NOTES.md Format Reference
149
-
150
- ```markdown
151
- # Notes
152
-
153
- Quick captures from `/pbr:note`. Ideas worth remembering.
154
-
155
- ---
156
-
157
- - [2026-02-08 14:32] refactor the hook system to support async validators
158
- - [promoted] [2026-02-08 14:40] add rate limiting to the API endpoints
159
- - [2026-02-08 15:10] consider adding a --dry-run flag to build
160
- ```
161
-
162
- ---
163
-
164
- ## Edge Cases
165
-
166
- 1. **"list" as note text**: `/pbr:note list of things` → saves note "list of things" (subcommand only when `list` is the entire arg)
167
- 2. **No `.planning/`**: Falls back to global `~/.claude/notes.md` works in any directory
168
- 3. **Promote without project**: Warns that todos require `.planning/`, suggests `/pbr:begin`
169
- 4. **Large files**: `list` shows last 10 when >20 active entries
170
- 5. **Missing newline**: Always ensure trailing newline before appending
171
- 6. **`--global` position**: Stripped from anywhere — `--global my idea` and `my idea --global` both save "my idea" globally
172
- 7. **Promote already-promoted**: Tell user "Note {N} is already promoted" and stop
173
- 8. **Empty note text after stripping flags**: Treat as `list` subcommand
174
-
175
- ---
176
-
177
- ## Error Handling
178
-
179
- ### Write failure
180
- If the Write tool fails (permissions, disk full, etc.), display:
181
- ```
182
- ╔══════════════════════════════════════════════════════════════╗
183
- ║ ERROR ║
184
- ╚══════════════════════════════════════════════════════════════╝
185
-
186
- Failed to write note to {target_file}.
187
-
188
- **To fix:** Check file permissions or disk space.
189
- ```
190
-
191
- ### Promote target not found
192
- If the specified note index is invalid, display:
193
- ```
194
- ╔══════════════════════════════════════════════════════════════╗
195
- ║ ERROR ║
196
- ╚══════════════════════════════════════════════════════════════╝
197
-
198
- Note {N} not found. Valid range: 1-{max}.
199
-
200
- **To fix:** Run `/pbr:note list` to see available notes.
201
- ```
202
-
203
- ---
204
-
205
- ## Anti-Patterns
206
-
207
- 1. **DO NOT** ask questions on append just write and confirm
208
- 2. **DO NOT** modify note text — capture verbatim
209
- 3. **DO NOT** use Task, AskUserQuestion, or Bash
210
- 4. **DO NOT** create `.planning/` if it doesn't exist — fall back to global
211
- 5. **DO NOT** number promoted notes in the active count (but still display them)
212
- 6. **DO NOT** over-format the confirmation — one line is enough
1
+ ---
2
+ name: note
3
+ description: "Zero-friction idea capture. Append, list, or promote notes to todos."
4
+ allowed-tools: Read, Write, Glob, Grep
5
+ argument-hint: "<text> | list | promote <index> [--global]"
6
+ ---
7
+
8
+ **STOPDO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.**
9
+
10
+ ## Step 0 Immediate Output
11
+
12
+ **Before ANY tool calls**, display this banner:
13
+
14
+ ```
15
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
16
+ PLAN-BUILD-RUN ► NOTE
17
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18
+ ```
19
+
20
+ Then proceed to Step 1.
21
+
22
+ # /pbr:note — Quick Note Capture
23
+
24
+ You are running the **note** skill. Your job is zero-friction idea capture. One Write call, one confirmation line. No questions, no prompts.
25
+
26
+ This skill runs **inline** — no Task, no AskUserQuestion, no Bash.
27
+
28
+ ---
29
+
30
+ ## Scope Detection
31
+
32
+ Two scopes exist. Auto-detect which to use:
33
+
34
+ 1. **Project scope**: `.planning/NOTES.md` — used when `.planning/` directory exists in cwd
35
+ 2. **Global scope**: `~/.claude/notes.md` — used as fallback when no `.planning/`, or when `--global` flag is present
36
+
37
+ **`--global` flag**: Strip `--global` from anywhere in `$ARGUMENTS` before parsing. When present, force global scope regardless of whether `.planning/` exists.
38
+
39
+ **Important**: Do NOT create `.planning/` if it doesn't exist. If there's no `.planning/` directory, fall back to global scope silently.
40
+
41
+ ---
42
+
43
+ ## Subcommand Parsing
44
+
45
+ Parse `$ARGUMENTS` after stripping `--global`:
46
+
47
+ | Condition | Subcommand |
48
+ |-----------|------------|
49
+ | Arguments are exactly `list` (case-insensitive) | **list** |
50
+ | Arguments are exactly `promote <N>` where N is a number | **promote** |
51
+ | Arguments are empty (no text at all) | **list** |
52
+ | Anything else | **append** (the text IS the note) |
53
+
54
+ **Critical**: `list` is only a subcommand when it's the ENTIRE argument. `/pbr:note list of groceries` saves a note with text "list of groceries". Same for `promote` — only a subcommand when followed by exactly one number.
55
+
56
+ ---
57
+
58
+ ## Subcommand: append
59
+
60
+ Append a timestamped note to the target file.
61
+
62
+ ### Steps
63
+
64
+ 1. Determine scope (project or global) per Scope Detection above
65
+ 2. Read the target file if it exists
66
+ 3. If the file doesn't exist, create it with this header:
67
+
68
+ ```markdown
69
+ # Notes
70
+
71
+ Quick captures from `/pbr:note`. Ideas worth remembering.
72
+
73
+ ---
74
+
75
+ ```
76
+
77
+ 4. Ensure the file content ends with a newline before appending
78
+ 5. Append: `- [YYYY-MM-DD HH:mm] {note text verbatim}`
79
+ 6. Write the file
80
+ 7. Confirm with exactly one line: `Noted ({scope}): {note text}`
81
+ - Where `{scope}` is "project" or "global"
82
+
83
+ ### Constraints
84
+
85
+ - **Never modify the note text** capture verbatim, including typos
86
+ - **Never ask questions** just write and confirm
87
+ - **Timestamp format**: Use local time, `YYYY-MM-DD HH:mm` (24-hour, no seconds)
88
+
89
+ ---
90
+
91
+ ## Subcommand: list
92
+
93
+ Show notes from both project and global scopes.
94
+
95
+ ### Steps
96
+
97
+ 1. Read `.planning/NOTES.md` (if exists) these are "project" notes
98
+ 2. Read `~/.claude/notes.md` (if exists) these are "global" notes
99
+ 3. Parse entries: lines matching `^- \[` are notes
100
+ 4. Exclude lines containing `[promoted]` from active counts (but still show them, dimmed)
101
+ 5. Number all active entries sequentially starting at 1, using plain integers (1, 2, 3...) for display (across both scopes)
102
+ 6. If total active entries > 20, show only the last 10 with a note about how many were omitted
103
+
104
+ ### Display Format
105
+
106
+ ```
107
+ Notes:
108
+
109
+ Project (.planning/NOTES.md):
110
+ 1. [2026-02-08 14:32] refactor the hook system to support async validators
111
+ 2. [promoted] [2026-02-08 14:40] add rate limiting to the API endpoints
112
+ 3. [2026-02-08 15:10] consider adding a --dry-run flag to build
113
+
114
+ Global (~/.claude/notes.md):
115
+ 4. [2026-02-08 10:00] cross-project idea about shared config
116
+
117
+ {count} active note(s). Use `/pbr:note promote <N>` to convert to a todo.
118
+ ```
119
+
120
+ If a scope has no file or no entries, show: `(no notes)`
121
+
122
+ ---
123
+
124
+ ## Subcommand: promote
125
+
126
+ Convert a note into a todo file.
127
+
128
+ ### Steps
129
+
130
+ 1. Run the **list** logic to build the numbered index (both scopes)
131
+ 2. Find entry N from the numbered list
132
+ 3. If N is invalid or refers to an already-promoted note, tell the user and stop
133
+ 4. **Requires `.planning/` directory** — if it doesn't exist, warn: "Todos require a Plan-Build-Run project. Run `/pbr:begin` to initialize one, or use `/pbr:todo add` in an existing project."
134
+ 5. Ensure `.planning/todos/pending/` directory exists
135
+ 6. Generate todo ID: `{NNN}-{slug}` where NNN is the next sequential number (scan both `.planning/todos/pending/` and `.planning/todos/done/` for the highest existing number, increment by 1, zero-pad to 3 digits) and slug is the first ~4 meaningful words of the note text, lowercase, hyphen-separated
136
+ 7. Extract the note text (everything after the timestamp)
137
+ 8. Create `.planning/todos/pending/{id}.md`:
138
+
139
+ ```yaml
140
+ ---
141
+ title: "{note text}"
142
+ status: pending
143
+ priority: P2
144
+ source: "promoted from /pbr:note"
145
+ created: {YYYY-MM-DD}
146
+ theme: general
147
+ ---
148
+
149
+ ## Goal
150
+
151
+ {note text}
152
+
153
+ ## Context
154
+
155
+ Promoted from quick note captured on {original date}.
156
+
157
+ ## Acceptance Criteria
158
+
159
+ - [ ] {primary criterion derived from note text}
160
+ ```
161
+
162
+ 9. Mark the original note as promoted: replace `- [` with `- [promoted] [` on that line
163
+ 10. Confirm: `Promoted note {N} to todo {id}: {note text}`
164
+
165
+ ---
166
+
167
+ ## NOTES.md Format Reference
168
+
169
+ ```markdown
170
+ # Notes
171
+
172
+ Quick captures from `/pbr:note`. Ideas worth remembering.
173
+
174
+ ---
175
+
176
+ - [2026-02-08 14:32] refactor the hook system to support async validators
177
+ - [promoted] [2026-02-08 14:40] add rate limiting to the API endpoints
178
+ - [2026-02-08 15:10] consider adding a --dry-run flag to build
179
+ ```
180
+
181
+ ---
182
+
183
+ ## Edge Cases
184
+
185
+ 1. **"list" as note text**: `/pbr:note list of things` → saves note "list of things" (subcommand only when `list` is the entire arg)
186
+ 2. **No `.planning/`**: Falls back to global `~/.claude/notes.md` — works in any directory
187
+ 3. **Promote without project**: Warns that todos require `.planning/`, suggests `/pbr:begin`
188
+ 4. **Large files**: `list` shows last 10 when >20 active entries
189
+ 5. **Missing newline**: Always ensure trailing newline before appending
190
+ 6. **`--global` position**: Stripped from anywhere — `--global my idea` and `my idea --global` both save "my idea" globally
191
+ 7. **Promote already-promoted**: Tell user "Note {N} is already promoted" and stop
192
+ 8. **Empty note text after stripping flags**: Treat as `list` subcommand
193
+
194
+ ---
195
+
196
+ ## Error Handling
197
+
198
+ ### Write failure
199
+ If the Write tool fails (permissions, disk full, etc.), display:
200
+ ```
201
+ ╔══════════════════════════════════════════════════════════════╗
202
+ ║ ERROR ║
203
+ ╚══════════════════════════════════════════════════════════════╝
204
+
205
+ Failed to write note to {target_file}.
206
+
207
+ **To fix:** Check file permissions or disk space.
208
+ ```
209
+
210
+ ### Promote target not found
211
+ If the specified note index is invalid, display:
212
+ ```
213
+ ╔══════════════════════════════════════════════════════════════╗
214
+ ║ ERROR ║
215
+ ╚══════════════════════════════════════════════════════════════╝
216
+
217
+ Note {N} not found. Valid range: 1-{max}.
218
+
219
+ **To fix:** Run `/pbr:note list` to see available notes.
220
+ ```
221
+
222
+ ---
223
+
224
+ ## Anti-Patterns
225
+
226
+ 1. **DO NOT** ask questions on append — just write and confirm
227
+ 2. **DO NOT** modify note text — capture verbatim
228
+ 3. **DO NOT** use Task, AskUserQuestion, or Bash
229
+ 4. **DO NOT** create `.planning/` if it doesn't exist — fall back to global
230
+ 5. **DO NOT** number promoted notes in the active count (but still display them)
231
+ 6. **DO NOT** over-format the confirmation — one line is enough