feed-the-machine 1.3.0 → 1.4.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 (45) hide show
  1. package/ftm-audit/SKILL.md +383 -57
  2. package/ftm-brainstorm/SKILL.md +119 -51
  3. package/ftm-config/SKILL.md +1 -1
  4. package/ftm-council/SKILL.md +259 -31
  5. package/ftm-dashboard/SKILL.md +10 -10
  6. package/ftm-debug/SKILL.md +861 -54
  7. package/ftm-diagram/SKILL.md +1 -1
  8. package/ftm-executor/SKILL.md +6 -6
  9. package/ftm-git/SKILL.md +208 -22
  10. package/ftm-inbox/bin/start.sh +1 -1
  11. package/ftm-inbox/bin/status.sh +1 -1
  12. package/ftm-inbox/bin/stop.sh +1 -1
  13. package/ftm-intent/SKILL.md +0 -1
  14. package/ftm-map/SKILL.md +46 -14
  15. package/ftm-map/scripts/db.py +439 -118
  16. package/ftm-map/scripts/index.py +128 -54
  17. package/ftm-map/scripts/parser.py +89 -320
  18. package/ftm-map/scripts/queries/go-tags.scm +20 -0
  19. package/ftm-map/scripts/queries/javascript-tags.scm +19 -7
  20. package/ftm-map/scripts/queries/python-tags.scm +22 -8
  21. package/ftm-map/scripts/queries/ruby-tags.scm +19 -0
  22. package/ftm-map/scripts/queries/rust-tags.scm +37 -0
  23. package/ftm-map/scripts/queries/typescript-tags.scm +20 -8
  24. package/ftm-map/scripts/query.py +176 -24
  25. package/ftm-map/scripts/ranker.py +377 -0
  26. package/ftm-map/scripts/requirements.txt +3 -0
  27. package/ftm-map/scripts/setup.sh +11 -0
  28. package/ftm-map/scripts/test_db.py +355 -115
  29. package/ftm-map/scripts/test_parser.py +169 -101
  30. package/ftm-map/scripts/test_query.py +178 -61
  31. package/ftm-map/scripts/test_ranker.py +199 -0
  32. package/ftm-map/scripts/views.py +107 -61
  33. package/ftm-mind/SKILL.md +861 -11
  34. package/ftm-mind/references/event-registry.md +20 -0
  35. package/ftm-pause/SKILL.md +256 -37
  36. package/ftm-resume/SKILL.md +380 -75
  37. package/ftm-retro/SKILL.md +164 -27
  38. package/ftm-upgrade/SKILL.md +4 -4
  39. package/hooks/ftm-blackboard-enforcer.sh +2 -4
  40. package/install.sh +6 -1
  41. package/package.json +1 -1
  42. package/ftm-map/scripts/tests/fixtures/__init__.py +0 -0
  43. package/ftm-map/scripts/tests/fixtures/sample_project/api.ts +0 -16
  44. package/ftm-map/scripts/tests/fixtures/sample_project/auth.py +0 -15
  45. package/ftm-map/scripts/tests/fixtures/sample_project/utils.js +0 -16
@@ -20,142 +20,440 @@ Read a saved ftm session state file and seamlessly continue the workflow in a fr
20
20
 
21
21
  FTM skills are long-running, multi-phase workflows. A brainstorm session might span 10+ turns of research and questioning. An executor session might be mid-way through wave 2 of a 5-wave plan. A debug war room might have 4 investigation agents completed and a solver mid-attempt. When these sessions end — whether by choice, crash, or context exhaustion — the work shouldn't be lost. This skill reads the state file that ftm-pause saved and reconstructs the session so the appropriate ftm skill can continue exactly where it stopped.
22
22
 
23
- ---
24
-
25
- ## Step 1: Read and Validate
23
+ ## Step 1: Read the State File
26
24
 
27
25
  Read `~/.claude/ftm-state/STATE.md`.
28
26
 
