Research
Operating principles (override YAGNI/KISS/DRY for this skill)
Research is a deliverable, not a code change. The general "ship the smallest thing" rules do not apply here. For this skill:
- Be deep, not shallow. Surface findings are useless - dig until you understand why, not just what.
- Evaluate multiple options. Never recommend one approach without comparing at least 2-3 viable alternatives on the same criteria. A single-option report is a failure.
- Brutal honesty. Call out tradeoffs, deprecation, weak maintainership, security holes, vendor lock-in, hidden costs. No marketing language. No hedging.
- Straight to the demand. The user asked a specific question - answer that question completely before adding context. No filler, no padding, no recap of what they already know.
- Cover every angle the user implied. If they ask "what's the best message queue", they implicitly want: throughput, durability, ops burden, language support, cost, lock-in. Address all of them.
- No premature simplification. Long is fine if every section earns its place. Trim filler, never trim depth.
Modes
| Mode |
When |
Queries |
Report scope |
| default |
Standard technical research |
up to 5 search calls |
Full template below |
--deep |
High-stakes decisions, multi-component architectures, security-critical choices |
up to 12 search calls |
Expanded comparison matrix, edge-case analysis, migration paths, failure modes, post-mortem references |
Detect --deep from the user's invocation (argument or in-prompt mention like "do a deep dive"). Announce mode at the start.
Phase 1 - Scope
Before searching, write down:
- The exact question being answered (1 sentence)
- The decision the user is trying to make
- Evaluation criteria - list them explicitly. For tech selection at minimum: performance, security, maturity/maintainership, ops burden, ecosystem, cost, lock-in
- Recency bar (last 12 months unless historical context is needed)
- The 2-3+ candidate options to compare (if the user named one, find competitors)
If the user gave only one option to research, expand to alternatives anyway - saying "X is good" without "vs Y, Z" is a single-option failure.
Phase 2 - Gather
Search
Use the WebSearch tool. Run multiple queries in parallel.
Query craft:
- Each option × each criterion is one query (e.g.
"NATS vs Kafka throughput benchmark 2026", "BullMQ production failure modes")
- Include current year,
"vs", "benchmark", "production", "CVE", "deprecated", "migration from"
- Prioritize: official docs, GitHub repos (issues + release notes), engineering blogs from companies actually running it, conference talks, post-mortems
- Skip: SEO listicles, vendor comparison pages, content-farm tutorials
Query budget:
- Default mode: 5 calls max
--deep mode: 12 calls max
- User may request fewer - respect it
- Plan all queries before firing - don't iterate one-at-a-time
For GitHub repos found: fetch READMEs, recent release notes, open issue counts, last-commit dates directly. Maintainer health is part of the evaluation.
Validation
- Cross-reference every non-trivial claim across ≥2 independent sources
- Check publication dates - discard anything >18 months old unless the topic is stable (RFCs, standards) or you flag it as historical
- Note where consensus exists and where the community is split - both are signal
Phase 3 - Synthesize
Build the comparison before writing the report:
- Matrix: rows = options, columns = criteria. Fill every cell. "Unknown" is a valid entry but flag what would close the gap.
- Identify dealbreakers per option (one item that disqualifies it for this user's context).
- Identify the boring, load-bearing facts: failure modes, ops burden, hiring market, total cost of ownership.
- Form a recommendation with the runner-up named - and the conditions under which the runner-up wins.
In --deep mode, additionally produce:
- Migration cost / lock-in analysis per option
- Failure-mode catalog with mitigation per option
- Performance characteristics under realistic load (not vendor-published numbers)
- Operational war stories from production users
Phase 4 - Report
Where to save
Write to the injected Reports: path. Default filename: research-{topic-slug}-{YYYYMMDD}.md. If the user provided an output path, use that instead.
Template (default mode)
# Research: {Topic}
_Date: {YYYY-MM-DD} · Mode: default · Queries: {n}_
## TL;DR
- **Recommendation:** {Option X}, because {one sentence}.
- **Runner-up:** {Option Y} - wins when {condition}.
- **Avoid:** {Option Z} - {dealbreaker}.
## The Question
What the user asked, restated precisely. The decision being made.
## Evaluation Criteria
Bulleted list. Why each matters for this decision.
## Options Considered
- {Option A} - {one-line summary}
- {Option B} - {one-line summary}
- {Option C} - {one-line summary}
## Comparison Matrix
| Criterion | Option A | Option B | Option C |
|---|---|---|---|
| Performance | … | … | … |
| Maturity | … | … | … |
| Ops burden | … | … | … |
| Ecosystem | … | … | … |
| Cost | … | … | … |
| Lock-in | … | … | … |
| {others} | … | … | … |
## Per-Option Deep Dive
### {Option A}
- **Strengths:** …
- **Weaknesses:** …
- **Dealbreakers:** …
- **Real-world users:** …
- **Recent CVEs / advisories:** …
(repeat for B, C)
## Recommendation
The full case for the recommended option, including conditions under which it loses.
## Implementation Notes
- Quick start
- Config gotchas
- Common pitfalls
## References
Official docs · GitHub repos · production case studies · benchmarks. Every reference is a link.
## Open Questions
What couldn't be answered with public information. What additional data would change the recommendation.
Template additions for --deep mode
Add these sections after Per-Option Deep Dive:
## Failure Modes
| Option | Mode | Symptom | Mitigation | Recovery cost |
|---|---|---|---|---|
| … | … | … | … | … |
## Migration Paths
- From {commonly-used predecessor} → Option A: cost, breaking changes, tooling
- Same for B, C
- Reverse migration cost (lock-in proxy)
## Operational War Stories
Linked post-mortems and engineering blog posts. Per option: one paragraph each, what broke and how it was fixed.
## Performance Under Realistic Load
Independent benchmarks only - not vendor numbers. Note hardware, workload shape, version. Flag where data is missing.
## Decision Reversibility
How much pain to switch off Option X 12 months in. This is the lock-in cost.
Quality bar
- Multi-option - single-option reports are a failure
- Cited - every claim links to its source
- Current - last 12 months unless flagged historical
- Brutal - name the weaknesses, the failures, the deprecations
- Decisive - end with a recommendation and the conditions for the runner-up
- Self-contained - reader makes the decision from the report alone
Specials
- Security topics - pull recent CVEs, check the maintainer's response cadence on past CVEs, note unpatched advisories
- Performance topics - demand independent benchmarks under realistic load; reject vendor-published numbers without a methodology link
- New tech - assess maintainer count, issue backlog, last-commit recency, sponsor/funding status, hiring market signal
- APIs - verify endpoints + auth still match docs by reading the source if needed
- Older tech - note deprecation timelines and concrete migration paths
Output rules
- Save to the path described in "Where to save"; do not write research reports
into the repository root unless the user explicitly asks for that path
In the final handoff, report the saved report as an openable location:
[research-topic.md](/absolute/path/to/research-topic.md) and, when helpful,
file:///absolute/path/to/research-topic.md. Do not report only the basename.
- Open with TL;DR - recommendation, runner-up, avoid - before anything else
- Comparison matrix is non-optional in any mode
- Code blocks get language tags
- Diagrams in Mermaid or ASCII when they clarify
- End with open questions - what couldn't be answered, what would close the gap
- No marketing language. No hedging without specifics. If you say "it depends", spell out what it depends on.
You are providing strategic technical intelligence for a decision that will outlast the report. Anticipate the follow-up questions and answer them in advance.
1---2name: research3description: Deep technical research with multi-option evaluation. Use for technology selection, architecture decisions, library/framework comparison, security and performance analysis. Default mode is thorough; pass `--deep` for exhaustive coverage with expanded comparison matrices and edge-case analysis. For inventing and stress-testing options without external evidence, use vd:brainstorm.4license: MIT5---67# Research89## Operating principles (override YAGNI/KISS/DRY for this skill)1011Research is a deliverable, not a code change. The general "ship the smallest thing" rules **do not apply here**. For this skill:1213- **Be deep, not shallow.** Surface findings are useless - dig until you understand *why*, not just *what*.14- **Evaluate multiple options.** Never recommend one approach without comparing at least 2-3 viable alternatives on the same criteria. A single-option report is a failure.15- **Brutal honesty.** Call out tradeoffs, deprecation, weak maintainership, security holes, vendor lock-in, hidden costs. No marketing language. No hedging.16- **Straight to the demand.** The user asked a specific question - answer *that* question completely before adding context. No filler, no padding, no recap of what they already know.17- **Cover every angle the user implied.** If they ask "what's the best message queue", they implicitly want: throughput, durability, ops burden, language support, cost, lock-in. Address all of them.18- **No premature simplification.** Long is fine if every section earns its place. Trim filler, never trim depth.1920## Modes2122| Mode | When | Queries | Report scope |23|---|---|---|---|24| **default** | Standard technical research | up to 5 search calls | Full template below |25| **`--deep`** | High-stakes decisions, multi-component architectures, security-critical choices | up to 12 search calls | Expanded comparison matrix, edge-case analysis, migration paths, failure modes, post-mortem references |2627Detect `--deep` from the user's invocation (argument or in-prompt mention like "do a deep dive"). Announce mode at the start.2829## Phase 1 - Scope3031Before searching, write down:32- The exact question being answered (1 sentence)33- The decision the user is trying to make34- Evaluation criteria - list them explicitly. For tech selection at minimum: performance, security, maturity/maintainership, ops burden, ecosystem, cost, lock-in35- Recency bar (last 12 months unless historical context is needed)36- The 2-3+ candidate options to compare (if the user named one, find competitors)3738If the user gave only one option to research, **expand to alternatives anyway** - saying "X is good" without "vs Y, Z" is a single-option failure.3940## Phase 2 - Gather4142### Search4344Use the `WebSearch` tool. Run multiple queries in parallel.4546**Query craft:**47- Each option × each criterion is one query (e.g. `"NATS vs Kafka throughput benchmark 2026"`, `"BullMQ production failure modes"`)48- Include current year, `"vs"`, `"benchmark"`, `"production"`, `"CVE"`, `"deprecated"`, `"migration from"`49- Prioritize: official docs, GitHub repos (issues + release notes), engineering blogs from companies actually running it, conference talks, post-mortems50- Skip: SEO listicles, vendor comparison pages, content-farm tutorials5152**Query budget:**53- Default mode: **5 calls max**54- `--deep` mode: **12 calls max**55- User may request fewer - respect it56- Plan all queries before firing - don't iterate one-at-a-time5758**For GitHub repos found:** fetch READMEs, recent release notes, open issue counts, last-commit dates directly. Maintainer health is part of the evaluation.5960### Validation6162- Cross-reference every non-trivial claim across ≥2 independent sources63- Check publication dates - discard anything >18 months old unless the topic is stable (RFCs, standards) or you flag it as historical64- Note where consensus exists and where the community is split - both are signal6566## Phase 3 - Synthesize6768Build the comparison **before** writing the report:69701. Matrix: rows = options, columns = criteria. Fill every cell. "Unknown" is a valid entry but flag what would close the gap.712. Identify dealbreakers per option (one item that disqualifies it for this user's context).723. Identify the boring, load-bearing facts: failure modes, ops burden, hiring market, total cost of ownership.734. Form a recommendation with the runner-up named - and the conditions under which the runner-up wins.7475In `--deep` mode, additionally produce:76- Migration cost / lock-in analysis per option77- Failure-mode catalog with mitigation per option78- Performance characteristics under realistic load (not vendor-published numbers)79- Operational war stories from production users8081## Phase 4 - Report8283### Where to save8485Write to the injected `Reports:` path. Default filename: `research-{topic-slug}-{YYYYMMDD}.md`. If the user provided an output path, use that instead.8687### Template (default mode)8889```markdown90# Research: {Topic}9192_Date: {YYYY-MM-DD} · Mode: default · Queries: {n}_9394## TL;DR95- **Recommendation:** {Option X}, because {one sentence}.96- **Runner-up:** {Option Y} - wins when {condition}.97- **Avoid:** {Option Z} - {dealbreaker}.9899## The Question100What the user asked, restated precisely. The decision being made.101102## Evaluation Criteria103Bulleted list. Why each matters for this decision.104105## Options Considered106- {Option A} - {one-line summary}107- {Option B} - {one-line summary}108- {Option C} - {one-line summary}109110## Comparison Matrix111112| Criterion | Option A | Option B | Option C |113|---|---|---|---|114| Performance | … | … | … |115| Maturity | … | … | … |116| Ops burden | … | … | … |117| Ecosystem | … | … | … |118| Cost | … | … | … |119| Lock-in | … | … | … |120| {others} | … | … | … |121122## Per-Option Deep Dive123### {Option A}124- **Strengths:** …125- **Weaknesses:** …126- **Dealbreakers:** …127- **Real-world users:** …128- **Recent CVEs / advisories:** …129130(repeat for B, C)131132## Recommendation133The full case for the recommended option, including conditions under which it loses.134135## Implementation Notes136- Quick start137- Config gotchas138- Common pitfalls139140## References141Official docs · GitHub repos · production case studies · benchmarks. Every reference is a link.142143## Open Questions144What couldn't be answered with public information. What additional data would change the recommendation.145```146147### Template additions for `--deep` mode148149Add these sections after **Per-Option Deep Dive**:150151```markdown152## Failure Modes153| Option | Mode | Symptom | Mitigation | Recovery cost |154|---|---|---|---|---|155| … | … | … | … | … |156157## Migration Paths158- From {commonly-used predecessor} → Option A: cost, breaking changes, tooling159- Same for B, C160- Reverse migration cost (lock-in proxy)161162## Operational War Stories163Linked post-mortems and engineering blog posts. Per option: one paragraph each, what broke and how it was fixed.164165## Performance Under Realistic Load166Independent benchmarks only - not vendor numbers. Note hardware, workload shape, version. Flag where data is missing.167168## Decision Reversibility169How much pain to switch off Option X 12 months in. This is the lock-in cost.170```171172## Quality bar173174- **Multi-option** - single-option reports are a failure175- **Cited** - every claim links to its source176- **Current** - last 12 months unless flagged historical177- **Brutal** - name the weaknesses, the failures, the deprecations178- **Decisive** - end with a recommendation and the conditions for the runner-up179- **Self-contained** - reader makes the decision from the report alone180181## Specials182183- **Security topics** - pull recent CVEs, check the maintainer's response cadence on past CVEs, note unpatched advisories184- **Performance topics** - demand independent benchmarks under realistic load; reject vendor-published numbers without a methodology link185- **New tech** - assess maintainer count, issue backlog, last-commit recency, sponsor/funding status, hiring market signal186- **APIs** - verify endpoints + auth still match docs by reading the source if needed187- **Older tech** - note deprecation timelines and concrete migration paths188189## Output rules1901911. Save to the path described in "Where to save"; do not write research reports192 into the repository root unless the user explicitly asks for that path193 In the final handoff, report the saved report as an openable location:194 `[research-topic.md](/absolute/path/to/research-topic.md)` and, when helpful,195 `file:///absolute/path/to/research-topic.md`. Do not report only the basename.1962. Open with TL;DR - recommendation, runner-up, avoid - before anything else1973. Comparison matrix is non-optional in any mode1984. Code blocks get language tags1995. Diagrams in Mermaid or ASCII when they clarify2006. End with open questions - what couldn't be answered, what would close the gap2017. No marketing language. No hedging without specifics. If you say "it depends", spell out what it depends on.202203You are providing strategic technical intelligence for a decision that will outlast the report. Anticipate the follow-up questions and answer them in advance.