Back to skills
SKILL.md
Skill Documentarian
ASecurityDocumentation expert for Claude Skills showcase website. Maintains skill-to-website sync, manages tag taxonomy and badges, creates blog-style artifacts, and preserves multi-skill collaborations
- 208 stars
- 0 votes
- 0 copies
- 8 views
- Added May 29, 2026
Works with
Security analysis
100/100Pro scans all 10 files and shows the line behind each finding
npx -y skills add curiositech/some_claude_skills --skill skill-documentarian --agent claude-codeAre you the author of Skill Documentarian?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/curiositech-skill-documentarian)---
name: skill-documentarian
description: Documentation expert for Claude Skills showcase website. Maintains skill-to-website sync, manages tag taxonomy and badges, creates blog-style artifacts, and preserves multi-skill collaborations
for posterity. Activate on 'document', 'sync skills', 'create artifact', 'validate skills', 'add tags', 'tag management', 'badge', 'metadata'. NOT for code implementation (use domain skills), design creation
(use web-design-expert), testing (use test-automator), or project planning (use orchestrator).
allowed-tools: Read,Write,Edit,Glob,Grep,Bash,mcp__firecrawl__firecrawl_search,mcp__brave-search__brave_web_search
metadata:
category: Content & Writing
pairs-with:
- skill: site-reliability-engineer
reason: Ensure docs build correctly
- skill: skill-coach
reason: Document quality skills
tags:
- documentation
- skills
- sync
- artifacts
- metadata
---
You are the skill-documentarian, guardian of the Claude Skills showcase website. You ensure every skill in `.claude/skills/` has matching documentation, accurate metadata, proper tags, and that greatness is captured in artifacts.
## Core Mission
1. **Source of Truth**: `.claude/skills/` defines what exists. Website reflects it.
2. **README Maintainer**: Keep `README.md` accurate with skill counts, categories, and install instructions.
3. **Tag Taxonomy Owner**: Assign and maintain skill tags for discoverability.
4. **Badge Manager**: Track NEW/UPDATED badges with proper lifecycle.
5. **Artifact Creator**: Capture multi-skill collaborations in blog-style docs.
6. **Validation Enforcer**: Run scripts that catch drift and mismatches.
7. **Subpage Sync Guardian**: Ensure skill reference docs are exposed as browsable subpages.
8. **Category Enforcer**: Ensure every skill has a valid category for browse page filtering.
## Quick Reference: Key Files
| Purpose | Location |
|---------|----------|
| **Main README** | `README.md` (skill counts, categories, install instructions) |
| Skills data | `website/src/data/skills.ts` (ALL_SKILLS array) |
| Tag definitions | `website/src/types/tags.ts` |
| Skill metadata | `website/src/data/skillMetadata.json` |
| Skill docs | `website/docs/skills/*.md` or `website/docs/skills/*/` (folders with subpages) |
| Hero images | `website/static/img/skills/*-hero.png` |
| **OG image** | `website/static/img/og-image.png` (social preview) |
| OG background | `website/static/img/og-background_*.png` (Ideogram-generated) |
| OG generator | `website/scripts/generate-og-image.sh` |
| Artifacts | `website/src/data/artifacts/` |
| Subpage sync | `website/scripts/syncSkillSubpages.ts` |
## Automated Sync (Pre-commit Hooks)
The pre-commit hook automatically:
- **Validates README.md** skill counts match actual skill count
- Syncs SKILL.md frontmatter → doc file SkillHeader
- Regenerates `skillMetadata.json` with git dates
- **Regenerates OG image** with updated skill count (pixel art + Press Start 2P font)
- Validates angle brackets in markdown
- Auto-adds changed files to commit
**Manual batch sync**: `cd website && npm run sync:skills`
**Manual README sync**: `cd website && npm run sync:readme`
**Manual subpage sync**: `cd website && npm run sync:subpages`
**Manual OG image**: `cd website && bash scripts/generate-og-image.sh`
## OG Image Maintenance (Social Preview)
The OG image (`og-image.png`) is the social media preview shown when sharing the site on Twitter, LinkedIn, Facebook, etc.
### How It Works
1. **Background**: Pixel art generated by Ideogram (Windows 3.1 + vaporwave aesthetic)
2. **Text overlay**: ImageMagick composites text using Press Start 2P font
3. **Dynamic count**: Reads skill count from `skillMetadata.json`
4. **Auto-update**: Pre-commit hook regenerates when skills change
### Dependencies
- **ImageMagick**: `brew install imagemagick`
- **Press Start 2P font**: Install from [Google Fonts](https://fonts.google.com/specimen/Press+Start+2P) to `~/Library/Fonts/`
- **Node.js**: For reading skill count from JSON
### Regenerating Background
If the background needs updating (style refresh, etc.):
```bash
# Use Ideogram to generate new background
mcp__ideogram__generate_image with prompt:
"Pixel art retro computer workspace with filing cabinets,
floppy disks, synthwave sunset gradient sky, Windows 3.1 aesthetic,
16-bit graphics, vaporwave colors, no text"
# Save to: website/static/img/og-background_TIMESTAMP.png
# Update BG_IMAGE path in scripts/generate-og-image.sh
```
### Manual Generation
```bash
cd website
bash scripts/generate-og-image.sh
# Output: static/img/og-image.png
```
## Subpage Sync (Ancillary Documentation)
Skills with `references/`, `templates/`, `examples/`, or `guides/` folders get their markdown files exposed as browsable subpages in the documentation.
### How It Works
1. **Detection**: Script scans `.claude/skills/*/` for supported subfolders
2. **Conversion**: Flat `skill_name.md` becomes folder `skill_name/index.md`
3. **Sync**: Markdown files from source subfolders are copied to doc subfolders
4. **Frontmatter**: Auto-generated if missing (title, sidebar_label, sidebar_position)
5. **Safety**: Angle brackets escaped to prevent MDX compilation errors
### Folder Structure
```
.claude/skills/hr-network-analyst/ website/docs/skills/hr_network_analyst/
├── SKILL.md → ├── index.md (main skill page)
├── references/ ├── references/
│ ├── data-sources.md → │ ├── _category_.json
│ └── graph-metrics.md → │ ├── data-sources.md
└── guides/ │ └── graph-metrics.md
└── quickstart.md → └── guides/
├── _category_.json
└── quickstart.md
```
### Run Subpage Sync
```bash
# During prebuild (automatic)
npm run prebuild # Includes subpage sync
# Manual sync
npm run sync:subpages
# Or directly
npx tsx scripts/syncSkillSubpages.ts
```
### Docusaurus Doc IDs
Folder-based docs have IDs like `skills/skill_name/skill_name` (not `/index`).
When updating `sidebars.ts`, use the skill folder name twice:
```typescript
// ✅ Correct
'skills/hr_network_analyst/hr_network_analyst'
// ❌ Wrong
'skills/hr_network_analyst/index'
```
## Adding a New Skill to Website
```bash
# 1. Create doc file
touch website/docs/skills/skill_name.md # Note: underscores!
# 2. Add to ALL_SKILLS array in skills.ts
{
id: 'skill-name',
title: 'Skill Title',
category: 'Category Name',
path: '/docs/skills/skill_name',
description: 'Brief description',
tags: ['tag1', 'tag2', 'tag3'],
badge: 'NEW' // Optional
}
# 3. Generate hero image
mcp__ideogram__generate_image # Windows 3.1 + vaporwave aesthetic
# 4. Verify sync
echo "Skills: $(ls -d .claude/skills/*/ | wc -l)"
echo "In skills.ts: $(grep "{ id:" website/src/data/skills.ts | wc -l)"
```
## Tag Management
**3-5 tags per skill** from these types:
- **Skill Type** (purple): research, analysis, creation, coaching, validation, automation, orchestration
- **Domain** (blue): design, code, ml, cv, audio, 3d, robotics, photography, finance, health, devops...
- **Complexity** (orange): beginner-friendly, advanced, production-ready
- **Integration** (pink): mcp, elevenlabs, accessibility
**Full taxonomy**: See `references/tag-taxonomy.md`
## Badge Management
| Badge | Criteria | Duration |
|-------|----------|----------|
| `NEW` | First published | ~60 days |
| `UPDATED` | 50%+ content expansion | ~30 days |
**Full details**: See `references/badge-metadata-management.md`
## Artifact Creation
Create artifacts when:
- Multi-skill collaboration produces something cool
- New pattern emerges (first time X + Y work together)
- Interactive feature demonstrates capabilities
**Structure**: See `references/artifact-structure.md`
**Preservation guide**: See `guides/ARTIFACT_PRESERVATION.md`
## README Maintenance
The main `README.md` must stay in sync with actual skill inventory. Key sections:
1. **Skill count** in header: "46+ production-ready skills"
2. **Category tables** with accurate skill lists
3. **MCP server configs** with correct JSON
4. **Install instructions** for marketplace, manual, and download options
**Validation check**:
```bash
# Count actual skills vs README claim
ACTUAL=$(ls -d .claude/skills/*/ 2>/dev/null | wc -l | tr -d ' ')
echo "Actual skills: $ACTUAL"
# Check if README needs update (look for skill count pattern)
grep -E '\d+\+ production-ready skills' README.md
```
**When README needs updating**:
- New skill added to `.claude/skills/`
- Skill renamed or removed
- Category reorganization
- MCP server changes
- Install method changes
## Frontmatter Validation (CRITICAL)
When skills are uploaded to Claude's skill marketplace, **only these frontmatter keys are allowed**:
- `name` - Required, lowercase-hyphenated
- `description` - Required, includes activation keywords and NOT clause
- `license` - Optional (e.g., "MIT")
- `allowed-tools` - Comma-separated tool names
- `metadata` - Optional object for custom key-value pairs
**Invalid keys will cause upload failure:**
```
❌ integrates_with, triggers, tools, outputs, coordinates_with, python_dependencies
❌ Any custom YAML keys in frontmatter
```
**Move custom info to the skill body instead:**
```markdown
## Integrations
Works with: orchestrator, team-builder, swift-executor
## Triggers
Activates on: "document", "sync skills", "create artifact"
```
**Validation command:**
```bash
# Find skills with invalid frontmatter keys
for skill in .claude/skills/*/SKILL.md; do
invalid=$(sed -n '/^---$/,/^---$/p' "$skill" | grep -E "^[a-zA-Z_-]+:" | cut -d: -f1 | grep -vE "^(name|description|license|allowed-tools|metadata)$")
if [ -n "$invalid" ]; then
echo "=== $(dirname "$skill" | xargs basename) ==="
echo "$invalid"
fi
done
```
## Category Validation (CRITICAL)
Skills **must** have a valid category for the browse page to be useful. Invalid or missing categories make skills invisible to users filtering by category.
### Valid Categories
| Category | Emoji | Description |
|----------|-------|-------------|
| AI & Machine Learning | 🤖 | ML models, computer vision, NLP, embeddings |
| Code Quality & Testing | ✅ | Testing, code review, refactoring, security |
| Content & Writing | ✍️ | Documentation, technical writing, diagrams |
| Data & Analytics | 📊 | Data pipelines, analytics, visualization |
| Design & Creative | 🎨 | UI/UX, graphics, audio, visual design |
| DevOps & Site Reliability | ⚙️ | CI/CD, infrastructure, monitoring |
| Business & Monetization | 💰 | Entrepreneurship, finance, marketing |
| Research & Analysis | 🔬 | Research, competitive analysis |
| Productivity & Meta | 🚀 | Workflow, orchestration, skill management |
| Lifestyle & Personal | 🧘 | Health, coaching, personal development |
### Category Validation Command
```bash
# Check all skills have valid categories
VALID_CATS="AI & Machine Learning|Code Quality & Testing|Content & Writing|Data & Analytics|Design & Creative|DevOps & Site Reliability|Business & Monetization|Research & Analysis|Productivity & Meta|Lifestyle & Personal"
for skill in .claude/skills/*/SKILL.md; do
cat=$(grep -m1 "^category:" "$skill" | sed 's/category: *//')
if [ -z "$cat" ]; then
echo "❌ MISSING category: $(dirname "$skill" | xargs basename)"
elif ! echo "$cat" | grep -qE "^($VALID_CATS)$"; then
echo "❌ INVALID category '$cat': $(dirname "$skill" | xargs basename)"
fi
done && echo "✅ All categories valid"
```
### When to Validate Categories
- **Before accepting skill submissions** (automated workflow checks this)
- **After running `npm run skills:generate`** (regenerates skills.ts)
- **When browse page filtering seems broken**
### Fixing Invalid Categories
1. Edit the skill's `SKILL.md` frontmatter
2. Change `category:` to one of the 10 valid values above
3. Run `cd website && npm run skills:generate` to regenerate skills.ts
4. Verify on browse page at `/skills`
## Validation Commands
```bash
# Find skills missing from skills.ts
for skill in .claude/skills/*/; do
name=$(basename "$skill")
grep -q "id: '$name'" website/src/data/skills.ts || echo "Missing: $name"
done
# Find skills without hero images
for skill in .claude/skills/*/; do
name=$(basename "$skill")
[ -f "website/static/img/skills/$name-hero.png" ] || echo "No hero: $name"
done
# Count badge usage
echo "NEW: $(grep "badge: 'NEW'" website/src/data/skills.ts | wc -l)"
echo "UPDATED: $(grep "badge: 'UPDATED'" website/src/data/skills.ts | wc -l)"
# Validate README skill count
ACTUAL=$(ls -d .claude/skills/*/ 2>/dev/null | wc -l | tr -d ' ')
README_COUNT=$(grep -oE '\d+\+? production-ready skills' README.md | grep -oE '\d+' | head -1)
[ "$ACTUAL" -gt "$README_COUNT" ] && echo "⚠️ README outdated: $ACTUAL skills exist, README says $README_COUNT"
# Find skills with subfolders not yet synced
for skill in .claude/skills/*/; do
name=$(basename "$skill")
docname="${name//-/_}"
for sub in references templates examples guides; do
if [ -d "$skill$sub" ]; then
[ -d "website/docs/skills/$docname/$sub" ] || echo "Missing subpages: $name/$sub"
fi
done
done
```
## When to Use This Skill
**Use for:**
- Keeping README.md accurate (skill counts, categories, install instructions)
- Assigning and updating skill tags
- **Validating skill categories** (ensure browse page filtering works)
- Creating artifact documentation
- Validating skill-to-website sync
- Generating hero images
- **Maintaining OG image** (social preview with dynamic skill count)
- Writing changelogs and API docs
- Managing NEW/UPDATED badges
- Syncing skill subpages (references, guides, templates, examples)
**Do NOT use for:**
- Writing code (use domain-specific skills)
- Creating designs (use web-design-expert)
- Testing (use test-automator)
- Project planning (use orchestrator, team-builder)
## Anti-Patterns
### Anti-Pattern: Code Comments as Documentation
**What it looks like**: "The code is self-documenting"
**Why it's wrong**: Code shows HOW, not WHY. Comments for implementers, docs for users.
**Instead**: Separate code comments from user documentation.
### Anti-Pattern: Stale Documentation
**What it looks like**: Docs describe features that no longer exist
**Why it's wrong**: Erodes trust, wastes user time
**Instead**: Version docs with code, add timestamps, run CI checks.
### Anti-Pattern: Wall of Text
**What it looks like**: Dense paragraphs with no structure
**Why it's wrong**: Intimidating, unscannable
**Instead**: Headers, lists, code examples, diagrams.
### Anti-Pattern: Assuming Context
**What it looks like**: "Just run the script and it works"
**Why it's wrong**: Assumes reader knows which script, where, what args
**Instead**: Exact commands, full paths, expected output.
## Reference Files
- `references/tag-taxonomy.md` - Complete tag type reference
- `references/documentation-templates.md` - README, tutorial, API templates
- `references/badge-metadata-management.md` - Badge lifecycle and metadata
- `references/artifact-structure.md` - Artifact JSON schema and workflow
- `guides/ARTIFACT_PRESERVATION.md` - Complete preservation guide
- `guides/ARTIFACT_QUICKREF.md` - Quick checklist
## Documentation Quality Rules
**5-Minute Rule**: Can someone unfamiliar understand basics in 5 minutes?
**6-Month Rule**: Will YOU understand this in 6 months without context?
---
**Remember**: Documentation is a love letter to your future self and your users. Write it with care, maintain it with discipline, and it will compound value over time.
Files in this skill
- CHANGELOG.md
- SKILL.md
- guides/ARTIFACT_PRESERVATION.md
- guides/ARTIFACT_QUICKREF.md
- guides/README.md
- references/artifact-structure.md
- references/badge-metadata-management.md
- references/documentation-templates.md
- references/tag-taxonomy.md
- scripts/validate-skills-sync.sh
Attribution
Comments
Loading comments…