29
- Run all validation checks before proceeding. See `references/protocols/VALIDATION.md` for the full validation protocol covering:
30
- - State file integrity and required frontmatter fields
31
- - Version compatibility between saved state and installed skills
32
- - Project directory existence
33
- - Git state drift (branch changes, new commits)
34
- - Worktree branch availability (executor and debug)
35
- - Plan file existence (executor)
36
- - Artifact file availability (debug)
37
- - Session staleness (< 24h / 1–7 days / > 7 days)
38
- - Skill availability
27
+ If the file doesn't exist:
28
+ ```
29
+ No saved ftm session found at ~/.claude/ftm-state/STATE.md
39
30
 
40
- Present a consolidated validation summary before asking the user to confirm. A single block-level failure prevents resumption. Warnings require user acknowledgment.
31
+ To save a session mid-workflow, use /ftm-pause during any active ftm skill.
32
+ ```
33
+ Stop here.
41
34
 
42
- ---
35
+ If the file exists but can't be parsed (missing frontmatter, malformed YAML):
36
+ ```
37
+ Found state file but it appears corrupted — missing required frontmatter fields.
38
+ Expected fields: skill, phase, timestamp, project_dir
39
+
40
+ Would you like me to try to extract what I can from the file, or should we start fresh?
41
+ ```
43
42
 
44
43
  ## Step 2: Parse the Frontmatter
45
44
 
46
- Extract required YAML frontmatter: `skill`, `phase`, `timestamp`, `project_dir`. Optional fields: `phase_detail`, `git_branch`, `git_commit`.
45
+ Extract the YAML frontmatter fields:
47
46
 
48
- ---
47
+ | Field | Required | Purpose |
48
+ |-------|----------|---------|
49
+ | `skill` | Yes | Which ftm skill to resume (brainstorm, executor, debug, council, audit) |
50
+ | `phase` | Yes | Which phase the skill was in |
51
+ | `phase_detail` | No | Human-readable detail about position within the phase |
52
+ | `timestamp` | Yes | When the session was saved |
53
+ | `project_dir` | Yes | The project directory the session was working in |
54
+ | `git_branch` | No | The git branch at time of save |
55
+ | `git_commit` | No | The HEAD commit at time of save |
56
+
57
+ ## Step 3: Validate the Environment
58
+
59
+ Run these checks before attempting to resume. Each check either passes, warns, or blocks.
60
+
61
+ ### Check 1: Project directory exists
62
+
63
+ ```bash
64
+ test -d "{project_dir}" && echo "EXISTS" || echo "MISSING"
65
+ ```
66
+
67
+ - **EXISTS**: Pass. Continue.
68
+ - **MISSING**: Block. "The project directory `{project_dir}` no longer exists. Cannot resume — the codebase isn't available. Did the project move?"
69
+
70
+ ### Check 2: Git state (if git fields present)
71
+
72
+ ```bash
73
+ cd "{project_dir}" && git branch --show-current && git rev-parse --short HEAD
74
+ ```
75
+
76
+ Compare current branch and commit against saved values.
77
+
78
+ - **Same branch, same commit**: Perfect — nothing changed.
79
+ - **Same branch, different commit**: Warn. "The codebase has been modified since the session was saved. {N} new commits on `{branch}` since `{saved_commit}`." Show the commit log between saved and current. Ask the user if they want to continue anyway or review changes first.
80
+ - **Different branch**: Warn. "You're now on branch `{current}` but the session was saved on `{saved_branch}`. Would you like to switch back to `{saved_branch}`, or continue on `{current}`?"
81
+
82
+ ### Check 3: Worktree branches (for executor and debug)
83
+
84
+ If the state file references worktree branches:
85
+
86
+ ```bash
87
+ cd "{project_dir}" && git worktree list
88
+ git branch --list "plan-exec/*" "debug/*"
89
+ ```
90
+
91
+ - **All referenced branches exist**: Pass.
92
+ - **Some missing**: Warn. List which branches are missing. "These worktree branches from the saved session no longer exist: {list}. Tasks associated with these branches may need to be re-executed."
93
+ - **All missing**: Warn more strongly. "All worktree branches from the saved session have been cleaned up. Completed task work may have been merged already. In-progress tasks will need to restart."
94
+
95
+ ### Check 4: Plan files (for executor)
96
+
97
+ If the state references a plan file:
98
+
99
+ ```bash
100
+ test -f "{plan_path}" && echo "EXISTS" || echo "MISSING"
101
+ ```
102
+
103
+ - **EXISTS**: Pass.
104
+ - **MISSING**: Block (for executor). "The plan file `{plan_path}` no longer exists. Cannot resume executor without a plan. Do you have the plan elsewhere?"
105
+
106
+ ### Check 5: Research/investigation files (for debug)
107
+
108
+ Check for any referenced artifact files (RESEARCH-FINDINGS.md, HYPOTHESES.md, REPRODUCTION.md, etc.):
109
+
110
+ ```bash
111
+ for f in {artifact_paths}; do test -f "$f" && echo "$f: EXISTS" || echo "$f: MISSING"; done
112
+ ```
49
113
 
