feed-the-machine 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/brain.py +1340 -0
  4. package/bin/convert_claude_skills_to_codex.py +490 -0
  5. package/bin/generate-manifest.mjs +463 -463
  6. package/bin/harden_codex_skills.py +141 -0
  7. package/bin/install.mjs +491 -491
  8. package/bin/migrate-eng-buddy-data.py +875 -0
  9. package/bin/playbook_engine/__init__.py +1 -0
  10. package/bin/playbook_engine/conftest.py +8 -0
  11. package/bin/playbook_engine/extractor.py +33 -0
  12. package/bin/playbook_engine/manager.py +102 -0
  13. package/bin/playbook_engine/models.py +84 -0
  14. package/bin/playbook_engine/registry.py +35 -0
  15. package/bin/playbook_engine/test_extractor.py +72 -0
  16. package/bin/playbook_engine/test_integration.py +129 -0
  17. package/bin/playbook_engine/test_manager.py +85 -0
  18. package/bin/playbook_engine/test_models.py +166 -0
  19. package/bin/playbook_engine/test_registry.py +67 -0
  20. package/bin/playbook_engine/test_tracer.py +86 -0
  21. package/bin/playbook_engine/tracer.py +93 -0
  22. package/bin/tasks_db.py +456 -0
  23. package/docs/HOOKS.md +243 -243
  24. package/docs/INBOX.md +233 -233
  25. package/ftm/SKILL.md +125 -122
  26. package/ftm-audit/SKILL.md +623 -623
  27. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  28. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  29. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  30. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  31. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  32. package/ftm-audit/scripts/run-knip.sh +23 -23
  33. package/ftm-audit.yml +2 -2
  34. package/ftm-brainstorm/SKILL.md +1003 -498
  35. package/ftm-brainstorm/evals/evals.json +180 -100
  36. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  37. package/ftm-brainstorm/references/agent-prompts.md +552 -224
  38. package/ftm-brainstorm/references/plan-template.md +209 -121
  39. package/ftm-brainstorm.yml +2 -2
  40. package/ftm-browse/SKILL.md +454 -454
  41. package/ftm-browse/daemon/browser-manager.ts +206 -206
  42. package/ftm-browse/daemon/bun.lock +30 -30
  43. package/ftm-browse/daemon/cli.ts +347 -347
  44. package/ftm-browse/daemon/commands.ts +410 -410
  45. package/ftm-browse/daemon/main.ts +357 -357
  46. package/ftm-browse/daemon/package.json +17 -17
  47. package/ftm-browse/daemon/server.ts +189 -189
  48. package/ftm-browse/daemon/snapshot.ts +519 -519
  49. package/ftm-browse/daemon/tsconfig.json +22 -22
  50. package/ftm-browse.yml +4 -4
  51. package/ftm-capture/SKILL.md +370 -370
  52. package/ftm-capture.yml +4 -4
  53. package/ftm-codex-gate/SKILL.md +361 -361
  54. package/ftm-codex-gate.yml +2 -2
  55. package/ftm-config/SKILL.md +422 -345
  56. package/ftm-config.default.yml +125 -82
  57. package/ftm-config.yml +44 -2
  58. package/ftm-council/SKILL.md +416 -416
  59. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  60. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  61. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  62. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  63. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  64. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  65. package/ftm-council.yml +2 -2
  66. package/ftm-dashboard/SKILL.md +163 -163
  67. package/ftm-dashboard.yml +4 -4
  68. package/ftm-debug/SKILL.md +1037 -1037
  69. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  70. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  71. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  72. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  73. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  74. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  75. package/ftm-debug.yml +2 -2
  76. package/ftm-diagram/SKILL.md +277 -277
  77. package/ftm-diagram.yml +2 -2
  78. package/ftm-executor/SKILL.md +777 -777
  79. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  80. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  81. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  82. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  83. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  84. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  85. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  86. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  87. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -59
  88. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  89. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  90. package/ftm-executor/runtime/package.json +8 -8
  91. package/ftm-executor.yml +2 -2
  92. package/ftm-git/SKILL.md +441 -441
  93. package/ftm-git/evals/evals.json +26 -26
  94. package/ftm-git/evals/promptfoo.yaml +75 -75
  95. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  96. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  97. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  98. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  99. package/ftm-git.yml +2 -2
  100. package/ftm-inbox/backend/__pycache__/main.cpython-314.pyc +0 -0
  101. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  102. package/ftm-inbox/backend/adapters/base.py +230 -230
  103. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  104. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  105. package/ftm-inbox/backend/adapters/jira.py +136 -136
  106. package/ftm-inbox/backend/adapters/registry.py +192 -192
  107. package/ftm-inbox/backend/adapters/slack.py +110 -110
  108. package/ftm-inbox/backend/db/connection.py +54 -54
  109. package/ftm-inbox/backend/db/schema.py +78 -78
  110. package/ftm-inbox/backend/executor/__init__.py +7 -7
  111. package/ftm-inbox/backend/executor/engine.py +149 -149
  112. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  113. package/ftm-inbox/backend/main.py +103 -103
  114. package/ftm-inbox/backend/models/__init__.py +1 -1
  115. package/ftm-inbox/backend/models/unified_task.py +36 -36
  116. package/ftm-inbox/backend/planner/__init__.py +6 -6
  117. package/ftm-inbox/backend/planner/__pycache__/__init__.cpython-314.pyc +0 -0
  118. package/ftm-inbox/backend/planner/__pycache__/generator.cpython-314.pyc +0 -0
  119. package/ftm-inbox/backend/planner/__pycache__/schema.cpython-314.pyc +0 -0
  120. package/ftm-inbox/backend/planner/generator.py +127 -127
  121. package/ftm-inbox/backend/planner/schema.py +34 -34
  122. package/ftm-inbox/backend/requirements.txt +5 -5
  123. package/ftm-inbox/backend/routes/__pycache__/plan.cpython-314.pyc +0 -0
  124. package/ftm-inbox/backend/routes/execute.py +186 -186
  125. package/ftm-inbox/backend/routes/health.py +52 -52
  126. package/ftm-inbox/backend/routes/inbox.py +68 -68
  127. package/ftm-inbox/backend/routes/plan.py +271 -271
  128. package/ftm-inbox/bin/launchagent.mjs +91 -91
  129. package/ftm-inbox/bin/setup.mjs +188 -188
  130. package/ftm-inbox/bin/start.sh +10 -10
  131. package/ftm-inbox/bin/status.sh +17 -17
  132. package/ftm-inbox/bin/stop.sh +8 -8
  133. package/ftm-inbox/config.example.yml +55 -55
  134. package/ftm-inbox/package-lock.json +2898 -2898
  135. package/ftm-inbox/package.json +26 -26
  136. package/ftm-inbox/postcss.config.js +6 -6
  137. package/ftm-inbox/src/app.css +199 -199
  138. package/ftm-inbox/src/app.html +18 -18
  139. package/ftm-inbox/src/lib/api.ts +166 -166
  140. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  141. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  142. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  143. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  144. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  145. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  146. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  147. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  148. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  149. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  150. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  151. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  152. package/ftm-inbox/src/lib/theme.ts +47 -47
  153. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  154. package/ftm-inbox/src/routes/+page.svelte +401 -401
  155. package/ftm-inbox/svelte.config.js +12 -12
  156. package/ftm-inbox/tailwind.config.ts +63 -63
  157. package/ftm-inbox/tsconfig.json +13 -13
  158. package/ftm-inbox/vite.config.ts +6 -6
  159. package/ftm-intent/SKILL.md +241 -241
  160. package/ftm-intent.yml +2 -2
  161. package/ftm-manifest.json +3794 -3794
  162. package/ftm-map/SKILL.md +291 -291
  163. package/ftm-map/scripts/db.py +712 -712
  164. package/ftm-map/scripts/index.py +415 -415
  165. package/ftm-map/scripts/parser.py +224 -224
  166. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  167. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  168. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  169. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  170. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  171. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  172. package/ftm-map/scripts/query.py +301 -301
  173. package/ftm-map/scripts/ranker.py +377 -377
  174. package/ftm-map/scripts/requirements.txt +5 -5
  175. package/ftm-map/scripts/setup-hooks.sh +27 -27
  176. package/ftm-map/scripts/setup.sh +56 -56
  177. package/ftm-map/scripts/test_db.py +364 -364
  178. package/ftm-map/scripts/test_parser.py +174 -174
  179. package/ftm-map/scripts/test_query.py +183 -183
  180. package/ftm-map/scripts/test_ranker.py +199 -199
  181. package/ftm-map/scripts/views.py +591 -591
  182. package/ftm-map.yml +2 -2
  183. package/ftm-mind/SKILL.md +201 -1943
  184. package/ftm-mind/evals/promptfoo.yaml +142 -142
  185. package/ftm-mind/references/blackboard-protocol.md +110 -0
  186. package/ftm-mind/references/blackboard-schema.md +328 -328
  187. package/ftm-mind/references/complexity-guide.md +110 -110
  188. package/ftm-mind/references/complexity-sizing.md +138 -0
  189. package/ftm-mind/references/decide-act-protocol.md +172 -0
  190. package/ftm-mind/references/direct-execution.md +51 -0
  191. package/ftm-mind/references/environment-discovery.md +77 -0
  192. package/ftm-mind/references/event-registry.md +319 -319
  193. package/ftm-mind/references/mcp-inventory.md +300 -296
  194. package/ftm-mind/references/ops-routing.md +47 -0
  195. package/ftm-mind/references/orient-protocol.md +234 -0
  196. package/ftm-mind/references/personality.md +40 -0
  197. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  198. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  199. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  200. package/ftm-mind/references/reflexion-protocol.md +249 -249
  201. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  202. package/ftm-mind/references/routing-scenarios.md +35 -35
  203. package/ftm-mind.yml +2 -2
  204. package/ftm-ops.yml +4 -0
  205. package/ftm-pause/SKILL.md +395 -395
  206. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  207. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  208. package/ftm-pause.yml +2 -2
  209. package/ftm-researcher/SKILL.md +275 -275
  210. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  211. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  212. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  213. package/ftm-researcher/references/adaptive-search.md +116 -116
  214. package/ftm-researcher/references/agent-prompts.md +193 -193
  215. package/ftm-researcher/references/council-integration.md +193 -193
  216. package/ftm-researcher/references/output-format.md +203 -203
  217. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  218. package/ftm-researcher/scripts/score_credibility.py +234 -234
  219. package/ftm-researcher/scripts/validate_research.py +92 -92
  220. package/ftm-researcher.yml +2 -2
  221. package/ftm-resume/SKILL.md +518 -518
  222. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  223. package/ftm-resume.yml +2 -2
  224. package/ftm-retro/SKILL.md +380 -380
  225. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  226. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  227. package/ftm-retro.yml +2 -2
  228. package/ftm-routine/SKILL.md +170 -170
  229. package/ftm-routine.yml +4 -4
  230. package/ftm-state/blackboard/capabilities.json +5 -5
  231. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  232. package/ftm-state/blackboard/context.json +37 -23
  233. package/ftm-state/blackboard/experiences/doom-statusline-fix.json +26 -0
  234. package/ftm-state/blackboard/experiences/hackathon-pages-site.json +26 -0
  235. package/ftm-state/blackboard/experiences/hindsight-sso-kickoff.json +42 -0
  236. package/ftm-state/blackboard/experiences/index.json +58 -9
  237. package/ftm-state/blackboard/experiences/learning-ragnarok-api-access.json +23 -0
  238. package/ftm-state/blackboard/experiences/nordlayer-members-auto-assign.json +26 -0
  239. package/ftm-state/blackboard/experiences/saml2aws-stale-session-fix.json +41 -0
  240. package/ftm-state/blackboard/patterns.json +6 -6
  241. package/ftm-state/schemas/context.schema.json +130 -130
  242. package/ftm-state/schemas/experience-index.schema.json +77 -77
  243. package/ftm-state/schemas/experience.schema.json +78 -78
  244. package/ftm-state/schemas/patterns.schema.json +44 -44
  245. package/ftm-upgrade/SKILL.md +194 -194
  246. package/ftm-upgrade/scripts/check-version.sh +76 -76
  247. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  248. package/ftm-upgrade.yml +2 -2
  249. package/ftm-verify.yml +2 -2
  250. package/ftm.yml +2 -2
  251. package/hooks/ftm-auto-log.sh +137 -0
  252. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  253. package/hooks/ftm-discovery-reminder.sh +90 -90
  254. package/hooks/ftm-drafts-gate.sh +61 -61
  255. package/hooks/ftm-event-logger.mjs +107 -107
  256. package/hooks/ftm-install-hooks.sh +240 -0
  257. package/hooks/ftm-learning-capture.sh +117 -0
  258. package/hooks/ftm-map-autodetect.sh +79 -79
  259. package/hooks/ftm-pending-sync-check.sh +22 -22
  260. package/hooks/ftm-plan-gate.sh +92 -92
  261. package/hooks/ftm-post-commit-trigger.sh +57 -57
  262. package/hooks/ftm-post-compaction.sh +138 -0
  263. package/hooks/ftm-pre-compaction.sh +147 -0
  264. package/hooks/ftm-session-end.sh +52 -0
  265. package/hooks/ftm-session-snapshot.sh +213 -0
  266. package/hooks/settings-template.json +81 -81
  267. package/install.sh +363 -363
  268. package/package.json +84 -84
  269. package/uninstall.sh +25 -25
