Multi-directional deep research with sub-agents, scoring, source verification and cited synthesis. Use for comprehensive research, deep analysis, or evidence-backed answers. Produces an executive summary plus a markdown report.
68
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Multi-stage research: plan → sequential search (with per-direction review) → escalate if needed → synthesize.
Architecture:
Key invariants:
[N] citation[unverified — single source]Before planning, detect the available search/fetch method. Try each in order, stop at first that works.
| Priority | Method | Detection |
|---|---|---|
| 1 | Built-in search tool | Check tool list for websearch (OpenCode), WebSearch (Claude Code), or IDE-native search equivalent — search must return URLs from a query, not just fetch a known URL |
| 2 | playwright-cli (headless) | Run playwright-cli --version via shell; success = available |
| 3 | Playwright MCP | Check tool list for browser_navigate + browser_snapshot tools |
| 4 | Other MCP search/fetch tools | Check tool list for any MCP tool that accepts a query string and returns results |
Output of this phase — printed in chat BEFORE the plan (one line: Search method: <name> — <detection evidence>, e.g. built-in — WebSearch present in the tool list or playwright-cli — playwright-cli --version → 1.4x), and two variables passed to every worker. The detection is an observable step, not a private conclusion: a run that names the method only inside worker prompts has skipped this phase (observed 2026-09-06, deep-research-plan).
search_method: short name, e.g. built-in, playwright-cli, playwright-mcp, mcp_bravesearch_instructions: a brief how-to for that method (see examples below)Instruction examples by method:
# built-in
search_method: built-in
search_instructions: >
Use the built-in search tool (websearch in OpenCode, WebSearch in Claude Code) to run each query
and get result URLs. Then use the built-in fetch tool (webfetch / WebFetch) to retrieve full
page content for each accepted URL.
Run all queries as parallel tool calls in one message where the IDE supports it.
# playwright-cli
search_method: playwright-cli
search_instructions: >
Use shell to navigate and extract content:
playwright-cli open
playwright-cli goto "https://www.google.com/search?q=<encoded_query>"
playwright-cli snapshot
Read the snapshot text to extract result URLs, then for each URL:
playwright-cli goto "<url>"
playwright-cli snapshot
Run queries sequentially (one browser session, sequential navigation).
# playwright-mcp
search_method: playwright-mcp
search_instructions: >
Use browser_navigate(url) to open a page and browser_snapshot() to extract its content.
For search, navigate to a search engine with the query in the URL:
browser_navigate("https://www.google.com/search?q=<encoded_query>")
browser_snapshot()
Extract result URLs from the snapshot, then for each URL:
browser_navigate("<url>")
browser_snapshot()
Run queries sequentially.
# other MCP (fill in actual tool name)
search_method: mcp_<toolname>
search_instructions: >
Use mcp_<toolname>_search(query) to search and mcp_<toolname>_fetch(url) to fetch.
Run all queries as parallel tool calls in one message if the tool supports it.If no method is available: stop, report to user, do not proceed.
Decompose the research topic into 3–6 non-overlapping directions.
For each direction, define:
direction: one-sentence description of what to investigatesearch_queries: 3–5 query variations (broad + narrow + negation/criticism)acceptance_criteria: what makes a source acceptable (see deep-research-worker.md for authority scores and recency defaults)output_file: path like <tmp_dir>/<slug>.md (where <tmp_dir> is created in this phase)Create a temporary directory using the system temp facility:
mktemp -d "${TMPDIR:-/tmp}/deep-research-XXXXXX"Save the returned path as tmp_dir — pass it to all workers and use in Phase 4–5.
Output the plan as a markdown list before proceeding — the COMPLETE plan: every direction with its full 3–5 query list, its acceptance criteria (source types + recency) and its output file, in the shape of the example below. Printing the plan is a precondition on spawning the first worker: a chat plan that lists only the direction names, with the queries appearing later inside worker prompts, is not the plan (observed 2026-09-06, deep-research-plan: three direction names printed, 15 queries visible only to the workers). Do not ask for approval — proceed automatically.
Example direction definition:
Direction: Current adoption rates and market data
Queries:
- "deep learning adoption enterprise 2024 statistics"
- "AI deployment survey 2024 2025"
- "machine learning production usage report"
Acceptance: data from surveys, analyst reports, or official sources; published 2022+
Output: <tmp_dir>/adoption-rates.mdLaunch sub-agents one at a time. After each completes, the main agent reviews the output and scores it before launching the next.
Invoke the deep-research-worker subagent for each direction. Pass as task prompt:
direction: {direction}
search_queries:
{search_queries}
acceptance_criteria: {acceptance_criteria}
output_file: {output_file}
search_method: {search_method}
search_instructions: |
{search_instructions}After each worker completes, the main agent reads {output_file} and evaluates:
| Check | Pass condition |
|---|---|
| Accepted sources | ≥ 2 sources with authority score ≥ 3 |
| Coverage | At least 1 fact per search query angle |
| Confidence floor | ≥ 1 fact with confidence = high or medium |
| No fabrication | All facts have traceable source URL |
Workers are NOT launched simultaneously. Sequential execution allows the main agent to adjust remaining directions based on what earlier workers found.
Triggered inline during Phase 2 when the main agent's post-worker review fails any check.
Direction quality score — computed by main agent after reading each worker's output:
| Metric | Weight | How to score |
|---|---|---|
| Accepted source count | 30% | 0 sources=0, 1=5, 2=8, 3+=10 |
| Avg authority score of accepted sources | 30% | avg of per-source scores (1–5), scaled ×2 |
| Confidence distribution | 20% | high=10, medium=6, low=2 (use best fact's confidence) |
| Coverage of search angles | 20% | (angles with ≥1 fact) / (total angles) × 10 |
Weighted total: sum of (metric score × weight). Max = 10.
Escalation threshold: direction score < 6.0
Escalation procedure:
[insufficient data — score: X.X] in final report; list all queries attemptedRead all <tmp_dir>/*.md files.
Produce the final report using assets/report_template.md.
Synthesis rules:
**[FACT]** — directly from source with citation [N]**[SYNTHESIS]** — agent's analysis or inference (no citation)confidence: high[unverified — single source]Citation format: [N] inline, full entry in Bibliography section.
research_<topic-slug>_<YYYYMMDD>.md in the working directory.## Findings, ## Gaps, ## Bibliography sections[N] citation count in body[direction name], [url])<tmp_dir>/<tmp_dir>/ directory — only after step 2 passes.Executive summary format:
Research complete: [topic]
Key findings: [2–3 sentences]
Confidence: [high/medium/low] — based on [N] sources across [M] directions
Gaps: [what was not found, if any]
Full report: [file path]| Situation | Action |
|---|---|
| Sub-agent finds 0 accepted sources | Retry with 3 alternative queries; if still 0 → mark gap |
| Sub-agent fails/crashes | Note in report; continue with remaining directions |
| Contradictory sources on key fact | Report both sides; do NOT pick one silently |
| Topic too broad to decompose | Split into sub-topics; cap at 6 directions total; workers MUST NOT spawn sub-workers |
assets/report_template.mdkorchasa/flowai-plugins
240d92b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.