50
- ## Step 3: Present the Resume Summary
114
+ - **All exist**: Pass.
115
+ - **Some missing**: Warn. The state file should contain the key content from these files, so they're reconstructible. Note which are missing.
51
116
 
52
- After validation passes (or the user acknowledges warnings), present the resume summary for the relevant skill.
117
+ ### Check 6: Staleness (all skills)
53
118
 
54
- All summaries follow this structure — adapt the "Where we left off" fields to the skill:
119
+ Calculate the age of the saved state:
55
120
 
121
+ ```bash
122
+ # Compare saved timestamp to current time
123
+ ```
124
+
125
+ - **< 24 hours**: Fresh. No warning needed.
126
+ - **1-7 days**: Mild staleness. Note it but proceed: "This session is {N} days old. The codebase may have changed — check the git log above."
127
+ - **> 7 days**: Stale warning. Present explicitly:
128
+ ```
129
+ This session was saved 12 days ago. The codebase has likely changed significantly.
130
+
131
+ Options:
132
+ 1. Resume anyway — I'll use the saved context but some references may be outdated
133
+ 2. Resume with a fresh repo scan — I'll re-run Phase 0 to update project context, then continue from where you left off
134
+ 3. Start fresh — discard this state and begin a new session
135
+
136
+ Which would you prefer?
137
+ ```
138
+
139
+ If the user picks option 2, run Phase 0 of the relevant skill (repo scan for brainstorm, plan re-read for executor, codebase reconnaissance for debug) with fresh data, then merge the new scan with the saved state — keeping all decisions, answers, and progress but updating the project context.
140
+
141
+ ## Step 4: Present the Resume Summary
142
+
143
+ After all validation checks pass (or the user acknowledges warnings), present the resume:
144
+
145
+ ### For ftm-brainstorm:
56
146
  ```
57
- Resuming ftm-{skill} session from {timestamp}
147
+ Resuming ftm-brainstorm session from {timestamp}
58
148
  Project: {project_dir}
59
149
 
60
150
  Where we left off:
61
- [skill-specific fieldssee below]
151
+ Phase: {phase}{phase_detail}
152
+ Path: {A or B}
153
+ Research sprints completed: {N}
154
+ Challenge turns completed: {N}
155
+ Decisions locked: {N}
156
+ - {decision 1}
157
+ - {decision 2}
158
+ - ...
159
+ Open questions: {N}
160
+ - {question 1}
161
+ - {question 2}
62
162
 
63
163
  Next step:
64
164
  {next_step from state file}
65
165
 
66
- Ready to continue? (or type new context to add before resuming)
166
+ Ready to continue? (or type new context to add information before resuming)
67
167
  ```
68
168
 
