Build a comprehensive research deliverable on any product or company. Final output is a single complete .md file with up to 8 fact-checked, primary-source-driven modules plus optional synthesis. Each module runs as a separate sub-agent into intermediate files at [product]/research/, then Phase 4 compiles everything into one shareable markdown document.
The skill adapts to product type. Indie SaaS, AI-native, OSS dev tools, enterprise B2B, and consumer apps need different research approaches. Phase 0 classifies the product so subsequent modules use the right framing and source mix.
The user wants comprehensive research, not a quick answer. Examples:
Do this FIRST, before any modules. Determine the product's shape along 3 dimensions. If the user didn't specify, infer from the product name and confirm in one short message.
| Dimension | Options | Affects |
|---|---|---|
| --- | --- | --- |
| Funding & Origin | Indie / Bootstrapped / VC-backed / Big-tech-internal / Public | Module 1 (founder narrative depth), Module 8 (risk categories) |
| Growth engine | Composition model — score active engines by weight (see below) | Module 4 (depth allocation per engine) |
| Extensibility | Plugin / API / SDK / MCP / Marketplace / None | Module 5 (run / repurpose / skip) |
> [!important] PLG is a spectrum, not a binary
> Many products have self-serve signup + freemium and get labeled "PLG." But if acquisition is actually driven by paid ads or KOL campaigns, and conversion by promotional discounting, the actual growth engine is Paid + KOL with a PLG veneer. Phase 0 must diagnose the actual combination from product actions, not the marketing narrative.
Growth is almost always a combination of engines at different maturity levels. Score each active engine 0–3:
| Score | Meaning | Evidence pattern |
|---|---|---|
| --- | --- | --- |
| 3 | Primary — top 1-2 growth driver | Clear, attributable growth from this engine |
| 2 | Significant — measurable contribution | Supporting evidence, meaningful volume |
| 1 | Minor — exists but not moving the needle | Present but low impact or aspirational |
| 0 | Absent | No evidence found |
Engine menu: Self-serve PLG · Paid acquisition · KOL/Influencer-led · Content/SEO · Sales-led · Platform-bundled · Network-effect · Community/WOM · Channel partnerships
PLG maturity checkpoint — when PLG ≥ 1, assess the loop:
Verdict: Closed (stages 1-5 all work) · Partial (which stages break?) · Aspirational (PLG mechanics exist but growth actually driven by other engines)
> [!tip] Inference from product actions
> You can infer engine composition from observable signals — app store ads, KOL partnerships, sales team hiring on LinkedIn, content volume, community size — but be cautious. Label inferences as (推测) / (inferred) and distinguish from confirmed data. The sub-agent in Module 4 will validate and deepen the Phase 0 hypothesis.
Output: a routing config string. Inject into every subsequent module prompt. Format:
{ funding: VC-backed, growth: "KOL(3)+Paid(3) | Platform(2) | PLG(1,aspirational)", extensibility: API }
The growth string lists engines scored ≥1, grouped by score tier, with PLG maturity appended when applicable.
Examples:
Indie / PLG-closed(3)+Community(3)+KOL(2) / PluginVC-backed / PLG-closed(3)+Sales(2)+Content(1) / APIPublic / Sales(3)+Channel(2)+Platform(2) / MarketplaceBig-tech-internal / Platform(3)+Content(2) / NoneVC-backed / Network(3)+Creator-WOM(2)+Content(2) / NoneBig-tech-internal-OSS / Platform(3)+Community(3)+Plugin-ecosystem(2) / PluginVC-backed / PLG-closed(3)+Community(2)+Content(2) / None (built-in only)VC-backed / KOL(3)+Paid(3)+Platform(2)+PLG(1,aspirational) / API+SDKThe classification gets written into MOC under "## Product classification" so readers see the lens upfront.
Confirm 4 things (skip what's already given):
{SCOPE_BLOCK} (template below) and inject it into every sub-agent prompt alongside {LENS_BLOCK}.{SCOPE_BLOCK} to empty string.Scope block template — use only when scope == product-only for a sub-product:
```
SCOPE — This research is scoped to {PRODUCT} only, not {PARENT_COMPANY}'s full portfolio ({SIBLING_PRODUCTS}).
Rules:
```
If user said "调研 Notion" with no other context: assume Chinese, no lens, proceed.
If user said "调研 LibTV" → Phase 0 reveals LibTV is under LiblibAI → ask scope → default product-only.
Use Phase 0 routing to decide which modules to run. Always present the planned set to the user before running:
| Module | Run when... | Skip when... |
|---|---|---|
| --- | --- | --- |
| 1 · Founders & Philosophy | Always | — (Big-tech products have product-team narratives; just thinner) |
| 2-3 · Timeline & Business Model | Always | — |
| 4 · Growth Engine | Always | — (composition-based, adapts to engine mix) |
| 4b · Use Case Map | Always | — |
| 5 · Extensibility & Ecosystem | extensibility ≠ "None" | extensibility == "None" |
| 6 · Community & KOL Network | Always | — (source mix varies by product type) |
| 7 · Competitive Landscape | Always | — |
| 8 · Risks & Ceiling | Always | — |
Use the prompts in references/module-prompts.md. For each module, spawn a general-purpose subagent with the Phase 0 routing config injected.
Recommended batching:
After each batch, update the MOC progress table.
Foreground vs background: foreground if user is waiting; run_in_background: true if user wants to multitask.
Path discipline (important): Sub-agents tend to save to parent directory. Always include the absolute path in the prompt: save to /full/path/. Verify path in deliverable summary; move file if wrong.
The Phase 3 modules wrote individual files to [product]/research/ as intermediate artifacts. Phase 4 compiles them into the single-file deliverable the user actually consumes.
Before generating the MOC, independently re-verify the 5-8 most important quantitative claims across all modules. At minimum check:
If any number conflicts with what sub-agents reported, update the module file and flag the correction in MOC's "Already-corrected facts" section. This step exists because sub-agents inherit the orchestrator's context and rarely challenge pre-filled numbers — the orchestrator must close the loop.
[product]/research/00-MOC.md[[wikilink]] placeholdersSave to [product]/research/[their-product]-decisions.md:
Skip this step entirely if no lens — go directly to Step 3.
Compile MOC + all modules + synthesis into [product]/[product]-research.md. This is the file the user consumes:
PRODUCT=<product-slug>
OUT="$PRODUCT/$PRODUCT-research.md"
{
# Top-level frontmatter
echo '---'
echo "title: $PRODUCT Research"
echo "type: full-document"
echo "date: $(date +%Y-%m-%d)"
echo "tags: [$PRODUCT/research, full-doc]"
echo '---'
echo ''
echo "# $PRODUCT Research"
echo ''
# Compile each file: strip frontmatter, demote all headings by one level
for f in $PRODUCT/research/*.md; do
awk '/^---$/ {n++; next} n>=2' "$f" \
| awk '/^#+ / { print "#" $0; next } { print }'
echo ''
echo '---'
echo ''
done
} > "$OUT"
echo "✅ Compiled to $OUT ($(wc -c < "$OUT") bytes, $(wc -l < "$OUT") lines)"
What this does:
---)# X → ## X, ## Y → ### Y, etc.) so the compiled file has a single top-level title--- separatorsThe single .md file is the deliverable. The [product]/research/ folder contains intermediate artifacts — keep for Obsidian users who want the multi-file vault, or delete after compilation.
Confirm with the user where they want the final file (default [product]/[product]-research.md).
These principles produce grounded, durable research. Every agent prompt enforces them:
> [!warning] callouts. Don't silently fix — the user wants to know what was wrong.未找到一手原话 / "primary source not found" — never paraphrase as if it were a quote.| Module | Chinese chars | English chars |
|---|---|---|
| Foundational (1, 2-3) | 1500-2200 | 4500-6500 |
| Heavy (4 — growth motion) | 4000-5500 | 12000-16500 |
| Standard (4b, 5, 6, 7, 8) | 2500-4500 | 7500-13500 |
See references/output-format.md for the full table including MOC and synthesis budgets.
(待验证) / (unverified) rather than stating them as fact. Sub-agents anchor on whatever the orchestrator writes — one wrong number in the KEY CONTEXT block propagates to all 7+ modules as if verified. Third-party aggregators (AppBrain, SimilarWeb, Getlatka) lag behind primary sources; always prefer official store pages, founder statements, or SEC filings. Module 2-3 (Timeline & Business Model) should be explicitly instructed to independently verify all quantitative claims regardless of what the orchestrator provided.Obsidian-style markdown. See references/output-format.md for full conventions. Essentials:
title, type, module, date-created, date-updated, status, tags[[01-founders-philosophy]], [[Person Name]]> [!info], > [!quote], > [!important], > [!warning], > [!danger], > [!tip]User: "调研 Linear 给我看,我没在做竞品"
Claude (using this skill):
Phase 0 — classify Linear:
{ funding: VC-backed, growth: "PLG-closed(3)+Sales(2)+Content(1)", extensibility: API }Phase 1:
{SCOPE_BLOCK} = empty.Phase 2: Plan all 8 modules. Module 4 deep-dives PLG (primary, loop closed) + Sales (secondary) + Content (minor), with PLG maturity checkpoint. Module 5 researches the API ecosystem (not plugins). Module 8 risk categories include VC pressure + category disruption.
Phase 3:
linear/research/ with absolute pathsPhase 4:
linear/research/00-MOC.md with Product Classification at toplinear/linear-research.md — single file with all 8 modules + MOC, headings demoted, frontmatter unifiedFinal deliverable: linear/linear-research.md — single complete markdown file (~30k Chinese chars / ~90k English chars), fact-checked, primary-source-driven. Intermediate linear/research/ folder kept for reference (or deleted after compilation).
User: "帮我调研一下 LibTV"
Phase 0 — classify LibTV:
Phase 1:
> "LibTV 是 LiblibAI 旗下的一个子产品(另有 LiblibAI 图像平台和 Lovart 设计 Agent)。你想只调研 LibTV,还是调研 LiblibAI 整个产品线?默认只调研 LibTV。"
{SCOPE_BLOCK} with PARENT=LiblibAI, SIBLINGS=LiblibAI图像平台/LovartEffect on modules: Each sub-agent gets the scope block + growth composition. Module 4 (growth) deep-dives KOL + Paid engines first (they're primary), then Platform distribution (secondary), and runs PLG maturity checkpoint — diagnosing the loop as aspirational since acquisition is KOL/ad-driven. Module 6 (community) maps LibTV-specific communities, not the broader SD model-sharing ecosystem. LiblibAI's platform appears only as "traffic source" or "shared infrastructure", not as a co-subject.
共 1 个版本