feed-the-machine 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/brain.py +1340 -0
  4. package/bin/convert_claude_skills_to_codex.py +490 -0
  5. package/bin/generate-manifest.mjs +463 -463
  6. package/bin/harden_codex_skills.py +141 -0
  7. package/bin/install.mjs +491 -491
  8. package/bin/migrate-eng-buddy-data.py +875 -0
  9. package/bin/playbook_engine/__init__.py +1 -0
  10. package/bin/playbook_engine/conftest.py +8 -0
  11. package/bin/playbook_engine/extractor.py +33 -0
  12. package/bin/playbook_engine/manager.py +102 -0
  13. package/bin/playbook_engine/models.py +84 -0
  14. package/bin/playbook_engine/registry.py +35 -0
  15. package/bin/playbook_engine/test_extractor.py +72 -0
  16. package/bin/playbook_engine/test_integration.py +129 -0
  17. package/bin/playbook_engine/test_manager.py +85 -0
  18. package/bin/playbook_engine/test_models.py +166 -0
  19. package/bin/playbook_engine/test_registry.py +67 -0
  20. package/bin/playbook_engine/test_tracer.py +86 -0
  21. package/bin/playbook_engine/tracer.py +93 -0
  22. package/bin/tasks_db.py +456 -0
  23. package/docs/HOOKS.md +243 -243
  24. package/docs/INBOX.md +233 -233
  25. package/ftm/SKILL.md +125 -122
  26. package/ftm-audit/SKILL.md +623 -623
  27. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  28. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  29. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  30. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  31. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  32. package/ftm-audit/scripts/run-knip.sh +23 -23
  33. package/ftm-audit.yml +2 -2
  34. package/ftm-brainstorm/SKILL.md +1003 -498
  35. package/ftm-brainstorm/evals/evals.json +180 -100
  36. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  37. package/ftm-brainstorm/references/agent-prompts.md +552 -224
  38. package/ftm-brainstorm/references/plan-template.md +209 -121
  39. package/ftm-brainstorm.yml +2 -2
  40. package/ftm-browse/SKILL.md +454 -454
  41. package/ftm-browse/daemon/browser-manager.ts +206 -206
  42. package/ftm-browse/daemon/bun.lock +30 -30
  43. package/ftm-browse/daemon/cli.ts +347 -347
  44. package/ftm-browse/daemon/commands.ts +410 -410
  45. package/ftm-browse/daemon/main.ts +357 -357
  46. package/ftm-browse/daemon/package.json +17 -17
  47. package/ftm-browse/daemon/server.ts +189 -189
  48. package/ftm-browse/daemon/snapshot.ts +519 -519
  49. package/ftm-browse/daemon/tsconfig.json +22 -22
  50. package/ftm-browse.yml +4 -4
  51. package/ftm-capture/SKILL.md +370 -370
  52. package/ftm-capture.yml +4 -4
  53. package/ftm-codex-gate/SKILL.md +361 -361
  54. package/ftm-codex-gate.yml +2 -2
  55. package/ftm-config/SKILL.md +422 -345
  56. package/ftm-config.default.yml +125 -82
  57. package/ftm-config.yml +44 -2
  58. package/ftm-council/SKILL.md +416 -416
  59. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  60. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  61. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  62. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  63. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  64. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  65. package/ftm-council.yml +2 -2
  66. package/ftm-dashboard/SKILL.md +163 -163
  67. package/ftm-dashboard.yml +4 -4
  68. package/ftm-debug/SKILL.md +1037 -1037
  69. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  70. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  71. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  72. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  73. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  74. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  75. package/ftm-debug.yml +2 -2
  76. package/ftm-diagram/SKILL.md +277 -277
  77. package/ftm-diagram.yml +2 -2
  78. package/ftm-executor/SKILL.md +777 -777
  79. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  80. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  81. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  82. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  83. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  84. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  85. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  86. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  87. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -59
  88. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  89. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  90. package/ftm-executor/runtime/package.json +8 -8
  91. package/ftm-executor.yml +2 -2
  92. package/ftm-git/SKILL.md +441 -441
  93. package/ftm-git/evals/evals.json +26 -26
  94. package/ftm-git/evals/promptfoo.yaml +75 -75
  95. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  96. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  97. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  98. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  99. package/ftm-git.yml +2 -2
  100. package/ftm-inbox/backend/__pycache__/main.cpython-314.pyc +0 -0
  101. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  102. package/ftm-inbox/backend/adapters/base.py +230 -230
  103. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  104. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  105. package/ftm-inbox/backend/adapters/jira.py +136 -136
  106. package/ftm-inbox/backend/adapters/registry.py +192 -192
  107. package/ftm-inbox/backend/adapters/slack.py +110 -110
  108. package/ftm-inbox/backend/db/connection.py +54 -54
  109. package/ftm-inbox/backend/db/schema.py +78 -78
  110. package/ftm-inbox/backend/executor/__init__.py +7 -7
  111. package/ftm-inbox/backend/executor/engine.py +149 -149
  112. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  113. package/ftm-inbox/backend/main.py +103 -103
  114. package/ftm-inbox/backend/models/__init__.py +1 -1
  115. package/ftm-inbox/backend/models/unified_task.py +36 -36
  116. package/ftm-inbox/backend/planner/__init__.py +6 -6
  117. package/ftm-inbox/backend/planner/__pycache__/__init__.cpython-314.pyc +0 -0
  118. package/ftm-inbox/backend/planner/__pycache__/generator.cpython-314.pyc +0 -0
  119. package/ftm-inbox/backend/planner/__pycache__/schema.cpython-314.pyc +0 -0
  120. package/ftm-inbox/backend/planner/generator.py +127 -127
  121. package/ftm-inbox/backend/planner/schema.py +34 -34
  122. package/ftm-inbox/backend/requirements.txt +5 -5
  123. package/ftm-inbox/backend/routes/__pycache__/plan.cpython-314.pyc +0 -0
  124. package/ftm-inbox/backend/routes/execute.py +186 -186
  125. package/ftm-inbox/backend/routes/health.py +52 -52
  126. package/ftm-inbox/backend/routes/inbox.py +68 -68
  127. package/ftm-inbox/backend/routes/plan.py +271 -271
  128. package/ftm-inbox/bin/launchagent.mjs +91 -91
  129. package/ftm-inbox/bin/setup.mjs +188 -188
  130. package/ftm-inbox/bin/start.sh +10 -10
  131. package/ftm-inbox/bin/status.sh +17 -17
  132. package/ftm-inbox/bin/stop.sh +8 -8
  133. package/ftm-inbox/config.example.yml +55 -55
  134. package/ftm-inbox/package-lock.json +2898 -2898
  135. package/ftm-inbox/package.json +26 -26
  136. package/ftm-inbox/postcss.config.js +6 -6
  137. package/ftm-inbox/src/app.css +199 -199
  138. package/ftm-inbox/src/app.html +18 -18
  139. package/ftm-inbox/src/lib/api.ts +166 -166
  140. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  141. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  142. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  143. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  144. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  145. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  146. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  147. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  148. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  149. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  150. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  151. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  152. package/ftm-inbox/src/lib/theme.ts +47 -47
  153. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  154. package/ftm-inbox/src/routes/+page.svelte +401 -401
  155. package/ftm-inbox/svelte.config.js +12 -12
  156. package/ftm-inbox/tailwind.config.ts +63 -63
  157. package/ftm-inbox/tsconfig.json +13 -13
  158. package/ftm-inbox/vite.config.ts +6 -6
  159. package/ftm-intent/SKILL.md +241 -241
  160. package/ftm-intent.yml +2 -2
  161. package/ftm-manifest.json +3794 -3794
  162. package/ftm-map/SKILL.md +291 -291
  163. package/ftm-map/scripts/db.py +712 -712
  164. package/ftm-map/scripts/index.py +415 -415
  165. package/ftm-map/scripts/parser.py +224 -224
  166. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  167. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  168. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  169. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  170. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  171. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  172. package/ftm-map/scripts/query.py +301 -301
  173. package/ftm-map/scripts/ranker.py +377 -377
  174. package/ftm-map/scripts/requirements.txt +5 -5
  175. package/ftm-map/scripts/setup-hooks.sh +27 -27
  176. package/ftm-map/scripts/setup.sh +56 -56
  177. package/ftm-map/scripts/test_db.py +364 -364
  178. package/ftm-map/scripts/test_parser.py +174 -174
  179. package/ftm-map/scripts/test_query.py +183 -183
  180. package/ftm-map/scripts/test_ranker.py +199 -199
  181. package/ftm-map/scripts/views.py +591 -591
  182. package/ftm-map.yml +2 -2
  183. package/ftm-mind/SKILL.md +201 -1943
  184. package/ftm-mind/evals/promptfoo.yaml +142 -142
  185. package/ftm-mind/references/blackboard-protocol.md +110 -0
  186. package/ftm-mind/references/blackboard-schema.md +328 -328
  187. package/ftm-mind/references/complexity-guide.md +110 -110
  188. package/ftm-mind/references/complexity-sizing.md +138 -0
  189. package/ftm-mind/references/decide-act-protocol.md +172 -0
  190. package/ftm-mind/references/direct-execution.md +51 -0
  191. package/ftm-mind/references/environment-discovery.md +77 -0
  192. package/ftm-mind/references/event-registry.md +319 -319
  193. package/ftm-mind/references/mcp-inventory.md +300 -296
  194. package/ftm-mind/references/ops-routing.md +47 -0
  195. package/ftm-mind/references/orient-protocol.md +234 -0
  196. package/ftm-mind/references/personality.md +40 -0
  197. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  198. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  199. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  200. package/ftm-mind/references/reflexion-protocol.md +249 -249
  201. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  202. package/ftm-mind/references/routing-scenarios.md +35 -35
  203. package/ftm-mind.yml +2 -2
  204. package/ftm-ops.yml +4 -0
  205. package/ftm-pause/SKILL.md +395 -395
  206. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  207. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  208. package/ftm-pause.yml +2 -2
  209. package/ftm-researcher/SKILL.md +275 -275
  210. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  211. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  212. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  213. package/ftm-researcher/references/adaptive-search.md +116 -116
  214. package/ftm-researcher/references/agent-prompts.md +193 -193
  215. package/ftm-researcher/references/council-integration.md +193 -193
  216. package/ftm-researcher/references/output-format.md +203 -203
  217. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  218. package/ftm-researcher/scripts/score_credibility.py +234 -234
  219. package/ftm-researcher/scripts/validate_research.py +92 -92
  220. package/ftm-researcher.yml +2 -2
  221. package/ftm-resume/SKILL.md +518 -518
  222. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  223. package/ftm-resume.yml +2 -2
  224. package/ftm-retro/SKILL.md +380 -380
  225. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  226. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  227. package/ftm-retro.yml +2 -2
  228. package/ftm-routine/SKILL.md +170 -170
  229. package/ftm-routine.yml +4 -4
  230. package/ftm-state/blackboard/capabilities.json +5 -5
  231. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  232. package/ftm-state/blackboard/context.json +37 -23
  233. package/ftm-state/blackboard/experiences/doom-statusline-fix.json +26 -0
  234. package/ftm-state/blackboard/experiences/hackathon-pages-site.json +26 -0
  235. package/ftm-state/blackboard/experiences/hindsight-sso-kickoff.json +42 -0
  236. package/ftm-state/blackboard/experiences/index.json +58 -9
  237. package/ftm-state/blackboard/experiences/learning-ragnarok-api-access.json +23 -0
  238. package/ftm-state/blackboard/experiences/nordlayer-members-auto-assign.json +26 -0
  239. package/ftm-state/blackboard/experiences/saml2aws-stale-session-fix.json +41 -0
  240. package/ftm-state/blackboard/patterns.json +6 -6
  241. package/ftm-state/schemas/context.schema.json +130 -130
  242. package/ftm-state/schemas/experience-index.schema.json +77 -77
  243. package/ftm-state/schemas/experience.schema.json +78 -78
  244. package/ftm-state/schemas/patterns.schema.json +44 -44
  245. package/ftm-upgrade/SKILL.md +194 -194
  246. package/ftm-upgrade/scripts/check-version.sh +76 -76
  247. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  248. package/ftm-upgrade.yml +2 -2
  249. package/ftm-verify.yml +2 -2
  250. package/ftm.yml +2 -2
  251. package/hooks/ftm-auto-log.sh +137 -0
  252. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  253. package/hooks/ftm-discovery-reminder.sh +90 -90
  254. package/hooks/ftm-drafts-gate.sh +61 -61
  255. package/hooks/ftm-event-logger.mjs +107 -107
  256. package/hooks/ftm-install-hooks.sh +240 -0
  257. package/hooks/ftm-learning-capture.sh +117 -0
  258. package/hooks/ftm-map-autodetect.sh +79 -79
  259. package/hooks/ftm-pending-sync-check.sh +22 -22
  260. package/hooks/ftm-plan-gate.sh +92 -92
  261. package/hooks/ftm-post-commit-trigger.sh +57 -57
  262. package/hooks/ftm-post-compaction.sh +138 -0
  263. package/hooks/ftm-pre-compaction.sh +147 -0
  264. package/hooks/ftm-session-end.sh +52 -0
  265. package/hooks/ftm-session-snapshot.sh +213 -0
  266. package/hooks/settings-template.json +81 -81
  267. package/install.sh +363 -363
  268. package/package.json +84 -84
  269. package/uninstall.sh +25 -25
