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
|
@@ -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
|