feed-the-machine 1.5.0 → 1.6.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.
- package/LICENSE +21 -21
- package/README.md +170 -170
- package/bin/generate-manifest.mjs +463 -463
- package/bin/install.mjs +491 -491
- package/docs/HOOKS.md +243 -243
- package/docs/INBOX.md +233 -233
- package/ftm/SKILL.md +122 -122
- package/ftm-audit/SKILL.md +623 -541
- package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
- package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
- package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
- package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
- package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
- package/ftm-audit/scripts/run-knip.sh +23 -23
- package/ftm-audit.yml +2 -2
- package/ftm-brainstorm/SKILL.md +498 -498
- package/ftm-brainstorm/evals/evals.json +100 -100
- package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
- package/ftm-brainstorm/references/agent-prompts.md +224 -224
- package/ftm-brainstorm/references/plan-template.md +121 -121
- package/ftm-brainstorm.yml +2 -2
- package/ftm-browse/SKILL.md +454 -454
- package/ftm-browse/daemon/browser-manager.ts +206 -206
- package/ftm-browse/daemon/bun.lock +30 -30
- package/ftm-browse/daemon/cli.ts +347 -347
- package/ftm-browse/daemon/commands.ts +410 -410
- package/ftm-browse/daemon/main.ts +357 -357
- package/ftm-browse/daemon/package.json +17 -17
- package/ftm-browse/daemon/server.ts +189 -189
- package/ftm-browse/daemon/snapshot.ts +519 -519
- package/ftm-browse/daemon/tsconfig.json +22 -22
- package/ftm-browse.yml +4 -4
- package/ftm-capture/SKILL.md +370 -370
- package/ftm-capture.yml +4 -4
- package/ftm-codex-gate/SKILL.md +361 -361
- package/ftm-codex-gate.yml +2 -2
- package/ftm-config/SKILL.md +345 -345
- package/ftm-config.default.yml +82 -80
- package/ftm-config.yml +2 -2
- package/ftm-council/SKILL.md +416 -416
- package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
- package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
- package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
- package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
- package/ftm-council.yml +2 -2
- package/ftm-dashboard/SKILL.md +163 -163
- package/ftm-dashboard.yml +4 -4
- package/ftm-debug/SKILL.md +1037 -1037
- package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
- package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
- package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
- package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
- package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
- package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
- package/ftm-debug.yml +2 -2
- package/ftm-diagram/SKILL.md +277 -277
- package/ftm-diagram.yml +2 -2
- package/ftm-executor/SKILL.md +777 -767
- package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
- package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
- package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
- package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
- package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
- package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
- package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
- package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
- package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
- package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
- package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
- package/ftm-executor/runtime/package.json +8 -8
- package/ftm-executor.yml +2 -2
- package/ftm-git/SKILL.md +441 -441
- package/ftm-git/evals/evals.json +26 -26
- package/ftm-git/evals/promptfoo.yaml +75 -75
- package/ftm-git/hooks/post-commit-experience.sh +92 -92
- package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
- package/ftm-git/references/protocols/REMEDIATION.md +139 -139
- package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
- package/ftm-git.yml +2 -2
- package/ftm-inbox/backend/adapters/_retry.py +64 -64
- package/ftm-inbox/backend/adapters/base.py +230 -230
- package/ftm-inbox/backend/adapters/freshservice.py +104 -104
- package/ftm-inbox/backend/adapters/gmail.py +125 -125
- package/ftm-inbox/backend/adapters/jira.py +136 -136
- package/ftm-inbox/backend/adapters/registry.py +192 -192
- package/ftm-inbox/backend/adapters/slack.py +110 -110
- package/ftm-inbox/backend/db/connection.py +54 -54
- package/ftm-inbox/backend/db/schema.py +78 -78
- package/ftm-inbox/backend/executor/__init__.py +7 -7
- package/ftm-inbox/backend/executor/engine.py +149 -149
- package/ftm-inbox/backend/executor/step_runner.py +98 -98
- package/ftm-inbox/backend/main.py +103 -103
- package/ftm-inbox/backend/models/__init__.py +1 -1
- package/ftm-inbox/backend/models/unified_task.py +36 -36
- package/ftm-inbox/backend/planner/__init__.py +6 -6
- package/ftm-inbox/backend/planner/generator.py +127 -127
- package/ftm-inbox/backend/planner/schema.py +34 -34
- package/ftm-inbox/backend/requirements.txt +5 -5
- package/ftm-inbox/backend/routes/execute.py +186 -186
- package/ftm-inbox/backend/routes/health.py +52 -52
- package/ftm-inbox/backend/routes/inbox.py +68 -68
- package/ftm-inbox/backend/routes/plan.py +271 -271
- package/ftm-inbox/bin/launchagent.mjs +91 -91
- package/ftm-inbox/bin/setup.mjs +188 -188
- package/ftm-inbox/bin/start.sh +10 -10
- package/ftm-inbox/bin/status.sh +17 -17
- package/ftm-inbox/bin/stop.sh +8 -8
- package/ftm-inbox/config.example.yml +55 -55
- package/ftm-inbox/package-lock.json +2898 -2898
- package/ftm-inbox/package.json +26 -26
- package/ftm-inbox/postcss.config.js +6 -6
- package/ftm-inbox/src/app.css +199 -199
- package/ftm-inbox/src/app.html +18 -18
- package/ftm-inbox/src/lib/api.ts +166 -166
- package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
- package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
- package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
- package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
- package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
- package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
- package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
- package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
- package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
- package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
- package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
- package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
- package/ftm-inbox/src/lib/theme.ts +47 -47
- package/ftm-inbox/src/routes/+layout.svelte +76 -76
- package/ftm-inbox/src/routes/+page.svelte +401 -401
- package/ftm-inbox/svelte.config.js +12 -12
- package/ftm-inbox/tailwind.config.ts +63 -63
- package/ftm-inbox/tsconfig.json +13 -13
- package/ftm-inbox/vite.config.ts +6 -6
- package/ftm-intent/SKILL.md +241 -241
- package/ftm-intent.yml +2 -2
- package/ftm-manifest.json +3794 -3794
- package/ftm-map/SKILL.md +291 -291
- package/ftm-map/scripts/db.py +712 -712
- package/ftm-map/scripts/index.py +415 -415
- package/ftm-map/scripts/parser.py +224 -224
- package/ftm-map/scripts/queries/go-tags.scm +20 -20
- package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
- package/ftm-map/scripts/queries/python-tags.scm +31 -31
- package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
- package/ftm-map/scripts/queries/rust-tags.scm +37 -37
- package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
- package/ftm-map/scripts/query.py +301 -301
- package/ftm-map/scripts/ranker.py +377 -377
- package/ftm-map/scripts/requirements.txt +5 -5
- package/ftm-map/scripts/setup-hooks.sh +27 -27
- package/ftm-map/scripts/setup.sh +56 -56
- package/ftm-map/scripts/test_db.py +364 -364
- package/ftm-map/scripts/test_parser.py +174 -174
- package/ftm-map/scripts/test_query.py +183 -183
- package/ftm-map/scripts/test_ranker.py +199 -199
- package/ftm-map/scripts/views.py +591 -591
- package/ftm-map.yml +2 -2
- package/ftm-mind/SKILL.md +1943 -1943
- package/ftm-mind/evals/promptfoo.yaml +142 -142
- package/ftm-mind/references/blackboard-schema.md +328 -328
- package/ftm-mind/references/complexity-guide.md +110 -110
- package/ftm-mind/references/event-registry.md +319 -319
- package/ftm-mind/references/mcp-inventory.md +296 -296
- package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
- package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
- package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
- package/ftm-mind/references/reflexion-protocol.md +249 -249
- package/ftm-mind/references/routing/SCENARIOS.md +22 -22
- package/ftm-mind/references/routing-scenarios.md +35 -35
- package/ftm-mind.yml +2 -2
- package/ftm-pause/SKILL.md +395 -395
- package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
- package/ftm-pause/references/protocols/VALIDATION.md +80 -80
- package/ftm-pause.yml +2 -2
- package/ftm-researcher/SKILL.md +275 -275
- package/ftm-researcher/evals/agent-diversity.yaml +17 -17
- package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
- package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
- package/ftm-researcher/references/adaptive-search.md +116 -116
- package/ftm-researcher/references/agent-prompts.md +193 -193
- package/ftm-researcher/references/council-integration.md +193 -193
- package/ftm-researcher/references/output-format.md +203 -203
- package/ftm-researcher/references/synthesis-pipeline.md +165 -165
- package/ftm-researcher/scripts/score_credibility.py +234 -234
- package/ftm-researcher/scripts/validate_research.py +92 -92
- package/ftm-researcher.yml +2 -2
- package/ftm-resume/SKILL.md +518 -518
- package/ftm-resume/references/protocols/VALIDATION.md +172 -172
- package/ftm-resume.yml +2 -2
- package/ftm-retro/SKILL.md +380 -380
- package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
- package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
- package/ftm-retro.yml +2 -2
- package/ftm-routine/SKILL.md +170 -170
- package/ftm-routine.yml +4 -4
- package/ftm-state/blackboard/capabilities.json +5 -5
- package/ftm-state/blackboard/capabilities.schema.json +27 -27
- package/ftm-state/blackboard/context.json +23 -23
- package/ftm-state/blackboard/experiences/index.json +9 -9
- package/ftm-state/blackboard/patterns.json +6 -6
- package/ftm-state/schemas/context.schema.json +130 -130
- package/ftm-state/schemas/experience-index.schema.json +77 -77
- package/ftm-state/schemas/experience.schema.json +78 -78
- package/ftm-state/schemas/patterns.schema.json +44 -44
- package/ftm-upgrade/SKILL.md +194 -194
- package/ftm-upgrade/scripts/check-version.sh +76 -76
- package/ftm-upgrade/scripts/upgrade.sh +143 -143
- package/ftm-upgrade.yml +2 -2
- package/ftm-verify.yml +2 -2
- package/ftm.yml +2 -2
- package/hooks/ftm-blackboard-enforcer.sh +93 -93
- package/hooks/ftm-discovery-reminder.sh +90 -90
- package/hooks/ftm-drafts-gate.sh +61 -61
- package/hooks/ftm-event-logger.mjs +107 -107
- package/hooks/ftm-map-autodetect.sh +79 -79
- package/hooks/ftm-pending-sync-check.sh +22 -22
- package/hooks/ftm-plan-gate.sh +92 -92
- package/hooks/ftm-post-commit-trigger.sh +57 -57
- package/hooks/settings-template.json +81 -81
- package/install.sh +363 -363
- package/package.json +84 -84
- package/uninstall.sh +25 -25
package/ftm-resume/SKILL.md
CHANGED
|
@@ -1,518 +1,518 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ftm-resume
|
|
3
|
-
description: Resume a previously paused ftm skill session from saved state. Use when user says "resume", "continue where we left off", "ftm resume", "pick up", or starts a new conversation wanting to continue previous ftm work.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Events
|
|
7
|
-
|
|
8
|
-
### Emits
|
|
9
|
-
- `session_resumed` — when a saved session state has been validated and the appropriate ftm skill is re-invoked with restored context
|
|
10
|
-
- `task_completed` — when the resume workflow finishes (skill re-invoked and state file archived)
|
|
11
|
-
|
|
12
|
-
### Listens To
|
|
13
|
-
(none — ftm-resume is explicitly invoked by the user and does not respond to events)
|
|
14
|
-
|
|
15
|
-
# FTM Resume — Session State Restoration
|
|
16
|
-
|
|
17
|
-
Read a saved ftm session state file and seamlessly continue the workflow in a fresh conversation. The user should feel like they never left — same context, same decisions, same progress, picking up at exactly the right step.
|
|
18
|
-
|
|
19
|
-
## Why This Exists
|
|
20
|
-
|
|
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
|
-
|
|
23
|
-
## Step 1: Read the State File
|
|
24
|
-
|
|
25
|
-
Read `~/.claude/ftm-state/STATE.md`.
|
|
26
|
-
|
|
27
|
-
If the file doesn't exist:
|
|
28
|
-
```
|
|
29
|
-
No saved ftm session found at ~/.claude/ftm-state/STATE.md
|
|
30
|
-
|
|
31
|
-
To save a session mid-workflow, use /ftm-pause during any active ftm skill.
|
|
32
|
-
```
|
|
33
|
-
Stop here.
|
|
34
|
-
|
|
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
|
-
```
|
|
42
|
-
|
|
43
|
-
## Step 2: Parse the Frontmatter
|
|
44
|
-
|
|
45
|
-
Extract the YAML frontmatter fields:
|
|
46
|
-
|
|
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
|
-
```
|
|
113
|
-
|
|
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.
|
|
116
|
-
|
|
117
|
-
### Check 6: Staleness (all skills)
|
|
118
|
-
|
|
119
|
-
Calculate the age of the saved state:
|
|
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:
|
|
146
|
-
```
|
|
147
|
-
Resuming ftm-brainstorm session from {timestamp}
|
|
148
|
-
Project: {project_dir}
|
|
149
|
-
|
|
150
|
-
Where we left off:
|
|
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}
|
|
162
|
-
|
|
163
|
-
Next step:
|
|
164
|
-
{next_step from state file}
|
|
165
|
-
|
|
166
|
-
Ready to continue? (or type new context to add information before resuming)
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### For ftm-executor:
|
|
170
|
-
```
|
|
171
|
-
Resuming ftm-executor session from {timestamp}
|
|
172
|
-
Project: {project_dir}
|
|
173
|
-
Plan: {plan_path}
|
|
174
|
-
|
|
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}
|
|
184
|
-
|
|
185
|
-
Next step:
|
|
186
|
-
{next_step from state file}
|
|
187
|
-
|
|
188
|
-
Ready to continue? (or type new context to add information before resuming)
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### For ftm-debug:
|
|
192
|
-
```
|
|
193
|
-
Resuming ftm-debug war room from {timestamp}
|
|
194
|
-
Project: {project_dir}
|
|
195
|
-
|
|
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}
|
|
207
|
-
|
|
208
|
-
Next step:
|
|
209
|
-
{next_step from state file}
|
|
210
|
-
|
|
211
|
-
Ready to continue? (or type new context to add information before resuming)
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### For ftm-council:
|
|
215
|
-
```
|
|
216
|
-
Resuming ftm-council session from {timestamp}
|
|
217
|
-
Project: {project_dir}
|
|
218
|
-
|
|
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}
|
|
227
|
-
|
|
228
|
-
Next step:
|
|
229
|
-
{next_step from state file}
|
|
230
|
-
|
|
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.
|
|
262
|
-
|
|
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}."
|
|
265
|
-
|
|
266
|
-
## Step 6: Invoke the Appropriate Panda Skill
|
|
267
|
-
|
|
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.
|
|
269
|
-
|
|
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:
|
|
275
|
-
|
|
276
|
-
```
|
|
277
|
-
RESUMING FROM SAVED STATE — DO NOT START FROM PHASE 0.
|
|
278
|
-
|
|
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.
|
|
314
|
-
|
|
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.}
|
|
335
|
-
|
|
336
|
-
{if post-pause update: POST-PAUSE UPDATE FROM USER: {new context}}
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
Then invoke `/ftm-executor {plan_path}` via the Skill tool.
|
|
340
|
-
|
|
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.}
|
|
374
|
-
|
|
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}
|
|
413
|
-
|
|
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.
|
|
433
|
-
|
|
434
|
-
```bash
|
|
435
|
-
mkdir -p ~/.claude/ftm-state/archive
|
|
436
|
-
mv ~/.claude/ftm-state/STATE.md ~/.claude/ftm-state/archive/STATE-$(date +%Y%m%d-%H%M%S).md
|
|
437
|
-
```
|
|
438
|
-
|
|
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.
|
|
440
|
-
|
|
441
|
-
## Edge Cases
|
|
442
|
-
|
|
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."
|
|
445
|
-
|
|
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.
|
|
448
|
-
|
|
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."
|
|
454
|
-
|
|
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:
|
|
457
|
-
```
|
|
458
|
-
No saved ftm session found.
|
|
459
|
-
|
|
460
|
-
To save a session for later:
|
|
461
|
-
1. Start any ftm skill (/ftm-brainstorm, /ftm-executor, /ftm-debug, /ftm-council, /ftm-audit)
|
|
462
|
-
2. When you need to stop, use /ftm-pause
|
|
463
|
-
3. In a new conversation, use /ftm-resume to continue
|
|
464
|
-
```
|
|
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
|
-
|
|
473
|
-
## Requirements
|
|
474
|
-
|
|
475
|
-
- reference: `~/.claude/ftm-state/STATE.md` | required | saved session state file from ftm-pause
|
|
476
|
-
- reference: `../ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md` | required | per-skill state field restoration instructions
|
|
477
|
-
- reference: `../ftm-pause/references/protocols/VALIDATION.md` | required | validation protocol for state file integrity
|
|
478
|
-
- reference: `~/.claude/ftm-state/archive/` | optional | archived prior state files
|
|
479
|
-
- tool: `git` | optional | checking git state drift since session was paused
|
|
480
|
-
|
|
481
|
-
## Risk
|
|
482
|
-
|
|
483
|
-
- level: low_write
|
|
484
|
-
- scope: archives STATE.md by moving it to ~/.claude/ftm-state/archive/; invokes the target ftm skill with restored context; does not modify project source files
|
|
485
|
-
- rollback: copy archived STATE.md back from archive if restoration was incorrect
|
|
486
|
-
|
|
487
|
-
## Approval Gates
|
|
488
|
-
|
|
489
|
-
- trigger: validation finds warnings (git drift, stale state, missing artifacts) | action: present consolidated validation summary and require user acknowledgment before proceeding
|
|
490
|
-
- trigger: validation finds block-level failure | action: stop and report failure; do not invoke target skill
|
|
491
|
-
- trigger: user provides new context along with "yes" | action: capture as post-pause update and inject into skill invocation
|
|
492
|
-
- complexity_routing: micro → auto | small → auto | medium → auto | large → auto | xl → auto
|
|
493
|
-
|
|
494
|
-
## Fallbacks
|
|
495
|
-
|
|
496
|
-
- condition: STATE.md not found | action: report "No saved ftm session found" with instructions for saving sessions
|
|
497
|
-
- condition: STATE.md frontmatter missing required fields | action: report validation failure with specific missing fields
|
|
498
|
-
- condition: multiple STATE.md files (STATE.md + STATE-*.md) | action: ask user which to resume, list each with skill type and timestamp
|
|
499
|
-
- condition: state is >7 days old | action: flag as potentially stale with warning, require user acknowledgment
|
|
500
|
-
|
|
501
|
-
## Capabilities
|
|
502
|
-
|
|
503
|
-
- cli: `git` | optional | branch and commit state validation
|
|
504
|
-
- env: none required
|
|
505
|
-
|
|
506
|
-
## Event Payloads
|
|
507
|
-
|
|
508
|
-
### session_resumed
|
|
509
|
-
- skill: string — "ftm-resume"
|
|
510
|
-
- resumed_skill: string — the ftm skill that was re-invoked
|
|
511
|
-
- phase: string — phase the session is resuming at
|
|
512
|
-
- state_age_hours: number — how long ago the session was paused
|
|
513
|
-
- post_pause_update: boolean — whether user provided new context
|
|
514
|
-
|
|
515
|
-
### task_completed
|
|
516
|
-
- skill: string — "ftm-resume"
|
|
517
|
-
- resumed_skill: string — the ftm skill re-invoked
|
|
518
|
-
- state_file_archived: string — path where STATE.md was archived
|
|
1
|
+
---
|
|
2
|
+
name: ftm-resume
|
|
3
|
+
description: Resume a previously paused ftm skill session from saved state. Use when user says "resume", "continue where we left off", "ftm resume", "pick up", or starts a new conversation wanting to continue previous ftm work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Events
|
|
7
|
+
|
|
8
|
+
### Emits
|
|
9
|
+
- `session_resumed` — when a saved session state has been validated and the appropriate ftm skill is re-invoked with restored context
|
|
10
|
+
- `task_completed` — when the resume workflow finishes (skill re-invoked and state file archived)
|
|
11
|
+
|
|
12
|
+
### Listens To
|
|
13
|
+
(none — ftm-resume is explicitly invoked by the user and does not respond to events)
|
|
14
|
+
|
|
15
|
+
# FTM Resume — Session State Restoration
|
|
16
|
+
|
|
17
|
+
Read a saved ftm session state file and seamlessly continue the workflow in a fresh conversation. The user should feel like they never left — same context, same decisions, same progress, picking up at exactly the right step.
|
|
18
|
+
|
|
19
|
+
## Why This Exists
|
|
20
|
+
|
|
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
|
+
|
|
23
|
+
## Step 1: Read the State File
|
|
24
|
+
|
|
25
|
+
Read `~/.claude/ftm-state/STATE.md`.
|
|
26
|
+
|
|
27
|
+
If the file doesn't exist:
|
|
28
|
+
```
|
|
29
|
+
No saved ftm session found at ~/.claude/ftm-state/STATE.md
|
|
30
|
+
|
|
31
|
+
To save a session mid-workflow, use /ftm-pause during any active ftm skill.
|
|
32
|
+
```
|
|
33
|
+
Stop here.
|
|
34
|
+
|
|
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
|
+
```
|
|
42
|
+
|
|
43
|
+
## Step 2: Parse the Frontmatter
|
|
44
|
+
|
|
45
|
+
Extract the YAML frontmatter fields:
|
|
46
|
+
|
|
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
|
+
```
|
|
113
|
+
|
|
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.
|
|
116
|
+
|
|
117
|
+
### Check 6: Staleness (all skills)
|
|
118
|
+
|
|
119
|
+
Calculate the age of the saved state:
|
|
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:
|
|
146
|
+
```
|
|
147
|
+
Resuming ftm-brainstorm session from {timestamp}
|
|
148
|
+
Project: {project_dir}
|
|
149
|
+
|
|
150
|
+
Where we left off:
|
|
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}
|
|
162
|
+
|
|
163
|
+
Next step:
|
|
164
|
+
{next_step from state file}
|
|
165
|
+
|
|
166
|
+
Ready to continue? (or type new context to add information before resuming)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### For ftm-executor:
|
|
170
|
+
```
|
|
171
|
+
Resuming ftm-executor session from {timestamp}
|
|
172
|
+
Project: {project_dir}
|
|
173
|
+
Plan: {plan_path}
|
|
174
|
+
|
|
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}
|
|
184
|
+
|
|
185
|
+
Next step:
|
|
186
|
+
{next_step from state file}
|
|
187
|
+
|
|
188
|
+
Ready to continue? (or type new context to add information before resuming)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### For ftm-debug:
|
|
192
|
+
```
|
|
193
|
+
Resuming ftm-debug war room from {timestamp}
|
|
194
|
+
Project: {project_dir}
|
|
195
|
+
|
|
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}
|
|
207
|
+
|
|
208
|
+
Next step:
|
|
209
|
+
{next_step from state file}
|
|
210
|
+
|
|
211
|
+
Ready to continue? (or type new context to add information before resuming)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### For ftm-council:
|
|
215
|
+
```
|
|
216
|
+
Resuming ftm-council session from {timestamp}
|
|
217
|
+
Project: {project_dir}
|
|
218
|
+
|
|
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}
|
|
227
|
+
|
|
228
|
+
Next step:
|
|
229
|
+
{next_step from state file}
|
|
230
|
+
|
|
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.
|
|
262
|
+
|
|
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}."
|
|
265
|
+
|
|
266
|
+
## Step 6: Invoke the Appropriate Panda Skill
|
|
267
|
+
|
|
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.
|
|
269
|
+
|
|
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:
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
RESUMING FROM SAVED STATE — DO NOT START FROM PHASE 0.
|
|
278
|
+
|
|
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.
|
|
314
|
+
|
|
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.}
|
|
335
|
+
|
|
336
|
+
{if post-pause update: POST-PAUSE UPDATE FROM USER: {new context}}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Then invoke `/ftm-executor {plan_path}` via the Skill tool.
|
|
340
|
+
|
|
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.}
|
|
374
|
+
|
|
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}
|
|
413
|
+
|
|
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.
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
mkdir -p ~/.claude/ftm-state/archive
|
|
436
|
+
mv ~/.claude/ftm-state/STATE.md ~/.claude/ftm-state/archive/STATE-$(date +%Y%m%d-%H%M%S).md
|
|
437
|
+
```
|
|
438
|
+
|
|
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.
|
|
440
|
+
|
|
441
|
+
## Edge Cases
|
|
442
|
+
|
|
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."
|
|
445
|
+
|
|
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.
|
|
448
|
+
|
|
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."
|
|
454
|
+
|
|
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:
|
|
457
|
+
```
|
|
458
|
+
No saved ftm session found.
|
|
459
|
+
|
|
460
|
+
To save a session for later:
|
|
461
|
+
1. Start any ftm skill (/ftm-brainstorm, /ftm-executor, /ftm-debug, /ftm-council, /ftm-audit)
|
|
462
|
+
2. When you need to stop, use /ftm-pause
|
|
463
|
+
3. In a new conversation, use /ftm-resume to continue
|
|
464
|
+
```
|
|
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
|
+
|
|
473
|
+
## Requirements
|
|
474
|
+
|
|
475
|
+
- reference: `~/.claude/ftm-state/STATE.md` | required | saved session state file from ftm-pause
|
|
476
|
+
- reference: `../ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md` | required | per-skill state field restoration instructions
|
|
477
|
+
- reference: `../ftm-pause/references/protocols/VALIDATION.md` | required | validation protocol for state file integrity
|
|
478
|
+
- reference: `~/.claude/ftm-state/archive/` | optional | archived prior state files
|
|
479
|
+
- tool: `git` | optional | checking git state drift since session was paused
|
|
480
|
+
|
|
481
|
+
## Risk
|
|
482
|
+
|
|
483
|
+
- level: low_write
|
|
484
|
+
- scope: archives STATE.md by moving it to ~/.claude/ftm-state/archive/; invokes the target ftm skill with restored context; does not modify project source files
|
|
485
|
+
- rollback: copy archived STATE.md back from archive if restoration was incorrect
|
|
486
|
+
|
|
487
|
+
## Approval Gates
|
|
488
|
+
|
|
489
|
+
- trigger: validation finds warnings (git drift, stale state, missing artifacts) | action: present consolidated validation summary and require user acknowledgment before proceeding
|
|
490
|
+
- trigger: validation finds block-level failure | action: stop and report failure; do not invoke target skill
|
|
491
|
+
- trigger: user provides new context along with "yes" | action: capture as post-pause update and inject into skill invocation
|
|
492
|
+
- complexity_routing: micro → auto | small → auto | medium → auto | large → auto | xl → auto
|
|
493
|
+
|
|
494
|
+
## Fallbacks
|
|
495
|
+
|
|
496
|
+
- condition: STATE.md not found | action: report "No saved ftm session found" with instructions for saving sessions
|
|
497
|
+
- condition: STATE.md frontmatter missing required fields | action: report validation failure with specific missing fields
|
|
498
|
+
- condition: multiple STATE.md files (STATE.md + STATE-*.md) | action: ask user which to resume, list each with skill type and timestamp
|
|
499
|
+
- condition: state is >7 days old | action: flag as potentially stale with warning, require user acknowledgment
|
|
500
|
+
|
|
501
|
+
## Capabilities
|
|
502
|
+
|
|
503
|
+
- cli: `git` | optional | branch and commit state validation
|
|
504
|
+
- env: none required
|
|
505
|
+
|
|
506
|
+
## Event Payloads
|
|
507
|
+
|
|
508
|
+
### session_resumed
|
|
509
|
+
- skill: string — "ftm-resume"
|
|
510
|
+
- resumed_skill: string — the ftm skill that was re-invoked
|
|
511
|
+
- phase: string — phase the session is resuming at
|
|
512
|
+
- state_age_hours: number — how long ago the session was paused
|
|
513
|
+
- post_pause_update: boolean — whether user provided new context
|
|
514
|
+
|
|
515
|
+
### task_completed
|
|
516
|
+
- skill: string — "ftm-resume"
|
|
517
|
+
- resumed_skill: string — the ftm skill re-invoked
|
|
518
|
+
- state_file_archived: string — path where STATE.md was archived
|