Skip to content

Research Workflows

Fabric’s research workflows discover problems, validate opportunities, and generate execution-ready business playbooks. Three core workflows compose into a pipeline that transforms raw platform content into actionable startup plans.

research/problem-intelligence Discover problems across platforms
│ ideas.0, ideas.1, ...
┌────┴────┐
│ │
research/ research/
playbook idea-deep-dive
WorkflowPurposeOutput
research/problem-intelligenceCross-platform problem discoveryRanked clusters, ideas, specs
research/trend-analystCross-platform trend scoringScored trends with velocity/relevance/opportunity
research/optimal-scheduleOptimal posting times from trend data10-15 prioritized time slots per platform
global/post-performance-analystAnalyze why a published post performedScored analysis with recommendations
research/playbookExecution-ready business playbookSingle opinionated playbook
research/idea-deep-diveBroad market analysisMarket validation, pricing, GTM, revenue
research/reference-format-analysisExtract format DNA from a reference reelFormat DNA, recreation blueprint, summary

Workflow: research/problem-intelligence

Ingests content from 8 platforms: Reddit, Hacker News, YouTube, YouTube Shorts, TikTok, Instagram, Twitter, and forums. Extracts problems, normalizes and deduplicates, clusters by semantic similarity, detects existing solutions, scores opportunities deterministically, generates startup ideas, and produces SaaS specs.

Terminal window
# Discover problems in a niche
fab-workflow research/problem-intelligence \
--input niche="developer tools" \
-o output/devtools.json
# Reddit discovery mode (auto-discover and crawl subreddits)
fab-workflow research/problem-intelligence \
--input niche="project management" \
--input reddit_discovery=true \
--input depth=25 \
-o output/pm-deep.json
# Monitor specific subreddits (no search query needed)
fab-workflow research/problem-intelligence \
--input 'subreddits=["SaaS","startups","Entrepreneur"]' \
-o output/saas-reddit.json
# Re-run with Reddit discovery on previous output
fab-workflow research/problem-intelligence \
--input-file output/devtools.json \
--input reddit_discovery=true \
--input depth=25 \
--input 'platforms=["reddit"]' \
-o output/devtools-deep.json
plan_ingestion
┌────┼──────────────────────────────────────┐
reddit hackernews youtube shorts tiktok instagram twitter forums
└────┼──────────────────────────────────────┘
merge_sources
extract_problems (parallelized LLM batches)
normalize_problems (text cleanup + embedding dedup)
cluster_problems (cosine similarity > 0.88)
aggregate_solutions (detect existing solutions)
compute_scores (deterministic, no LLM)
generate_ideas (1-3 per top cluster)
score_ideas → generate_specs → format_output
ParameterTypeDefaultDescription
querystringSearch query (optional if niche or subreddits provided)
nichestringDomain to focus on (auto-derives query)
subredditslist[str][]Specific subreddits to monitor
forum_urlslist[str][]Forum URLs to ingest
platformslist[str]all 8Platforms to query: reddit, hackernews, youtube, youtube_shorts, tiktok, instagram, twitter, forums
depthint10Results per platform/subreddit
reddit_discoveryboolfalseAuto-discover relevant subreddits
max_subredditsint15Max subreddits to discover
reddit_concurrencyint3Concurrent subreddit crawls
extract_concurrencyint3Concurrent LLM extraction batches
top_clustersint10Clusters to generate ideas for
top_ideasint5Ideas to generate specs for

At least one of query, niche, subreddits, or forum_urls is required.

When reddit_discovery=true, the adapter auto-discovers relevant subreddits, crawls each in parallel across hot/top/new sort orders, and fetches full comment threads. Uses rotating browser user agents.

Terminal window
fab-workflow research/problem-intelligence \
--input niche="developer tools" \
--input reddit_discovery=true \
--input depth=25 \
--input max_subreddits=20 \
--input reddit_concurrency=5 \
-o output/devtools-deep.json

All opportunity scores are deterministic (no LLM) and bounded [0, 1]:

pain = frustration*0.4 + urgency*0.3 + (1 - sentiment)*0.3
demand = log(mentions+1)/log(max+2)*0.6 + log(users+1)/log(max+2)*0.4
growth = sigmoid(velocity * 2)
solution_gap = dissatisfaction*0.7 + (1 - solution_density)*0.3
recency = exp(-days_since_last / 7)
opportunity = pain*0.30 + demand*0.25 + growth*0.15 + gap*0.20 + recency*0.10
{
"workflow": "research/problem-intelligence",
"scope": "niche",
"niche": "developer tools",
"ranked_clusters": [
{
"id": "cluster_0",
"canonical_problem": "...",
"opportunity_score": 0.82,
"mention_count": 12,
"unique_users": 8,
"avg_frustration": 0.75
}
],
"discovered_subreddits": [
{"name": "webdev", "subscribers": 3214996}
],
"source_documents": [],
"problem_mentions": [],
"clusters": [],
"solution_mentions": [],
"ideas": [],
"specs": []
}

