Deep research, when
The research tool (and /research command) runs a long-horizon pipeline: it decomposes a question into sub-questions,
spawns a web-researcher subagent per sub-question, synthesizes per-section drafts, merges them, then runs a two-stage
review (structural + subjective critic) before writing a fully-cited report.md under ./research/<slug>/. It is the
heaviest tool in the kit - many subagent spawns, many fetches, real wall-clock and token spend. This skill is the policy
for when that spend pays off and when a cheaper move wins.
When to use this skill
Reach for research only when most of these hold:
- The answer needs many independent sources, weighed against each other - not one authoritative page.
- The deliverable is a written, cited report the user will keep or share, not a one-line answer.
- The question is open or comparative: "compare the trade-offs of X vs Y vs Z for use-case W", "what is the current
state of the art in ...", "survey the approaches to ...".
- Getting it wrong is expensive, so the adversarial review stage (claims fact-checked, structure critiqued) earns
its cost.
Do NOT use research when a cheaper path answers the question:
- One page answers it. A single
ai-fetch-web fetch (or curl) is seconds, not
minutes. Reach for the pipeline only when you would otherwise fan out across a dozen pages by hand.
- It is a lookup, not a survey. "What is the latest stable version of X?" or "what does this API return?" is a
fetch, not a research run.
- The answer is in the repo or local files. Read the code,
git log, or the docs. Pi's
grep-before-read is the move, not web research.
- A scoped subagent suffices. A single
explore-type subagent that fetches two
or three pages and returns a summary is far cheaper than the full pipeline.
- The question is underspecified. Garbage in, expensive garbage out. Narrow it first (see below).
Workflow
- Try the cheap path first. Can one fetch, one grep, or one scoped subagent answer it? If yes, do that and stop.
- Sharpen the question before spending. A vague prompt produces a vague, expensive report. If scope, constraints,
region, budget, or use-case are missing, ask 2-3 clarifying questions first - the
clarify-with-questionnaire tool is built for exactly this. Weave the
answers into the question.
- Right-size the run. The tool takes optional overrides; tune them to the job instead of accepting defaults
blindly:
fanoutParallel - cap simultaneous web-researchers. Set to 1 when fanout points at a single local model that
cannot handle concurrent requests.
wallClockSec - hard wall-clock budget for the fanout (e.g. 7200 for a 2h local-model run).
model / fanoutModel / criticModel / planCritModel - per-stage model overrides; push fanout to a cheaper
model and keep a stronger one for synthesis when that fits.
reviewMaxIter - cap on review iterations (default 4).
- Launch and let it checkpoint. Only one research run is allowed per session. The planning-critic stage is a
checkpoint: if it rejects the plan, the run halts so you can edit
plan.json and rerun.
- Resume rather than restart if a run stalls or exhausts its budget:
/research --resume auto-detects the stage
from on-disk state, or pin it with --from plan-crit|fanout|synth|review.
- Deliver the report. The artifacts land under
./research/<slug>/ (plan.json, findings/, report.md,
journal.md). Point the user at report.md; summarize the outcome (report-complete / checkpoint / etc.).
Cost discipline
- The pipeline spawns one subagent per sub-question plus critics. A 10-sub-question plan is 10+ child sessions. Treat
every run as a deliberate spend, not a default.
- Prefer a tighter
wallClockSec and lower fanoutParallel on local models - an unbounded run can grind for hours.
- If the user just wants "a quick sense of X", that is a fetch or a subagent, not a research run. Say so and offer the
cheap version first.
Common pitfalls
- Using
research as a search box. It is a report generator. For a single fact, fetch.
- Launching on a fuzzy question. Clarify scope first; the review stage cannot fix an ill-posed prompt.
- Ignoring the checkpoint. A rejected plan is a signal to fix the decomposition, not to force the run through.
- Starting a second run mid-session. The tool rejects concurrent runs -
wait for or resume the first.
Related docs
1---2name: deep-research-when3description: WHAT: Decide when the heavy `research` deep-research pipeline (plan -> fanout -> synth -> two-stage review, writing a cited report under ./research/) is worth its time and token cost, versus a cheaper single fetch or subagent. WHEN: The user wants a thorough, multi-source, fact-checked written report on an open question. DO-NOT: Fire it for a single lookup, a question one `ai-fetch-web` call answers, or anything you can settle by reading the repo.4---56# Deep research, when78The `research` tool (and `/research` command) runs a long-horizon pipeline: it decomposes a question into sub-questions,9spawns a `web-researcher` subagent per sub-question, synthesizes per-section drafts, merges them, then runs a two-stage10review (structural + subjective critic) before writing a fully-cited `report.md` under `./research/<slug>/`. It is the11heaviest tool in the kit - many subagent spawns, many fetches, real wall-clock and token spend. This skill is the policy12for when that spend pays off and when a cheaper move wins.1314## When to use this skill1516Reach for `research` only when most of these hold:1718- **The answer needs many independent sources**, weighed against each other - not one authoritative page.19- **The deliverable is a written, cited report** the user will keep or share, not a one-line answer.20- **The question is open or comparative**: "compare the trade-offs of X vs Y vs Z for use-case W", "what is the current21 state of the art in ...", "survey the approaches to ...".22- **Getting it wrong is expensive**, so the adversarial review stage (claims fact-checked, structure critiqued) earns23 its cost.2425Do NOT use `research` when a cheaper path answers the question:2627- **One page answers it.** A single [`ai-fetch-web`](../ai-fetch-web/SKILL.md) fetch (or `curl`) is seconds, not28 minutes. Reach for the pipeline only when you would otherwise fan out across a dozen pages by hand.29- **It is a lookup, not a survey.** "What is the latest stable version of X?" or "what does this API return?" is a30 fetch, not a research run.31- **The answer is in the repo or local files.** Read the code, `git log`, or the docs. Pi's32 [`grep-before-read`](../grep-before-read/SKILL.md) is the move, not web research.33- **A scoped subagent suffices.** A single [`explore`-type subagent](../subagent-delegation/SKILL.md) that fetches two34 or three pages and returns a summary is far cheaper than the full pipeline.35- **The question is underspecified.** Garbage in, expensive garbage out. Narrow it first (see below).3637## Workflow38391. **Try the cheap path first.** Can one fetch, one grep, or one scoped subagent answer it? If yes, do that and stop.402. **Sharpen the question before spending.** A vague prompt produces a vague, expensive report. If scope, constraints,41 region, budget, or use-case are missing, ask 2-3 clarifying questions first - the42 [`clarify-with-questionnaire`](../clarify-with-questionnaire/SKILL.md) tool is built for exactly this. Weave the43 answers into the `question`.443. **Right-size the run.** The tool takes optional overrides; tune them to the job instead of accepting defaults45 blindly:46 - `fanoutParallel` - cap simultaneous web-researchers. Set to `1` when fanout points at a single local model that47 cannot handle concurrent requests.48 - `wallClockSec` - hard wall-clock budget for the fanout (e.g. `7200` for a 2h local-model run).49 - `model` / `fanoutModel` / `criticModel` / `planCritModel` - per-stage model overrides; push fanout to a cheaper50 model and keep a stronger one for synthesis when that fits.51 - `reviewMaxIter` - cap on review iterations (default 4).524. **Launch and let it checkpoint.** Only one research run is allowed per session. The planning-critic stage is a53 checkpoint: if it rejects the plan, the run halts so you can edit `plan.json` and rerun.545. **Resume rather than restart** if a run stalls or exhausts its budget: `/research --resume` auto-detects the stage55 from on-disk state, or pin it with `--from plan-crit|fanout|synth|review`.566. **Deliver the report.** The artifacts land under `./research/<slug>/` (`plan.json`, `findings/`, `report.md`,57 `journal.md`). Point the user at `report.md`; summarize the outcome (`report-complete` / `checkpoint` / etc.).5859## Cost discipline6061- The pipeline spawns one subagent per sub-question plus critics. A 10-sub-question plan is 10+ child sessions. Treat62 every run as a deliberate spend, not a default.63- Prefer a tighter `wallClockSec` and lower `fanoutParallel` on local models - an unbounded run can grind for hours.64- If the user just wants "a quick sense of X", that is a fetch or a subagent, not a research run. Say so and offer the65 cheap version first.6667## Common pitfalls6869- **Using `research` as a search box.** It is a report generator. For a single fact, fetch.70- **Launching on a fuzzy question.** Clarify scope first; the review stage cannot fix an ill-posed prompt.71- **Ignoring the checkpoint.** A rejected plan is a signal to fix the decomposition, not to force the run through.72- **Starting a second run mid-session.** The tool rejects concurrent runs - `wait` for or resume the first.7374## Related docs7576- [`deep-research.md`](../../extensions/deep-research.md) - full pipeline reference: stages, tool params, `--resume`,77 artifacts, subagents dispatched.78- [`ai-fetch-web`](../ai-fetch-web/SKILL.md) - the cheap single-fetch alternative to try first.79- [`clarify-with-questionnaire`](../clarify-with-questionnaire/SKILL.md) - narrow an underspecified question before80 spending.81- [`subagent-delegation`](../subagent-delegation/SKILL.md) - a scoped subagent is the mid-weight alternative.