@@ -1,241 +1,241 @@
1
- ---
2
- name: ftm-intent
3
- description: Manages the hierarchical INTENT.md documentation layer — root index with architecture decisions and module map, plus per-module INTENT.md files with function-level entries (does/why/relationships/decisions). Use when creating or updating intent documentation, bootstrapping a new project's intent layer, or when user says "update intent", "document intent", "ftm-intent", "what does this function do". Auto-invoked by ftm-executor after every commit to keep intent documentation in sync with code changes.
4
- ---
5
-
6
- ## Events
7
-
8
- ### Emits
9
- - `documentation_updated` — when one or more INTENT.md files are written or modified to reflect new or changed code
10
- - `task_completed` — when the full intent sync pass completes (bootstrap or incremental)
11
-
12
- ### Listens To
13
- - `code_committed` — fast-path: automatically sync INTENT.md entries for every changed function after each commit
14
-
15
- # Intent Documentation Manager
16
-
17
- Manages the hierarchical INTENT.md documentation layer. This is the contract layer that Codex reads during code review and that enables conflict detection between Claude's intent and Codex's fixes. The "Why" field is what prevents Codex from reverting deliberate design choices.
18
-
19
- ## Graph-Powered Mode (ftm-map integration)
20
-
21
- Before running the standard analysis, check if the project has a code knowledge graph:
22
-
23
- ```bash
24
- if [ -f ".ftm-map/map.db" ]; then
25
- # Use graph for faster, more consistent analysis
26
- ftm-map/scripts/.venv/bin/python3 ftm-map/scripts/views.py generate-intent "$PROJECT_ROOT"
27
- else
28
- # Fall back to standard file-by-file analysis below
29
- fi
30
- ```
31
-
32
- When `.ftm-map/map.db` exists:
33
- 1. Delegate to `views.py generate-intent` which reads the graph and produces INTENT.md files
34
- 2. The graph path is faster (single DB query vs. reading every file) and more consistent (same analysis for every commit)
35
- 3. Supports `--files` flag for incremental: `views.py generate-intent --files changed1.ts,changed2.py`
36
-
37
- When `.ftm-map/map.db` does NOT exist:
38
- - Fall back to the existing Bootstrap/Incremental modes below
39
- - The behavior is identical to the current skill — no breaking change
40
-
41
- This integration means ftm-intent automatically gets better when ftm-map is available, without requiring migration.
42
-
43
- ## Two Modes of Operation
44
-
45
- ### Bootstrap Mode (no INTENT.md exists)
46
- Scan the codebase from scratch and create the full hierarchy.
47
-
48
- 1. Use Glob to discover all source files and identify module boundaries
49
- 2. Use Read/Grep to understand key functions in each module
50
- 3. Create root INTENT.md at the project root
51
- 4. Create per-module INTENT.md files for each module directory
52
- 5. Populate all entries based on what the code actually does
53
-
54
- ### Incremental Mode (INTENT.md already exists)
55
- Read the current state and update only what changed.
56
-
57
- 1. Read root INTENT.md and all relevant module INTENT.md files
58
- 2. Identify what's missing: new functions without entries, new modules without INTENT.md
59
- 3. Identify what's stale: entries for deleted or renamed functions
60
- 4. Update only the affected entries and module map rows — do not regenerate from scratch
61
-
62
- ## Root INTENT.md Template
63
-
64
- Create at the project root. This is the "subway map" — high level routing to module detail.
65
-
66
- ```markdown
67
- # [Project Name] — Intent
68
-
69
- ## Vision
70
- [2-3 sentence summary of what this project does and why it exists]
71
-
72
- ## Architecture Decisions
73
- | Decision | Choice | Reasoning |
74
- |---|---|---|
75
- | [decision point] | [what was chosen] | [why this was chosen over alternatives] |
76
-
77
- ## Module Map
78
- | Module | Purpose | Key Relationships |
79
- |---|---|---|
80
- | [path/to/module] | [what this module does in one sentence] | [depends on X / depended by Y] |
81
-
82
- ## Cross-Cutting Decisions
83
- - [pattern name]: [what it is and why it applies everywhere]
84
- ```
85
-
86
- **Rules for root INTENT.md:**
87
- - Vision: Written once, updated only if the project's purpose changes
88
- - Architecture Decisions: Add a row every time a non-obvious architectural choice is made
89
- - Module Map: Add a row when a new module directory is created; remove when deleted; must stay in sync with actual filesystem
90
- - Cross-Cutting Decisions: Patterns that apply across 3+ modules (error handling strategy, auth approach, data fetching pattern, etc.)
91
-
92
- ## Per-Module INTENT.md Template
93
-
94
- Create inside each module directory (e.g., `src/auth/INTENT.md`). This is the "street map" — ground level function detail.
95
-
96
- ```markdown
97
- # [Module Name] — Intent
98
-
99
- ## Functions
100
-
101
- ### functionName(param1: Type, param2: Type) → ReturnType
102
- - **Does**: [one sentence — what it does, not how]
103
- - **Why**: [why this function exists, what problem it solves, why this approach over alternatives]
104
- - **Relationships**: [calls X, called by Y, reads from Z store, mutates W]
105
- - **Decisions**: [deliberate choices that might look wrong to an outside reviewer — "uses polling instead of websockets because..."]
106
-
107
- ### anotherFunction(param: Type) → ReturnType
108
- - **Does**: ...
109
- - **Why**: ...
110
- - **Relationships**: ...
111
- - **Decisions**: ...
112
- ```
113
-
114
- **Rules for per-module INTENT.md:**
115
- - Every exported function MUST have an entry
116
- - Every entry MUST have all four fields (Does / Why / Relationships / Decisions)
117
- - If there are no deliberate decisions, write "None" in the Decisions field — do not omit the field
118
- - Include the full function signature with types — this helps with quick lookup and makes entries grep-able
119
- - Keep each field to one sentence. This is a contract, not prose documentation.
120
-
121
- ## When to Update
122
-
123
- | Event | Action |
124
- |---|---|
125
- | New function created | Add entry to module's INTENT.md |
126
- | Function behavior changed | Update Does / Why / Decisions fields |
127
- | Function deleted | Remove entry from module's INTENT.md |
128
- | New module directory created | Create module INTENT.md + add row to root module map |
129
- | Module deleted | Remove module INTENT.md + remove row from root module map |
130
- | Architecture decision made | Add row to root INTENT.md decisions table |
131
- | Cross-cutting pattern established | Add entry to root Cross-Cutting Decisions section |
132
-
133
- ## The Why Field — Most Important
134
-
135
- The "Why" field is what makes this system valuable. It is the explicit record of deliberate choices that might look like bugs or inefficiencies to a reviewer who wasn't there when the decision was made.
136
-
137
- Good Why entries:
138
- - "Exists because the provider SDK doesn't expose a batch endpoint — each call must be sequential"
139
- - "Uses pessimistic locking instead of optimistic because this resource has high write contention in production"
140
- - "Fetches on every render instead of caching because this data changes in real time and stale reads cause downstream errors"
141
-
142
- Bad Why entries:
143
- - "Needed for the feature to work"
144
- - "Required by the system"
145
- - "Called by the auth flow"
146
-
147
- If you can't write a clear Why, it means the original reasoning wasn't captured. Try to infer it from surrounding code, comments, or git history. If it's truly unknown, write "Why unknown — inferred from usage: [your inference]".
148
-
149
- ## Format Contract
150
-
151
- Codex reads INTENT.md files during code review to detect conflicts between stated intent and proposed changes. For this to work, the format must be consistent.
152
-
153
- **Required format — do not deviate:**
154
- - Section header: `### functionName(params) → ReturnType`
155
- - Four bullet fields in order: `- **Does**:`, `- **Why**:`, `- **Relationships**:`, `- **Decisions**:`
156
- - No prose paragraphs inside function entries
157
- - No nested bullets inside a field — one sentence per field, always
158
-
159
- If a function is complex enough that one sentence isn't enough, the function is probably doing too much. Document what it does at the boundary level, not the implementation level.
160
-
161
- ## Discovery Commands
162
-
163
- Use these to find what needs to be documented:
164
-
165
- - Find all module directories: `Glob("src/**/")` or `Glob("lib/**/")`
166
- - Find existing INTENT.md files: `Glob("**/INTENT.md")`
167
- - Find all exported functions in a module: `Grep("^export (function|const|async function)", path="src/module/")`
168
- - Find functions called by a specific function: read the function body and trace calls
169
- - Find what calls a specific function: `Grep("functionName", type="ts")` or equivalent
170
-
171
- ## Bootstrap Execution Order
172
-
173
- When creating the intent layer from scratch:
174
-
175
- 1. Read the project root README or package.json to understand the project vision
176
- 2. Run `Glob("src/**/")` (or equivalent for the project structure) to discover modules
177
- 3. For each module, read key files to understand what functions exist and what they do
178
- 4. Draft root INTENT.md — vision, then module map (one row per module), then architecture decisions from what you observed, then cross-cutting patterns
179
- 5. For each module, draft module INTENT.md — one entry per exported function
180
- 6. Write all files
181
- 7. Report: list of files created, count of functions documented, any functions where Why was unclear
182
-
183
- ## Incremental Execution Order
184
-
185
- When updating after changes:
186
-
187
- 1. Read root INTENT.md
188
- 2. Read the INTENT.md for affected modules (or all modules if unsure what changed)
189
- 3. Compare against current code — use Grep to find functions that don't have entries, entries that don't have corresponding functions
190
- 4. Write updates — add missing entries, remove stale entries, update changed fields
191
- 5. If new modules were added, create their INTENT.md and add rows to root module map
192
- 6. Report: list of files updated, entries added, entries removed, entries modified
193
- ---
194
-
195
- ### Auto-Invocation by ftm-executor
196
-
197
- This skill's format is used by ftm-executor's documentation pipeline. After every commit during plan execution, agents update INTENT.md (or DIAGRAM.mmd) entries following this skill's templates. The updates are automatic and don't require explicit skill invocation — agents reference the format directly.
198
-
199
- ## Requirements
200
-
201
- - reference: `.ftm-map/map.db` | optional | SQLite knowledge graph for accurate intent generation (graph-powered mode)
202
- - tool: `ftm-map/scripts/.venv/bin/python3` | optional | Python runtime for graph-powered views.py
203
- - reference: `package.json` | optional | project vision and structure detection for bootstrap
204
- - reference: existing `**/INTENT.md` files | optional | current state for incremental updates
205
-
206
- ## Risk
207
-
208
- - level: low_write
209
- - scope: writes INTENT.md files in project directories; only creates or modifies INTENT.md documentation files; does not touch source code files
210
- - rollback: git checkout on modified INTENT.md files; delete newly created INTENT.md files
211
-
212
- ## Approval Gates
213
-
214
- - trigger: bootstrap mode — about to create multiple INTENT.md files | action: report count of files to be created and modules to be documented, proceed unless user objects
215
- - complexity_routing: micro → auto | small → auto | medium → auto | large → auto | xl → auto
216
-
217
- ## Fallbacks
218
-
219
- - condition: .ftm-map/map.db not found | action: fall back to standard Glob/Grep analysis for function discovery
220
- - condition: Python venv not set up | action: fall back to standard analysis, log "Graph-powered mode unavailable — run ftm-map to enable"
221
- - condition: no README or package.json for Vision section | action: infer project vision from directory structure and module names
222
-
223
- ## Capabilities
224
-
225
- - cli: `ftm-map/scripts/.venv/bin/python3` | optional | graph-powered intent generation
226
- - mcp: `git` | optional | detect changed files for incremental sync
227
-
228
- ## Event Payloads
229
-
230
- ### documentation_updated
231
- - skill: string — "ftm-intent"
232
- - files_written: string[] — absolute paths to INTENT.md files created or modified
233
- - functions_added: number — new function entries documented
234
- - functions_updated: number — existing entries updated
235
- - functions_removed: number — stale entries removed
236
-
237
- ### task_completed
238
- - skill: string — "ftm-intent"
239
- - mode: string — "bootstrap" | "incremental"
240
- - files_count: number — total INTENT.md files written
241
- - duration_ms: number — total documentation sync duration
1
+ ---
2
+ name: ftm-intent
3
+ description: Manages the hierarchical INTENT.md documentation layer — root index with architecture decisions and module map, plus per-module INTENT.md files with function-level entries (does/why/relationships/decisions). Use when creating or updating intent documentation, bootstrapping a new project's intent layer, or when user says "update intent", "document intent", "ftm-intent", "what does this function do". Auto-invoked by ftm-executor after every commit to keep intent documentation in sync with code changes.
4
+ ---
5
+
6
+ ## Events
7
+
8
+ ### Emits
9
+ - `documentation_updated` — when one or more INTENT.md files are written or modified to reflect new or changed code
10
+ - `task_completed` — when the full intent sync pass completes (bootstrap or incremental)
11
+
12
+ ### Listens To
13
+ - `code_committed` — fast-path: automatically sync INTENT.md entries for every changed function after each commit
14
+
15
+ # Intent Documentation Manager
16
+
17
+ Manages the hierarchical INTENT.md documentation layer. This is the contract layer that Codex reads during code review and that enables conflict detection between Claude's intent and Codex's fixes. The "Why" field is what prevents Codex from reverting deliberate design choices.
18
+
19
+ ## Graph-Powered Mode (ftm-map integration)
20
+
21
+ Before running the standard analysis, check if the project has a code knowledge graph:
22
+
23
+ ```bash
24
+ if [ -f ".ftm-map/map.db" ]; then
25
+ # Use graph for faster, more consistent analysis
26
+ ftm-map/scripts/.venv/bin/python3 ftm-map/scripts/views.py generate-intent "$PROJECT_ROOT"
27
+ else
28
+ # Fall back to standard file-by-file analysis below
29
+ fi
30
+ ```
31
+
32
+ When `.ftm-map/map.db` exists:
33
+ 1. Delegate to `views.py generate-intent` which reads the graph and produces INTENT.md files
34
+ 2. The graph path is faster (single DB query vs. reading every file) and more consistent (same analysis for every commit)
35
+ 3. Supports `--files` flag for incremental: `views.py generate-intent --files changed1.ts,changed2.py`
36
+
37
+ When `.ftm-map/map.db` does NOT exist:
38
+ - Fall back to the existing Bootstrap/Incremental modes below
39
+ - The behavior is identical to the current skill — no breaking change
40
+
41
+ This integration means ftm-intent automatically gets better when ftm-map is available, without requiring migration.
42
+
43
+ ## Two Modes of Operation
44
+
45
+ ### Bootstrap Mode (no INTENT.md exists)
46
+ Scan the codebase from scratch and create the full hierarchy.
47
+
48
+ 1. Use Glob to discover all source files and identify module boundaries
49
+ 2. Use Read/Grep to understand key functions in each module
50
+ 3. Create root INTENT.md at the project root
51
+ 4. Create per-module INTENT.md files for each module directory
52
+ 5. Populate all entries based on what the code actually does
53
+
54
+ ### Incremental Mode (INTENT.md already exists)
55
+ Read the current state and update only what changed.
56
+
57
+ 1. Read root INTENT.md and all relevant module INTENT.md files
58
+ 2. Identify what's missing: new functions without entries, new modules without INTENT.md
59
+ 3. Identify what's stale: entries for deleted or renamed functions
60
+ 4. Update only the affected entries and module map rows — do not regenerate from scratch
61
+
62
+ ## Root INTENT.md Template
63
+
64
+ Create at the project root. This is the "subway map" — high level routing to module detail.
65
+
66
+ ```markdown
67
+ # [Project Name] — Intent
68
+
69
+ ## Vision
70
+ [2-3 sentence summary of what this project does and why it exists]
71
+
72
+ ## Architecture Decisions
73
+ | Decision | Choice | Reasoning |
74
+ |---|---|---|
75
+ | [decision point] | [what was chosen] | [why this was chosen over alternatives] |
76
+
77
+ ## Module Map
78
+ | Module | Purpose | Key Relationships |
79
+ |---|---|---|
80
+ | [path/to/module] | [what this module does in one sentence] | [depends on X / depended by Y] |
81
+
82
+ ## Cross-Cutting Decisions
83
+ - [pattern name]: [what it is and why it applies everywhere]
84
+ ```
85
+
86
+ **Rules for root INTENT.md:**
87
+ - Vision: Written once, updated only if the project's purpose changes
88
+ - Architecture Decisions: Add a row every time a non-obvious architectural choice is made
89
+ - Module Map: Add a row when a new module directory is created; remove when deleted; must stay in sync with actual filesystem
90
+ - Cross-Cutting Decisions: Patterns that apply across 3+ modules (error handling strategy, auth approach, data fetching pattern, etc.)
91
+
92
+ ## Per-Module INTENT.md Template
93
+
94
+ Create inside each module directory (e.g., `src/auth/INTENT.md`). This is the "street map" — ground level function detail.
95
+
96
+ ```markdown
97
+ # [Module Name] — Intent
98
+
99
+ ## Functions
100
+
101
+ ### functionName(param1: Type, param2: Type) → ReturnType
102
+ - **Does**: [one sentence — what it does, not how]
103
+ - **Why**: [why this function exists, what problem it solves, why this approach over alternatives]
104
+ - **Relationships**: [calls X, called by Y, reads from Z store, mutates W]
105
+ - **Decisions**: [deliberate choices that might look wrong to an outside reviewer — "uses polling instead of websockets because..."]
106
+
107
+ ### anotherFunction(param: Type) → ReturnType
108
+ - **Does**: ...
109
+ - **Why**: ...
110
+ - **Relationships**: ...
111
+ - **Decisions**: ...
112
+ ```
113
+
114
+ **Rules for per-module INTENT.md:**
115
+ - Every exported function MUST have an entry
116
+ - Every entry MUST have all four fields (Does / Why / Relationships / Decisions)
117
+ - If there are no deliberate decisions, write "None" in the Decisions field — do not omit the field
118
+ - Include the full function signature with types — this helps with quick lookup and makes entries grep-able
119
+ - Keep each field to one sentence. This is a contract, not prose documentation.
120
+
121
+ ## When to Update
122
+
123
+ | Event | Action |
124
+ |---|---|
125
+ | New function created | Add entry to module's INTENT.md |
126
+ | Function behavior changed | Update Does / Why / Decisions fields |
127
+ | Function deleted | Remove entry from module's INTENT.md |
128
+ | New module directory created | Create module INTENT.md + add row to root module map |
129
+ | Module deleted | Remove module INTENT.md + remove row from root module map |
130
+ | Architecture decision made | Add row to root INTENT.md decisions table |
131
+ | Cross-cutting pattern established | Add entry to root Cross-Cutting Decisions section |
132
+
133
+ ## The Why Field — Most Important
134
+
135
+ The "Why" field is what makes this system valuable. It is the explicit record of deliberate choices that might look like bugs or inefficiencies to a reviewer who wasn't there when the decision was made.
136
+
137
+ Good Why entries:
138
+ - "Exists because the provider SDK doesn't expose a batch endpoint — each call must be sequential"
139
+ - "Uses pessimistic locking instead of optimistic because this resource has high write contention in production"
140
+ - "Fetches on every render instead of caching because this data changes in real time and stale reads cause downstream errors"
141
+
142
+ Bad Why entries:
143
+ - "Needed for the feature to work"
144
+ - "Required by the system"
145
+ - "Called by the auth flow"
146
+
147
+ If you can't write a clear Why, it means the original reasoning wasn't captured. Try to infer it from surrounding code, comments, or git history. If it's truly unknown, write "Why unknown — inferred from usage: [your inference]".
148
+
149
+ ## Format Contract
150
+
151
+ Codex reads INTENT.md files during code review to detect conflicts between stated intent and proposed changes. For this to work, the format must be consistent.
152
+
153
+ **Required format — do not deviate:**
154
+ - Section header: `### functionName(params) → ReturnType`
155
+ - Four bullet fields in order: `- **Does**:`, `- **Why**:`, `- **Relationships**:`, `- **Decisions**:`
156
+ - No prose paragraphs inside function entries
157
+ - No nested bullets inside a field — one sentence per field, always
158
+
159
+ If a function is complex enough that one sentence isn't enough, the function is probably doing too much. Document what it does at the boundary level, not the implementation level.
160
+
161
+ ## Discovery Commands
162
+
163
+ Use these to find what needs to be documented:
164
+
165
+ - Find all module directories: `Glob("src/**/")` or `Glob("lib/**/")`
166
+ - Find existing INTENT.md files: `Glob("**/INTENT.md")`
167
+ - Find all exported functions in a module: `Grep("^export (function|const|async function)", path="src/module/")`
168
+ - Find functions called by a specific function: read the function body and trace calls
169
+ - Find what calls a specific function: `Grep("functionName", type="ts")` or equivalent
170
+
171
+ ## Bootstrap Execution Order
172
+
173
+ When creating the intent layer from scratch:
174
+
175
+ 1. Read the project root README or package.json to understand the project vision
176
+ 2. Run `Glob("src/**/")` (or equivalent for the project structure) to discover modules
177
+ 3. For each module, read key files to understand what functions exist and what they do
178
+ 4. Draft root INTENT.md — vision, then module map (one row per module), then architecture decisions from what you observed, then cross-cutting patterns
179
+ 5. For each module, draft module INTENT.md — one entry per exported function
180
+ 6. Write all files
181
+ 7. Report: list of files created, count of functions documented, any functions where Why was unclear
182
+
183
+ ## Incremental Execution Order
184
+
185
+ When updating after changes:
186
+
187
+ 1. Read root INTENT.md
188
+ 2. Read the INTENT.md for affected modules (or all modules if unsure what changed)
189
+ 3. Compare against current code — use Grep to find functions that don't have entries, entries that don't have corresponding functions
190
+ 4. Write updates — add missing entries, remove stale entries, update changed fields
191
+ 5. If new modules were added, create their INTENT.md and add rows to root module map
192
+ 6. Report: list of files updated, entries added, entries removed, entries modified
193
+ ---
194
+
195
+ ### Auto-Invocation by ftm-executor
196
+
197
+ This skill's format is used by ftm-executor's documentation pipeline. After every commit during plan execution, agents update INTENT.md (or DIAGRAM.mmd) entries following this skill's templates. The updates are automatic and don't require explicit skill invocation — agents reference the format directly.
198
+
199
+ ## Requirements
200
+
201
+ - reference: `.ftm-map/map.db` | optional | SQLite knowledge graph for accurate intent generation (graph-powered mode)
202
+ - tool: `ftm-map/scripts/.venv/bin/python3` | optional | Python runtime for graph-powered views.py
203
+ - reference: `package.json` | optional | project vision and structure detection for bootstrap
204
+ - reference: existing `**/INTENT.md` files | optional | current state for incremental updates
205
+
206
+ ## Risk
207
+
208
+ - level: low_write
209
+ - scope: writes INTENT.md files in project directories; only creates or modifies INTENT.md documentation files; does not touch source code files
210
+ - rollback: git checkout on modified INTENT.md files; delete newly created INTENT.md files
211
+
212
+ ## Approval Gates
213
+
214
+ - trigger: bootstrap mode — about to create multiple INTENT.md files | action: report count of files to be created and modules to be documented, proceed unless user objects
215
+ - complexity_routing: micro → auto | small → auto | medium → auto | large → auto | xl → auto
216
+
217
+ ## Fallbacks
218
+
219
+ - condition: .ftm-map/map.db not found | action: fall back to standard Glob/Grep analysis for function discovery
220
+ - condition: Python venv not set up | action: fall back to standard analysis, log "Graph-powered mode unavailable — run ftm-map to enable"
221
+ - condition: no README or package.json for Vision section | action: infer project vision from directory structure and module names
222
+
223
+ ## Capabilities
224
+
225
+ - cli: `ftm-map/scripts/.venv/bin/python3` | optional | graph-powered intent generation
226
+ - mcp: `git` | optional | detect changed files for incremental sync
227
+
228
+ ## Event Payloads
229
+
230
+ ### documentation_updated
231
+ - skill: string — "ftm-intent"
232
+ - files_written: string[] — absolute paths to INTENT.md files created or modified
233
+ - functions_added: number — new function entries documented
234
+ - functions_updated: number — existing entries updated
235
+ - functions_removed: number — stale entries removed
236
+
237
+ ### task_completed
238
+ - skill: string — "ftm-intent"
239
+ - mode: string — "bootstrap" | "incremental"
240
+ - files_count: number — total INTENT.md files written
241
+ - duration_ms: number — total documentation sync duration
package/ftm-intent.yml CHANGED
@@ -1,2 +1,2 @@
1
- name: ftm-intent
2
- description: Manages the hierarchical INTENT.md documentation layer — root index with architecture decisions and module map, plus per-module INTENT.md files with function-level entries (does/why/relationships/decisions). Use when creating or updating intent documentation, bootstrapping a new project's intent layer, or when user says "update intent", "document intent", "ftm-intent", "what does this function do". Auto-invoked by ftm-executor after every commit to keep intent documentation in sync with code changes.
1
+ name: ftm-intent
2
+ description: Manages the hierarchical INTENT.md documentation layer — root index with architecture decisions and module map, plus per-module INTENT.md files with function-level entries (does/why/relationships/decisions). Use when creating or updating intent documentation, bootstrapping a new project's intent layer, or when user says "update intent", "document intent", "ftm-intent", "what does this function do". Auto-invoked by ftm-executor after every commit to keep intent documentation in sync with code changes.