Produce a rigorous, verified, fully-cited research report on ANY topic by running a disciplined five-stage pipeline: CLARIFY the question, PLAN (an editable research plan), FAN-OUT parallel search subagents, VERIFY every key claim (cross-source + adversarial + cross-model), then SYNTHESIZE a cited report. Use this WHENEVER the user wants real research rather than a quick answer — "research X", "do a deep dive on Y", "write me a report / brief / literature review on Z", "compare A vs B and back it with sources", "what's the state of the art in …", "investigate …", "find evidence for/against …", "give me a market/landscape/competitor analysis", or any question where being wrong is costly and the answer needs citations. Trigger even when the user does not say the word "research" but clearly needs multi-source, fact-checked, cited output. This is the general-topic web-research orchestrator — not the codebase-to-wiki `deep-research` skill. For a fast single-fact lookup, answer directly instead.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
You are running a research pipeline whose product is a verified, cited report — not an off-the-cuff answer. The whole point is that a reader can trust each claim because it is traced to a source and it survived scrutiny. Speed matters, but a fast wrong answer is a failure; a slower answer you can defend is the goal.
Every serious research system (Anthropic's multi-agent Research, Google's Deep Research, OpenAI's Deep Research, GPT Researcher) is the same loop. This skill is that loop, made explicit:
CLARIFY → PLAN (editable) → FAN-OUT SEARCH (parallel subagents)
→ VERIFY (cross-source · adversarial · cross-model)
→ SYNTHESIZE (cited report) [with checkpoint/resume throughout]Do not skip stages silently. Each stage exists to remove a specific failure mode; the "why" is given so you can adapt the how to the topic instead of following it robotically.
references/playbook.md)CLARIFY — Why: the most expensive research mistake is answering the wrong question. If the request is missing scope, timeframe, region, depth, audience, or the decision it feeds, ask 2–3 targeted questions and wait. If it is already specific, say so in one line and move on — do not interrogate the user for its own sake.
PLAN (editable) — Why: letting the user correct course before you spend tokens is far cheaper than after. Produce a short plan: the sub-questions you'll chase, source types, the effort tier (see below), trusted/blocked domains, and the output format. Present it and invite edits. Under a "just go" instruction, still show the plan in ~6 lines, then proceed unless told otherwise — the plan is also your checkpoint seed. Keep the gate light: a plan the user can't meaningfully judge is friction, not safety. For exploratory topics where you don't yet know the right sub-questions, run a quick preliminary search first and present a plan enriched with those initial findings rather than a cold guess — progressive disclosure beats a blind upfront questionnaire.
FAN-OUT SEARCH — Why: independent sub-questions explored in parallel, each in its own context,
cover more ground and don't contaminate each other. Decompose into independent threads and dispatch
parallel Agent subagents (one per thread). Each returns structured findings: claim, evidence,
source URL, source date, and a confidence note. See references/playbook.md for the subagent brief and
the fan-out-mechanism decision.
VERIFY — Why: a single source can be wrong, outdated, or fabricated, and any single model
(including you) hallucinates. This stage is what separates research from a summary. The checks
escalate by stakes. Source-grounded verification is primary: for each load-bearing claim, confirm
you actually fetched the page and that the exact passage in the ledger really supports the claim
(re-open it if unsure), and require independent corroboration (see below). Then, layered on top:
adversarial (a skeptic subagent tries to refute the top claims by finding contrary evidence),
and — as an adjunct, not ground truth — cross-model (route the claim digest through codex + agy).
Be honest about what cross-model buys: those models re-read your digest, not the live web, so
agreement is a cheap hallucination-smell / consistency check, not independent confirmation — it
can rubber-stamp a syndicated error. The differentiator of this pipeline is the layered verification
discipline, not cross-model alone. Full protocol in references/verification.md.
SYNTHESIZE — Why: the reader needs the answer, the confidence, and the trail — in that order.
Write the report to the exact structure in references/report-template.md: executive summary →
findings (each cited inline) → confidence & caveats → open questions → sources. Offer a visual
(Artifact) only if the topic benefits and the user wants one.
The single mechanism that keeps the whole pipeline honest. Every load-bearing claim is a row:
claim | exact supporting passage (quoted) | source URL | source date(s) | independence note | statusstatus (verified / single-source / contested / unverified).
Do not trust a worker's summary of a page for a load-bearing claim; the passage must be there.This is why "no citation theater" is enforceable here: the report is generated from rows whose passages
you read, and scripts/verify_citations.py mechanically checks that report ↔ ledger stay consistent
(every inline citation resolves to a ledger row with a non-empty passage). See references/playbook.md
for the ledger format and references/verification.md for what "independent" and "supports" mean.
Research can loop forever; a disciplined run knows when to stop. Stop and write the report when every
load-bearing claim is either verified or explicitly flagged (single-source / contested /
unverified) — that is "mature", not "every possible fact found". Also stop, and say so plainly, when:
Borrowed from Anthropic's finding that token spend is the dominant driver of research quality, but that over-spending on simple questions is pure waste. Pick a tier in the PLAN stage and state it:
| Tier | Use when | Sub-questions / subagents | Search depth | Verify |
|---|---|---|---|---|
| Quick | one fact, one comparison, low stakes | 1–2, often no subagents | 3–10 fetches | cross-source only |
| Standard (default) | most reports, briefs, "compare X vs Y" | 3–5 parallel subagents | 10–15 fetches each | cross-source + adversarial on top claims |
| Deep | high-stakes decision, broad landscape, conflicting sources | 6–10+ subagents, may sub-decompose | as needed | all three, incl. cross-model |
When unsure, default to Standard and say so. Escalate a tier if verification keeps surfacing contradictions — that's a signal the question is harder than it looked.
allowed_domains / blocked_domains on every search and record the restriction in
the plan. Default to reputable primary sources; treat SEO blogspam and content farms as low-confidence.Research runs are long and can be interrupted. Persist state so a resumed run continues instead of
restarting. Write state under the current working / project directory (./.research-pipeline/<slug>/),
never inside the skill's own install directory. Use the helper (<skill-dir> is where this skill lives):
python3 <skill-dir>/scripts/checkpoint.py init <slug> --question "..." --tier standard
python3 <skill-dir>/scripts/checkpoint.py save <slug> --thread "pricing" --status done --file findings/pricing.md
python3 <skill-dir>/scripts/checkpoint.py status <slug> # what's done / pending — read this before fanning outBefore dispatching a subagent, check whether that thread is already done in state; if so, reuse its saved
findings. The state file is self-describing — its schema is documented at the top of checkpoint.py, so a
future run (or a different agent) can resume with no prior context. If Python is unavailable, keep the same
JSON by hand.
Agent subagents — dispatch one per research thread in a single message so they run
concurrently. This is the portable path and needs no special mode.Workflow tool for deterministic fan-out + verify
pipelining. Do not reach for Workflow otherwise — it is gated and will either be refused or over-escalate.[single-source] flag.references/verification.md.This works for any topic, but the evidence bar is domain-specific — "prefer primary sources" is not
one rule. For medicine/science a systematic review usually outranks a single study; for companies a
filing outranks a blog; for law, jurisdiction and currentness decide. Before FAN-OUT, pick the right
evidence ladder from references/evidence-standards.md. That file also holds the high-stakes handling
(medical / legal / financial / safety topics need explicit disclaimers and stricter sourcing) and the
known limitations — things this skill deliberately does not try to solve, so you don't pretend it
does.
references/playbook.md — detailed per-stage procedure, subagent brief, the claim-ledger format,
decomposition guidance, and the shared research brief.references/verification.md — the source-grounded / adversarial / cross-model protocol, what
"independent" and temporal dates mean, and the CLI invocations (codex + agy; gemini optional third).references/evidence-standards.md — per-domain evidence ladders, high-stakes handling, known limitations.references/report-template.md — the required report structure with a worked example.scripts/verify_citations.py — mechanical report ↔ ledger consistency check (run before you ship).