Router for skill creation: routes doc/repo-to-skill codification or routes to skill-creator for authoring. Use for doc-to-skill, new skills, or merging skills.
Unified skill creation hub. Routes between documentation codification (Skill_Seekers v2.7.4) and new skill authoring (skill-creator standards). Supports website scraping, GitHub repository analysis (with AST parsing), PDF extraction, and unified multi-source with conflict detection.
Use skill-builder when you need to:
| Scenario | Example | Route |
|---|---|---|
| Convert docs website to skill | "Codify the FastAPI docs" | Codifier pipeline (see below) |
| Convert GitHub repo to skill | "Make a skill from facebook/react" | Codifier pipeline (see below) |
| Extract PDF into skill | "Turn this manual into a skill" | Codifier pipeline (see below) |
| Combine multiple sources | "Skill from React docs + repo + PDF" |
| Codifier pipeline (see below) |
| Author new skill from scratch | "Create a skill for my workflow" | skill-creator |
| Merge existing skills | "Combine these 3 skills into one" | Both routes |
| Export for non-Claude LLMs | "Package for Gemini/ChatGPT" | Codifier with --target |
Do NOT use for: editing existing skills (use editor), searching skills (use lev get), or installing skills (use clawdhub).
What does the user want?
│
├─→ Convert existing docs to skill?
│ ├─→ Website only? → Website Scraping
│ ├─→ GitHub repo only? → GitHub Analysis
│ ├─→ PDF only? → PDF Extraction
│ └─→ Multiple sources? → Unified Multi-Source
│
├─→ Create NEW skill from scratch?
│ └─→ Route to skill-creator
│ - SKILL.md format: YAML frontmatter + markdown body
│ - Progressive disclosure: metadata → body → references
│ - Body <500 lines, description is PRIMARY trigger
│ - See skill-creator skill for full standards
│
├─→ Combine/merge existing skills?
│ └─→ Route to BOTH:
│ 1. Analyze existing skills (codifier patterns)
│ 2. Author merged skill (skill-creator standards)
│ 3. Ensure router pattern if subsumes others
│
├─→ Export for non-Claude platform?
│ └─→ Package with --target (gemini|openai|markdown)
│
└─→ First time? → references/setup.md
When intake routes a skills.sh URL or skill:// to skill-builder:
# Extract GitHub repo URL from skills.sh page (WebFetch for the link ONLY)
git clone --depth 1 {repo} /tmp/skill-intake-{ts}/
# Find the skill: find /tmp/skill-intake-{ts}/ -name "SKILL.md" -path "*{name}*"
# Stage to skills-db (NOT directly to active):
cp -r /tmp/skill-intake-{ts}/skills/{name}/ ~/.agents/skills-db/_workshop/{source}/{name}/
rm -rf /tmp/skill-intake-{ts}/
file=~/.agents/skills-db/_workshop/{source}/{name}/SKILL.md
head -1 "$file" | grep -q "^---$" # Has YAML frontmatter
grep -q "^name:" "$file" # Has name field
grep -q "^description:" "$file" # Has description field
awk '/^---$/{c++} c==2{exit}' "$file" # Has closing ---
If any hard gate fails → REJECT. Move to .archive/ or delete. Do NOT promote.
Score 1-10 on 5 dimensions (read the SKILL.md content):
| Dimension | What to evaluate |
|---|---|
| Actionability | Concrete steps/code/templates vs vague advice |
| Depth | Expert-level detail vs surface overview |
| Structure | Decision trees/tables vs wall of text |
| Trigger quality | WHAT/HOW/WHEN/WHY + tags vs bare description |
| Uniqueness | Novel frameworks vs generic blog advice |
Grades: A (8+) promote, B (7-7.9) promote with note, C (5-6.9) hold in _todo, D (<5) reject
# A/B grade → catalog in skills-db (DEFAULT destination):
mv ~/.agents/skills-db/_workshop/{source}/{name}/ ~/.agents/skills-db/{domain}/{name}/
# C grade → move to _todo for enhancement:
mv ~/.agents/skills-db/_workshop/{source}/{name}/ ~/.agents/skills-db/_todo/{name}/
# D grade → reject:
mv ~/.agents/skills-db/_workshop/{source}/{name}/ ~/.agents/skills-db/.archive/{name}/
# Only when user explicitly wants the skill loaded into Claude Code:
cp -r ~/.agents/skills-db/{domain}/{name}/ ~/.agents/skills/{name}/
# Or symlink:
ln -s ~/.agents/skills-db/{domain}/{name}/ ~/.agents/skills/{name}
NOTE: Most skills stay in skills-db. Only day-to-day/global operational skills get activated. The user decides when to activate — skill-builder should PROPOSE activation, not assume it.
Skills grow organically through 3 stages:
| Stage | Lines | Pattern | Example |
|---|---|---|---|
| LEAF | <300L | Standalone, no routing | writing-substack (147L) |
| HUB | 300-500L | Cross-references peers | content-strategy (356L) |
| ROUTER | 80-100L body | Dispatches to sub-skills | security-hub (80L → 4 sub-skills) |
skill_type: router and subsumes: [list] to frontmatterEvery codification job follows this pipeline. Do NOT skip steps.
1. PRIOR ART CHECK → Does this skill already exist?
├─ lev get "{name}" --scope=knowledge --pattern="SKILL.md"
├─ grep -rl "{name}" ~/.claude/skills/
└─ If found:
• Exact match → use as-is or enhance existing, skip to step 4
• Partial overlap → recommend merge/consolidation with existing
• Related but different → proceed, note in description for routing
2. ESTIMATE (websites only) → How big is this job?
└─ skill-seekers estimate configs/{name}.json
• < 5K pages: single skill, proceed normally
• 5K-10K: consider category split
• 10K+: must split with router strategy
3. EXTRACT → Get the raw content
├─ Website: skill-seekers scrape --name {name} --url {url}
├─ GitHub: skill-seekers github --repo {owner/repo}
├─ PDF: skill-seekers pdf --pdf {file} --name {name}
└─ Unified: skill-seekers unified --config {config.json}
4. ENHANCE → Transform raw extraction into a real skill
└─ skill-seekers enhance output/{name}/
⚠️ KNOWN BUG (skill-seekers ≤2.7.4): enhance passes file path
as positional arg to claude CLI. SKILL.md never gets updated.
USE WORKAROUND: scripts/enhance-workaround.sh output/{name}
5. REVIEW → Check the enhanced output
• Compare frontmatter against standards (what/how/when/why + triggers)
• Verify description is the PRIMARY trigger mechanism
• Check progressive disclosure (SKILL.md <500 lines, rest in references/)
• Validate: no stats-only wrappers, real actionable content
6. PACKAGE → Bundle for distribution
└─ echo "y" | skill-seekers package output/{name}/ [--target claude|gemini|openai|markdown]
7. INSTALL → Put it where it belongs
├─ Global: cp -r output/{name} ~/.claude/skills/{name}/
├─ Project: cp -r output/{name} .claude/skills/{name}/
└─ Upload: output/{name}.zip → https://claude.ai/skills
command -v skill-seekers || python3 -m skill_seekers --version
If not installed, see references/setup.md for uv/venv/pip auto-detection.
skill-seekers scrape --config configs/react.json --enhance-local
skill-seekers package output/react/
skill-seekers scrape --name myframework --url https://docs.example.com/
skill-seekers package output/myframework/
skill-seekers github --repo facebook/react
skill-seekers package output/react/
Supports deep AST parsing for Python, JavaScript, TypeScript, Java, C++, Go. Extracts APIs, issues, PRs, changelogs, and detects doc-vs-code conflicts.
skill-seekers pdf --pdf docs/manual.pdf --name myskill
skill-seekers package output/myskill/
Supports OCR for scanned PDFs, table extraction, password-protected files, and parallel processing.
skill-seekers unified --config configs/react_unified.json
skill-seekers package output/react/
Combines all sources with automatic conflict detection and intelligent merging.
# Claude (default)
skill-seekers package output/react/
# Google Gemini
skill-seekers package output/react/ --target gemini
# OpenAI ChatGPT
skill-seekers package output/react/ --target openai
# Generic Markdown (any LLM)
skill-seekers package output/react/ --target markdown
For large docs (10K+ pages), async mode, three-stream GitHub analysis, splitting strategies, and troubleshooting, see references/advanced-commands.md.
The description field is the PRIMARY trigger mechanism. Agents read descriptions to route. Body loads AFTER triggering.
Every description needs What/How/When/Why + tag soup: