feed-the-machine 1.6.1 → 1.7.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 (269) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/brain.py +1340 -0
  4. package/bin/convert_claude_skills_to_codex.py +490 -0
  5. package/bin/generate-manifest.mjs +463 -463
  6. package/bin/harden_codex_skills.py +141 -0
  7. package/bin/install.mjs +491 -491
  8. package/bin/migrate-eng-buddy-data.py +875 -0
  9. package/bin/playbook_engine/__init__.py +1 -0
  10. package/bin/playbook_engine/conftest.py +8 -0
  11. package/bin/playbook_engine/extractor.py +33 -0
  12. package/bin/playbook_engine/manager.py +102 -0
  13. package/bin/playbook_engine/models.py +84 -0
  14. package/bin/playbook_engine/registry.py +35 -0
  15. package/bin/playbook_engine/test_extractor.py +72 -0
  16. package/bin/playbook_engine/test_integration.py +129 -0
  17. package/bin/playbook_engine/test_manager.py +85 -0
  18. package/bin/playbook_engine/test_models.py +166 -0
  19. package/bin/playbook_engine/test_registry.py +67 -0
  20. package/bin/playbook_engine/test_tracer.py +86 -0
  21. package/bin/playbook_engine/tracer.py +93 -0
  22. package/bin/tasks_db.py +456 -0
  23. package/docs/HOOKS.md +243 -243
  24. package/docs/INBOX.md +233 -233
  25. package/ftm/SKILL.md +125 -122
  26. package/ftm-audit/SKILL.md +623 -623
  27. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  28. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  29. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  30. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  31. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  32. package/ftm-audit/scripts/run-knip.sh +23 -23
  33. package/ftm-audit.yml +2 -2
  34. package/ftm-brainstorm/SKILL.md +1003 -498
  35. package/ftm-brainstorm/evals/evals.json +180 -100
  36. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  37. package/ftm-brainstorm/references/agent-prompts.md +552 -224
  38. package/ftm-brainstorm/references/plan-template.md +209 -121
  39. package/ftm-brainstorm.yml +2 -2
  40. package/ftm-browse/SKILL.md +454 -454
  41. package/ftm-browse/daemon/browser-manager.ts +206 -206
  42. package/ftm-browse/daemon/bun.lock +30 -30
  43. package/ftm-browse/daemon/cli.ts +347 -347
  44. package/ftm-browse/daemon/commands.ts +410 -410
  45. package/ftm-browse/daemon/main.ts +357 -357
  46. package/ftm-browse/daemon/package.json +17 -17
  47. package/ftm-browse/daemon/server.ts +189 -189
  48. package/ftm-browse/daemon/snapshot.ts +519 -519
  49. package/ftm-browse/daemon/tsconfig.json +22 -22
  50. package/ftm-browse.yml +4 -4
  51. package/ftm-capture/SKILL.md +370 -370
  52. package/ftm-capture.yml +4 -4
  53. package/ftm-codex-gate/SKILL.md +361 -361
  54. package/ftm-codex-gate.yml +2 -2
  55. package/ftm-config/SKILL.md +422 -345
  56. package/ftm-config.default.yml +125 -82
  57. package/ftm-config.yml +44 -2
  58. package/ftm-council/SKILL.md +416 -416
  59. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  60. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  61. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  62. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  63. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  64. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  65. package/ftm-council.yml +2 -2
  66. package/ftm-dashboard/SKILL.md +163 -163
  67. package/ftm-dashboard.yml +4 -4
  68. package/ftm-debug/SKILL.md +1037 -1037
  69. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  70. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  71. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  72. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  73. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  74. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  75. package/ftm-debug.yml +2 -2
  76. package/ftm-diagram/SKILL.md +277 -277
  77. package/ftm-diagram.yml +2 -2
  78. package/ftm-executor/SKILL.md +777 -777
  79. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  80. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  81. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  82. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  83. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  84. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  85. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  86. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  87. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -59
  88. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  89. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  90. package/ftm-executor/runtime/package.json +8 -8
  91. package/ftm-executor.yml +2 -2
  92. package/ftm-git/SKILL.md +441 -441
  93. package/ftm-git/evals/evals.json +26 -26
  94. package/ftm-git/evals/promptfoo.yaml +75 -75
  95. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  96. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  97. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  98. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  99. package/ftm-git.yml +2 -2
  100. package/ftm-inbox/backend/__pycache__/main.cpython-314.pyc +0 -0
  101. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  102. package/ftm-inbox/backend/adapters/base.py +230 -230
  103. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  104. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  105. package/ftm-inbox/backend/adapters/jira.py +136 -136
  106. package/ftm-inbox/backend/adapters/registry.py +192 -192
  107. package/ftm-inbox/backend/adapters/slack.py +110 -110
  108. package/ftm-inbox/backend/db/connection.py +54 -54
  109. package/ftm-inbox/backend/db/schema.py +78 -78
  110. package/ftm-inbox/backend/executor/__init__.py +7 -7
  111. package/ftm-inbox/backend/executor/engine.py +149 -149
  112. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  113. package/ftm-inbox/backend/main.py +103 -103
  114. package/ftm-inbox/backend/models/__init__.py +1 -1
  115. package/ftm-inbox/backend/models/unified_task.py +36 -36
  116. package/ftm-inbox/backend/planner/__init__.py +6 -6
  117. package/ftm-inbox/backend/planner/__pycache__/__init__.cpython-314.pyc +0 -0
  118. package/ftm-inbox/backend/planner/__pycache__/generator.cpython-314.pyc +0 -0
  119. package/ftm-inbox/backend/planner/__pycache__/schema.cpython-314.pyc +0 -0
  120. package/ftm-inbox/backend/planner/generator.py +127 -127
  121. package/ftm-inbox/backend/planner/schema.py +34 -34
  122. package/ftm-inbox/backend/requirements.txt +5 -5
  123. package/ftm-inbox/backend/routes/__pycache__/plan.cpython-314.pyc +0 -0
  124. package/ftm-inbox/backend/routes/execute.py +186 -186
  125. package/ftm-inbox/backend/routes/health.py +52 -52
  126. package/ftm-inbox/backend/routes/inbox.py +68 -68
  127. package/ftm-inbox/backend/routes/plan.py +271 -271
  128. package/ftm-inbox/bin/launchagent.mjs +91 -91
  129. package/ftm-inbox/bin/setup.mjs +188 -188
  130. package/ftm-inbox/bin/start.sh +10 -10
  131. package/ftm-inbox/bin/status.sh +17 -17
  132. package/ftm-inbox/bin/stop.sh +8 -8
  133. package/ftm-inbox/config.example.yml +55 -55
  134. package/ftm-inbox/package-lock.json +2898 -2898
  135. package/ftm-inbox/package.json +26 -26
  136. package/ftm-inbox/postcss.config.js +6 -6
  137. package/ftm-inbox/src/app.css +199 -199
  138. package/ftm-inbox/src/app.html +18 -18
  139. package/ftm-inbox/src/lib/api.ts +166 -166
  140. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  141. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  142. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  143. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  144. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  145. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  146. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  147. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  148. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  149. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  150. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  151. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  152. package/ftm-inbox/src/lib/theme.ts +47 -47
  153. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  154. package/ftm-inbox/src/routes/+page.svelte +401 -401
  155. package/ftm-inbox/svelte.config.js +12 -12
  156. package/ftm-inbox/tailwind.config.ts +63 -63
  157. package/ftm-inbox/tsconfig.json +13 -13
  158. package/ftm-inbox/vite.config.ts +6 -6
  159. package/ftm-intent/SKILL.md +241 -241
  160. package/ftm-intent.yml +2 -2
  161. package/ftm-manifest.json +3794 -3794
  162. package/ftm-map/SKILL.md +291 -291
  163. package/ftm-map/scripts/db.py +712 -712
  164. package/ftm-map/scripts/index.py +415 -415
  165. package/ftm-map/scripts/parser.py +224 -224
  166. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  167. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  168. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  169. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  170. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  171. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  172. package/ftm-map/scripts/query.py +301 -301
  173. package/ftm-map/scripts/ranker.py +377 -377
  174. package/ftm-map/scripts/requirements.txt +5 -5
  175. package/ftm-map/scripts/setup-hooks.sh +27 -27
  176. package/ftm-map/scripts/setup.sh +56 -56
  177. package/ftm-map/scripts/test_db.py +364 -364
  178. package/ftm-map/scripts/test_parser.py +174 -174
  179. package/ftm-map/scripts/test_query.py +183 -183
  180. package/ftm-map/scripts/test_ranker.py +199 -199
  181. package/ftm-map/scripts/views.py +591 -591
  182. package/ftm-map.yml +2 -2
  183. package/ftm-mind/SKILL.md +201 -1943
  184. package/ftm-mind/evals/promptfoo.yaml +142 -142
  185. package/ftm-mind/references/blackboard-protocol.md +110 -0
  186. package/ftm-mind/references/blackboard-schema.md +328 -328
  187. package/ftm-mind/references/complexity-guide.md +110 -110
  188. package/ftm-mind/references/complexity-sizing.md +138 -0
  189. package/ftm-mind/references/decide-act-protocol.md +172 -0
  190. package/ftm-mind/references/direct-execution.md +51 -0
  191. package/ftm-mind/references/environment-discovery.md +77 -0
  192. package/ftm-mind/references/event-registry.md +319 -319
  193. package/ftm-mind/references/mcp-inventory.md +300 -296
  194. package/ftm-mind/references/ops-routing.md +47 -0
  195. package/ftm-mind/references/orient-protocol.md +234 -0
  196. package/ftm-mind/references/personality.md +40 -0
  197. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  198. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  199. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  200. package/ftm-mind/references/reflexion-protocol.md +249 -249
  201. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  202. package/ftm-mind/references/routing-scenarios.md +35 -35
  203. package/ftm-mind.yml +2 -2
  204. package/ftm-ops.yml +4 -0
  205. package/ftm-pause/SKILL.md +395 -395
  206. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  207. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  208. package/ftm-pause.yml +2 -2
  209. package/ftm-researcher/SKILL.md +275 -275
  210. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  211. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  212. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  213. package/ftm-researcher/references/adaptive-search.md +116 -116
  214. package/ftm-researcher/references/agent-prompts.md +193 -193
  215. package/ftm-researcher/references/council-integration.md +193 -193
  216. package/ftm-researcher/references/output-format.md +203 -203
  217. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  218. package/ftm-researcher/scripts/score_credibility.py +234 -234
  219. package/ftm-researcher/scripts/validate_research.py +92 -92
  220. package/ftm-researcher.yml +2 -2
  221. package/ftm-resume/SKILL.md +518 -518
  222. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  223. package/ftm-resume.yml +2 -2
  224. package/ftm-retro/SKILL.md +380 -380
  225. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  226. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  227. package/ftm-retro.yml +2 -2
  228. package/ftm-routine/SKILL.md +170 -170
  229. package/ftm-routine.yml +4 -4
  230. package/ftm-state/blackboard/capabilities.json +5 -5
  231. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  232. package/ftm-state/blackboard/context.json +37 -23
  233. package/ftm-state/blackboard/experiences/doom-statusline-fix.json +26 -0
  234. package/ftm-state/blackboard/experiences/hackathon-pages-site.json +26 -0
  235. package/ftm-state/blackboard/experiences/hindsight-sso-kickoff.json +42 -0
  236. package/ftm-state/blackboard/experiences/index.json +58 -9
  237. package/ftm-state/blackboard/experiences/learning-ragnarok-api-access.json +23 -0
  238. package/ftm-state/blackboard/experiences/nordlayer-members-auto-assign.json +26 -0
  239. package/ftm-state/blackboard/experiences/saml2aws-stale-session-fix.json +41 -0
  240. package/ftm-state/blackboard/patterns.json +6 -6
  241. package/ftm-state/schemas/context.schema.json +130 -130
  242. package/ftm-state/schemas/experience-index.schema.json +77 -77
  243. package/ftm-state/schemas/experience.schema.json +78 -78
  244. package/ftm-state/schemas/patterns.schema.json +44 -44
  245. package/ftm-upgrade/SKILL.md +194 -194
  246. package/ftm-upgrade/scripts/check-version.sh +76 -76
  247. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  248. package/ftm-upgrade.yml +2 -2
  249. package/ftm-verify.yml +2 -2
  250. package/ftm.yml +2 -2
  251. package/hooks/ftm-auto-log.sh +137 -0
  252. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  253. package/hooks/ftm-discovery-reminder.sh +90 -90
  254. package/hooks/ftm-drafts-gate.sh +61 -61
  255. package/hooks/ftm-event-logger.mjs +107 -107
  256. package/hooks/ftm-install-hooks.sh +240 -0
  257. package/hooks/ftm-learning-capture.sh +117 -0
  258. package/hooks/ftm-map-autodetect.sh +79 -79
  259. package/hooks/ftm-pending-sync-check.sh +22 -22
  260. package/hooks/ftm-plan-gate.sh +92 -92
  261. package/hooks/ftm-post-commit-trigger.sh +57 -57
  262. package/hooks/ftm-post-compaction.sh +138 -0
  263. package/hooks/ftm-pre-compaction.sh +147 -0
  264. package/hooks/ftm-session-end.sh +52 -0
  265. package/hooks/ftm-session-snapshot.sh +213 -0
  266. package/hooks/settings-template.json +81 -81
  267. package/install.sh +363 -363
  268. package/package.json +84 -84
  269. 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