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.
- package/bin/dev.cmd +3 -3
- package/bin/dev.js +16 -16
- package/bin/run.cmd +3 -3
- package/bin/run.js +21 -21
- package/dist/commands/branch.js +7 -2
- package/dist/lib/bmad-installer.js +37 -37
- package/dist/lib/terminal.d.ts +2 -0
- package/dist/lib/terminal.js +57 -7
- package/dist/templates/CLAUDE.md +205 -205
- package/dist/templates/_shared/.claude/commands/handoff-resume.md +12 -64
- package/dist/templates/_shared/.claude/commands/handoff.md +12 -198
- package/dist/templates/_shared/.claude/settings.json +65 -65
- package/dist/templates/_shared/.codex/workflows/handoff.md +226 -226
- package/dist/templates/_shared/.windsurf/workflows/handoff.md +226 -226
- package/dist/templates/_shared/handoff-system/CLAUDE.md +421 -0
- package/dist/templates/_shared/{lib-ts/handoff → handoff-system/lib}/document-generator.ts +215 -216
- package/dist/templates/_shared/{lib-ts/handoff → handoff-system/lib}/handoff-reader.ts +157 -158
- package/dist/templates/_shared/{scripts → handoff-system/scripts}/resume_handoff.ts +373 -373
- package/dist/templates/_shared/{scripts → handoff-system/scripts}/save_handoff.ts +469 -358
- package/dist/templates/_shared/handoff-system/workflows/handoff-resume.md +66 -0
- package/dist/templates/_shared/{workflows → handoff-system/workflows}/handoff.md +254 -254
- package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +2 -2
- package/dist/templates/_shared/hooks-ts/archive_plan.ts +159 -159
- package/dist/templates/_shared/hooks-ts/context_monitor.ts +147 -147
- package/dist/templates/_shared/hooks-ts/file-suggestion.ts +128 -128
- package/dist/templates/_shared/hooks-ts/pre_compact.ts +49 -49
- package/dist/templates/_shared/hooks-ts/session_end.ts +196 -183
- package/dist/templates/_shared/hooks-ts/session_start.ts +163 -151
- package/dist/templates/_shared/hooks-ts/task_create_capture.ts +48 -48
- package/dist/templates/_shared/hooks-ts/task_update_capture.ts +74 -74
- package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +93 -93
- package/dist/templates/_shared/lib-ts/CLAUDE.md +367 -367
- package/dist/templates/_shared/lib-ts/base/atomic-write.ts +138 -138
- package/dist/templates/_shared/lib-ts/base/constants.ts +303 -303
- package/dist/templates/_shared/lib-ts/base/git-state.ts +58 -58
- package/dist/templates/_shared/lib-ts/base/hook-utils.ts +582 -582
- package/dist/templates/_shared/lib-ts/base/inference.ts +301 -301
- package/dist/templates/_shared/lib-ts/base/logger.ts +247 -247
- package/dist/templates/_shared/lib-ts/base/state-io.ts +202 -130
- package/dist/templates/_shared/lib-ts/base/stop-words.ts +184 -184
- package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +56 -0
- package/dist/templates/_shared/lib-ts/base/utils.ts +184 -184
- package/dist/templates/_shared/lib-ts/context/context-formatter.ts +566 -560
- package/dist/templates/_shared/lib-ts/context/context-selector.ts +524 -515
- package/dist/templates/_shared/lib-ts/context/context-store.ts +712 -668
- package/dist/templates/_shared/lib-ts/context/plan-manager.ts +312 -312
- package/dist/templates/_shared/lib-ts/context/task-tracker.ts +185 -185
- package/dist/templates/_shared/lib-ts/package.json +20 -20
- package/dist/templates/_shared/lib-ts/templates/formatters.ts +102 -102
- package/dist/templates/_shared/lib-ts/templates/plan-context.ts +58 -58
- package/dist/templates/_shared/lib-ts/tsconfig.json +13 -13
- package/dist/templates/_shared/lib-ts/types.ts +186 -180
- package/dist/templates/_shared/scripts/resolve_context.ts +33 -33
- package/dist/templates/_shared/scripts/status_line.ts +690 -690
- package/dist/templates/cc-native/.claude/commands/{rlm → cc-native/rlm}/ask.md +136 -136
- package/dist/templates/cc-native/.claude/commands/{rlm → cc-native/rlm}/index.md +21 -21
- package/dist/templates/cc-native/.claude/commands/{rlm → cc-native/rlm}/overview.md +56 -56
- package/dist/templates/cc-native/.claude/commands/cc-native/specdev.md +10 -10
- package/dist/templates/cc-native/.windsurf/workflows/cc-native/fix.md +8 -8
- package/dist/templates/cc-native/.windsurf/workflows/cc-native/implement.md +8 -8
- package/dist/templates/cc-native/.windsurf/workflows/cc-native/research.md +8 -8
- package/dist/templates/cc-native/CC-NATIVE-README.md +189 -189
- package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +304 -304
- package/dist/templates/cc-native/_cc-native/agents/CLAUDE.md +143 -143
- package/dist/templates/cc-native/_cc-native/agents/PLAN-ORCHESTRATOR.md +213 -213
- package/dist/templates/cc-native/_cc-native/agents/plan-questions/PLAN-QUESTIONER.md +70 -70
- package/dist/templates/cc-native/_cc-native/cc-native.config.json +96 -96
- package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +247 -247
- package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +76 -76
- package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +54 -54
- package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +51 -51
- package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +53 -53
- package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +61 -61
- package/dist/templates/cc-native/_cc-native/lib-ts/agent-selection.ts +163 -163
- package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +156 -156
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/format.ts +597 -597
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/index.ts +26 -26
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/tracker.ts +107 -107
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts/write.ts +119 -119
- package/dist/templates/cc-native/_cc-native/lib-ts/artifacts.ts +21 -21
- package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +319 -319
- package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +144 -144
- package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +57 -57
- package/dist/templates/cc-native/_cc-native/lib-ts/constants.ts +83 -83
- package/dist/templates/cc-native/_cc-native/lib-ts/corroboration.ts +119 -119
- package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +79 -79
- package/dist/templates/cc-native/_cc-native/lib-ts/graduation.ts +132 -132
- package/dist/templates/cc-native/_cc-native/lib-ts/index.ts +116 -116
- package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +168 -168
- package/dist/templates/cc-native/_cc-native/lib-ts/orchestrator.ts +70 -70
- package/dist/templates/cc-native/_cc-native/lib-ts/output-builder.ts +130 -130
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +80 -80
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-enhancement.ts +41 -41
- package/dist/templates/cc-native/_cc-native/lib-ts/plan-questions.ts +101 -101
- package/dist/templates/cc-native/_cc-native/lib-ts/review-pipeline.ts +511 -511
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/agent.ts +71 -71
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/base/base-agent.ts +217 -217
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/index.ts +12 -12
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/claude-agent.ts +66 -65
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/codex-agent.ts +184 -184
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/gemini-agent.ts +39 -39
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/providers/orchestrator-claude-agent.ts +196 -195
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/schemas.ts +201 -201
- package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/types.ts +21 -21
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/CLAUDE.md +480 -480
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/embedding-indexer.ts +287 -287
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/hyde.ts +148 -148
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/index.ts +54 -54
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +58 -58
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/ollama-client.ts +208 -208
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +460 -460
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-indexer.ts +446 -447
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-loader.ts +280 -280
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-searcher.ts +274 -274
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +201 -201
- package/dist/templates/cc-native/_cc-native/lib-ts/rlm/vector-store.ts +278 -278
- package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +184 -184
- package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +275 -275
- package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +18 -18
- package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +329 -329
- package/dist/templates/cc-native/_cc-native/lib-ts/verdict.ts +72 -72
- package/dist/templates/cc-native/_cc-native/workflows/specdev.md +9 -9
- package/oclif.manifest.json +1 -1
- package/package.json +108 -108
- 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
|
|
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:
|
|
62
|
-
|
|
63
|
-
|
|
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";
|