feed-the-machine 1.6.1 → 1.7.1

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