aiwcli 0.9.0 → 0.9.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 (28) hide show
  1. package/README.md +19 -35
  2. package/dist/lib/template-installer.js +38 -0
  3. package/dist/templates/_shared/.claude/commands/handoff.md +219 -7
  4. package/dist/templates/_shared/.codex/workflows/handoff.md +219 -7
  5. package/dist/templates/_shared/.windsurf/workflows/handoff.md +219 -7
  6. package/dist/templates/_shared/hooks/context_enforcer.py +9 -5
  7. package/dist/templates/_shared/hooks/context_monitor.py +28 -10
  8. package/dist/templates/_shared/hooks/file-suggestion.py +45 -15
  9. package/dist/templates/_shared/hooks/user_prompt_submit.py +0 -10
  10. package/dist/templates/_shared/lib/base/constants.py +45 -0
  11. package/dist/templates/_shared/lib/base/inference.py +44 -21
  12. package/dist/templates/_shared/lib/base/subprocess_utils.py +46 -0
  13. package/dist/templates/_shared/lib/base/utils.py +5 -3
  14. package/dist/templates/_shared/lib/context/__init__.py +0 -8
  15. package/dist/templates/_shared/lib/context/cache.py +2 -4
  16. package/dist/templates/_shared/lib/context/context_manager.py +1 -118
  17. package/dist/templates/_shared/lib/context/discovery.py +8 -50
  18. package/dist/templates/_shared/lib/handoff/document_generator.py +2 -5
  19. package/dist/templates/_shared/lib/templates/README.md +0 -1
  20. package/dist/templates/_shared/lib/templates/formatters.py +0 -1
  21. package/dist/templates/_shared/scripts/save_handoff.py +289 -43
  22. package/dist/templates/_shared/workflows/handoff.md +30 -16
  23. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.py +41 -20
  24. package/dist/templates/cc-native/_cc-native/lib/orchestrator.py +9 -0
  25. package/dist/templates/cc-native/_cc-native/lib/reviewers/agent.py +9 -0
  26. package/dist/templates/cc-native/_cc-native/lib/utils.py +123 -10
  27. package/oclif.manifest.json +1 -1
  28. package/package.json +1 -1