Workflow: research/idea-deep-dive

Broad market analysis for due diligence before committing to an idea. Runs 8 sequential LLM calls covering market validation, product variants, pricing, landing page, content strategy, go-to-market, and revenue projections.

Terminal window
# From problem-intelligence output (pick top idea)
fab-workflow research/idea-deep-dive \
--input-file output/devtools.json --pick "ideas.0" \
-o output/deep-dive.json
# Pick a different idea
fab-workflow research/idea-deep-dive \
--input-file output/devtools.json --pick "ideas.1" \
-o output/deep-dive-idea2.json
# Manual input
fab-workflow research/idea-deep-dive \
--input name="TaskFlow" \
--input description="AI project management for solo devs" \
--input target_persona="indie developers" \
-o output/deep-dive.json
prepare_idea → validate_market → generate_product_variants →
research_pricing → design_landing_page → plan_content_strategy →
plan_go_to_market → project_revenue → format_output
SectionContents
market_validationTAM/SAM/SOM, 5-10 competitors, timing, audience deep dive, demand signals
product_variantsAll viable forms ranked (SaaS, mobile, extension, templates, course, community, etc.)
pricing_researchWillingness to pay, 3-4 tiers, pricing psychology, estimated ARPU
landing_pageHero, problem, solution, features, social proof, FAQ — with actual copy
content_strategy10 blog posts, 5 videos, 3 lead magnets, social plan, email sequence, SEO keywords
go_to_marketPre-launch, launch week day-by-day, first 100 users, first 1000 users, partnerships
revenue_projections3 scenarios with month-by-month MRR, breakeven timeline, LTV/CAC

Workflow: research/playbook

Generates a high-fidelity, execution-ready business playbook via 8 parallel LLM calls. Includes naming, MVP strategy, build spec, monetization, 14-day social schedule across 6 platforms (Twitter, Reddit, LinkedIn, TikTok, Instagram, YouTube Shorts), day-by-day execution plan, success metrics, and launch assets with ready-to-post content for every platform.

Terminal window
# From problem-intelligence output (pick top idea)
fab-workflow research/playbook \
--input-file output/devtools.json --pick "ideas.0" \
-o output/playbook.json
# Pick a different idea
fab-workflow research/playbook \
--input-file output/devtools.json --pick "ideas.2" \
-o output/playbook-idea3.json
# From a deep Reddit crawl
fab-workflow research/playbook \
--input-file output/devtools-deep.json --pick "ideas.0" \
-o output/playbook-deep.json
# Manual input (no prior workflow needed)
fab-workflow research/playbook \
--input name="TaskFlow" \
--input description="AI project management for solo devs" \
--input target_persona="indie developers" \
-o output/playbook.json
SectionContents
name_suggestions8-10 brandable product names
opportunityProblem, persona, why now, market signals
evidenceSummary, real user quotes, pain signals
productPositioning, value prop, core features, MVP scope, what NOT to build
mvp_strategyWhere to start, day-1 version, week-1 version, validation question
buildComplexity, time to MVP, stack, file structure, DB schema, API endpoints, unknowns
monetizationModel, price points, competitor pricing, when/how to charge, free tier strategy
success_metricsDay-1/week-1/month-1 signals, activation metric, failure signals, revenue target
distribution14-day social schedule across 6 platforms, email templates, DM scripts, Fabric automation
execution_planDay-by-day plan (day 1 through day 7, then weeks 2-4) with hourly time estimates
extensionsWhat to build next, automation opportunities, feature/platform expansion
risksProduct, market, execution risks with likelihood and mitigation
assetsLanding page (hero, features, FAQ), launch posts for Twitter/Reddit/LinkedIn/TikTok/Instagram/YouTube Shorts, pitch
  • Grounded — all claims tie back to real problem data and user quotes
  • Opinionated — makes decisions, chooses positioning, recommends strategy
  • Executable — everything answers “can someone act on this immediately?”
  • MVP-disciplined — aggressively limits scope, includes explicit “what not to build”

All research workflows accept --input-file to load a previous workflow’s output. Combined with --pick (dot-notation path) and --map (rename fields), this enables chaining without glue code.

