aiwcli 0.12.3 → 0.12.7

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 (125) hide show
  1. package/bin/dev.cmd +3 -3
  2. package/bin/dev.js +16 -16
  3. package/bin/run.cmd +3 -3
  4. package/bin/run.js +21 -21
  5. package/dist/commands/branch.js +7 -2
  6. package/dist/lib/bmad-installer.js +37 -37
  7. package/dist/lib/terminal.d.ts +2 -0
  8. package/dist/lib/terminal.js +57 -7
  9. package/dist/templates/CLAUDE.md +205 -205
  10. package/dist/templates/_shared/.claude/commands/handoff-resume.md +12 -64
  11. package/dist/templates/_shared/.claude/commands/handoff.md +12 -198
  12. package/dist/templates/_shared/.claude/settings.json +65 -65
  13. package/dist/templates/_shared/.codex/workflows/handoff.md +226 -226
  14. package/dist/templates/_shared/.windsurf/workflows/handoff.md +226 -226
  15. package/dist/templates/_shared/handoff-system/CLAUDE.md +421 -0
  16. package/dist/templates/_shared/{lib-ts/handoff → handoff-system/lib}/document-generator.ts +215 -216
  17. package/dist/templates/_shared/{lib-ts/handoff → handoff-system/lib}/handoff-reader.ts +157 -158
  18. package/dist/templates/_shared/{scripts → handoff-system/scripts}/resume_handoff.ts +373 -373
  19. package/dist/templates/_shared/{scripts → handoff-system/scripts}/save_handoff.ts +469 -358
  20. package/dist/templates/_shared/handoff-system/workflows/handoff-resume.md +66 -0
  21. package/dist/templates/_shared/{workflows → handoff-system/workflows}/handoff.md +254 -254
  22. package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +2 -2
  23. package/dist/templates/_shared/hooks-ts/archive_plan.ts +159 -159
  24. package/dist/templates/_shared/hooks-ts/context_monitor.ts +147 -147
  25. package/dist/templates/_shared/hooks-ts/file-suggestion.ts +128 -128
  26. package/dist/templates/_shared/hooks-ts/pre_compact.ts +49 -49
  27. package/dist/templates/_shared/hooks-ts/session_end.ts +196 -183
  28. package/dist/templates/_shared/hooks-ts/session_start.ts +163 -151
  29. package/dist/templates/_shared/hooks-ts/task_create_capture.ts +48 -48
  30. package/dist/templates/_shared/hooks-ts/task_update_capture.ts +74 -74
  31. package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +93 -93
  32. package/dist/templates/_shared/lib-ts/CLAUDE.md +367 -367
  33. package/dist/templates/_shared/lib-ts/base/atomic-write.ts +138 -138
  34. package/dist/templates/_shared/lib-ts/base/constants.ts +303 -303
  35. package/dist/templates/_shared/lib-ts/base/git-state.ts +58 -58
  36. package/dist/templates/_shared/lib-ts/base/hook-utils.ts +582 -582
  37. package/dist/templates/_shared/lib-ts/base/inference.ts +301 -301
  38. package/dist/templates/_shared/lib-ts/base/logger.ts +247 -247
  39. package/dist/templates/_shared/lib-ts/base/state-io.ts +202 -130
  40. package/dist/templates/_shared/lib-ts/base/stop-words.ts +184 -184
  41. package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +56 -0
  42. package/dist/templates/_shared/lib-ts/base/utils.ts +184 -184
  43. package/dist/templates/_shared/lib-ts/context/context-formatter.ts +566 -560
  44. package/dist/templates/_shared/lib-ts/context/context-selector.ts +524 -515
  45. package/dist/templates/_shared/lib-ts/context/context-store.ts +712 -668
  46. package/dist/templates/_shared/lib-ts/context/plan-manager.ts +312 -312
  47. package/dist/templates/_shared/lib-ts/context/task-tracker.ts +185 -185
  48. package/dist/templates/_shared/lib-ts/package.json +20 -20
  49. package/dist/templates/_shared/lib-ts/templates/formatters.ts +102 -102
  50. package/dist/templates/_shared/lib-ts/templates/plan-context.ts +58 -58
  51. package/dist/templates/_shared/lib-ts/tsconfig.json +13 -13
  52. package/dist/templates/_shared/lib-ts/types.ts +186 -180
  53. package/dist/templates/_shared/scripts/resolve_context.ts +33 -33
  54. package/dist/templates/_shared/scripts/status_line.ts +690 -690
  55. package/dist/templates/cc-native/.claude/commands/{rlm → cc-native/rlm}/ask.md +136 -136
  56. package/dist/templates/cc-native/.claude/commands/{rlm → cc-native/rlm}/index.md +21 -21
  57. package/dist/templates/cc-native/.claude/commands/{rlm → cc-native/rlm}/overview.md +56 -56
  58. package/dist/templates/cc-native/.claude/commands/cc-native/specdev.md +10 -10
  59. package/dist/templates/cc-native/.windsurf/workflows/cc-native/fix.md +8 -8
  60. package/dist/templates/cc-native/.windsurf/workflows/cc-native/implement.md +8 -8
  61. package/dist/templates/cc-native/.windsurf/workflows/cc-native/research.md +8 -8
  62. package/dist/templates/cc-native/CC-NATIVE-README.md +189 -189
  63. package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +304 -304
  64. package/dist/templates/cc-native/_cc-native/agents/CLAUDE.md +143 -143
  65. package/dist/templates/cc-native/_cc-native/agents/PLAN-ORCHESTRATOR.md +213 -213
  66. package/dist/templates/cc-native/_cc-native/agents/plan-questions/PLAN-QUESTIONER.md +70 -70
  67. package/dist/templates/cc-native/_cc-native/cc-native.config.json +96 -96
  68. package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +247 -247
  69. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +76 -76
  70. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +54 -54
  71. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +51 -51
  72. package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +53 -53
  73. package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +61 -61
  74. package/dist/templates/cc-native/_cc-native/lib-ts/agent-selection.ts +163 -163
  75. package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +156 -156
  76. package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/format.ts +597 -597
  77. package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/index.ts +26 -26
  78. package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/tracker.ts +107 -107
  79. package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/write.ts +119 -119
  80. package/dist/templates/cc-native/_cc-native/lib-ts/artifacts.ts +21 -21
  81. package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +319 -319
  82. package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +144 -144
  83. package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +57 -57
  84. package/dist/templates/cc-native/_cc-native/lib-ts/constants.ts +83 -83
  85. package/dist/templates/cc-native/_cc-native/lib-ts/corroboration.ts +119 -119
  86. package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +79 -79
  87. package/dist/templates/cc-native/_cc-native/lib-ts/graduation.ts +132 -132
  88. package/dist/templates/cc-native/_cc-native/lib-ts/index.ts +116 -116
  89. package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +168 -168
  90. package/dist/templates/cc-native/_cc-native/lib-ts/orchestrator.ts +70 -70
  91. package/dist/templates/cc-native/_cc-native/lib-ts/output-builder.ts +130 -130
  92. package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +80 -80
  93. package/dist/templates/cc-native/_cc-native/lib-ts/plan-enhancement.ts +41 -41
  94. package/dist/templates/cc-native/_cc-native/lib-ts/plan-questions.ts +101 -101
  95. package/dist/templates/cc-native/_cc-native/lib-ts/review-pipeline.ts +511 -511
  96. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/agent.ts +71 -71
  97. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/base/base-agent.ts +217 -217
  98. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/index.ts +12 -12
  99. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/claude-agent.ts +66 -65
  100. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/codex-agent.ts +184 -184
  101. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/gemini-agent.ts +39 -39
  102. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/orchestrator-claude-agent.ts +196 -195
  103. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/schemas.ts +201 -201
  104. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/types.ts +21 -21
  105. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/CLAUDE.md +480 -480
  106. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/embedding-indexer.ts +287 -287
  107. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/hyde.ts +148 -148
  108. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/index.ts +54 -54
  109. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +58 -58
  110. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/ollama-client.ts +208 -208
  111. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +460 -460
  112. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-indexer.ts +446 -447
  113. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-loader.ts +280 -280
  114. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-searcher.ts +274 -274
  115. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +201 -201
  116. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/vector-store.ts +278 -278
  117. package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +184 -184
  118. package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +275 -275
  119. package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +18 -18
  120. package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +329 -329
  121. package/dist/templates/cc-native/_cc-native/lib-ts/verdict.ts +72 -72
  122. package/dist/templates/cc-native/_cc-native/workflows/specdev.md +9 -9
  123. package/oclif.manifest.json +1 -1
  124. package/package.json +108 -108
  125. package/dist/templates/cc-native/_cc-native/lib-ts/nul +0 -3
