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,249 +1,249 @@
1
- # Reflexion Protocol — Verbal RL for FTM-Mind
2
-
3
- **Location**: `~/.claude/skills/ftm-mind/references/reflexion-protocol.md`
4
- **Purpose**: Defines how ftm-mind stores and reuses execution experience through the Reflexion pattern — a lightweight verbal reinforcement learning loop that improves behavior across sessions without fine-tuning.
5
-
6
- ---
7
-
8
- ## The Reflexion Pattern
9
-
10
- Reflexion is a simple feedback mechanism: after each significant action, write a short natural-language reflection describing what happened and why. Before the next attempt at a similar task, retrieve and prepend relevant reflections to the working context.
11
-
12
- Core loop:
13
- 1. **Act** — execute the task using available skills and tools
14
- 2. **Reflect** — generate a structured verbal reflection on the outcome
15
- 3. **Store** — write the reflection as an experience entry to the blackboard
16
- 4. **Retrieve** — on the next similar task, load matching experiences during Orient
17
- 5. **Adjust** — synthesize retrieved lessons into an adjusted approach before acting
18
-
19
- The key insight: language models do not update weights between conversations, but they can update behavior when prior experience is injected as context. Reflexion makes that injection systematic.
20
-
21
- ### What "Prepend to Next Attempt" Means
22
-
23
- When ftm-mind enters the Orient phase of the OODA loop for a new task:
24
-
25
- 1. Read `experiences/index.json`
26
- 2. Filter entries matching the current `task_type` and any overlapping tags
27
- 3. Load the top 3–5 most recent matching experience files
28
- 4. Synthesize their `lessons` arrays into a short prior-experience summary
29
- 5. That summary is the first input considered when forming the plan — not an afterthought
30
-
31
- This is the prepend. The retrieved experience shapes the approach before any analysis of the current task begins.
32
-
33
- ---
34
-
35
- ## Trigger Conditions
36
-
37
- Micro-reflections are written after any of the following events:
38
-
39
- | Event | When It Fires | What to Record |
40
- |---|---|---|
41
- | `task_completed` | Any task finishes — micro through large | Outcome, approach, what worked |
42
- | `bug_fixed` | A bug was diagnosed and resolved | Root cause, fix strategy, what was misleading |
43
- | `error_encountered` | An unexpected error during execution | Error context, what caused it, how to avoid |
44
- | `code_committed` | A meaningful commit is made | What changed, why, any surprising side effects |
45
- | `plan_generated` | A plan was created from brainstorming | Plan structure, assumptions made, expected risks |
46
- | `user_correction` | The user corrected the mind's approach | What the mind got wrong, what the correct approach was |
47
-
48
- Do not wait for a formal retro to record these. Write the experience file immediately after the triggering event resolves. Delayed recording produces lower-quality lessons.
49
-
50
- ---
51
-
52
- ## Reflection Format
53
-
54
- For each trigger, generate a structured verbal RL reflection before writing the experience entry:
55
-
56
- ```
57
- I [succeeded / failed / partially succeeded] at [task description] because [specific reason].
58
- Next time I should [concrete, actionable adjustment].
59
- Confidence: [low / medium / high]
60
- ```
61
-
62
- ### Good Reflection Examples
63
-
64
- ```
65
- I succeeded at adding the freshservice enrichment poller because the existing poller_runtime.py
66
- pattern was reusable with minimal modification.
67
- Next time I should check for existing runtime patterns before writing new polling infrastructure.
68
- Confidence: medium
69
- ```
70
-
71
- ```
72
- I partially succeeded at the Jira sync task because the field mapping worked but the
73
- attachment handling failed silently — no error was surfaced until the next run.
74
- Next time I should add explicit attachment count validation after every sync and log
75
- mismatches immediately rather than relying on downstream detection.
76
- Confidence: low
77
- ```
78
-
79
- ```
80
- I failed at the database migration because I assumed the staging schema matched production
81
- and did not read the migration history first.
82
- Next time I should always read the last 5 migration files before writing a new one.
83
- Confidence: high
84
- ```
85
-
86
- ### Bad Reflection Examples (Do Not Write These)
87
-
88
- ```
89
- I did okay at the task. It was kind of complex.
90
- Next time I should be more careful.
91
- Confidence: medium
92
- ```
93
-
94
- Why bad: "be more careful" is not actionable. No specific reason for the outcome. Cannot be acted on by a future skill loading this file.
95
-
96
- ```
97
- I succeeded because I am good at code.
98
- ```
99
-
100
- Why bad: No transferable lesson. Causation is not traced. Useless as a retrieval artifact.
101
-
102
- ### Decomposing Into Lessons
103
-
104
- The verbal reflection maps to the `lessons` array in the experience entry. Decompose the "Next time I should..." clause into one or more concrete lesson strings:
105
-
106
- Reflection: "Next time I should check for existing runtime patterns before writing new polling infrastructure and validate attachment handling with explicit count checks."
107
-
108
- Lessons array:
109
- ```json
110
- [
111
- "Check for existing runtime patterns (e.g. poller_runtime.py) before writing new polling infrastructure from scratch.",
112
- "Add explicit attachment count validation after every sync operation; do not rely on downstream error detection."
113
- ]
114
- ```
115
-
116
- ---
117
-
118
- ## Experience Entry Format Reference
119
-
120
- Full schema defined in `blackboard-schema.md`. Key fields for micro-reflections:
121
-
122
- ```json
123
- {
124
- "task_type": "bug | feature | refactor | investigation | configuration | documentation | test | deploy",
125
- "description": "1-2 sentence summary of what was attempted",
126
- "approach": "How the task was approached — tools, strategies, sequence of steps",
127
- "outcome": "success | partial | failure",
128
- "lessons": [
129
- "Concrete, actionable takeaway derived from the verbal RL reflection",
130
- "Each lesson string must be specific enough to act on without further context"
131
- ],
132
- "complexity_estimated": "trivial | low | medium | high | very_high",
133
- "complexity_actual": "trivial | low | medium | high | very_high",
134
- "capabilities_used": ["ftm-executor", "mcp__mcp-atlassian-personal__jira_get_issue", "backend-architect"],
135
- "tags": ["python", "slack", "database", "auth"],
136
- "confidence": "low | medium | high",
137
- "recorded_at": "ISO8601 timestamp"
138
- }
139
- ```
140
-
141
- Written to: `~/.claude/ftm-state/blackboard/experiences/YYYY-MM-DD_task-slug.json`
142
-
143
- After writing the file, append a metadata entry to `experiences/index.json` and increment `total_count`.
144
-
145
- ---
146
-
147
- ## Pattern Promotion Thresholds
148
-
149
- Patterns are promoted from individual experience files into `patterns.json` when the same lesson has been independently observed enough times to be considered reliable.
150
-
151
- | Occurrences | Action | Confidence Level |
152
- |---|---|---|
153
- | 1–2 | Stay in experience files only | — |
154
- | 3 | Promote to `patterns.json` | `low` |
155
- | 5+ | Raise confidence | `medium` |
156
- | 8+ | Raise confidence | `high` |
157
-
158
- ### How to Detect Promotion Candidates
159
-
160
- After writing an experience entry:
161
-
162
- 1. Read `experiences/index.json`
163
- 2. Find all entries where `task_type` matches AND at least one `tag` overlaps with the new entry
164
- 3. Load those experience files
165
- 4. Compare `lessons` arrays across all loaded files — look for thematic overlap (same root cause, same fix pattern, same constraint)
166
- 5. If 3+ entries share a lesson theme, the theme is ready to be promoted
167
-
168
- Promotion writes to the appropriate category in `patterns.json`:
169
- - `codebase_insights` — observations about the codebase structure, conventions, or tech choices
170
- - `execution_patterns` — what approaches work or fail for specific task types
171
- - `user_behavior` — observed user preferences, correction patterns, approval expectations
172
- - `recurring_issues` — problems that keep appearing, with their symptoms and known resolutions
173
-
174
- ---
175
-
176
- ## Pattern Decay Rules
177
-
178
- Patterns that are not reinforced within 30 days become less reliable. Apply decay when reading `patterns.json` during any blackboard operation:
179
-
180
- | Current Confidence | Days Since `last_reinforced` | Action |
181
- |---|---|---|
182
- | `high` | > 30 days | Reduce to `medium` |
183
- | `medium` | > 30 days | Reduce to `low` |
184
- | `low` | > 30 days | Remove from `patterns.json` |
185
-
186
- Decay is applied in-place: read `patterns.json`, compute which entries have expired, reduce or remove them, write the file back.
187
-
188
- Do not decay entries that have been reinforced recently — `last_reinforced` is updated each time a new experience confirms the same pattern.
189
-
190
- ---
191
-
192
- ## How the Mind Uses Reflexion During Orient
193
-
194
- Orient is the second phase of the OODA loop (Observe → Orient → Decide → Act). It is where the mind interprets current context and forms a plan. Reflexion inserts prior experience directly into Orient:
195
-
196
- ```
197
- Orient Phase Protocol:
198
-
199
- 1. Read experiences/index.json
200
- 2. Filter by current task_type + tag overlap
201
- 3. Load top 3–5 experience files (most recent first; prefer confidence: high)
202
- 4. Read patterns.json → filter patterns relevant to the current task domain
203
- 5. Apply decay to any patterns with last_reinforced > 30 days
204
- 6. Synthesize a prior-experience summary:
205
- - List the most relevant lessons from loaded experiences
206
- - Note any patterns that apply (from patterns.json)
207
- - Flag any recurring issues that match the current task's context
208
- 7. Use this summary as the first input when forming the execution plan
209
- ```
210
-
211
- The synthesis does not need to be formal. A short bullet list of 3–5 observations from past experience is sufficient. The goal is to surface "things that have gone wrong before in situations like this" before committing to an approach.
212
-
213
- ### Retrieval Priority
214
-
215
- When loading experience files, prioritize in this order:
216
- 1. `confidence: "high"` entries over `"medium"` over `"low"`
217
- 2. `outcome: "success"` for positive lessons (what to repeat)
218
- 3. `outcome: "failure"` for cautionary lessons (what to avoid)
219
- 4. Most recent `recorded_at` as tiebreaker
220
-
221
- Load both success and failure experiences — learning what not to do is as valuable as learning what works.
222
-
223
- ---
224
-
225
- ## Cold-Start Behavior
226
-
227
- The blackboard starts empty. During the first ~10 interactions (`total_count < 10` in `index.json`):
228
-
229
- - Record EVERY completed task, even trivial ones
230
- - Set `confidence: "low"` on all entries — they have not been cross-validated
231
- - Prioritize breadth of recording over depth of analysis — getting entries into the index quickly is more valuable than perfect lesson articulation
232
- - Do not skip recording because a task "was simple" — even trivial tasks reveal conventions and constraints that are useful context
233
-
234
- The cold-start window is how the system bootstraps its memory. By the 10th interaction, retrieval should already be returning context that reduces repeated mistakes.
235
-
236
- ---
237
-
238
- ## Quick Reference
239
-
240
- | Concept | Rule |
241
- |---|---|
242
- | When to reflect | After every trigger event — do not wait for retro |
243
- | Reflection format | "I [outcome] at [task] because [reason]. Next time: [adjustment]. Confidence: [level]." |
244
- | Experience file location | `~/.claude/ftm-state/blackboard/experiences/YYYY-MM-DD_task-slug.json` |
245
- | Schema reference | `blackboard-schema.md` section 3 |
246
- | Promotion threshold | 3+ occurrences → `low` confidence; 5+ → `medium`; 8+ → `high` |
247
- | Decay window | 30 days without reinforcement → reduce confidence one level; at `low` → remove |
248
- | Orient integration | Load 3–5 matching experiences + relevant patterns before forming any plan |
249
- | Cold-start rule | Record everything until `total_count >= 10`, all at `confidence: "low"` |
1
+ # Reflexion Protocol — Verbal RL for FTM-Mind
2
+
3
+ **Location**: `~/.claude/skills/ftm-mind/references/reflexion-protocol.md`
4
+ **Purpose**: Defines how ftm-mind stores and reuses execution experience through the Reflexion pattern — a lightweight verbal reinforcement learning loop that improves behavior across sessions without fine-tuning.
5
+
6
+ ---
7
+
8
+ ## The Reflexion Pattern
9
+
10
+ Reflexion is a simple feedback mechanism: after each significant action, write a short natural-language reflection describing what happened and why. Before the next attempt at a similar task, retrieve and prepend relevant reflections to the working context.
11
+
12
+ Core loop:
13
+ 1. **Act** — execute the task using available skills and tools
14
+ 2. **Reflect** — generate a structured verbal reflection on the outcome
15
+ 3. **Store** — write the reflection as an experience entry to the blackboard
16
+ 4. **Retrieve** — on the next similar task, load matching experiences during Orient
17
+ 5. **Adjust** — synthesize retrieved lessons into an adjusted approach before acting
18
+
19
+ The key insight: language models do not update weights between conversations, but they can update behavior when prior experience is injected as context. Reflexion makes that injection systematic.
20
+
21
+ ### What "Prepend to Next Attempt" Means
22
+
23
+ When ftm-mind enters the Orient phase of the OODA loop for a new task:
24
+
25
+ 1. Read `experiences/index.json`
26
+ 2. Filter entries matching the current `task_type` and any overlapping tags
27
+ 3. Load the top 3–5 most recent matching experience files
28
+ 4. Synthesize their `lessons` arrays into a short prior-experience summary
29
+ 5. That summary is the first input considered when forming the plan — not an afterthought
30
+
31
+ This is the prepend. The retrieved experience shapes the approach before any analysis of the current task begins.
32
+
33
+ ---
34
+
35
+ ## Trigger Conditions
36
+
37
+ Micro-reflections are written after any of the following events:
38
+
39
+ | Event | When It Fires | What to Record |
40
+ |---|---|---|
41
+ | `task_completed` | Any task finishes — micro through large | Outcome, approach, what worked |
42
+ | `bug_fixed` | A bug was diagnosed and resolved | Root cause, fix strategy, what was misleading |
43
+ | `error_encountered` | An unexpected error during execution | Error context, what caused it, how to avoid |
44
+ | `code_committed` | A meaningful commit is made | What changed, why, any surprising side effects |
45
+ | `plan_generated` | A plan was created from brainstorming | Plan structure, assumptions made, expected risks |
46
+ | `user_correction` | The user corrected the mind's approach | What the mind got wrong, what the correct approach was |
47
+
48
+ Do not wait for a formal retro to record these. Write the experience file immediately after the triggering event resolves. Delayed recording produces lower-quality lessons.
49
+
50
+ ---
51
+
52
+ ## Reflection Format
53
+
54
+ For each trigger, generate a structured verbal RL reflection before writing the experience entry:
55
+
56
+ ```
57
+ I [succeeded / failed / partially succeeded] at [task description] because [specific reason].
58
+ Next time I should [concrete, actionable adjustment].
59
+ Confidence: [low / medium / high]
60
+ ```
61
+
62
+ ### Good Reflection Examples
63
+
64
+ ```
65
+ I succeeded at adding the freshservice enrichment poller because the existing poller_runtime.py
66
+ pattern was reusable with minimal modification.
67
+ Next time I should check for existing runtime patterns before writing new polling infrastructure.
68
+ Confidence: medium
69
+ ```
70
+
71
+ ```
72
+ I partially succeeded at the Jira sync task because the field mapping worked but the
73
+ attachment handling failed silently — no error was surfaced until the next run.
74
+ Next time I should add explicit attachment count validation after every sync and log
75
+ mismatches immediately rather than relying on downstream detection.
76
+ Confidence: low
77
+ ```
78
+
79
+ ```
80
+ I failed at the database migration because I assumed the staging schema matched production
81
+ and did not read the migration history first.
82
+ Next time I should always read the last 5 migration files before writing a new one.
83
+ Confidence: high
84
+ ```
85
+
86
+ ### Bad Reflection Examples (Do Not Write These)
87
+
88
+ ```
89
+ I did okay at the task. It was kind of complex.
90
+ Next time I should be more careful.
91
+ Confidence: medium
92
+ ```
93
+
94
+ Why bad: "be more careful" is not actionable. No specific reason for the outcome. Cannot be acted on by a future skill loading this file.
95
+
96
+ ```
97
+ I succeeded because I am good at code.
98
+ ```
99
+
100
+ Why bad: No transferable lesson. Causation is not traced. Useless as a retrieval artifact.
101
+
102
+ ### Decomposing Into Lessons
103
+
104
+ The verbal reflection maps to the `lessons` array in the experience entry. Decompose the "Next time I should..." clause into one or more concrete lesson strings:
105
+
106
+ Reflection: "Next time I should check for existing runtime patterns before writing new polling infrastructure and validate attachment handling with explicit count checks."
107
+
108
+ Lessons array:
109
+ ```json
110
+ [
111
+ "Check for existing runtime patterns (e.g. poller_runtime.py) before writing new polling infrastructure from scratch.",
112
+ "Add explicit attachment count validation after every sync operation; do not rely on downstream error detection."
113
+ ]
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Experience Entry Format Reference
119
+
120
+ Full schema defined in `blackboard-schema.md`. Key fields for micro-reflections:
121
+
122
+ ```json
123
+ {
124
+ "task_type": "bug | feature | refactor | investigation | configuration | documentation | test | deploy",
125
+ "description": "1-2 sentence summary of what was attempted",
126
+ "approach": "How the task was approached — tools, strategies, sequence of steps",
127
+ "outcome": "success | partial | failure",
128
+ "lessons": [
129
+ "Concrete, actionable takeaway derived from the verbal RL reflection",
130
+ "Each lesson string must be specific enough to act on without further context"
131
+ ],
132
+ "complexity_estimated": "trivial | low | medium | high | very_high",
133
+ "complexity_actual": "trivial | low | medium | high | very_high",
134
+ "capabilities_used": ["ftm-executor", "mcp__mcp-atlassian-personal__jira_get_issue", "backend-architect"],
135
+ "tags": ["python", "slack", "database", "auth"],
136
+ "confidence": "low | medium | high",
137
+ "recorded_at": "ISO8601 timestamp"
138
+ }
139
+ ```
140
+
141
+ Written to: `~/.claude/ftm-state/blackboard/experiences/YYYY-MM-DD_task-slug.json`
142
+
143
+ After writing the file, append a metadata entry to `experiences/index.json` and increment `total_count`.
144
+
145
+ ---
146
+
147
+ ## Pattern Promotion Thresholds
148
+
149
+ Patterns are promoted from individual experience files into `patterns.json` when the same lesson has been independently observed enough times to be considered reliable.
150
+
151
+ | Occurrences | Action | Confidence Level |
152
+ |---|---|---|
153
+ | 1–2 | Stay in experience files only | — |
154
+ | 3 | Promote to `patterns.json` | `low` |
155
+ | 5+ | Raise confidence | `medium` |
156
+ | 8+ | Raise confidence | `high` |
157
+
158
+ ### How to Detect Promotion Candidates
159
+
160
+ After writing an experience entry:
161
+
162
+ 1. Read `experiences/index.json`
163
+ 2. Find all entries where `task_type` matches AND at least one `tag` overlaps with the new entry
164
+ 3. Load those experience files
165
+ 4. Compare `lessons` arrays across all loaded files — look for thematic overlap (same root cause, same fix pattern, same constraint)
166
+ 5. If 3+ entries share a lesson theme, the theme is ready to be promoted
167
+
168
+ Promotion writes to the appropriate category in `patterns.json`:
169
+ - `codebase_insights` — observations about the codebase structure, conventions, or tech choices
170
+ - `execution_patterns` — what approaches work or fail for specific task types
171
+ - `user_behavior` — observed user preferences, correction patterns, approval expectations
172
+ - `recurring_issues` — problems that keep appearing, with their symptoms and known resolutions
173
+
174
+ ---
175
+
176
+ ## Pattern Decay Rules
177
+
178
+ Patterns that are not reinforced within 30 days become less reliable. Apply decay when reading `patterns.json` during any blackboard operation:
179
+
180
+ | Current Confidence | Days Since `last_reinforced` | Action |
181
+ |---|---|---|
182
+ | `high` | > 30 days | Reduce to `medium` |
183
+ | `medium` | > 30 days | Reduce to `low` |
184
+ | `low` | > 30 days | Remove from `patterns.json` |
185
+
186
+ Decay is applied in-place: read `patterns.json`, compute which entries have expired, reduce or remove them, write the file back.
187
+
188
+ Do not decay entries that have been reinforced recently — `last_reinforced` is updated each time a new experience confirms the same pattern.
189
+
190
+ ---
191
+
192
+ ## How the Mind Uses Reflexion During Orient
193
+
194
+ Orient is the second phase of the OODA loop (Observe → Orient → Decide → Act). It is where the mind interprets current context and forms a plan. Reflexion inserts prior experience directly into Orient:
195
+
196
+ ```
197
+ Orient Phase Protocol:
198
+
199
+ 1. Read experiences/index.json
200
+ 2. Filter by current task_type + tag overlap
201
+ 3. Load top 3–5 experience files (most recent first; prefer confidence: high)
202
+ 4. Read patterns.json → filter patterns relevant to the current task domain
203
+ 5. Apply decay to any patterns with last_reinforced > 30 days
204
+ 6. Synthesize a prior-experience summary:
205
+ - List the most relevant lessons from loaded experiences
206
+ - Note any patterns that apply (from patterns.json)
207
+ - Flag any recurring issues that match the current task's context
208
+ 7. Use this summary as the first input when forming the execution plan
209
+ ```
210
+
211
+ The synthesis does not need to be formal. A short bullet list of 3–5 observations from past experience is sufficient. The goal is to surface "things that have gone wrong before in situations like this" before committing to an approach.
212
+
213
+ ### Retrieval Priority
214
+
215
+ When loading experience files, prioritize in this order:
216
+ 1. `confidence: "high"` entries over `"medium"` over `"low"`
217
+ 2. `outcome: "success"` for positive lessons (what to repeat)
218
+ 3. `outcome: "failure"` for cautionary lessons (what to avoid)
219
+ 4. Most recent `recorded_at` as tiebreaker
220
+
221
+ Load both success and failure experiences — learning what not to do is as valuable as learning what works.
222
+
223
+ ---
224
+
225
+ ## Cold-Start Behavior
226
+
227
+ The blackboard starts empty. During the first ~10 interactions (`total_count < 10` in `index.json`):
228
+
229
+ - Record EVERY completed task, even trivial ones
230
+ - Set `confidence: "low"` on all entries — they have not been cross-validated
231
+ - Prioritize breadth of recording over depth of analysis — getting entries into the index quickly is more valuable than perfect lesson articulation
232
+ - Do not skip recording because a task "was simple" — even trivial tasks reveal conventions and constraints that are useful context
233
+
234
+ The cold-start window is how the system bootstraps its memory. By the 10th interaction, retrieval should already be returning context that reduces repeated mistakes.
235
+
236
+ ---
237
+
238
+ ## Quick Reference
239
+
240
+ | Concept | Rule |
241
+ |---|---|
242
+ | When to reflect | After every trigger event — do not wait for retro |
243
+ | Reflection format | "I [outcome] at [task] because [reason]. Next time: [adjustment]. Confidence: [level]." |
244
+ | Experience file location | `~/.claude/ftm-state/blackboard/experiences/YYYY-MM-DD_task-slug.json` |
245
+ | Schema reference | `blackboard-schema.md` section 3 |
246
+ | Promotion threshold | 3+ occurrences → `low` confidence; 5+ → `medium`; 8+ → `high` |
247
+ | Decay window | 30 days without reinforcement → reduce confidence one level; at `low` → remove |
248
+ | Orient integration | Load 3–5 matching experiences + relevant patterns before forming any plan |
249
+ | Cold-start rule | Record everything until `total_count >= 10`, all at `confidence: "low"` |
@@ -1,22 +1,22 @@
1
- # Routing Scenarios
2
-
3
- Use these as behavioral tests for the Orient → Decide pipeline.
4
-
5
- | Input | What Orient notices | Decision |
6
- |---|---|---|
7
- | `debug this flaky test` | bug, uncertainty, likely multiple hypotheses | route to `ftm-debug` |
8
- | `help me think through auth design` | ideation, architecture, not implementation yet | route to `ftm-brainstorm` |
9
- | `execute ~/.claude/plans/foo.md` | explicit plan path and execution ask | route to `ftm-executor` |
10
- | `rename this variable` | one obvious local edit, tiny blast radius | handle directly as `micro` |
11
- | `what would other AIs think about this approach` | explicit multi-model request | route to `ftm-council` |
12
- | `audit the wiring` | structural verification request | route to `ftm-audit` |
13
- | Jira ticket URL only | ticket-driven work, intent not yet clear | fetch via `mcp-atlassian-personal`, then re-orient |
14
- | `check my calendar and draft a slack message` | mixed-domain workflow, read + external draft/send boundary | read calendar, draft Slack, ask before send |
15
- | `make this better` | ambiguous, insufficient anchor | ask one focused clarifying question |
16
- | `/ftm help` | explicit help/menu request | show help menu |
17
- | `I just committed the fix, now check it` | continuation, recent commit validation | inspect diff, run tests or audit, then report |
18
- | `/ftm-debug auth race condition` | explicit skill choice | respect explicit route to `ftm-debug` |
19
- | `/ftm-brainstorm replacement for Okta hooks` | explicit design-phase route | respect explicit route to `ftm-brainstorm` |
20
- | `open the page and tell me what looks broken` | visual/browser task | route to `ftm-browse` or use browser support if already in-flow |
21
- | `add error handling to the API routes` | medium task, multi-file, `plan_first` mode | present numbered plan for approval, wait for user response, then execute approved steps |
22
- | `refactor auth to support OAuth` (with `plan_first`) | medium-large, multi-file with dependencies | present plan with 5-7 steps, user says "skip 4, for step 3 use passport.js" → adjust and execute |
1
+ # Routing Scenarios
2
+
3
+ Use these as behavioral tests for the Orient → Decide pipeline.
4
+
5
+ | Input | What Orient notices | Decision |
6
+ |---|---|---|
7
+ | `debug this flaky test` | bug, uncertainty, likely multiple hypotheses | route to `ftm-debug` |
8
+ | `help me think through auth design` | ideation, architecture, not implementation yet | route to `ftm-brainstorm` |
9
+ | `execute ~/.claude/plans/foo.md` | explicit plan path and execution ask | route to `ftm-executor` |
10
+ | `rename this variable` | one obvious local edit, tiny blast radius | handle directly as `micro` |
11
+ | `what would other AIs think about this approach` | explicit multi-model request | route to `ftm-council` |
12
+ | `audit the wiring` | structural verification request | route to `ftm-audit` |
13
+ | Jira ticket URL only | ticket-driven work, intent not yet clear | fetch via `mcp-atlassian-personal` (configured name — see `ops.mcp_account_rules` in ftm-config.yml), then re-orient |
14
+ | `check my calendar and draft a slack message` | mixed-domain workflow, read + external draft/send boundary | read calendar, draft Slack, ask before send |
15
+ | `make this better` | ambiguous, insufficient anchor | ask one focused clarifying question |
16
+ | `/ftm help` | explicit help/menu request | show help menu |
17
+ | `I just committed the fix, now check it` | continuation, recent commit validation | inspect diff, run tests or audit, then report |
18
+ | `/ftm-debug auth race condition` | explicit skill choice | respect explicit route to `ftm-debug` |
19
+ | `/ftm-brainstorm replacement for Okta hooks` | explicit design-phase route | respect explicit route to `ftm-brainstorm` |
20
+ | `open the page and tell me what looks broken` | visual/browser task | route to `ftm-browse` or use browser support if already in-flow |
21
+ | `add error handling to the API routes` | medium task, multi-file, `plan_first` mode | present numbered plan for approval, wait for user response, then execute approved steps |
22
+ | `refactor auth to support OAuth` (with `plan_first`) | medium-large, multi-file with dependencies | present plan with 5-7 steps, user says "skip 4, for step 3 use passport.js" → adjust and execute |
@@ -1,35 +1,35 @@
1
- # Routing Scenarios Reference
2
-
3
- Use these as behavioral tests for the Decide phase.
4
-
5
- | Input | What Orient notices | Decision |
6
- |---|---|---|
7
- | `debug this flaky test` | bug, uncertainty, likely multiple hypotheses | route to `ftm-debug` |
8
- | `help me think through auth design` | ideation, architecture, not implementation yet | route to `ftm-brainstorm` |
9
- | `execute ~/.claude/plans/foo.md` | explicit plan path and execution ask | route to `ftm-executor` |
10
- | `rename this variable` | one obvious local edit, tiny blast radius | handle directly as `micro` |
11
- | `what would other AIs think about this approach` | explicit multi-model request | route to `ftm-council` |
12
- | `audit the wiring` | structural verification request | route to `ftm-audit` |
13
- | Jira ticket URL only | ticket-driven work, intent not yet clear | fetch via `mcp-atlassian-personal`, then re-orient |
14
- | `check my calendar and draft a slack message` | mixed-domain workflow, read + external draft/send boundary | read calendar, draft Slack, ask before send |
15
- | `make this better` | ambiguous, insufficient anchor | ask one focused clarifying question |
16
- | `/ftm help` | explicit help/menu request | show help menu |
17
- | `I just committed the fix, now check it` | continuation, recent commit validation | inspect diff, run tests or audit, then report |
18
- | `/ftm-debug auth race condition` | explicit skill choice | respect explicit route to `ftm-debug` |
19
- | `/ftm-brainstorm replacement for Okta hooks` | explicit design-phase route | respect explicit route to `ftm-brainstorm` |
20
- | `open the page and tell me what looks broken` | visual/browser task | route to `ftm-browse` or use browser support if already in-flow |
21
- | `add error handling to the API routes` | medium task, multi-file, `plan_first` mode | present numbered plan for approval, wait for user response, then execute approved steps |
22
- | `refactor auth to support OAuth` (with `plan_first`) | medium-large, multi-file with dependencies | present plan with 5-7 steps, user says "skip 4, for step 3 use passport.js" → adjust and execute |
23
- | `research parallel agent architectures` | research task, factual inquiry, broad scope | route to `ftm-researcher` (deep) |
24
- | `what's the best way to handle auth in Next.js` | research task, specific technical question | route to `ftm-researcher` (standard) |
25
- | `quick look at how Stripe handles webhooks` | research task, explicit "quick" signal | route to `ftm-researcher` (quick) |
26
- | `compare Redis vs Memcached for our session store` | research task, comparative, codebase-relevant | route to `ftm-researcher` (deep, codebase-aware) |
27
- | `find me examples of rate limiting middleware` | research task, looking for implementations | route to `ftm-researcher` (standard) |
28
- | `I want to build a dashboard` | ideation, not research | route to `ftm-brainstorm` (calls researcher internally) |
29
- | `/ftm-researcher auth patterns in microservices` | explicit skill choice | respect explicit route to `ftm-researcher` |
30
- | `what breaks if I change handleAuth` | structural query, blast radius, specific symbol | route to `ftm-map` (query: blast-radius) |
31
- | `map this codebase` | indexing request, no map.db exists | route to `ftm-map` (bootstrap mode) |
32
- | `where do we handle authentication` | code search, structural | route to `ftm-map` (query: search) |
33
- | `what depends on the UserService class` | dependency chain, specific symbol | route to `ftm-map` (query: deps) |
34
- | `show me everything about the parseConfig function` | symbol info request | route to `ftm-map` (query: info) |
35
- | `/ftm-map blast-radius handlePayment` | explicit skill choice | respect explicit route to `ftm-map` |
1
+ # Routing Scenarios Reference
2
+
3
+ Use these as behavioral tests for the Decide phase.
4
+
5
+ | Input | What Orient notices | Decision |
6
+ |---|---|---|
7
+ | `debug this flaky test` | bug, uncertainty, likely multiple hypotheses | route to `ftm-debug` |
8
+ | `help me think through auth design` | ideation, architecture, not implementation yet | route to `ftm-brainstorm` |
9
+ | `execute ~/.claude/plans/foo.md` | explicit plan path and execution ask | route to `ftm-executor` |
10
+ | `rename this variable` | one obvious local edit, tiny blast radius | handle directly as `micro` |
11
+ | `what would other AIs think about this approach` | explicit multi-model request | route to `ftm-council` |
12
+ | `audit the wiring` | structural verification request | route to `ftm-audit` |
13
+ | Jira ticket URL only | ticket-driven work, intent not yet clear | fetch via `mcp-atlassian-personal` (configured name — see `ops.mcp_account_rules` in ftm-config.yml), then re-orient |
14
+ | `check my calendar and draft a slack message` | mixed-domain workflow, read + external draft/send boundary | read calendar, draft Slack, ask before send |
15
+ | `make this better` | ambiguous, insufficient anchor | ask one focused clarifying question |
16
+ | `/ftm help` | explicit help/menu request | show help menu |
17
+ | `I just committed the fix, now check it` | continuation, recent commit validation | inspect diff, run tests or audit, then report |
18
+ | `/ftm-debug auth race condition` | explicit skill choice | respect explicit route to `ftm-debug` |
19
+ | `/ftm-brainstorm replacement for Okta hooks` | explicit design-phase route | respect explicit route to `ftm-brainstorm` |
20
+ | `open the page and tell me what looks broken` | visual/browser task | route to `ftm-browse` or use browser support if already in-flow |
21
+ | `add error handling to the API routes` | medium task, multi-file, `plan_first` mode | present numbered plan for approval, wait for user response, then execute approved steps |
22
+ | `refactor auth to support OAuth` (with `plan_first`) | medium-large, multi-file with dependencies | present plan with 5-7 steps, user says "skip 4, for step 3 use passport.js" → adjust and execute |
23
+ | `research parallel agent architectures` | research task, factual inquiry, broad scope | route to `ftm-researcher` (deep) |
24
+ | `what's the best way to handle auth in Next.js` | research task, specific technical question | route to `ftm-researcher` (standard) |
25
+ | `quick look at how Stripe handles webhooks` | research task, explicit "quick" signal | route to `ftm-researcher` (quick) |
26
+ | `compare Redis vs Memcached for our session store` | research task, comparative, codebase-relevant | route to `ftm-researcher` (deep, codebase-aware) |
27
+ | `find me examples of rate limiting middleware` | research task, looking for implementations | route to `ftm-researcher` (standard) |
28
+ | `I want to build a dashboard` | ideation, not research | route to `ftm-brainstorm` (calls researcher internally) |
29
+ | `/ftm-researcher auth patterns in microservices` | explicit skill choice | respect explicit route to `ftm-researcher` |
30
+ | `what breaks if I change handleAuth` | structural query, blast radius, specific symbol | route to `ftm-map` (query: blast-radius) |
31
+ | `map this codebase` | indexing request, no map.db exists | route to `ftm-map` (bootstrap mode) |
32
+ | `where do we handle authentication` | code search, structural | route to `ftm-map` (query: search) |
33
+ | `what depends on the UserService class` | dependency chain, specific symbol | route to `ftm-map` (query: deps) |
34
+ | `show me everything about the parseConfig function` | symbol info request | route to `ftm-map` (query: info) |
35
+ | `/ftm-map blast-radius handlePayment` | explicit skill choice | respect explicit route to `ftm-map` |
package/ftm-mind.yml CHANGED
@@ -1,2 +1,2 @@
1
- name: ftm-mind
2
- description: Unified cognitive loop for the ftm skill system. Receives any input and contextualizes it against codebase state, accumulated experience, available capabilities, and task complexity before deciding how to act. Use when user says "/ftm-mind", "/ftm" followed by freeform text, or provides any input that needs intelligent routing, decomposition, or multi-step reasoning. Handles everything from micro tasks ("rename this variable") to large projects ("build this feature") by sizing complexity and selecting the right execution strategy. Replaces keyword-matching routing with OODA-based reasoning. Do NOT use when user explicitly invokes a specific ftm skill by name — those route directly.
1
+ name: ftm-mind
2
+ description: Unified cognitive loop for the ftm skill system. Receives any input and contextualizes it against codebase state, accumulated experience, available capabilities, and task complexity before deciding how to act. Use when user says "/ftm-mind", "/ftm" followed by freeform text, or provides any input that needs intelligent routing, decomposition, or multi-step reasoning. Handles everything from micro tasks ("rename this variable") to large projects ("build this feature") by sizing complexity and selecting the right execution strategy. Replaces keyword-matching routing with OODA-based reasoning. Do NOT use when user explicitly invokes a specific ftm skill by name — those route directly.
package/ftm-ops.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ name: ftm-ops
3
+ description: Personal operations intelligence — task management, capacity tracking, stakeholder comms, meeting intel, incident tracking, and pattern recognition. Use when user says "what's blocking me", "am I overcommitted", "wrap up", "what happened today", "what happened this week", task CRUD, capacity check, stakeholder update, meeting notes, incident report, pattern analysis, "add a task", "close task", "mark done", "daily summary", "weekly rollup", "follow up with", "draft message to", "how busy am I", "burnout check", "context switches", "recurring issue", "doc gap", "ftm-ops".
4
+ ---