69
- **ftm-brainstorm fields:**
70
- - Phase: {phase} — {phase_detail}, Path: {A or B}
71
- - Research sprints completed: {N}, Challenge turns: {N}
72
- - Decisions locked: {N} (list them), Open questions: {N} (list them)
169
+ ### For ftm-executor:
170
+ ```
171
+ Resuming ftm-executor session from {timestamp}
172
+ Project: {project_dir}
173
+ Plan: {plan_path}
73
174
 
74
- **ftm-executor fields:**
75
- - Wave: {current_wave} of {total_waves}, Tasks: {completed}/{total} complete
76
- - Done / In-progress (with agent) / Pending / Failed+Blocked (list each)
77
- - Worktrees: {N active}, Last audit: {result}
175
+ Where we left off:
176
+ Wave: {current_wave} of {total_waves}
177
+ Tasks: {completed}/{total} complete
178
+ Done: {list of completed task numbers and titles}
179
+ In progress: {list with agent assignments}
180
+ Pending: {list}
181
+ Failed/Blocked: {list with reasons}
182
+ Worktrees: {N active}
183
+ Last audit: {result}
78
184
 
79
- **ftm-debug fields:**
80
- - Phase: {phase} {phase_detail}, Problem: {one-line summary}
81
- - Investigation: Instrumenter / Researcher / Reproducer / Hypothesizer (complete/pending + finding)
82
- - Solver attempts: {N}, Reviewer verdict: {if any}, Worktrees: {list}
185
+ Next step:
186
+ {next_step from state file}
83
187
 
84
- **ftm-council fields:**
85
- - Council prompt: {brief summary}, Round: {N} of 5
86
- - Each model's one-line position, Consensus: {Yes/No + detail}
188
+ Ready to continue? (or type new context to add information before resuming)
189
+ ```
87
190
 
88
- **ftm-audit fields:**
89
- - Trigger: {what triggered it}
90
- - Phase 0 / Layer 1 / Layer 2 / Layer 3: {complete with findings / pending}
91
- - Status: {PASS/FAIL/in-progress}
191
+ ### For ftm-debug:
192
+ ```
193
+ Resuming ftm-debug war room from {timestamp}
194
+ Project: {project_dir}
92
195
 
93
- ---
196
+ Where we left off:
197
+ Phase: {phase} — {phase_detail}
198
+ Problem: {one-line problem summary}
199
+ Investigation status:
200
+ Instrumenter: {complete/pending} {brief finding if complete}
201
+ Researcher: {complete/pending} {brief finding if complete}
202
+ Reproducer: {complete/pending} {brief finding if complete}
203
+ Hypothesizer: {complete/pending} {top hypothesis if complete}
204
+ Solver attempts: {N}
205
+ Reviewer verdict: {if any}
206
+ Worktrees: {list with status}
94
207
 
95
- ## Step 4: Handle User Response
208
+ Next step:
209
+ {next_step from state file}
210
+
211
+ Ready to continue? (or type new context to add information before resuming)
212
+ ```
96
213
 
97
- **"Yes" / "Continue" / "Go"** — proceed to Step 5.
214
+ ### For ftm-council:
215
+ ```
216
+ Resuming ftm-council session from {timestamp}
217
+ Project: {project_dir}
98
218
 
99
- **New context / additional information** — the user may say "yes, but also..." or provide updated information. Capture this as a "Post-pause update" section in the Context Snapshot. Pass it forward when invoking the skill.
219
+ Where we left off:
220
+ Council prompt: {brief summary}
221
+ Round: {N} of 5
222
+ Positions:
223
+ Claude: {one-line position}
224
+ Codex: {one-line position}
225
+ Gemini: {one-line position}
226
+ Consensus: {Yes — X and Y agree / No — still diverging}
100
227
 
101
- **"Start fresh" / "Never mind"** — archive the state file (see Step 6) and tell the user: "State archived. You can start a fresh session with /ftm-{skill}."
228
+ Next step:
229
+ {next_step from state file}
102
230
 
103
- ---
231
+ Ready to continue? (or type new context to add information before resuming)
232
+ ```
233
+
234
+ ### For ftm-audit:
235
+ ```
236
+ Resuming ftm-audit session from {timestamp}
237
+ Project: {project_dir}
238
+
239
+ Where we left off:
240
+ Trigger: {what triggered the audit}
241
+ Phase 0 (patterns): {complete/pending}
242
+ Layer 1 (knip): {complete — N findings / pending}
243
+ Layer 2 (adversarial): {complete — N findings / pending}
244
+ Layer 3 (auto-fix): {N fixed, N manual / pending}
245
+ Status: {PASS/FAIL/in-progress}
246
+
247
+ Next step:
248
+ {next_step from state file}
249
+
250
+ Ready to continue? (or type new context to add information before resuming)
251
+ ```
252
+
253
+ ## Step 5: Handle User Response
254
+
255
+ The user can respond in three ways:
256
+
257
+ ### "Yes" / "Continue" / "Go"
258
+ Proceed directly to Step 6 (invoke the skill).
259
+
260
+ ### New context / additional information
261
+ The user may say "yes, but also..." or provide new information (the bug now has a new symptom, requirements changed, they thought of something overnight). Capture this new context and incorporate it into the state before invoking the skill. Add it to the "Context Snapshot" as a "Post-pause update" section.
104
262
 
