feed-the-machine 1.6.1 → 1.7.1

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 (272) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +262 -170
  3. package/bin/__pycache__/tasks_db.cpython-314.pyc +0 -0
  4. package/bin/brain.py +1340 -0
  5. package/bin/convert_claude_skills_to_codex.py +490 -0
  6. package/bin/generate-manifest.mjs +463 -463
  7. package/bin/harden_codex_skills.py +141 -0
  8. package/bin/install.mjs +491 -491
  9. package/bin/migrate-eng-buddy-data.py +875 -0
  10. package/bin/playbook_engine/__init__.py +1 -0
  11. package/bin/playbook_engine/conftest.py +8 -0
  12. package/bin/playbook_engine/extractor.py +33 -0
  13. package/bin/playbook_engine/manager.py +102 -0
  14. package/bin/playbook_engine/models.py +84 -0
  15. package/bin/playbook_engine/registry.py +35 -0
  16. package/bin/playbook_engine/test_extractor.py +72 -0
  17. package/bin/playbook_engine/test_integration.py +129 -0
  18. package/bin/playbook_engine/test_manager.py +85 -0
  19. package/bin/playbook_engine/test_models.py +166 -0
  20. package/bin/playbook_engine/test_registry.py +67 -0
  21. package/bin/playbook_engine/test_tracer.py +86 -0
  22. package/bin/playbook_engine/tracer.py +93 -0
  23. package/bin/tasks_db.py +456 -0
  24. package/docs/HOOKS.md +243 -243
  25. package/docs/INBOX.md +233 -233
  26. package/ftm/SKILL.md +125 -122
  27. package/ftm-audit/SKILL.md +673 -623
  28. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  29. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  30. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  31. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  32. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  33. package/ftm-audit/scripts/run-knip.sh +23 -23
  34. package/ftm-audit.yml +2 -2
  35. package/ftm-brainstorm/SKILL.md +1003 -498
  36. package/ftm-brainstorm/evals/evals.json +180 -100
  37. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  38. package/ftm-brainstorm/references/agent-prompts.md +552 -224
  39. package/ftm-brainstorm/references/plan-template.md +209 -121
  40. package/ftm-brainstorm.yml +2 -2
  41. package/ftm-browse/SKILL.md +454 -454
  42. package/ftm-browse/daemon/browser-manager.ts +206 -206
  43. package/ftm-browse/daemon/bun.lock +30 -30
  44. package/ftm-browse/daemon/cli.ts +347 -347
  45. package/ftm-browse/daemon/commands.ts +410 -410
  46. package/ftm-browse/daemon/main.ts +357 -357
  47. package/ftm-browse/daemon/package.json +17 -17
  48. package/ftm-browse/daemon/server.ts +189 -189
  49. package/ftm-browse/daemon/snapshot.ts +519 -519
  50. package/ftm-browse/daemon/tsconfig.json +22 -22
  51. package/ftm-browse.yml +4 -4
  52. package/ftm-capture/SKILL.md +370 -370
  53. package/ftm-capture.yml +4 -4
  54. package/ftm-codex-gate/SKILL.md +361 -361
  55. package/ftm-codex-gate.yml +2 -2
  56. package/ftm-config/SKILL.md +422 -345
  57. package/ftm-config.default.yml +125 -82
  58. package/ftm-config.yml +44 -2
  59. package/ftm-council/SKILL.md +416 -416
  60. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  61. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  62. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  63. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  64. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  65. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  66. package/ftm-council-chat.yml +2 -0
  67. package/ftm-council.yml +2 -2
  68. package/ftm-dashboard/SKILL.md +163 -163
  69. package/ftm-dashboard.yml +4 -4
  70. package/ftm-debug/SKILL.md +1037 -1037
  71. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  72. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  73. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  74. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  75. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  76. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  77. package/ftm-debug.yml +2 -2
  78. package/ftm-diagram/SKILL.md +277 -277
  79. package/ftm-diagram.yml +2 -2
  80. package/ftm-executor/SKILL.md +777 -777
  81. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  82. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  83. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  84. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  85. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +81 -72
  86. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  87. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  88. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  89. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -59
  90. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  91. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  92. package/ftm-executor/runtime/package.json +8 -8
  93. package/ftm-executor.yml +2 -2
  94. package/ftm-git/SKILL.md +441 -441
  95. package/ftm-git/evals/evals.json +26 -26
  96. package/ftm-git/evals/promptfoo.yaml +75 -75
  97. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  98. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  99. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  100. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  101. package/ftm-git.yml +2 -2
  102. package/ftm-inbox/backend/__pycache__/main.cpython-314.pyc +0 -0
  103. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  104. package/ftm-inbox/backend/adapters/base.py +230 -230
  105. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  106. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  107. package/ftm-inbox/backend/adapters/jira.py +136 -136
  108. package/ftm-inbox/backend/adapters/registry.py +192 -192
  109. package/ftm-inbox/backend/adapters/slack.py +110 -110
  110. package/ftm-inbox/backend/db/connection.py +54 -54
  111. package/ftm-inbox/backend/db/schema.py +78 -78
  112. package/ftm-inbox/backend/executor/__init__.py +7 -7
  113. package/ftm-inbox/backend/executor/engine.py +149 -149
  114. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  115. package/ftm-inbox/backend/main.py +103 -103
  116. package/ftm-inbox/backend/models/__init__.py +1 -1
  117. package/ftm-inbox/backend/models/unified_task.py +36 -36
  118. package/ftm-inbox/backend/planner/__init__.py +6 -6
  119. package/ftm-inbox/backend/planner/__pycache__/__init__.cpython-314.pyc +0 -0
  120. package/ftm-inbox/backend/planner/__pycache__/generator.cpython-314.pyc +0 -0
  121. package/ftm-inbox/backend/planner/__pycache__/schema.cpython-314.pyc +0 -0
  122. package/ftm-inbox/backend/planner/generator.py +127 -127
  123. package/ftm-inbox/backend/planner/schema.py +34 -34
  124. package/ftm-inbox/backend/requirements.txt +5 -5
  125. package/ftm-inbox/backend/routes/__pycache__/plan.cpython-314.pyc +0 -0
  126. package/ftm-inbox/backend/routes/execute.py +186 -186
  127. package/ftm-inbox/backend/routes/health.py +52 -52
  128. package/ftm-inbox/backend/routes/inbox.py +68 -68
  129. package/ftm-inbox/backend/routes/plan.py +271 -271
  130. package/ftm-inbox/bin/launchagent.mjs +91 -91
  131. package/ftm-inbox/bin/setup.mjs +188 -188
  132. package/ftm-inbox/bin/start.sh +10 -10
  133. package/ftm-inbox/bin/status.sh +17 -17
  134. package/ftm-inbox/bin/stop.sh +8 -8
  135. package/ftm-inbox/config.example.yml +55 -55
  136. package/ftm-inbox/package-lock.json +2898 -2898
  137. package/ftm-inbox/package.json +26 -26
  138. package/ftm-inbox/postcss.config.js +6 -6
  139. package/ftm-inbox/src/app.css +199 -199
  140. package/ftm-inbox/src/app.html +18 -18
  141. package/ftm-inbox/src/lib/api.ts +166 -166
  142. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  143. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  144. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  145. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  146. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  147. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  148. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  149. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  150. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  151. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  152. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  153. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  154. package/ftm-inbox/src/lib/theme.ts +47 -47
  155. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  156. package/ftm-inbox/src/routes/+page.svelte +401 -401
  157. package/ftm-inbox/svelte.config.js +12 -12
  158. package/ftm-inbox/tailwind.config.ts +63 -63
  159. package/ftm-inbox/tsconfig.json +13 -13
  160. package/ftm-inbox/vite.config.ts +6 -6
  161. package/ftm-intent/SKILL.md +241 -241
  162. package/ftm-intent.yml +2 -2
  163. package/ftm-manifest.json +3794 -3794
  164. package/ftm-map/SKILL.md +291 -291
  165. package/ftm-map/scripts/db.py +712 -712
  166. package/ftm-map/scripts/index.py +415 -415
  167. package/ftm-map/scripts/parser.py +224 -224
  168. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  169. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  170. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  171. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  172. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  173. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  174. package/ftm-map/scripts/query.py +301 -301
  175. package/ftm-map/scripts/ranker.py +377 -377
  176. package/ftm-map/scripts/requirements.txt +5 -5
  177. package/ftm-map/scripts/setup-hooks.sh +27 -27
  178. package/ftm-map/scripts/setup.sh +56 -56
  179. package/ftm-map/scripts/test_db.py +364 -364
  180. package/ftm-map/scripts/test_parser.py +174 -174
  181. package/ftm-map/scripts/test_query.py +183 -183
  182. package/ftm-map/scripts/test_ranker.py +199 -199
  183. package/ftm-map/scripts/views.py +591 -591
  184. package/ftm-map.yml +2 -2
  185. package/ftm-mind/SKILL.md +201 -1943
  186. package/ftm-mind/evals/promptfoo.yaml +142 -142
  187. package/ftm-mind/references/blackboard-protocol.md +110 -0
  188. package/ftm-mind/references/blackboard-schema.md +328 -328
  189. package/ftm-mind/references/complexity-guide.md +110 -110
  190. package/ftm-mind/references/complexity-sizing.md +138 -0
  191. package/ftm-mind/references/decide-act-protocol.md +172 -0
  192. package/ftm-mind/references/direct-execution.md +51 -0
  193. package/ftm-mind/references/environment-discovery.md +77 -0
  194. package/ftm-mind/references/event-registry.md +319 -319
  195. package/ftm-mind/references/mcp-inventory.md +300 -296
  196. package/ftm-mind/references/ops-routing.md +47 -0
  197. package/ftm-mind/references/orient-protocol.md +234 -0
  198. package/ftm-mind/references/personality.md +40 -0
  199. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  200. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  201. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  202. package/ftm-mind/references/reflexion-protocol.md +249 -249
  203. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  204. package/ftm-mind/references/routing-scenarios.md +35 -35
  205. package/ftm-mind.yml +2 -2
  206. package/ftm-ops.yml +4 -0
  207. package/ftm-pause/SKILL.md +395 -395
  208. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  209. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  210. package/ftm-pause.yml +2 -2
  211. package/ftm-researcher/SKILL.md +275 -275
  212. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  213. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  214. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  215. package/ftm-researcher/references/adaptive-search.md +116 -116
  216. package/ftm-researcher/references/agent-prompts.md +193 -193
  217. package/ftm-researcher/references/council-integration.md +193 -193
  218. package/ftm-researcher/references/output-format.md +203 -203
  219. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  220. package/ftm-researcher/scripts/score_credibility.py +234 -234
  221. package/ftm-researcher/scripts/validate_research.py +92 -92
  222. package/ftm-researcher.yml +2 -2
  223. package/ftm-resume/SKILL.md +518 -518
  224. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  225. package/ftm-resume.yml +2 -2
  226. package/ftm-retro/SKILL.md +380 -380
  227. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  228. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  229. package/ftm-retro.yml +2 -2
  230. package/ftm-routine/SKILL.md +170 -170
  231. package/ftm-routine.yml +4 -4
  232. package/ftm-state/blackboard/capabilities.json +5 -5
  233. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  234. package/ftm-state/blackboard/context.json +37 -23
  235. package/ftm-state/blackboard/experiences/doom-statusline-fix.json +26 -0
  236. package/ftm-state/blackboard/experiences/hackathon-pages-site.json +26 -0
  237. package/ftm-state/blackboard/experiences/hindsight-sso-kickoff.json +42 -0
  238. package/ftm-state/blackboard/experiences/index.json +58 -9
  239. package/ftm-state/blackboard/experiences/learning-ragnarok-api-access.json +23 -0
  240. package/ftm-state/blackboard/experiences/nordlayer-members-auto-assign.json +26 -0
  241. package/ftm-state/blackboard/experiences/saml2aws-stale-session-fix.json +41 -0
  242. package/ftm-state/blackboard/patterns.json +6 -6
  243. package/ftm-state/schemas/context.schema.json +130 -130
  244. package/ftm-state/schemas/experience-index.schema.json +77 -77
  245. package/ftm-state/schemas/experience.schema.json +78 -78
  246. package/ftm-state/schemas/patterns.schema.json +44 -44
  247. package/ftm-upgrade/SKILL.md +194 -194
  248. package/ftm-upgrade/scripts/check-version.sh +76 -76
  249. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  250. package/ftm-upgrade.yml +2 -2
  251. package/ftm-verify.yml +2 -2
  252. package/ftm.yml +2 -2
  253. package/hooks/ftm-auto-log.sh +137 -0
  254. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  255. package/hooks/ftm-discovery-reminder.sh +90 -90
  256. package/hooks/ftm-drafts-gate.sh +61 -61
  257. package/hooks/ftm-event-logger.mjs +107 -107
  258. package/hooks/ftm-install-hooks.sh +240 -0
  259. package/hooks/ftm-learning-capture.sh +117 -0
  260. package/hooks/ftm-map-autodetect.sh +79 -79
  261. package/hooks/ftm-pending-sync-check.sh +22 -22
  262. package/hooks/ftm-plan-gate.sh +92 -92
  263. package/hooks/ftm-post-commit-trigger.sh +57 -57
  264. package/hooks/ftm-post-compaction.sh +138 -0
  265. package/hooks/ftm-pre-compaction.sh +147 -0
  266. package/hooks/ftm-session-end.sh +52 -0
  267. package/hooks/ftm-session-snapshot.sh +213 -0
  268. package/hooks/ftm-task-loader.sh +100 -0
  269. package/hooks/settings-template.json +91 -81
  270. package/install.sh +363 -363
  271. package/package.json +84 -84
  272. package/uninstall.sh +25 -25