package/README.md CHANGED
@@ -10,45 +10,28 @@ Command-line interface for launching and managing Claude Code with AI Workflow (
10
10
 
11
11
  ## Installation
12
12
 
13
- ### Install Globally (Recommended)
13
+ ### Install from npm (Recommended)
14
14
 
15
15
  ```bash
16
- # Navigate to the aiwcli directory
17
- cd ~/.aiw/aiwcli # or C:\Users\YOUR_USERNAME\.aiw\aiwcli on Windows
16
+ # Install globally from npm
17
+ npm install -g aiwcli
18
18
 
19
- # Install dependencies
20
- npm install
21
-
22
- # Build the CLI
23
- npm run build
24
-
25
- # Install globally
26
- npm install -g .
27
- ```
28
-
29
- **Verify installation:**
30
-
31
- ```bash
19
+ # Verify installation
32
20
  aiw --version
33
21
  aiw --help
34
22
  ```
35
23
 
36
- ### Run Without Global Install
24
+ ### What's Included
37
25
 
38
- If you prefer not to install globally, you can run commands directly from the aiwcli directory:
26
+ aiwcli v0.9.0 includes:
39
27
 
40
- ```bash
41
- cd ~/.aiw/aiwcli
42
- ./bin/run.js <command> # Unix/Mac
43
- .\bin\run.cmd <command> # Windows
44
- ```
45
-
46
- **Example:**
28
+ - **CLI Commands**: `launch`, `init`, `branch`, `clean`, `clear`
29
+ - **Templates**:
30
+ - **cc-native** - Event-sourced context management with plan review, 25+ specialized agents
31
+ - **_shared** - Common utilities (context manager, event logging, task sync)
32
+ - **IDE Support**: Claude Code, Windsurf, Codex
47
33
 
48
- ```bash
49
- ./bin/run.js launch # Unix/Mac
50
- .\bin\run.cmd launch # Windows
51
- ```
34
+ After installation, run `aiw init --method cc-native` to set up the template in your project.
52
35
 
53
36
  ## Commands
54
37
 
@@ -67,9 +50,10 @@ aiw launch --quiet # Suppress informational output
67
50
  Initialize AIW tools and integrations with specified template method.
68
51
 
69
52
  ```bash
70
- aiw init --interactive # Run interactive setup wizard
71
- aiw init --method bmad # Initialize BMAD template
72
- aiw init --method gsd # Initialize GSD template
53
+ aiw init --interactive # Run interactive setup wizard
54
+ aiw init --method cc-native # Initialize CC-Native template
55
+ aiw init --method cc-native --ide windsurf # Install for Windsurf
56
+ aiw init --method cc-native --ide claude --ide windsurf # Install for both IDEs
73
57
  ```
74
58
 
75
59
  ### `aiw branch <branchName>`
@@ -1026,7 +1010,7 @@ AIW CLI uses [Oclif](https://oclif.io) which provides automatic command registra
1026
1010
 
1027
1011
  - **File path = Command name**: `src/commands/launch.ts` → `aiw launch`
1028
1012
  - **Subdirectories = Topics**: `src/commands/init/index.ts` → `aiw init`
1029
- - **Class names**: PascalCase version of command name (`Launch`, `InitBmad`)
1013
+ - **Class names**: PascalCase version of command name (`Launch`, `Init`)
1030
1014
 
1031
1015
  ### Adding a New Top-Level Command
1032
1016
 
@@ -1119,8 +1103,8 @@ static override flags = {
1119
1103
 
1120
1104
  | Element | Convention | Example |
1121
1105
  |---------|------------|---------|
1122
- | Command files | kebab-case | `launch.ts`, `init/bmad.ts` |
1123
- | Command classes | PascalCase | `Launch`, `InitBmad` |
1106
+ | Command files | kebab-case | `launch.ts`, `init/index.ts` |
1107
+ | Command classes | PascalCase | `Launch`, `Init` |
1124
1108
  | Flags | camelCase | `debug`, `aiwDir`, `quiet` |
1125
1109
  | Constants | UPPER_SNAKE_CASE | `EXIT_CODES.SUCCESS` |
1126
1110
 
@@ -197,6 +197,32 @@ function shouldExclude(name) {
197
197
  return pattern.test(name);
198
198
  });
199
199
  }
200
+ /**
201
+ * Merge source directory into destination, skipping existing files.
202
+ * Unlike copyDir, this preserves existing files in destination.
203
+ *
204
+ * @param src - Source directory path
205
+ * @param dest - Destination directory path
206
+ */
207
+ async function mergeDirectory(src, dest) {
208
+ await fs.mkdir(dest, { recursive: true });
209
+ const entries = await fs.readdir(src, { withFileTypes: true });
210
+ for (const entry of entries) {
211
+ if (shouldExclude(entry.name))
212
+ continue;
213
+ const srcPath = join(src, entry.name);
214
+ const destPath = join(dest, entry.name);
215
+ if (entry.isDirectory()) {
216
+ await mergeDirectory(srcPath, destPath);
217
+ }
218
+ else {
219
+ // Skip if file already exists
220
+ if (!(await pathExists(destPath))) {
221
+ await fs.copyFile(srcPath, destPath);
222
+ }
223
+ }
224
+ }
225
+ }
200
226
  /**
201
227
  * Copy directory recursively with proper error handling.
202
228
  * Excludes test files, cache directories, and output folders.
@@ -321,6 +347,18 @@ export async function installTemplate(config, skipExisting = true) {
321
347
  await copyDir(rootSharedSrc, rootSharedDest, true); // excludeIdeFolders = true
322
348
  installedFolders.push('_shared');
323
349
  }
350
+ // Merge shared IDE folders (commands, workflows) into project IDE folders
351
+ // This handles _shared/.claude/, _shared/.windsurf/, etc.
352
+ const sharedIdeInstalls = ides.map(async (ide) => {
353
+ const sharedIdeFolder = join(rootSharedSrc, `.${ide}`);
354
+ if (await pathExists(sharedIdeFolder)) {
355
+ const destIdeFolder = resolver.getIdeDir(ide);
356
+ await fs.mkdir(destIdeFolder, { recursive: true });
357
+ // Recursively copy, but skip files that already exist
358
+ await mergeDirectory(sharedIdeFolder, destIdeFolder);
359
+ }
360
+ });
361
+ await Promise.all(sharedIdeInstalls);
324
362
  }
325
363
  // Install matching IDE folders
326
364
  // If folder exists, merge content recursively by looking for method name folders
@@ -1,14 +1,226 @@
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
1
58
  ---
2
- description: Generate a session handoff document when ending work
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"}
3
65
  ---
4
- # Session Handoff
5
66
 
6
- Generate a handoff document summarizing the current session's work, decisions, and pending items.
67
+ # Session Handoff {Date}
7
68
 
8
- ## Arguments
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
+ Instead of writing the file directly, pipe your handoff content to the save script:
151
+
152
+ ```bash
153
+ python .aiwcli/_shared/scripts/save_handoff.py "{context_id}" <<'EOF'
154
+ {Your complete handoff markdown content from Step 3}
155
+ EOF
156
+ ```
157
+
158
+ This script:
159
+ 1. Creates a folder at `_output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/`
160
+ 2. Parses sections and writes sharded files (index.md, completed-work.md, dead-ends.md, etc.)
161
+ 3. Copies the current plan (if any) to plan.md
162
+ 4. Records the event in the context's event log (informational only)
163
+
164
+ Use the handoff folder for context in the next session.
165
+
166
+ ## Dead Ends Section Guidelines
167
+
168
+ This section is critical for preventing context rot across sessions. Be specific:
169
+
170
+ **Bad (too vague):**
171
+ > - Tried using library X, didn't work
172
+
173
+ **Good (actionable):**
174
+ > ### Fixing the race condition in SessionStore
175
+ > | Approach Tried | Why It Failed |
176
+ > |----------------|---------------|
177
+ > | `async-mutex` package | Deadlock when nested calls to `getSession()` |
178
+ > | Redis WATCH/MULTI | Our Redis 6.x cluster doesn't support WATCH in cluster mode |
179
+ > | In-memory lock Map | Works single-node but breaks in horizontal scaling |
180
+ >
181
+ > **What to try instead**: Upgrade to Redis 7.x which supports WATCH in cluster mode, or use Redlock algorithm
182
+
183
+ **Capture these dead ends:**
184
+ - Packages/libraries that had incompatibilities
185
+ - Approaches that caused new bugs or regressions
186
+ - Solutions that worked locally but failed in CI/staging/prod
187
+ - Configurations that conflicted with existing setup
188
+ - Rabbit holes that consumed significant time without progress
189
+
190
+ ## Post-Generation Output
191
+
192
+ After creating file, output:
193
+
194
+ ```
195
+ ✓ Created handoff folder: _output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/
196
+ - index.md (entry point with navigation)
197
+ - completed-work.md, dead-ends.md, decisions.md, pending.md, context.md
198
+ - plan.md (copy of current plan, if any)
199
+
200
+ To continue next session:
201
+ The index.md will be automatically suggested when you start a new session.
202
+ Read dead-ends.md first to avoid repeating failed approaches.
203
+
204
+ ⚠️ {N} dead ends documented — avoid re-attempting these approaches
205
+ ```
9
206
 
10
- - `$ARGUMENTS` - Optional path to a plan document to update with progress tracking
207
+ If plan was updated:
208
+ ```
209
+ ✓ Updated plan document: {path}
210
+ - {N} items marked complete
211
+ - {N} items partially complete
212
+ - {N} new items added
213
+ ```
11
214
 
12
- Load and execute `_shared/workflows/handoff.md`.
215
+ ## Success Criteria
13
216
 
14
- Follow the Gather Analyze Write → Update Context pattern using native tools.
217
+ - [ ] Handoff folder created at `handoffs/{YYYY-MM-DD-HHMM}/`
218
+ - [ ] index.md contains summary and navigation table
219
+ - [ ] All section files created (completed-work.md, dead-ends.md, etc.)
220
+ - [ ] Dead ends use structured table format for quick scanning
221
+ - [ ] plan.md copied from context if plan exists
222
+ - [ ] Next steps are actionable with file references
223
+ - [ ] Git status included in index.md
224
+ - [ ] If plan provided: checkboxes updated to reflect completion status
225
+ - [ ] If plan provided: Session Progress Log appended
226
+ - [ ] Context state updated to indicate handoff pending
@@ -1,14 +1,226 @@
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
1
58
  ---
2
- description: Generate a session handoff document when ending work
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"}
3
65
  ---
4
- # Session Handoff
5
66
 
6
- Generate a handoff document summarizing the current session's work, decisions, and pending items.
67
+ # Session Handoff {Date}
7
68
 
8
- ## Arguments
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
+ Instead of writing the file directly, pipe your handoff content to the save script:
151
+
152
+ ```bash
153
+ python .aiwcli/_shared/scripts/save_handoff.py "{context_id}" <<'EOF'
154
+ {Your complete handoff markdown content from Step 3}
155
+ EOF
156
+ ```
157
+
158
+ This script:
159
+ 1. Creates a folder at `_output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/`
160
+ 2. Parses sections and writes sharded files (index.md, completed-work.md, dead-ends.md, etc.)
161
+ 3. Copies the current plan (if any) to plan.md
162
+ 4. Records the event in the context's event log (informational only)
163
+
164
+ Use the handoff folder for context in the next session.
165
+
166
+ ## Dead Ends Section Guidelines
167
+
168
+ This section is critical for preventing context rot across sessions. Be specific:
169
+
170
+ **Bad (too vague):**
171
+ > - Tried using library X, didn't work
172
+
173
+ **Good (actionable):**
174
+ > ### Fixing the race condition in SessionStore
175
+ > | Approach Tried | Why It Failed |
176
+ > |----------------|---------------|
177
+ > | `async-mutex` package | Deadlock when nested calls to `getSession()` |
178
+ > | Redis WATCH/MULTI | Our Redis 6.x cluster doesn't support WATCH in cluster mode |
179
+ > | In-memory lock Map | Works single-node but breaks in horizontal scaling |
180
+ >
181
+ > **What to try instead**: Upgrade to Redis 7.x which supports WATCH in cluster mode, or use Redlock algorithm
182
+
183
+ **Capture these dead ends:**
184
+ - Packages/libraries that had incompatibilities
185
+ - Approaches that caused new bugs or regressions
186
+ - Solutions that worked locally but failed in CI/staging/prod
187
+ - Configurations that conflicted with existing setup
188
+ - Rabbit holes that consumed significant time without progress
189
+
190
+ ## Post-Generation Output
191
+
192
+ After creating file, output:
193
+
194
+ ```
195
+ ✓ Created handoff folder: _output/contexts/{context_id}/handoffs/{YYYY-MM-DD-HHMM}/
196
+ - index.md (entry point with navigation)
197
+ - completed-work.md, dead-ends.md, decisions.md, pending.md, context.md
198
+ - plan.md (copy of current plan, if any)
199
+
200
+ To continue next session:
201
+ The index.md will be automatically suggested when you start a new session.
202
+ Read dead-ends.md first to avoid repeating failed approaches.
203
+
204
+ ⚠️ {N} dead ends documented — avoid re-attempting these approaches
205
+ ```
9
206
 
10
- - `$ARGUMENTS` - Optional path to a plan document to update with progress tracking
207
+ If plan was updated:
208
+ ```
209
+ ✓ Updated plan document: {path}
210
+ - {N} items marked complete
211
+ - {N} items partially complete
212
+ - {N} new items added
213
+ ```
11
214
 
12
- Load and execute `_shared/workflows/handoff.md`.
215
+ ## Success Criteria
13
216
 
14
- Follow the Gather Analyze Write → Update Context pattern.
217
+ - [ ] Handoff folder created at `handoffs/{YYYY-MM-DD-HHMM}/`
218
+ - [ ] index.md contains summary and navigation table
219
+ - [ ] All section files created (completed-work.md, dead-ends.md, etc.)
220
+ - [ ] Dead ends use structured table format for quick scanning
221
+ - [ ] plan.md copied from context if plan exists
222
+ - [ ] Next steps are actionable with file references
223
+ - [ ] Git status included in index.md
224
+ - [ ] If plan provided: checkboxes updated to reflect completion status
225
+ - [ ] If plan provided: Session Progress Log appended
226
+ - [ ] Context state updated to indicate handoff pending