105
- ## Step 5: Invoke the Appropriate FTM Skill
263
+ ### "Start fresh" / "Never mind"
264
+ Archive the state file (see Step 7) and tell the user: "State archived. You can start a fresh session with /ftm-{skill}."
106
265
 
107
- Invoke the ftm skill with the full saved context injected so it picks up exactly where it left off, not from the beginning. Construct a context preamble that tells the skill its position.
266
+ ## Step 6: Invoke the Appropriate Panda Skill
108
267
 
109
- Read `../ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md` for the exact per-skill state fields to inject and restoration instructions for each skill (brainstorm, executor, debug, council, audit).
268
+ This is the critical step. You need to invoke the ftm skill with the full saved context injected so it picks up exactly where it left off, not from the beginning.
110
269
 
111
- ### Context preamble pattern:
270
+ **How to do this:** Construct a comprehensive context injection that tells the skill exactly where it is. The skill will receive this as its starting context instead of starting from scratch.
271
+
272
+ ### For ftm-brainstorm:
273
+
274
+ Invoke the ftm-brainstorm skill with the following context preamble:
112
275
 
113
276
  ```
114
277
  RESUMING FROM SAVED STATE — DO NOT START FROM PHASE 0.
115
278
 
116
- [Inject all relevant state sections from the state file, organized by the
117
- field groups defined in SKILL-RESTORE-PROTOCOLS.md for this skill.]
279
+ This is a resumed session. All prior phases and turns have been completed as described below.
280
+ Pick up at exactly the point described in "Next Step." Do not re-ask questions that have
281
+ already been answered. Do not re-run research sprints that have already completed. Do not
282
+ re-present suggestions the user has already responded to.
283
+
284
+ PROJECT CONTEXT (from Phase 0 scan — already completed):
285
+ {paste full Phase 0 results from state}
286
+
287
+ INTAKE COMPLETE (Phase 1 — already completed):
288
+ {paste all rounds, answers, and research sprint results from state}
289
+
290
+ RESEARCH TURNS COMPLETED (Phase 2 — {N} turns done):
291
+ {paste each turn's suggestions, challenges, user responses, and direction from state}
292
+
293
+ ACCUMULATED DECISIONS:
294
+ {paste decisions list from state}
295
+
296
+ OPEN QUESTIONS:
297
+ {paste open questions from state}
298
+
299
+ CURRENT DIRECTION:
300
+ {paste current direction from state}
301
+
302
+ NEXT STEP:
303
+ {paste next step from state — this is where you pick up}
304
+
305
+ {if post-pause update exists: POST-PAUSE UPDATE FROM USER: {new context}}
306
+ ```
307
+
308
+ Then invoke `/ftm-brainstorm` via the Skill tool. The brainstorm skill will see this context and should continue from the specified point — running the next research sprint, asking the next question, or generating the next section of the plan.
309
+
310
+ ### For ftm-executor:
311
+
312
+ ```
313
+ RESUMING FROM SAVED STATE — DO NOT START FROM PHASE 1.
118
314
 
119
- NEXT STEP: {paste next_step from state file — this is where execution picks up}
315
+ Plan file: {plan_path}
316
+ Plan has been analyzed. Agent team has been assembled. Execution is in progress.
317
+
318
+ COMPLETED TASKS:
319
+ {for each completed task: task number, title, status, commits, audit result}
320
+
321
+ IN-PROGRESS TASKS:
322
+ {task details, agent assignments, what's been done}
323
+
324
+ PENDING TASKS:
325
+ {task list}
326
+
327
+ FAILED/BLOCKED TASKS:
328
+ {task details with error information}
329
+
330
+ ACTIVE WORKTREES:
331
+ {branch names, paths, status}
332
+
333
+ CURRENT WAVE: {N}
334
+ NEXT STEP: {what to do next — dispatch next wave, retry failed task, merge completed work, etc.}
120
335
 
121
336
  {if post-pause update: POST-PAUSE UPDATE FROM USER: {new context}}
122
337
  ```
