@gannonh/kata 0.1.4 → 0.2.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 (89) hide show
  1. package/README.md +55 -28
  2. package/agents/kata-debugger.md +20 -1
  3. package/agents/kata-entity-generator.md +237 -0
  4. package/agents/kata-executor.md +31 -0
  5. package/agents/kata-phase-researcher.md +13 -4
  6. package/agents/kata-planner.md +19 -0
  7. package/agents/kata-project-researcher.md +5 -5
  8. package/agents/kata-research-synthesizer.md +9 -0
  9. package/bin/install.js +100 -38
  10. package/commands/kata/add-phase.md +8 -195
  11. package/commands/kata/add-todo.md +8 -170
  12. package/commands/kata/audit-milestone.md +10 -248
  13. package/commands/kata/check-todo.md +20 -0
  14. package/commands/kata/complete-milestone.md +8 -124
  15. package/commands/kata/debug.md +9 -138
  16. package/commands/kata/discuss-phase.md +13 -73
  17. package/commands/kata/execute-phase.md +9 -293
  18. package/commands/kata/help.md +13 -376
  19. package/commands/kata/insert-phase.md +8 -215
  20. package/commands/kata/list-phase-assumptions.md +10 -40
  21. package/commands/kata/map-codebase.md +10 -61
  22. package/commands/kata/pause-work.md +9 -112
  23. package/commands/kata/plan-milestone-gaps.md +9 -273
  24. package/commands/kata/plan-phase.md +9 -464
  25. package/commands/kata/progress.md +10 -346
  26. package/commands/kata/quick.md +20 -0
  27. package/commands/kata/remove-phase.md +8 -326
  28. package/commands/kata/research-phase.md +10 -170
  29. package/commands/kata/resume-work.md +10 -30
  30. package/commands/kata/set-profile.md +20 -0
  31. package/commands/kata/settings.md +20 -0
  32. package/commands/kata/start-milestone.md +20 -0
  33. package/commands/kata/start-new-milestone.md +20 -0
  34. package/commands/kata/start-project.md +20 -0
  35. package/commands/kata/update-kata.md +20 -0
  36. package/commands/kata/update.md +13 -219
  37. package/commands/kata/verify-work.md +10 -209
  38. package/commands/kata/whats-new.md +13 -117
  39. package/kata/references/checkpoints.md +318 -28
  40. package/kata/references/model-profiles.md +73 -0
  41. package/kata/references/planning-config.md +94 -0
  42. package/kata/references/ui-brand.md +2 -2
  43. package/kata/references/verification-patterns.md +17 -0
  44. package/kata/templates/codebase/architecture.md +2 -2
  45. package/kata/templates/codebase/structure.md +4 -4
  46. package/kata/templates/config.json +9 -0
  47. package/kata/templates/entity.md +173 -0
  48. package/kata/templates/phase-prompt.md +18 -27
  49. package/kata/workflows/complete-milestone.md +11 -0
  50. package/kata/workflows/diagnose-issues.md +12 -1
  51. package/kata/workflows/discovery-phase.md +5 -9
  52. package/kata/workflows/discuss-phase.md +11 -0
  53. package/kata/workflows/execute-phase.md +68 -9
  54. package/kata/workflows/execute-plan.md +47 -4
  55. package/kata/workflows/map-codebase.md +35 -2
  56. package/kata/workflows/resume-project.md +4 -0
  57. package/kata/workflows/verify-phase.md +2 -3
  58. package/kata/workflows/verify-work.md +36 -3
  59. package/package.json +12 -5
  60. package/skills/kata-adding-phases/SKILL.md +209 -0
  61. package/skills/kata-adding-todos/SKILL.md +195 -0
  62. package/skills/kata-auditing-milestones/SKILL.md +279 -0
  63. package/{commands/kata/check-todos.md → skills/kata-checking-todos/SKILL.md} +16 -5
  64. package/skills/kata-completing-milestones/SKILL.md +137 -0
  65. package/skills/kata-configuring-settings/SKILL.md +139 -0
  66. package/skills/kata-debugging/SKILL.md +170 -0
  67. package/skills/kata-discussing-phases/SKILL.md +85 -0
  68. package/skills/kata-executing-phases/SKILL.md +335 -0
  69. package/skills/kata-executing-quick-tasks/SKILL.md +306 -0
  70. package/skills/kata-inserting-phases/SKILL.md +229 -0
  71. package/skills/kata-listing-phase-assumptions/SKILL.md +51 -0
  72. package/skills/kata-mapping-codebases/SKILL.md +70 -0
  73. package/skills/kata-pausing-work/SKILL.md +137 -0
  74. package/skills/kata-planning-milestone-gaps/SKILL.md +295 -0
  75. package/skills/kata-planning-phases/SKILL.md +521 -0
  76. package/skills/kata-providing-help/SKILL.md +495 -0
  77. package/skills/kata-removing-phases/SKILL.md +350 -0
  78. package/skills/kata-researching-phases/SKILL.md +202 -0
  79. package/skills/kata-resuming-work/SKILL.md +41 -0
  80. package/skills/kata-setting-profiles/SKILL.md +109 -0
  81. package/skills/kata-showing-whats-new/SKILL.md +131 -0
  82. package/skills/kata-starting-milestones/SKILL.md +721 -0
  83. package/{commands/kata/new-milestone.md → skills/kata-starting-new-milestones/SKILL.md} +256 -272
  84. package/{commands/kata/new-project.md → skills/kata-starting-projects/SKILL.md} +138 -29
  85. package/skills/kata-tracking-progress/SKILL.md +365 -0
  86. package/skills/kata-updating/SKILL.md +179 -0
  87. package/skills/kata-updating-kata/SKILL.md +179 -0
  88. package/skills/kata-verifying-work/SKILL.md +217 -0
  89. /package/hooks/{statusline.js → kata-statusline.js} +0 -0