Terminal window
fab-workflow research/problem-intelligence \
--input niche="developer tools" -o output/devtools.json
fab-workflow research/playbook \
--input-file output/devtools.json --pick "ideas.0" \
-o output/playbook.json
Terminal window
fab-workflow research/problem-intelligence \
--input-file output/devtools.json \
--input reddit_discovery=true \
--input depth=25 \
--input 'platforms=["reddit"]' \
-o output/devtools-deep.json
Terminal window
for i in 0 1 2 3 4; do
fab-workflow research/playbook \
--input-file output/devtools.json --pick "ideas.$i" \
-o "output/playbook-idea-$i.json"
done
Pick pathExtracts
ideas.0First idea object
ideas.2Third idea object
ranked_clusters.0Top-ranked cluster
specs.0First SaaS spec

The extracted value becomes the input for the next workflow. Any --input K=V flags merge on top.


Use caseWorkflowWhy
Start building todayresearch/playbookOpinionated, concrete execution plan, launch assets
Validate before committingresearch/idea-deep-diveMarket analysis, competitors, pricing, revenue
BothRun bothThey accept the same input format

Workflow: research/deep_research

Multi-source fan-out research with parallel web, YouTube, Reddit, and RSS search.

Terminal window
fab-workflow research/deep_research \
--input query="Why are developers switching to Rust" \
-o output/rust-research.json

Workflow: research/hot_topics

Scans trending topics across categories with content opportunity scoring.

Terminal window
fab-workflow research/hot_topics \
--input categories='["tech", "business"]' \
-o output/hot-topics.json

Workflow: research/competitive

Analyzes competitor content strategy to find gaps.

Terminal window
fab-workflow research/competitive \
--input competitors='["@mkbhd", "@fireship"]' \
--input niche="tech education" \
-o output/competitive.json

Workflow: research/trends

Multi-signal trend analysis with content idea generation.

Terminal window
fab-workflow research/trends \
--input niche="AI agents" \
--input platform="TikTok" \
-o output/trends.json

Workflow: research/discover-topics

Finds trending topics for a niche. Lightweight wrapper around the SDK’s discover_topics stage.

Terminal window
fab-workflow research/discover-topics --input niche="AI tools"
# Shorthand
fab discover "AI tools"

Workflow: research/discovery

Finds high-performing content in a niche for repurposing.

Terminal window
fab-workflow research/discovery \
--input niche="productivity" \
--input platform="YouTube" \
-o output/content-discovery.json

Workflow: research/trend-analyst

Cross-platform social media trend research with real crawling. Ingests content from up to 6 platforms (X/Twitter, Instagram, TikTok, LinkedIn, YouTube, Reddit) in parallel, then uses LLM analysis to identify and score trending topics on three dimensions: velocity, relevance, and opportunity.

Unlike research/trends (which uses LLM search grounding only), this workflow performs actual platform crawling via APIs and web fallbacks, producing data-grounded trend scores.

Terminal window
# Basic niche analysis (default 5 platforms)
fab-workflow research/trend-analyst \
--input niche="AI productivity tools" \
--input target_audience="solopreneurs" \
--input content_pillars="tutorials,reviews,news" \
-o output/trends.json
# Specific platforms + Reddit
fab-workflow research/trend-analyst \
--input niche="fitness tech" \
--input platforms="youtube,tiktok,reddit" \
--input trends_per_platform=3 \
-o output/fitness-trends.json
plan_trend_research
┌────┼────────────────────────────────┐
x instagram tiktok linkedin youtube reddit
└────┼────────────────────────────────┘
merge_trend_sources
score_trends (LLM: velocity/relevance/opportunity 1-100)
format_trend_output (composite score, sort, normalize)
ParameterTypeDefaultDescription
nichestring(required)Niche or industry to analyze
target_audiencestring""Who the content is for
content_pillarsstring""Comma-separated content pillars
platformsstring"x,instagram,tiktok,linkedin,youtube"Platforms to scan (also supports reddit)
trends_per_platformint5Trends per platform (3-5)
{
"trendsBySource": {
"youtube": [
{
"topic": "AI coding assistants replacing Stack Overflow",
"score": 85,
"signals": { "velocity": 90, "relevance": 80, "opportunity": 85 },
"summary": "Rapidly growing discussion around AI pair programming tools",
"suggestedAngle": "Compare top 5 AI coding assistants with real benchmarks"
}
],
"tiktok": [ ... ],
"linkedin": [ ... ]
},
"capturedAt": "2026-04-17T12:00:00Z"
}

