Deep Research
Coordinate deep technical research with intelligent caching for cross-project reuse and team knowledge sharing.
Quick Start
When research is needed:
- Resolve scripts path - Find
plugins/core/skills/deep-research/scripts/(or Glob for**/deep-research/scripts/cache_manager.py) - Check cache first - Run
python3 {scripts_dir}/cache_manager.py check "{topic}" - If cached and valid - Run
cache_manager.py get "{slug}"and return content directly (no agent needed) - If cache miss - Invoke
deep-researcheragent for EXA research, which caches viacache_manager.py put - Report findings - Include cache status and promote suggestion
Cache Architecture
| Tier | Location | Purpose | Shared |
|------|----------|---------|--------|
| 1 | ~/.claude/plugins/research/ | Fast, cross-project | User only |
| 2 | docs/research/ | Curated, version controlled | Team |
Operations
| Operation | Trigger | Fast Path? | Action |
|-----------|---------|------------|--------|
| Research | /research <topic> or natural language | Yes (cache hit) | Check cache → return if valid, else research → cache |
| Promote | /research promote <slug> | Yes | Run promote.py {slug} directly |
| Refresh | /research refresh <slug> | No | Spawn agent → fresh research → cache → update promoted |
| List | /research list | Yes | Run cache_manager.py list (project-scoped by default, --all for everything) |
Project Scoping
Research entries are automatically associated with the current git repository when cached. The list operation filters by current project by default, so each project sees only its relevant research. Use --all to see everything.
- Auto-detection: Project name derived from
git rev-parse --show-toplevelbasename - Multi-project: Entries can belong to multiple projects (associations merge, never replace)
- Backward compatible: Existing entries without project associations appear in
--allbut not in project-scoped views
Scripts
All cache operations use Python scripts in scripts/:
| Script | Purpose |
|--------|---------|
| research_utils.py | Shared utilities (imported by all scripts) |
| cache_manager.py | Cache CRUD: get, put, check, list, delete |
| promote.py | Tier 1 → Tier 2 promotion with team notes |
| index_generator.py | README index generation for both tiers |
Slug Normalization
Convert topics to cache keys:
- "Domain-Driven Design" →
domain-driven-design - "DDD" →
domain-driven-design(via alias) - "React Hooks" →
react-hooks
Output Format
After research, report:
## Research: {Topic}
**Cache:** {Hit | Miss | Expired}
**Source:** {Cached | Fresh research}
**Path:** ~/.claude/plugins/research/entries/{slug}/
[Brief summary of findings]
Run `/research promote {slug}` to add to project docs.
Agent Delegation
For actual research execution (cache miss or refresh only), delegate to deep-researcher agent:
- Has MCP tool access (EXA web search, code context)
- Uses
cache_manager.py putfor cache write operations - Structures research output consistently
Additional Resources
- WORKFLOW.md - Detailed process flows
- EXAMPLES.md - Usage examples
- TROUBLESHOOTING.md - Common issues and solutions