123
338
 
124
- Then invoke the skill via the Skill tool:
125
- - brainstorm: `/ftm-brainstorm`
126
- - executor: `/ftm-executor {plan_path}`
127
- - debug: `/ftm-debug`
128
- - council: `/ftm-council`
129
- - audit: `/ftm-audit`
339
+ Then invoke `/ftm-executor {plan_path}` via the Skill tool.
130
340
 
131
- ---
341
+ ### For ftm-debug:
342
+
343
+ ```
344
+ RESUMING FROM SAVED STATE — DO NOT START FROM PHASE 0.
345
+
346
+ PROBLEM STATEMENT:
347
+ {original problem from state}
348
+
349
+ CODEBASE RECONNAISSANCE (Phase 0 — already completed):
350
+ {full recon results from state}
351
+
352
+ INVESTIGATION PLAN:
353
+ {the plan from state}
354
+
355
+ INVESTIGATION RESULTS (Phase 1):
356
+ Instrumenter: {full report or "not yet run"}
357
+ Researcher: {full report or "not yet run"}
358
+ Reproducer: {full report or "not yet run"}
359
+ Hypothesizer: {full report or "not yet run"}
360
+
361
+ SYNTHESIS (Phase 2):
362
+ {cross-reference analysis if completed}
363
+
364
+ SOLVER ATTEMPTS:
365
+ {list of attempts, hypotheses tried, commits, outcomes}
366
+
367
+ REVIEWER VERDICTS:
368
+ {list of verdicts if any}
369
+
370
+ ACTIVE WORKTREES:
371
+ {branch names, paths, status}
372
+
373
+ NEXT STEP: {what to do — run remaining investigation agents, synthesize, solve, review, etc.}
132
374
 
133
- ## Step 6: Archive the State File
375
+ {if post-pause update: POST-PAUSE UPDATE FROM USER: {new context}}
376
+ ```
377
+
378
+ Then invoke `/ftm-debug` via the Skill tool.
379
+
380
+ ### For ftm-council:
381
+
382
+ ```
383
+ RESUMING FROM SAVED STATE — DO NOT START FROM STEP 0.
384
+
385
+ COUNCIL PROMPT:
386
+ {the framed problem}
387
+
388
+ COMPLETED ROUNDS:
389
+ {for each round: each model's full research, position, reasoning, concerns, confidence}
390
+ {for rebuttal rounds: updated positions, new evidence, responses}
391
+
392
+ ALIGNMENT STATUS:
393
+ {agreement areas, divergence points, majority forming?}
394
+
395
+ CURRENT ROUND: {N}
396
+ NEXT STEP: {run next rebuttal round, check consensus, present verdict, etc.}
397
+
398
+ {if post-pause update: POST-PAUSE UPDATE FROM USER: {new context}}
399
+ ```
400
+
401
+ Then invoke `/ftm-council` via the Skill tool.
402
+
403
+ ### For ftm-audit:
404
+
405
+ ```
406
+ RESUMING FROM SAVED STATE — DO NOT START FROM PHASE 0.
407
+
408
+ AUDIT TRIGGER: {what triggered it}
409
+ SCOPE: {files/project}
410
+
411
+ PROJECT PATTERNS (Phase 0 — already completed):
412
+ {detected framework, dimensions, configuration}
134
413
 
135
- After the skill has been successfully invoked, archive the consumed state file immediately:
414
+ LAYER 1 RESULTS:
415
+ {knip findings if completed, or "not yet run"}
416
+
417
+ LAYER 2 RESULTS:
418
+ {adversarial findings if completed, or "not yet run"}
419
+
420
+ LAYER 3 RESULTS:
421
+ {fixes applied, manual items, iteration count}
422
+
423
+ NEXT STEP: {run remaining layers, apply fixes, re-verify, etc.}
424
+
425
+ {if post-pause update: POST-PAUSE UPDATE FROM USER: {new context}}
426
+ ```
427
+
428
+ Then invoke `/ftm-audit` via the Skill tool.
429
+
430
+ ## Step 7: Archive the State File
431
+
432
+ After the skill has been successfully invoked and the user is continuing their work, archive the consumed state file so it doesn't interfere with future pause/resume cycles.
136
433
 