Trends are grouped by source platform, sorted by composite score within each group. The composite score is weighted: velocity × 0.3 + relevance × 0.4 + opportunity × 0.3. Defaults to local LLM (quality=prefer-local) — override with --input quality=cheap or --input quality=premium for cloud models.

Workflow: research/optimal-schedule

Takes trending-topic snapshots (e.g. from research/trend-analyst) plus the creator’s niche, audience, and timezone, and uses LLM analysis to determine the optimal posting times per platform for the next 7 days. Returns 2-3 prioritized time slots per platform (10-15 total), staggered to avoid cross-platform clashes.

Terminal window
# Pipe trend-analyst output directly
fab-workflow research/trend-analyst \
--input niche="AI productivity tools" \
-o output/trends.json
fab-workflow research/optimal-schedule \
--input niche="AI productivity tools" \
--input targetAudience="solopreneurs" \
--input timezone="America/New_York" \
--input-file output/trends.json --pick trendsBySource \
--map trends=trendsBySource \
-o output/schedule.json
validate_inputs (parse JSON, validate timezone, extract platforms)
compute_schedule (LLM: platform-specific timing + trend alignment)
ParameterTypeDefaultDescription
nichestring(required)Creator’s content niche
targetAudiencestring""Target audience description
timezonestring"UTC"Creator’s timezone (IANA, e.g. America/New_York)
trendsstring (JSON)(required)JSON array of trend objects with topic, source, score, velocity, relevance, opportunity, summary
currentSlotsstring (JSON)"[]"JSON array of existing schedule slots [{provider, dow, hour}]
{
"slots": [
{
"provider": "youtube",
"dow": 2,
"hour": 18,
"priority": 1,
"reasoning": "Tuesday evening UTC aligns with peak US afternoon YouTube viewership; high-velocity AI coding trend needs immediate coverage",
"trendAlignment": "AI coding assistants replacing Stack Overflow"
},
{
"provider": "linkedin",
"dow": 3,
"hour": 12,
"priority": 2,
"reasoning": "Wednesday noon UTC = morning East Coast LinkedIn peak; professional audience engages with productivity content",
"trendAlignment": "AI productivity tools for enterprise"
}
],
"strategy": "Front-load high-velocity trends (YouTube, X) in first 2 days; space LinkedIn and Instagram mid-week; reserve TikTok for evening/weekend slots",
"computedAt": "2026-04-21T12:00:00Z"
}

Slots are sorted by priority (1 = highest). All hours are in UTC. The LLM accounts for the creator’s timezone when mapping platform peak windows to UTC hours.

Workflow: global/post-performance-analyst

Analyzes why a published social media post performed the way it did. Takes the post content (caption, hashtags, media type) plus platform metrics (impressions, interactions, comments, watch time) and returns a structured performance analysis with scores, strengths, weaknesses, and actionable recommendations.

Engagement rate and performance grade are computed deterministically using platform-specific benchmarks. Qualitative analysis (hook effectiveness, structure, hashtag strategy, timing, platform fit) is performed by LLM.

Terminal window
fab-workflow global/post-performance-analyst \
--input post_id="ig-20260415-001" \
--input provider="instagram" \
--input caption="3 things nobody tells you about cold showers" \
--input 'hashtags=["coldshower","wellness","health"]' \
--input media_type="video" \
--input 'metrics={"impressions":50000,"interactions":2100,"comments":85,"watchTimeSeconds":120}' \
--input published_at="2026-04-15T09:30:00Z" \
--input platform_account_follower_count=12000 \
-o output/post-analysis.json
compute_engagement_metrics (deterministic: rate + grade)
analyze_performance (LLM: 5-dimension scoring + recommendations)
ParameterTypeDefaultDescription
post_idstring(required)Unique identifier of the published post
providerstring(required)Platform: instagram, tiktok, youtube, twitter, linkedin
captionstring""Post caption/text content
hashtagsstring[][]Hashtags used on the post
media_typestring"image"Media type: image, video, carousel, text
metricsobject{}{impressions, interactions, comments, watchTimeSeconds}
published_atstring""ISO 8601 timestamp of publication
platform_account_follower_countintnullFollower count at time of post
{
"postId": "ig-20260415-001",
"provider": "instagram",
"performanceGrade": "B",
"engagementRate": 4.2,
"analysis": {
"hookScore": 85,
"structureScore": 70,
"hashtagScore": 60,
"timingScore": 90,
"platformFitScore": 80
},
"strengths": ["Strong opening hook with curiosity gap", "Good use of video format"],
"weaknesses": ["Only 3 hashtags limits discoverability"],
"recommendations": ["Add 15-20 niche hashtags", "Include a CTA in the first line"],
"predictedActions": {
"wouldImproveEngagement": ["Shorten caption to under 150 chars", "Add CTA in first line"],
"avoidNextTime": ["Too few hashtags limits organic reach"]
},
"analyzedAt": "2026-04-15T14:00:00Z"
}

