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.
- package/LICENSE +21 -21
- package/README.md +170 -170
- package/bin/generate-manifest.mjs +463 -463
- package/bin/install.mjs +491 -491
- package/docs/HOOKS.md +243 -243
- package/docs/INBOX.md +233 -233
- package/ftm/SKILL.md +122 -122
- package/ftm-audit/SKILL.md +623 -541
- package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
- package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
- package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
- package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
- package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
- package/ftm-audit/scripts/run-knip.sh +23 -23
- package/ftm-audit.yml +2 -2
- package/ftm-brainstorm/SKILL.md +498 -498
- package/ftm-brainstorm/evals/evals.json +100 -100
- package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
- package/ftm-brainstorm/references/agent-prompts.md +224 -224
- package/ftm-brainstorm/references/plan-template.md +121 -121
- package/ftm-brainstorm.yml +2 -2
- package/ftm-browse/SKILL.md +454 -454
- package/ftm-browse/daemon/browser-manager.ts +206 -206
- package/ftm-browse/daemon/bun.lock +30 -30
- package/ftm-browse/daemon/cli.ts +347 -347
- package/ftm-browse/daemon/commands.ts +410 -410
- package/ftm-browse/daemon/main.ts +357 -357
- package/ftm-browse/daemon/package.json +17 -17
- package/ftm-browse/daemon/server.ts +189 -189
- package/ftm-browse/daemon/snapshot.ts +519 -519
- package/ftm-browse/daemon/tsconfig.json +22 -22
- package/ftm-browse.yml +4 -4
- package/ftm-capture/SKILL.md +370 -370
- package/ftm-capture.yml +4 -4
- package/ftm-codex-gate/SKILL.md +361 -361
- package/ftm-codex-gate.yml +2 -2
- package/ftm-config/SKILL.md +345 -345
- package/ftm-config.default.yml +82 -80
- package/ftm-config.yml +2 -2
- package/ftm-council/SKILL.md +416 -416
- package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
- package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
- package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
- package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
- package/ftm-council.yml +2 -2
- package/ftm-dashboard/SKILL.md +163 -163
- package/ftm-dashboard.yml +4 -4
- package/ftm-debug/SKILL.md +1037 -1037
- package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
- package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
- package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
- package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
- package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
- package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
- package/ftm-debug.yml +2 -2
- package/ftm-diagram/SKILL.md +277 -277
- package/ftm-diagram.yml +2 -2
- package/ftm-executor/SKILL.md +777 -767
- package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
- package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
- package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
- package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
- package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
- package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
- package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
- package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
- package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
- package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
- package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
- package/ftm-executor/runtime/package.json +8 -8
- package/ftm-executor.yml +2 -2
- package/ftm-git/SKILL.md +441 -441
- package/ftm-git/evals/evals.json +26 -26
- package/ftm-git/evals/promptfoo.yaml +75 -75
- package/ftm-git/hooks/post-commit-experience.sh +92 -92
- package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
- package/ftm-git/references/protocols/REMEDIATION.md +139 -139
- package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
- package/ftm-git.yml +2 -2
- package/ftm-inbox/backend/adapters/_retry.py +64 -64
- package/ftm-inbox/backend/adapters/base.py +230 -230
- package/ftm-inbox/backend/adapters/freshservice.py +104 -104
- package/ftm-inbox/backend/adapters/gmail.py +125 -125
- package/ftm-inbox/backend/adapters/jira.py +136 -136
- package/ftm-inbox/backend/adapters/registry.py +192 -192
- package/ftm-inbox/backend/adapters/slack.py +110 -110
- package/ftm-inbox/backend/db/connection.py +54 -54
- package/ftm-inbox/backend/db/schema.py +78 -78
- package/ftm-inbox/backend/executor/__init__.py +7 -7
- package/ftm-inbox/backend/executor/engine.py +149 -149
- package/ftm-inbox/backend/executor/step_runner.py +98 -98
- package/ftm-inbox/backend/main.py +103 -103
- package/ftm-inbox/backend/models/__init__.py +1 -1
- package/ftm-inbox/backend/models/unified_task.py +36 -36
- package/ftm-inbox/backend/planner/__init__.py +6 -6
- package/ftm-inbox/backend/planner/generator.py +127 -127
- package/ftm-inbox/backend/planner/schema.py +34 -34
- package/ftm-inbox/backend/requirements.txt +5 -5
- package/ftm-inbox/backend/routes/execute.py +186 -186
- package/ftm-inbox/backend/routes/health.py +52 -52
- package/ftm-inbox/backend/routes/inbox.py +68 -68
- package/ftm-inbox/backend/routes/plan.py +271 -271
- package/ftm-inbox/bin/launchagent.mjs +91 -91
- package/ftm-inbox/bin/setup.mjs +188 -188
- package/ftm-inbox/bin/start.sh +10 -10
- package/ftm-inbox/bin/status.sh +17 -17
- package/ftm-inbox/bin/stop.sh +8 -8
- package/ftm-inbox/config.example.yml +55 -55
- package/ftm-inbox/package-lock.json +2898 -2898
- package/ftm-inbox/package.json +26 -26
- package/ftm-inbox/postcss.config.js +6 -6
- package/ftm-inbox/src/app.css +199 -199
- package/ftm-inbox/src/app.html +18 -18
- package/ftm-inbox/src/lib/api.ts +166 -166
- package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
- package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
- package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
- package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
- package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
- package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
- package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
- package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
- package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
- package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
- package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
- package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
- package/ftm-inbox/src/lib/theme.ts +47 -47
- package/ftm-inbox/src/routes/+layout.svelte +76 -76
- package/ftm-inbox/src/routes/+page.svelte +401 -401
- package/ftm-inbox/svelte.config.js +12 -12
- package/ftm-inbox/tailwind.config.ts +63 -63
- package/ftm-inbox/tsconfig.json +13 -13
- package/ftm-inbox/vite.config.ts +6 -6
- package/ftm-intent/SKILL.md +241 -241
- package/ftm-intent.yml +2 -2
- package/ftm-manifest.json +3794 -3794
- package/ftm-map/SKILL.md +291 -291
- package/ftm-map/scripts/db.py +712 -712
- package/ftm-map/scripts/index.py +415 -415
- package/ftm-map/scripts/parser.py +224 -224
- package/ftm-map/scripts/queries/go-tags.scm +20 -20
- package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
- package/ftm-map/scripts/queries/python-tags.scm +31 -31
- package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
- package/ftm-map/scripts/queries/rust-tags.scm +37 -37
- package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
- package/ftm-map/scripts/query.py +301 -301
- package/ftm-map/scripts/ranker.py +377 -377
- package/ftm-map/scripts/requirements.txt +5 -5
- package/ftm-map/scripts/setup-hooks.sh +27 -27
- package/ftm-map/scripts/setup.sh +56 -56
- package/ftm-map/scripts/test_db.py +364 -364
- package/ftm-map/scripts/test_parser.py +174 -174
- package/ftm-map/scripts/test_query.py +183 -183
- package/ftm-map/scripts/test_ranker.py +199 -199
- package/ftm-map/scripts/views.py +591 -591
- package/ftm-map.yml +2 -2
- package/ftm-mind/SKILL.md +1943 -1943
- package/ftm-mind/evals/promptfoo.yaml +142 -142
- package/ftm-mind/references/blackboard-schema.md +328 -328
- package/ftm-mind/references/complexity-guide.md +110 -110
- package/ftm-mind/references/event-registry.md +319 -319
- package/ftm-mind/references/mcp-inventory.md +296 -296
- package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
- package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
- package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
- package/ftm-mind/references/reflexion-protocol.md +249 -249
- package/ftm-mind/references/routing/SCENARIOS.md +22 -22
- package/ftm-mind/references/routing-scenarios.md +35 -35
- package/ftm-mind.yml +2 -2
- package/ftm-pause/SKILL.md +395 -395
- package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
- package/ftm-pause/references/protocols/VALIDATION.md +80 -80
- package/ftm-pause.yml +2 -2
- package/ftm-researcher/SKILL.md +275 -275
- package/ftm-researcher/evals/agent-diversity.yaml +17 -17
- package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
- package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
- package/ftm-researcher/references/adaptive-search.md +116 -116
- package/ftm-researcher/references/agent-prompts.md +193 -193
- package/ftm-researcher/references/council-integration.md +193 -193
- package/ftm-researcher/references/output-format.md +203 -203
- package/ftm-researcher/references/synthesis-pipeline.md +165 -165
- package/ftm-researcher/scripts/score_credibility.py +234 -234
- package/ftm-researcher/scripts/validate_research.py +92 -92
- package/ftm-researcher.yml +2 -2
- package/ftm-resume/SKILL.md +518 -518
- package/ftm-resume/references/protocols/VALIDATION.md +172 -172
- package/ftm-resume.yml +2 -2
- package/ftm-retro/SKILL.md +380 -380
- package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
- package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
- package/ftm-retro.yml +2 -2
- package/ftm-routine/SKILL.md +170 -170
- package/ftm-routine.yml +4 -4
- package/ftm-state/blackboard/capabilities.json +5 -5
- package/ftm-state/blackboard/capabilities.schema.json +27 -27
- package/ftm-state/blackboard/context.json +23 -23
- package/ftm-state/blackboard/experiences/index.json +9 -9
- package/ftm-state/blackboard/patterns.json +6 -6
- package/ftm-state/schemas/context.schema.json +130 -130
- package/ftm-state/schemas/experience-index.schema.json +77 -77
- package/ftm-state/schemas/experience.schema.json +78 -78
- package/ftm-state/schemas/patterns.schema.json +44 -44
- package/ftm-upgrade/SKILL.md +194 -194
- package/ftm-upgrade/scripts/check-version.sh +76 -76
- package/ftm-upgrade/scripts/upgrade.sh +143 -143
- package/ftm-upgrade.yml +2 -2
- package/ftm-verify.yml +2 -2
- package/ftm.yml +2 -2
- package/hooks/ftm-blackboard-enforcer.sh +93 -93
- package/hooks/ftm-discovery-reminder.sh +90 -90
- package/hooks/ftm-drafts-gate.sh +61 -61
- package/hooks/ftm-event-logger.mjs +107 -107
- package/hooks/ftm-map-autodetect.sh +79 -79
- package/hooks/ftm-pending-sync-check.sh +22 -22
- package/hooks/ftm-plan-gate.sh +92 -92
- package/hooks/ftm-post-commit-trigger.sh +57 -57
- package/hooks/settings-template.json +81 -81
- package/install.sh +363 -363
- package/package.json +84 -84
- package/uninstall.sh +25 -25
package/ftm-intent/SKILL.md
CHANGED
|
@@ -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.
|