Install
$ agentstack add skill-ramit-mitra-deep-research-skill-deep-research-skill ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Deep Research
Use this skill to produce a deep, source-backed, multi-wave research report on any topic. The skill mimics how a careful human researcher works — decompose, search, read, cross-check, refine plan, synthesize — but compressed into a few minutes via parallel sub-agents and disciplined search.
Operating objective
Produce a comprehensive, structured, citation-dense research report that:
- triangulates material claims across at least 2 independent sources
- surfaces dissent and gaps honestly
- favors correctness and discipline over fluency and volume
- is returned inline to the user as a single Markdown response
Non-negotiable rules
- Output is returned inline in the response. Do NOT save the report as a file unless the user explicitly asks. Printing the report inline IS the skill's terminal action.
- Do not fabricate sources, URLs, quotes, statistics, or dates. If a claim cannot be sourced, mark it
INSUFFICIENT EVIDENCEand move on. - Every material claim must cite a source via Markdown footnote
[^N]. Casual framing sentences (e.g., "This section covers X") do not need a citation. - Material claims must be triangulated across at least 2 independent sources. A claim with only 1 source must be marked
[single-source]inline. A claim with 0 sources must be dropped or markedunverified. - Use the source-tier ladder (below). Higher-tier sources beat lower-tier sources on conflict; flag the conflict in the report.
- Use parallel sub-agents for research. The main agent is the controller — it must NOT do bulk page-fetching itself. Single-agent linear research is a skill violation.
- Refuse research on topics that primarily aid weapons synthesis, child sexual abuse material, malware development, doxxing, or other clearly harmful uses. State the refusal in one short paragraph and stop.
- Stop searching when convergence is reached, NOT at a fixed iteration count. Search discipline matters more than search volume.
- Cite sources by URL. Do not cite "general web knowledge" or unnamed authorities.
- Separate verified facts from interpretation. Interpretive language ("likely", "appears to", "suggests") must be qualified.
- Use only free, openly accessible web sources. Do not gate the report behind paid APIs or auth-walled content.
Trigger behavior
When invoked:
- If args contain a topic string (free text, URL, question), bind it as
topicand proceed. - If args are empty, ask one short question — "What do you want to research?" — wait for the reply, and bind it as
topic.
Then infer scope, audience, and recency from the topic and announce the inferred framing in one line before kicking off research:
> Treating this as a [broad survey | narrow drill-down] on , audience , recency . Starting research — interrupt to adjust.
If the topic is too ambiguous to infer framing confidently (e.g., a bare URL with no stated angle, a single noun, no clear research question), ask one targeted clarifier covering the single most-decisive missing piece — usually the angle or question. Maximum one such clarifier.
If the topic falls into a refusal category (rule 7), state the refusal and stop.
Static fallback for the optional fields, used only if inference is uncertain and clarification was skipped: scope = broad survey, audience = general informed reader, recency = all-time.
Input contract
topic(required, free text) — accepted inline via skill args. If args are empty, the skill asks once to elicit it.scope,audience,recency— optional. Inferred by the controller from the topic and announced in one line before research begins. Static fallback if inference is uncertain: scope =broad survey, audience =general informed reader, recency =all-time.
No other inputs.
Source-tier ladder
Higher-tier sources are preferred. Use lower tiers only when higher tiers don't cover a sub-goal.
- Primary — official documentation, regulatory filings, source code, RFCs, government data, standards bodies (ISO / IEEE / W3C / IETF), patents, court records
- Peer-reviewed — arXiv, journal articles, conference papers
- Reputable news — Financial Times, Reuters, NYT, WSJ, Bloomberg, The Economist, Associated Press, BBC
- Industry — analyst reports, vendor whitepapers, conference talks, technical blogs from major engineering organizations
- Expert blogs — known-practitioner posts, substacks, established newsletters
- Community — forums, GitHub issues, HackerNews threads, Reddit, StackExchange (lowest trust; useful for sentiment and edge-case reports)
When sources conflict, the higher tier wins. Conflicts are surfaced in the report's Counter-evidence section.
Research workflow
Research is a phased agentic loop. Each phase gates the next. Do not skip ahead.
Phase 0 — Disambiguate and frame
If topic is bound from args, infer scope, audience, and recency from it and announce the framing in one line, then proceed.
If topic is empty, ask "What do you want to research?", wait for the reply, bind it as topic, then infer framing.
If the topic is too ambiguous to infer framing confidently, ask one targeted clarifier on the single most-decisive missing piece. Maximum one such clarifier.
If the topic is in a refusal category, state the refusal and stop.
Phase 1 — Plan and decompose
Build a research plan in the controller's reasoning. The plan must:
- decompose the topic into 4–8 sub-goals (concrete sub-questions, not keywords)
- assign a source-tier hint per sub-goal
- list 2–3 query variants per sub-goal for fan-out
The plan exists for controller use. Do not print it to the user unless asked.
Phase 2 — Wave research (parallel sub-agents)
Dispatch up to 5 sub-agents in parallel per wave, one per open sub-goal. Use the Agent tool:
Explorefor fast breadth scans and lookup-style sub-goals (entity resolution, "where is X documented", "list of Y")general-purposefor deep multi-step sub-goals requiring reasoning across multiple pages
All sub-agents within a wave must be dispatched in a single message (parallel calls), not sequentially.
Each sub-agent receives the Sub-agent contract (below).
After all sub-agents return, proceed to Phase 3.
Phase 3 — Re-plan and convergence check
After each wave, the controller:
- Aggregates returned claims with their source-tier and confidence.
- Cross-references claims across sub-agents — flags conflicts and corroborations.
- Counts novel claims added by this wave (claims not present in previous waves).
- Identifies remaining gaps — sub-goals that returned thin, conflicting, or single-source evidence.
- Updates the plan: drops satisfied sub-goals, adds new sub-goals discovered from evidence ("lead" sub-goals), keeps unresolved sub-goals.
- Runs the convergence check.
Convergence rule (stop when BOTH conditions are true):
- at least 10 distinct sources have been read across all waves
- the last 2 consecutive waves each added fewer than 15% novel claims relative to the running claim total
If convergence is not reached, dispatch the next wave (Phase 2 again) with the updated plan. There is no upper cap on wave count; convergence governs termination.
Phase 4 — Synthesize report
Generate the inline report following the Output format below. Sources are footnoted at the bottom, not summarized.
After printing the report, the skill is done. Do not offer follow-ups in the same message; the user can ask.
Sub-agent contract
Each dispatched sub-agent receives a self-contained prompt with:
- The single sub-goal as a one-sentence research question
- The source-tier hint for that sub-goal
- 2–3 query variants for fan-out
- The recency cutoff
- The output schema below
The sub-agent must:
- Run all 2–3 query variants (web search + page fetch)
- Apply span-level filtering — pull only relevant snippets from each page, not the whole page (use the fetch tool's prompt argument to extract narrowly)
- Cross-check claims across the sources it reads
- Return a JSON-shaped block in this schema:
{
"sub_goal": "",
"claims": [
{
"claim": "",
"sources": [
{"url": "", "tier": 1, "title": ""}
],
"confidence": "high"
}
],
"gaps": [""],
"leads": [""]
}
confidence is one of high, medium, low. tier is an integer 1–6 from the source ladder.
Search discipline rules
- Every search query must close a named gap. No exploratory searches without a stated hypothesis.
- If two query variants return the same top results, do not run a third variant.
- Skip lower-tier sources for a claim already covered by a higher-tier source.
- Stop searching a sub-goal when its claims are triangulated and its gaps are closed.
- Marginal-utility test: if the next search is unlikely to add a novel claim, do not run it.
Triangulation and citation rules
- Material claim = a fact, statistic, date, quote, or causal assertion that affects the report's conclusions.
- Material claims require at least 2 independent sources. Independence means different organizations / publishers, not different URLs from the same publisher.
- Tier diversity is preferred — a primary + reputable-news pair beats two community sources.
- A claim cited by exactly 1 source is marked
[single-source]immediately after its footnote anchor. - A claim cited by sources that disagree is split into two claims, each with its own citation, and the disagreement is recorded in the Counter-evidence section.
- Inline citations use Markdown footnote syntax:
claim text.[^3]. The footnote definitions live in the Sources section at the bottom.
Output format
Return the report inline as a single Markdown response with these seven fixed sections, in this order:
# Deep Research:
## TL;DR
- 3–5 bullets covering the headline findings.
## Scope and framing
- Topic:
- Scope:
- Audience:
- Recency cutoff:
- Sub-goals investigated:
## Key findings
1. First key finding with citations.[^1][^2]
2. Second key finding.[^3]
## Evidence
### Sub-goal 1:
- Supporting claims with citations and brief context.
### Sub-goal 2:
- ...
## Counter-evidence and dissent
- Conflicting claims, contrarian sources, and minority views with citations.
- If none found: "No material dissent found in surveyed sources."
## Gaps and unknowns
- Questions the research could not resolve.
- Each gap states the reason (no source, blocked content, conflicting low-confidence sources, etc.).
## Sources
[^1]: [Title of source 1](https://example.com/1) — Tier 1
[^2]: [Title of source 2](https://example.com/2) — Tier 3
[^3]: [Title of source 3](https://example.com/3) — Tier 2 [single-source]
If the topic produced zero credible sources after at least 2 waves, the report skeleton is still produced. Each section contains INSUFFICIENT EVIDENCE and a one-line note on why (e.g., "topic too obscure for open-web sources", "topic is post-cutoff and not yet indexed").
Refusal policy
Refuse and stop on topics that primarily aid:
- weapons synthesis (chemical, biological, radiological, nuclear, or improvised explosives)
- child sexual abuse material
- malware development, exploit weaponization, or evasion of security controls for unauthorized targets
- doxxing, stalking, or targeted harassment of named individuals
Provide a one-paragraph refusal stating the category. Do not produce a partial report. Do not negotiate scope.
Authorized security testing, defensive research, CTF challenges, academic policy analysis, and dual-use security topics with clear defensive framing are not refused — proceed with the standard workflow.
Behavior rubric
When in doubt during the loop, apply this priority order:
- Correct > fluent. A short, sourced, qualified claim beats a long, smooth, ungrounded paragraph.
- Triangulated > confident-single. Two corroborating sources beat one authoritative-sounding source.
- Disciplined search > more search. Stopping at convergence beats running more waves for show.
- Honest gap > fabricated detail.
INSUFFICIENT EVIDENCEbeats invented numbers, dates, or URLs. - Higher tier > lower tier. Primary and peer-reviewed beat blogs and forums on conflict.
Skill version notes
- v1.0 — initial release. Inline output only. Subagent-driven, convergence-stopped, triangulated, footnoted citations. General-purpose domain. Free-web-only sourcing.
- v1.1 — accept
topicinline via args; controller infersscope/audience/recencyfrom topic and announces framing in one line; single targeted clarifier as fallback for empty or ambiguous topics.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ramit-mitra
- Source: ramit-mitra/deep-research-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.