Grade thresholds vary by platform. For example, Instagram grades A+ at >6% engagement while TikTok requires >10% for the same grade, reflecting different baseline engagement levels.


Workflow: video/export-platforms

Takes a finished 9:16 video and produces platform-ready exports with resize, duration trimming, and LLM-generated metadata.

Terminal window
# Export a video for multiple platforms
fab-workflow video/export-platforms \
--input media_path=output/short.mp4 \
--input topic="AI productivity tools" \
--input 'platforms=["tiktok","instagram","youtube_shorts"]' \
-o output/exports.json
PlatformAspectResolutionMax DurationMetadata
tiktok9:161080x1920180sDescription (150 char), hashtags, sound suggestion
instagram9:161080x192090sCaption (2200 char), 20-30 hashtags, cover frame
youtube_shorts9:161080x192060sTitle, description, tags, thumbnail text
youtube16:91920x1080unlimitedTitle, description, 10-15 tags, thumbnail
instagram_feed1:11080x108060sCaption, 20-30 hashtags
linkedin9:161080x1920600sProfessional post text, 3-5 hashtags

Aspect ratio changes use blur-fill (blurred background, no black bars). Videos exceeding platform max duration are trimmed.


PlatformAPIAuth RequiredRate Limit
RedditPublic JSON API (old.reddit.com)No2s between calls
Hacker NewsAlgolia APINo0.5s between calls
YouTubeyt-dlp + commentsNo
YouTube Shortsyt-dlp + #shorts filter (90s max)No
TikTokyt-dlp tiktoksearch or DuckDuckGo fallbackNo
InstagramGraph API or DuckDuckGo + Jina Reader fallbackINSTAGRAM_ACCESS_TOKEN for Graph API2s between calls
TwitterAPI v2 or DuckDuckGo fallbackTWITTER_BEARER_TOKEN for API v2
ForumsJina ReaderNo

VariableRequiredDescription
GEMINI_API_KEYYesLLM extraction, ideation, spec generation, playbook, deep dive
OPENAI_API_KEYNoEmbeddings (falls back to sentence-transformers locally)
TWITTER_BEARER_TOKENNoTwitter API v2 (falls back to web search)
INSTAGRAM_ACCESS_TOKENNoInstagram Graph API (falls back to web search)

Workflow: research/reference-format-analysis

Analyzes a local short-form video (Reel, TikTok, Short) and extracts its reusable structural format — “format DNA”. Outputs a machine-readable recreation blueprint that can be consumed by video/recreate-from-format to generate original content in the same format shape.

Analyzes 18 dimensions: shots, transitions, composition, motion, color, transcript, pauses, retention hooks, speaker energy, music, OCR, structural phases, hook type, ending type, archetype, emotional arc, and edit grammar.

Terminal window
# Analyze from a URL (YouTube, TikTok, Instagram)
fab-workflow research/reference-format-analysis \
-i reference_video_url="https://www.instagram.com/reel/ABC123/" \
-i platform="instagram_reels" \
-i artifact_dir="output/analysis" \
-v
# Analyze a local file
fab-workflow research/reference-format-analysis \
-i reference_video_path="reference_reel.mp4" \
-i platform="instagram_reels" \
-i artifact_dir="output/analysis" \
-v
# Heuristic-only (no LLM, faster, no API key)
fab-workflow research/reference-format-analysis \
-i reference_video_url="https://www.tiktok.com/@user/video/123" \
-i platform="tiktok" \
-i enable_tone_inference=false \
-i artifact_dir="output/analysis" \
-v
validate_and_probe → detect_shots_and_visual_analysis → transcribe_and_analyze_audio → infer_format_dna → emit_analysis_artifacts
  • format_dna.json — complete 18-dimension analysis
  • recreation_blueprint.json — actionable constraints for recreation
  • summary.md — human-readable format explanation
  • transcript.json, shots.json — raw analysis data

FlagDescription
-o FILESave output JSON to file
-v / --verbosePrint full JSON to terminal
--input K=VSet input key-value (repeatable)
--input-file FILELoad input from JSON file
--pick PATHExtract nested field from input file
--map TO=FROMRename fields from input file
--model MODELOverride LLM model
--quality PROFILEQuality profile (local, cheap, premium)