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,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.