LLM Docs Optimizer
This skill optimizes project documentation and README files for AI coding assistants and LLMs like Claude, GitHub Copilot, and others. It improves documentation quality through multiple approaches: c7score optimization (Context7's quality benchmark), llms.txt file generation for LLM navigation, question-driven content restructuring, and automated quality scoring across 5 key metrics.
Version: 1.3.0
Understanding C7Score
C7score evaluates documentation using 5 metrics across two categories:
LLM Analysis (85% of score):
- Question-Snippet Comparison (80%): How well snippets answer common developer questions
- LLM Evaluation (5%): Relevancy, clarity, correctness, and uniqueness
Text Analysis (15% of score): 3. Formatting (5%): Proper structure and language tags 4. Project Metadata (5%): Absence of irrelevant content 5. Initialization (5%): Not just imports/installations
For detailed information on each metric, read references/c7score_metrics.md.
Core Workflow
Step 0: Ask About llms.txt Generation (C7Score Optimization Only)
IMPORTANT: When the user requests c7score documentation optimization, ALWAYS ask if they also want an llms.txt file:
Use the AskUserQuestion tool with this question:
Question: "Would you also like me to generate an llms.txt file for your project?"
Header: "llms.txt"
Options:
- "Yes, create both optimized docs and llms.txt"
Description: "Optimize documentation for c7score AND generate an llms.txt navigation file"
- "No, just optimize the documentation"
Description: "Only perform c7score optimization without llms.txt generation"
If user chooses "Yes":
- Proceed with c7score optimization workflow (Steps 1-5)
- Then follow the llms.txt generation workflow
- Provide both optimized documentation AND llms.txt file
If user chooses "No":
- Proceed with c7score optimization workflow only (Steps 1-5)
Note: If the user explicitly requests ONLY llms.txt generation (no c7score mention), skip this step and go directly to the llms.txt generation workflow.
Step 1: Analyze Current Documentation
When given a project or documentation to optimize:
- Read the documentation files (README.md, docs/*.md, etc.)
- Run the analysis script (optional but recommended) to identify issues:
Note: The script requires Python 3.7+ and is optional. You can skip it if Python is unavailable.python scripts/analyze_docs.py <path-to-readme.md> - Review the analysis report (if script was run) to understand current state:
- Count of code snippets with issues
- Breakdown by metric type
- Duplicate snippets
- Language distribution
Step 2: Generate Developer Questions
Create a list of 15-20 questions that developers commonly ask about the project:
- Focus on "How do I..." questions
- Cover setup, configuration, basic usage, common operations
- Include authentication, error handling, advanced features
- Think about real-world use cases
Example questions:
- How do I install and set up [project]?
- How do I authenticate/configure [project]?
- How do I [main feature/operation]?
- How do I handle errors?
- How do I integrate with [common tools]?
Step 3: Map Questions to Snippets
Evaluate which questions are well-answered by existing documentation:
- ✅ Questions with complete, working code examples
- ⚠️ Questions with partial or theoretical answers
- ❌ Questions with no answers
Prioritize filling gaps for unanswered questions.
Step 4: Optimize Documentation
Apply optimizations based on priority:
Priority 1: Question Coverage (80% of score)
- Add complete code examples for unanswered questions
- Transform API references into usage examples
- Ensure each major snippet answers at least one common question
- Make examples self-contained and runnable
Priority 2: Remove Duplicates
- Identify similar or identical snippets
- Consolidate into comprehensive examples
- Ensure each snippet provides unique value
Priority 3: Fix Formatting
- Use proper language tags (python, javascript, typescript, bash, etc.)
- Follow TITLE / DESCRIPTION / CODE structure
- Avoid very short (<3 lines) or very long (>100 lines) snippets
- Don't use descriptive strings as language tags
Priority 4: Remove Metadata
- Remove or minimize licensing snippets
- Remove directory structure listings
- Remove citations and BibTeX entries
- Keep only usage-relevant content
Priority 5: Enhance Initialization Snippets
- Combine import-only snippets with usage examples
- Add context to installation commands
- Always show what comes after setup
For detailed transformation patterns, read references/optimization_patterns.md.
Step 5: Validate Optimizations
Before finalizing, verify each optimized snippet:
✅ Can run standalone (copy-paste works) ✅ Answers a specific developer question ✅ Provides unique information ✅ Uses proper format and language tag ✅ Focuses on practical usage ✅ Includes necessary imports/setup ✅ No licensing, citations, or directory trees ✅ Syntactically correct code
Step 6: Evaluate C7Score Impact
After optimization, provide a c7score evaluation comparing the original and optimized documentation:
Evaluation Process:
-
Analyze Original Documentation against c7score metrics:
- Question-Snippet Matching (80%): How well do code examples answer developer questions?
- LLM Evaluation (10%): Clarity, correctness, unique information
- Formatting (5%): Proper markdown structure and language tags
- Metadata Removal (2.5%): Absence of licenses, citations, directory trees
- Initialization (2.5%): More than just imports/installation
-
Analyze Optimized Documentation using the same metrics
-
Calculate Scores (0-100 for each metric):
-
For Question-Snippet Matching:
- 90-100: Excellent - Complete, practical answers with context
- 70-89: Good - Most questions answered with working examples
- 50-69: Fair - Partial answers, missing context
- 30-49: Poor - Vague or incomplete answers
- 0-29: Very Poor - Questions not addressed
-
For LLM Evaluation:
- 90-100: Unique, clear, syntactically perfect
- 70-89: Mostly unique and clear, minor issues
- 50-69: Some duplicates or clarity issues
- 30-49: Significant duplicates or syntax errors
- 0-29: Major quality problems
-
For Formatting:
- 100: All snippets properly formatted with language tags
- 80-99: Minor formatting issues
- 50-79: Multiple formatting problems
- 0-49: Significant formatting issues
-
For Metadata Removal:
- 100: No project metadata
- 50-99: Some metadata present
- 0-49: Significant metadata content
-
For Initialization:
- 100: All examples show usage beyond setup
- 50-99: Some initialization-only snippets
- 0-49: Many initialization-only snippets
-
-
Present Results in this format:
## C7Score Evaluation
### Original Documentation Score: XX/100
**Metric Breakdown:**
- Question-Snippet Matching: XX/100 (weight: 80%)
- Analysis: [Brief explanation of score]
- LLM Evaluation: XX/100 (weight: 10%)
- Analysis: [Brief explanation]
- Formatting: XX/100 (weight: 5%)
- Analysis: [Brief explanation]
- Metadata Removal: XX/100 (weight: 2.5%)
- Analysis: [Brief explanation]
- Initialization: XX/100 (weight: 2.5%)
- Analysis: [Brief explanation]
**Weighted Average:** XX/100
---
### Optimized Documentation Score: XX/100
**Metric Breakdown:**
[Same format as above]
**Weighted Average:** XX/100
---
### Improvement Summary
**Overall Improvement:** +XX points (XX → XX)
**Key Improvements:**
- [Metric]: +XX points - [What specifically improved]
- [Metric]: +XX points - [What specifically improved]
**Impact Assessment:**
[Brief explanation of how optimizations improved the documentation quality]
- Scoring Guidelines:
- Be objective and consistent
- Base scores on concrete evidence from the documentation
- Explain reasoning for each score
- Highlight specific improvements made
- Final score is weighted average: (Q×0.8) + (L×0.1) + (F×0.05) + (M×0.025) + (I×0.025)
Note: These are estimated scores based on c7score methodology. For official scores, users can submit to Context7's benchmark.
Common Transformation Patterns
Transform API Reference → Complete Example
Before:
## authenticate(api_key)
Authenticates the client.
After:
## Authentication
```python
from library import Client
client = Client(api_key="your_key")
client.authenticate()
# Now ready to make requests
result = client.get_data()
### Transform Import-Only → Quick Start
**Before:**
```python
from library import Client, Config
After:
# Install: pip install library
from library import Client, Config
# Initialize and use
config = Config(api_key="key")
client = Client(config)
result = client.query("SELECT * FROM data")
Transform Multiple Small → One Comprehensive
Combine related small snippets into one complete workflow example.
README Structure for High Scores
Organize documentation to prioritize question-answering:
-
Quick Start (High Priority)
- Installation + immediate usage
- Complete, working first example
-
Common Use Cases (High Priority)
- Each major feature with full examples
- Real-world scenarios
-
Configuration (Medium Priority)
- Common configuration patterns with context
-
Error Handling (Medium Priority)
- Practical error handling examples
-
API Reference (Lower Priority)
- Include usage examples for each method
-
Advanced Topics (Lower Priority)
- Complex scenarios with complete code
Tips for High Scores
- Think "How would a developer use this?" - Lead with usage, not theory
- Make examples copy-paste ready - Include all imports and setup
- Answer questions, don't just document APIs - Show solutions, not just signatures
- One snippet, one lesson - Avoid duplicate information
- Format consistently - Use proper language tags and structure
- Remove noise - No licensing, directory trees, or pure imports in main docs
- Test your examples - Ensure code is syntactically correct and runnable
- Focus on the 80% - Question-answering dominates the score
Skill Capabilities
This skill provides two main capabilities:
- C7Score Documentation Optimization - Improve documentation quality for AI-assisted coding
- llms.txt File Generation - Create LLM-friendly navigation files for projects
When to Use This Skill
For C7Score Optimization:
- User asks to optimize documentation for c7score
- User wants to improve README or docs for Context7
- User requests documentation analysis or quality assessment
- User is creating new documentation for a library/framework
- User mentions improving documentation for AI coding assistants
- User wants to follow best practices for developer documentation
For llms.txt Generation:
- User asks to create an llms.txt file
- User mentions llmstxt.org or llms.txt format
- User wants to make their project more accessible to LLMs
- User is setting up documentation navigation for AI tools
- User asks how to help LLMs understand their project structure
Output Format
When optimizing documentation, provide:
- Analysis summary - Key findings and issues
- Optimized documentation - Complete, improved files
- Change summary - What was improved and why
- Score impact estimate - Expected improvement by metric
- Recommendations - Further improvement suggestions
Save the optimized documentation files in the user's working directory or a designated output location. You can ask the user where they'd like the files saved if unclear.
Examples
- For c7score optimization: See
examples/sample_readme.mdfor before/after transformations - For llms.txt generation: See
examples/sample_llmstxt.mdfor different project types
Creating llms.txt Files
What is llms.txt?
llms.txt is a standardized markdown file format designed to provide LLM-friendly content summaries and documentation navigation. It helps language models and AI agents quickly understand project structure and find relevant documentation.
Key purposes:
- Provides brief background information and guidance
- Links to detailed markdown documentation
- Optimized for consumption by language models
- Helps LLMs navigate documentation efficiently
- Used at inference time when users request information
Official specification: https://llmstxt.org/
For complete format details, read references/llmstxt_format.md.
llms.txt Generation Workflow
Step 1: Analyze Project Structure
When asked to create an llms.txt file:
-
Explore the project directory to understand structure:
- Identify documentation files (README.md, docs/, CONTRIBUTING.md, etc.)
- Find example files or tutorials
- Locate API reference or configuration docs
- Check for guides, blog posts, or additional resources
-
Identify project type:
- Python library, CLI tool, web framework, Claude skill, etc.
- This determines the appropriate section structure
-
Assess documentation organization:
- Is documentation in a single README?
- Multiple files in a docs/ directory?
- Wiki, website, or external documentation?
Step 2: Determine Project Category
Choose the appropriate template based on project type:
Python Library / Package:
- Documentation, API Reference, Examples, Development, Optional
CLI Tool:
- Getting Started, Commands, Configuration, Examples, Optional
Web Framework:
- Documentation, Guides, API Reference, Examples, Integrations, Optional
Claude Skill:
- Documentation, Reference Materials, Examples, Development, Optional
General Project:
- Documentation, Guides, Examples, Contributing, Optional
See examples/sample_llmstxt.md for complete examples of each type.
Step 3: Create the Structure
Build the llms.txt file following this structure:
1. H1 Title (Required)
# Project Name
2. Blockquote Summary (Highly Recommended)
> Brief description of what the project does, its main purpose, and key value proposition.
> Should be 1-3 sentences that give LLMs essential context.
3. Key Features/Principles (Optional but Helpful)
Key features:
- Main feature or capability
- Another important aspect
- Third key point
Project follows these principles:
- Design principle 1
- Design principle 2
4. Documentation Sections (Core Content)
Organize links into H2-headed sections:
## Documentation
- [Link Title](https://full-url): Brief description of what this contains
- [Another Doc](https://full-url): What developers will find here
## API Reference
- [Core API](https://full-url): Main API documentation
- [Configuration](https://full-url): Configuration options
## Examples
- [Basic Usage](https://full-url): Simple getting-started examples
- [Advanced Patterns](https://full-url): Complex use cases
## Optional
- [Blog](https://full-url): Latest updates and tutorials
- [Community](https://full-url): Where to get help
Step 4: Format Links Properly
Each link must follow this exact format:
- [Descriptive Title](https://full-url): Optional helpful notes about the resource
Requirements:
- Use markdown bullet lists (
-) - Use markdown hyperlinks
[text](url) - Use full URLs with protocol (https://), not relative paths
- Add
:followed by helpful description (optional but recommended) - Prefer linking to
.mdfiles when possible
Examples:
✅ Good:
- [Quick Start](https://github.com/user/repo/blob/main/docs/quickstart.md): Get running in 5 minutes
- [API Reference](https://github.com/user/repo/blob/main/docs/api.md): Complete function documentation
❌ Bad:
- [Guide](../docs/guide.md): A guide
- Guide: docs/guide.md
- [Click here](guide)
Step 5: Organize Sections by Priority
Order sections from most to least important:
High Priority (First):
- Documentation / Getting Started
- Core API / Commands
- Examples
Medium Priority (Middle):
- Guides / Tutorials
- Configuration
- Development / Contributing
Low Priority (Last - Optional Section):
- Blog posts
- Community links
- Changelog
- Extended tutorials
- Background reading
The "Optional" section has special meaning: LLMs can skip this when shorter context is needed.
Step 6: Handle Different Repository Structures
GitHub Repository
For GitHub repos, construct URLs like:
https://github.com/username/repo/blob/main/path/to/file.md
Local Files Only
If no remote repository exists yet, use placeholder URLs:
https://github.com/username/repo/blob/main/README.md
And note in your response that URLs need to be updated when the repo is published.
Documentation Website
If project has a docs website, prefer linking to markdown versions:
- [Guide](https://docs.example.com/guide.md): Getting started guide
Or link to HTML with .md suffix if markdown versions exist:
- [Guide](https://docs.example.com/guide.html.md): Getting started guide
Step 7: Validate the File
Before finalizing, check:
- ✅ File named exactly
llms.txt(lowercase) - ✅ Has H1 title as first element
- ✅ Has blockquote summary (highly recommended)
- ✅ Uses only H1 and H2 headings (no H3, H4, etc. in descriptive content)
- ✅ All links use full URLs with protocol
- ✅ Links use proper markdown format
[text](url) - ✅ Sections logically organized (essential → optional)
- ✅ Descriptive notes added after colons where helpful
- ✅ Content is concise and clear
- ✅ No complex markdown (tables, images, code blocks in the llms.txt itself)
Common Section Templates
For Python Libraries
# LibraryName
> Brief description of what the library does and its main use case.
## Documentation
- Getting started, installation, core concepts
## API Reference
- Module/class/function documentation
## Examples
- Usage examples, patterns, recipes
## Development
- Contributing, testing, development setup
## Optional
- Changelog, blog, community
For CLI Tools
# ToolName
> Brief description of what the tool does.
## Getting Started
- Installation, quickstart
## Commands
- Command reference and examples
## Configuration
- Config files, environment variables
## Examples
- Common workflows and patterns
## Optional
- Advanced usage, plugins, troubleshooting
For Web Frameworks
# FrameworkName
> Brief description and key features.
## Documentation
- Core concepts, routing, data fetching
## Guides
- Authentication, deployment, testing
## API Reference
- Configuration, CLI, components
## Examples
- Sample applications
## Integrations
- Third-party tools and services
## Optional
- Blog, showcase, community
For Claude Skills
# skill-name
> Brief description of what the skill does.
## Documentation
- README, SKILL.md, usage guide
## Reference Materials
- Specifications, patterns, formats
## Examples
- Usage examples, before/after
## Development
- Scripts, contributing guide
## Optional
- External resources, related tools
Tips for High-Quality llms.txt Files
- Be Concise: Use clear, brief language in descriptions
- Think Like a New User: What would they want to find first?
- Descriptive Links: Use meaningful link text, not "click here"
- Add Context: Notes after colons help LLMs understand what each link contains
- Stable URLs: Link to versioned or permanent documentation
- Progressive Detail: Start with essentials, end with optional resources
- Test Comprehension: Read it yourself - does it make sense quickly?
- Keep Updated: Update as documentation structure evolves
Output Format for llms.txt Generation
When generating an llms.txt file, provide:
- Analysis summary - Project type, documentation structure, identified resources
- Generated llms.txt file - Complete, properly formatted file
- File placement instructions - Where to save it (repository root)
- URL update notes - If using placeholder URLs that need updating
- Suggestions - Additional documentation that could improve the file
Save the file as llms.txt in the project root directory.
Integration with C7Score Optimization
llms.txt generation can be combined with c7score optimization:
- Optimize documentation first - Improve README and docs for c7score
- Then generate llms.txt - Create navigation file pointing to optimized docs
- Result: High-quality documentation with LLM-friendly navigation
Or generate them independently based on user needs.
Additional Resources
- Format specification:
references/llmstxt_format.md - Examples by project type:
examples/sample_llmstxt.md - Official specification: https://llmstxt.org/
- Real examples: https://llmstxt.site/