feed-the-machine 1.0.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 -0
- package/README.md +268 -0
- package/bin/generate-manifest.mjs +210 -0
- package/bin/install.mjs +114 -0
- package/ftm/SKILL.md +88 -0
- package/ftm-audit/SKILL.md +146 -0
- package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -0
- package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -0
- package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -0
- package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -0
- package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -0
- package/ftm-audit/scripts/run-knip.sh +23 -0
- package/ftm-audit.yml +2 -0
- package/ftm-brainstorm/SKILL.md +379 -0
- package/ftm-brainstorm/evals/evals.json +100 -0
- package/ftm-brainstorm/evals/promptfoo.yaml +109 -0
- package/ftm-brainstorm/references/agent-prompts.md +224 -0
- package/ftm-brainstorm/references/plan-template.md +121 -0
- package/ftm-brainstorm.yml +2 -0
- package/ftm-browse/SKILL.md +415 -0
- package/ftm-browse/daemon/browser-manager.ts +206 -0
- package/ftm-browse/daemon/bun.lock +30 -0
- package/ftm-browse/daemon/cli.ts +347 -0
- package/ftm-browse/daemon/commands.ts +410 -0
- package/ftm-browse/daemon/main.ts +357 -0
- package/ftm-browse/daemon/package.json +17 -0
- package/ftm-browse/daemon/server.ts +189 -0
- package/ftm-browse/daemon/snapshot.ts +519 -0
- package/ftm-browse/daemon/tsconfig.json +22 -0
- package/ftm-browse.yml +4 -0
- package/ftm-codex-gate/SKILL.md +302 -0
- package/ftm-codex-gate.yml +2 -0
- package/ftm-config/SKILL.md +310 -0
- package/ftm-config.default.yml +80 -0
- package/ftm-config.yml +2 -0
- package/ftm-council/SKILL.md +132 -0
- package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -0
- package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -0
- package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -0
- package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -0
- package/ftm-council/references/protocols/PREREQUISITES.md +47 -0
- package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -0
- package/ftm-council.yml +2 -0
- package/ftm-dashboard.yml +4 -0
- package/ftm-debug/SKILL.md +146 -0
- package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -0
- package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -0
- package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -0
- package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -0
- package/ftm-debug/references/protocols/BLACKBOARD.md +86 -0
- package/ftm-debug/references/protocols/EDGE-CASES.md +103 -0
- package/ftm-debug.yml +2 -0
- package/ftm-diagram/SKILL.md +233 -0
- package/ftm-diagram.yml +2 -0
- package/ftm-executor/SKILL.md +657 -0
- package/ftm-executor/references/STYLE-TEMPLATE.md +73 -0
- package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -0
- package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -0
- package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -0
- package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -0
- package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -0
- package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -0
- package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -0
- package/ftm-executor/references/protocols/MODEL-PROFILE.md +44 -0
- package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -0
- package/ftm-executor/runtime/ftm-runtime.mjs +252 -0
- package/ftm-executor/runtime/package.json +8 -0
- package/ftm-executor.yml +2 -0
- package/ftm-git/SKILL.md +195 -0
- package/ftm-git/evals/evals.json +26 -0
- package/ftm-git/evals/promptfoo.yaml +75 -0
- package/ftm-git/hooks/post-commit-experience.sh +92 -0
- package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -0
- package/ftm-git/references/protocols/REMEDIATION.md +139 -0
- package/ftm-git/scripts/pre-commit-secrets.sh +110 -0
- package/ftm-git.yml +2 -0
- package/ftm-intent/SKILL.md +198 -0
- package/ftm-intent.yml +2 -0
- package/ftm-map.yml +2 -0
- package/ftm-mind/SKILL.md +986 -0
- package/ftm-mind/evals/promptfoo.yaml +142 -0
- package/ftm-mind/references/blackboard-schema.md +328 -0
- package/ftm-mind/references/complexity-guide.md +110 -0
- package/ftm-mind/references/event-registry.md +299 -0
- package/ftm-mind/references/mcp-inventory.md +296 -0
- package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -0
- package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -0
- package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -0
- package/ftm-mind/references/reflexion-protocol.md +249 -0
- package/ftm-mind/references/routing/SCENARIOS.md +22 -0
- package/ftm-mind/references/routing-scenarios.md +35 -0
- package/ftm-mind.yml +2 -0
- package/ftm-pause/SKILL.md +133 -0
- package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -0
- package/ftm-pause/references/protocols/VALIDATION.md +80 -0
- package/ftm-pause.yml +2 -0
- package/ftm-researcher.yml +2 -0
- package/ftm-resume/SKILL.md +166 -0
- package/ftm-resume/references/protocols/VALIDATION.md +172 -0
- package/ftm-resume.yml +2 -0
- package/ftm-retro/SKILL.md +189 -0
- package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -0
- package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -0
- package/ftm-retro.yml +2 -0
- package/ftm-routine.yml +4 -0
- package/ftm-state/blackboard/context.json +23 -0
- package/ftm-state/blackboard/experiences/index.json +9 -0
- package/ftm-state/blackboard/patterns.json +6 -0
- package/ftm-state/schemas/context.schema.json +130 -0
- package/ftm-state/schemas/experience-index.schema.json +77 -0
- package/ftm-state/schemas/experience.schema.json +78 -0
- package/ftm-state/schemas/patterns.schema.json +44 -0
- package/ftm-upgrade/SKILL.md +153 -0
- package/ftm-upgrade/scripts/check-version.sh +76 -0
- package/ftm-upgrade/scripts/upgrade.sh +143 -0
- package/ftm-upgrade.yml +2 -0
- package/ftm.yml +2 -0
- package/install.sh +102 -0
- package/package.json +74 -0
- package/uninstall.sh +25 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Skill State Capture and Restoration Protocols
|
|
2
|
+
|
|
3
|
+
This document defines exactly what state must be captured (by ftm-pause) and restored (by ftm-resume) for each ftm skill. It is the shared contract between the two skills.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ftm-brainstorm
|
|
8
|
+
|
|
9
|
+
### State to Capture
|
|
10
|
+
|
|
11
|
+
**Phase tracking:**
|
|
12
|
+
- Current phase (0, 1, 2, or 3)
|
|
13
|
+
- If Phase 1: which round (1, 2, or 3), which path (A: Fresh Idea or B: Brain Dump)
|
|
14
|
+
- If Phase 2: how many research+challenge turns have been completed
|
|
15
|
+
- If Phase 3: which section of the plan has been presented (Vision, Tasks, Agents, or complete)
|
|
16
|
+
|
|
17
|
+
**Phase 0 context:**
|
|
18
|
+
- The full repo scan results (project type, tech stack, architecture, patterns, infrastructure, scale)
|
|
19
|
+
- Whether the scan was skipped (no git repo) and any stack info gathered from the user instead
|
|
20
|
+
|
|
21
|
+
**Phase 1 — Intake:**
|
|
22
|
+
- The user's original idea/request (verbatim if short, summarized if long)
|
|
23
|
+
- If Path B: the full brain dump extraction (decisions made, open questions, assumptions, contradictions, gaps)
|
|
24
|
+
- All user answers from each completed round
|
|
25
|
+
- Research Sprint 1 results (landscape context) — all findings from Web Researcher, GitHub Explorer, Competitive Analyst
|
|
26
|
+
- Research Sprint 2 results (constraint-scoped research) — all findings from all three agents
|
|
27
|
+
- If Path B: the novelty map (which claims are solved/partially solved/novel)
|
|
28
|
+
|
|
29
|
+
**Phase 2 — Research + Challenge Loop:**
|
|
30
|
+
- Every completed turn's 5 suggestions (or fewer if weak results) with evidence and links
|
|
31
|
+
- Every challenge posed and the user's response
|
|
32
|
+
- Every question asked and the user's answer
|
|
33
|
+
- Accumulated decisions and direction chosen
|
|
34
|
+
- Research agent results from each turn (summarized — full URLs and key findings, not raw agent output)
|
|
35
|
+
- The current "direction" the brainstorm is heading (architecture chosen, scope narrowed, etc.)
|
|
36
|
+
|
|
37
|
+
**Phase 3 — Plan Generation:**
|
|
38
|
+
- Which sections have been presented and approved (Vision, Tasks, Agents/Waves)
|
|
39
|
+
- The plan content generated so far
|
|
40
|
+
- The plan file path if it's been saved
|
|
41
|
+
- User feedback on each section
|
|
42
|
+
|
|
43
|
+
### Restoration Instructions
|
|
44
|
+
|
|
45
|
+
On resume, reload Phase 0 context into the project context register. Reload the full context register from Phase 2 state so the next research sprint does not re-search prior ground. Resume at exactly the turn number and phase detail captured — if the user was mid-Phase 2, the next action is a research sprint responding to their last answer.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## ftm-executor
|
|
50
|
+
|
|
51
|
+
### State to Capture
|
|
52
|
+
|
|
53
|
+
**Plan context:**
|
|
54
|
+
- Plan file path (absolute)
|
|
55
|
+
- Plan title and summary
|
|
56
|
+
- Total task count
|
|
57
|
+
- Agent team composition (agent names, roles, task assignments)
|
|
58
|
+
|
|
59
|
+
**Execution progress:**
|
|
60
|
+
- Current wave number
|
|
61
|
+
- For each task: status (pending / in-progress / complete / failed / blocked)
|
|
62
|
+
- For completed tasks: commit hashes, audit results (pass/fail/auto-fixed), brief summary of what was done
|
|
63
|
+
- For in-progress tasks: which agent is working on it, what's been done so far
|
|
64
|
+
- For failed/blocked tasks: what went wrong, error details
|
|
65
|
+
|
|
66
|
+
**Worktree state:**
|
|
67
|
+
- List of all worktree branches and their paths
|
|
68
|
+
- Which worktrees are active vs merged vs abandoned
|
|
69
|
+
- Any merge results or conflicts encountered
|
|
70
|
+
- The main/working branch name
|
|
71
|
+
|
|
72
|
+
**Verification state:**
|
|
73
|
+
- Post-task audit results for each completed task
|
|
74
|
+
- Any manual intervention items outstanding
|
|
75
|
+
- Full test suite status (last run result)
|
|
76
|
+
|
|
77
|
+
### Restoration Instructions
|
|
78
|
+
|
|
79
|
+
On resume, verify that all worktrees in the saved state still exist on disk (`git worktree list`). If any are missing, note them for the user before continuing. Resume from the current wave, skipping tasks already marked complete. If a task was in-progress, treat it as needing restart from the beginning of that task.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## ftm-debug
|
|
84
|
+
|
|
85
|
+
### State to Capture
|
|
86
|
+
|
|
87
|
+
**Problem context:**
|
|
88
|
+
- The original problem statement (symptom, expected behavior, what's been tried, when it started, reproduction steps)
|
|
89
|
+
- Codebase reconnaissance results (entry points, call graph, state flow, dependencies, recent changes, test coverage, config, error handling)
|
|
90
|
+
- The investigation plan (likely category, which agents deployed, worktree strategy)
|
|
91
|
+
|
|
92
|
+
**Phase 1 — Investigation results:**
|
|
93
|
+
- Instrumenter report: what was instrumented, log point locations, DEBUG-INSTRUMENTATION.md content
|
|
94
|
+
- Researcher report: findings with sources, relevance, solutions, confidence, RESEARCH-FINDINGS.md content
|
|
95
|
+
- Reproducer report: trigger command, consistency, boundaries, minimal test path, REPRODUCTION.md content
|
|
96
|
+
- Hypothesizer report: all hypotheses ranked with claims, mechanisms, code paths, evidence, HYPOTHESES.md content
|
|
97
|
+
|
|
98
|
+
**Phase 2 — Synthesis & Solve:**
|
|
99
|
+
- Cross-reference analysis (how findings align or conflict)
|
|
100
|
+
- Recommended fix approach
|
|
101
|
+
- Solver attempts: which hypotheses tried, what was implemented, commit hashes
|
|
102
|
+
- FIX-SUMMARY.md content if fix was applied
|
|
103
|
+
|
|
104
|
+
**Phase 3 — Review & Verify:**
|
|
105
|
+
- Reviewer verdict (APPROVED / APPROVED WITH CHANGES / NEEDS REWORK)
|
|
106
|
+
- REVIEW-VERDICT.md content
|
|
107
|
+
- How many solver-reviewer iterations completed
|
|
108
|
+
- Outstanding issues from review
|
|
109
|
+
|
|
110
|
+
**Worktree state:**
|
|
111
|
+
- debug-instrumentation branch and path
|
|
112
|
+
- debug-reproduction branch and path
|
|
113
|
+
- debug-fix branch and path (including any fix attempt sub-branches)
|
|
114
|
+
- Which worktrees still exist vs cleaned up
|
|
115
|
+
|
|
116
|
+
### Restoration Instructions
|
|
117
|
+
|
|
118
|
+
On resume, verify debug worktrees still exist. Re-read any artifact files referenced in the state (HYPOTHESES.md, REPRODUCTION.md, etc.) to reload their content into context. Resume at the exact phase captured — if mid-Phase 2, proceed to the next solver iteration using the saved hypotheses and prior solver attempts.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## ftm-council
|
|
123
|
+
|
|
124
|
+
### State to Capture
|
|
125
|
+
|
|
126
|
+
**Council setup:**
|
|
127
|
+
- The council prompt (the framed problem statement)
|
|
128
|
+
- Whether the user confirmed/edited the prompt
|
|
129
|
+
- Prerequisites check result (codex and gemini available?)
|
|
130
|
+
|
|
131
|
+
**Deliberation state:**
|
|
132
|
+
- Current round number (1-5)
|
|
133
|
+
- For each completed round, each model's full response:
|
|
134
|
+
- Research summary (what files examined, what was found)
|
|
135
|
+
- Position (their stance)
|
|
136
|
+
- Reasoning (with code references)
|
|
137
|
+
- Concerns
|
|
138
|
+
- Confidence level
|
|
139
|
+
- For rebuttal rounds: each model's updated position, new evidence, responses to other models, remaining disagreements
|
|
140
|
+
- Alignment analysis after each round (agreement areas, divergence points, different research paths, majority forming?)
|
|
141
|
+
|
|
142
|
+
**Outcome:**
|
|
143
|
+
- Whether consensus has been reached (and if so, which 2 models agreed)
|
|
144
|
+
- The verdict if delivered (decision, agreed by, dissent, evidence basis)
|
|
145
|
+
- If no consensus after 5 rounds: the synthesis and options presented
|
|
146
|
+
|
|
147
|
+
### Restoration Instructions
|
|
148
|
+
|
|
149
|
+
On resume, re-present the council prompt and the round history as a summary before continuing. If consensus was already reached, surface the verdict and ask the user what they want next. If still in deliberation, resume with the next model dispatch using full prior-round context.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## ftm-audit
|
|
154
|
+
|
|
155
|
+
### State to Capture
|
|
156
|
+
|
|
157
|
+
**Trigger context:**
|
|
158
|
+
- What triggered the audit (manual invocation, post-task from executor, specific files/scope)
|
|
159
|
+
- Scope (full project, specific files, specific task's changes)
|
|
160
|
+
|
|
161
|
+
**Phase 0 — Project patterns:**
|
|
162
|
+
- Detected framework, router, state management, API layer, build tool
|
|
163
|
+
- Active dimensions (D1-D5) and their configuration
|
|
164
|
+
- Any unusual patterns noted
|
|
165
|
+
|
|
166
|
+
**Layer 1 — knip results:**
|
|
167
|
+
- Full knip output (categorized: unused files, unused exports, unused deps, unlisted deps, unresolved imports)
|
|
168
|
+
- Each finding with file:line
|
|
169
|
+
|
|
170
|
+
**Layer 2 — Adversarial audit results:**
|
|
171
|
+
- Each finding with type, location, evidence, and which dimension failed
|
|
172
|
+
- Wiring contract checks if applicable (which checks passed, which failed)
|
|
173
|
+
|
|
174
|
+
**Layer 3 — Auto-fix results:**
|
|
175
|
+
- Fixes applied (finding, fix description, verification result)
|
|
176
|
+
- Manual intervention items (finding, reason auto-fix skipped, suggested action)
|
|
177
|
+
- Re-verification results
|
|
178
|
+
- Current iteration count (of max 3)
|
|
179
|
+
|
|
180
|
+
**Final status:**
|
|
181
|
+
- PASS or FAIL
|
|
182
|
+
- Remaining issues count and details
|
|
183
|
+
|
|
184
|
+
### Restoration Instructions
|
|
185
|
+
|
|
186
|
+
On resume, skip any layers already completed. If mid-Layer 3 auto-fix loop, restore the iteration count and continue from where it left off. If the final status was PASS, surface the result and confirm with the user before doing anything further.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# State Validation Logic
|
|
2
|
+
|
|
3
|
+
This document defines all validation checks performed before and after writing state to disk.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Pre-Write Validation
|
|
8
|
+
|
|
9
|
+
Before writing `~/.claude/ftm-state/STATE.md`, verify the following:
|
|
10
|
+
|
|
11
|
+
### Skill Detection Confirmed
|
|
12
|
+
|
|
13
|
+
- A ftm skill was positively identified from the conversation context
|
|
14
|
+
- If no skill detected: halt and tell the user "No active ftm session detected" — do not write a blank or partial state file
|
|
15
|
+
|
|
16
|
+
### Required Frontmatter Fields Present
|
|
17
|
+
|
|
18
|
+
The YAML frontmatter block must contain:
|
|
19
|
+
- `skill` — one of: ftm-brainstorm, ftm-executor, ftm-debug, ftm-council, ftm-audit
|
|
20
|
+
- `phase` — the current phase number or stage name for that skill
|
|
21
|
+
- `phase_detail` — a human-readable one-liner about exactly where the session stopped
|
|
22
|
+
- `timestamp` — ISO 8601 format (YYYY-MM-DDThh:mm:ss)
|
|
23
|
+
- `project_dir` — absolute path to the working directory
|
|
24
|
+
|
|
25
|
+
Git fields (`git_branch`, `git_commit`) are required only if a git repo is present. If no repo, omit them rather than leaving them blank.
|
|
26
|
+
|
|
27
|
+
### State File Contains Actual Content
|
|
28
|
+
|
|
29
|
+
- "Next Step" section must be specific and actionable — not a placeholder like "[describe next step]"
|
|
30
|
+
- Decisions Made section must reflect real decisions from the conversation, not template text
|
|
31
|
+
- If the session was very early (e.g., Phase 0 only), the "Captured" summary should say so explicitly
|
|
32
|
+
|
|
33
|
+
### Artifacts Verified
|
|
34
|
+
|
|
35
|
+
For each artifact path listed in the state file:
|
|
36
|
+
- The file must exist on disk at the recorded path
|
|
37
|
+
- If an artifact path is stale (file was deleted or moved), note it with `[NOT FOUND]` rather than silently omitting it
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Post-Write Validation
|
|
42
|
+
|
|
43
|
+
After writing the state file, verify:
|
|
44
|
+
|
|
45
|
+
### File Was Written Successfully
|
|
46
|
+
|
|
47
|
+
- The state file exists at `~/.claude/ftm-state/STATE.md`
|
|
48
|
+
- File size is non-zero
|
|
49
|
+
- The frontmatter block is parseable (starts with `---`, contains required keys)
|
|
50
|
+
|
|
51
|
+
### State Is Resumable
|
|
52
|
+
|
|
53
|
+
The written state must pass the "cold start test": a fresh conversation with no prior context should be able to reconstruct the session from the state file alone, without needing to ask the user "where were we?" Concretely:
|
|
54
|
+
- The skill and phase are unambiguous
|
|
55
|
+
- The Next Step section tells ftm-resume exactly what action to take first
|
|
56
|
+
- Enough prior context is captured that the first response after resume won't require re-explaining the project
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Edge Case Handling
|
|
61
|
+
|
|
62
|
+
### Multiple Skills Active
|
|
63
|
+
|
|
64
|
+
If two ftm skills were invoked in the same conversation (e.g., brainstorm followed by executor), save the most recently active one to `STATE.md`. Save the other to `STATE-[skill].md` in the same directory. Both files go through the same validation.
|
|
65
|
+
|
|
66
|
+
### Overwriting Existing State
|
|
67
|
+
|
|
68
|
+
Overwrite `STATE.md` without prompting. The previous state was either already resumed and consumed, or abandoned. Validation still applies to the new file.
|
|
69
|
+
|
|
70
|
+
### No Git Repo
|
|
71
|
+
|
|
72
|
+
Skip `git_branch` and `git_commit` fields entirely. Record only `project_dir`. Do not write empty string values for these fields — omit them from the frontmatter block.
|
|
73
|
+
|
|
74
|
+
### Very Early Session (Phase 0 or Step 1 Only)
|
|
75
|
+
|
|
76
|
+
Capture whatever exists. Even a Phase 0 repo scan is worth saving. The "Next Step" section should note that the user needs to answer the first intake question. This passes validation — sparse state is valid state.
|
|
77
|
+
|
|
78
|
+
### Large State Files
|
|
79
|
+
|
|
80
|
+
Do not truncate. Some sessions accumulate substantial state — 8+ brainstorm turns with full research results, or an executor session with 20+ tasks. The state file can be large. Completeness is required for reliable restoration.
|
package/ftm-pause.yml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
name: ftm-pause
|
|
2
|
+
description: Save the current ftm skill session state so work can be resumed in a new conversation. Use when user says "pause", "save state", "I need to stop", "continue later", "ftm pause", "save progress", or is about to end a session mid-workflow. Works with any ftm skill (brainstorm, executor, debug, council, audit).
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
name: ftm-researcher
|
|
2
|
+
description: Deep parallel research engine with 7 domain-specialized finder agents, adversarial review via ftm-council, adaptive wave-based search, and codebase awareness. Use when the user wants thorough research on any topic — "research X", "find out about Y", "what's the state of the art on Z", "compare approaches to W", "deep dive into X", "look into Y". Also invoked by ftm-brainstorm for its research sprints. Triggers on "research", "investigate", "deep dive", "state of the art", "compare", "find examples of", "what's out there for", "how do others handle", "find me evidence", "look into". For idea exploration and brainstorming, use ftm-brainstorm instead (which calls ftm-researcher internally for research).
|
|
@@ -0,0 +1,166 @@
|
|
|
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
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 1: Read and Validate
|
|
26
|
+
|
|
27
|
+
Read `~/.claude/ftm-state/STATE.md`.
|
|
28
|
+
|
|
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
|
|
39
|
+
|
|
40
|
+
Present a consolidated validation summary before asking the user to confirm. A single block-level failure prevents resumption. Warnings require user acknowledgment.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Step 2: Parse the Frontmatter
|
|
45
|
+
|
|
46
|
+
Extract required YAML frontmatter: `skill`, `phase`, `timestamp`, `project_dir`. Optional fields: `phase_detail`, `git_branch`, `git_commit`.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Step 3: Present the Resume Summary
|
|
51
|
+
|
|
52
|
+
After validation passes (or the user acknowledges warnings), present the resume summary for the relevant skill.
|
|
53
|
+
|
|
54
|
+
All summaries follow this structure — adapt the "Where we left off" fields to the skill:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Resuming ftm-{skill} session from {timestamp}
|
|
58
|
+
Project: {project_dir}
|
|
59
|
+
|
|
60
|
+
Where we left off:
|
|
61
|
+
[skill-specific fields — see below]
|
|
62
|
+
|
|
63
|
+
Next step:
|
|
64
|
+
{next_step from state file}
|
|
65
|
+
|
|
66
|
+
Ready to continue? (or type new context to add before resuming)
|
|
67
|
+
```
|
|
68
|
+
|
|
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)
|
|
73
|
+
|
|
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}
|
|
78
|
+
|
|
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}
|
|
83
|
+
|
|
84
|
+
**ftm-council fields:**
|
|
85
|
+
- Council prompt: {brief summary}, Round: {N} of 5
|
|
86
|
+
- Each model's one-line position, Consensus: {Yes/No + detail}
|
|
87
|
+
|
|
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}
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Step 4: Handle User Response
|
|
96
|
+
|
|
97
|
+
**"Yes" / "Continue" / "Go"** — proceed to Step 5.
|
|
98
|
+
|
|
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.
|
|
100
|
+
|
|
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}."
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Step 5: Invoke the Appropriate FTM Skill
|
|
106
|
+
|
|
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.
|
|
108
|
+
|
|
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).
|
|
110
|
+
|
|
111
|
+
### Context preamble pattern:
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
RESUMING FROM SAVED STATE — DO NOT START FROM PHASE 0.
|
|
115
|
+
|
|
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.]
|
|
118
|
+
|
|
119
|
+
NEXT STEP: {paste next_step from state file — this is where execution picks up}
|
|
120
|
+
|
|
121
|
+
{if post-pause update: POST-PAUSE UPDATE FROM USER: {new context}}
|
|
122
|
+
```
|
|
123
|
+
|
|
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`
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Step 6: Archive the State File
|
|
134
|
+
|
|
135
|
+
After the skill has been successfully invoked, archive the consumed state file immediately:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
mkdir -p ~/.claude/ftm-state/archive
|
|
139
|
+
mv ~/.claude/ftm-state/STATE.md ~/.claude/ftm-state/archive/STATE-$(date +%Y%m%d-%H%M%S).md
|
|
140
|
+
```
|
|
141
|
+
|
|
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
|
+
---
|
|
145
|
+
|
|
146
|
+
## Edge Cases
|
|
147
|
+
|
|
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.
|
|
149
|
+
|
|
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.
|
|
151
|
+
|
|
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).
|
|
157
|
+
|
|
158
|
+
**Nothing to resume** — If `~/.claude/ftm-state/` doesn't exist or contains no STATE.md:
|
|
159
|
+
```
|
|
160
|
+
No saved ftm session found.
|
|
161
|
+
|
|
162
|
+
To save a session for later:
|
|
163
|
+
1. Start any ftm skill (/ftm-brainstorm, /ftm-executor, /ftm-debug, /ftm-council, /ftm-audit)
|
|
164
|
+
2. When you need to stop, use /ftm-pause
|
|
165
|
+
3. In a new conversation, use /ftm-resume to continue
|
|
166
|
+
```
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Resume Validation Protocols
|
|
2
|
+
|
|
3
|
+
Before attempting to restore a session, run these environment checks. Each check either passes, warns, or blocks resumption.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Check 1: State File Integrity
|
|
8
|
+
|
|
9
|
+
Read `~/.claude/ftm-state/STATE.md`.
|
|
10
|
+
|
|
11
|
+
**File missing:**
|
|
12
|
+
```
|
|
13
|
+
No saved ftm session found at ~/.claude/ftm-state/STATE.md
|
|
14
|
+
|
|
15
|
+
To save a session mid-workflow, use /ftm-pause during any active ftm skill.
|
|
16
|
+
```
|
|
17
|
+
Stop here.
|
|
18
|
+
|
|
19
|
+
**File exists but unparseable (missing frontmatter, malformed YAML):**
|
|
20
|
+
```
|
|
21
|
+
Found state file but it appears corrupted — missing required frontmatter fields.
|
|
22
|
+
Expected fields: skill, phase, timestamp, project_dir
|
|
23
|
+
|
|
24
|
+
Would you like me to try to extract what I can from the file, or should we start fresh?
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Required frontmatter fields:**
|
|
28
|
+
|
|
29
|
+
| Field | Required | Purpose |
|
|
30
|
+
|-------|----------|---------|
|
|
31
|
+
| `skill` | Yes | Which ftm skill to resume |
|
|
32
|
+
| `phase` | Yes | Which phase the skill was in |
|
|
33
|
+
| `phase_detail` | No | Human-readable position within phase |
|
|
34
|
+
| `timestamp` | Yes | When the session was saved |
|
|
35
|
+
| `project_dir` | Yes | Project directory the session was working in |
|
|
36
|
+
| `git_branch` | No | Git branch at time of save |
|
|
37
|
+
| `git_commit` | No | HEAD commit at time of save |
|
|
38
|
+
|
|
39
|
+
**Incomplete state (missing critical sections — no "Next Step," no "Context Snapshot"):**
|
|
40
|
+
|
|
41
|
+
Warn: "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."
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Check 2: Version Compatibility
|
|
46
|
+
|
|
47
|
+
If the state file has a `ftm_version` field, compare it to the installed skill version.
|
|
48
|
+
|
|
49
|
+
- **Same version**: Pass.
|
|
50
|
+
- **Minor version difference**: Warn. "This state was saved with an older version of ftm. The workflow may behave slightly differently, but resumption should work."
|
|
51
|
+
- **Major version difference**: Block with explanation. "This state was saved with ftm v{N}, but the installed version is v{M}. Major version changes may have altered skill structure. Resuming could produce unexpected behavior. Recommend starting fresh."
|
|
52
|
+
- **No version field**: Proceed without warning (pre-versioning state files are assumed compatible).
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Check 3: Project Directory
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
test -d "{project_dir}" && echo "EXISTS" || echo "MISSING"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- **EXISTS**: Pass. Continue.
|
|
63
|
+
- **MISSING**: Block. "The project directory `{project_dir}` no longer exists. Cannot resume — the codebase isn't available. Did the project move?"
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Check 4: Git State (if git fields present)
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
cd "{project_dir}" && git branch --show-current && git rev-parse --short HEAD
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Compare current branch and commit against saved values.
|
|
74
|
+
|
|
75
|
+
- **Same branch, same commit**: Pass — nothing changed.
|
|
76
|
+
- **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 if the user wants to continue anyway or review changes first.
|
|
77
|
+
- **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}`?"
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Check 5: Worktree Branches (executor and debug only)
|
|
82
|
+
|
|
83
|
+
If the state file references worktree branches:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
cd "{project_dir}" && git worktree list
|
|
87
|
+
git branch --list "plan-exec/*" "debug/*"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- **All referenced branches exist**: Pass.
|
|
91
|
+
- **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."
|
|
92
|
+
- **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."
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Check 6: Plan File (executor only)
|
|
97
|
+
|
|
98
|
+
If the state references a plan file:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
test -f "{plan_path}" && echo "EXISTS" || echo "MISSING"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- **EXISTS**: Pass.
|
|
105
|
+
- **MISSING**: Block. "The plan file `{plan_path}` no longer exists. Cannot resume executor without a plan. Do you have the plan elsewhere?"
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Check 7: Artifact Files (debug only)
|
|
110
|
+
|
|
111
|
+
Check for any referenced artifact files (RESEARCH-FINDINGS.md, HYPOTHESES.md, REPRODUCTION.md, etc.):
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
for f in {artifact_paths}; do test -f "$f" && echo "$f: EXISTS" || echo "$f: MISSING"; done
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- **All exist**: Pass.
|
|
118
|
+
- **Some missing**: Warn. The state file should contain the key content from these files, so they're reconstructible. Note which are missing.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Check 8: Staleness
|
|
123
|
+
|
|
124
|
+
Calculate the age of the saved state by comparing the `timestamp` field to the current time.
|
|
125
|
+
|
|
126
|
+
- **< 24 hours**: Fresh. No warning needed.
|
|
127
|
+
- **1–7 days**: Mild staleness. Note and proceed: "This session is {N} days old. The codebase may have changed — check the git log above."
|
|
128
|
+
- **> 7 days**: Present staleness options explicitly:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
This session was saved 12 days ago. The codebase has likely changed significantly.
|
|
132
|
+
|
|
133
|
+
Options:
|
|
134
|
+
1. Resume anyway — use the saved context but some references may be outdated
|
|
135
|
+
2. Resume with a fresh repo scan — re-run Phase 0 to update project context, then
|
|
136
|
+
continue from where you left off
|
|
137
|
+
3. Start fresh — discard this state and begin a new session
|
|
138
|
+
|
|
139
|
+
Which would you prefer?
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
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. Merge the new scan with the saved state — keeping all decisions, answers, and progress but updating the project context.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Check 9: Skill Availability
|
|
147
|
+
|
|
148
|
+
If the state says `skill: ftm-debug` but that skill isn't in the skills directory:
|
|
149
|
+
|
|
150
|
+
"The saved session requires ftm-{skill} but that skill isn't available. Install it and try again."
|
|
151
|
+
|
|
152
|
+
Block resumption.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Validation Summary
|
|
157
|
+
|
|
158
|
+
Run all applicable checks in order. Present a consolidated summary before asking the user to confirm:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Validation complete:
|
|
162
|
+
✓ State file: valid
|
|
163
|
+
✓ Project directory: exists
|
|
164
|
+
✓ Git state: same branch, 2 new commits (show log)
|
|
165
|
+
⚠ Worktrees: plan-exec/task-3 missing
|
|
166
|
+
✓ Plan file: exists
|
|
167
|
+
✓ Session age: 6 hours
|
|
168
|
+
|
|
169
|
+
1 warning. Ready to resume? (or review warnings first)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
A single block-level failure prevents resumption. Warnings require user acknowledgment before proceeding.
|
package/ftm-resume.yml
ADDED