@@ -1,345 +1,422 @@
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
+ # Operations intelligence settings (merged from eng-buddy)
72
+ ops:
73
+ personality_style: supportive-direct # supportive-direct | formal | casual
74
+
75
+ mcp_account_rules:
76
+ personal: mcp-atlassian-personal # for user actions (comments, ticket updates)
77
+ admin: mcp-atlassian # for admin/global operations only
78
+ default: personal # always use personal unless explicitly admin
79
+
80
+ approval_gates:
81
+ communication_drafts: always # always | auto | never
82
+ task_status_changes: auto # always | auto | never
83
+ capacity_alerts: auto # always | auto | never
84
+
85
+ context_loading:
86
+ strategy: smart # smart | full | minimal
87
+ max_daily_files: 3 # max daily files to load at once
88
+ grep_first: true # always grep index before loading full files
89
+ session_snapshot_on_cold_start: true # load last session snapshot if today's daily is sparse
90
+
91
+ alert_thresholds:
92
+ capacity_warning: 90 # percentage
93
+ capacity_alert: 100 # percentage
94
+ context_switches_warning: 20 # per week
95
+ oncall_incidents_warning: 3 # per week
96
+ weekend_work: true # alert on any weekend work
97
+ weekly_hours_warning: 45 # hours per week, alert if exceeded 2 weeks running
98
+ recurring_issue_threshold: 2 # times in 30 days before alerting
99
+ recurring_question_threshold: 3 # times before suggesting documentation
100
+
101
+ drafts:
102
+ directory: ~/.claude/ftm-ops/drafts/ # where communication drafts are stored
103
+ naming: "[recipient]-[topic]-[YYYY-MM-DD].md"
104
+ write_before_display: true # always write file before showing draft in chat
105
+ ```
106
+
107
+ ## Instructions
108
+
109
+ ### Step 1: Read Current Config
110
+
111
+ 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.
112
+
113
+ ### Step 2: Determine Intent
114
+
115
+ Parse the user's input to determine what they want:
116
+
117
+ - **No arguments** (bare `/ftm-config`): Display current configuration.
118
+ - **`set profile <name>`**: Change the active profile.
119
+ - **`set profile custom`**: Activate the custom profile, then interactively ask which model to use for each stage (planning, execution, review).
120
+ - **`set <dotted.path> <value>`**: Update a specific setting (e.g., `set execution.max_parallel_agents 3`).
121
+ - **`enable <skill-name>`** / **`disable <skill-name>`**: Enable or disable a skill in ftm-mind routing.
122
+ - **`reset`**: Restore all settings to defaults.
123
+ - **`show profiles`**: Display all available profiles side by side.
124
+ - **`show skills`**: Display all skills and their enabled/disabled status.
125
+ - **`show ops`**: Display all ops intelligence settings and their current values.
126
+ - **`set ops.<dotted.path> <value>`**: Update a specific ops setting (e.g., `set ops.personality_style formal`).
127
+
128
+ ### Step 3: Display Current Configuration (No Args)
129
+
130
+ When displaying the config, format it clearly:
131
+
132
+ ```
133
+ FTM Configuration
134
+ ====================
135
+
136
+ Active Profile: balanced
137
+
138
+ Planning → opus (brainstorm, research, plan generation)
139
+ Execution → sonnet (agent task implementation)
140
+ Review → sonnet (audit, debug review, council synthesis)
141
+
142
+ Execution Settings:
143
+ Max Parallel Agents: 5
144
+ Auto Audit: true
145
+ Progress Tracking: true
146
+
147
+ Session Settings:
148
+ Auto Pause on Exit: false
149
+ State Retention Days: 7
150
+ ```
151
+
152
+ ### Step 4: Apply Changes
153
+
154
+ When the user requests a change:
155
+
156
+ 1. **Validate inputs**:
157
+ - Model names must be one of: `opus`, `sonnet`, `haiku`, `inherit`. Reject anything else with a clear error.
158
+ - Profile names must be one of: `quality`, `balanced`, `budget`, `custom`, `inherit`. Reject anything else.
159
+ - Numeric values must be positive integers where applicable.
160
+ - Boolean values must be `true` or `false`.
161
+
162
+ 2. **Show before/after**:
163
+ ```
164
+ Changing active profile:
165
+ Before: balanced (opus / sonnet / sonnet)
166
+ After: quality (opus / opus / sonnet)
167
+ ```
168
+
169
+ 3. **Save changes**: Write the updated YAML back to `~/.claude/ftm-config.yml`.
170
+
171
+ 4. **Confirm**: Display the updated configuration section that changed.
172
+
173
+ ### Step 5: Handle Custom Profile
174
+
175
+ When the user sets `profile custom`:
176
+
177
+ 1. Show the current custom profile settings.
178
+ 2. Ask: "Which model for **planning** (brainstorm, research)? [opus/sonnet/haiku/inherit]"
179
+ 3. Ask: "Which model for **execution** (agent tasks, code writing)? [opus/sonnet/haiku/inherit]"
180
+ 4. Ask: "Which model for **review** (audit, debug, council)? [opus/sonnet/haiku/inherit]"
181
+ 5. Validate each answer, save, and display the final custom profile.
182
+
183
+ 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.
184
+
185
+ ### Step 6: Handle Reset
186
+
187
+ When the user says `reset`:
188
+
189
+ 1. Show current configuration.
190
+ 2. Confirm: "This will restore all ftm settings to defaults. Proceed?"
191
+ 3. If confirmed, write the default configuration to `~/.claude/ftm-config.yml`.
192
+ 4. Display the restored defaults.
193
+
194
+ ## Valid Model Options
195
+
196
+ | Model | Description | Best For |
197
+ |-------|-------------|----------|
198
+ | `opus` | Most capable, highest quality | Complex planning, architecture decisions |
199
+ | `sonnet` | Balanced capability and speed | General execution, code writing, reviews |
200
+ | `haiku` | Fastest, most efficient | Simple reviews, quick checks, budget tasks |
201
+ | `inherit` | Use session default | When you want the conversation's current model |
202
+
203
+ ## Valid Profiles
204
+
205
+ | Profile | Planning | Execution | Review | Use Case |
206
+ |---------|----------|-----------|--------|----------|
207
+ | `quality` | opus | opus | sonnet | Maximum quality, complex projects |
208
+ | `balanced` | opus | sonnet | sonnet | Good default for most work |
209
+ | `budget` | sonnet | sonnet | haiku | Token-efficient, simpler tasks |
210
+ | `inherit` | inherit | inherit | inherit | Use whatever model the session runs |
211
+ | `custom` | (user-defined) | (user-defined) | (user-defined) | Full user control |
212
+
213
+ ## How Other FTM Skills Use This Config
214
+
215
+ All ftm skills should read `~/.claude/ftm-config.yml` at the start of execution to determine which model to use when spawning agents.
216
+
217
+ ### Reading the Config
218
+
219
+ At the beginning of any ftm skill execution:
220
+
221
+ 1. Read `~/.claude/ftm-config.yml`.
222
+ 2. Look at the `profile` field to determine which profile is active.
223
+ 3. Look up that profile under `profiles.<profile_name>` to get the model for each stage.
224
+ 4. If the config file does not exist, use "balanced" defaults: `opus` for planning, `sonnet` for execution, `sonnet` for review.
225
+
226
+ ### Mapping Stages to FTM Skills
227
+
228
+ | Stage | Config Key | Panda Skills That Use It |
229
+ |-------|-----------|--------------------------|
230
+ | **Planning** | `profiles.<active>.planning` | ftm-brainstorm, ftm (research/plan generation phase) |
231
+ | **Execution** | `profiles.<active>.execution` | ftm-executor (all spawned task agents) |
232
+ | **Review** | `profiles.<active>.review` | ftm-audit, ftm-debug, ftm-council (synthesis phase) |
233
+
234
+ ### Spawning Agents with the Correct Model
235
+
236
+ When spawning agents, use the `model` parameter on the Agent tool:
237
+
238
+ - **For planning agents** (research, brainstorming, plan generation):
239
+ Use the profile's `planning` model.
240
+
241
+ - **For execution agents** (implementing tasks, writing code):
242
+ Use the profile's `execution` model.
243
+
244
+ - **For review agents** (audit, debug review, council synthesis):
245
+ Use the profile's `review` model.
246
+
247
+ If the model value is `"inherit"`, omit the `model` parameter entirely so the agent inherits the session's current model.
248
+
249
+ ### Example Resolution
250
+
251
+ Given this config:
252
+ ```yaml
253
+ profile: balanced
254
+ profiles:
255
+ balanced:
256
+ planning: opus
257
+ execution: sonnet
258
+ review: sonnet
259
+ ```
260
+
261
+ - `ftm-brainstorm` spawns its research agents with `model: opus`
262
+ - `ftm-executor` spawns task agents with `model: sonnet`
263
+ - `ftm-audit` spawns review agents with `model: sonnet`
264
+ - `ftm-council` spawns synthesis agents with `model: sonnet`
265
+
266
+ ### Execution Preferences
267
+
268
+ Other ftm skills should also respect:
269
+
270
+ - **`execution.max_parallel_agents`**: Do not spawn more agents simultaneously than this number. Queue excess agents.
271
+ - **`execution.auto_audit`**: If `true`, `ftm-executor` should automatically invoke `ftm-audit` after each task completes.
272
+ - **`execution.progress_tracking`**: If `true`, write status updates to `PROGRESS.md` in the workspace during execution.
273
+
274
+ ### Session Preferences
275
+
276
+ - **`session.auto_pause_on_exit`**: If `true`, ftm skills should automatically save state (like `ftm-pause`) when the conversation is ending.
277
+ - **`session.state_retention_days`**: When resuming, archive or clean up state files older than this many days.
278
+
279
+ ### Operations Preferences (`ops:`)
280
+
281
+ The `ops:` section configures `ftm-ops` behavior for personal engineering operations intelligence. All settings are optional — ftm-ops applies built-in defaults if the section is absent.
282
+
283
+ **`ops.personality_style`** How ftm-ops communicates with you.
284
+ - `supportive-direct` (default): Warm tone, honest about problems, no fluff
285
+ - `formal`: Professional, neutral language
286
+ - `casual`: Relaxed, conversational
287
+
288
+ **`ops.mcp_account_rules`** Which Atlassian MCP account to use for different operation types.
289
+ - `personal`: MCP server name for user-level actions (commenting, updating your own tickets). Default: `mcp-atlassian-personal`
290
+ - `admin`: MCP server name for admin/global operations (bulk changes, project config). Default: `mcp-atlassian`
291
+ - `default`: Which account to use when not otherwise specified. Should always be `personal` to avoid accidental admin-scoped writes.
292
+
293
+ **`ops.approval_gates`** — When ftm-ops must pause for your approval before acting.
294
+ - `communication_drafts`: `always | auto | never` — Whether to require approval before sending communications. Default `always` (never sends without review).
295
+ - `task_status_changes`: `always | auto | never` Whether to require approval before updating Jira/ticket status. Default `auto` (asks for significant transitions only).
296
+ - `capacity_alerts`: `always | auto | never` — Whether to surface capacity warnings proactively. Default `auto` (alerts when thresholds are crossed).
297
+
298
+ **`ops.context_loading`** — Controls how ftm-ops loads daily context files.
299
+ - `strategy`: `smart | full | minimal` — `smart` greps the index first and only loads relevant sections; `full` loads all daily files; `minimal` loads only today's file.
300
+ - `max_daily_files`: Maximum number of daily log files to load simultaneously. Keeps context windows manageable.
301
+ - `grep_first`: If `true`, always grep the daily index before loading full files. Prevents loading large files for small queries.
302
+ - `session_snapshot_on_cold_start`: If `true` and today's daily log is sparse (< 200 words), automatically load the last saved session snapshot to restore context.
303
+
304
+ **`ops.alert_thresholds`** Numeric thresholds that trigger proactive capacity and health alerts.
305
+ - `capacity_warning`: Percentage of estimated capacity at which a yellow warning fires (default 90%).
306
+ - `capacity_alert`: Percentage at which a red alert fires (default 100%).
307
+ - `context_switches_warning`: Number of context switches per week that triggers a focus warning (default 20).
308
+ - `oncall_incidents_warning`: Number of on-call incidents per week that triggers a burnout risk flag (default 3).
309
+ - `weekend_work`: If `true`, any weekend work detected triggers an alert regardless of duration.
310
+ - `weekly_hours_warning`: Hours per week threshold. Alert fires if this is exceeded for 2 consecutive weeks (default 45).
311
+ - `recurring_issue_threshold`: Number of times an issue must recur within 30 days before ftm-ops flags it as a pattern (default 2).
312
+ - `recurring_question_threshold`: Number of times the same question is asked before ftm-ops suggests creating documentation (default 3).
313
+
314
+ **`ops.drafts`** Controls how communication drafts are written and stored.
315
+ - `directory`: Filesystem path where draft files are saved before display. Default `~/.claude/ftm-ops/drafts/`.
316
+ - `naming`: Filename template for draft files. Variables: `[recipient]`, `[topic]`, `[YYYY-MM-DD]`.
317
+ - `write_before_display`: If `true`, ftm-ops always writes the draft file to disk before showing it in chat. Ensures drafts are never lost if the conversation is interrupted.
318
+
319
+ ## Examples
320
+
321
+ ### View current config
322
+ ```
323
+ User: /ftm-config
324
+ Displays full current configuration
325
+ ```
326
+
327
+ ### Switch to quality profile
328
+ ```
329
+ User: /ftm-config set profile quality
330
+ Shows before/after, saves change
331
+ ```
332
+
333
+ ### Set custom profile with specific models
334
+ ```
335
+ User: /ftm-config set profile custom opus haiku sonnet
336
+ Sets custom profile: planning=opus, execution=haiku, review=sonnet
337
+ ```
338
+
339
+ ### Change a specific setting
340
+ ```
341
+ User: /ftm-config set execution.max_parallel_agents 3
342
+ Updates max parallel agents from 5 to 3
343
+ ```
344
+
345
+ ### Disable auto-audit
346
+ ```
347
+ User: /ftm-config set execution.auto_audit false
348
+ → Disables automatic audit after executor tasks
349
+ ```
350
+
351
+ ### Disable a skill
352
+ ```
353
+ User: /ftm-config disable ftm-council
354
+ → Sets skills.ftm-council.enabled: false — ftm-mind will no longer route to it
355
+ ```
356
+
357
+ ### Show skill status
358
+ ```
359
+ User: /ftm-config show skills
360
+ → Displays all skills with enabled/disabled status
361
+ ```
362
+
363
+ ### Reset to defaults
364
+ ```
365
+ User: /ftm-config reset
366
+ → Confirms, then restores all settings to defaults
367
+ ```
368
+
369
+ ### Show all profiles
370
+ ```
371
+ User: /ftm-config show profiles
372
+ → Displays table of all profiles with their model assignments
373
+ ```
374
+
375
+ ## Troubleshooting
376
+
377
+ ### Config file is missing
378
+ The skill will create `~/.claude/ftm-config.yml` with default settings automatically. No action needed.
379
+
380
+ ### Invalid model name
381
+ Only `opus`, `sonnet`, `haiku`, and `inherit` are valid. The skill will reject other values and show the valid options.
382
+
383
+ ### Config file is malformed
384
+ 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.
385
+
386
+ ### Changes not taking effect
387
+ 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.
388
+
389
+ ## Requirements
390
+
391
+ - config: `~/.claude/ftm-config.yml` | optional | main config file (created with defaults if missing)
392
+
393
+ ## Risk
394
+
395
+ - level: low_write
396
+ - scope: reads and writes ~/.claude/ftm-config.yml only; backs up malformed config to ftm-config.yml.bak before overwriting; no project files touched
397
+ - rollback: restore from ~/.claude/ftm-config.yml.bak or delete the file to reset to defaults on next invocation
398
+
399
+ ## Approval Gates
400
+
401
+ - trigger: reset command issued | action: show current config and ask "Proceed?" before restoring defaults
402
+ - trigger: invalid model name or profile name provided | action: reject with clear error showing valid options, do not write
403
+ - complexity_routing: micro → auto | small → auto | medium → auto | large → auto | xl → auto
404
+
405
+ ## Fallbacks
406
+
407
+ - condition: ftm-config.yml missing | action: create file with default balanced profile and all defaults
408
+ - condition: ftm-config.yml malformed YAML | action: back up as ftm-config.yml.bak, create fresh default config
409
+ - condition: invalid model or profile value provided | action: reject and show valid options without writing
410
+
411
+ ## Capabilities
412
+
413
+ - env: none required
414
+
415
+ ## Event Payloads
416
+
417
+ ### task_completed
418
+ - skill: string — "ftm-config"
419
+ - action: string — "display" | "set_profile" | "set_value" | "reset" | "show_profiles" | "show_skills"
420
+ - changed_key: string | null — dotted path of changed setting
421
+ - old_value: string | null — value before change
422
+ - new_value: string | null — value after change