Conduct strategic multi-perspective research using the Asymmetric Research Squad methodology with 8 specialized personas. Deploys parallel research agents covering historical, contrarian, analogical, systems, journalistic, archaeological, futurist, and negative-space perspectives. Pass `--team` (Claude Code only) to deploy the 14 research agents as teammates under a shared `spawn coordinated subagents`/`the todo tracker` with coordinated shutdown; default is standalone parallel sub-agents. Use for comprehensive research on complex topics requiring diverse viewpoints, competitive analysis, or strategic intelligence gathering.
Strategic, multi-perspective research skill using the Asymmetric Research Squad methodology. Deploys 8 specialized persona agents to uncover insights from diverse viewpoints, followed by crucible analysis and emergent insight generation.
Researching: $ARGUMENTS
Parse arguments (flags first, then the research subject):
spawn coordinated subagents/the todo tracker with coordinated shutdown. Default is standalone parallel sub-agents via the Task tool. Cursor and Codex bundles lack team tools — do not pass --team there.research/[sanitized-subject])--team, also prints the team name and 14-teammate roster.If no research subject provided, abort with usage instructions:
Usage: /deep-research [--team] [--output-dir "..."] [--dry-run] <research-subject>
Examples:
/deep-research "AI model deployment strategies"
/deep-research --output-dir docs/research/quantum "quantum computing applications"
/deep-research --dry-run "cryptocurrency market dynamics"
/deep-research --team "AI model deployment strategies"
/deep-research --team --dry-run "cryptocurrency market dynamics"
Extract from $ARGUMENTS:
AGENT_TEAM_MODE=true if present, else false.DRY_RUN=true if present, else false.Validate the research subject:
Compatibility note: When this skill is invoked from a Cursor or Codex bundle, --team must not be used (those bundles ship without team tools).
If --output-dir is provided, use that path.
Otherwise, create a sanitized directory name:
# Sanitize subject: lowercase, replace spaces with hyphens, remove special chars
SANITIZED=$(echo "$RESEARCH_SUBJECT" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-')
OUTPUT_DIR="research/${SANITIZED}"
If --dry-run is present, display:
# Dry Run: Deep Research on [Subject]
## Output Directory
$OUTPUT_DIR/
## Directory Structure
$OUTPUT_DIR/ ├── objective.md ├── persona-findings/ │ ├── historian.md │ ├── contrarian.md │ ├── analogist.md │ ├── systems-thinker.md │ ├── journalist.md │ ├── archaeologist.md │ ├── futurist.md │ └── negative-space.md ├── synthesis/ │ ├── crucible-analysis.md │ └── emergent-insights.md ├── evidence/ │ └── verification-log.md └── report.md
## Research Phases
### Phase 1: Asymmetric Persona Deployment (8 parallel agents)
1. **Historian** - Historical evolution, failed attempts, forgotten alternatives
2. **Contrarian** - Disconfirming evidence, expert critiques, documented failures
3. **Analogist** - Cross-domain parallels, biological/military/economic analogies
4. **Systems Thinker** - Second-order effects, stakeholder mapping, causal chains
5. **Journalist** - Current state, key players, latest developments
6. **Archaeologist** - Past solutions (10-50 years ago), obsolete approaches
7. **Futurist** - Patents, speculative research, 2030+ predictions
8. **Negative Space Explorer** - What's NOT discussed, adoption barriers
### Phase 2: The Crucible - Structured Analysis (2 parallel agents)
1. **ACH Analyst** - Analysis of Competing Hypotheses
2. **Contradiction Mapper** - Cross-persona disagreements
### Phase 3: Emergent Insight Generation (4 parallel agents)
1. **Tension Mapper** - Maximum disagreement points
2. **Pattern Recognizer** - Unexpected historical echoes
3. **Negative Space Analyst** - Unanswered questions
4. **Innovation Agent** - Novel hypotheses from persona combinations
### Phase 4: Strategic Report Synthesis
Final report consolidating all research into actionable intelligence.
## Next Steps
Remove --dry-run flag to execute the research.
If AGENT_TEAM_MODE=true, additionally print the team roster block:
Team name: drpr-<sanitized-subject>
Teammates: 14
Batch 1 (Phase 1 — personas):
- historian subagent_type=research-specialist task=Historical evolution
- contrarian subagent_type=research-specialist task=Disconfirming evidence
- analogist subagent_type=research-specialist task=Cross-domain parallels
- systems-thinker subagent_type=research-specialist task=Second-order effects
- journalist subagent_type=research-specialist task=Current state
- archaeologist subagent_type=research-specialist task=Past solutions
- futurist subagent_type=research-specialist task=Speculative futures
- negative-space-explorer subagent_type=research-specialist task=What's NOT discussed
Batch 2 (Phase 2 — crucible):
- ach-analyst subagent_type=general-purpose task=Analysis of Competing Hypotheses
- contradiction-mapper subagent_type=codebase-research-analyst task=Map persona disagreements
Batch 3 (Phase 3 — strategic):
- tension-mapper subagent_type=codebase-research-analyst task=Maximum disagreement points
- pattern-recognizer subagent_type=general-purpose task=Unexpected historical echoes
- negative-space-analyst subagent_type=codebase-research-analyst task=Unanswered questions
- innovation-agent subagent_type=general-purpose task=Novel hypotheses
Batches: 3 (Batch 1 → Batch 2 → Batch 3)
Dependencies: Batch 2 blocked by Batch 1; Batch 3 blocked by Batch 2
Do not call spawn coordinated subagents, track the task, Agent, send follow-up instructions, or end the coordinated run in dry-run mode.
STOP HERE - do not run prerequisite checks, create directories, write files, or deploy agents.
Only run this step when DRY_RUN=false.
Run the prerequisite check script:
~/.config/opencode/skills/deep-research/scripts/check-prerequisites.sh "$OUTPUT_DIR"
Create the directory structure:
mkdir -p "$OUTPUT_DIR/persona-findings"
mkdir -p "$OUTPUT_DIR/synthesis"
mkdir -p "$OUTPUT_DIR/evidence"
Only run this step when DRY_RUN=false.
Write the research objective document to $OUTPUT_DIR/objective.md:
# Research Objective: [Subject]
## Core Research Questions
[Generate 3-5 key questions to answer based on the subject]
## Success Criteria
- [ ] All 8 personas deployed with distinct search strategies
- [ ] Minimum 8-10 parallel searches per persona executed
- [ ] Contradictions and disagreements captured, not smoothed over
- [ ] Evidence hierarchy applied (primary > secondary > synthetic > speculative)
- [ ] Cross-domain analogies explored
- [ ] Temporal range covered (past, present, future)
## Evidence Standards
- Primary sources preferred over secondary analysis
- Citations required for all claims
- Confidence ratings assigned to findings
- Contradictions explicitly documented
## Perspectives to Consider
- Historical evolution
- Current state and trends
- Future possibilities
- Alternative viewpoints
- What's NOT being discussed
## Potential Biases to Guard Against
[List 2-3 potential biases based on the subject]
--team)If AGENT_TEAM_MODE=false, skip this step entirely.
If AGENT_TEAM_MODE=true, follow the universal lifecycle contract at
~/.config/opencode/shared/references/agent-team-dispatch.md.
Team name sanitization — apply the rules from the shared reference:
[^a-z0-9-] with -.- to a single -.-.untitled.Team name: drpr-<sanitized-subject>.
Create the team (single spawn coordinated subagents call for the whole skill run):
spawn coordinated subagents: team_name="drpr-<sanitized-subject>", description="Deep-research squad for: <research-subject>"
On failure, abort the skill with the spawn coordinated subagents error message. Do NOT silently fall back to sub-agent mode.
Register all 14 tasks up front (per the shared contract's multi-batch guidance — dependencies preserved across batches):
# Batch 1 — Phase 1 personas (flat, no deps)
track the task: subject="historian: Historical evolution of <subject>", description="Historical evolution, failed attempts, forgotten alternatives."
track the task: subject="contrarian: Disconfirming evidence on <subject>", description="Expert critiques, documented failures, disconfirming evidence."
track the task: subject="analogist: Cross-domain parallels for <subject>", description="Biological/military/economic analogies and cross-domain transfers."
track the task: subject="systems-thinker: Second-order effects of <subject>", description="Stakeholder mapping, causal chains, feedback loops."
track the task: subject="journalist: Current state of <subject>", description="Key players, latest developments, present-day dynamics."
track the task: subject="archaeologist: Past solutions for <subject>", description="Obsolete approaches, 10-50 year old attempts, forgotten lineages."
track the task: subject="futurist: Speculative futures for <subject>", description="Patents, speculative research, 2030+ predictions."
track the task: subject="negative-space-explorer: What's NOT discussed about <subject>", description="Adoption barriers, silent assumptions, omissions."
# Batch 2 — Phase 2 crucible (blocked by all Batch 1 tasks)
track the task: subject="ach-analyst: Analysis of Competing Hypotheses", description="Generate 5+ mutually exclusive hypotheses and seek disconfirming evidence."
track the task: subject="contradiction-mapper: Cross-persona disagreements", description="Map contradictions between the 8 persona findings."
update the todo tracker: addBlockedBy=[<historianTaskId>, <contrarianTaskId>, <analogistTaskId>, <systemsThinkerTaskId>, <journalistTaskId>, <archaeologistTaskId>, <futuristTaskId>, <negativeSpaceExplorerTaskId>]
update the todo tracker: addBlockedBy=[<historianTaskId>, <contrarianTaskId>, <analogistTaskId>, <systemsThinkerTaskId>, <journalistTaskId>, <archaeologistTaskId>, <futuristTaskId>, <negativeSpaceExplorerTaskId>]
# Batch 3 — Phase 3 strategic (blocked by all Batch 2 tasks)
track the task: subject="tension-mapper: Maximum disagreement points", description="Identify highest-tension disagreements from crucible output."
update the todo tracker: addBlockedBy=[<achAnalystTaskId>, <contradictionMapperTaskId>]
track the task: subject="pattern-recognizer: Unexpected historical echoes", description="Find surprising pattern matches across persona findings and crucible."
update the todo tracker: addBlockedBy=[<achAnalystTaskId>, <contradictionMapperTaskId>]
track the task: subject="negative-space-analyst: Unanswered questions", description="Document research gaps and what remains unresolved after crucible."
update the todo tracker: addBlockedBy=[<achAnalystTaskId>, <contradictionMapperTaskId>]
track the task: subject="innovation-agent: Novel hypotheses from combinations", description="Synthesize novel hypotheses by recombining persona viewpoints."
update the todo tracker: addBlockedBy=[<achAnalystTaskId>, <contradictionMapperTaskId>]
Capture the concrete IDs returned by the preceding track the task calls (historianTaskId, achAnalystTaskId, etc.) and substitute them directly into each addBlockedBy list before running update the todo tracker.
The team persists across all three phases; teammates are spawned per phase (Steps 7, 11, 13) and shut down after each phase completes (Steps 8.5, 12.5, 13.5). end the coordinated run runs inside Step 13.5 — after the final shutdown — before Phase 4 synthesis.
If track the task fails for any task, call end the coordinated run and abort.
Read the persona prompt templates:
cat ~/.config/opencode/skills/deep-research/templates/persona-prompts.md
| Persona | Subagent Type | Teammate name | Output File | Search Depth |
|---|---|---|---|---|
| Historian | research-specialist | historian | persona-findings/historian.md | 8-10 queries |
| Contrarian | research-specialist | contrarian | persona-findings/contrarian.md | 8-10 queries |
| Analogist | research-specialist | analogist | persona-findings/analogist.md | 8-10 queries |
| Systems Thinker | research-specialist | systems-thinker | persona-findings/systems-thinker.md | 8-10 queries |
| Journalist | research-specialist | journalist | persona-findings/journalist.md | 8-10 queries |
| Archaeologist | research-specialist | archaeologist | persona-findings/archaeologist.md | 8-10 queries |
| Futurist | research-specialist | futurist | persona-findings/futurist.md | 8-10 queries |
| Negative Space Explorer | research-specialist | negative-space-explorer | persona-findings/negative-space.md | 8-10 queries |
Each agent receives:
objective.md file contentUse the prompts from persona-prompts.md with variables substituted:
{{RESEARCH_SUBJECT}} - The research topic{{OUTPUT_DIR}} - The output directory pathAGENT_TEAM_MODE=false, default)CRITICAL: Deploy all 8 persona agents in a SINGLE message with MULTIPLE Agent tool calls. Omit team_name= for standalone dispatch (keep per-agent name= where relevant).
AGENT_TEAM_MODE=true)MANDATORY — AGENT TEAMS REQUIRED
In Path B you MUST follow the agent-team lifecycle at
~/.config/opencode/shared/references/agent-team-dispatch.md. Do NOT mix standaloneTaskcalls with team dispatch.
All 8 track the task entries were registered up front in Step 5.5 — do not re-create them here.
Spawn all 8 teammates in ONE message with EIGHT Agent tool calls. Every call MUST include:
team_name = "drpr-<sanitized-subject>"name = "<teammate-name>" (from the table above — must match the track the task subject prefix)subagent_type = "research-specialist"persona-prompts.mdAfter spawning, use the todo tracker to confirm all 8 Batch 1 tasks are completed before proceeding to Step 8. Do not rely on agent return values alone — check the shared task state.
Update todos to track persona deployment:
- [ ] Historian research completed
- [ ] Contrarian research completed
- [ ] Analogist research completed
- [ ] Systems Thinker research completed
- [ ] Journalist research completed
- [ ] Archaeologist research completed
- [ ] Futurist research completed
- [ ] Negative Space Explorer research completed
--team)If AGENT_TEAM_MODE=false, skip this step.
Otherwise, per the shared lifecycle (Section 2 Step 5), send shutdown requests to all 8 persona teammates before advancing to Phase 2:
send follow-up instructions(to="historian", message={type:"shutdown_request"})
send follow-up instructions(to="contrarian", message={type:"shutdown_request"})
send follow-up instructions(to="analogist", message={type:"shutdown_request"})
send follow-up instructions(to="systems-thinker", message={type:"shutdown_request"})
send follow-up instructions(to="journalist", message={type:"shutdown_request"})
send follow-up instructions(to="archaeologist", message={type:"shutdown_request"})
send follow-up instructions(to="futurist", message={type:"shutdown_request"})
send follow-up instructions(to="negative-space-explorer", message={type:"shutdown_request"})
Do NOT end the coordinated run — the team persists for Phases 2 and 3.
After all 8 persona agents complete, read their outputs:
ls -la "$OUTPUT_DIR/persona-findings/"
cat "$OUTPUT_DIR/persona-findings/historian.md"
cat "$OUTPUT_DIR/persona-findings/contrarian.md"
cat "$OUTPUT_DIR/persona-findings/analogist.md"
cat "$OUTPUT_DIR/persona-findings/systems-thinker.md"
cat "$OUTPUT_DIR/persona-findings/journalist.md"
cat "$OUTPUT_DIR/persona-findings/archaeologist.md"
cat "$OUTPUT_DIR/persona-findings/futurist.md"
cat "$OUTPUT_DIR/persona-findings/negative-space.md"
Read the analysis agent templates:
cat ~/.config/opencode/skills/deep-research/templates/analysis-prompts.md
| Agent | Subagent Type | Teammate name | Output File | Task |
|---|---|---|---|---|
| ACH Analyst | general-purpose | ach-analyst | synthesis/crucible-analysis.md | Analysis of Competing Hypotheses |
| Contradiction Mapper | codebase-research-analyst | contradiction-mapper | synthesis/contradiction-mapping.md | Map disagreements between personas |
Both agents receive:
AGENT_TEAM_MODE=false, default)CRITICAL: Deploy both analysis agents in a SINGLE message with MULTIPLE Agent tool calls. Omit team_name= for standalone dispatch (keep per-agent name= where relevant).
AGENT_TEAM_MODE=true)Both track the task entries were registered up front in Step 5.5 (blocked by all Batch 1 tasks — they become eligible once Phase 1 completes).
Spawn both teammates in ONE message with TWO Agent tool calls. Every call MUST include:
team_name = "drpr-<sanitized-subject>"name = "ach-analyst" or "contradiction-mapper"subagent_type from the table aboveanalysis-prompts.mdAfter spawning, use the todo tracker to confirm both Batch 2 tasks are completed before proceeding to Step 12.
After crucible analysis completes, verify critical findings:
$OUTPUT_DIR/evidence/verification-log.md:# Evidence Verification Log
## High-Confidence Findings
### [Finding 1]
- **Claimed by**: Historian, Journalist, Systems Thinker
- **Primary sources**: [URLs]
- **Verification status**: Confirmed
- **Confidence**: High
### [Finding 2]
- **Claimed by**: Contrarian
- **Primary sources**: [URLs]
- **Verification status**: Partial
- **Confidence**: Medium
- **Notes**: [Explanation]
## Contradictions Requiring Resolution
### [Contradiction 1]
- **Persona A says**: [Claim]
- **Persona B says**: [Counter-claim]
- **Evidence for A**: [Sources]
- **Evidence for B**: [Sources]
- **Resolution**: [Assessment]
--team)If AGENT_TEAM_MODE=false, skip this step.
Otherwise, send shutdown requests to both crucible teammates before advancing to Phase 3:
send follow-up instructions(to="ach-analyst", message={type:"shutdown_request"})
send follow-up instructions(to="contradiction-mapper", message={type:"shutdown_request"})
Do NOT end the coordinated run — the team persists for Phase 3.
| Agent | Subagent Type | Teammate name | Output File | Focus |
|---|---|---|---|---|
| Tension Mapper | codebase-research-analyst | tension-mapper | synthesis/tension-mapping.md | Maximum disagreement points |
| Pattern Recognizer | general-purpose | pattern-recognizer | synthesis/pattern-recognition.md | Unexpected historical echoes |
| Negative Space Analyst | codebase-research-analyst | negative-space-analyst | synthesis/negative-space.md | Unanswered questions |
| Innovation Agent | general-purpose | innovation-agent | synthesis/innovation.md | Novel hypotheses from combinations |
Note on naming:
negative-space-analystis deliberately distinct from Phase 1'snegative-space-explorerto keep teammatename=values unique across the full team lifecycle.
All agents receive:
AGENT_TEAM_MODE=false, default)CRITICAL: Deploy all 4 strategic analysis agents in a SINGLE message with MULTIPLE Agent tool calls. Omit team_name= for standalone dispatch (keep per-agent name= where relevant).
AGENT_TEAM_MODE=true)All 4 track the task entries were registered up front in Step 5.5 (blocked by all Batch 2 tasks).
Spawn all 4 teammates in ONE message with FOUR Agent tool calls. Every call MUST include:
team_name = "drpr-<sanitized-subject>"name = "<teammate-name>" (from the table above)subagent_typeAfter spawning, use the todo tracker to confirm all 4 Batch 3 tasks are completed before proceeding to Step 13.5.
--team)If AGENT_TEAM_MODE=false, skip this step.
Otherwise, send shutdown requests to all 4 strategic teammates, then tear down the team:
send follow-up instructions(to="tension-mapper", message={type:"shutdown_request"})
send follow-up instructions(to="pattern-recognizer", message={type:"shutdown_request"})
send follow-up instructions(to="negative-space-analyst", message={type:"shutdown_request"})
send follow-up instructions(to="innovation-agent", message={type:"shutdown_request"})
end the coordinated run
ALWAYS end the coordinated run before Phase 4 — Phase 4 is orchestrator-only synthesis work and the team is no longer needed. Leaving the team live pollutes the workspace across skill invocations.
Failure policy for the team lifecycle (applies to Steps 7, 11, 13):
persona-findings/<name>.md) and continue. Downstream phases will adapt.shutdown_request to any still-active teammates, call end the coordinated run, and report to the user. Suggest retrying without --team (standalone sub-agent fallback).send follow-up instructions(shutdown) to every active teammate, then end the coordinated run. Never exit the skill with the team still live.Read all outputs to prepare for synthesis:
Persona Findings (8 files) Crucible Analysis (2 files) Strategic Analysis (4 files) Evidence Verification (1 file)
Read the report structure template:
cat ~/.config/opencode/skills/deep-research/templates/report-structure.md
Create $OUTPUT_DIR/report.md following the template structure.
Synthesis Principles:
Run the validation script:
~/.config/opencode/skills/deep-research/scripts/validate-research.sh "$OUTPUT_DIR"
Fix any issues reported:
Provide comprehensive completion summary:
# Deep Research Complete: [Subject]
## Research Overview
- **Subject**: [Research subject]
- **Output Directory**: $OUTPUT_DIR/
- **Total Files Created**: [count]
## Research Execution
### Phase 1: Persona Deployment
- Historian: [search count] queries, [findings count] findings
- Contrarian: [search count] queries, [findings count] findings
- Analogist: [search count] queries, [findings count] findings
- Systems Thinker: [search count] queries, [findings count] findings
- Journalist: [search count] queries, [findings count] findings
- Archaeologist: [search count] queries, [findings count] findings
- Futurist: [search count] queries, [findings count] findings
- Negative Space Explorer: [search count] queries, [findings count] findings
### Phase 2: Crucible Analysis
- ACH Analysis: [hypotheses count] hypotheses analyzed
- Contradiction Mapping: [contradictions count] contradictions identified
### Phase 3: Emergent Insights
- Tension Mapping: [tensions count] tensions identified
- Pattern Recognition: [patterns count] patterns discovered
- Negative Space: [gaps count] research gaps identified
- Innovation: [insights count] novel hypotheses generated
### Phase 4: Report Synthesis
- Final report: $OUTPUT_DIR/report.md
## Key Discoveries
[2-3 most surprising or valuable findings]
## Critical Contradictions
[Top 1-2 unresolved disagreements between personas]
## Evidence Quality
- **High-confidence findings**: [count]
- **Medium-confidence findings**: [count]
- **Speculative findings**: [count]
- **Primary sources cited**: [count]
## Research Gaps
[Top 3-5 areas requiring further investigation]
## Next Steps
1. **Review the report**: Read $OUTPUT_DIR/report.md
2. **Examine specific personas**: Dive into $OUTPUT_DIR/persona-findings/ for details
3. **Review synthesis**: Check $OUTPUT_DIR/synthesis/ for analysis
4. **Verify evidence**: See $OUTPUT_DIR/evidence/verification-log.md
Phase 1 - Persona Deployment:
Phase 2 - Crucible Analysis:
Phase 3 - Strategic Analysis:
Phase 4 - Report Synthesis:
Each persona finding should:
When deploying personas, encourage diverse search strategies using SCAMPER:
Prioritize sources by quality:
When personas disagree:
Ensure research spans:
Cause: Personas not sufficiently differentiated Solution: Re-read persona mandates, ensure distinct search strategies, add SCAMPER variation
Cause: Insufficient primary source research Solution: Use WebFetch to access primary sources, prioritize authoritative documentation
Cause: Smooth-over tendency, lack of critical analysis Solution: Explicitly instruct personas to find disconfirming evidence, deploy Contrarian first
Cause: Not enough search queries per persona Solution: Ensure minimum 8-10 diverse queries per persona, use SCAMPER for variation
Cause: Missing synthesis and analysis Solution: Read all artifacts before writing report, focus on insights not summaries, highlight contradictions
Cause: Insufficient negative space analysis Solution: Deploy Negative Space Explorer and Negative Space Agent, explicitly look for what's NOT discussed
Task calls (standalone sub-agents). With --team, use multiple Agent calls with team_name= + name= under a shared spawn coordinated subagents/the todo tracker (Claude Code only).