@@ -0,0 +1,66 @@
1
+ # Resume Handoff Workflow
2
+
3
+ ## Purpose
4
+
5
+ Restore session context from a handoff document programmatically, then create actionable ISC tasks so work continues without re-discovering what was already learned.
6
+
7
+ ## Arguments
8
+
9
+ - `$ARGUMENTS` - Optional path to a handoff folder or index.md. If omitted, auto-discovers the most recent handoff from the active context.
10
+
11
+ ## Process
12
+
13
+ ### Step 1: Gather Context via Script
14
+
15
+ Run the resume script to collect and format all handoff sections:
16
+
17
+ **If `$ARGUMENTS` is provided:**
18
+ ```bash
19
+ bun .aiwcli/_shared/handoff-system/scripts/resume_handoff.ts "$ARGUMENTS"
20
+ ```
21
+
22
+ **If `$ARGUMENTS` is empty:**
23
+ The script auto-discovers the active context ID programmatically — no manual lookup needed:
24
+ ```bash
25
+ bun .aiwcli/_shared/handoff-system/scripts/resume_handoff.ts
26
+ ```
27
+
28
+ Present the script's output to the conversation. The output is already structured in priority order (dead ends first, then pending items, decisions, git delta, completed work, context notes).
29
+
30
+ If the script exits with an error, show the error message and stop.
31
+
32
+ ### Step 2: Create ISC Tasks
33
+
34
+ Convert each actionable item from the script output into a task via `TaskCreate`:
35
+ - Each pending issue from the **Pending Items** section
36
+ - Each remaining plan item from the **Plan — Remaining Items** section
37
+
38
+ Each task follows ISC format — ~8 words, states a desired end-state (not an action), and is binary testable in 2 seconds.
39
+
40
+ **Example:**
41
+
42
+ | Source | ISC Task |
43
+ |--------|----------|
44
+ | Pending: "Fix race condition in SessionStore" | "SessionStore handles concurrent access without race conditions" |
45
+ | Plan remaining: "Add retry logic to API client" | "API client retries failed requests with exponential backoff" |
46
+ | Next step: "Write tests for auth flow" | "Auth flow has passing integration test coverage" |
47
+
48
+ ### Step 3: Confirm Ready
49
+
50
+ After creating tasks, run `TaskList` and confirm ready to continue.
51
+
52
+ ## Constraints
53
+
54
+ - Dead ends are presented verbatim from the script output — never summarize or omit entries
55
+ - ISC tasks use ~8-word end-state format, not action descriptions
56
+ - Skip missing files gracefully (the script handles this)
57
+ - If the script warns about staleness (>7 days), surface the warning prominently
58
+
59
+ ## Success Criteria
60
+
61
+ - [ ] Script ran successfully and output the structured briefing
62
+ - [ ] Dead ends visible in conversation (not summarized)
63
+ - [ ] Pending items converted to ISC tasks via TaskCreate
64
+ - [ ] Plan completion percentage visible (if plan exists)
65
+ - [ ] Git delta visible
66
+ - [ ] Tasks confirmed via TaskList
@@ -1,254 +1,254 @@
1
- # Handoff Workflow
2
-
3
- Generate a handoff document summarizing the current session's work, decisions, and pending items. Optionally update a plan document to track completed vs remaining tasks.
4
-
5
- ## Triggers
6
-
7
- - `/handoff` command
8
- - `/handoff path/to/PLAN.md` - with plan document integration
9
- - Phrases like "write a handoff", "create a session summary", "document what we did", "end session with notes"
10
-
11
- ## Arguments
12
-
13
- - `$ARGUMENTS` - Optional path to a plan document. If provided, the handoff will:
14
- 1. Mark completed items in the plan with `[x]`
15
- 2. Add notes about partial progress
16
- 3. Append a "Session Progress" section to the plan
17
-
18
- ## Process
19
-
20
- ### Step 1: Get Context ID
21
-
22
- Extract the `context_id` from the system reminder injected by the user_prompt_submit hook.
23
-
24
- Look for the pattern in the system reminder:
25
- ```
26
- Active Context: {context_id}
27
- ```
28
-
29
- If no active context is found, inform the user and stop - handoffs require an active context.
30
-
31
- ### Step 2: Gather Information
32
-
33
- 1. Review conversation history for:
34
- - Completed tasks and implementations
35
- - Key decisions and their rationale
36
- - Failed approaches (to avoid repeating)
37
- - External context (deadlines, stakeholder requirements)
38
-
39
- 2. Check git status if available:
40
- ```bash
41
- git status --short
42
- git diff --stat
43
- ```
44
-
45
- 3. Look for TODOs/FIXMEs mentioned in session
46
-
47
- 4. **If plan document provided**: Read the plan and identify:
48
- - Tasks that are now completed
49
- - Tasks that are partially done
50
- - Tasks that were attempted but blocked
51
- - New tasks discovered during implementation
52
-
53
- ### Step 3: Generate Document
54
-
55
- Use this template. The `<!-- SECTION: name -->` markers are required for the save script to parse sections into sharded files.
56
-
57
- ```markdown
58
- ---
59
- title: Session Handoff
60
- date: {ISO timestamp}
61
- session_id: {conversation ID if available}
62
- project: {project name from package.json, Cargo.toml, or directory name}
63
- context_id: {context_id from Step 1}
64
- plan_document: {path to plan if provided, or "none"}
65
- ---
66
-
67
- # Session Handoff — {Date}
68
-
69
- <!-- SECTION: summary -->
70
- ## Summary
71
- {2-3 sentences: what's different now vs. session start}
72
-
73
- <!-- SECTION: completed -->
74
- ## Work Completed
75
- {Grouped by category if multiple areas. Specific file:function references.}
76
-
77
- <!-- SECTION: dead-ends -->
78
- ## Dead Ends — Do Not Retry
79
-
80
- These approaches were attempted and failed. Do not retry without addressing the root cause.
81
-
82
- | Approach | Why It Failed | Time Spent | Alternative |
83
- |----------|---------------|------------|-------------|
84
- | {What was attempted} | {Specific reason} | {Rough estimate} | {What to try instead} |
85
-
86
- <!-- SECTION: decisions -->
87
- ## Key Decisions
88
- {Technical choices with rationale. Format: **Decision**: Rationale. Trade-off: X.}
89
-
90
- <!-- SECTION: pending -->
91
- ## Pending Issues
92
- - [ ] {Issue} — {severity: HIGH/MED/LOW} {optional workaround note}
93
-
94
- <!-- SECTION: next-steps -->
95
- ## Next Steps
96
- 1. {Actionable item with file:line reference if applicable}
97
-
98
- <!-- SECTION: files -->
99
- ## Files Modified
100
- {Significant changes only. Skip formatting-only edits.}
101
-
102
- <!-- SECTION: context -->
103
- ## Context for Future Sessions
104
- {Non-obvious context: env quirks, stakeholder requirements}
105
-
106
- ```
107
-
108
- ### Step 4: Update Plan Document (if provided)
109
-
110
- If a plan document path was provided in `$ARGUMENTS`:
111
-
112
- 1. **Read the plan document**
113
- 2. **Identify completed items**:
114
- - Find checkboxes `- [ ]` that match completed work
115
- - Change them to `- [x]`
116
- 3. **Add progress notes** to items that are partially complete:
117
- - Append `(partial: {brief status})` to the line
118
- 4. **Append Session Progress section** at the bottom:
119
-
120
- ```markdown
121
-
122
- ---
123
-
124
- ## Session Progress Log
125
-
126
- ### {Date} — Session {session_id or timestamp}
127
-
128
- **Completed this session:**
129
- - [x] {Task from plan that was completed}
130
- - [x] {Another completed task}
131
-
132
- **Partially completed:**
133
- - {Task} — {current state, what remains}
134
-
135
- **Blocked/Deferred:**
136
- - {Task} — {reason, what's needed}
137
-
138
- **New items discovered:**
139
- - [ ] {New task not in original plan}
140
- - [ ] {Another new task}
141
-
142
- ---
143
- ```
144
-
145
- 5. **If no plan document was provided**:
146
- - Skip plan creation - the handoff document serves as the session record
147
-
148
- ### Step 5: Save and Update Status
149
-
150
- **⚠️ CRITICAL: Heredoc EOF Delimiter Placement**
151
-
152
- The closing `EOF` delimiter **MUST** be at column 0 (no leading spaces or tabs). Even a single space will cause bash to report: `unexpected EOF while looking for matching \`''`
153
-
154
- **Correct Example:**
155
- ```bash
156
- bun .aiwcli/_shared/scripts/save_handoff.ts <<'EOF'
157
- content here
158
- EOF
159
- ```
160
- ← Notice: EOF is flush left at column 0
161
-
162
- **Wrong Example (will fail):**
163
- ```bash
164
- bun .aiwcli/_shared/scripts/save_handoff.ts <<'EOF'
165
- content here
166
- EOF
167
- ```
168
- ← This FAILS: EOF has leading spaces
169
-
170
- ---
171
-
172
- Instead of writing the file directly, pipe your handoff content to the save script:
173
-
174
- ```bash
175
- bun .aiwcli/_shared/scripts/save_handoff.ts <<'EOF'
176
- {Your complete handoff markdown content from Step 3}
177
- EOF
178
- ```
179
-
180
- This script:
181
- 1. Auto-resolves the active context ID
182
- 2. Creates a folder at `_output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/`
183
- 3. Parses sections and writes sharded files (index.md, completed-work.md, dead-ends.md, etc.)
184
- 4. Copies the current plan (if any) to plan.md
185
- 5. Sets `handoff_path` and `handoff_consumed=false` in state.json
186
-
187
- **After handoff is saved, the context becomes dormant:**
188
- - It will **not** auto-select when starting new sessions — new work gets a fresh context
189
- - It remains visible in the context picker (`^`) with a `[Handoff Ready]` label
190
- - To resume, use `^N` (where N is the context number) to explicitly select it
191
- - When selected via `^N`, the handoff content is automatically injected into the session
192
- - The `handoff_path` is cleared after injection to prevent re-injection
193
-
194
- ## Dead Ends Section Guidelines
195
-
196
- This section is critical for preventing context rot across sessions. Be specific:
197
-
198
- **Bad (too vague):**
199
- > - Tried using library X, didn't work
200
-
201
- **Good (actionable):**
202
- > ### Fixing the race condition in SessionStore
203
- > | Approach Tried | Why It Failed |
204
- > |----------------|---------------|
205
- > | `async-mutex` package | Deadlock when nested calls to `getSession()` |
206
- > | Redis WATCH/MULTI | Our Redis 6.x cluster doesn't support WATCH in cluster mode |
207
- > | In-memory lock Map | Works single-node but breaks in horizontal scaling |
208
- >
209
- > **What to try instead**: Upgrade to Redis 7.x which supports WATCH in cluster mode, or use Redlock algorithm
210
-
211
- **Capture these dead ends:**
212
- - Packages/libraries that had incompatibilities
213
- - Approaches that caused new bugs or regressions
214
- - Solutions that worked locally but failed in CI/staging/prod
215
- - Configurations that conflicted with existing setup
216
- - Rabbit holes that consumed significant time without progress
217
-
218
- ## Post-Generation Output
219
-
220
- After creating file, output:
221
-
222
- ```
223
- ✓ Created handoff folder: _output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/
224
- - index.md (entry point with navigation)
225
- - completed-work.md, dead-ends.md, decisions.md, pending.md, context.md
226
- - plan.md (copy of current plan, if any)
227
-
228
- To continue next session:
229
- The index.md will be automatically suggested when you start a new session.
230
- Read dead-ends.md first to avoid repeating failed approaches.
231
-
232
- ⚠️ {N} dead ends documented — avoid re-attempting these approaches
233
- ```
234
-
235
- If plan was updated:
236
- ```
237
- ✓ Updated plan document: {path}
238
- - {N} items marked complete
239
- - {N} items partially complete
240
- - {N} new items added
241
- ```
242
-
243
- ## Success Criteria
244
-
245
- - [ ] Handoff folder created at `handoffs/{YYYY-MM-DD-HHMM}/`
246
- - [ ] index.md contains summary and navigation table
247
- - [ ] All section files created (completed-work.md, dead-ends.md, etc.)
248
- - [ ] Dead ends use structured table format for quick scanning
249
- - [ ] plan.md copied from context if plan exists
250
- - [ ] Next steps are actionable with file references
251
- - [ ] Git status included in index.md
252
- - [ ] If plan provided: checkboxes updated to reflect completion status
253
- - [ ] If plan provided: Session Progress Log appended
254
- - [ ] Context state updated to indicate handoff pending
1
+ # Handoff Workflow
2
+
3
+ Generate a handoff document summarizing the current session's work, decisions, and pending items. Optionally update a plan document to track completed vs remaining tasks.
4
+
5
+ ## Triggers
6
+
7
+ - `/handoff` command
8
+ - `/handoff path/to/PLAN.md` - with plan document integration
9
+ - Phrases like "write a handoff", "create a session summary", "document what we did", "end session with notes"
10
+
11
+ ## Arguments
12
+
13
+ - `$ARGUMENTS` - Optional path to a plan document. If provided, the handoff will:
14
+ 1. Mark completed items in the plan with `[x]`
15
+ 2. Add notes about partial progress
16
+ 3. Append a "Session Progress" section to the plan
17
+
18
+ ## Process
19
+
20
+ ### Step 1: Get Context ID
21
+
22
+ Extract the `context_id` from the system reminder injected by the context enforcer hook.
23
+
24
+ Look for the pattern in the system reminder:
25
+ ```
26
+ Active Context: {context_id}
27
+ ```
28
+
29
+ If no active context is found, inform the user and stop - handoffs require an active context.
30
+
31
+ ### Step 2: Gather Information
32
+
33
+ 1. Review conversation history for:
34
+ - Completed tasks and implementations
35
+ - Key decisions and their rationale
36
+ - Failed approaches (to avoid repeating)
37
+ - External context (deadlines, stakeholder requirements)
38
+
39
+ 2. Check git status if available:
40
+ ```bash
41
+ git status --short
42
+ git diff --stat
43
+ ```
44
+
45
+ 3. Look for TODOs/FIXMEs mentioned in session
46
+
47
+ 4. **If plan document provided**: Read the plan and identify:
48
+ - Tasks that are now completed
49
+ - Tasks that are partially done
50
+ - Tasks that were attempted but blocked
51
+ - New tasks discovered during implementation
52
+
53
+ ### Step 3: Generate Document
54
+
55
+ Use this template. The `<!-- SECTION: name -->` markers are required for the save script to parse sections into sharded files.
56
+
57
+ ```markdown
58
+ ---
59
+ title: Session Handoff
60
+ date: {ISO timestamp}
61
+ session_id: $CLAUDE_SESSION_ID
62
+ context_id: {context_id from Step 1}
63
+ project: {project name from package.json, Cargo.toml, or directory name}
64
+ plan_document: {path to plan if provided, or "none"}
65
+ ---
66
+
67
+ # Session Handoff — {Date}
68
+
69
+ <!-- SECTION: summary -->
70
+ ## Summary
71
+ {2-3 sentences: what's different now vs. session start}
72
+
73
+ <!-- SECTION: completed -->
74
+ ## Work Completed
75
+ {Grouped by category if multiple areas. Specific file:function references.}
76
+
77
+ <!-- SECTION: dead-ends -->
78
+ ## Dead Ends — Do Not Retry
79
+
80
+ These approaches were attempted and failed. Do not retry without addressing the root cause.
81
+
82
+ | Approach | Why It Failed | Time Spent | Alternative |
83
+ |----------|---------------|------------|-------------|
84
+ | {What was attempted} | {Specific reason} | {Rough estimate} | {What to try instead} |
85
+
86
+ <!-- SECTION: decisions -->
87
+ ## Key Decisions
88
+ {Technical choices with rationale. Format: **Decision**: Rationale. Trade-off: X.}
89
+
90
+ <!-- SECTION: pending -->
91
+ ## Pending Issues
92
+ - [ ] {Issue} — {severity: HIGH/MED/LOW} {optional workaround note}
93
+
94
+ <!-- SECTION: next-steps -->
95
+ ## Next Steps
96
+ 1. {Actionable item with file:line reference if applicable}
97
+
98
+ <!-- SECTION: files -->
99
+ ## Files Modified
100
+ {Significant changes only. Skip formatting-only edits.}
101
+
102
+ <!-- SECTION: context -->
103
+ ## Context for Future Sessions
104
+ {Non-obvious context: env quirks, stakeholder requirements}
105
+
106
+ ```
107
+
108
+ ### Step 4: Update Plan Document (if provided)
109
+
110
+ If a plan document path was provided in `$ARGUMENTS`:
111
+
112
+ 1. **Read the plan document**
113
+ 2. **Identify completed items**:
114
+ - Find checkboxes `- [ ]` that match completed work
115
+ - Change them to `- [x]`
116
+ 3. **Add progress notes** to items that are partially complete:
117
+ - Append `(partial: {brief status})` to the line
118
+ 4. **Append Session Progress section** at the bottom:
119
+
120
+ ```markdown
121
+
122
+ ---
123
+
124
+ ## Session Progress Log
125
+
126
+ ### {Date} — Session {session_id or timestamp}
127
+
128
+ **Completed this session:**
129
+ - [x] {Task from plan that was completed}
130
+ - [x] {Another completed task}
131
+
132
+ **Partially completed:**
133
+ - {Task} — {current state, what remains}
134
+
135
+ **Blocked/Deferred:**
136
+ - {Task} — {reason, what's needed}
137
+
138
+ **New items discovered:**
139
+ - [ ] {New task not in original plan}
140
+ - [ ] {Another new task}
141
+
142
+ ---
143
+ ```
144
+
145
+ 5. **If no plan document was provided**:
146
+ - Skip plan creation - the handoff document serves as the session record
147
+
148
+ ### Step 5: Save and Update Status
149
+
150
+ **⚠️ CRITICAL: Heredoc EOF Delimiter Placement**
151
+
152
+ The closing `EOF` delimiter **MUST** be at column 0 (no leading spaces or tabs). Even a single space will cause bash to report: `unexpected EOF while looking for matching \`''`
153
+
154
+ **Correct Example:**
155
+ ```bash
156
+ bun .aiwcli/_shared/handoff-system/scripts/save_handoff.ts <<'EOF'
157
+ content here
158
+ EOF
159
+ ```
160
+ ← Notice: EOF is flush left at column 0
161
+
162
+ **Wrong Example (will fail):**
163
+ ```bash
164
+ bun .aiwcli/_shared/handoff-system/scripts/save_handoff.ts <<'EOF'
165
+ content here
166
+ EOF
167
+ ```
168
+ ← This FAILS: EOF has leading spaces
169
+
170
+ ---
171
+
172
+ Instead of writing the file directly, pipe your handoff content to the save script:
173
+
174
+ ```bash
175
+ bun .aiwcli/_shared/handoff-system/scripts/save_handoff.ts <<'EOF'
176
+ {Your complete handoff markdown content from Step 3}
177
+ EOF
178
+ ```
179
+
180
+ This script:
181
+ 1. Auto-resolves the active context ID
182
+ 2. Creates a folder at `_output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/`
183
+ 3. Parses sections and writes sharded files (index.md, completed-work.md, dead-ends.md, etc.)
184
+ 4. Copies the current plan (if any) to plan.md
185
+ 5. Sets `handoff_path` and `handoff_consumed=false` in state.json
186
+
187
+ **After handoff is saved, the context becomes dormant:**
188
+ - It will **not** auto-select when starting new sessions — new work gets a fresh context
189
+ - It remains visible in the context picker (`^`) with a `[Handoff Ready]` label
190
+ - To resume, use `^N` (where N is the context number) to explicitly select it
191
+ - When selected via `^N`, the handoff content is automatically injected into the session
192
+ - The `handoff_path` is cleared after injection to prevent re-injection
193
+
194
+ ## Dead Ends Section Guidelines
195
+
196
+ This section is critical for preventing context rot across sessions. Be specific:
197
+
198
+ **Bad (too vague):**
199
+ > - Tried using library X, didn't work
200
+
201
+ **Good (actionable):**
202
+ > ### Fixing the race condition in SessionStore
203
+ > | Approach Tried | Why It Failed |
204
+ > |----------------|---------------|
205
+ > | `async-mutex` package | Deadlock when nested calls to `getSession()` |
206
+ > | Redis WATCH/MULTI | Our Redis 6.x cluster doesn't support WATCH in cluster mode |
207
+ > | In-memory lock Map | Works single-node but breaks in horizontal scaling |
208
+ >
209
+ > **What to try instead**: Upgrade to Redis 7.x which supports WATCH in cluster mode, or use Redlock algorithm
210
+
211
+ **Capture these dead ends:**
212
+ - Packages/libraries that had incompatibilities
213
+ - Approaches that caused new bugs or regressions
214
+ - Solutions that worked locally but failed in CI/staging/prod
215
+ - Configurations that conflicted with existing setup
216
+ - Rabbit holes that consumed significant time without progress
217
+
218
+ ## Post-Generation Output
219
+
220
+ After creating file, output:
221
+
222
+ ```
223
+ ✓ Created handoff folder: _output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/
224
+ - index.md (entry point with navigation)
225
+ - completed-work.md, dead-ends.md, decisions.md, pending.md, context.md
226
+ - plan.md (copy of current plan, if any)
227
+
228
+ To continue next session:
229
+ The index.md will be automatically suggested when you start a new session.
230
+ Read dead-ends.md first to avoid repeating failed approaches.
231
+
232
+ ⚠️ {N} dead ends documented — avoid re-attempting these approaches
233
+ ```
234
+
235
+ If plan was updated:
236
+ ```
237
+ ✓ Updated plan document: {path}
238
+ - {N} items marked complete
239
+ - {N} items partially complete
240
+ - {N} new items added
241
+ ```
242
+
243
+ ## Success Criteria
244
+
245
+ - [ ] Handoff folder created at `handoffs/{YYYY-MM-DD-HHMM}/`
246
+ - [ ] index.md contains summary and navigation table
247
+ - [ ] All section files created (completed-work.md, dead-ends.md, etc.)
248
+ - [ ] Dead ends use structured table format for quick scanning
249
+ - [ ] plan.md copied from context if plan exists
250
+ - [ ] Next steps are actionable with file references
251
+ - [ ] Git status included in index.md
252
+ - [ ] If plan provided: checkboxes updated to reflect completion status
253
+ - [ ] If plan provided: Session Progress Log appended
254
+ - [ ] Context state updated to indicate handoff pending
@@ -1,2 +1,2 @@
1
- // Re-export from shared library — canonical location is lib-ts/base/git-state.ts
2
- export { getGitState } from "../../lib-ts/base/git-state.js";
1
+ // Re-export from shared library — canonical location is lib-ts/base/git-state.ts
2
+ export { getGitState } from "../../lib-ts/base/git-state.js";