137
434
  ```bash
138
435
  mkdir -p ~/.claude/ftm-state/archive
139
436
  mv ~/.claude/ftm-state/STATE.md ~/.claude/ftm-state/archive/STATE-$(date +%Y%m%d-%H%M%S).md
140
437
  ```
141
438
 
142
- Archive immediately after invocation not after the full session completes. The state has been consumed. If the user needs to pause again, ftm-pause will create a new STATE.md from the now-continued session.
143
-
144
- ---
439
+ Do this immediately after the skill is invoked, not after the full session completes. The state has been consumed if the user needs to pause again, ftm-pause will create a new STATE.md from the current (now-continued) session.
145
440
 
146
441
  ## Edge Cases
147
442
 
148
- **Multiple state files** If both `STATE.md` and `STATE-ftm-brainstorm.md` exist, ask the user which one to resume. List them with skill type and timestamp.
443
+ ### State file references a skill that isn't installed
444
+ If the state says `skill: ftm-debug` but ftm-debug isn't in the skills directory, tell the user: "The saved session requires ftm-debug but that skill isn't available. Install it and try again."
149
445
 
150
- **User wants to resume but also change direction** — Add the direction change as a post-pause update. Let the skill's natural conversation flow handle it. Do not edit the state file directly.
446
+ ### User wants to resume but also change direction
447
+ If the user says something like "resume, but actually I want to go with option 2 instead of the microservices approach we chose," add this as a post-pause update and let the skill handle the direction change. Don't try to edit the state — just pass the new context along and the skill's natural conversation flow will handle it.
151
448
 
152
- **Archived states** If the user asks "do I have any old sessions?", check the archive:
153
- ```bash
154
- ls -la ~/.claude/ftm-state/archive/
155
- ```
156
- List archived states with skill type, timestamp, and phase. Offer to restore any of them (copy from archive to STATE.md, then run the normal resume flow).
449
+ ### Multiple state files
450
+ If both `STATE.md` and `STATE-ftm-brainstorm.md` exist (from a session where multiple skills were paused), ask the user which one to resume. List them with their skill type and timestamp.
451
+
452
+ ### Corrupted or incomplete state
453
+ If the state file is missing critical sections (no "Next Step," no "Context Snapshot"), warn the user: "The state file is incomplete it may have been saved during an error. I can try to resume with what's available, but some context may be missing. Alternatively, we can start fresh."
157
454
 
158
- **Nothing to resume** If `~/.claude/ftm-state/` doesn't exist or contains no STATE.md:
455
+ ### The user runs /ftm-resume but there's nothing to resume
456
+ If `~/.claude/ftm-state/` doesn't exist or contains no STATE.md:
159
457
  ```
160
458
  No saved ftm session found.
161
459
 
@@ -165,6 +463,13 @@ To save a session for later:
165
463
  3. In a new conversation, use /ftm-resume to continue
166
464
  ```
167
465
 
466
+ ### Archived states
467
+ If the user asks "do I have any old sessions?" or "what sessions have I saved?", check the archive:
468
+ ```bash
469
+ ls -la ~/.claude/ftm-state/archive/
470
+ ```
471
+ List the archived states with their skill type, timestamp, and phase. Offer to restore any of them (copy from archive to STATE.md, then run the normal resume flow).
472
+
168
473
  ## Requirements
169
474
 
170
475
  - reference: `~/.claude/ftm-state/STATE.md` | required | saved session state file from ftm-pause