@@ -1,203 +1,203 @@
1
- # Output Format Specification
2
-
3
- ## Structured JSON Artifact
4
-
5
- This is the primary output for skill-to-skill consumption (ftm-brainstorm, ftm-executor, etc.).
6
-
7
- ### Schema
8
-
9
- ```json
10
- {
11
- "query": "original research question",
12
- "mode": "quick | standard | deep",
13
- "timestamp": "ISO-8601",
14
- "waves_completed": 1,
15
- "agents_dispatched": 7,
16
- "council_used": true,
17
- "duration_ms": 12345,
18
-
19
- "findings": [
20
- {
21
- "id": "f-001",
22
- "claim": "one-sentence factual claim",
23
- "evidence": "2-3 sentence supporting detail",
24
- "source_url": "https://...",
25
- "source_type": "primary | peer_reviewed | official_docs | code_repo | qa_site | news | blog | forum | codebase",
26
- "confidence": 0.85,
27
- "credibility_score": 0.78,
28
- "trust_level": "high | moderate | low | verify",
29
- "agent_role": "web_surveyor | academic_scout | github_miner | competitive_analyst | stack_overflow_digger | codebase_analyst | historical_investigator",
30
- "wave": 1,
31
- "corroborated": true,
32
- "circular_sourcing": false
33
- }
34
- ],
35
-
36
- "disagreement_map": {
37
- "consensus": [
38
- {
39
- "claim": "...",
40
- "supporting_agents": ["web_surveyor", "github_miner", "academic_scout"],
41
- "source_count": 5,
42
- "source_diversity": 3,
43
- "council_verdict": "agreed",
44
- "confidence": 0.92
45
- }
46
- ],
47
- "contested": [
48
- {
49
- "claim_a": "...",
50
- "claim_b": "...",
51
- "agents_for_a": ["web_surveyor"],
52
- "agents_for_b": ["competitive_analyst"],
53
- "council_verdict": "contested",
54
- "provider_positions": {
55
- "claude": "a",
56
- "codex": "b",
57
- "gemini": "a"
58
- },
59
- "rank_winner": "a",
60
- "judge_rationale": "..."
61
- }
62
- ],
63
- "unique_insights": [
64
- {
65
- "claim": "...",
66
- "agent_role": "historical_investigator",
67
- "confidence": 0.6,
68
- "note": "Single source — may be high-value insight or hallucination"
69
- }
70
- ],
71
- "refuted": [
72
- {
73
- "claim": "...",
74
- "rejection_reason": "Council unanimously rejected — evidence traces to a single unreliable blog post",
75
- "original_agent": "web_surveyor"
76
- }
77
- ]
78
- },
79
-
80
- "metadata": {
81
- "sources_total": 34,
82
- "sources_high_trust": 12,
83
- "sources_moderate_trust": 15,
84
- "sources_low_trust": 7,
85
- "circular_sourcing_detected": 2,
86
- "agent_performance": {
87
- "web_surveyor": {"findings": 6, "avg_credibility": 0.65},
88
- "academic_scout": {"findings": 4, "avg_credibility": 0.88}
89
- }
90
- }
91
- }
92
- ```
93
-
94
- ### Field Descriptions
95
-
96
- | Field | Type | Required | Description |
97
- |---|---|---|---|
98
- | query | string | yes | The original research question |
99
- | mode | enum | yes | quick, standard, or deep |
100
- | timestamp | ISO-8601 | yes | When the research completed |
101
- | waves_completed | integer | yes | 1 for quick/standard, 1-2 for deep |
102
- | agents_dispatched | integer | yes | Total agents spawned across all waves |
103
- | council_used | boolean | yes | Whether ftm-council was invoked |
104
- | duration_ms | integer | yes | Total execution time |
105
- | findings | array | yes | All individual findings |
106
- | disagreement_map | object | standard/deep | The 4-tier reconciled output |
107
- | metadata | object | yes | Aggregate statistics |
108
-
109
- ### Finding ID Convention
110
-
111
- Finding IDs follow the pattern `f-NNN` where NNN is a zero-padded sequential number. IDs are stable within a session — if the user drills down on finding #3, it remains f-003 even after new findings are added.
112
-
113
- ---
114
-
115
- ## Markdown Rendering Template
116
-
117
- For user display:
118
-
119
- ```markdown
120
- # Research: [query]
121
-
122
- **Mode:** [mode] | **Agents:** [count] | **Sources:** [total] | **Duration:** [time]
123
-
124
- ---
125
-
126
- ## Consensus Findings
127
-
128
- [For each consensus claim:]
129
- **[N].** [claim] ([confidence]% confidence)
130
- - *Evidence:* [key evidence summary]
131
- - *Sources:* [source count] across [diversity] types — [top source URL]
132
- - *Agreed by:* [agent list]
133
-
134
- ---
135
-
136
- ## Contested — Where Agents Disagreed
137
-
138
- [For each contested pair:]
139
- **[N].** [topic of disagreement]
140
-
141
- | Position A | Position B |
142
- |---|---|
143
- | [claim_a] | [claim_b] |
144
- | Supported by: [agents_for_a] | Supported by: [agents_for_b] |
145
- | [evidence summary] | [evidence summary] |
146
-
147
- *Ranking:* [winner] — [judge rationale summary]
148
- *Council:* [provider positions if available]
149
-
150
- ---
151
-
152
- ## Unique Insights — Unverified but Interesting
153
-
154
- [For each unique insight:]
155
- - **[claim]** (from [agent_role], [confidence]% confidence)
156
- - [note about single-source status]
157
-
158
- ---
159
-
160
- ## Refuted — What We Ruled Out
161
-
162
- [For each refuted claim:]
163
- - ~~[claim]~~ — [rejection_reason]
164
-
165
- ---
166
-
167
- ## Source Summary
168
-
169
- | Source Type | Count | Avg Credibility |
170
- |---|---|---|
171
- | [type] | [count] | [avg score] |
172
-
173
- ---
174
-
175
- *What's next? You can:*
176
- - *"dig deeper on #N"* — spawn targeted agents on a specific finding
177
- - *"I disagree with #N"* — find counter-evidence
178
- - *"focus on [angle]"* — reshape and re-run with new weights
179
- - *"council #N"* — route a specific claim to ftm-council
180
- - *"compare A vs B"* — spawn comparison agent
181
- - *"done"* — finalize the research session
182
- ```
183
-
184
- ---
185
-
186
- ## Conversational Iteration Protocol
187
-
188
- After presenting results, the skill enters iteration mode. Each user command triggers a specific action:
189
-
190
- | User Command | Action | Updates |
191
- |---|---|---|
192
- | "dig deeper on #N" | Spawn 3 targeted agents on finding N's topic | Add new findings, re-render |
193
- | "I think X is wrong because Y" | Spawn counter-evidence agents + update findings | May move claims between tiers |
194
- | "focus on [angle]" | Reshape subtopics, re-dispatch with new weights | Full re-run with angle bias |
195
- | "council #N" | Route specific finding to ftm-council | Update council_verdict for that claim |
196
- | "more on [agent]'s findings" | Re-dispatch that agent with broader query | Add new findings from that domain |
197
- | "compare A vs B" | Spawn comparison agent with both findings as context | Add comparison analysis |
198
- | "done" | Finalize, write blackboard, emit events | Session ends |
199
-
200
- Each iteration:
201
- 1. Updates the JSON artifact (new findings get new IDs, tiers may change)
202
- 2. Re-renders the markdown with changes highlighted
203
- 3. Preserves the full conversation history for ftm-pause/resume
1
+ # Output Format Specification
2
+
3
+ ## Structured JSON Artifact
4
+
5
+ This is the primary output for skill-to-skill consumption (ftm-brainstorm, ftm-executor, etc.).
6
+
7
+ ### Schema
8
+
9
+ ```json
10
+ {
11
+ "query": "original research question",
12
+ "mode": "quick | standard | deep",
13
+ "timestamp": "ISO-8601",
14
+ "waves_completed": 1,
15
+ "agents_dispatched": 7,
16
+ "council_used": true,
17
+ "duration_ms": 12345,
18
+
19
+ "findings": [
20
+ {
21
+ "id": "f-001",
22
+ "claim": "one-sentence factual claim",
23
+ "evidence": "2-3 sentence supporting detail",
24
+ "source_url": "https://...",
25
+ "source_type": "primary | peer_reviewed | official_docs | code_repo | qa_site | news | blog | forum | codebase",
26
+ "confidence": 0.85,
27
+ "credibility_score": 0.78,
28
+ "trust_level": "high | moderate | low | verify",
29
+ "agent_role": "web_surveyor | academic_scout | github_miner | competitive_analyst | stack_overflow_digger | codebase_analyst | historical_investigator",
30
+ "wave": 1,
31
+ "corroborated": true,
32
+ "circular_sourcing": false
33
+ }
34
+ ],
35
+
36
+ "disagreement_map": {
37
+ "consensus": [
38
+ {
39
+ "claim": "...",
40
+ "supporting_agents": ["web_surveyor", "github_miner", "academic_scout"],
41
+ "source_count": 5,
42
+ "source_diversity": 3,
43
+ "council_verdict": "agreed",
44
+ "confidence": 0.92
45
+ }
46
+ ],
47
+ "contested": [
48
+ {
49
+ "claim_a": "...",
50
+ "claim_b": "...",
51
+ "agents_for_a": ["web_surveyor"],
52
+ "agents_for_b": ["competitive_analyst"],
53
+ "council_verdict": "contested",
54
+ "provider_positions": {
55
+ "claude": "a",
56
+ "codex": "b",
57
+ "gemini": "a"
58
+ },
59
+ "rank_winner": "a",
60
+ "judge_rationale": "..."
61
+ }
62
+ ],
63
+ "unique_insights": [
64
+ {
65
+ "claim": "...",
66
+ "agent_role": "historical_investigator",
67
+ "confidence": 0.6,
68
+ "note": "Single source — may be high-value insight or hallucination"
69
+ }
70
+ ],
71
+ "refuted": [
72
+ {
73
+ "claim": "...",
74
+ "rejection_reason": "Council unanimously rejected — evidence traces to a single unreliable blog post",
75
+ "original_agent": "web_surveyor"
76
+ }
77
+ ]
78
+ },
79
+
80
+ "metadata": {
81
+ "sources_total": 34,
82
+ "sources_high_trust": 12,
83
+ "sources_moderate_trust": 15,
84
+ "sources_low_trust": 7,
85
+ "circular_sourcing_detected": 2,
86
+ "agent_performance": {
87
+ "web_surveyor": {"findings": 6, "avg_credibility": 0.65},
88
+ "academic_scout": {"findings": 4, "avg_credibility": 0.88}
89
+ }
90
+ }
91
+ }
92
+ ```
93
+
94
+ ### Field Descriptions
95
+
96
+ | Field | Type | Required | Description |
97
+ |---|---|---|---|
98
+ | query | string | yes | The original research question |
99
+ | mode | enum | yes | quick, standard, or deep |
100
+ | timestamp | ISO-8601 | yes | When the research completed |
101
+ | waves_completed | integer | yes | 1 for quick/standard, 1-2 for deep |
102
+ | agents_dispatched | integer | yes | Total agents spawned across all waves |
103
+ | council_used | boolean | yes | Whether ftm-council was invoked |
104
+ | duration_ms | integer | yes | Total execution time |
105
+ | findings | array | yes | All individual findings |
106
+ | disagreement_map | object | standard/deep | The 4-tier reconciled output |
107
+ | metadata | object | yes | Aggregate statistics |
108
+
109
+ ### Finding ID Convention
110
+
111
+ Finding IDs follow the pattern `f-NNN` where NNN is a zero-padded sequential number. IDs are stable within a session — if the user drills down on finding #3, it remains f-003 even after new findings are added.
112
+
113
+ ---
114
+
115
+ ## Markdown Rendering Template
116
+
117
+ For user display:
118
+
119
+ ```markdown
120
+ # Research: [query]
121
+
122
+ **Mode:** [mode] | **Agents:** [count] | **Sources:** [total] | **Duration:** [time]
123
+
124
+ ---
125
+
126
+ ## Consensus Findings
127
+
128
+ [For each consensus claim:]
129
+ **[N].** [claim] ([confidence]% confidence)
130
+ - *Evidence:* [key evidence summary]
131
+ - *Sources:* [source count] across [diversity] types — [top source URL]
132
+ - *Agreed by:* [agent list]
133
+
134
+ ---
135
+
136
+ ## Contested — Where Agents Disagreed
137
+
138
+ [For each contested pair:]
139
+ **[N].** [topic of disagreement]
140
+
141
+ | Position A | Position B |
142
+ |---|---|
143
+ | [claim_a] | [claim_b] |
144
+ | Supported by: [agents_for_a] | Supported by: [agents_for_b] |
145
+ | [evidence summary] | [evidence summary] |
146
+
147
+ *Ranking:* [winner] — [judge rationale summary]
148
+ *Council:* [provider positions if available]
149
+
150
+ ---
151
+
152
+ ## Unique Insights — Unverified but Interesting
153
+
154
+ [For each unique insight:]
155
+ - **[claim]** (from [agent_role], [confidence]% confidence)
156
+ - [note about single-source status]
157
+
158
+ ---
159
+
160
+ ## Refuted — What We Ruled Out
161
+
162
+ [For each refuted claim:]
163
+ - ~~[claim]~~ — [rejection_reason]
164
+
165
+ ---
166
+
167
+ ## Source Summary
168
+
169
+ | Source Type | Count | Avg Credibility |
170
+ |---|---|---|
171
+ | [type] | [count] | [avg score] |
172
+
173
+ ---
174
+
175
+ *What's next? You can:*
176
+ - *"dig deeper on #N"* — spawn targeted agents on a specific finding
177
+ - *"I disagree with #N"* — find counter-evidence
178
+ - *"focus on [angle]"* — reshape and re-run with new weights
179
+ - *"council #N"* — route a specific claim to ftm-council
180
+ - *"compare A vs B"* — spawn comparison agent
181
+ - *"done"* — finalize the research session
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Conversational Iteration Protocol
187
+
188
+ After presenting results, the skill enters iteration mode. Each user command triggers a specific action:
189
+
190
+ | User Command | Action | Updates |
191
+ |---|---|---|
192
+ | "dig deeper on #N" | Spawn 3 targeted agents on finding N's topic | Add new findings, re-render |
193
+ | "I think X is wrong because Y" | Spawn counter-evidence agents + update findings | May move claims between tiers |
194
+ | "focus on [angle]" | Reshape subtopics, re-dispatch with new weights | Full re-run with angle bias |
195
+ | "council #N" | Route specific finding to ftm-council | Update council_verdict for that claim |
196
+ | "more on [agent]'s findings" | Re-dispatch that agent with broader query | Add new findings from that domain |
197
+ | "compare A vs B" | Spawn comparison agent with both findings as context | Add comparison analysis |
198
+ | "done" | Finalize, write blackboard, emit events | Session ends |
199
+
200
+ Each iteration:
201
+ 1. Updates the JSON artifact (new findings get new IDs, tiers may change)
202
+ 2. Re-renders the markdown with changes highlighted
203
+ 3. Preserves the full conversation history for ftm-pause/resume