package/README.md CHANGED
@@ -2,16 +2,19 @@
2
2
 
3
3
  # KATA
4
4
 
5
- **A meta-prompting, context engineering and spec-driven development system for Claude Code.**
5
+ **型** · /ˈkɑːtɑː/ · *noun*
6
+ <br>
7
+ <sub>a choreographed pattern practiced repeatedly until perfected</sub>
6
8
 
7
- [![npm version](https://img.shields.io/npm/v/@gannonh/kata?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@gannonh/kata)
8
9
  <br>
9
10
 
11
+
12
+ [![npm version](https://img.shields.io/npm/v/@gannonh/kata?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@gannonh/kata)
13
+ <br>
10
14
  ```bash
11
15
  npx @gannonh/kata
12
16
  ```
13
17
 
14
- **Works on Mac, Windows, and Linux.**
15
18
 
16
19
  <br>
17
20
 
@@ -19,7 +22,7 @@ npx @gannonh/kata
19
22
 
20
23
  <br>
21
24
 
22
- **Trusted by engineers at Amazon, Google, Shopify, and Webflow.**
25
+ **Agent orchestration framework for spec-driven development.**
23
26
 
24
27
  </div>
25
28
 
@@ -27,7 +30,7 @@ npx @gannonh/kata
27
30
 
28
31
  ## Who This Is For
29
32
 
30
- Developers who describe what they want and have it built correctly.
33
+ Teams and individuals that want to describe what they want and have it built correctly.
31
34
 
32
35
  ---
33
36
 
@@ -124,6 +127,19 @@ Add this to your project's `.claude/settings.json`:
124
127
 
125
128
  </details>
126
129
 
130
+ ## What is This
131
+
132
+ This project began as a fork of the [GSD system](https://github.com/glittercowboy/get-shit-done), and then quickly became a hard fork. Why hard fork and not contribute to the original project? Because I'm a control freak. Just kidding (kind of). The real reason is two fold, well three, or two and a half.
133
+
134
+ - **Team-oriented by design.** GSD, as its brilliant creator has made very clear, is optimized for solo devs, viewing "enterprise" features as anti-patterns. I love the simplicity of GSD and respect its opinionated position, but the projects I work on are more often than not multi-player. At a minimum, I need:
135
+ - **GitHub integration** — PRs, issues, code review workflows. Planning that connects to where teams actually collaborate.
136
+ - **IDE agnostic** — Not everyone uses Claude Code (I do but I'm not everyone). Kata should work with the tools teams prefer.
137
+
138
+ - **Skills as the foundation.** GSD is primarily built on `/commands`, which are Claude Code-specific. Kata standardizes on **skills** — an emerging open standard supported across major agentic frameworks.
139
+ - This makes Kata portable and future-proof, not locked to a single tool.
140
+ - Skills use progressive discolsure to keep prompts lean and efficient.
141
+ - Skills instantiate with natural language, which is especially convenient when using text-to-speech as your primary input device (you can still invoke with a slash command but it isn't necessary)
142
+
127
143
  ---
128
144
 
129
145
  ## How It Works
@@ -348,49 +364,60 @@ The system adapts.
348
364
 
349
365
  | Command | Function |
350
366
  | ---------------------------- | ------------------------------------------------------------------ |
351
- | `/kata:new-project` | Full initialization: questions → research → requirements → roadmap |
352
- | `/kata:discuss-phase [N]` | Capture implementation decisions before planning |
353
- | `/kata:plan-phase [N]` | Research + plan + verify for a phase |
354
- | `/kata:execute-phase <N>` | Execute all plans in parallel waves, verify when complete |
355
- | `/kata:verify-work [N]` | Manual user acceptance testing ¹ |
356
- | `/kata:complete-milestone` | Archive milestone, tag release |
357
- | `/kata:new-milestone [name]` | Start next version: questions → research → requirements → roadmap |
367
+ | `/kata:project-new` | Full initialization: questions → research → requirements → roadmap |
368
+ | `/kata:phase-discuss [N]` | Capture implementation decisions before planning |
369
+ | `/kata:phase-plan [N]` | Research + plan + verify for a phase |
370
+ | `/kata:phase-execute <N>` | Execute all plans in parallel waves, verify when complete |
371
+ | `/kata:work-verify [N]` | Manual user acceptance testing ¹ |
372
+ | `/kata:milestone-complete` | Archive milestone, tag release |
373
+ | `/kata:milestone-new [name]` | Start next version: questions → research → requirements → roadmap |
358
374
 
359
375
  ### Navigation
360
376
 
361
- | Command | Function |
362
- | ---------------- | --------------------------------- |
363
- | `/kata:progress` | Where am I? What's next? |
364
- | `/kata:help` | Show all commands and usage guide |
377
+ | Command | Function |
378
+ | -------------------- | --------------------------------- |
379
+ | `/kata:project-status` | Where am I? What's next? |
380
+ | `/kata:help` | Show all commands and usage guide |
365
381
 
366
382
  ### Brownfield
367
383
 
368
384
  | Command | Function |
369
385
  | -------------------- | -------------------------------------------- |
370
- | `/kata:map-codebase` | Analyze existing codebase before new-project |
386
+ | `/kata:codebase-map` | Analyze existing codebase before new-project |
371
387
 
372
388
  ### Phase Management
373
389
 
374
- | Command | Function |
375
- | ------------------------ | --------------------------------- |
376
- | `/kata:add-phase` | Append phase to roadmap |
377
- | `/kata:insert-phase [N]` | Insert urgent work between phases |
378
- | `/kata:remove-phase [N]` | Remove future phase, renumber |
390
+ | Command | Function |
391
+ | -------------------------- | --------------------------------- |
392
+ | `/kata:phase-add` | Append phase to roadmap |
393
+ | `/kata:phase-insert [N]` | Insert urgent work between phases |
394
+ | `/kata:phase-remove [N]` | Remove future phase, renumber |
395
+ | `/kata:roadmap-plan-gaps` | Analyze coverage gaps |
396
+
397
+ ### Research & Planning
398
+
399
+ | Command | Function |
400
+ | --------------------------- | ---------------------------------- |
401
+ | `/kata:phase-research [N]` | Research phase domain |
402
+ | `/kata:phase-assumptions [N]` | List phase assumptions |
379
403
 
380
404
  ### Session
381
405
 
382
406
  | Command | Function |
383
407
  | ------------------- | -------------------------------------- |
384
- | `/kata:pause-work` | Create handoff when stopping mid-phase |
385
- | `/kata:resume-work` | Restore from last session |
408
+ | `/kata:work-pause` | Create handoff when stopping mid-phase |
409
+ | `/kata:work-resume` | Restore from last session |
386
410
 
387
411
  ### Utilities
388
412
 
389
413
  | Command | Function |
390
414
  | ----------------------- | ------------------------------------------ |
391
- | `/kata:add-todo [desc]` | Capture idea for later |
392
- | `/kata:check-todos` | List pending todos |
393
- | `/kata:debug [desc]` | Systematic debugging with persistent state |
415
+ | `/kata:todo-add [desc]` | Capture idea for later |
416
+ | `/kata:todo-check` | List pending todos |
417
+ | `/kata:workflow-debug [desc]` | Systematic debugging with persistent state |
418
+ | `/kata:quick [desc]` | Quick task with atomic commit |
419
+ | `/kata:update` | Check for updates |
420
+ | `/kata:whats-new` | Show changelog |
394
421
 
395
422
  <sup>¹ Contributed by reddit user OracleGreyBeard</sup>
396
423
 
@@ -400,7 +427,7 @@ The system adapts.
400
427
 
401
428
  **Commands not found after install?**
402
429
  - Restart Claude Code to reload slash commands
403
- - Verify files exist in `~/.claude/commands/gsd/` (global) or `./.claude/commands/gsd/` (local)
430
+ - Verify files exist in `~/.claude/commands/kata/` (global) or `./.claude/commands/kata/` (local)
404
431
 
405
432
  **Commands not working as expected?**
406
433
  - Run `/kata:help` to verify installation
@@ -979,7 +979,16 @@ mkdir -p .planning/debug/resolved
979
979
  mv .planning/debug/{slug}.md .planning/debug/resolved/
980
980
  ```
981
981
 
982
- Commit:
982
+ **Check planning config:**
983
+
984
+ ```bash
985
+ COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
986
+ git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
987
+ ```
988
+
989
+ **Commit the fix:**
990
+
991
+ If `COMMIT_PLANNING_DOCS=true` (default):
983
992
  ```bash
984
993
  git add -A
985
994
  git commit -m "fix: {brief description}
@@ -988,6 +997,16 @@ Root cause: {root_cause}
988
997
  Debug session: .planning/debug/resolved/{slug}.md"
989
998
  ```
990
999
 
1000
+ If `COMMIT_PLANNING_DOCS=false`:
1001
+ ```bash
1002
+ # Only commit code changes, exclude .planning/
1003
+ git add -A
1004
+ git reset .planning/
1005
+ git commit -m "fix: {brief description}
1006
+
1007
+ Root cause: {root_cause}"
1008
+ ```
1009
+
991
1010
  Report completion and offer next steps.
992
1011
  </step>
993
1012
 
@@ -0,0 +1,237 @@
1
+ ---
2
+ name: kata-entity-generator
3
+ description: Generates semantic entity documentation for codebase files. Spawned by analyze-codebase with file list. Writes entities directly to disk.
4
+ tools: Read, Write, Bash
5
+ color: cyan
6
+ ---
7
+
8
+ <role>
9
+ You are a Kata entity generator. You create semantic documentation for source files that captures PURPOSE (what the code does and why it exists), not just syntax.
10
+
11
+ You are spawned by `/kata:analyze-codebase` with a list of file paths.
12
+
13
+ Your job: Read each file, analyze its purpose, write entity markdown to `.planning/intel/entities/`, return statistics only.
14
+ </role>
15
+
16
+ <why_this_matters>
17
+ **Entities are consumed by the intelligence system:**
18
+
19
+ **PostToolUse hook** syncs each entity to graph.db:
20
+ - Extracts frontmatter (path, type, status)
21
+ - Extracts [[wiki-links]] from Dependencies section
22
+ - Creates nodes and edges in the graph
23
+
24
+ **Query interface** uses entities to answer:
25
+ - "What depends on this file?"
26
+ - "What does this file depend on?"
27
+ - "What are the most connected files?"
28
+
29
+ **Summary generation** aggregates entities into `.planning/intel/summary.md`:
30
+ - Dependency hotspots
31
+ - Module statistics
32
+ - Connection patterns
33
+
34
+ **What this means for your output:**
35
+
36
+ 1. **Frontmatter must be valid YAML** - Hook parses it to create graph nodes
37
+ 2. **[[wiki-links]] must use correct slugs** - Hook extracts these for edges
38
+ 3. **Purpose must be substantive** - "Handles authentication" not "Exports auth functions"
39
+ 4. **Type must match heuristics** - Enables filtering by module type
40
+ </why_this_matters>
41
+
42
+ <process>
43
+
44
+ <step name="parse_file_list">
45
+ Extract file paths from your prompt. You'll receive:
46
+ - Total file count
47
+ - Output directory path
48
+ - Slug convention rules
49
+ - Entity template
50
+ - List of absolute file paths
51
+
52
+ Parse file paths into a list for processing. Track progress counters:
53
+ - files_processed = 0
54
+ - entities_created = 0
55
+ - already_existed = 0
56
+ - errors = 0
57
+ </step>
58
+
59
+ <step name="process_each_file">
60
+ For each file path:
61
+
62
+ 1. **Read file content:**
63
+ Use the Read tool with the absolute file path.
64
+
65
+ 2. **Analyze the file:**
66
+ - What is its purpose? (Why does this file exist? What problem does it solve?)
67
+ - What does it export? (Functions, classes, types, constants)
68
+ - What does it import? (Dependencies and why they're needed)
69
+ - What type of module is it? (Use type heuristics table)
70
+
71
+ 3. **Generate slug:**
72
+ - Remove leading `/`
73
+ - Remove file extension
74
+ - Replace `/` and `.` with `-`
75
+ - Lowercase everything
76
+ - Example: `src/lib/db.ts` -> `src-lib-db`
77
+ - Example: `/Users/foo/project/src/auth/login.ts` -> `users-foo-project-src-auth-login`
78
+ - Use path relative to project root when possible for cleaner slugs
79
+
80
+ 4. **Check if entity exists:**
81
+ ```bash
82
+ ls .planning/intel/entities/{slug}.md 2>/dev/null
83
+ ```
84
+ If exists, increment already_existed and skip to next file.
85
+
86
+ 5. **Build entity content using template:**
87
+ - Frontmatter with path, type, date, status
88
+ - Purpose section (1-3 substantive sentences)
89
+ - Exports section (signatures + descriptions)
90
+ - Dependencies section ([[wiki-links]] for internal, plain text for external)
91
+ - Used By: Always "TBD" (graph analysis fills this later)
92
+ - Notes: Optional (only if important context)
93
+
94
+ 6. **Write entity file:**
95
+ Write to `.planning/intel/entities/{slug}.md`
96
+
97
+ 7. **Track statistics:**
98
+ Increment files_processed and entities_created.
99
+
100
+ 8. **Handle errors:**
101
+ If file can't be read or analyzed, increment errors and continue.
102
+
103
+ **Important:** PostToolUse hook automatically syncs each entity to graph.db after you write it. You don't need to touch the graph.
104
+ </step>
105
+
106
+ <step name="return_statistics">
107
+ After all files processed, return ONLY statistics. Do NOT include entity contents.
108
+
109
+ Format:
110
+ ```
111
+ ## ENTITY GENERATION COMPLETE
112
+
113
+ **Files processed:** {files_processed}
114
+ **Entities created:** {entities_created}
115
+ **Already existed:** {already_existed}
116
+ **Errors:** {errors}
117
+
118
+ Entities written to: .planning/intel/entities/
119
+ ```
120
+
121
+ If errors occurred, list the file paths that failed (not the error messages).
122
+ </step>
123
+
124
+ </process>
125
+
126
+ <entity_template>
127
+ Use this EXACT format for every entity:
128
+
129
+ ```markdown
130
+ ---
131
+ path: {absolute_path}
132
+ type: [module|component|util|config|api|hook|service|model|test]
133
+ updated: {YYYY-MM-DD}
134
+ status: active
135
+ ---
136
+
137
+ # {filename}
138
+
139
+ ## Purpose
140
+
141
+ [1-3 sentences: What does this file do? Why does it exist? What problem does it solve? Focus on the "why", not implementation details.]
142
+
143
+ ## Exports
144
+
145
+ [List each export with signature and purpose:]
146
+ - `functionName(params): ReturnType` - Brief description of what it does
147
+ - `ClassName` - What this class represents
148
+ - `CONSTANT_NAME` - What this constant configures
149
+
150
+ If no exports: "None"
151
+
152
+ ## Dependencies
153
+
154
+ [Internal dependencies use [[wiki-links]], external use plain text:]
155
+ - [[internal-file-slug]] - Why this dependency is needed
156
+ - external-package - What functionality it provides
157
+
158
+ If no dependencies: "None"
159
+
160
+ ## Used By
161
+
162
+ TBD
163
+
164
+ ## Notes
165
+
166
+ [Optional: Patterns, gotchas, important context. Omit section entirely if nothing notable.]
167
+ ```
168
+ </entity_template>
169
+
170
+ <type_heuristics>
171
+ Determine entity type from file path and content:
172
+
173
+ | Type | Indicators |
174
+ |------|-----------|
175
+ | api | In api/, routes/, endpoints/ directory, exports route handlers |
176
+ | component | In components/, exports React/Vue/Svelte components |
177
+ | util | In utils/, lib/, helpers/, exports utility functions |
178
+ | config | In config/, *.config.*, exports configuration objects |
179
+ | hook | In hooks/, exports use* functions (React hooks) |
180
+ | service | In services/, exports service classes/functions |
181
+ | model | In models/, types/, exports data models or TypeScript types |
182
+ | test | *.test.*, *.spec.*, contains test suites |
183
+ | module | Default if unclear, general-purpose module |
184
+ </type_heuristics>
185
+
186
+ <wiki_link_rules>
187
+ **Internal dependencies** (files in the codebase):
188
+ - Convert import path to slug format
189
+ - Wrap in [[double brackets]]
190
+ - Example: Import from `../../lib/db.ts` -> Dependency: `[[src-lib-db]]`
191
+ - Example: Import from `@/services/auth` -> Dependency: `[[src-services-auth]]`
192
+
193
+ **External dependencies** (npm/pip/cargo packages):
194
+ - Plain text, no brackets
195
+ - Include brief purpose
196
+ - Example: `import { z } from 'zod'` -> Dependency: `zod - Schema validation`
197
+
198
+ **Identifying internal vs external:**
199
+ - Import path starts with `.` or `..` -> internal (wiki-link)
200
+ - Import path starts with `@/` or `~/` -> internal (wiki-link, resolve alias)
201
+ - Import path is package name (no path separator) -> external (plain text)
202
+ - Import path starts with `@org/` -> usually external (npm scoped package)
203
+ </wiki_link_rules>
204
+
205
+ <critical_rules>
206
+
207
+ **WRITE ENTITIES DIRECTLY.** Do not return entity contents to orchestrator. The whole point is reducing context transfer.
208
+
209
+ **USE EXACT TEMPLATE FORMAT.** The PostToolUse hook parses frontmatter and [[wiki-links]]. Wrong format = broken graph sync.
210
+
211
+ **FRONTMATTER MUST BE VALID YAML.** No tabs, proper quoting for paths with special characters.
212
+
213
+ **PURPOSE MUST BE SUBSTANTIVE.** Bad: "Exports database functions." Good: "Manages database connection pooling and query execution. Provides transaction support and connection health monitoring."
214
+
215
+ **INTERNAL DEPS USE [[WIKI-LINKS]].** Hook extracts these to create graph edges. Plain text deps don't create edges.
216
+
217
+ **RETURN ONLY STATISTICS.** Your response should be ~10 lines. Just confirm what was written.
218
+
219
+ **DO NOT COMMIT.** The orchestrator handles git operations.
220
+
221
+ **SKIP EXISTING ENTITIES.** Check if entity file exists before writing. Don't overwrite existing entities.
222
+
223
+ </critical_rules>
224
+
225
+ <success_criteria>
226
+ Entity generation complete when:
227
+
228
+ - [ ] All file paths processed
229
+ - [ ] Each new entity written to `.planning/intel/entities/{slug}.md`
230
+ - [ ] Entity markdown follows template exactly
231
+ - [ ] Frontmatter is valid YAML
232
+ - [ ] Purpose section is substantive (not just "exports X")
233
+ - [ ] Internal dependencies use [[wiki-links]]
234
+ - [ ] External dependencies are plain text
235
+ - [ ] Statistics returned (not entity contents)
236
+ - [ ] Existing entities skipped (not overwritten)
237
+ </success_criteria>
@@ -39,8 +39,20 @@ Options:
39
39
  ```
40
40
 
41
41
  **If .planning/ doesn't exist:** Error - project not initialized.
42
+
43
+ **Load planning config:**
44
+
45
+ ```bash
46
+ # Check if planning docs should be committed (default: true)
47
+ COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
48
+ # Auto-detect gitignored (overrides config)
49
+ git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
50
+ ```
51
+
52
+ Store `COMMIT_PLANNING_DOCS` for use in git operations.
42
53
  </step>
43
54
 
55
+
44
56
  <step name="load_plan">
45
57
  Read the plan file provided in your prompt context.
46
58
 
@@ -335,6 +347,21 @@ Type "done" when authenticated.
335
347
  </authentication_gates>
336
348
 
337
349
  <checkpoint_protocol>
350
+
351
+ **CRITICAL: Automation before verification**
352
+
353
+ Before any `checkpoint:human-verify`, ensure verification environment is ready. If plan lacks server startup task before checkpoint, ADD ONE (deviation Rule 3).
354
+
355
+ For full automation-first patterns, server lifecycle, CLI handling, and error recovery:
356
+ **See @~/.claude/kata/references/checkpoints.md**
357
+
358
+ **Quick reference:**
359
+ - Users NEVER run CLI commands - Claude does all automation
360
+ - Users ONLY visit URLs, click UI, evaluate visuals, provide secrets
361
+ - Claude starts servers, seeds databases, configures env vars
362
+
363
+ ---
364
+
338
365
  When encountering `type="checkpoint:*"`:
339
366
 
340
367
  **STOP immediately.** Do not continue to next task.
@@ -692,6 +719,10 @@ Resume file: [path to .continue-here if exists, else "None"]
692
719
  <final_commit>
693
720
  After SUMMARY.md and STATE.md updates:
694
721
 
722
+ **If `COMMIT_PLANNING_DOCS=false`:** Skip git operations for planning files, log "Skipping planning docs commit (commit_docs: false)"
723
+
724
+ **If `COMMIT_PLANNING_DOCS=true` (default):**
725
+
695
726
  **1. Stage execution artifacts:**
696
727
 
697
728
  ```bash
@@ -157,11 +157,11 @@ For finding what exists, community patterns, real-world usage.
157
157
  - "How do people solve Y?"
158
158
  - "Common mistakes with Z"
159
159
 
160
- **Query templates (use current year):**
160
+ **Query templates:**
161
161
  ```
162
162
  Stack discovery:
163
- - "[technology] best practices 2025"
164
- - "[technology] recommended libraries 2025"
163
+ - "[technology] best practices [current year]"
164
+ - "[technology] recommended libraries [current year]"
165
165
 
166
166
  Pattern discovery:
167
167
  - "how to build [type of thing] with [technology]"
@@ -173,7 +173,7 @@ Problem discovery:
173
173
  ```
174
174
 
175
175
  **Best practices:**
176
- - Include current year for freshness
176
+ - Always include the current year (check today's date) for freshness
177
177
  - Use multiple query variations
178
178
  - Cross-verify findings with authoritative sources
179
179
  - Mark WebSearch-only findings as LOW confidence
@@ -450,6 +450,11 @@ PHASE_DIR=$(ls -d .planning/phases/${PADDED_PHASE}-* .planning/phases/${PHASE}-*
450
450
 
451
451
  # Read CONTEXT.md if exists (from /kata:discuss-phase)
452
452
  cat "${PHASE_DIR}"/*-CONTEXT.md 2>/dev/null
453
+
454
+ # Check if planning docs should be committed (default: true)
455
+ COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
456
+ # Auto-detect gitignored (overrides config)
457
+ git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
453
458
  ```
454
459
 
455
460
  **If CONTEXT.md exists**, it contains user decisions that MUST constrain your research:
@@ -526,6 +531,10 @@ Where `PHASE_DIR` is the full path (e.g., `.planning/phases/01-foundation`)
526
531
 
527
532
  ## Step 6: Commit Research
528
533
 
534
+ **If `COMMIT_PLANNING_DOCS=false`:** Skip git operations, log "Skipping planning docs commit (commit_docs: false)"
535
+
536
+ **If `COMMIT_PLANNING_DOCS=true` (default):**
537
+
529
538
  ```bash
530
539
  git add "${PHASE_DIR}/${PADDED_PHASE}-RESEARCH.md"
531
540
  git commit -m "docs(${PHASE}): research phase domain
@@ -953,6 +953,10 @@ After making edits, self-check:
953
953
 
954
954
  ### Step 6: Commit Revised Plans
955
955
 
956
+ **If `COMMIT_PLANNING_DOCS=false`:** Skip git operations, log "Skipping planning docs commit (commit_docs: false)"
957
+
958
+ **If `COMMIT_PLANNING_DOCS=true` (default):**
959
+
956
960
  ```bash
957
961
  git add .planning/phases/${PHASE}-*/${PHASE}-*-PLAN.md
958
962
  git commit -m "fix(${PHASE}): revise plans based on checker feedback"
@@ -998,6 +1002,17 @@ Read `.planning/STATE.md` and parse:
998
1002
  - Blockers/concerns (things this phase may address)
999
1003
 
1000
1004
  If STATE.md missing but .planning/ exists, offer to reconstruct or continue without.
1005
+
1006
+ **Load planning config:**
1007
+
1008
+ ```bash
1009
+ # Check if planning docs should be committed (default: true)
1010
+ COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
1011
+ # Auto-detect gitignored (overrides config)
1012
+ git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
1013
+ ```
1014
+
1015
+ Store `COMMIT_PLANNING_DOCS` for use in git operations.
1001
1016
  </step>
1002
1017
 
1003
1018
  <step name="load_codebase_context">
@@ -1209,6 +1224,10 @@ Update ROADMAP.md to finalize phase placeholders created by add-phase or insert-
1209
1224
  <step name="git_commit">
1210
1225
  Commit phase plan(s) and updated roadmap:
1211
1226
 
1227
+ **If `COMMIT_PLANNING_DOCS=false`:** Skip git operations, log "Skipping planning docs commit (commit_docs: false)"
1228
+
1229
+ **If `COMMIT_PLANNING_DOCS=true` (default):**
1230
+
1212
1231
  ```bash
1213
1232
  git add .planning/phases/${PHASE}-*/${PHASE}-*-PLAN.md .planning/ROADMAP.md
1214
1233
  git commit -m "docs(${PHASE}): create phase plan
@@ -200,12 +200,12 @@ For finding what exists, community patterns, real-world usage.
200
200
  - "Common mistakes with Z"
201
201
  - Ecosystem surveys
202
202
 
203
- **Query templates (use current year):**
203
+ **Query templates:**
204
204
  ```
205
205
  Ecosystem discovery:
206
- - "[technology] best practices 2025"
207
- - "[technology] recommended libraries 2025"
208
- - "[technology] vs [alternative] 2025"
206
+ - "[technology] best practices [current year]"
207
+ - "[technology] recommended libraries [current year]"
208
+ - "[technology] vs [alternative] [current year]"
209
209
 
210
210
  Pattern discovery:
211
211
  - "how to build [type of thing] with [technology]"
@@ -219,7 +219,7 @@ Problem discovery:
219
219
  ```
220
220
 
221
221
  **Best practices:**
222
- - Include current year for freshness
222
+ - Always include the current year (check today's date) for freshness
223
223
  - Use multiple query variations
224
224
  - Cross-verify findings with authoritative sources
225
225
  - Mark WebSearch-only findings as LOW confidence
@@ -48,6 +48,11 @@ cat .planning/research/STACK.md
48
48
  cat .planning/research/FEATURES.md
49
49
  cat .planning/research/ARCHITECTURE.md
50
50
  cat .planning/research/PITFALLS.md
51
+
52
+ # Check if planning docs should be committed (default: true)
53
+ COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
54
+ # Auto-detect gitignored (overrides config)
55
+ git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
51
56
  ```
52
57
 
53
58
  Parse each file to extract:
@@ -125,6 +130,10 @@ Write to `.planning/research/SUMMARY.md`
125
130
 
126
131
  The 4 parallel researcher agents write files but do NOT commit. You commit everything together.
127
132
 
133
+ **If `COMMIT_PLANNING_DOCS=false`:** Skip git operations, log "Skipping planning docs commit (commit_docs: false)"
134
+
135
+ **If `COMMIT_PLANNING_DOCS=true` (default):**
136
+
128
137
  ```bash
129
138
  git add .planning/research/
130
139
  git commit -m "docs: complete project research