skill-researcher
Conduct general research using web search, documentation, and codebase exploration. Invoke for non-Lean research tasks.
Install
mkdir -p .claude/skills/skill-researcher && curl -L -o skill.zip "https://mcp.directory/api/skills/download/5647" && unzip -o skill.zip -d .claude/skills/skill-researcher && rm skill.zipInstalls to .claude/skills/skill-researcher
About this skill
Researcher Skill
Thin wrapper that delegates general research to general-research-agent subagent.
IMPORTANT: This skill implements the skill-internal postflight pattern. After the subagent returns, this skill handles all postflight operations (status update, artifact linking, git commit) before returning. This eliminates the "continue" prompt issue between skill return and orchestrator.
Context References
Reference (do not load eagerly):
- Path:
.claude/context/formats/return-metadata-file.md- Metadata file schema - Path:
.claude/context/patterns/postflight-control.md- Marker file protocol - Path:
.claude/context/patterns/file-metadata-exchange.md- File I/O helpers - Path:
.claude/context/patterns/jq-escaping-workarounds.md- jq escaping patterns (Issue #1132)
Note: This skill is a thin wrapper with internal postflight. Context is loaded by the delegated agent.
Trigger Conditions
This skill activates when:
- Task language is "general", "meta", "markdown", "latex", or "typst"
- Research is needed for implementation planning
- Documentation or external resources need to be gathered
Execution Flow
Stage 1: Input Validation
Validate required inputs:
task_number- Must be provided and exist in state.jsonfocus_prompt- Optional focus for research direction
# Lookup task
task_data=$(jq -r --argjson num "$task_number" \
'.active_projects[] | select(.project_number == $num)' \
specs/state.json)
# Validate exists
if [ -z "$task_data" ]; then
return error "Task $task_number not found"
fi
# Extract fields
language=$(echo "$task_data" | jq -r '.language // "general"')
status=$(echo "$task_data" | jq -r '.status')
project_name=$(echo "$task_data" | jq -r '.project_name')
description=$(echo "$task_data" | jq -r '.description // ""')
Stage 2: Preflight Status Update
Update task status to "researching" BEFORE invoking subagent.
Update state.json:
jq --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg status "researching" \
--arg sid "$session_id" \
'(.active_projects[] | select(.project_number == '$task_number')) |= . + {
status: $status,
last_updated: $ts,
session_id: $sid
}' specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json
Update TODO.md: Use Edit tool to change status marker from [NOT STARTED] or [RESEARCHED] to [RESEARCHING].
Stage 3: Create Postflight Marker
Create the marker file to prevent premature termination:
# Ensure task directory exists
padded_num=$(printf "%03d" "$task_number")
mkdir -p "specs/${padded_num}_${project_name}"
cat > "specs/${padded_num}_${project_name}/.postflight-pending" << EOF
{
"session_id": "${session_id}",
"skill": "skill-researcher",
"task_number": ${task_number},
"operation": "research",
"reason": "Postflight pending: status update, artifact linking, git commit",
"created": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"stop_hook_active": false
}
EOF
Stage 4: Prepare Delegation Context
Prepare delegation context for the subagent:
{
"session_id": "sess_{timestamp}_{random}",
"delegation_depth": 1,
"delegation_path": ["orchestrator", "research", "skill-researcher"],
"timeout": 3600,
"task_context": {
"task_number": N,
"task_name": "{project_name}",
"description": "{description}",
"language": "{language}"
},
"focus_prompt": "{optional focus}",
"metadata_file_path": "specs/{NNN}_{SLUG}/.return-meta.json"
}
Stage 5: Invoke Subagent
CRITICAL: You MUST use the Task tool to spawn the subagent.
Required Tool Invocation:
Tool: Task (NOT Skill)
Parameters:
- subagent_type: "general-research-agent"
- prompt: [Include task_context, delegation_context, focus_prompt, metadata_file_path]
- description: "Execute research for task {N}"
DO NOT use Skill(general-research-agent) - this will FAIL.
The subagent will:
- Search codebase for related patterns
- Search web for documentation and examples
- Analyze findings and synthesize recommendations
- Create research report in
specs/{NNN}_{SLUG}/reports/ - Write metadata to
specs/{NNN}_{SLUG}/.return-meta.json - Return a brief text summary (NOT JSON)
Stage 6: Parse Subagent Return (Read Metadata File)
After subagent returns, read the metadata file:
metadata_file="specs/${padded_num}_${project_name}/.return-meta.json"
if [ -f "$metadata_file" ] && jq empty "$metadata_file" 2>/dev/null; then
status=$(jq -r '.status' "$metadata_file")
artifact_path=$(jq -r '.artifacts[0].path // ""' "$metadata_file")
artifact_type=$(jq -r '.artifacts[0].type // ""' "$metadata_file")
artifact_summary=$(jq -r '.artifacts[0].summary // ""' "$metadata_file")
else
echo "Error: Invalid or missing metadata file"
status="failed"
fi
Stage 7: Update Task Status (Postflight)
If status is "researched", update state.json and TODO.md:
Update state.json:
jq --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg status "researched" \
'(.active_projects[] | select(.project_number == '$task_number')) |= . + {
status: $status,
last_updated: $ts,
researched: $ts
}' specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json
Update TODO.md: Use Edit tool to change status marker from [RESEARCHING] to [RESEARCHED].
On partial/failed: Keep status as "researching" for resume.
Stage 8: Link Artifacts
Add artifact to state.json with summary.
IMPORTANT: Use two-step jq pattern to avoid Issue #1132 escaping bug. See jq-escaping-workarounds.md.
if [ -n "$artifact_path" ]; then
# Step 1: Filter out existing research artifacts (use "| not" pattern to avoid != escaping - Issue #1132)
jq '(.active_projects[] | select(.project_number == '$task_number')).artifacts =
[(.active_projects[] | select(.project_number == '$task_number')).artifacts // [] | .[] | select(.type == "research" | not)]' \
specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json
# Step 2: Add new research artifact
jq --arg path "$artifact_path" \
--arg type "$artifact_type" \
--arg summary "$artifact_summary" \
'(.active_projects[] | select(.project_number == '$task_number')).artifacts += [{"path": $path, "type": $type, "summary": $summary}]' \
specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json
fi
Update TODO.md: Add research artifact link using count-aware format.
See .claude/rules/state-management.md "Artifact Linking Format" for canonical rules. Use Edit tool:
- Read existing task entry to detect current research links
- If no
- **Research**:line exists: Insert inline format:- **Research**: [MM_{short-slug}.md]({artifact_path}) - If existing inline (single link): Convert to multi-line:
old_string: - **Research**: [existing.md](existing/path) new_string: - **Research**: - [existing.md](existing/path) - [MM_{short-slug}.md]({artifact_path}) - If existing multi-line: Append new item before next field:
old_string: - [last-item.md](last/path) - **Plan**: new_string: - [last-item.md](last/path) - [MM_{short-slug}.md]({artifact_path}) - **Plan**:
Stage 9: Git Commit
Commit changes with session ID:
git add -A
git commit -m "task ${task_number}: complete research
Session: ${session_id}
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
Stage 10: Cleanup
Remove marker and metadata files:
rm -f "specs/${padded_num}_${project_name}/.postflight-pending"
rm -f "specs/${padded_num}_${project_name}/.postflight-loop-guard"
rm -f "specs/${padded_num}_${project_name}/.return-meta.json"
Stage 11: Return Brief Summary
Return a brief text summary (NOT JSON). Example:
Research completed for task {N}:
- Found {count} relevant patterns and resources
- Identified implementation approach: {approach}
- Created report at specs/{NNN}_{SLUG}/reports/MM_{short-slug}.md
- Status updated to [RESEARCHED]
- Changes committed
Error Handling
Input Validation Errors
Return immediately with error message if task not found.
Metadata File Missing
If subagent didn't write metadata file:
- Keep status as "researching"
- Do not cleanup postflight marker
- Report error to user
Git Commit Failure
Non-blocking: Log failure but continue with success response.
Subagent Timeout
Return partial status if subagent times out (default 3600s). Keep status as "researching" for resume.
MUST NOT (Postflight Boundary)
After the agent returns, this skill MUST NOT:
- Edit source files - All research work is done by agent
- Run build/test commands - Verification is done by agent
- Use MCP/WebSearch tools - Research tools are for agent use only
- Analyze or grep source - Analysis is agent work
- Write reports - Artifact creation is agent work
The postflight phase is LIMITED TO:
- Reading agent metadata file
- Updating state.json via jq
- Updating TODO.md status marker via Edit
- Linking artifacts in state.json
- Git commit
- Cleanup of temp/marker files
Reference: @.claude/context/standards/postflight-tool-restrictions.md
Return Format
This skill returns a brief text summary (NOT JSON). The JSON metadata is written to the file and processed internally.
Example successful return:
Research completed for task 412:
- Found 8 relevant patterns for implementation
- Identified lazy context loading and skill-to-agent mapping patterns
- Created report at specs/412_general_research/reports/MM_{short-slug}.md
- Status updated to [RESEARCHED]
- Changes committed with session sess_1736700000_abc123
Example partial return:
Research partially complet
---
*Content truncated.*
More by benbrastmckie
View all skills by benbrastmckie →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversGemini DeepSearch automates web research using Google Search API and Gemini models, delivering in-depth, cited insights
Unlock AI-ready web data with Firecrawl: scrape any website, handle dynamic content, and automate web scraping for resea
Boost productivity with Task Master: an AI-powered tool for project management and agile development workflows, integrat
Empower AI with the Exa MCP Server—an AI research tool for real-time web search, academic data, and smarter, up-to-date
Empower your CLI agents with NotebookLM—connect AI tools for citation-backed answers from your docs, grounded in your ow
Web Fetcher uses Playwright for reliable data web scraping and extraction from JavaScript-heavy websites, returning clea
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.