feed-the-machine 1.5.1 → 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.
Files changed (224) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/generate-manifest.mjs +463 -463
  4. package/bin/install.mjs +491 -491
  5. package/docs/HOOKS.md +243 -243
  6. package/docs/INBOX.md +233 -233
  7. package/ftm/SKILL.md +122 -122
  8. package/ftm-audit/SKILL.md +623 -623
  9. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  10. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  11. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  12. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  13. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  14. package/ftm-audit/scripts/run-knip.sh +23 -23
  15. package/ftm-audit.yml +2 -2
  16. package/ftm-brainstorm/SKILL.md +498 -498
  17. package/ftm-brainstorm/evals/evals.json +100 -100
  18. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  19. package/ftm-brainstorm/references/agent-prompts.md +224 -224
  20. package/ftm-brainstorm/references/plan-template.md +121 -121
  21. package/ftm-brainstorm.yml +2 -2
  22. package/ftm-browse/SKILL.md +454 -454
  23. package/ftm-browse/daemon/browser-manager.ts +206 -206
  24. package/ftm-browse/daemon/bun.lock +30 -30
  25. package/ftm-browse/daemon/cli.ts +347 -347
  26. package/ftm-browse/daemon/commands.ts +410 -410
  27. package/ftm-browse/daemon/main.ts +357 -357
  28. package/ftm-browse/daemon/package.json +17 -17
  29. package/ftm-browse/daemon/server.ts +189 -189
  30. package/ftm-browse/daemon/snapshot.ts +519 -519
  31. package/ftm-browse/daemon/tsconfig.json +22 -22
  32. package/ftm-browse.yml +4 -4
  33. package/ftm-capture/SKILL.md +370 -370
  34. package/ftm-capture.yml +4 -4
  35. package/ftm-codex-gate/SKILL.md +361 -361
  36. package/ftm-codex-gate.yml +2 -2
  37. package/ftm-config/SKILL.md +345 -345
  38. package/ftm-config.default.yml +82 -80
  39. package/ftm-config.yml +2 -2
  40. package/ftm-council/SKILL.md +416 -416
  41. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  42. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  43. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  44. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  45. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  46. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  47. package/ftm-council.yml +2 -2
  48. package/ftm-dashboard/SKILL.md +163 -163
  49. package/ftm-dashboard.yml +4 -4
  50. package/ftm-debug/SKILL.md +1037 -1037
  51. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  52. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  53. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  54. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  55. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  56. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  57. package/ftm-debug.yml +2 -2
  58. package/ftm-diagram/SKILL.md +277 -277
  59. package/ftm-diagram.yml +2 -2
  60. package/ftm-executor/SKILL.md +777 -775
  61. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  62. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  63. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  64. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  65. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  66. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  67. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  68. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  69. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
  70. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  71. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  72. package/ftm-executor/runtime/package.json +8 -8
  73. package/ftm-executor.yml +2 -2
  74. package/ftm-git/SKILL.md +441 -441
  75. package/ftm-git/evals/evals.json +26 -26
  76. package/ftm-git/evals/promptfoo.yaml +75 -75
  77. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  78. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  79. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  80. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  81. package/ftm-git.yml +2 -2
  82. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  83. package/ftm-inbox/backend/adapters/base.py +230 -230
  84. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  85. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  86. package/ftm-inbox/backend/adapters/jira.py +136 -136
  87. package/ftm-inbox/backend/adapters/registry.py +192 -192
  88. package/ftm-inbox/backend/adapters/slack.py +110 -110
  89. package/ftm-inbox/backend/db/connection.py +54 -54
  90. package/ftm-inbox/backend/db/schema.py +78 -78
  91. package/ftm-inbox/backend/executor/__init__.py +7 -7
  92. package/ftm-inbox/backend/executor/engine.py +149 -149
  93. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  94. package/ftm-inbox/backend/main.py +103 -103
  95. package/ftm-inbox/backend/models/__init__.py +1 -1
  96. package/ftm-inbox/backend/models/unified_task.py +36 -36
  97. package/ftm-inbox/backend/planner/__init__.py +6 -6
  98. package/ftm-inbox/backend/planner/generator.py +127 -127
  99. package/ftm-inbox/backend/planner/schema.py +34 -34
  100. package/ftm-inbox/backend/requirements.txt +5 -5
  101. package/ftm-inbox/backend/routes/execute.py +186 -186
  102. package/ftm-inbox/backend/routes/health.py +52 -52
  103. package/ftm-inbox/backend/routes/inbox.py +68 -68
  104. package/ftm-inbox/backend/routes/plan.py +271 -271
  105. package/ftm-inbox/bin/launchagent.mjs +91 -91
  106. package/ftm-inbox/bin/setup.mjs +188 -188
  107. package/ftm-inbox/bin/start.sh +10 -10
  108. package/ftm-inbox/bin/status.sh +17 -17
  109. package/ftm-inbox/bin/stop.sh +8 -8
  110. package/ftm-inbox/config.example.yml +55 -55
  111. package/ftm-inbox/package-lock.json +2898 -2898
  112. package/ftm-inbox/package.json +26 -26
  113. package/ftm-inbox/postcss.config.js +6 -6
  114. package/ftm-inbox/src/app.css +199 -199
  115. package/ftm-inbox/src/app.html +18 -18
  116. package/ftm-inbox/src/lib/api.ts +166 -166
  117. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  118. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  119. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  120. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  121. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  122. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  123. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  124. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  125. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  126. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  127. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  128. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  129. package/ftm-inbox/src/lib/theme.ts +47 -47
  130. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  131. package/ftm-inbox/src/routes/+page.svelte +401 -401
  132. package/ftm-inbox/svelte.config.js +12 -12
  133. package/ftm-inbox/tailwind.config.ts +63 -63
  134. package/ftm-inbox/tsconfig.json +13 -13
  135. package/ftm-inbox/vite.config.ts +6 -6
  136. package/ftm-intent/SKILL.md +241 -241
  137. package/ftm-intent.yml +2 -2
  138. package/ftm-manifest.json +3794 -3794
  139. package/ftm-map/SKILL.md +291 -291
  140. package/ftm-map/scripts/db.py +712 -712
  141. package/ftm-map/scripts/index.py +415 -415
  142. package/ftm-map/scripts/parser.py +224 -224
  143. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  144. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  145. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  146. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  147. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  148. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  149. package/ftm-map/scripts/query.py +301 -301
  150. package/ftm-map/scripts/ranker.py +377 -377
  151. package/ftm-map/scripts/requirements.txt +5 -5
  152. package/ftm-map/scripts/setup-hooks.sh +27 -27
  153. package/ftm-map/scripts/setup.sh +56 -56
  154. package/ftm-map/scripts/test_db.py +364 -364
  155. package/ftm-map/scripts/test_parser.py +174 -174
  156. package/ftm-map/scripts/test_query.py +183 -183
  157. package/ftm-map/scripts/test_ranker.py +199 -199
  158. package/ftm-map/scripts/views.py +591 -591
  159. package/ftm-map.yml +2 -2
  160. package/ftm-mind/SKILL.md +1943 -1943
  161. package/ftm-mind/evals/promptfoo.yaml +142 -142
  162. package/ftm-mind/references/blackboard-schema.md +328 -328
  163. package/ftm-mind/references/complexity-guide.md +110 -110
  164. package/ftm-mind/references/event-registry.md +319 -319
  165. package/ftm-mind/references/mcp-inventory.md +296 -296
  166. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  167. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  168. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  169. package/ftm-mind/references/reflexion-protocol.md +249 -249
  170. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  171. package/ftm-mind/references/routing-scenarios.md +35 -35
  172. package/ftm-mind.yml +2 -2
  173. package/ftm-pause/SKILL.md +395 -395
  174. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  175. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  176. package/ftm-pause.yml +2 -2
  177. package/ftm-researcher/SKILL.md +275 -275
  178. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  179. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  180. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  181. package/ftm-researcher/references/adaptive-search.md +116 -116
  182. package/ftm-researcher/references/agent-prompts.md +193 -193
  183. package/ftm-researcher/references/council-integration.md +193 -193
  184. package/ftm-researcher/references/output-format.md +203 -203
  185. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  186. package/ftm-researcher/scripts/score_credibility.py +234 -234
  187. package/ftm-researcher/scripts/validate_research.py +92 -92
  188. package/ftm-researcher.yml +2 -2
  189. package/ftm-resume/SKILL.md +518 -518
  190. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  191. package/ftm-resume.yml +2 -2
  192. package/ftm-retro/SKILL.md +380 -380
  193. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  194. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  195. package/ftm-retro.yml +2 -2
  196. package/ftm-routine/SKILL.md +170 -170
  197. package/ftm-routine.yml +4 -4
  198. package/ftm-state/blackboard/capabilities.json +5 -5
  199. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  200. package/ftm-state/blackboard/context.json +23 -23
  201. package/ftm-state/blackboard/experiences/index.json +9 -9
  202. package/ftm-state/blackboard/patterns.json +6 -6
  203. package/ftm-state/schemas/context.schema.json +130 -130
  204. package/ftm-state/schemas/experience-index.schema.json +77 -77
  205. package/ftm-state/schemas/experience.schema.json +78 -78
  206. package/ftm-state/schemas/patterns.schema.json +44 -44
  207. package/ftm-upgrade/SKILL.md +194 -194
  208. package/ftm-upgrade/scripts/check-version.sh +76 -76
  209. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  210. package/ftm-upgrade.yml +2 -2
  211. package/ftm-verify.yml +2 -2
  212. package/ftm.yml +2 -2
  213. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  214. package/hooks/ftm-discovery-reminder.sh +90 -90
  215. package/hooks/ftm-drafts-gate.sh +61 -61
  216. package/hooks/ftm-event-logger.mjs +107 -107
  217. package/hooks/ftm-map-autodetect.sh +79 -79
  218. package/hooks/ftm-pending-sync-check.sh +22 -22
  219. package/hooks/ftm-plan-gate.sh +92 -92
  220. package/hooks/ftm-post-commit-trigger.sh +57 -57
  221. package/hooks/settings-template.json +81 -81
  222. package/install.sh +363 -363
  223. package/package.json +84 -84
  224. package/uninstall.sh +25 -25
@@ -1,345 +1,345 @@
1
- ---
2
- name: ftm-config
3
- description: Configure ftm skill settings including model profiles, execution preferences, and defaults. Use when user says "ftm config", "ftm settings", "set ftm profile", "ftm model", or wants to change how ftm skills behave.
4
- ---
5
-
6
- ## Events
7
-
8
- ### Emits
9
- - `task_completed` — when a configuration change is validated, saved, and confirmed to the user
10
-
11
- ### Listens To
12
- (none — ftm-config is explicitly invoked by the user and does not respond to events)
13
-
14
- # FTM Config
15
-
16
- Manage configuration for all ftm skills, including model profiles, execution preferences, and session settings.
17
-
18
- ## Config File Location
19
-
20
- `~/.claude/ftm-config.yml`
21
-
22
- This is the single source of truth for all ftm skill behavior. Every ftm skill reads from this file at startup.
23
-
24
- ## Config Schema
25
-
26
- ```yaml
27
- # FTM Skills Configuration
28
- # Edit this file or use /ftm-config to modify settings
29
-
30
- # Model profiles control which model is used at each stage
31
- # Options: opus, sonnet, haiku, inherit (use session default)
32
- profile: balanced # quality | balanced | budget | custom | inherit
33
-
34
- profiles:
35
- quality:
36
- planning: opus # brainstorm, research, plan generation
37
- execution: opus # agent task implementation
38
- review: sonnet # audit, debug review, council synthesis
39
-
40
- balanced:
41
- planning: opus
42
- execution: sonnet
43
- review: sonnet
44
-
45
- budget:
46
- planning: sonnet
47
- execution: sonnet
48
- review: haiku
49
-
50
- inherit:
51
- planning: inherit
52
- execution: inherit
53
- review: inherit
54
-
55
- custom:
56
- planning: opus
57
- execution: sonnet
58
- review: haiku
59
-
60
- # Execution preferences
61
- execution:
62
- max_parallel_agents: 5 # max agents dispatched simultaneously
63
- auto_audit: true # run ftm-audit after each executor task
64
- progress_tracking: true # write PROGRESS.md during execution
65
-
66
- # Session management
67
- session:
68
- auto_pause_on_exit: false # automatically save state when conversation ends
69
- state_retention_days: 7 # archive states older than this
70
- ```
71
-
72
- ## Instructions
73
-
74
- ### Step 1: Read Current Config
75
-
76
- Read `~/.claude/ftm-config.yml`. If it does not exist, create it with the default configuration (balanced profile active, all defaults as shown in the schema above). Use the file-creator pattern or Write tool to create the file.
77
-
78
- ### Step 2: Determine Intent
79
-
80
- Parse the user's input to determine what they want:
81
-
82
- - **No arguments** (bare `/ftm-config`): Display current configuration.
83
- - **`set profile <name>`**: Change the active profile.
84
- - **`set profile custom`**: Activate the custom profile, then interactively ask which model to use for each stage (planning, execution, review).
85
- - **`set <dotted.path> <value>`**: Update a specific setting (e.g., `set execution.max_parallel_agents 3`).
86
- - **`enable <skill-name>`** / **`disable <skill-name>`**: Enable or disable a skill in ftm-mind routing.
87
- - **`reset`**: Restore all settings to defaults.
88
- - **`show profiles`**: Display all available profiles side by side.
89
- - **`show skills`**: Display all skills and their enabled/disabled status.
90
-
91
- ### Step 3: Display Current Configuration (No Args)
92
-
93
- When displaying the config, format it clearly:
94
-
95
- ```
96
- FTM Configuration
97
- ====================
98
-
99
- Active Profile: balanced
100
-
101
- Planning → opus (brainstorm, research, plan generation)
102
- Execution → sonnet (agent task implementation)
103
- Review → sonnet (audit, debug review, council synthesis)
104
-
105
- Execution Settings:
106
- Max Parallel Agents: 5
107
- Auto Audit: true
108
- Progress Tracking: true
109
-
110
- Session Settings:
111
- Auto Pause on Exit: false
112
- State Retention Days: 7
113
- ```
114
-
115
- ### Step 4: Apply Changes
116
-
117
- When the user requests a change:
118
-
119
- 1. **Validate inputs**:
120
- - Model names must be one of: `opus`, `sonnet`, `haiku`, `inherit`. Reject anything else with a clear error.
121
- - Profile names must be one of: `quality`, `balanced`, `budget`, `custom`, `inherit`. Reject anything else.
122
- - Numeric values must be positive integers where applicable.
123
- - Boolean values must be `true` or `false`.
124
-
125
- 2. **Show before/after**:
126
- ```
127
- Changing active profile:
128
- Before: balanced (opus / sonnet / sonnet)
129
- After: quality (opus / opus / sonnet)
130
- ```
131
-
132
- 3. **Save changes**: Write the updated YAML back to `~/.claude/ftm-config.yml`.
133
-
134
- 4. **Confirm**: Display the updated configuration section that changed.
135
-
136
- ### Step 5: Handle Custom Profile
137
-
138
- When the user sets `profile custom`:
139
-
140
- 1. Show the current custom profile settings.
141
- 2. Ask: "Which model for **planning** (brainstorm, research)? [opus/sonnet/haiku/inherit]"
142
- 3. Ask: "Which model for **execution** (agent tasks, code writing)? [opus/sonnet/haiku/inherit]"
143
- 4. Ask: "Which model for **review** (audit, debug, council)? [opus/sonnet/haiku/inherit]"
144
- 5. Validate each answer, save, and display the final custom profile.
145
-
146
- If the user provides all three in one line (e.g., `set profile custom opus haiku sonnet`), parse them positionally as planning/execution/review without asking interactively.
147
-
148
- ### Step 6: Handle Reset
149
-
150
- When the user says `reset`:
151
-
152
- 1. Show current configuration.
153
- 2. Confirm: "This will restore all ftm settings to defaults. Proceed?"
154
- 3. If confirmed, write the default configuration to `~/.claude/ftm-config.yml`.
155
- 4. Display the restored defaults.
156
-
157
- ## Valid Model Options
158
-
159
- | Model | Description | Best For |
160
- |-------|-------------|----------|
161
- | `opus` | Most capable, highest quality | Complex planning, architecture decisions |
162
- | `sonnet` | Balanced capability and speed | General execution, code writing, reviews |
163
- | `haiku` | Fastest, most efficient | Simple reviews, quick checks, budget tasks |
164
- | `inherit` | Use session default | When you want the conversation's current model |
165
-
166
- ## Valid Profiles
167
-
168
- | Profile | Planning | Execution | Review | Use Case |
169
- |---------|----------|-----------|--------|----------|
170
- | `quality` | opus | opus | sonnet | Maximum quality, complex projects |
171
- | `balanced` | opus | sonnet | sonnet | Good default for most work |
172
- | `budget` | sonnet | sonnet | haiku | Token-efficient, simpler tasks |
173
- | `inherit` | inherit | inherit | inherit | Use whatever model the session runs |
174
- | `custom` | (user-defined) | (user-defined) | (user-defined) | Full user control |
175
-
176
- ## How Other FTM Skills Use This Config
177
-
178
- All ftm skills should read `~/.claude/ftm-config.yml` at the start of execution to determine which model to use when spawning agents.
179
-
180
- ### Reading the Config
181
-
182
- At the beginning of any ftm skill execution:
183
-
184
- 1. Read `~/.claude/ftm-config.yml`.
185
- 2. Look at the `profile` field to determine which profile is active.
186
- 3. Look up that profile under `profiles.<profile_name>` to get the model for each stage.
187
- 4. If the config file does not exist, use "balanced" defaults: `opus` for planning, `sonnet` for execution, `sonnet` for review.
188
-
189
- ### Mapping Stages to FTM Skills
190
-
191
- | Stage | Config Key | Panda Skills That Use It |
192
- |-------|-----------|--------------------------|
193
- | **Planning** | `profiles.<active>.planning` | ftm-brainstorm, ftm (research/plan generation phase) |
194
- | **Execution** | `profiles.<active>.execution` | ftm-executor (all spawned task agents) |
195
- | **Review** | `profiles.<active>.review` | ftm-audit, ftm-debug, ftm-council (synthesis phase) |
196
-
197
- ### Spawning Agents with the Correct Model
198
-
199
- When spawning agents, use the `model` parameter on the Agent tool:
200
-
201
- - **For planning agents** (research, brainstorming, plan generation):
202
- Use the profile's `planning` model.
203
-
204
- - **For execution agents** (implementing tasks, writing code):
205
- Use the profile's `execution` model.
206
-
207
- - **For review agents** (audit, debug review, council synthesis):
208
- Use the profile's `review` model.
209
-
210
- If the model value is `"inherit"`, omit the `model` parameter entirely so the agent inherits the session's current model.
211
-
212
- ### Example Resolution
213
-
214
- Given this config:
215
- ```yaml
216
- profile: balanced
217
- profiles:
218
- balanced:
219
- planning: opus
220
- execution: sonnet
221
- review: sonnet
222
- ```
223
-
224
- - `ftm-brainstorm` spawns its research agents with `model: opus`
225
- - `ftm-executor` spawns task agents with `model: sonnet`
226
- - `ftm-audit` spawns review agents with `model: sonnet`
227
- - `ftm-council` spawns synthesis agents with `model: sonnet`
228
-
229
- ### Execution Preferences
230
-
231
- Other ftm skills should also respect:
232
-
233
- - **`execution.max_parallel_agents`**: Do not spawn more agents simultaneously than this number. Queue excess agents.
234
- - **`execution.auto_audit`**: If `true`, `ftm-executor` should automatically invoke `ftm-audit` after each task completes.
235
- - **`execution.progress_tracking`**: If `true`, write status updates to `PROGRESS.md` in the workspace during execution.
236
-
237
- ### Session Preferences
238
-
239
- - **`session.auto_pause_on_exit`**: If `true`, ftm skills should automatically save state (like `ftm-pause`) when the conversation is ending.
240
- - **`session.state_retention_days`**: When resuming, archive or clean up state files older than this many days.
241
-
242
- ## Examples
243
-
244
- ### View current config
245
- ```
246
- User: /ftm-config
247
- → Displays full current configuration
248
- ```
249
-
250
- ### Switch to quality profile
251
- ```
252
- User: /ftm-config set profile quality
253
- → Shows before/after, saves change
254
- ```
255
-
256
- ### Set custom profile with specific models
257
- ```
258
- User: /ftm-config set profile custom opus haiku sonnet
259
- → Sets custom profile: planning=opus, execution=haiku, review=sonnet
260
- ```
261
-
262
- ### Change a specific setting
263
- ```
264
- User: /ftm-config set execution.max_parallel_agents 3
265
- → Updates max parallel agents from 5 to 3
266
- ```
267
-
268
- ### Disable auto-audit
269
- ```
270
- User: /ftm-config set execution.auto_audit false
271
- → Disables automatic audit after executor tasks
272
- ```
273
-
274
- ### Disable a skill
275
- ```
276
- User: /ftm-config disable ftm-council
277
- → Sets skills.ftm-council.enabled: false — ftm-mind will no longer route to it
278
- ```
279
-
280
- ### Show skill status
281
- ```
282
- User: /ftm-config show skills
283
- → Displays all skills with enabled/disabled status
284
- ```
285
-
286
- ### Reset to defaults
287
- ```
288
- User: /ftm-config reset
289
- → Confirms, then restores all settings to defaults
290
- ```
291
-
292
- ### Show all profiles
293
- ```
294
- User: /ftm-config show profiles
295
- → Displays table of all profiles with their model assignments
296
- ```
297
-
298
- ## Troubleshooting
299
-
300
- ### Config file is missing
301
- The skill will create `~/.claude/ftm-config.yml` with default settings automatically. No action needed.
302
-
303
- ### Invalid model name
304
- Only `opus`, `sonnet`, `haiku`, and `inherit` are valid. The skill will reject other values and show the valid options.
305
-
306
- ### Config file is malformed
307
- If the YAML cannot be parsed, the skill will back up the broken file as `~/.claude/ftm-config.yml.bak` and create a fresh default config.
308
-
309
- ### Changes not taking effect
310
- Other ftm skills read the config at startup. If a ftm skill is already running, it will use the config that was active when it started. Changes apply to the next invocation.
311
-
312
- ## Requirements
313
-
314
- - config: `~/.claude/ftm-config.yml` | optional | main config file (created with defaults if missing)
315
-
316
- ## Risk
317
-
318
- - level: low_write
319
- - scope: reads and writes ~/.claude/ftm-config.yml only; backs up malformed config to ftm-config.yml.bak before overwriting; no project files touched
320
- - rollback: restore from ~/.claude/ftm-config.yml.bak or delete the file to reset to defaults on next invocation
321
-
322
- ## Approval Gates
323
-
324
- - trigger: reset command issued | action: show current config and ask "Proceed?" before restoring defaults
325
- - trigger: invalid model name or profile name provided | action: reject with clear error showing valid options, do not write
326
- - complexity_routing: micro → auto | small → auto | medium → auto | large → auto | xl → auto
327
-
328
- ## Fallbacks
329
-
330
- - condition: ftm-config.yml missing | action: create file with default balanced profile and all defaults
331
- - condition: ftm-config.yml malformed YAML | action: back up as ftm-config.yml.bak, create fresh default config
332
- - condition: invalid model or profile value provided | action: reject and show valid options without writing
333
-
334
- ## Capabilities
335
-
336
- - env: none required
337
-
338
- ## Event Payloads
339
-
340
- ### task_completed
341
- - skill: string — "ftm-config"
342
- - action: string — "display" | "set_profile" | "set_value" | "reset" | "show_profiles" | "show_skills"
343
- - changed_key: string | null — dotted path of changed setting
344
- - old_value: string | null — value before change
345
- - new_value: string | null — value after change
1
+ ---
2
+ name: ftm-config
3
+ description: Configure ftm skill settings including model profiles, execution preferences, and defaults. Use when user says "ftm config", "ftm settings", "set ftm profile", "ftm model", or wants to change how ftm skills behave.
4
+ ---
5
+
6
+ ## Events
7
+
8
+ ### Emits
9
+ - `task_completed` — when a configuration change is validated, saved, and confirmed to the user
10
+
11
+ ### Listens To
12
+ (none — ftm-config is explicitly invoked by the user and does not respond to events)
13
+
14
+ # FTM Config
15
+
16
+ Manage configuration for all ftm skills, including model profiles, execution preferences, and session settings.
17
+
18
+ ## Config File Location
19
+
20
+ `~/.claude/ftm-config.yml`
21
+
22
+ This is the single source of truth for all ftm skill behavior. Every ftm skill reads from this file at startup.
23
+
24
+ ## Config Schema
25
+
26
+ ```yaml
27
+ # FTM Skills Configuration
28
+ # Edit this file or use /ftm-config to modify settings
29
+
30
+ # Model profiles control which model is used at each stage
31
+ # Options: opus, sonnet, haiku, inherit (use session default)
32
+ profile: balanced # quality | balanced | budget | custom | inherit
33
+
34
+ profiles:
35
+ quality:
36
+ planning: opus # brainstorm, research, plan generation
37
+ execution: opus # agent task implementation
38
+ review: sonnet # audit, debug review, council synthesis
39
+
40
+ balanced:
41
+ planning: opus
42
+ execution: sonnet
43
+ review: sonnet
44
+
45
+ budget:
46
+ planning: sonnet
47
+ execution: sonnet
48
+ review: haiku
49
+
50
+ inherit:
51
+ planning: inherit
52
+ execution: inherit
53
+ review: inherit
54
+
55
+ custom:
56
+ planning: opus
57
+ execution: sonnet
58
+ review: haiku
59
+
60
+ # Execution preferences
61
+ execution:
62
+ max_parallel_agents: 5 # max agents dispatched simultaneously
63
+ auto_audit: true # run ftm-audit after each executor task
64
+ progress_tracking: true # write PROGRESS.md during execution
65
+
66
+ # Session management
67
+ session:
68
+ auto_pause_on_exit: false # automatically save state when conversation ends
69
+ state_retention_days: 7 # archive states older than this
70
+ ```
71
+
72
+ ## Instructions
73
+
74
+ ### Step 1: Read Current Config
75
+
76
+ Read `~/.claude/ftm-config.yml`. If it does not exist, create it with the default configuration (balanced profile active, all defaults as shown in the schema above). Use the file-creator pattern or Write tool to create the file.
77
+
78
+ ### Step 2: Determine Intent
79
+
80
+ Parse the user's input to determine what they want:
81
+
82
+ - **No arguments** (bare `/ftm-config`): Display current configuration.
83
+ - **`set profile <name>`**: Change the active profile.
84
+ - **`set profile custom`**: Activate the custom profile, then interactively ask which model to use for each stage (planning, execution, review).
85
+ - **`set <dotted.path> <value>`**: Update a specific setting (e.g., `set execution.max_parallel_agents 3`).
86
+ - **`enable <skill-name>`** / **`disable <skill-name>`**: Enable or disable a skill in ftm-mind routing.
87
+ - **`reset`**: Restore all settings to defaults.
88
+ - **`show profiles`**: Display all available profiles side by side.
89
+ - **`show skills`**: Display all skills and their enabled/disabled status.
90
+
91
+ ### Step 3: Display Current Configuration (No Args)
92
+
93
+ When displaying the config, format it clearly:
94
+
95
+ ```
96
+ FTM Configuration
97
+ ====================
98
+
99
+ Active Profile: balanced
100
+
101
+ Planning → opus (brainstorm, research, plan generation)
102
+ Execution → sonnet (agent task implementation)
103
+ Review → sonnet (audit, debug review, council synthesis)
104
+
105
+ Execution Settings:
106
+ Max Parallel Agents: 5
107
+ Auto Audit: true
108
+ Progress Tracking: true
109
+
110
+ Session Settings:
111
+ Auto Pause on Exit: false
112
+ State Retention Days: 7
113
+ ```
114
+
115
+ ### Step 4: Apply Changes
116
+
117
+ When the user requests a change:
118
+
119
+ 1. **Validate inputs**:
120
+ - Model names must be one of: `opus`, `sonnet`, `haiku`, `inherit`. Reject anything else with a clear error.
121
+ - Profile names must be one of: `quality`, `balanced`, `budget`, `custom`, `inherit`. Reject anything else.
122
+ - Numeric values must be positive integers where applicable.
123
+ - Boolean values must be `true` or `false`.
124
+
125
+ 2. **Show before/after**:
126
+ ```
127
+ Changing active profile:
128
+ Before: balanced (opus / sonnet / sonnet)
129
+ After: quality (opus / opus / sonnet)
130
+ ```
131
+
132
+ 3. **Save changes**: Write the updated YAML back to `~/.claude/ftm-config.yml`.
133
+
134
+ 4. **Confirm**: Display the updated configuration section that changed.
135
+
136
+ ### Step 5: Handle Custom Profile
137
+
138
+ When the user sets `profile custom`:
139
+
140
+ 1. Show the current custom profile settings.
141
+ 2. Ask: "Which model for **planning** (brainstorm, research)? [opus/sonnet/haiku/inherit]"
142
+ 3. Ask: "Which model for **execution** (agent tasks, code writing)? [opus/sonnet/haiku/inherit]"
143
+ 4. Ask: "Which model for **review** (audit, debug, council)? [opus/sonnet/haiku/inherit]"
144
+ 5. Validate each answer, save, and display the final custom profile.
145
+
146
+ If the user provides all three in one line (e.g., `set profile custom opus haiku sonnet`), parse them positionally as planning/execution/review without asking interactively.
147
+
148
+ ### Step 6: Handle Reset
149
+
150
+ When the user says `reset`:
151
+
152
+ 1. Show current configuration.
153
+ 2. Confirm: "This will restore all ftm settings to defaults. Proceed?"
154
+ 3. If confirmed, write the default configuration to `~/.claude/ftm-config.yml`.
155
+ 4. Display the restored defaults.
156
+
157
+ ## Valid Model Options
158
+
159
+ | Model | Description | Best For |
160
+ |-------|-------------|----------|
161
+ | `opus` | Most capable, highest quality | Complex planning, architecture decisions |
162
+ | `sonnet` | Balanced capability and speed | General execution, code writing, reviews |
163
+ | `haiku` | Fastest, most efficient | Simple reviews, quick checks, budget tasks |
164
+ | `inherit` | Use session default | When you want the conversation's current model |
165
+
166
+ ## Valid Profiles
167
+
168
+ | Profile | Planning | Execution | Review | Use Case |
169
+ |---------|----------|-----------|--------|----------|
170
+ | `quality` | opus | opus | sonnet | Maximum quality, complex projects |
171
+ | `balanced` | opus | sonnet | sonnet | Good default for most work |
172
+ | `budget` | sonnet | sonnet | haiku | Token-efficient, simpler tasks |
173
+ | `inherit` | inherit | inherit | inherit | Use whatever model the session runs |
174
+ | `custom` | (user-defined) | (user-defined) | (user-defined) | Full user control |
175
+
176
+ ## How Other FTM Skills Use This Config
177
+
178
+ All ftm skills should read `~/.claude/ftm-config.yml` at the start of execution to determine which model to use when spawning agents.
179
+
180
+ ### Reading the Config
181
+
182
+ At the beginning of any ftm skill execution:
183
+
184
+ 1. Read `~/.claude/ftm-config.yml`.
185
+ 2. Look at the `profile` field to determine which profile is active.
186
+ 3. Look up that profile under `profiles.<profile_name>` to get the model for each stage.
187
+ 4. If the config file does not exist, use "balanced" defaults: `opus` for planning, `sonnet` for execution, `sonnet` for review.
188
+
189
+ ### Mapping Stages to FTM Skills
190
+
191
+ | Stage | Config Key | Panda Skills That Use It |
192
+ |-------|-----------|--------------------------|
193
+ | **Planning** | `profiles.<active>.planning` | ftm-brainstorm, ftm (research/plan generation phase) |
194
+ | **Execution** | `profiles.<active>.execution` | ftm-executor (all spawned task agents) |
195
+ | **Review** | `profiles.<active>.review` | ftm-audit, ftm-debug, ftm-council (synthesis phase) |
196
+
197
+ ### Spawning Agents with the Correct Model
198
+
199
+ When spawning agents, use the `model` parameter on the Agent tool:
200
+
201
+ - **For planning agents** (research, brainstorming, plan generation):
202
+ Use the profile's `planning` model.
203
+
204
+ - **For execution agents** (implementing tasks, writing code):
205
+ Use the profile's `execution` model.
206
+
207
+ - **For review agents** (audit, debug review, council synthesis):
208
+ Use the profile's `review` model.
209
+
210
+ If the model value is `"inherit"`, omit the `model` parameter entirely so the agent inherits the session's current model.
211
+
212
+ ### Example Resolution
213
+
214
+ Given this config:
215
+ ```yaml
216
+ profile: balanced
217
+ profiles:
218
+ balanced:
219
+ planning: opus
220
+ execution: sonnet
221
+ review: sonnet
222
+ ```
223
+
224
+ - `ftm-brainstorm` spawns its research agents with `model: opus`
225
+ - `ftm-executor` spawns task agents with `model: sonnet`
226
+ - `ftm-audit` spawns review agents with `model: sonnet`
227
+ - `ftm-council` spawns synthesis agents with `model: sonnet`
228
+
229
+ ### Execution Preferences
230
+
231
+ Other ftm skills should also respect:
232
+
233
+ - **`execution.max_parallel_agents`**: Do not spawn more agents simultaneously than this number. Queue excess agents.
234
+ - **`execution.auto_audit`**: If `true`, `ftm-executor` should automatically invoke `ftm-audit` after each task completes.
235
+ - **`execution.progress_tracking`**: If `true`, write status updates to `PROGRESS.md` in the workspace during execution.
236
+
237
+ ### Session Preferences
238
+
239
+ - **`session.auto_pause_on_exit`**: If `true`, ftm skills should automatically save state (like `ftm-pause`) when the conversation is ending.
240
+ - **`session.state_retention_days`**: When resuming, archive or clean up state files older than this many days.
241
+
242
+ ## Examples
243
+
244
+ ### View current config
245
+ ```
246
+ User: /ftm-config
247
+ → Displays full current configuration
248
+ ```
249
+
250
+ ### Switch to quality profile
251
+ ```
252
+ User: /ftm-config set profile quality
253
+ → Shows before/after, saves change
254
+ ```
255
+
256
+ ### Set custom profile with specific models
257
+ ```
258
+ User: /ftm-config set profile custom opus haiku sonnet
259
+ → Sets custom profile: planning=opus, execution=haiku, review=sonnet
260
+ ```
261
+
262
+ ### Change a specific setting
263
+ ```
264
+ User: /ftm-config set execution.max_parallel_agents 3
265
+ → Updates max parallel agents from 5 to 3
266
+ ```
267
+
268
+ ### Disable auto-audit
269
+ ```
270
+ User: /ftm-config set execution.auto_audit false
271
+ → Disables automatic audit after executor tasks
272
+ ```
273
+
274
+ ### Disable a skill
275
+ ```
276
+ User: /ftm-config disable ftm-council
277
+ → Sets skills.ftm-council.enabled: false — ftm-mind will no longer route to it
278
+ ```
279
+
280
+ ### Show skill status
281
+ ```
282
+ User: /ftm-config show skills
283
+ → Displays all skills with enabled/disabled status
284
+ ```
285
+
286
+ ### Reset to defaults
287
+ ```
288
+ User: /ftm-config reset
289
+ → Confirms, then restores all settings to defaults
290
+ ```
291
+
292
+ ### Show all profiles
293
+ ```
294
+ User: /ftm-config show profiles
295
+ → Displays table of all profiles with their model assignments
296
+ ```
297
+
298
+ ## Troubleshooting
299
+
300
+ ### Config file is missing
301
+ The skill will create `~/.claude/ftm-config.yml` with default settings automatically. No action needed.
302
+
303
+ ### Invalid model name
304
+ Only `opus`, `sonnet`, `haiku`, and `inherit` are valid. The skill will reject other values and show the valid options.
305
+
306
+ ### Config file is malformed
307
+ If the YAML cannot be parsed, the skill will back up the broken file as `~/.claude/ftm-config.yml.bak` and create a fresh default config.
308
+
309
+ ### Changes not taking effect
310
+ Other ftm skills read the config at startup. If a ftm skill is already running, it will use the config that was active when it started. Changes apply to the next invocation.
311
+
312
+ ## Requirements
313
+
314
+ - config: `~/.claude/ftm-config.yml` | optional | main config file (created with defaults if missing)
315
+
316
+ ## Risk
317
+
318
+ - level: low_write
319
+ - scope: reads and writes ~/.claude/ftm-config.yml only; backs up malformed config to ftm-config.yml.bak before overwriting; no project files touched
320
+ - rollback: restore from ~/.claude/ftm-config.yml.bak or delete the file to reset to defaults on next invocation
321
+
322
+ ## Approval Gates
323
+
324
+ - trigger: reset command issued | action: show current config and ask "Proceed?" before restoring defaults
325
+ - trigger: invalid model name or profile name provided | action: reject with clear error showing valid options, do not write
326
+ - complexity_routing: micro → auto | small → auto | medium → auto | large → auto | xl → auto
327
+
328
+ ## Fallbacks
329
+
330
+ - condition: ftm-config.yml missing | action: create file with default balanced profile and all defaults
331
+ - condition: ftm-config.yml malformed YAML | action: back up as ftm-config.yml.bak, create fresh default config
332
+ - condition: invalid model or profile value provided | action: reject and show valid options without writing
333
+
334
+ ## Capabilities
335
+
336
+ - env: none required
337
+
338
+ ## Event Payloads
339
+
340
+ ### task_completed
341
+ - skill: string — "ftm-config"
342
+ - action: string — "display" | "set_profile" | "set_value" | "reset" | "show_profiles" | "show_skills"
343
+ - changed_key: string | null — dotted path of changed setting
344
+ - old_value: string | null — value before change
345
+ - new_value: string | null — value after change