feed-the-machine 1.5.0 → 1.6.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 (224) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/generate-manifest.mjs +463 -463
  4. package/bin/install.mjs +491 -491
  5. package/docs/HOOKS.md +243 -243
  6. package/docs/INBOX.md +233 -233
  7. package/ftm/SKILL.md +122 -122
  8. package/ftm-audit/SKILL.md +623 -541
  9. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  10. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  11. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  12. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  13. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  14. package/ftm-audit/scripts/run-knip.sh +23 -23
  15. package/ftm-audit.yml +2 -2
  16. package/ftm-brainstorm/SKILL.md +498 -498
  17. package/ftm-brainstorm/evals/evals.json +100 -100
  18. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  19. package/ftm-brainstorm/references/agent-prompts.md +224 -224
  20. package/ftm-brainstorm/references/plan-template.md +121 -121
  21. package/ftm-brainstorm.yml +2 -2
  22. package/ftm-browse/SKILL.md +454 -454
  23. package/ftm-browse/daemon/browser-manager.ts +206 -206
  24. package/ftm-browse/daemon/bun.lock +30 -30
  25. package/ftm-browse/daemon/cli.ts +347 -347
  26. package/ftm-browse/daemon/commands.ts +410 -410
  27. package/ftm-browse/daemon/main.ts +357 -357
  28. package/ftm-browse/daemon/package.json +17 -17
  29. package/ftm-browse/daemon/server.ts +189 -189
  30. package/ftm-browse/daemon/snapshot.ts +519 -519
  31. package/ftm-browse/daemon/tsconfig.json +22 -22
  32. package/ftm-browse.yml +4 -4
  33. package/ftm-capture/SKILL.md +370 -370
  34. package/ftm-capture.yml +4 -4
  35. package/ftm-codex-gate/SKILL.md +361 -361
  36. package/ftm-codex-gate.yml +2 -2
  37. package/ftm-config/SKILL.md +345 -345
  38. package/ftm-config.default.yml +82 -80
  39. package/ftm-config.yml +2 -2
  40. package/ftm-council/SKILL.md +416 -416
  41. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  42. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  43. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  44. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  45. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  46. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  47. package/ftm-council.yml +2 -2
  48. package/ftm-dashboard/SKILL.md +163 -163
  49. package/ftm-dashboard.yml +4 -4
  50. package/ftm-debug/SKILL.md +1037 -1037
  51. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  52. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  53. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  54. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  55. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  56. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  57. package/ftm-debug.yml +2 -2
  58. package/ftm-diagram/SKILL.md +277 -277
  59. package/ftm-diagram.yml +2 -2
  60. package/ftm-executor/SKILL.md +777 -767
  61. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  62. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  63. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  64. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  65. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  66. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  67. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  68. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  69. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
  70. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  71. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  72. package/ftm-executor/runtime/package.json +8 -8
  73. package/ftm-executor.yml +2 -2
  74. package/ftm-git/SKILL.md +441 -441
  75. package/ftm-git/evals/evals.json +26 -26
  76. package/ftm-git/evals/promptfoo.yaml +75 -75
  77. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  78. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  79. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  80. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  81. package/ftm-git.yml +2 -2
  82. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  83. package/ftm-inbox/backend/adapters/base.py +230 -230
  84. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  85. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  86. package/ftm-inbox/backend/adapters/jira.py +136 -136
  87. package/ftm-inbox/backend/adapters/registry.py +192 -192
  88. package/ftm-inbox/backend/adapters/slack.py +110 -110
  89. package/ftm-inbox/backend/db/connection.py +54 -54
  90. package/ftm-inbox/backend/db/schema.py +78 -78
  91. package/ftm-inbox/backend/executor/__init__.py +7 -7
  92. package/ftm-inbox/backend/executor/engine.py +149 -149
  93. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  94. package/ftm-inbox/backend/main.py +103 -103
  95. package/ftm-inbox/backend/models/__init__.py +1 -1
  96. package/ftm-inbox/backend/models/unified_task.py +36 -36
  97. package/ftm-inbox/backend/planner/__init__.py +6 -6
  98. package/ftm-inbox/backend/planner/generator.py +127 -127
  99. package/ftm-inbox/backend/planner/schema.py +34 -34
  100. package/ftm-inbox/backend/requirements.txt +5 -5
  101. package/ftm-inbox/backend/routes/execute.py +186 -186
  102. package/ftm-inbox/backend/routes/health.py +52 -52
  103. package/ftm-inbox/backend/routes/inbox.py +68 -68
  104. package/ftm-inbox/backend/routes/plan.py +271 -271
  105. package/ftm-inbox/bin/launchagent.mjs +91 -91
  106. package/ftm-inbox/bin/setup.mjs +188 -188
  107. package/ftm-inbox/bin/start.sh +10 -10
  108. package/ftm-inbox/bin/status.sh +17 -17
  109. package/ftm-inbox/bin/stop.sh +8 -8
  110. package/ftm-inbox/config.example.yml +55 -55
  111. package/ftm-inbox/package-lock.json +2898 -2898
  112. package/ftm-inbox/package.json +26 -26
  113. package/ftm-inbox/postcss.config.js +6 -6
  114. package/ftm-inbox/src/app.css +199 -199
  115. package/ftm-inbox/src/app.html +18 -18
  116. package/ftm-inbox/src/lib/api.ts +166 -166
  117. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  118. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  119. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  120. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  121. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  122. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  123. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  124. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  125. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  126. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  127. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  128. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  129. package/ftm-inbox/src/lib/theme.ts +47 -47
  130. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  131. package/ftm-inbox/src/routes/+page.svelte +401 -401
  132. package/ftm-inbox/svelte.config.js +12 -12
  133. package/ftm-inbox/tailwind.config.ts +63 -63
  134. package/ftm-inbox/tsconfig.json +13 -13
  135. package/ftm-inbox/vite.config.ts +6 -6
  136. package/ftm-intent/SKILL.md +241 -241
  137. package/ftm-intent.yml +2 -2
  138. package/ftm-manifest.json +3794 -3794
  139. package/ftm-map/SKILL.md +291 -291
  140. package/ftm-map/scripts/db.py +712 -712
  141. package/ftm-map/scripts/index.py +415 -415
  142. package/ftm-map/scripts/parser.py +224 -224
  143. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  144. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  145. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  146. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  147. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  148. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  149. package/ftm-map/scripts/query.py +301 -301
  150. package/ftm-map/scripts/ranker.py +377 -377
  151. package/ftm-map/scripts/requirements.txt +5 -5
  152. package/ftm-map/scripts/setup-hooks.sh +27 -27
  153. package/ftm-map/scripts/setup.sh +56 -56
  154. package/ftm-map/scripts/test_db.py +364 -364
  155. package/ftm-map/scripts/test_parser.py +174 -174
  156. package/ftm-map/scripts/test_query.py +183 -183
  157. package/ftm-map/scripts/test_ranker.py +199 -199
  158. package/ftm-map/scripts/views.py +591 -591
  159. package/ftm-map.yml +2 -2
  160. package/ftm-mind/SKILL.md +1943 -1943
  161. package/ftm-mind/evals/promptfoo.yaml +142 -142
  162. package/ftm-mind/references/blackboard-schema.md +328 -328
  163. package/ftm-mind/references/complexity-guide.md +110 -110
  164. package/ftm-mind/references/event-registry.md +319 -319
  165. package/ftm-mind/references/mcp-inventory.md +296 -296
  166. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  167. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  168. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  169. package/ftm-mind/references/reflexion-protocol.md +249 -249
  170. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  171. package/ftm-mind/references/routing-scenarios.md +35 -35
  172. package/ftm-mind.yml +2 -2
  173. package/ftm-pause/SKILL.md +395 -395
  174. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  175. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  176. package/ftm-pause.yml +2 -2
  177. package/ftm-researcher/SKILL.md +275 -275
  178. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  179. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  180. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  181. package/ftm-researcher/references/adaptive-search.md +116 -116
  182. package/ftm-researcher/references/agent-prompts.md +193 -193
  183. package/ftm-researcher/references/council-integration.md +193 -193
  184. package/ftm-researcher/references/output-format.md +203 -203
  185. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  186. package/ftm-researcher/scripts/score_credibility.py +234 -234
  187. package/ftm-researcher/scripts/validate_research.py +92 -92
  188. package/ftm-researcher.yml +2 -2
  189. package/ftm-resume/SKILL.md +518 -518
  190. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  191. package/ftm-resume.yml +2 -2
  192. package/ftm-retro/SKILL.md +380 -380
  193. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  194. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  195. package/ftm-retro.yml +2 -2
  196. package/ftm-routine/SKILL.md +170 -170
  197. package/ftm-routine.yml +4 -4
  198. package/ftm-state/blackboard/capabilities.json +5 -5
  199. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  200. package/ftm-state/blackboard/context.json +23 -23
  201. package/ftm-state/blackboard/experiences/index.json +9 -9
  202. package/ftm-state/blackboard/patterns.json +6 -6
  203. package/ftm-state/schemas/context.schema.json +130 -130
  204. package/ftm-state/schemas/experience-index.schema.json +77 -77
  205. package/ftm-state/schemas/experience.schema.json +78 -78
  206. package/ftm-state/schemas/patterns.schema.json +44 -44
  207. package/ftm-upgrade/SKILL.md +194 -194
  208. package/ftm-upgrade/scripts/check-version.sh +76 -76
  209. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  210. package/ftm-upgrade.yml +2 -2
  211. package/ftm-verify.yml +2 -2
  212. package/ftm.yml +2 -2
  213. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  214. package/hooks/ftm-discovery-reminder.sh +90 -90
  215. package/hooks/ftm-drafts-gate.sh +61 -61
  216. package/hooks/ftm-event-logger.mjs +107 -107
  217. package/hooks/ftm-map-autodetect.sh +79 -79
  218. package/hooks/ftm-pending-sync-check.sh +22 -22
  219. package/hooks/ftm-plan-gate.sh +92 -92
  220. package/hooks/ftm-post-commit-trigger.sh +57 -57
  221. package/hooks/settings-template.json +81 -81
  222. package/install.sh +363 -363
  223. package/package.json +84 -84
  224. 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.