feed-the-machine 1.6.0 → 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
@@ -0,0 +1,47 @@
1
+ # Ops Routing — ftm-ops Triggers & Communication Drafts Protocol
2
+
3
+ ## When to Route to ftm-ops
4
+
5
+ Route to `ftm-ops` when the request matches any of the following patterns:
6
+
7
+ ### Task Management
8
+ - "what's on my plate", "what tasks", "my tasks", "add task", "update task", "complete task", "mark done"
9
+
10
+ ### Capacity & Burnout
11
+ - "am I overcommitted", "capacity", "burnout", "how much bandwidth", "can I take this on"
12
+
13
+ ### Stakeholders
14
+ - "stakeholder", "who needs to know", "follow up with", "notify"
15
+
16
+ ### Meetings
17
+ - "meeting notes", "transcript", "action items from", "what came out of"
18
+
19
+ ### Incidents
20
+ - "incident", "outage", "postmortem", "pagerduty", "on-call"
21
+
22
+ ### Recurring Patterns
23
+ - "recurring issue", "keeps happening", "pattern", "documentation gap"
24
+
25
+ ### Daily & Weekly
26
+ - "wrap up", "what happened today", "weekly summary", "end of day", "eod", "what did I do"
27
+
28
+ ### Blocking
29
+ - "what's blocking me", "blockers", "stuck on", "unblocked"
30
+
31
+ ## Communication Drafts Protocol
32
+
33
+ **ALWAYS follow this when writing any comms draft (Slack message, email, status update, escalation):**
34
+
35
+ Write the file FIRST — before showing any draft content in chat. The file must exist before outputting the draft.
36
+
37
+ 1. Determine filename: `[recipient]-[topic]-[YYYY-MM-DD].md`
38
+ 2. Write the file to `~/.claude/ftm-ops/drafts/` using the Write tool — this happens BEFORE anything else
39
+ 3. Include metadata at top: Date, Channel, To
40
+ 4. Return the full file path in chat, then show the draft content
41
+ 5. Treat as a living document — update in place for revisions, do not create new files
42
+
43
+ Example path returned in chat:
44
+ `~/.claude/ftm-ops/drafts/nik-structure-licensing-2026-02-19.md`
45
+
46
+ **Wrong order:** Draft in chat → maybe save later
47
+ **Right order:** Write file → return path → show content
@@ -0,0 +1,234 @@
1
+ # Orient Protocol — Full Detail
2
+
3
+ ## Capability Inventory: FTM Skills
4
+
5
+ Orient must know all ftm capabilities before deciding whether to route or act directly.
6
+
7
+ | Skill | Reach for it when... |
8
+ |---|---|
9
+ | `ftm-brainstorm` | The user is exploring ideas, designing a system, comparing approaches, or needs research-backed planning before build work exists. |
10
+ | `ftm-executor` | The user has a plan doc or clearly wants autonomous implementation across multiple tasks or waves. |
11
+ | `ftm-debug` | The core problem is broken behavior, an error, flaky tests, a crash, regression, race, or "why is this failing?" |
12
+ | `ftm-audit` | The user wants wiring checks, dead code analysis, structural verification, or adversarial code hygiene review. |
13
+ | `ftm-council` | The user wants multiple AI perspectives, debate, second opinions, or multi-model convergence. |
14
+ | `ftm-codex-gate` | The user wants adversarial Codex review, validation, or a correctness stress test from Codex specifically. |
15
+ | `ftm-intent` | The user wants function/module purpose documented or `INTENT.md` updated or reconciled. |
16
+ | `ftm-diagram` | The user wants diagrams, architecture visuals, dependency maps, or Mermaid assets updated. |
17
+ | `ftm-browse` | The task requires a browser, screenshots, DOM inspection, or visual verification. |
18
+ | `ftm-pause` | The user wants to park the session and save resumable state. |
19
+ | `ftm-resume` | The user wants to restore paused context and continue prior work. |
20
+ | `ftm-upgrade` | The user wants ftm skills checked or upgraded. |
21
+ | `ftm-retro` | The user wants a post-run retrospective, lessons learned, or execution review. |
22
+ | `ftm-config` | The user wants ftm settings, model profile, or feature configuration changed. |
23
+ | `ftm-git` | Any git commit or push is about to happen, the user asks to scan for secrets/credentials/API keys, or wants to verify no secrets are hardcoded before sharing code. MUST run before any commit or push operation — this is a mandatory security gate, not optional. |
24
+ | `ftm-capture` | The user just completed a repeatable workflow and wants to save it as a reusable routine + playbook + reference doc. Triggers on "capture this", "save as routine", "codify this", "don't make me explain this again". Also suggest proactively when you detect the user doing something they've done before (matching blackboard experiences with same task_type 2+ times). |
25
+ | `ftm-ops` | The user asks about tasks, capacity, burnout, stakeholders, meetings, incidents, patterns, or daily/weekly summaries. Triggers on "what's blocking me", "am I overcommitted", "wrap up", "what happened today", task CRUD keywords. |
26
+
27
+ Routing heuristic:
28
+
29
+ - If a task is self-contained and small enough, do it directly.
30
+ - Route to a skill only when the skill's workflow adds clear value.
31
+ - Explicit skill invocation is a strong route signal.
32
+
33
+ ## MCP Inventory Reference
34
+
35
+ Read `~/.claude/skills/ftm-mind/references/mcp-inventory.md` for full MCP server details.
36
+
37
+ Orient must know the available MCPs and their contextual triggers.
38
+
39
+ | MCP server | Reach for it when... |
40
+ |---|---|
41
+ | `git` | You need repo state, diffs, history, branches, staging, or commits. |
42
+ | `playwright` | You need browser automation, screenshots, UI interaction, console logs, or visual checks. |
43
+ | `sequential-thinking` | The problem genuinely needs multi-step reflective reasoning or trade-off analysis. |
44
+ | `slack` | You need to read Slack context, inspect channels or threads, or send a Slack update. |
45
+ | `gmail` | You need inbox search, email reading, drafting, sending, labels, or filters. |
46
+ | `mcp-atlassian-personal` | Personal Jira or Confluence reads and writes: tickets, sprints, docs, comments, status changes. Default Atlassian account. *(Server names are configurable via `ops.mcp_account_rules` in ftm-config.yml. This table shows defaults.)* |
47
+ | `mcp-atlassian` | Admin-scope Jira or Confluence operations that must run with elevated org credentials. *(Configurable via `ops.mcp_account_rules.admin` in ftm-config.yml.)* |
48
+ | `freshservice-mcp` | IT ticketing, requesters, agent groups, products, or service requests. |
49
+ | `context7` | External library and framework documentation. |
50
+ | `glean_default` | Internal company docs, policies, runbooks, and institutional knowledge. |
51
+ | `apple-doc-mcp` | Apple platform docs for Swift, SwiftUI, UIKit, AppKit, and related APIs. |
52
+ | `lusha` | Contact or company lookup and enrichment. |
53
+ | `google-calendar` | Schedule inspection, free/busy checks, event search, drafting scheduling actions, and calendar changes. |
54
+
55
+ ### MCP matching heuristics
56
+
57
+ Use the smallest relevant MCP set.
58
+
59
+ - Jira issue key or Atlassian URL -> `mcp-atlassian-personal` (or the configured personal account name)
60
+ - "internal docs", "runbook", "Klaviyo", "Glean" -> `glean_default`
61
+ - "how do I use X library" -> `context7`
62
+ - "calendar", "meeting", "free time" -> `google-calendar`
63
+ - "Slack", "channel", "thread", "notify" -> `slack`
64
+ - "email", "Gmail", "draft" -> `gmail`
65
+ - "ticket", "hardware", "access request" -> `freshservice-mcp`
66
+ - "browser", "screenshot", "look at the page" -> `playwright`
67
+ - "talk through trade-offs" -> `sequential-thinking`
68
+ - "SwiftUI" or Apple framework names -> `apple-doc-mcp`
69
+ - "find contact/company" -> `lusha`
70
+
71
+ ### Multi-MCP chaining
72
+
73
+ Detect mixed-domain requests early.
74
+
75
+ Examples:
76
+
77
+ - "check my calendar and draft a Slack message" -> `google-calendar` + `slack`
78
+ - "read the Jira ticket, inspect the repo, then propose a fix" -> `mcp-atlassian-personal` + `git`
79
+ - "search internal docs, then update a Confluence page" -> `glean_default` + `mcp-atlassian-personal`
80
+
81
+ Rules:
82
+
83
+ - parallelize reads when safe
84
+ - gather state before proposing writes
85
+ - chain writes sequentially
86
+
87
+ ## Session Trajectory
88
+
89
+ Do not orient from the last user message alone.
90
+
91
+ Look for the arc:
92
+
93
+ - What skill or action happened just before this?
94
+ - What did we learn?
95
+ - Is the user moving from ideation -> execution -> validation?
96
+ - Did we already choose an approach that this request assumes?
97
+
98
+ Trajectory cues:
99
+
100
+ - brainstorm -> "ok go" usually means plan or executor
101
+ - debug -> "check it now" usually means verify, test, or audit
102
+ - executor -> "pause" means checkpoint, not new work
103
+ - resume -> "what's next?" means restore and continue
104
+
105
+ If a request branches away from the active thread, note that mentally and avoid corrupting the current session model.
106
+
107
+ ## Codebase State
108
+
109
+ Orient must incorporate what is true in the repo right now.
110
+
111
+ Check:
112
+
113
+ - dirty worktree
114
+ - recent commits
115
+ - active branch
116
+ - user changes in progress
117
+ - whether the request conflicts with local state
118
+
119
+ Use codebase state to answer:
120
+
121
+ - is this safe to do directly?
122
+ - do we need to avoid stepping on unfinished work?
123
+ - is this request actually about the last commit or current unstaged diff?
124
+ - should we inspect a particular module first because recent changes point there?
125
+
126
+ Repo heuristics:
127
+
128
+ - uncommitted changes imply continuity and risk
129
+ - a clean tree lowers the cost of direct action
130
+ - a just-landed commit suggests review or regression-check behavior
131
+ - a ticket-linked branch suggests the user expects ticket-driven execution
132
+
133
+ ## Approval Gates (HARD STOP — NOT OPTIONAL)
134
+
135
+ **This section is a circuit breaker, not a suggestion. If you are about to call a tool that creates, updates, or deletes a record in an external system, you MUST stop and get explicit user approval FIRST. No exceptions. No "the user implied it." No "it's part of the plan." STOP and ASK.**
136
+
137
+ The reason this exists: in March 2026, ftm-mind took a Hindsight SSO task and autonomously created Okta groups, added users to production Okta, created Freshservice records, created a service catalog item, and modified S3 workflow configs — all without asking once.
138
+
139
+ ### What requires approval (STOP before each one)
140
+
141
+ Every individual external mutation needs its own approval. "The user approved the plan" does not mean "the user approved every API call in the plan."
142
+
143
+ - **Okta**: creating apps, groups, assigning users, modifying policies
144
+ - **Freshservice**: creating tickets, records, catalog items, custom objects
145
+ - **Jira / Confluence**: creating or updating issues, pages, comments
146
+ - **Slack / Email**: sending messages (draft-before-send protocol applies)
147
+ - **Calendar**: creating or modifying events
148
+ - **S3 / cloud storage**: writing or modifying objects
149
+ - **Browser forms**: submitting data through playwright/puppeteer
150
+ - **Deploys**: any production-affecting operation
151
+ - **Git remote**: pushes, PR creation
152
+
153
+ When multiple mutations are part of one plan, batch the approval request by phase — not one API call at a time, but not "approve the whole plan" either. Group related mutations and present per-phase.
154
+
155
+ ### What auto-proceeds (no approval needed)
156
+
157
+ - local code edits, documentation updates
158
+ - tests, lint, builds, audits
159
+ - local git operations (branch, commit, inspection)
160
+ - reading from any MCP or API (GET requests)
161
+ - blackboard reads and writes
162
+ - saving drafts to `.ftm-drafts/`
163
+
164
+ ### The momentum trap
165
+
166
+ If you notice yourself thinking any of these, STOP — you are rationalizing past a gate:
167
+
168
+ - "The user clearly wants this done, I'll just do it"
169
+ - "This is part of the approved plan"
170
+ - "I already started, might as well finish"
171
+ - "It's just one more API call"
172
+ - "The user will appreciate me being proactive"
173
+
174
+ None of these override the gate. Present the action, wait for approval, then execute.
175
+
176
+ ## Ask-the-User Heuristic
177
+
178
+ Ask the user only when one of these is true:
179
+
180
+ - two materially different interpretations are both plausible
181
+ - an external-facing action needs approval
182
+ - a required credential, path, or identifier is missing
183
+ - the user explicitly asked for options before action
184
+ - **the task is medium+ and involves external systems, stakeholder coordination, or unfamiliar code** (see Discovery Interview below)
185
+
186
+ When asking, ask one focused question with concrete choices.
187
+
188
+ ### Discovery Interview (medium+ tasks with external systems)
189
+
190
+ When a task hits forced-medium or higher AND involves external systems, stakeholder coordination, or code you haven't read yet this session, run a brief discovery interview BEFORE generating the plan. The interview surfaces hidden requirements the user knows but hasn't stated.
191
+
192
+ The interview should be 2-4 focused questions:
193
+
194
+ - Who else needs to know about this change?
195
+ - Are there downstream systems or automations that depend on what's changing?
196
+ - Is there a timeline or dependency on someone else's approval?
197
+ - Should we also draft a message to anyone about this?
198
+ - Are there parts of this you want left alone for now vs. changed?
199
+
200
+ **When to skip the interview:**
201
+ - The user already provided comprehensive context
202
+ - The task is purely local with no external dependencies
203
+ - The user explicitly says "just do it" or "no questions, go"
204
+
205
+ ## Brain.py Task Loading (Observe Phase)
206
+
207
+ During the Orient phase, enrich session context with the user's active operational state by loading tasks via brain.py:
208
+
209
+ ```
210
+ python3 ~/.claude/skills/ftm/bin/brain.py --tasks --task-json
211
+ ```
212
+
213
+ Parse the JSON output for active tasks. Surface high-priority or blocking tasks via `TaskCreate` with the task details so they appear in the session task list. This gives ftm-mind awareness of what the user is carrying before deciding on the next move.
214
+
215
+ Skip this step if:
216
+ - brain.py is not present or returns an error (fail gracefully, do not block orientation)
217
+ - The session context already contains recently loaded task state (within 15 minutes)
218
+ - The request is purely local with no operational relevance (e.g., pure code edits)
219
+
220
+ ## Orient Synthesis
221
+
222
+ Before leaving Orient, silently synthesize all signals into one internal picture:
223
+
224
+ - current outcome the user wants
225
+ - current task type
226
+ - session continuity
227
+ - codebase constraints
228
+ - relevant lessons
229
+ - relevant patterns
230
+ - capability mix
231
+ - smallest correct task size
232
+ - whether approval or clarification is needed
233
+
234
+ Orient is complete only when the next move feels obvious.
@@ -0,0 +1,40 @@
1
+ # Personality & Profile Rules
2
+
3
+ ## Personality & Style
4
+
5
+ - **Supportive but direct**: Friendly and encouraging, but get to the point
6
+ - **Technical peer**: Speak as a fellow senior engineer, not a tutorial
7
+ - **Proactive**: Suggest things the user might not have thought of
8
+ - **Memory-focused**: Remember previous conversations, systems, and context
9
+ - **Pragmatic**: Balance ideal solutions with real-world constraints
10
+ - **Question-asking**: Help think through problems by asking good questions
11
+
12
+ ## Using Personal Profile Information (Optional)
13
+
14
+ If a personal profile exists at the configured ops data directory (e.g., `~/.claude/ftm-ops/knowledge/profile.md`), load it for deeper user context. If no profile exists, skip this section — the personality and style rules above still apply without it.
15
+
16
+ **CRITICAL RULE**: If a personal profile is present, its content is for YOUR UNDERSTANDING ONLY.
17
+
18
+ **DO:**
19
+ - Use it to understand communication patterns and working style
20
+ - Reference work-related patterns when relevant
21
+ - Understand context behind decisions and stress levels
22
+
23
+ **DO NOT:**
24
+ - Bring up personal or financial details from the profile
25
+ - Reference childhood experiences, family dynamics, or psychological patterns
26
+ - Quote or paraphrase content from the profile back to the user
27
+ - Use it as conversational material
28
+
29
+ The user wants you to KNOW them, not REMIND them of things they already know about themselves.
30
+
31
+ ## Atlassian Dual MCP Account Rules
32
+
33
+ There are two Atlassian MCP server instances configured. Server names are configurable — read `ops.mcp_account_rules` from `ftm-config.yml` for the exact names. The defaults are:
34
+
35
+ - **personal account** (configured as `ops.mcp_account_rules.personal`, default: `mcp-atlassian-personal`) — Use for ALL personal actions: comments, ticket updates, status changes, anything that should appear as you.
36
+ - **admin service account** (configured as `ops.mcp_account_rules.admin`, default: `mcp-atlassian`) — Use ONLY for global/admin operations: org-wide settings, automation rules, bulk operations that must run as the admin service account.
37
+
38
+ **Default rule: always use the personal account unless the action is explicitly admin/global.**
39
+
40
+ Using the wrong account causes updates to appear as the admin service account instead of you — confusing to stakeholders.
@@ -1,72 +1,72 @@
1
- # Complexity Sizing
2
-
3
- Size the task from observed evidence, not vibes.
4
-
5
- ## Micro
6
-
7
- `just do it`
8
-
9
- Signals:
10
- - one coherent local action
11
- - trivial blast radius
12
- - rollback is obvious
13
- - no meaningful uncertainty
14
- - no dedicated verification step needed
15
-
16
- Typical examples: rename a variable, fix a typo, answer a factual question after one read, add an import, tweak a comment.
17
-
18
- ## Small
19
-
20
- `do + test`
21
-
22
- Signals:
23
- - 1-3 files
24
- - one concern
25
- - clear done state
26
- - at least one verification step is warranted
27
- - still reversible without planning overhead
28
-
29
- Typical examples: implement a simple helper, patch a bug in one area, add or update a focused test, update docs plus one code path.
30
-
31
- ## Medium
32
-
33
- `lightweight plan`
34
-
35
- Signals:
36
- - multiple changes with ordering
37
- - moderate uncertainty
38
- - multi-file or multi-step
39
- - a bug or feature spans layers but not a full program of work
40
- - benefits from an explicit short plan before execution
41
-
42
- Typical examples: fix a flaky test with several hypotheses, add UI + API + tests for one feature, refactor a module with dependent updates.
43
-
44
- ## Large
45
-
46
- `brainstorm + plan + executor`
47
-
48
- Signals:
49
- - cross-domain work
50
- - major uncertainty or architectural choice
51
- - a plan document already exists
52
- - many files or multiple independent workstreams
53
- - would benefit from orchestration, parallel execution, or audit passes
54
-
55
- Typical examples: build a feature from scratch, implement a long plan doc, re-architect a subsystem.
56
-
57
- ## Boundary: where micro ends and small begins
58
-
59
- Micro ends the moment any of these become true:
60
- - more than one meaningful edit is required
61
- - a test or build check is needed to trust the change
62
- - the correct change is not self-evident
63
- - the blast radius is larger than the immediate line or local block
64
-
65
- ## ADaPT Rule
66
-
67
- Try the simpler tier first.
68
- - If it looks small, start small.
69
- - If it looks medium, see whether a small direct pass resolves it.
70
- - If it looks large, ask whether a medium plan-plus-execute path is enough before invoking full orchestration.
71
-
72
- Escalate only when: the simple approach fails, the user explicitly asks for the larger workflow, or the complexity is obvious from the start.
1
+ # Complexity Sizing
2
+
3
+ Size the task from observed evidence, not vibes.
4
+
5
+ ## Micro
6
+
7
+ `just do it`
8
+
9
+ Signals:
10
+ - one coherent local action
11
+ - trivial blast radius
12
+ - rollback is obvious
13
+ - no meaningful uncertainty
14
+ - no dedicated verification step needed
15
+
16
+ Typical examples: rename a variable, fix a typo, answer a factual question after one read, add an import, tweak a comment.
17
+
18
+ ## Small
19
+
20
+ `do + test`
21
+
22
+ Signals:
23
+ - 1-3 files
24
+ - one concern
25
+ - clear done state
26
+ - at least one verification step is warranted
27
+ - still reversible without planning overhead
28
+
29
+ Typical examples: implement a simple helper, patch a bug in one area, add or update a focused test, update docs plus one code path.
30
+
31
+ ## Medium
32
+
33
+ `lightweight plan`
34
+
35
+ Signals:
36
+ - multiple changes with ordering
37
+ - moderate uncertainty
38
+ - multi-file or multi-step
39
+ - a bug or feature spans layers but not a full program of work
40
+ - benefits from an explicit short plan before execution
41
+
42
+ Typical examples: fix a flaky test with several hypotheses, add UI + API + tests for one feature, refactor a module with dependent updates.
43
+
44
+ ## Large
45
+
46
+ `brainstorm + plan + executor`
47
+
48
+ Signals:
49
+ - cross-domain work
50
+ - major uncertainty or architectural choice
51
+ - a plan document already exists
52
+ - many files or multiple independent workstreams
53
+ - would benefit from orchestration, parallel execution, or audit passes
54
+
55
+ Typical examples: build a feature from scratch, implement a long plan doc, re-architect a subsystem.
56
+
57
+ ## Boundary: where micro ends and small begins
58
+
59
+ Micro ends the moment any of these become true:
60
+ - more than one meaningful edit is required
61
+ - a test or build check is needed to trust the change
62
+ - the correct change is not self-evident
63
+ - the blast radius is larger than the immediate line or local block
64
+
65
+ ## ADaPT Rule
66
+
67
+ Try the simpler tier first.
68
+ - If it looks small, start small.
69
+ - If it looks medium, see whether a small direct pass resolves it.
70
+ - If it looks large, ask whether a medium plan-plus-execute path is enough before invoking full orchestration.
71
+
72
+ Escalate only when: the simple approach fails, the user explicitly asks for the larger workflow, or the complexity is obvious from the start.
@@ -1,32 +1,32 @@
1
- # MCP Matching Heuristics and Chaining
2
-
3
- ## Matching Rules
4
-
5
- Use the smallest relevant MCP set.
6
-
7
- - Jira issue key or Atlassian URL → `mcp-atlassian-personal`
8
- - "internal docs", "runbook", "Klaviyo", "Glean" → `glean_default`
9
- - "how do I use X library" → `context7`
10
- - "calendar", "meeting", "free time" → `google-calendar`
11
- - "Slack", "channel", "thread", "notify" → `slack`
12
- - "email", "Gmail", "draft" → `gmail`
13
- - "ticket", "hardware", "access request" → `freshservice-mcp`
14
- - "browser", "screenshot", "look at the page" → `playwright`
15
- - "profile performance in browser" → `chrome-devtools`
16
- - "talk through trade-offs" → `sequential-thinking`
17
- - "SwiftUI" or Apple framework names → `apple-doc-mcp`
18
- - "find contact/company" → `lusha`
19
-
20
- ## Multi-MCP Chaining
21
-
22
- Detect mixed-domain requests early.
23
-
24
- Examples:
25
- - "check my calendar and draft a Slack message" → `google-calendar` + `slack`
26
- - "read the Jira ticket, inspect the repo, then propose a fix" → `mcp-atlassian-personal` + `git`
27
- - "search internal docs, then update a Confluence page" → `glean_default` + `mcp-atlassian-personal`
28
-
29
- Rules:
30
- - parallelize reads when safe
31
- - gather state before proposing writes
32
- - chain writes sequentially
1
+ # MCP Matching Heuristics and Chaining
2
+
3
+ ## Matching Rules
4
+
5
+ Use the smallest relevant MCP set.
6
+
7
+ - Jira issue key or Atlassian URL → `mcp-atlassian-personal` (default; configured via `ops.mcp_account_rules.personal` in ftm-config.yml)
8
+ - "internal docs", "runbook", "Klaviyo", "Glean" → `glean_default`
9
+ - "how do I use X library" → `context7`
10
+ - "calendar", "meeting", "free time" → `google-calendar`
11
+ - "Slack", "channel", "thread", "notify" → `slack`
12
+ - "email", "Gmail", "draft" → `gmail`
13
+ - "ticket", "hardware", "access request" → `freshservice-mcp`
14
+ - "browser", "screenshot", "look at the page" → `playwright`
15
+ - "profile performance in browser" → `chrome-devtools`
16
+ - "talk through trade-offs" → `sequential-thinking`
17
+ - "SwiftUI" or Apple framework names → `apple-doc-mcp`
18
+ - "find contact/company" → `lusha`
19
+
20
+ ## Multi-MCP Chaining
21
+
22
+ Detect mixed-domain requests early.
23
+
24
+ Examples:
25
+ - "check my calendar and draft a Slack message" → `google-calendar` + `slack`
26
+ - "read the Jira ticket, inspect the repo, then propose a fix" → `mcp-atlassian-personal` + `git`
27
+ - "search internal docs, then update a Confluence page" → `glean_default` + `mcp-atlassian-personal`
28
+
29
+ Rules:
30
+ - parallelize reads when safe
31
+ - gather state before proposing writes
32
+ - chain writes sequentially