Research any game title, genre, or gaming topic by orchestrating parallel subagents across Perplexity, Tavily, and Brave Search API to produce a comprehensive Korean-language gaming report. Specialized for game reviews, release info, patch notes, player sentiment, esports, and industry trends. Each research phase runs as independent subagents for true parallel execution and context isolation. Use this skill whenever the user asks about games, gaming hardware, esports, game development, or wants to research any game-related topic — even if they don't explicitly say 'game research'. Invoke with /game-research <keyword> [--brief].
Orchestrates parallel subagents (via the Agent tool) across Perplexity, Tavily, and Brave Search API to produce a comprehensive Korean-language gaming research report. Shares the same Python scripts as the web-research skill — the scripts are generic API wrappers.
--brief flag → Brief Mode (Phase 0 + 1 + Quick Synthesis). Default: Full Report Mode (Phase 0-4)../web-research/scripts/ — shared with web-research skillreferences/tool-guide.md for script details, parameters, and caveatsPhase 1: Discovery ─────────── 2 subagents in parallel
├─ Perplexity Discovery (AI overview + entity extraction)
└─ Brave Discovery (web + video + news)
│
▼ workspace JSON handoff
Phase 2: Classification ────── orchestrator inline (lightweight)
│
▼
Phase 3: Deep Extraction ───── 1-2 subagents in parallel
├─ Article Extractor (top 8 article URLs)
└─ Community Extractor (top 5 community URLs, if any)
│
▼
Phase 4: Synthesis ─────────── 1 subagent
└─ Report Synthesizer (cross-source analysis + report generation)
Create at pipeline start:
WORKSPACE="/tmp/game-research-$(date +%s)"
mkdir -p "$WORKSPACE"/{discovery,extraction}
All subagents save structured JSON here. The orchestrator reads these files to coordinate between phases.
Data contract:
$WORKSPACE/
├── meta.json # {timestamp, query, language, mode, query_type}
├── discovery/
│ ├── perplexity.json # {overview, citations[], entities[], is_news_topic}
│ ├── brave_web.json # raw Brave web API response
│ ├── brave_video.json # raw Brave video API response
│ └── brave_news.json # raw Brave news API response (if applicable)
├── source_matrix.json # {articles[], videos[], community[], reviews[]}
├── refinement.json # refinement search results (if applicable)
└── extraction/
├── articles.json # {results[{url, title, content}]}
└── community.json # {results[{url, platform, content}]}
--brief flagscripts/perplexity_search.py timestamp --tz=Asia/Seoul for the report's {date} field
scripts/ = <this skill's parent>/../web-research/scripts/ (resolve the path)| Query pattern | Type | Search expansion |
|---|---|---|
| Specific game title (e.g., "엘든 링", "Elden Ring") | title | Add "review", "metacritic", "gameplay" |
| Genre/category (e.g., "소울라이크", "roguelike 2026") | genre | Add "best", "recommendations", "upcoming" |
| Industry topic (e.g., "게임 구독 서비스", "UE6") | industry | Add "analysis", "comparison", "trend" |
| Esports (e.g., "LCK 2026", "Valorant Champions") | esports | Add "results", "standings", "teams" |
| Hardware (e.g., "스팀덱 OLED", "PS5 Pro") | hardware | Add "review", "specs", "comparison" |
meta.json to workspace (include query_type)Spawn two subagents simultaneously using the Agent tool. Read each agent template from agents/, construct the prompt with the variables below, and launch both in a single message.
Subagent A — Perplexity Discovery:
Read agents/discoverer-perplexity.md. Spawn with these variables:
{query}: the research keyword{query_type}: classified query type from Phase 0{language}: detected search language{workspace}: workspace path{script_dir}: path to ../web-research/scripts/ (resolved absolute path)Subagent B — Brave Discovery:
Read agents/discoverer-brave.md. Spawn with these variables:
{query}: the research keyword{query_type}: classified query type{language}: detected search language{has_news_keywords}: whether news keywords were detected in Phase 0{workspace}: workspace path{script_dir}: path to ../web-research/scripts/ (resolved absolute path)Wait for both subagents to complete before proceeding.
This phase is lightweight enough to run inline in the orchestrator. No subagent needed.
discovery/perplexity.json and discovery/brave_web.json from workspacereferences/source-classification.md):
discovery/brave_video.json. Deduplicate.discovery/brave_news.json exists, merge news results into articles (leverage date metadata)Refinement decision: Read discovery/perplexity.json entities. If entities reveal subtopics not covered by initial results, run one refinement search inline:
| Condition | Script call |
|---|---|
| Missing platform-specific info | scripts/tavily_search.py search "<game> <platform>" --depth=basic --max=10 |
| Competitive/multiplayer context | scripts/brave_search.py web "<game> meta tier list" --count=10 |
| Missing review aggregation | scripts/brave_search.py web "<game> metacritic opencritic review" --count=5 |
| Korean → English supplement | scripts/brave_search.py web "<english query>" --count=10 |
| News/patch refinement | scripts/brave_search.py news "<game> patch update" --count=5 |
Where scripts/ = resolved path to ../web-research/scripts/.
Save refinement results to refinement.json. Build and save source_matrix.json:
{
"articles": [{"url": "...", "title": "..."}],
"reviews": [{"url": "...", "title": "...", "platform": "..."}],
"videos": [{"url": "...", "title": "...", "source": "...", "description": "..."}],
"community": [{"url": "...", "platform": "..."}]
}
Spawn extraction subagents simultaneously. Read agents/extractor.md for the template.
Subagent C — Article Extractor:
{category}: "articles"{urls}: top 8 article URLs from source_matrix (comma-separated). Prioritize review sites and official sources.{query}: research topic (for relevance reranking){workspace}: workspace path{script_dir}: resolved script directory pathSubagent D — Community Extractor (only if community URLs exist):
{category}: "community"{urls}: top 5 community URLs from source_matrix (comma-separated){query}: research topic{workspace}: workspace path{script_dir}: resolved script directory pathVideo metadata is already available from Brave search results — no extraction subagent needed.
Wait for all extraction subagents to complete.
Post-extraction: Build extraction coverage summary. After extraction completes, build extraction_coverage to pass to the synthesizer:
{
"extracted": ["url1", "url2"],
"failed": ["url3"],
"skipped": ["url4", "url5", "..."]
}
Spawn one synthesis subagent. Read agents/synthesizer.md for the template, and also read references/report-template.md to include in the prompt.
Provide the synthesizer with:
{workspace}: workspace path{query}: research keyword{query_type}: classified query type{timestamp}: from Phase 0{script_dir}: resolved script directory path{report_template}: full contents of references/report-template.md{source_matrix}: contents of source_matrix.json{perplexity_overview}: the overview text from discovery/perplexity.json{extracted_articles}: contents of extraction/articles.json{extracted_community}: contents of extraction/community.json (if exists){video_metadata}: video entries from source_matrix{refinement_data}: contents of refinement.json (if exists){extraction_coverage}: the extraction coverage summaryThe synthesizer decides whether to call perplexity_search.py reason based on:
| Condition | Action |
|---|---|
| Extractions >= 8 + source types >= 2 + clear consensus | Synthesize directly (skip) |
| Sources conflict OR comparison topic (e.g., PS5 vs Xbox) | Required |
| Extractions <= 3 | Required (gap identification) |
| Otherwise | Recommended |
The synthesizer outputs the complete report text.
AskUserQuestion to ask whether to save (in Korean):
Simplified pipeline — no extraction or deep synthesis:
references/brief-template.md.Entry conditions (any one triggers):
Use scripts/tavily_search.py research "<query>" --model=mini as a single-call alternative. Note in the report that fallback mode was used.