Documentation Research Skill
Research coding documentation efficiently using Perplexity AI and persist findings in a structured, AI-optimized format.
Core Principles
- Check Existing Research First - Always read
research/CLAUDE.md(memory index) to see if topic was researched before - Structured Persistence - Save all research to
research/<topic>.mdwith consistent formatting - AI-Optimized Output - Use clear sections, code examples, and structured data
- Documentation Focus - Prioritize official docs, GitHub repos, and authoritative sources
- Memory-Based Index -
research/CLAUDE.mdis a Claude Code memory file that auto-loads to provide research context
research/CLAUDE.md Format
The research/CLAUDE.md file is a Claude Code memory file that follows these best practices:
Memory Best Practices (from Claude Code documentation):
- ✓ Be specific: "Use 2-space indentation" not "Format code properly"
- ✓ Use structure: Format as bullet points under descriptive headings
- ✓ Stay scannable: Clear sections, consistent formatting
- ✓ Review periodically: Update as research evolves
Index Entry Format:
### <Topic Name> (`<topic>.md`)
**Researched:** YYYY-MM-DD
**Status:** Active | Deprecated | Updated
**When to Use:** Specific concrete scenarios (be detailed)
**Summary:**
- Specific actionable point 1
- Specific actionable point 2
- Specific actionable point 3
This format ensures:
- Claude can quickly scan for relevant research
- Entries are specific and actionable
- Research context loads automatically in every session
- Index serves as a memory aid across sessions
Workflow
Step 1: Check Existing Research
ALWAYS start by checking if we've researched this topic before:
# Read the research index
cat research/CLAUDE.md
Look for the topic in the research index. If found, read the existing research file:
cat research/<topic>.md
If the research exists and is recent (< 3 months old), use it. Otherwise, proceed to Step 2.
Step 2: Identify Research Topic
Determine the specific topic to research. Create a clean topic name:
- Use lowercase with hyphens
- Be specific but concise
- Examples:
python-asyncio,react-hooks,typescript-generics,docker-best-practices
Step 3: Execute Perplexity Search
Use the optimized research script with appropriate parameters:
# Basic documentation research
.claude/skills/research-docs/scripts/perplexity-research.sh "python asyncio best practices"
# Target specific domains
.claude/skills/research-docs/scripts/perplexity-research.sh -d "docs.python.org,realpython.com" "python async await"
# Recent documentation only
.claude/skills/research-docs/scripts/perplexity-research.sh -r month "react 19 new features"
# More comprehensive results
.claude/skills/research-docs/scripts/perplexity-research.sh -n 20 "rust ownership patterns"
Script Options:
-n, --max-results NUM: Number of results (1-20, default: 15)-r, --recency FILTER: day, week, month, year (default: year)-d, --domains LIST: Comma-separated domain list-f, --format FORMAT: structured (default), json, plain
Step 4: Create Structured Documentation
Save the research output to research/<topic>.md using this format:
# <Topic Name>
**Research Date:** YYYY-MM-DD
**Status:** Active | Deprecated | Updated
**Related Topics:** topic1, topic2, topic3
## Overview
Brief 2-3 sentence overview of the topic.
## Key Concepts
- **Concept 1**: Explanation
- **Concept 2**: Explanation
- **Concept 3**: Explanation
## Official Documentation
- [Primary Docs](<url>) - Description
- [API Reference](<url>) - Description
## Best Practices
### Do's
- ✓ Practice 1 with brief explanation
- ✓ Practice 2 with brief explanation
### Don'ts
- ✗ Anti-pattern 1 with brief explanation
- ✗ Anti-pattern 2 with brief explanation
## Common Patterns
### Pattern 1: <Name>
**Use Case:** When to use this pattern
**Example:**
```language
// Code example
Explanation: Why this works
Pattern 2: <Name>
Use Case: When to use this pattern
Example:
// Code example
Explanation: Why this works
Common Pitfalls
Pitfall 1: <Name>
Problem: Description of the issue
Solution:
// Correct approach
Pitfall 2: <Name>
Problem: Description of the issue
Solution:
// Correct approach
Integration Examples
Basic Setup
// Installation or basic setup
Advanced Usage
// More complex example
Version Information
- Current Stable: Version number
- Minimum Required: Version number
- Deprecated Features: List any deprecated features
Related Resources
- Resource 1 - Description
- Resource 2 - Description
Research Sources
<Paste the Perplexity research output here>Last Updated: YYYY-MM-DD Next Review: YYYY-MM-DD (3 months from research date)
### Step 5: Update research/CLAUDE.md Index
**ALWAYS update research/CLAUDE.md** with an entry for the research.
The `research/CLAUDE.md` file is a **memory file** that Claude Code automatically loads. It serves as an index of all researched topics.
**Format Guidelines** (following Claude Code memory best practices):
- ✓ **Be specific**: Include concrete details, not vague descriptions
- ✓ **Use structure**: Format as bullet points under descriptive headings
- ✓ **Stay scannable**: Use clear sections and consistent formatting
- ✓ **Update regularly**: Keep status and dates current
Add a new entry under the "Research Index" heading:
```markdown
### <Topic Name> (`<topic>.md`)
**Researched:** YYYY-MM-DD
**Status:** Active
**When to Use:** Specific scenarios where this applies (be concrete)
**Summary:**
- Key point 1 with specific detail
- Key point 2 with specific detail
- Key point 3 with specific detail
Example entry:
### Python Asyncio (`python-asyncio.md`)
**Researched:** 2025-11-18
**Status:** Active
**When to Use:** Building concurrent I/O-bound applications, async web servers, or async database operations
**Summary:**
- Use `asyncio.create_task()` for fire-and-forget, `asyncio.gather()` for concurrent execution with results
- Always use `async with` for async context managers to ensure proper cleanup
- Avoid blocking calls in async functions - use `asyncio.to_thread()` for CPU-bound work
Step 6: Create TODO List
Use the TodoWrite tool to track research progress:
[
{"content": "Check existing research in research/CLAUDE.md", "status": "completed", "activeForm": "Checking existing research"},
{"content": "Execute Perplexity search for <topic>", "status": "completed", "activeForm": "Executing Perplexity search"},
{"content": "Structure documentation in research/<topic>.md", "status": "in_progress", "activeForm": "Structuring documentation"},
{"content": "Update research/CLAUDE.md research index", "status": "pending", "activeForm": "Updating research/CLAUDE.md research index"}
]
Documentation Categories
Framework Documentation
- React, Vue, Angular, Svelte
- Next.js, Nuxt, SvelteKit
- Express, FastAPI, Django
Language Documentation
- Python, JavaScript/TypeScript, Rust, Go
- Java, Kotlin, Swift
- Ruby, PHP, C#
Tool Documentation
- Docker, Kubernetes
- Git, GitHub Actions
- Webpack, Vite, esbuild
API Documentation
- REST API design
- GraphQL
- WebSockets
Best Practices
- Code patterns
- Architecture patterns
- Security practices
- Performance optimization
Output Quality Standards
Must Include
- ✓ Clear, scannable structure
- ✓ Code examples for key concepts
- ✓ Links to official documentation
- ✓ Best practices and anti-patterns
- ✓ Version information
- ✓ Common pitfalls and solutions
Avoid
- ✗ Large blocks of unformatted text
- ✗ Outdated information without version context
- ✗ Examples without explanation
- ✗ Missing links to sources
- ✗ Vague or generic advice
Example Queries That Trigger This Skill
- "Research Python asyncio documentation"
- "Find best practices for React hooks"
- "Look up TypeScript generics documentation"
- "What are the latest Docker best practices?"
- "Research how to implement WebSockets in Node.js"
- "Find documentation on Rust error handling"
- "Look up GraphQL schema design patterns"
Maintenance
Updating Existing Research
When updating research:
- Read the existing file
- Add a note at the top:
**Updated:** YYYY-MM-DD - Reason for update - Update the "Last Updated" date
- Update the "Next Review" date
- Update the research/CLAUDE.md entry with new date
Deprecation
If documentation becomes outdated:
- Update status to "Deprecated"
- Add deprecation notice with replacement topic
- Update research/CLAUDE.md status
Troubleshooting
Perplexity API Errors
Error: API key invalid
- Check
PERPLEXITY_API_KEYenvironment variable - Ensure you have a new API key that supports Search API
Error: Rate limit exceeded
- Wait before making additional requests
- Consider reducing result count with
-nflag
Research Quality Issues
Too many irrelevant results
- Use domain filtering:
-d "official-docs.com,github.com" - Make query more specific
- Adjust recency filter:
-r month
Missing official documentation
- Explicitly include official domain in search query
- Use
-dflag to target specific authoritative sources
Best Practices
- Always check existing research first - Avoid duplicate work
- Use specific queries - "Python 3.12 asyncio patterns" vs "Python async"
- Target authoritative sources - Use domain filtering for official docs
- Structure consistently - Follow the documentation template
- Include examples - Code examples make documentation actionable
- Update research/CLAUDE.md - Keep the research index current
- Set review dates - Mark when research should be refreshed
- Track with TODOs - Use TodoWrite to show progress
Script Reference
The perplexity-research.sh script is located at:
.claude/skills/research-docs/scripts/perplexity-research.sh
Key Features:
- Pre-configured for documentation domains
- AI-optimized structured output
- Flexible filtering options
- Error handling and validation
- Multiple output formats
Default Documentation Domains:
- stackoverflow.com
- github.com
- docs.python.org
- developer.mozilla.org
- nodejs.org
- reactjs.org
- vuejs.org
- angular.io
- rust-lang.org
- go.dev
- kotlinlang.org
- dev.to
- medium.com
Override with -d flag for specific research needs.
Scan to join WeChat group