diff --git a/AGENTS.md b/AGENTS.md index dad9cf3..a1f0f64 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -139,6 +139,32 @@ Task 2: general-purpose - "Implement the planned skill" # Needs Task 1 result - Skills export data to Working with AI database - Check schema compatibility before creating pages +### Reference Curator Skills (90-99) + +- Use **reference-curator-pipeline** for full automated curation workflows +- Runs as background task, coordinates all 6 skills in sequence +- Handles QA loops automatically (max 3 refactor, 2 deep_research iterations) +- Supports three input modes: topic (full pipeline), URLs (skip discovery), manifest (resume) + +``` +# Full pipeline from topic +/reference-curator-pipeline "Claude Code best practices" --max-sources 5 + +# Direct URL crawling (skip discovery) +/reference-curator-pipeline https://docs.anthropic.com/en/docs/prompt-caching + +# Resume from manifest +/reference-curator-pipeline ./manifest.json --auto-approve +``` + +Individual skills can still be run separately: +- `/reference-discovery` - Search and validate sources +- `/web-crawler` - Crawl URLs with auto-backend selection +- `/content-repository` - Manage stored documents +- `/content-distiller` - Summarize and extract key concepts +- `/quality-reviewer` - QA scoring and routing +- `/markdown-exporter` - Export to project files or JSONL + ## Background Agents For long-running tasks, use `run_in_background: true`: diff --git a/CLAUDE.md b/CLAUDE.md index 32dd27c..af38d7b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -73,7 +73,24 @@ This is a Claude Skills collection repository containing: |---|-------|---------|---------| | 90 | reference-curator | Modular skill suite for reference documentation | See sub-skills below | -**Sub-skills (installed via `./install.sh`):** +**Pipeline Orchestrator (Recommended):** + +| Command | Purpose | +|---------|---------| +| `/reference-curator-pipeline` | Full pipeline orchestration with QA loop handling | + +``` +# Full pipeline from topic +/reference-curator-pipeline "Claude Code best practices" --max-sources 5 + +# From URLs (skip discovery) +/reference-curator-pipeline https://docs.anthropic.com/en/docs/prompt-caching + +# With auto-approve and fine-tuning output +/reference-curator-pipeline "MCP servers" --auto-approve --export-format fine_tuning +``` + +**Individual Sub-skills (installed via `./install.sh`):** | Skill | Command | Purpose | |-------|---------|---------| @@ -83,6 +100,7 @@ This is a Claude Skills collection repository containing: | content-distiller | `/content-distiller` | Summarization & key concept extraction | | quality-reviewer | `/quality-reviewer` | QA loop with approve/refactor/research routing | | markdown-exporter | `/markdown-exporter` | Export to markdown or JSONL for fine-tuning | +| pipeline-orchestrator | `/reference-curator-pipeline` | Full 6-skill workflow orchestration | ## Dual-Platform Skill Structure @@ -96,7 +114,11 @@ XX-skill-name/ │ └── references/ # Documentation │ ├── desktop/ # Claude Desktop version -│ ├── SKILL.md # MCP-focused directive (YAML frontmatter) +│ ├── skill.yaml # Metadata (name, description, allowed-tools, license) +│ ├── SKILL.md # MCP-focused directive (content only, no frontmatter) +│ ├── tools/ # MCP tool documentation & configs +│ │ ├── {tool-name}.md # Tool usage docs (e.g., firecrawl.md) +│ │ └── {tool-name}.yaml # Tool config (optional) │ ├── references/ # Guidance docs │ └── examples/ # Usage examples │ @@ -107,10 +129,28 @@ XX-skill-name/ | Aspect | `code/` | `desktop/` | |--------|---------|------------| -| Directive | CLAUDE.md | SKILL.md (YAML) | +| Directive | CLAUDE.md | SKILL.md (content) | +| Metadata | In CLAUDE.md | skill.yaml | +| Tool docs | N/A | tools/ directory | | Execution | Direct Bash/Python | MCP tools only | | Scripts | Required | Reference only | +### skill.yaml Schema + +```yaml +# Required fields +name: string # Skill identifier +description: string # Trigger description (can be multi-line with |) + +# Optional fields +allowed-tools: # List of permitted MCP/Claude tools + - mcp__firecrawl__* + - Read + - Write +license: string # MIT, Internal-use Only, etc. +triggers: [] # Explicit trigger keywords +``` + ### Development Workflow 1. **Build Claude Code version first** - Full automation with scripts @@ -166,6 +206,7 @@ our-claude-skills/ │ │ ├── 04-content-distiller/ │ │ ├── 05-quality-reviewer/ │ │ ├── 06-markdown-exporter/ +│ │ ├── 07-pipeline-orchestrator/ # Full pipeline coordination │ │ ├── shared/ # Config templates & MySQL schema │ │ └── install.sh # Cross-machine installer │ │ diff --git a/custom-skills/01-ourdigital-research/desktop/SKILL.md b/custom-skills/01-ourdigital-research/desktop/SKILL.md index 58a495b..511f5ee 100644 --- a/custom-skills/01-ourdigital-research/desktop/SKILL.md +++ b/custom-skills/01-ourdigital-research/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: ourdigital-research-publisher -description: | - End-to-end research-to-publication workflow for OurDigital channels. Transforms questions into comprehensive research, then Korean/English blog posts. Use when user wants to: (1) Research a topic deeply, (2) Create research papers from conversations, (3) Write blog posts for OurDigital/Ghost, (4) Execute "research to publish" workflow, (5) Save research to Notion and export to Ulysses. Triggers: "research this", "write a blog about", "publish to OurDigital", "deep dive into", "연구해줘", "블로그 작성", "포스팅 초안". ---- - # OurDigital Research-to-Publisher Workflow Transform questions into comprehensive research papers and polished blog posts for OurDigital channels. diff --git a/custom-skills/01-ourdigital-research/desktop/skill.yaml b/custom-skills/01-ourdigital-research/desktop/skill.yaml new file mode 100644 index 0000000..f2976c4 --- /dev/null +++ b/custom-skills/01-ourdigital-research/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: ourdigital-research-publisher +description: | + End-to-end research-to-publication workflow for OurDigital channels. Transforms questions into comprehensive research, then Korean/English blog posts. Use when user wants to: (1) Research a topic deeply, (2) Create research papers from conversations, (3) Write blog posts for OurDigital/Ghost, (4) Execute "research to publish" workflow, (5) Save research to Notion and export to Ulysses. Triggers: "research this", "write a blog about", "publish to OurDigital", "deep dive into", "연구해줘", "블로그 작성", "포스팅 초안". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/02-ourdigital-designer/desktop/SKILL.md b/custom-skills/02-ourdigital-designer/desktop/SKILL.md index 9a2c0b9..ae760ec 100644 --- a/custom-skills/02-ourdigital-designer/desktop/SKILL.md +++ b/custom-skills/02-ourdigital-designer/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: ourdigital-visual-storytelling -description: Creates sophisticated featured image prompts for OurDigital blogs (blog.ourdigital.org, journal.ourdigital.org, ourstory.day) that capture philosophical depth through minimalist visual metaphors. Specializes in translating complex essays about humanity, technology, and culture into contemplative visual narratives using Korean-Western aesthetic fusion. Use when creating blog featured images that require intellectual sophistication and conceptual abstraction. -license: MIT ---- - # OurDigital Visual Storytelling Transform philosophical essays into sophisticated visual narratives through minimalist, conceptually rich featured images. diff --git a/custom-skills/02-ourdigital-designer/desktop/skill.yaml b/custom-skills/02-ourdigital-designer/desktop/skill.yaml new file mode 100644 index 0000000..eafa0ab --- /dev/null +++ b/custom-skills/02-ourdigital-designer/desktop/skill.yaml @@ -0,0 +1,11 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: ourdigital-visual-storytelling +description: | + Creates sophisticated featured image prompts for OurDigital blogs (blog.ourdigital.org, journal.ourdigital.org, ourstory.day) that capture philosophical depth through minimalist visual metaphors. Specializes in translating complex essays about humanity, technology, and culture into contemplative visual narratives using Korean-Western aesthetic fusion. Use when creating blog featured images that require intellectual sophistication and conceptual abstraction. + +# Optional fields + +license: MIT + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/03-ourdigital-presentation/desktop/SKILL.md b/custom-skills/03-ourdigital-presentation/desktop/SKILL.md index 375811b..4e04a66 100644 --- a/custom-skills/03-ourdigital-presentation/desktop/SKILL.md +++ b/custom-skills/03-ourdigital-presentation/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: research-to-presentation -description: Transforms Notion research content into branded presentations through an automated workflow. Collects research from Notion pages/databases, synthesizes content to extract key topics and agenda items, creates presentation structure with slide plans, and generates branded PPT/Figma presentations. Use when converting research into meeting materials, creating data-driven presentations from Notion content, transforming documentation into executive presentations, or building slide decks from scattered research notes. ---- - # Research to Presentation Workflow Automated pipeline for transforming Notion research into professional presentations with brand consistency. diff --git a/custom-skills/03-ourdigital-presentation/desktop/skill.yaml b/custom-skills/03-ourdigital-presentation/desktop/skill.yaml new file mode 100644 index 0000000..8fb2ee5 --- /dev/null +++ b/custom-skills/03-ourdigital-presentation/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: research-to-presentation +description: | + Transforms Notion research content into branded presentations through an automated workflow. Collects research from Notion pages/databases, synthesizes content to extract key topics and agenda items, creates presentation structure with slide plans, and generates branded PPT/Figma presentations. Use when converting research into meeting materials, creating data-driven presentations from Notion content, transforming documentation into executive presentations, or building slide decks from scattered research notes. + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/10-seo-technical-audit/desktop/SKILL.md b/custom-skills/10-seo-technical-audit/desktop/SKILL.md index bee5b24..86faf33 100644 --- a/custom-skills/10-seo-technical-audit/desktop/SKILL.md +++ b/custom-skills/10-seo-technical-audit/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-technical-audit -description: "Technical SEO auditor for crawlability fundamentals. Triggers: robots.txt, sitemap validation, crawlability, indexing check, technical SEO." -allowed-tools: mcp__firecrawl__*, mcp__perplexity__*, mcp__notion__* ---- - # SEO Technical Audit ## Purpose diff --git a/custom-skills/10-seo-technical-audit/desktop/skill.yaml b/custom-skills/10-seo-technical-audit/desktop/skill.yaml new file mode 100644 index 0000000..2fe6bb0 --- /dev/null +++ b/custom-skills/10-seo-technical-audit/desktop/skill.yaml @@ -0,0 +1,13 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-technical-audit +description: | + Technical SEO auditor for crawlability fundamentals. Triggers: robots.txt, sitemap validation, crawlability, indexing check, technical SEO. + +# Optional fields +allowed-tools: + - mcp__firecrawl__* + - mcp__perplexity__* + - mcp__notion__* + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/10-seo-technical-audit/desktop/tools/firecrawl.md b/custom-skills/10-seo-technical-audit/desktop/tools/firecrawl.md new file mode 100644 index 0000000..c9c1465 --- /dev/null +++ b/custom-skills/10-seo-technical-audit/desktop/tools/firecrawl.md @@ -0,0 +1,15 @@ +# Firecrawl + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/10-seo-technical-audit/desktop/tools/notion.md b/custom-skills/10-seo-technical-audit/desktop/tools/notion.md new file mode 100644 index 0000000..153e086 --- /dev/null +++ b/custom-skills/10-seo-technical-audit/desktop/tools/notion.md @@ -0,0 +1,15 @@ +# Notion + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/10-seo-technical-audit/desktop/tools/perplexity.md b/custom-skills/10-seo-technical-audit/desktop/tools/perplexity.md new file mode 100644 index 0000000..2eb28d1 --- /dev/null +++ b/custom-skills/10-seo-technical-audit/desktop/tools/perplexity.md @@ -0,0 +1,15 @@ +# Perplexity + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/11-seo-on-page-audit/desktop/SKILL.md b/custom-skills/11-seo-on-page-audit/desktop/SKILL.md index 2eeff33..6c5b0c0 100644 --- a/custom-skills/11-seo-on-page-audit/desktop/SKILL.md +++ b/custom-skills/11-seo-on-page-audit/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-on-page-audit -description: "On-page SEO analyzer for meta tags, headings, links, images, and Open Graph. Triggers: on-page SEO, meta tags, title tag, heading structure, alt text." -allowed-tools: mcp__firecrawl__*, mcp__perplexity__*, mcp__notion__* ---- - # SEO On-Page Audit ## Purpose diff --git a/custom-skills/11-seo-on-page-audit/desktop/skill.yaml b/custom-skills/11-seo-on-page-audit/desktop/skill.yaml new file mode 100644 index 0000000..e89b1b5 --- /dev/null +++ b/custom-skills/11-seo-on-page-audit/desktop/skill.yaml @@ -0,0 +1,13 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-on-page-audit +description: | + On-page SEO analyzer for meta tags, headings, links, images, and Open Graph. Triggers: on-page SEO, meta tags, title tag, heading structure, alt text. + +# Optional fields +allowed-tools: + - mcp__firecrawl__* + - mcp__perplexity__* + - mcp__notion__* + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/11-seo-on-page-audit/desktop/tools/firecrawl.md b/custom-skills/11-seo-on-page-audit/desktop/tools/firecrawl.md new file mode 100644 index 0000000..c9c1465 --- /dev/null +++ b/custom-skills/11-seo-on-page-audit/desktop/tools/firecrawl.md @@ -0,0 +1,15 @@ +# Firecrawl + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/11-seo-on-page-audit/desktop/tools/notion.md b/custom-skills/11-seo-on-page-audit/desktop/tools/notion.md new file mode 100644 index 0000000..153e086 --- /dev/null +++ b/custom-skills/11-seo-on-page-audit/desktop/tools/notion.md @@ -0,0 +1,15 @@ +# Notion + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/11-seo-on-page-audit/desktop/tools/perplexity.md b/custom-skills/11-seo-on-page-audit/desktop/tools/perplexity.md new file mode 100644 index 0000000..2eb28d1 --- /dev/null +++ b/custom-skills/11-seo-on-page-audit/desktop/tools/perplexity.md @@ -0,0 +1,15 @@ +# Perplexity + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/12-seo-local-audit/desktop/SKILL.md b/custom-skills/12-seo-local-audit/desktop/SKILL.md index f98c91a..ad5fb7d 100644 --- a/custom-skills/12-seo-local-audit/desktop/SKILL.md +++ b/custom-skills/12-seo-local-audit/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-local-audit -description: "Local SEO auditor for NAP consistency, Google Business Profile, citations, and LocalBusiness schema. Triggers: local SEO, Google Business Profile, GBP, NAP, citations, local rankings." -allowed-tools: mcp__firecrawl__*, mcp__perplexity__*, mcp__notion__* ---- - # SEO Local Audit ## Purpose diff --git a/custom-skills/12-seo-local-audit/desktop/skill.yaml b/custom-skills/12-seo-local-audit/desktop/skill.yaml new file mode 100644 index 0000000..e4248b5 --- /dev/null +++ b/custom-skills/12-seo-local-audit/desktop/skill.yaml @@ -0,0 +1,13 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-local-audit +description: | + Local SEO auditor for NAP consistency, Google Business Profile, citations, and LocalBusiness schema. Triggers: local SEO, Google Business Profile, GBP, NAP, citations, local rankings. + +# Optional fields +allowed-tools: + - mcp__firecrawl__* + - mcp__perplexity__* + - mcp__notion__* + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/12-seo-local-audit/desktop/tools/firecrawl.md b/custom-skills/12-seo-local-audit/desktop/tools/firecrawl.md new file mode 100644 index 0000000..c9c1465 --- /dev/null +++ b/custom-skills/12-seo-local-audit/desktop/tools/firecrawl.md @@ -0,0 +1,15 @@ +# Firecrawl + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/12-seo-local-audit/desktop/tools/notion.md b/custom-skills/12-seo-local-audit/desktop/tools/notion.md new file mode 100644 index 0000000..153e086 --- /dev/null +++ b/custom-skills/12-seo-local-audit/desktop/tools/notion.md @@ -0,0 +1,15 @@ +# Notion + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/12-seo-local-audit/desktop/tools/perplexity.md b/custom-skills/12-seo-local-audit/desktop/tools/perplexity.md new file mode 100644 index 0000000..2eb28d1 --- /dev/null +++ b/custom-skills/12-seo-local-audit/desktop/tools/perplexity.md @@ -0,0 +1,15 @@ +# Perplexity + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/13-seo-schema-validator/desktop/SKILL.md b/custom-skills/13-seo-schema-validator/desktop/SKILL.md index d2b7a6b..b98b1c1 100644 --- a/custom-skills/13-seo-schema-validator/desktop/SKILL.md +++ b/custom-skills/13-seo-schema-validator/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-schema-validator -description: "Structured data validator for JSON-LD, Microdata, and RDFa. Triggers: validate schema, structured data, JSON-LD, rich results, schema.org." -allowed-tools: mcp__firecrawl__*, mcp__perplexity__* ---- - # SEO Schema Validator ## Purpose diff --git a/custom-skills/13-seo-schema-validator/desktop/skill.yaml b/custom-skills/13-seo-schema-validator/desktop/skill.yaml new file mode 100644 index 0000000..57eb493 --- /dev/null +++ b/custom-skills/13-seo-schema-validator/desktop/skill.yaml @@ -0,0 +1,12 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-schema-validator +description: | + Structured data validator for JSON-LD, Microdata, and RDFa. Triggers: validate schema, structured data, JSON-LD, rich results, schema.org. + +# Optional fields +allowed-tools: + - mcp__firecrawl__* + - mcp__perplexity__* + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/13-seo-schema-validator/desktop/tools/firecrawl.md b/custom-skills/13-seo-schema-validator/desktop/tools/firecrawl.md new file mode 100644 index 0000000..c9c1465 --- /dev/null +++ b/custom-skills/13-seo-schema-validator/desktop/tools/firecrawl.md @@ -0,0 +1,15 @@ +# Firecrawl + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/13-seo-schema-validator/desktop/tools/perplexity.md b/custom-skills/13-seo-schema-validator/desktop/tools/perplexity.md new file mode 100644 index 0000000..2eb28d1 --- /dev/null +++ b/custom-skills/13-seo-schema-validator/desktop/tools/perplexity.md @@ -0,0 +1,15 @@ +# Perplexity + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/14-seo-schema-generator/desktop/SKILL.md b/custom-skills/14-seo-schema-generator/desktop/SKILL.md index ef45139..055a4d3 100644 --- a/custom-skills/14-seo-schema-generator/desktop/SKILL.md +++ b/custom-skills/14-seo-schema-generator/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-schema-generator -description: "Schema markup generator for JSON-LD structured data. Triggers: generate schema, create JSON-LD, add structured data, schema markup." -allowed-tools: mcp__firecrawl__*, mcp__perplexity__* ---- - # SEO Schema Generator ## Purpose diff --git a/custom-skills/14-seo-schema-generator/desktop/skill.yaml b/custom-skills/14-seo-schema-generator/desktop/skill.yaml new file mode 100644 index 0000000..fa3ca0a --- /dev/null +++ b/custom-skills/14-seo-schema-generator/desktop/skill.yaml @@ -0,0 +1,12 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-schema-generator +description: | + Schema markup generator for JSON-LD structured data. Triggers: generate schema, create JSON-LD, add structured data, schema markup. + +# Optional fields +allowed-tools: + - mcp__firecrawl__* + - mcp__perplexity__* + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/14-seo-schema-generator/desktop/tools/firecrawl.md b/custom-skills/14-seo-schema-generator/desktop/tools/firecrawl.md new file mode 100644 index 0000000..c9c1465 --- /dev/null +++ b/custom-skills/14-seo-schema-generator/desktop/tools/firecrawl.md @@ -0,0 +1,15 @@ +# Firecrawl + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/14-seo-schema-generator/desktop/tools/perplexity.md b/custom-skills/14-seo-schema-generator/desktop/tools/perplexity.md new file mode 100644 index 0000000..2eb28d1 --- /dev/null +++ b/custom-skills/14-seo-schema-generator/desktop/tools/perplexity.md @@ -0,0 +1,15 @@ +# Perplexity + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/15-seo-core-web-vitals/desktop/SKILL.md b/custom-skills/15-seo-core-web-vitals/desktop/SKILL.md index 6429ad0..46bfa78 100644 --- a/custom-skills/15-seo-core-web-vitals/desktop/SKILL.md +++ b/custom-skills/15-seo-core-web-vitals/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-core-web-vitals -description: "Core Web Vitals analyzer for LCP, FID, CLS, INP performance metrics. Triggers: Core Web Vitals, page speed, LCP, CLS, FID, INP, performance." -allowed-tools: mcp__firecrawl__*, mcp__perplexity__* ---- - # SEO Core Web Vitals ## Purpose diff --git a/custom-skills/15-seo-core-web-vitals/desktop/skill.yaml b/custom-skills/15-seo-core-web-vitals/desktop/skill.yaml new file mode 100644 index 0000000..c4ac085 --- /dev/null +++ b/custom-skills/15-seo-core-web-vitals/desktop/skill.yaml @@ -0,0 +1,12 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-core-web-vitals +description: | + Core Web Vitals analyzer for LCP, FID, CLS, INP performance metrics. Triggers: Core Web Vitals, page speed, LCP, CLS, FID, INP, performance. + +# Optional fields +allowed-tools: + - mcp__firecrawl__* + - mcp__perplexity__* + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/15-seo-core-web-vitals/desktop/tools/firecrawl.md b/custom-skills/15-seo-core-web-vitals/desktop/tools/firecrawl.md new file mode 100644 index 0000000..c9c1465 --- /dev/null +++ b/custom-skills/15-seo-core-web-vitals/desktop/tools/firecrawl.md @@ -0,0 +1,15 @@ +# Firecrawl + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/15-seo-core-web-vitals/desktop/tools/perplexity.md b/custom-skills/15-seo-core-web-vitals/desktop/tools/perplexity.md new file mode 100644 index 0000000..2eb28d1 --- /dev/null +++ b/custom-skills/15-seo-core-web-vitals/desktop/tools/perplexity.md @@ -0,0 +1,15 @@ +# Perplexity + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/16-seo-search-console/desktop/SKILL.md b/custom-skills/16-seo-search-console/desktop/SKILL.md index 431e05a..e7e69f4 100644 --- a/custom-skills/16-seo-search-console/desktop/SKILL.md +++ b/custom-skills/16-seo-search-console/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-search-console -description: "Google Search Console data analyzer for rankings, CTR, impressions, and index coverage. Triggers: Search Console, GSC, rankings, search performance, impressions, CTR." -allowed-tools: mcp__perplexity__*, mcp__notion__* ---- - # SEO Search Console ## Purpose diff --git a/custom-skills/16-seo-search-console/desktop/skill.yaml b/custom-skills/16-seo-search-console/desktop/skill.yaml new file mode 100644 index 0000000..4c0b615 --- /dev/null +++ b/custom-skills/16-seo-search-console/desktop/skill.yaml @@ -0,0 +1,12 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-search-console +description: | + Google Search Console data analyzer for rankings, CTR, impressions, and index coverage. Triggers: Search Console, GSC, rankings, search performance, impressions, CTR. + +# Optional fields +allowed-tools: + - mcp__perplexity__* + - mcp__notion__* + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/16-seo-search-console/desktop/tools/notion.md b/custom-skills/16-seo-search-console/desktop/tools/notion.md new file mode 100644 index 0000000..153e086 --- /dev/null +++ b/custom-skills/16-seo-search-console/desktop/tools/notion.md @@ -0,0 +1,15 @@ +# Notion + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/16-seo-search-console/desktop/tools/perplexity.md b/custom-skills/16-seo-search-console/desktop/tools/perplexity.md new file mode 100644 index 0000000..2eb28d1 --- /dev/null +++ b/custom-skills/16-seo-search-console/desktop/tools/perplexity.md @@ -0,0 +1,15 @@ +# Perplexity + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/17-seo-gateway-architect/desktop/SKILL.md b/custom-skills/17-seo-gateway-architect/desktop/SKILL.md index 19807aa..ab1f2b0 100644 --- a/custom-skills/17-seo-gateway-architect/desktop/SKILL.md +++ b/custom-skills/17-seo-gateway-architect/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: seo-gateway-strategist -description: Creates comprehensive SEO-focused gateway page strategies for Korean medical/service websites -license: OurDigital internal-use ONLY ---- - # SEO Gateway Page Strategist This skill helps you create comprehensive SEO-focused gateway page strategies for Korean medical/service websites, optimized for both Naver and Google. diff --git a/custom-skills/17-seo-gateway-architect/desktop/skill.yaml b/custom-skills/17-seo-gateway-architect/desktop/skill.yaml new file mode 100644 index 0000000..f543c07 --- /dev/null +++ b/custom-skills/17-seo-gateway-architect/desktop/skill.yaml @@ -0,0 +1,11 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: seo-gateway-strategist +description: | + Creates comprehensive SEO-focused gateway page strategies for Korean medical/service websites + +# Optional fields + +license: OurDigital internal-use ONLY + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/18-seo-gateway-builder/desktop/SKILL.md b/custom-skills/18-seo-gateway-builder/desktop/SKILL.md index 864f6f2..03bd13a 100644 --- a/custom-skills/18-seo-gateway-builder/desktop/SKILL.md +++ b/custom-skills/18-seo-gateway-builder/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: gateway-page-content-builder -description: Systematic content generation framework for SEO-optimized gateway pages with local service focus -license: OurDigital internal-use ONLY ---- - # Gateway Page Content Builder A comprehensive skill for building high-quality, SEO-optimized gateway page content for local services, medical practices, and business locations. diff --git a/custom-skills/18-seo-gateway-builder/desktop/skill.yaml b/custom-skills/18-seo-gateway-builder/desktop/skill.yaml new file mode 100644 index 0000000..03954d2 --- /dev/null +++ b/custom-skills/18-seo-gateway-builder/desktop/skill.yaml @@ -0,0 +1,11 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: gateway-page-content-builder +description: | + Systematic content generation framework for SEO-optimized gateway pages with local service focus + +# Optional fields + +license: OurDigital internal-use ONLY + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/20-gtm-audit/desktop/SKILL.md b/custom-skills/20-gtm-audit/desktop/SKILL.md index 08a3357..d86a054 100644 --- a/custom-skills/20-gtm-audit/desktop/SKILL.md +++ b/custom-skills/20-gtm-audit/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: gtm-audit -description: Automated Google Tag Manager audit and validation toolkit. Use when auditing GTM container installations, verifying tag firing, debugging dataLayer events, form tracking validation, e-commerce checkout flow testing, or generating tag implementation reports. Triggers on GTM audit, tag debugging, dataLayer inspection, form submission tracking, checkout funnel analysis, conversion tracking validation, GA4/Meta/LinkedIn pixel verification requests. ---- - # GTM Audit Skill Automated audit workflow for GTM containers using **Chrome DevTools MCP** for browser inspection and **DTM Agent MCP** for GTM API operations. diff --git a/custom-skills/20-gtm-audit/desktop/skill.yaml b/custom-skills/20-gtm-audit/desktop/skill.yaml new file mode 100644 index 0000000..3d65a02 --- /dev/null +++ b/custom-skills/20-gtm-audit/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: gtm-audit +description: | + Automated Google Tag Manager audit and validation toolkit. Use when auditing GTM container installations, verifying tag firing, debugging dataLayer events, form tracking validation, e-commerce checkout flow testing, or generating tag implementation reports. Triggers on GTM audit, tag debugging, dataLayer inspection, form submission tracking, checkout funnel analysis, conversion tracking validation, GA4/Meta/LinkedIn pixel verification requests. + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/22-gtm-guardian/desktop/SKILL.md b/custom-skills/22-gtm-guardian/desktop/SKILL.md index e780827..4597ec2 100644 --- a/custom-skills/22-gtm-guardian/desktop/SKILL.md +++ b/custom-skills/22-gtm-guardian/desktop/SKILL.md @@ -1,18 +1,3 @@ ---- -name: gtm-guardian -description: | - Google Tag Manager 태깅 전략 수립부터 구현까지 7단계 워크플로우를 지원하는 SMART Tool. - - Triggers: - - GTM 태깅 계획, Tagging Plan 작성, 이벤트 설계 - - DataLayer 스키마 설계, dataLayer 구현 가이드 - - 사용자 행동 분석, User Behaviour Modeling, KPI 정의 - - Event Taxonomy, 이벤트 택소노미, 이벤트 명명 규칙 - - GTM 구현 가이드, 태그 설정 체크리스트 - - Server-side GTM, sGTM, Stape, Google Tag Gateway - - GA4 이벤트, Meta Pixel, Kakao Pixel, Google Ads 전환 추적 ---- - # GTM Guardian (Desktop) GTM(Google Tag Manager) 태깅 전략 수립부터 구현까지의 전체 라이프사이클을 지원하는 7단계 워크플로우 스킬. diff --git a/custom-skills/22-gtm-guardian/desktop/skill.yaml b/custom-skills/22-gtm-guardian/desktop/skill.yaml new file mode 100644 index 0000000..33ca13a --- /dev/null +++ b/custom-skills/22-gtm-guardian/desktop/skill.yaml @@ -0,0 +1,18 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: gtm-guardian +description: | + Google Tag Manager 태깅 전략 수립부터 구현까지 7단계 워크플로우를 지원하는 SMART Tool. + + Triggers: + - GTM 태깅 계획, Tagging Plan 작성, 이벤트 설계 + - DataLayer 스키마 설계, dataLayer 구현 가이드 + - 사용자 행동 분석, User Behaviour Modeling, KPI 정의 + - Event Taxonomy, 이벤트 택소노미, 이벤트 명명 규칙 + - GTM 구현 가이드, 태그 설정 체크리스트 + - Server-side GTM, sGTM, Stape, Google Tag Gateway + - GA4 이벤트, Meta Pixel, Kakao Pixel, Google Ads 전환 추적 + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/31-notion-organizer/desktop/SKILL.md b/custom-skills/31-notion-organizer/desktop/SKILL.md index 600321b..6d208c1 100644 --- a/custom-skills/31-notion-organizer/desktop/SKILL.md +++ b/custom-skills/31-notion-organizer/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: notion-organizer -description: Notion workspace management agent for organizing, restructuring, consolidating, and maintaining databases and pages. Use when user asks to search Notion, organize databases, clean up properties, migrate data, merge databases, audit schemas, or manage Notion content. Activates for keywords like Notion, database, knowledge base, wiki, workspace organization. -allowed-tools: mcp__notion__*, Read, Write, Edit, Bash(python:*), Bash(pip:*) ---- - # Notion Organizer Skill ## Purpose diff --git a/custom-skills/31-notion-organizer/desktop/skill.yaml b/custom-skills/31-notion-organizer/desktop/skill.yaml new file mode 100644 index 0000000..938ac46 --- /dev/null +++ b/custom-skills/31-notion-organizer/desktop/skill.yaml @@ -0,0 +1,16 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: notion-organizer +description: | + Notion workspace management agent for organizing, restructuring, consolidating, and maintaining databases and pages. Use when user asks to search Notion, organize databases, clean up properties, migrate data, merge databases, audit schemas, or manage Notion content. Activates for keywords like Notion, database, knowledge base, wiki, workspace organization. + +# Optional fields +allowed-tools: + - mcp__notion__* + - Read + - Write + - Edit + - Bash(python:*) + - Bash(pip:*) + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/31-notion-organizer/desktop/tools/claude-core.md b/custom-skills/31-notion-organizer/desktop/tools/claude-core.md new file mode 100644 index 0000000..b70a00c --- /dev/null +++ b/custom-skills/31-notion-organizer/desktop/tools/claude-core.md @@ -0,0 +1,15 @@ +# Claude Core Tools (Read, Write, Edit, Bash, Glob, Grep) + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/31-notion-organizer/desktop/tools/notion.md b/custom-skills/31-notion-organizer/desktop/tools/notion.md new file mode 100644 index 0000000..153e086 --- /dev/null +++ b/custom-skills/31-notion-organizer/desktop/tools/notion.md @@ -0,0 +1,15 @@ +# Notion + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/32-notion-writer/desktop/SKILL.md b/custom-skills/32-notion-writer/desktop/SKILL.md index e38fde4..1840816 100644 --- a/custom-skills/32-notion-writer/desktop/SKILL.md +++ b/custom-skills/32-notion-writer/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: notion-writer -description: Push markdown content to Notion pages or databases. Supports appending to pages, replacing page content, creating database rows, listing accessible content, and getting page/database info. Use when working with Notion documentation, saving reports to Notion, or managing Notion content programmatically. -allowed-tools: Read, Glob, Grep, Write, Edit, Bash ---- - # Notion Writer Skill Push markdown content to Notion pages or databases via Claude Code. diff --git a/custom-skills/32-notion-writer/desktop/skill.yaml b/custom-skills/32-notion-writer/desktop/skill.yaml new file mode 100644 index 0000000..621be20 --- /dev/null +++ b/custom-skills/32-notion-writer/desktop/skill.yaml @@ -0,0 +1,16 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: notion-writer +description: | + Push markdown content to Notion pages or databases. Supports appending to pages, replacing page content, creating database rows, listing accessible content, and getting page/database info. Use when working with Notion documentation, saving reports to Notion, or managing Notion content programmatically. + +# Optional fields +allowed-tools: + - Read + - Glob + - Grep + - Write + - Edit + - Bash + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/32-notion-writer/desktop/tools/claude-core.md b/custom-skills/32-notion-writer/desktop/tools/claude-core.md new file mode 100644 index 0000000..b70a00c --- /dev/null +++ b/custom-skills/32-notion-writer/desktop/tools/claude-core.md @@ -0,0 +1,15 @@ +# Claude Core Tools (Read, Write, Edit, Bash, Glob, Grep) + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/40-jamie-brand-editor/desktop/SKILL.md b/custom-skills/40-jamie-brand-editor/desktop/SKILL.md index eeb024e..73d87d2 100644 --- a/custom-skills/40-jamie-brand-editor/desktop/SKILL.md +++ b/custom-skills/40-jamie-brand-editor/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: jamie-brand-editor -description: "Branded content generator for Jamie Plastic Surgery Clinic (제이미성형외과). Creates new marketing content including blog posts, ad copy, social media content, and procedure pages following Jamie's brand voice and Korean medical advertising regulations. Use when generating NEW content for Jamie clinic - triggers: write Jamie blog, create ad copy, draft procedure page, 제이미 블로그 작성, 광고 카피 생성. For reviewing/correcting existing content, use jamie-brand-guardian instead." -license: Internal-use Only ---- - # Jamie Brand Editor Skill > **Purpose**: Generate branded content for Jamie Plastic Surgery Clinic diff --git a/custom-skills/40-jamie-brand-editor/desktop/skill.yaml b/custom-skills/40-jamie-brand-editor/desktop/skill.yaml new file mode 100644 index 0000000..46ba5cb --- /dev/null +++ b/custom-skills/40-jamie-brand-editor/desktop/skill.yaml @@ -0,0 +1,11 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: jamie-brand-editor +description: | + Branded content generator for Jamie Plastic Surgery Clinic (제이미성형외과). Creates new marketing content including blog posts, ad copy, social media content, and procedure pages following Jamie's brand voice and Korean medical advertising regulations. Use when generating NEW content for Jamie clinic - triggers: write Jamie blog, create ad copy, draft procedure page, 제이미 블로그 작성, 광고 카피 생성. For reviewing/correcting existing content, use jamie-brand-guardian instead. + +# Optional fields + +license: Internal-use Only + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/41-jamie-brand-audit/desktop/SKILL.md b/custom-skills/41-jamie-brand-audit/desktop/SKILL.md index 58cb229..b18f990 100644 --- a/custom-skills/41-jamie-brand-audit/desktop/SKILL.md +++ b/custom-skills/41-jamie-brand-audit/desktop/SKILL.md @@ -1,9 +1,3 @@ ---- -name: jamie-brand-guardian -description: "Brand compliance reviewer for Jamie Plastic Surgery Clinic (제이미성형외과). Reviews, corrects, and evaluates EXISTING content for brand compliance, tone/voice alignment, and Korean medical advertising regulations. Use when given content to review - triggers: review this content, check brand compliance, 이 콘텐츠 검토해줘, 브랜드 적합성 평가. For generating NEW content, use jamie-brand-editor instead." -allowed-tools: Read, Glob, Grep, Write, Edit ---- - # Jamie Clinic Brand Guardian Skill > **브랜드**: 제이미성형외과 (Jamie Plastic Surgery Clinic) diff --git a/custom-skills/41-jamie-brand-audit/desktop/skill.yaml b/custom-skills/41-jamie-brand-audit/desktop/skill.yaml new file mode 100644 index 0000000..181829d --- /dev/null +++ b/custom-skills/41-jamie-brand-audit/desktop/skill.yaml @@ -0,0 +1,15 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: jamie-brand-guardian +description: | + Brand compliance reviewer for Jamie Plastic Surgery Clinic (제이미성형외과). Reviews, corrects, and evaluates EXISTING content for brand compliance, tone/voice alignment, and Korean medical advertising regulations. Use when given content to review - triggers: review this content, check brand compliance, 이 콘텐츠 검토해줘, 브랜드 적합성 평가. For generating NEW content, use jamie-brand-editor instead. + +# Optional fields +allowed-tools: + - Read + - Glob + - Grep + - Write + - Edit + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/41-jamie-brand-audit/desktop/tools/claude-core.md b/custom-skills/41-jamie-brand-audit/desktop/tools/claude-core.md new file mode 100644 index 0000000..b70a00c --- /dev/null +++ b/custom-skills/41-jamie-brand-audit/desktop/tools/claude-core.md @@ -0,0 +1,15 @@ +# Claude Core Tools (Read, Write, Edit, Bash, Glob, Grep) + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/42-jamie-instagram-manager/desktop/SKILL.md b/custom-skills/42-jamie-instagram-manager/desktop/SKILL.md index 61ca1b4..345e0c8 100644 --- a/custom-skills/42-jamie-instagram-manager/desktop/SKILL.md +++ b/custom-skills/42-jamie-instagram-manager/desktop/SKILL.md @@ -1,10 +1,3 @@ ---- -name: jamie-instagram-manager -description: | - Instagram Account Manager for Jamie Plastic Surgery Clinic (제이미성형외과). Manages Instagram presence including: account status analysis, follower engagement (reply/comment suggestions), content planning (3-4x weekly), storytelling ideation, and post boost strategies. Integrates with Instagram Graph API via MCP. Use when managing Jamie's Instagram account - triggers: "Instagram 관리", "인스타그램 댓글", "Instagram engagement", "posting plan", "follower reply", "boost post", "스토리 아이디어". For content generation, use jamie-brand-editor; for compliance review, use jamie-brand-guardian. -license: Internal-use Only ---- - # Jamie Instagram Manager Skill > **Purpose**: Dedicated Instagram Account Manager for Jamie Plastic Surgery Clinic diff --git a/custom-skills/42-jamie-instagram-manager/desktop/skill.yaml b/custom-skills/42-jamie-instagram-manager/desktop/skill.yaml new file mode 100644 index 0000000..4dfe241 --- /dev/null +++ b/custom-skills/42-jamie-instagram-manager/desktop/skill.yaml @@ -0,0 +1,11 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: jamie-instagram-manager +description: | + Instagram Account Manager for Jamie Plastic Surgery Clinic (제이미성형외과). Manages Instagram presence including: account status analysis, follower engagement (reply/comment suggestions), content planning (3-4x weekly), storytelling ideation, and post boost strategies. Integrates with Instagram Graph API via MCP. Use when managing Jamie's Instagram account - triggers: "Instagram 관리", "인스타그램 댓글", "Instagram engagement", "posting plan", "follower reply", "boost post", "스토리 아이디어". For content generation, use jamie-brand-editor; for compliance review, use jamie-brand-guardian. + +# Optional fields + +license: Internal-use Only + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/43-jamie-youtube-manager/desktop/SKILL.md b/custom-skills/43-jamie-youtube-manager/desktop/SKILL.md index 96f11c5..414aa36 100644 --- a/custom-skills/43-jamie-youtube-manager/desktop/SKILL.md +++ b/custom-skills/43-jamie-youtube-manager/desktop/SKILL.md @@ -1,11 +1,3 @@ ---- -name: jamie-youtube-manager -description: | - YouTube Channel Manager and SEO Auditor for Jamie Plastic Surgery Clinic (제이미성형외과). Includes CLI scripts for API-based channel/video management and SEO audit capabilities. Check video status, get channel statistics, fetch video info from URLs, batch update metadata, and audit videos for SEO optimization (title, description, tags, timestamps, schema). Use when working with Jamie YouTube content - triggers: "YouTube 감사", "유튜브 SEO", "video audit", "check video", "channel status", "영상 최적화", "챕터 확인". -allowed-tools: Read, Glob, Grep, Write, Edit, Bash, WebFetch -license: Internal-use Only ---- - # Jamie YouTube Manager Skill > **Purpose**: YouTube Channel SEO Auditor & Content Manager for Jamie Plastic Surgery Clinic diff --git a/custom-skills/43-jamie-youtube-manager/desktop/skill.yaml b/custom-skills/43-jamie-youtube-manager/desktop/skill.yaml new file mode 100644 index 0000000..e565eff --- /dev/null +++ b/custom-skills/43-jamie-youtube-manager/desktop/skill.yaml @@ -0,0 +1,19 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: jamie-youtube-manager +description: | + YouTube Channel Manager and SEO Auditor for Jamie Plastic Surgery Clinic (제이미성형외과). Includes CLI scripts for API-based channel/video management and SEO audit capabilities. Check video status, get channel statistics, fetch video info from URLs, batch update metadata, and audit videos for SEO optimization (title, description, tags, timestamps, schema). Use when working with Jamie YouTube content - triggers: "YouTube 감사", "유튜브 SEO", "video audit", "check video", "channel status", "영상 최적화", "챕터 확인". + +# Optional fields +allowed-tools: + - Read + - Glob + - Grep + - Write + - Edit + - Bash + - WebFetch + +license: Internal-use Only + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/43-jamie-youtube-manager/desktop/tools/claude-core.md b/custom-skills/43-jamie-youtube-manager/desktop/tools/claude-core.md new file mode 100644 index 0000000..b70a00c --- /dev/null +++ b/custom-skills/43-jamie-youtube-manager/desktop/tools/claude-core.md @@ -0,0 +1,15 @@ +# Claude Core Tools (Read, Write, Edit, Bash, Glob, Grep) + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/43-jamie-youtube-manager/desktop/tools/webfetch.md b/custom-skills/43-jamie-youtube-manager/desktop/tools/webfetch.md new file mode 100644 index 0000000..2f75e54 --- /dev/null +++ b/custom-skills/43-jamie-youtube-manager/desktop/tools/webfetch.md @@ -0,0 +1,15 @@ +# WebFetch + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples diff --git a/custom-skills/44-jamie-youtube-subtitle-checker/desktop/SKILL.md b/custom-skills/44-jamie-youtube-subtitle-checker/desktop/SKILL.md index ed85f7d..4b7ded2 100644 --- a/custom-skills/44-jamie-youtube-subtitle-checker/desktop/SKILL.md +++ b/custom-skills/44-jamie-youtube-subtitle-checker/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: jamie-subtitle-editor -description: "YouTube 자막 편집기 for Jamie Plastic Surgery Clinic. SBV 포맷 자막 파일의 오타 교정, 의학 용어 표준화, 챕터 타임스탬프 추출, YouTube 메타데이터 생성을 수행합니다. 자막 교정, subtitle 오타, SBV 편집, 챕터 추출, 유튜브 자막, caption 수정, 타임스탬프 생성 요청 시 사용하세요." ---- - # Jamie YouTube Subtitle Editor Skill > **Purpose**: SBV 자막 파일 오타 교정 및 YouTube 메타데이터 생성 diff --git a/custom-skills/44-jamie-youtube-subtitle-checker/desktop/skill.yaml b/custom-skills/44-jamie-youtube-subtitle-checker/desktop/skill.yaml new file mode 100644 index 0000000..adf32ba --- /dev/null +++ b/custom-skills/44-jamie-youtube-subtitle-checker/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: jamie-subtitle-editor +description: | + YouTube 자막 편집기 for Jamie Plastic Surgery Clinic. SBV 포맷 자막 파일의 오타 교정, 의학 용어 표준화, 챕터 타임스탬프 추출, YouTube 메타데이터 생성을 수행합니다. 자막 교정, subtitle 오타, SBV 편집, 챕터 추출, 유튜브 자막, caption 수정, 타임스탬프 생성 요청 시 사용하세요. + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/01-reference-discovery/desktop/SKILL.md b/custom-skills/90-reference-curator/01-reference-discovery/desktop/SKILL.md index 13d90a1..f23563f 100644 --- a/custom-skills/90-reference-curator/01-reference-discovery/desktop/SKILL.md +++ b/custom-skills/90-reference-curator/01-reference-discovery/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: reference-discovery -description: Search and identify authoritative sources for reference materials. Validates source credibility, prioritizes by relevance, and outputs curated URL lists with metadata. Triggers on "find references", "search documentation", "discover sources", "find authoritative materials", "research topic sources". ---- - # Reference Discovery Searches for authoritative sources, validates credibility, and produces curated URL lists for crawling. diff --git a/custom-skills/90-reference-curator/01-reference-discovery/desktop/skill.yaml b/custom-skills/90-reference-curator/01-reference-discovery/desktop/skill.yaml new file mode 100644 index 0000000..4918c6c --- /dev/null +++ b/custom-skills/90-reference-curator/01-reference-discovery/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: reference-discovery +description: | + Search and identify authoritative sources for reference materials. Validates source credibility, prioritizes by relevance, and outputs curated URL lists with metadata. Triggers on "find references", "search documentation", "discover sources", "find authoritative materials", "research topic sources". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/02-web-crawler-orchestrator/desktop/SKILL.md b/custom-skills/90-reference-curator/02-web-crawler-orchestrator/desktop/SKILL.md index 6762c87..be0a22d 100644 --- a/custom-skills/90-reference-curator/02-web-crawler-orchestrator/desktop/SKILL.md +++ b/custom-skills/90-reference-curator/02-web-crawler-orchestrator/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: web-crawler-orchestrator -description: Orchestrates web crawling using Firecrawl MCP. Handles rate limiting, selects crawl strategies, manages formats (HTML/PDF/markdown), and produces raw content with manifests. Triggers on "crawl URLs", "fetch documents", "scrape pages", "download references", "Firecrawl crawl". ---- - # Web Crawler Orchestrator Manages crawling operations using Firecrawl MCP with rate limiting and format handling. diff --git a/custom-skills/90-reference-curator/02-web-crawler-orchestrator/desktop/skill.yaml b/custom-skills/90-reference-curator/02-web-crawler-orchestrator/desktop/skill.yaml new file mode 100644 index 0000000..a5afdd9 --- /dev/null +++ b/custom-skills/90-reference-curator/02-web-crawler-orchestrator/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: web-crawler-orchestrator +description: | + Orchestrates web crawling using Firecrawl MCP. Handles rate limiting, selects crawl strategies, manages formats (HTML/PDF/markdown), and produces raw content with manifests. Triggers on "crawl URLs", "fetch documents", "scrape pages", "download references", "Firecrawl crawl". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/03-content-repository/desktop/SKILL.md b/custom-skills/90-reference-curator/03-content-repository/desktop/SKILL.md index efa5c7c..92fd46c 100644 --- a/custom-skills/90-reference-curator/03-content-repository/desktop/SKILL.md +++ b/custom-skills/90-reference-curator/03-content-repository/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: content-repository -description: MySQL storage management for reference library. Use when storing crawled content, managing document versions, deduplicating URLs, querying stored references, or tracking document metadata. Triggers on keywords like "store content", "save to database", "check duplicates", "version tracking", "document retrieval", "reference library DB". ---- - # Content Repository Manages MySQL storage for the reference library system. Handles document storage, version control, deduplication, and retrieval. diff --git a/custom-skills/90-reference-curator/03-content-repository/desktop/skill.yaml b/custom-skills/90-reference-curator/03-content-repository/desktop/skill.yaml new file mode 100644 index 0000000..993ce28 --- /dev/null +++ b/custom-skills/90-reference-curator/03-content-repository/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: content-repository +description: | + MySQL storage management for reference library. Use when storing crawled content, managing document versions, deduplicating URLs, querying stored references, or tracking document metadata. Triggers on keywords like "store content", "save to database", "check duplicates", "version tracking", "document retrieval", "reference library DB". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/04-content-distiller/desktop/SKILL.md b/custom-skills/90-reference-curator/04-content-distiller/desktop/SKILL.md index 40aecfc..0fde1e0 100644 --- a/custom-skills/90-reference-curator/04-content-distiller/desktop/SKILL.md +++ b/custom-skills/90-reference-curator/04-content-distiller/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: content-distiller -description: Analyzes and distills raw crawled content into concise reference materials. Extracts key concepts, code snippets, and creates structured summaries optimized for prompt engineering use cases. Triggers on "distill content", "summarize document", "extract key concepts", "process raw content", "create reference summary". ---- - # Content Distiller Transforms raw crawled content into structured, high-quality reference materials. diff --git a/custom-skills/90-reference-curator/04-content-distiller/desktop/skill.yaml b/custom-skills/90-reference-curator/04-content-distiller/desktop/skill.yaml new file mode 100644 index 0000000..0a308ec --- /dev/null +++ b/custom-skills/90-reference-curator/04-content-distiller/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: content-distiller +description: | + Analyzes and distills raw crawled content into concise reference materials. Extracts key concepts, code snippets, and creates structured summaries optimized for prompt engineering use cases. Triggers on "distill content", "summarize document", "extract key concepts", "process raw content", "create reference summary". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/05-quality-reviewer/desktop/SKILL.md b/custom-skills/90-reference-curator/05-quality-reviewer/desktop/SKILL.md index 9df2367..42818df 100644 --- a/custom-skills/90-reference-curator/05-quality-reviewer/desktop/SKILL.md +++ b/custom-skills/90-reference-curator/05-quality-reviewer/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: quality-reviewer -description: QA loop for reference library content. Scores distilled materials against prompt engineering quality criteria, routes decisions (approve/refactor/deep_research/reject), and provides actionable feedback. Triggers on "review content", "quality check", "QA review", "assess distilled content", "check reference quality", "refactoring needed". ---- - # Quality Reviewer Evaluates distilled content for quality, routes decisions, and triggers refactoring or additional research when needed. diff --git a/custom-skills/90-reference-curator/05-quality-reviewer/desktop/skill.yaml b/custom-skills/90-reference-curator/05-quality-reviewer/desktop/skill.yaml new file mode 100644 index 0000000..0d234e5 --- /dev/null +++ b/custom-skills/90-reference-curator/05-quality-reviewer/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: quality-reviewer +description: | + QA loop for reference library content. Scores distilled materials against prompt engineering quality criteria, routes decisions (approve/refactor/deep_research/reject), and provides actionable feedback. Triggers on "review content", "quality check", "QA review", "assess distilled content", "check reference quality", "refactoring needed". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/06-markdown-exporter/desktop/SKILL.md b/custom-skills/90-reference-curator/06-markdown-exporter/desktop/SKILL.md index 5274dc3..2133ddb 100644 --- a/custom-skills/90-reference-curator/06-markdown-exporter/desktop/SKILL.md +++ b/custom-skills/90-reference-curator/06-markdown-exporter/desktop/SKILL.md @@ -1,8 +1,3 @@ ---- -name: markdown-exporter -description: Exports approved reference content as structured markdown files for project knowledge or fine-tuning datasets. Generates INDEX files, organizes by topic, and maintains cross-references. Triggers on "export references", "generate project files", "create markdown output", "export for fine-tuning", "build knowledge base". ---- - # Markdown Exporter Exports approved content as structured markdown files for Claude Projects or fine-tuning. diff --git a/custom-skills/90-reference-curator/06-markdown-exporter/desktop/skill.yaml b/custom-skills/90-reference-curator/06-markdown-exporter/desktop/skill.yaml new file mode 100644 index 0000000..492a8a5 --- /dev/null +++ b/custom-skills/90-reference-curator/06-markdown-exporter/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: markdown-exporter +description: | + Exports approved reference content as structured markdown files for project knowledge or fine-tuning datasets. Generates INDEX files, organizes by topic, and maintains cross-references. Triggers on "export references", "generate project files", "create markdown output", "export for fine-tuning", "build knowledge base". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/07-pipeline-orchestrator/code/CLAUDE.md b/custom-skills/90-reference-curator/07-pipeline-orchestrator/code/CLAUDE.md new file mode 100644 index 0000000..c6ff995 --- /dev/null +++ b/custom-skills/90-reference-curator/07-pipeline-orchestrator/code/CLAUDE.md @@ -0,0 +1,296 @@ +# Pipeline Orchestrator + +Coordinates the full 6-skill reference curation workflow with QA loop handling. + +## Trigger Keywords +"curate references", "full pipeline", "run curation", "reference-curator-pipeline" + +## Architecture + +``` +[Input] → discovery → crawler → repository → distiller ◄──┐ + │ │ + reviewer │ + │ │ + ┌───────────────────────────────┼─────┤ + ▼ ▼ ▼ │ + APPROVE REJECT REFACTOR ────┤ + │ │ │ + ▼ ▼ DEEP_RESEARCH + export archive │ + ▼ + crawler ─┘ +``` + +## Input Detection + +Parse input to determine mode: + +```python +def detect_input_mode(input_value): + if input_value.endswith('.json') and os.path.exists(input_value): + return 'manifest' + elif input_value.startswith('http://') or input_value.startswith('https://'): + return 'urls' + else: + return 'topic' +``` + +## Pipeline Execution + +### Stage 1: Reference Discovery (Topic Mode Only) + +```bash +# Skip if input mode is 'urls' or 'manifest' +if mode == 'topic': + /reference-discovery "$TOPIC" --max-sources $MAX_SOURCES + # Output: manifest.json +``` + +### Stage 2: Web Crawler + +```bash +# From manifest or URLs +/web-crawler $INPUT --max-pages $MAX_PAGES +# Output: crawled files in ~/reference-library/raw/ +``` + +### Stage 3: Content Repository + +```bash +/content-repository store +# Output: documents stored in MySQL or file-based storage +``` + +### Stage 4: Content Distiller + +```bash +/content-distiller all-pending +# Output: distilled content records +``` + +### Stage 5: Quality Reviewer + +```bash +if auto_approve: + /quality-reviewer all-pending --auto-approve --threshold $THRESHOLD +else: + /quality-reviewer all-pending +``` + +Handle QA decisions: +- **APPROVE**: Add to export queue +- **REFACTOR**: Re-run distiller with feedback (track iteration count) +- **DEEP_RESEARCH**: Run crawler for additional sources, then distill +- **REJECT**: Archive with reason + +### Stage 6: Markdown Exporter + +```bash +/markdown-exporter $EXPORT_FORMAT +# Output: files in ~/reference-library/exports/ +``` + +## State Management + +### Initialize Pipeline State + +```python +def init_pipeline_state(run_id, input_value, options): + state = { + "run_id": run_id, + "run_type": detect_input_mode(input_value), + "input_value": input_value, + "status": "running", + "current_stage": "discovery", + "options": options, + "stats": { + "sources_discovered": 0, + "pages_crawled": 0, + "documents_stored": 0, + "documents_distilled": 0, + "approved": 0, + "refactored": 0, + "deep_researched": 0, + "rejected": 0, + "needs_manual_review": 0 + }, + "started_at": datetime.now().isoformat() + } + save_state(run_id, state) + return state +``` + +### MySQL State (Preferred) + +```sql +INSERT INTO pipeline_runs (run_type, input_value, options) +VALUES ('topic', 'Claude system prompts', '{"max_sources": 10}'); +``` + +### File-Based Fallback + +``` +~/reference-library/pipeline_state/run_XXX/ +├── state.json # Current stage and stats +├── manifest.json # Discovered sources +├── crawl_results.json # Crawled document paths +├── review_log.json # QA decisions per document +└── errors.log # Any errors encountered +``` + +## QA Loop Logic + +```python +MAX_REFACTOR_ITERATIONS = 3 +MAX_DEEP_RESEARCH_ITERATIONS = 2 +MAX_TOTAL_ITERATIONS = 5 + +def handle_qa_decision(doc_id, decision, iteration_counts): + refactor_count = iteration_counts.get('refactor', 0) + research_count = iteration_counts.get('deep_research', 0) + total = refactor_count + research_count + + if total >= MAX_TOTAL_ITERATIONS: + return 'needs_manual_review' + + if decision == 'refactor': + if refactor_count >= MAX_REFACTOR_ITERATIONS: + return 'needs_manual_review' + iteration_counts['refactor'] = refactor_count + 1 + return 're_distill' + + if decision == 'deep_research': + if research_count >= MAX_DEEP_RESEARCH_ITERATIONS: + return 'needs_manual_review' + iteration_counts['deep_research'] = research_count + 1 + return 're_crawl_and_distill' + + return decision # approve or reject +``` + +## Checkpoint Strategy + +Save checkpoint after each stage completes: + +| Stage | Checkpoint | Resume Point | +|-------|------------|--------------| +| discovery | `manifest.json` created | → crawler | +| crawl | `crawl_results.json` | → repository | +| store | DB records or file list | → distiller | +| distill | distilled_content records | → reviewer | +| review | review_logs records | → exporter or loop | +| export | final export complete | Done | + +## Progress Reporting + +Report progress to user at key checkpoints: + +``` +[Pipeline] Stage 1/6: Discovery - Found 8 sources +[Pipeline] Stage 2/6: Crawling - 45/50 pages complete +[Pipeline] Stage 3/6: Storing - 45 documents saved +[Pipeline] Stage 4/6: Distilling - 45 documents processed +[Pipeline] Stage 5/6: Reviewing - 40 approved, 3 refactored, 2 rejected +[Pipeline] Stage 6/6: Exporting - 40 documents exported +[Pipeline] Complete! See ~/reference-library/exports/ +``` + +## Error Handling + +```python +def handle_stage_error(stage, error, state): + state['status'] = 'paused' + state['error_message'] = str(error) + state['error_stage'] = stage + save_state(state['run_id'], state) + + # Log to errors.log + log_error(state['run_id'], stage, error) + + # Report to user + return f"Pipeline paused at {stage}: {error}. Resume with run_id {state['run_id']}" +``` + +## Resume Pipeline + +```python +def resume_pipeline(run_id): + state = load_state(run_id) + + if state['status'] != 'paused': + return f"Pipeline {run_id} is {state['status']}, cannot resume" + + stage = state['current_stage'] + state['status'] = 'running' + state['error_message'] = None + save_state(run_id, state) + + # Resume from failed stage + return execute_from_stage(stage, state) +``` + +## Output Summary + +On completion, generate summary: + +```json +{ + "run_id": 123, + "status": "completed", + "duration_minutes": 15, + "stats": { + "sources_discovered": 5, + "pages_crawled": 45, + "documents_stored": 45, + "documents_distilled": 45, + "approved": 40, + "refactored": 8, + "deep_researched": 2, + "rejected": 3, + "needs_manual_review": 2 + }, + "exports": { + "format": "project_files", + "path": "~/reference-library/exports/", + "document_count": 40 + }, + "errors": [] +} +``` + +## Integration Points + +| Skill | Called By | Provides | +|-------|-----------|----------| +| reference-discovery | Orchestrator | manifest.json | +| web-crawler | Orchestrator | Raw crawled files | +| content-repository | Orchestrator | Stored documents | +| content-distiller | Orchestrator, QA loop | Distilled content | +| quality-reviewer | Orchestrator | QA decisions | +| markdown-exporter | Orchestrator | Final exports | + +## Configuration + +Read from `~/.config/reference-curator/pipeline_config.yaml`: + +```yaml +pipeline: + max_sources: 10 + max_pages: 50 + auto_approve: false + approval_threshold: 0.85 + +qa_loop: + max_refactor_iterations: 3 + max_deep_research_iterations: 2 + max_total_iterations: 5 + +export: + default_format: project_files + include_rejected: false + +state: + backend: mysql # or 'file' + state_directory: ~/reference-library/pipeline_state/ +``` diff --git a/custom-skills/90-reference-curator/07-pipeline-orchestrator/desktop/SKILL.md b/custom-skills/90-reference-curator/07-pipeline-orchestrator/desktop/SKILL.md new file mode 100644 index 0000000..db2bf04 --- /dev/null +++ b/custom-skills/90-reference-curator/07-pipeline-orchestrator/desktop/SKILL.md @@ -0,0 +1,279 @@ +# Pipeline Orchestrator + +Coordinates the full reference curation workflow, handling QA loops and state management. + +## Pipeline Architecture + +``` +[Input: Topic | URLs | Manifest] + │ + ▼ +1. reference-discovery ──────────────────┐ + (skip if URLs/manifest) │ + │ │ + ▼ │ +2. web-crawler-orchestrator │ + │ │ + ▼ │ +3. content-repository │ + │ │ + ▼ │ +4. content-distiller ◄───────────────────┤ + │ │ + ▼ │ +5. quality-reviewer │ + │ │ + ┌─────┼─────┬────────────────┐ │ + ▼ ▼ ▼ ▼ │ + APPROVE REJECT REFACTOR DEEP_RESEARCH│ + │ │ │ │ │ + │ │ └─────────────┤ │ + │ │ └───────┘ + ▼ ▼ +6. markdown-exporter archive + │ + ▼ + [Complete] +``` + +## Input Modes + +| Mode | Example Input | Pipeline Start | +|------|--------------|----------------| +| **Topic** | `"Claude system prompts"` | Stage 1 (discovery) | +| **URLs** | `["https://docs.anthropic.com/..."]` | Stage 2 (crawler) | +| **Manifest** | Path to `manifest.json` | Stage 2 (crawler) | + +## Configuration Options + +```yaml +pipeline: + max_sources: 10 # Discovery limit + max_pages: 50 # Pages per source + auto_approve: false # Auto-approve above threshold + approval_threshold: 0.85 + +qa_loop: + max_refactor_iterations: 3 + max_deep_research_iterations: 2 + max_total_iterations: 5 + +export: + format: project_files # or fine_tuning, jsonl +``` + +## Pipeline Execution + +### Stage 1: Reference Discovery + +For topic-based input, search and validate authoritative sources: + +```python +def run_discovery(topic, max_sources=10): + # Uses WebSearch to find sources + # Validates credibility + # Outputs manifest.json with source URLs + sources = search_authoritative_sources(topic, max_sources) + validate_and_rank_sources(sources) + write_manifest(sources) + return manifest_path +``` + +### Stage 2: Web Crawler + +Crawl URLs from manifest or direct input: + +```python +def run_crawler(input_source, max_pages=50): + # Selects optimal crawler backend + # Respects rate limits + # Stores raw content + urls = load_urls(input_source) + for url in urls: + crawl_with_best_backend(url, max_pages) + return crawl_results +``` + +### Stage 3: Content Repository + +Store crawled content with deduplication: + +```python +def run_repository(crawl_results): + # Deduplicates by URL hash + # Tracks versions + # Returns stored doc IDs + for result in crawl_results: + store_document(result) + return stored_doc_ids +``` + +### Stage 4: Content Distiller + +Process raw content into structured summaries: + +```python +def run_distiller(doc_ids, refactor_instructions=None): + # Extracts key concepts + # Generates summaries + # Creates structured markdown + for doc_id in doc_ids: + distill_document(doc_id, instructions=refactor_instructions) + return distilled_ids +``` + +### Stage 5: Quality Reviewer + +Score and route content based on quality: + +```python +def run_reviewer(distilled_ids, auto_approve=False, threshold=0.85): + decisions = {} + for distill_id in distilled_ids: + score, assessment = score_content(distill_id) + + if auto_approve and score >= threshold: + decisions[distill_id] = ('approve', None) + elif score >= 0.85: + decisions[distill_id] = ('approve', None) + elif score >= 0.60: + instructions = generate_feedback(assessment) + decisions[distill_id] = ('refactor', instructions) + elif score >= 0.40: + queries = generate_research_queries(assessment) + decisions[distill_id] = ('deep_research', queries) + else: + decisions[distill_id] = ('reject', assessment) + + return decisions +``` + +### Stage 6: Markdown Exporter + +Export approved content: + +```python +def run_exporter(approved_ids, format='project_files'): + # Organizes by topic + # Generates INDEX.md + # Creates cross-references + export_documents(approved_ids, format=format) + return export_path +``` + +## QA Loop Handling + +```python +def handle_qa_loop(distill_id, decision, iteration_tracker): + counts = iteration_tracker.get(distill_id, {'refactor': 0, 'deep_research': 0}) + + if decision == 'refactor': + if counts['refactor'] >= MAX_REFACTOR: + return 'needs_manual_review' + counts['refactor'] += 1 + iteration_tracker[distill_id] = counts + return 're_distill' + + if decision == 'deep_research': + if counts['deep_research'] >= MAX_DEEP_RESEARCH: + return 'needs_manual_review' + counts['deep_research'] += 1 + iteration_tracker[distill_id] = counts + return 're_crawl' + + return decision +``` + +## State Management + +### MySQL Backend (Preferred) + +```sql +SELECT run_id, status, current_stage, stats +FROM pipeline_runs +WHERE run_id = ?; +``` + +### File-Based Fallback + +``` +~/reference-library/pipeline_state/ +├── run_001/ +│ ├── state.json # Pipeline state +│ ├── manifest.json # Discovered sources +│ ├── crawl_results.json +│ └── review_log.json # QA decisions +``` + +State JSON format: +```json +{ + "run_id": "run_001", + "run_type": "topic", + "input_value": "Claude system prompts", + "status": "running", + "current_stage": "distilling", + "stats": { + "sources_discovered": 5, + "pages_crawled": 45, + "approved": 0, + "refactored": 0 + }, + "started_at": "2026-01-29T10:00:00Z" +} +``` + +## Checkpointing + +Checkpoint after each stage to enable resume: + +| Checkpoint | Trigger | Resume From | +|------------|---------|-------------| +| `discovery_complete` | Manifest saved | → crawler | +| `crawl_complete` | All pages crawled | → repository | +| `store_complete` | Docs in database | → distiller | +| `distill_complete` | Content processed | → reviewer | +| `review_complete` | Decisions logged | → exporter | +| `export_complete` | Files generated | Done | + +## Output Summary + +```json +{ + "run_id": 123, + "status": "completed", + "duration_minutes": 15, + "stats": { + "sources_discovered": 5, + "pages_crawled": 45, + "documents_stored": 45, + "documents_distilled": 45, + "approved": 40, + "refactored": 8, + "deep_researched": 2, + "rejected": 3, + "needs_manual_review": 2 + }, + "exports": { + "format": "project_files", + "path": "~/reference-library/exports/", + "document_count": 40 + } +} +``` + +## Error Handling + +On stage failure: +1. Save checkpoint with error state +2. Log error details +3. Report to user with resume instructions + +```python +try: + run_stage(stage_name) + save_checkpoint(stage_name, 'complete') +except Exception as e: + save_checkpoint(stage_name, 'failed', error=str(e)) + report_error(f"Pipeline paused at {stage_name}: {e}") +``` diff --git a/custom-skills/90-reference-curator/07-pipeline-orchestrator/desktop/skill.yaml b/custom-skills/90-reference-curator/07-pipeline-orchestrator/desktop/skill.yaml new file mode 100644 index 0000000..9ed5183 --- /dev/null +++ b/custom-skills/90-reference-curator/07-pipeline-orchestrator/desktop/skill.yaml @@ -0,0 +1,9 @@ +# Skill metadata (extracted from SKILL.md frontmatter) + +name: pipeline-orchestrator +description: | + Orchestrates the full 6-skill reference curation pipeline as a background task. Coordinates discovery → crawl → store → distill → review → export with QA loop handling. Triggers on "curate references", "run full pipeline", "reference pipeline", "automate curation". + +# Optional fields + +# triggers: [] # TODO: Extract from description diff --git a/custom-skills/90-reference-curator/README.md b/custom-skills/90-reference-curator/README.md index acda312..3bf145d 100644 --- a/custom-skills/90-reference-curator/README.md +++ b/custom-skills/90-reference-curator/README.md @@ -130,37 +130,44 @@ This displays available files in `claude-project/` and optionally copies them to ## Architecture ``` -[Topic Input] - │ - ▼ -┌─────────────────────┐ -│ reference-discovery │ → Search & validate sources -└─────────────────────┘ - │ - ▼ + ┌──────────────────────────────┐ + │ reference-curator-pipeline │ (Orchestrator) + │ /reference-curator-pipeline │ + └──────────────────────────────┘ + │ + ┌───────────────────────┼───────────────────────┐ + ▼ ▼ ▼ + [Topic Input] [URL Input] [Manifest Input] + │ │ │ + ▼ │ │ +┌─────────────────────┐ │ │ +│ reference-discovery │ ◄─────────┴───────────────────────┘ +└─────────────────────┘ (skip if URLs/manifest) + │ + ▼ ┌──────────────────────────┐ │ web-crawler-orchestrator │ → Crawl (Firecrawl/Node.js/aiohttp/Scrapy) └──────────────────────────┘ - │ - ▼ + │ + ▼ ┌────────────────────┐ │ content-repository │ → Store in MySQL └────────────────────┘ - │ - ▼ + │ + ▼ ┌───────────────────┐ -│ content-distiller │ → Summarize & extract -└───────────────────┘ - │ - ▼ -┌──────────────────┐ -│ quality-reviewer │ → QA loop -└──────────────────┘ - │ - ├── REFACTOR → content-distiller - ├── DEEP_RESEARCH → web-crawler-orchestrator - │ - ▼ APPROVE +│ content-distiller │ → Summarize & extract ◄─────┐ +└───────────────────┘ │ + │ │ + ▼ │ +┌──────────────────┐ │ +│ quality-reviewer │ → QA loop │ +└──────────────────┘ │ + │ │ + ├── REFACTOR (max 3) ────────────────────┤ + ├── DEEP_RESEARCH (max 2) → crawler ─────┘ + │ + ▼ APPROVE ┌───────────────────┐ │ markdown-exporter │ → Project files / Fine-tuning └───────────────────┘ @@ -170,7 +177,35 @@ This displays available files in `claude-project/` and optionally copies them to ## User Guide -### Basic Workflow +### Full Pipeline (Recommended) + +Run the complete curation workflow with a single command: + +``` +# From topic - runs all 6 stages automatically +/reference-curator-pipeline "Claude Code best practices" --max-sources 5 + +# From URLs - skip discovery, start at crawler +/reference-curator-pipeline https://docs.anthropic.com/en/docs/prompt-caching + +# Resume from manifest file +/reference-curator-pipeline ./manifest.json --auto-approve + +# Fine-tuning dataset output +/reference-curator-pipeline "MCP servers" --export-format fine_tuning +``` + +**Pipeline Options:** +- `--max-sources 10` - Max sources to discover (topic mode) +- `--max-pages 50` - Max pages per source to crawl +- `--auto-approve` - Auto-approve scores above threshold +- `--threshold 0.85` - Approval threshold +- `--max-iterations 3` - Max QA loop iterations per document +- `--export-format project_files` - Output format (project_files, fine_tuning, jsonl) + +--- + +### Manual Workflow (Step-by-Step) **Step 1: Discover References** ``` @@ -295,6 +330,7 @@ mysql -h $MYSQL_HOST -u $MYSQL_USER -p"$MYSQL_PASSWORD" reference_library -e " | 04 | content-distiller | `/content-distiller` | Summarize & extract | | 05 | quality-reviewer | `/quality-reviewer` | QA scoring & routing | | 06 | markdown-exporter | `/markdown-exporter` | Export to markdown/JSONL | +| 07 | pipeline-orchestrator | `/reference-curator-pipeline` | Full pipeline orchestration | --- @@ -435,7 +471,8 @@ mysql -h $MYSQL_HOST -u $MYSQL_USER -p"$MYSQL_PASSWORD" reference_library < shar │ ├── content-repository.md │ ├── content-distiller.md │ ├── quality-reviewer.md -│ └── markdown-exporter.md +│ ├── markdown-exporter.md +│ └── reference-curator-pipeline.md │ ├── 01-reference-discovery/ │ ├── code/CLAUDE.md # Claude Code directive @@ -455,6 +492,9 @@ mysql -h $MYSQL_HOST -u $MYSQL_USER -p"$MYSQL_PASSWORD" reference_library < shar ├── 06-markdown-exporter/ │ ├── code/CLAUDE.md │ └── desktop/SKILL.md +├── 07-pipeline-orchestrator/ +│ ├── code/CLAUDE.md +│ └── desktop/SKILL.md │ └── shared/ ├── schema.sql # MySQL schema diff --git a/custom-skills/90-reference-curator/claude-project/07-pipeline-orchestrator.md b/custom-skills/90-reference-curator/claude-project/07-pipeline-orchestrator.md new file mode 100644 index 0000000..aacb3de --- /dev/null +++ b/custom-skills/90-reference-curator/claude-project/07-pipeline-orchestrator.md @@ -0,0 +1,175 @@ +# Pipeline Orchestrator + +Coordinates the full 6-skill reference curation workflow with automated QA loop handling. + +## Trigger Phrases + +- "curate references on [topic]" +- "run full curation pipeline" +- "automate reference curation" +- "curate these URLs: [url1, url2]" + +## Input Modes + +| Mode | Example | Pipeline Start | +|------|---------|----------------| +| **Topic** | "curate references on Claude system prompts" | Stage 1 (discovery) | +| **URLs** | "curate these URLs: https://docs.anthropic.com/..." | Stage 2 (crawler) | +| **Manifest** | "resume curation from manifest.json" | Stage 2 (crawler) | + +## Pipeline Stages + +``` +1. reference-discovery (topic mode only) + │ + ▼ +2. web-crawler-orchestrator + │ + ▼ +3. content-repository + │ + ▼ +4. content-distiller ◄─────────────┐ + │ │ + ▼ │ +5. quality-reviewer │ + │ │ + ├── APPROVE → Stage 6 │ + ├── REFACTOR ───────────────┤ + ├── DEEP_RESEARCH → Stage 2 ┘ + └── REJECT → Archive + │ + ▼ +6. markdown-exporter +``` + +## Configuration Options + +| Option | Default | Description | +|--------|---------|-------------| +| max_sources | 10 | Maximum sources to discover (topic mode) | +| max_pages | 50 | Maximum pages per source to crawl | +| auto_approve | false | Auto-approve scores above threshold | +| threshold | 0.85 | Quality score threshold for approval | +| max_iterations | 3 | Maximum QA loop iterations per document | +| export_format | project_files | Output format (project_files, fine_tuning, jsonl) | + +## QA Loop Handling + +The orchestrator automatically handles QA decisions: + +| Decision | Action | Iteration Limit | +|----------|--------|-----------------| +| **APPROVE** | Proceed to export | - | +| **REFACTOR** | Re-distill with feedback | 3 iterations | +| **DEEP_RESEARCH** | Crawl more sources, re-distill | 2 iterations | +| **REJECT** | Archive with reason | - | + +After reaching iteration limits, documents are marked `needs_manual_review`. + +## State Management + +### With Database + +Pipeline state is tracked in `pipeline_runs` table: +- Run ID, input type, current stage +- Statistics (crawled, distilled, approved, etc.) +- Error handling and resume capability + +### File-Based Fallback + +State saved to `~/reference-library/pipeline_state/run_XXX/`: +- `state.json` - Current stage and statistics +- `manifest.json` - Discovered sources +- `review_log.json` - QA decisions + +## Progress Tracking + +The orchestrator reports progress at each stage: + +``` +[Pipeline] Stage 1/6: Discovery - Found 8 sources +[Pipeline] Stage 2/6: Crawling - 45/50 pages complete +[Pipeline] Stage 3/6: Storing - 45 documents saved +[Pipeline] Stage 4/6: Distilling - 45 documents processed +[Pipeline] Stage 5/6: Reviewing - 40 approved, 3 refactored, 2 rejected +[Pipeline] Stage 6/6: Exporting - 40 documents exported +[Pipeline] Complete! See ~/reference-library/exports/ +``` + +## Output Summary + +On completion, returns detailed summary: + +``` +Pipeline Complete: +- Sources discovered: 5 +- Pages crawled: 45 +- Documents stored: 45 +- Approved: 40 +- Refactored: 8 +- Deep researched: 2 +- Rejected: 3 +- Needs manual review: 2 + +Exports saved to: ~/reference-library/exports/ +Format: project_files +``` + +## Error Handling + +If a stage fails: +1. State is checkpointed +2. Error is logged with details +3. Pipeline can be resumed from last successful stage + +## Resume Pipeline + +To resume a paused or failed pipeline: +- Provide the manifest.json or run state file +- Pipeline continues from last checkpoint + +## Example Usage + +### Full Pipeline from Topic + +``` +User: Curate references on Claude Code best practices with 5 sources + +Claude: I'll run the full curation pipeline for "Claude Code best practices": + +[Pipeline] Stage 1/6: Discovering sources... +Found 5 authoritative sources (3 official, 2 community) + +[Pipeline] Stage 2/6: Crawling 5 sources... +Crawled 45 pages total + +[Pipeline] Stage 3/6: Storing documents... +45 documents saved to repository + +[Pipeline] Stage 4/6: Distilling content... +45 documents processed + +[Pipeline] Stage 5/6: Quality review... +- 38 approved +- 5 refactored (re-distilling...) +- 2 rejected (low quality) + +[Pipeline] Stage 6/6: Exporting... +40 documents exported to ~/reference-library/exports/ + +Pipeline complete! 40 reference documents ready for use. +``` + +### From Specific URLs + +``` +User: Curate these URLs with auto-approve: +- https://docs.anthropic.com/en/docs/prompt-caching +- https://docs.anthropic.com/en/docs/build-with-claude/tool-use + +Claude: Running pipeline from URLs (skipping discovery)... + +[Pipeline] Stage 2/6: Crawling 2 sources... +[...continues with remaining stages...] +``` diff --git a/custom-skills/90-reference-curator/claude-project/INDEX.md b/custom-skills/90-reference-curator/claude-project/INDEX.md index 1113c34..d19cbd1 100644 --- a/custom-skills/90-reference-curator/claude-project/INDEX.md +++ b/custom-skills/90-reference-curator/claude-project/INDEX.md @@ -1,11 +1,27 @@ # Reference Curator - Claude.ai Project Knowledge -This project knowledge enables Claude to curate, process, and export reference documentation through 6 modular skills. +This project knowledge enables Claude to curate, process, and export reference documentation through 7 modular skills. + +## Quick Start - Pipeline Orchestrator + +Run the full curation workflow with a single command: + +``` +# Full pipeline from topic +curate references on "Claude Code best practices" + +# From URLs (skip discovery) +curate these URLs: https://docs.anthropic.com/en/docs/prompt-caching + +# With auto-approve +curate references on "MCP servers" with auto-approve +``` ## Skills Overview | Skill | Purpose | Trigger Phrases | |-------|---------|-----------------| +| **pipeline-orchestrator** | Full 6-skill workflow with QA loops | "curate references", "run full pipeline", "automate curation" | | **reference-discovery** | Search & validate authoritative sources | "find references", "search documentation", "discover sources" | | **web-crawler** | Multi-backend crawling orchestration | "crawl URL", "fetch documents", "scrape pages" | | **content-repository** | MySQL storage management | "store content", "save to database", "check duplicates" | @@ -16,37 +32,43 @@ This project knowledge enables Claude to curate, process, and export reference d ## Workflow ``` -[Topic Input] - │ - ▼ -┌─────────────────────┐ -│ reference-discovery │ → Search & validate sources -└─────────────────────┘ - │ - ▼ + ┌───────────────────────────┐ + │ pipeline-orchestrator │ (Coordinates all stages) + └───────────────────────────┘ + │ + ┌───────────────────┼───────────────────┐ + ▼ ▼ ▼ + [Topic Input] [URL Input] [Manifest Input] + │ │ │ + ▼ │ │ +┌─────────────────────┐ │ │ +│ reference-discovery │ ◄───┴───────────────────┘ +└─────────────────────┘ (skip if URLs/manifest) + │ + ▼ ┌─────────────────────┐ │ web-crawler │ → Crawl (Firecrawl/Node.js/aiohttp/Scrapy) └─────────────────────┘ - │ - ▼ + │ + ▼ ┌─────────────────────┐ │ content-repository │ → Store in MySQL └─────────────────────┘ - │ - ▼ + │ + ▼ ┌─────────────────────┐ -│ content-distiller │ → Summarize & extract -└─────────────────────┘ - │ - ▼ -┌─────────────────────┐ -│ quality-reviewer │ → QA loop -└─────────────────────┘ - │ - ├── REFACTOR → content-distiller - ├── DEEP_RESEARCH → web-crawler - │ - ▼ APPROVE +│ content-distiller │ → Summarize & extract ◄────┐ +└─────────────────────┘ │ + │ │ + ▼ │ +┌─────────────────────┐ │ +│ quality-reviewer │ → QA loop │ +└─────────────────────┘ │ + │ │ + ├── REFACTOR (max 3) ───────────────────────┤ + ├── DEEP_RESEARCH (max 2) → crawler ────────┘ + │ + ▼ APPROVE ┌─────────────────────┐ │ markdown-exporter │ → Project files / Fine-tuning └─────────────────────┘ @@ -74,16 +96,28 @@ This project knowledge enables Claude to curate, process, and export reference d ## Files in This Project - `INDEX.md` - This overview file -- `reference-curator-complete.md` - All 6 skills in one file +- `reference-curator-complete.md` - All 7 skills in one file (recommended) - `01-reference-discovery.md` - Source discovery skill - `02-web-crawler.md` - Crawling orchestration skill - `03-content-repository.md` - Database storage skill - `04-content-distiller.md` - Content summarization skill - `05-quality-reviewer.md` - QA review skill - `06-markdown-exporter.md` - Export skill +- `07-pipeline-orchestrator.md` - Full pipeline orchestration ## Usage Upload all files to a Claude.ai Project, or upload only the skills you need. For the complete experience, upload `reference-curator-complete.md` which contains all skills in one file. + +## Pipeline Orchestrator Options + +| Option | Default | Description | +|--------|---------|-------------| +| max_sources | 10 | Max sources to discover | +| max_pages | 50 | Max pages per source | +| auto_approve | false | Auto-approve above threshold | +| threshold | 0.85 | Approval threshold | +| max_iterations | 3 | Max QA loop iterations | +| export_format | project_files | Output format | diff --git a/custom-skills/90-reference-curator/claude-project/reference-curator-complete.md b/custom-skills/90-reference-curator/claude-project/reference-curator-complete.md index 5500b37..1d24749 100644 --- a/custom-skills/90-reference-curator/claude-project/reference-curator-complete.md +++ b/custom-skills/90-reference-curator/claude-project/reference-curator-complete.md @@ -1,6 +1,87 @@ # Reference Curator - Complete Skill Set -This document contains all 6 skills for curating, processing, and exporting reference documentation. +This document contains all 7 skills for curating, processing, and exporting reference documentation. + +--- + +# Pipeline Orchestrator (Recommended Entry Point) + +Coordinates the full 6-skill workflow with automated QA loop handling. + +## Quick Start + +``` +# Full pipeline from topic +curate references on "Claude Code best practices" + +# From URLs (skip discovery) +curate these URLs: https://docs.anthropic.com/en/docs/prompt-caching + +# With auto-approve +curate references on "MCP servers" with auto-approve and fine-tuning output +``` + +## Configuration Options + +| Option | Default | Description | +|--------|---------|-------------| +| max_sources | 10 | Maximum sources to discover | +| max_pages | 50 | Maximum pages per source | +| auto_approve | false | Auto-approve above threshold | +| threshold | 0.85 | Approval threshold | +| max_iterations | 3 | Max QA loop iterations | +| export_format | project_files | Output format | + +## Pipeline Flow + +``` +[Input: Topic | URLs | Manifest] + │ + ▼ + 1. reference-discovery (skip if URLs/manifest) + │ + ▼ + 2. web-crawler + │ + ▼ + 3. content-repository + │ + ▼ + 4. content-distiller ◄─────────────┐ + │ │ + ▼ │ + 5. quality-reviewer │ + │ │ + ├── APPROVE → export │ + ├── REFACTOR (max 3) ─────┤ + ├── DEEP_RESEARCH (max 2) → crawler + └── REJECT → archive + │ + ▼ + 6. markdown-exporter +``` + +## QA Loop Handling + +| Decision | Action | Max Iterations | +|----------|--------|----------------| +| APPROVE | Proceed to export | - | +| REFACTOR | Re-distill with feedback | 3 | +| DEEP_RESEARCH | Crawl more sources | 2 | +| REJECT | Archive with reason | - | + +Documents exceeding iteration limits are marked `needs_manual_review`. + +## Output Summary + +``` +Pipeline Complete: +- Sources discovered: 5 +- Pages crawled: 45 +- Approved: 40 +- Needs manual review: 2 +- Exports: ~/reference-library/exports/ +``` --- @@ -464,6 +545,7 @@ def add_cross_references(doc, all_docs): | From | Output | To | |------|--------|-----| +| **pipeline-orchestrator** | Coordinates all stages | All skills below | | **reference-discovery** | URL manifest | web-crawler | | **web-crawler** | Raw content + manifest | content-repository | | **content-repository** | Document records | content-distiller | @@ -471,3 +553,25 @@ def add_cross_references(doc, all_docs): | **quality-reviewer** (approve) | Approved IDs | markdown-exporter | | **quality-reviewer** (refactor) | Instructions | content-distiller | | **quality-reviewer** (deep_research) | Queries | web-crawler | + +## State Management + +The pipeline orchestrator tracks state for resume capability: + +**With Database:** +- `pipeline_runs` table tracks run status, current stage, statistics +- `pipeline_iteration_tracker` tracks QA loop iterations per document + +**File-Based Fallback:** +``` +~/reference-library/pipeline_state/run_XXX/ +├── state.json # Current stage and stats +├── manifest.json # Discovered sources +└── review_log.json # QA decisions +``` + +## Resume Pipeline + +To resume a paused or failed pipeline: +1. Provide the run_id or state file path +2. Pipeline continues from last successful checkpoint diff --git a/custom-skills/90-reference-curator/commands/reference-curator-pipeline.md b/custom-skills/90-reference-curator/commands/reference-curator-pipeline.md new file mode 100644 index 0000000..919e312 --- /dev/null +++ b/custom-skills/90-reference-curator/commands/reference-curator-pipeline.md @@ -0,0 +1,115 @@ +--- +description: Orchestrates full reference curation pipeline as background task. Runs discovery → crawl → store → distill → review → export with QA loop handling. +argument-hint: [--max-sources 10] [--max-pages 50] [--auto-approve] [--threshold 0.85] [--max-iterations 3] [--export-format project_files] +allowed-tools: WebSearch, WebFetch, Read, Write, Bash, Grep, Glob, Task +--- + +# Reference Curator Pipeline + +Full-stack orchestration of the 6-skill reference curation workflow. + +## Input Modes + +| Mode | Input Example | Pipeline Start | +|------|---------------|----------------| +| **Topic** | `"Claude system prompts"` | reference-discovery | +| **URLs** | `https://docs.anthropic.com/...` | web-crawler (skip discovery) | +| **Manifest** | `./manifest.json` | web-crawler (resume from discovery) | + +## Arguments + +- ``: Required. Topic string, URL(s), or manifest file path +- `--max-sources`: Maximum sources to discover (topic mode, default: 10) +- `--max-pages`: Maximum pages per source to crawl (default: 50) +- `--auto-approve`: Auto-approve scores above threshold +- `--threshold`: Approval threshold (default: 0.85) +- `--max-iterations`: Max QA loop iterations per document (default: 3) +- `--export-format`: Output format: `project_files`, `fine_tuning`, `jsonl` (default: project_files) + +## Pipeline Stages + +``` +1. reference-discovery (topic mode only) +2. web-crawler-orchestrator +3. content-repository +4. content-distiller ◄────────┐ +5. quality-reviewer │ + ├── APPROVE → export │ + ├── REFACTOR ─────────────────┤ + ├── DEEP_RESEARCH → crawler ──┘ + └── REJECT → archive +6. markdown-exporter +``` + +## QA Loop Handling + +| Decision | Action | Max Iterations | +|----------|--------|----------------| +| REFACTOR | Re-distill with feedback | 3 | +| DEEP_RESEARCH | Crawl more sources, re-distill | 2 | +| Combined | Total loops per document | 5 | + +After max iterations, document marked as `needs_manual_review`. + +## Example Usage + +``` +# Full pipeline from topic +/reference-curator-pipeline "Claude Code best practices" --max-sources 5 + +# Pipeline from specific URLs (skip discovery) +/reference-curator-pipeline https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching + +# Resume from existing manifest +/reference-curator-pipeline ./manifest.json --auto-approve + +# Fine-tuning dataset output +/reference-curator-pipeline "MCP servers" --export-format fine_tuning --auto-approve +``` + +## State Management + +Pipeline state is saved after each stage to allow resume: + +**With MySQL:** +```sql +SELECT * FROM pipeline_runs WHERE run_id = 123; +``` + +**File-based fallback:** +``` +~/reference-library/pipeline_state/run_XXX/state.json +``` + +## Output + +Pipeline returns summary on completion: + +```json +{ + "run_id": 123, + "status": "completed", + "stats": { + "sources_discovered": 5, + "pages_crawled": 45, + "documents_stored": 45, + "approved": 40, + "refactored": 8, + "deep_researched": 2, + "rejected": 3, + "needs_manual_review": 2 + }, + "exports": { + "format": "project_files", + "path": "~/reference-library/exports/" + } +} +``` + +## See Also + +- `/reference-discovery` - Run discovery stage only +- `/web-crawler` - Run crawler stage only +- `/content-repository` - Manage stored content +- `/quality-reviewer` - Run QA review only +- `/markdown-exporter` - Run export only diff --git a/custom-skills/90-reference-curator/shared/config/pipeline_config.yaml b/custom-skills/90-reference-curator/shared/config/pipeline_config.yaml new file mode 100644 index 0000000..37b0911 --- /dev/null +++ b/custom-skills/90-reference-curator/shared/config/pipeline_config.yaml @@ -0,0 +1,40 @@ +# Pipeline Orchestrator Configuration +# Copy to ~/.config/reference-curator/pipeline_config.yaml + +pipeline: + # Discovery stage + max_sources: 10 + + # Crawler stage + max_pages: 50 + + # Auto-approve settings + auto_approve: false + approval_threshold: 0.85 + +qa_loop: + # Maximum iterations before escalating to manual review + max_refactor_iterations: 3 + max_deep_research_iterations: 2 + max_total_iterations: 5 + +export: + # Default export format: project_files, fine_tuning, jsonl + default_format: project_files + + # Include rejected documents in a separate folder + include_rejected: false + +state: + # State management backend: mysql or file + backend: ${STATE_BACKEND:-file} + + # File-based state directory (used when backend=file) + state_directory: ${REFERENCE_LIBRARY_PATH:-~/reference-library}/pipeline_state/ + +logging: + # Log level: DEBUG, INFO, WARNING, ERROR + level: INFO + + # Save detailed logs for each run + save_run_logs: true diff --git a/custom-skills/90-reference-curator/shared/schema.sql b/custom-skills/90-reference-curator/shared/schema.sql index bb5a50c..2120e7d 100644 --- a/custom-skills/90-reference-curator/shared/schema.sql +++ b/custom-skills/90-reference-curator/shared/schema.sql @@ -187,7 +187,91 @@ CREATE TABLE export_jobs ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ----------------------------- --- 4. Tracking & Monitoring Tables +-- 4. Pipeline Orchestration Tables +-- ----------------------------- + +CREATE TABLE pipeline_runs ( + run_id INT AUTO_INCREMENT PRIMARY KEY, + + -- Input configuration + run_type ENUM('topic', 'urls', 'manifest') NOT NULL, + input_value TEXT NOT NULL, + + -- Status tracking + status ENUM('running', 'completed', 'failed', 'paused') DEFAULT 'running', + current_stage ENUM('discovery', 'crawling', 'storing', 'distilling', 'reviewing', 'exporting') DEFAULT 'discovery', + + -- Configuration options + options JSON, + /* + Example options JSON: + { + "max_sources": 10, + "max_pages": 50, + "auto_approve": false, + "threshold": 0.85, + "max_iterations": 3, + "export_format": "project_files" + } + */ + + -- Pipeline statistics + stats JSON, + /* + Example stats JSON: + { + "sources_discovered": 5, + "pages_crawled": 45, + "documents_stored": 45, + "documents_distilled": 45, + "approved": 40, + "refactored": 8, + "deep_researched": 2, + "rejected": 3, + "needs_manual_review": 2 + } + */ + + -- Export information + export_path VARCHAR(500), + export_document_count INT, + + -- Timing + started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + completed_at TIMESTAMP NULL, + + -- Error handling + error_message TEXT, + error_stage VARCHAR(50), + + INDEX idx_status (status), + INDEX idx_run_type (run_type), + INDEX idx_started_at (started_at) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE pipeline_iteration_tracker ( + tracker_id INT AUTO_INCREMENT PRIMARY KEY, + run_id INT NOT NULL, + doc_id INT NOT NULL, + + -- Iteration counts + refactor_count INT DEFAULT 0, + deep_research_count INT DEFAULT 0, + + -- Final status + final_decision ENUM('approved', 'rejected', 'needs_manual_review'), + + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + FOREIGN KEY (run_id) REFERENCES pipeline_runs(run_id) ON DELETE CASCADE, + FOREIGN KEY (doc_id) REFERENCES documents(doc_id) ON DELETE CASCADE, + + UNIQUE INDEX idx_run_doc (run_id, doc_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- ----------------------------- +-- 5. Tracking & Monitoring Tables -- ----------------------------- CREATE TABLE crawl_schedule ( @@ -218,7 +302,7 @@ CREATE TABLE change_detection ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ----------------------------- --- 5. Default Data +-- 6. Default Data -- ----------------------------- INSERT INTO topics (topic_name, topic_slug, description) VALUES @@ -240,7 +324,7 @@ INSERT INTO sources (source_name, source_type, base_url, credibility_tier, vendo ('Google AI Docs', 'official_docs', 'https://ai.google.dev/docs', 'tier1_official', 'google'); -- ----------------------------- --- 6. Useful Views +-- 7. Useful Views -- ----------------------------- CREATE OR REPLACE VIEW v_pending_reviews AS @@ -283,3 +367,39 @@ AND rl.review_id = ( WHERE distill_id = dc.distill_id ) ORDER BY t.topic_slug, rl.quality_score DESC; + +CREATE OR REPLACE VIEW v_pipeline_status AS +SELECT + pr.run_id, + pr.run_type, + pr.input_value, + pr.status, + pr.current_stage, + pr.started_at, + pr.completed_at, + TIMESTAMPDIFF(MINUTE, pr.started_at, COALESCE(pr.completed_at, NOW())) as duration_minutes, + JSON_EXTRACT(pr.stats, '$.sources_discovered') as sources_discovered, + JSON_EXTRACT(pr.stats, '$.pages_crawled') as pages_crawled, + JSON_EXTRACT(pr.stats, '$.documents_stored') as documents_stored, + JSON_EXTRACT(pr.stats, '$.approved') as approved, + JSON_EXTRACT(pr.stats, '$.rejected') as rejected, + JSON_EXTRACT(pr.stats, '$.needs_manual_review') as needs_manual_review, + pr.export_path, + pr.error_message +FROM pipeline_runs pr +ORDER BY pr.started_at DESC; + +CREATE OR REPLACE VIEW v_pipeline_iterations AS +SELECT + pit.run_id, + pr.input_value, + d.title, + d.url, + pit.refactor_count, + pit.deep_research_count, + (pit.refactor_count + pit.deep_research_count) as total_iterations, + pit.final_decision +FROM pipeline_iteration_tracker pit +JOIN pipeline_runs pr ON pit.run_id = pr.run_id +JOIN documents d ON pit.doc_id = d.doc_id +ORDER BY pit.run_id DESC, pit.total_iterations DESC; diff --git a/reference/SKILL-FORMAT-REQUIREMENTS.md b/reference/SKILL-FORMAT-REQUIREMENTS.md index 7ecf274..4566958 100644 --- a/reference/SKILL-FORMAT-REQUIREMENTS.md +++ b/reference/SKILL-FORMAT-REQUIREMENTS.md @@ -1,73 +1,162 @@ -# Claude Skills - SKILL.md Format Requirements +# Claude Skills - Format Requirements -## 📝 Claude Skills SKILL.md Format +## Overview -Every Claude Skill's SKILL.md file MUST start with YAML frontmatter between triple dashes: +This document describes the format requirements for Claude Skills in this repository. Skills support dual-platform development (Claude Code and Claude Desktop) with separated concerns. + +## Desktop Skill Structure (Recommended) + +For Claude Desktop skills, metadata is stored in a separate `skill.yaml` file: + +``` +skill-name/ +└── desktop/ + ├── skill.yaml # Metadata (name, description, allowed-tools, license) + ├── SKILL.md # Content only (no frontmatter) + ├── tools/ # MCP tool documentation + │ ├── firecrawl.md # Tool-specific docs + │ └── notion.md + ├── references/ # Guidance docs + └── examples/ # Usage examples +``` + +### skill.yaml Format ```yaml ---- +# Required fields name: skill-name-here -version: 1.0.0 -description: Brief description of what the skill does -author: Your Name/Team -tags: - - tag1 - - tag2 - - tag3 ---- +description: Brief description of what the skill does and trigger keywords +# Optional fields +allowed-tools: + - mcp__firecrawl__* + - mcp__notion__* + - Read + - Write + - Edit + - Bash + - Glob + - Grep + - WebFetch + +license: MIT # or Internal-use Only + +triggers: + - keyword1 + - keyword2 +``` + +### SKILL.md Content + +With metadata separated into skill.yaml, SKILL.md contains only the skill directive: + +```markdown # Skill Name -Rest of your skill content goes here... +Purpose and overview... + +## Workflow + +Step-by-step instructions... + +## MCP Tool Usage + +Tool-specific guidance... ``` -### ✅ Example: +### tools/ Directory + +Document MCP tools used by the skill: + +| File | Purpose | +|------|---------| +| `firecrawl.md` | Firecrawl MCP tool usage | +| `notion.md` | Notion MCP tool usage | +| `perplexity.md` | Perplexity MCP tool usage | +| `chrome-devtools.md` | Chrome DevTools MCP tool usage | +| `claude-core.md` | Claude core tools (Read, Write, Edit, Bash, Glob, Grep) | +| `webfetch.md` | WebFetch tool usage | + +## Code Skill Structure + +For Claude Code skills: + +``` +skill-name/ +└── code/ + ├── CLAUDE.md # Action-oriented directive + ├── scripts/ # Executable Python/Bash scripts + └── references/ # Documentation +``` + +## Key Requirements + +### 1. Metadata (skill.yaml) + +- **name**: Required, lowercase with hyphens +- **description**: Required, include trigger keywords +- **allowed-tools**: Optional, list of permitted tools +- **license**: Optional, MIT or Internal-use Only + +### 2. File Structure + +- All files must be inside the skill folder +- Desktop version in `desktop/` subdirectory +- Code version in `code/` subdirectory +- Subfolders (tools/, references/, examples/) are allowed + +### 3. Naming Conventions + +- Use lowercase with hyphens for skill name +- No spaces or special characters in folder/file names +- Skill numbers are two-digit prefixes (00-99) + +## Full Directory Structure + +``` +XX-skill-name/ +├── code/ # Claude Code version +│ ├── CLAUDE.md # Action-oriented directive +│ ├── scripts/ # Executable Python/Bash +│ └── references/ # Documentation +│ +├── desktop/ # Claude Desktop version +│ ├── skill.yaml # Metadata +│ ├── SKILL.md # Content only +│ ├── tools/ # MCP tool documentation +│ ├── references/ # Guidance docs +│ └── examples/ # Usage examples +│ +└── README.md # Overview (optional) +``` + +## Migration Script + +To migrate existing SKILL.md files with frontmatter to the new structure: + +```bash +python scripts/migrate-skill-structure.py --dry-run # Preview +python scripts/migrate-skill-structure.py # Execute +``` + +The script: +1. Extracts YAML frontmatter to `skill.yaml` +2. Strips frontmatter from `SKILL.md` +3. Creates `tools/` directory +4. Generates tool stub files based on `allowed-tools` + +## Legacy Format (Deprecated) + +The old format with frontmatter embedded in SKILL.md is deprecated: + ```yaml --- -name: seo-gateway-strategist -version: 1.0.0 -description: Creates comprehensive SEO-focused gateway page strategies for Korean medical/service websites -author: OurDigital Dr.D -tags: - - seo - - strategy - - korean-marketing - - gateway-pages - - content-planning +name: skill-name +description: Description +allowed-tools: mcp__firecrawl__*, Read, Write --- -# SEO Gateway Page Strategist - -This skill helps you create... +# Skill content... ``` -## 🔑 Key Requirements for Claude Skills - -1. **YAML Frontmatter is MANDATORY** - - Must be at the very beginning of SKILL.md - - Must be wrapped in triple dashes (---) - - Must include at minimum: name, version, description - -2. **File Structure** - - All files must be inside the top-level folder - - SKILL.md must be in the root of the skill folder - - Subfolders (templates/, scripts/, examples/) are allowed - -3. **Naming Conventions** - - Use lowercase with hyphens for skill name - - No spaces or special characters in folder/file names - - Version should follow semantic versioning (x.y.z) - -## 📂 Correct Folder Structure - -``` -skills-name/ # Top-level folder -├── SKILL.md # Must have YAML frontmatter -├── README.md # Documentation -├── scripts/ # Optional subfolder -│ └── keyword_analyzer.py -├── templates/ # Optional subfolder -│ └── *.md -└── examples/ # Optional subfolder - └── *.md -``` +Use the migration script to convert to the new format. diff --git a/scripts/migrate-skill-structure.py b/scripts/migrate-skill-structure.py new file mode 100755 index 0000000..b44b3ab --- /dev/null +++ b/scripts/migrate-skill-structure.py @@ -0,0 +1,330 @@ +#!/usr/bin/env python3 +""" +Migrate SKILL.md files to new structure: +1. Extract YAML frontmatter → skill.yaml +2. Strip frontmatter from SKILL.md +3. Create tools/ directory + +Usage: + python migrate-skill-structure.py --dry-run # Preview changes + python migrate-skill-structure.py # Execute migration + python migrate-skill-structure.py --verbose # Verbose output +""" + +import argparse +import re +import sys +from pathlib import Path +from typing import Optional + +import yaml + + +def find_skill_files(base_path: Path) -> list[Path]: + """Find all desktop/SKILL.md files.""" + skill_files = [] + + for skill_md in base_path.rglob("desktop/SKILL.md"): + # Skip archived skills + if "99_archive" in str(skill_md): + continue + skill_files.append(skill_md) + + return sorted(skill_files) + + +def parse_frontmatter(content: str) -> tuple[Optional[dict], str]: + """ + Parse YAML frontmatter from content. + Returns (frontmatter_dict, remaining_content). + """ + # Match frontmatter between --- delimiters + pattern = r'^---\s*\n(.*?)\n---\s*\n(.*)$' + match = re.match(pattern, content, re.DOTALL) + + if not match: + return None, content + + frontmatter_text = match.group(1) + remaining_content = match.group(2) + + try: + frontmatter = yaml.safe_load(frontmatter_text) + return frontmatter, remaining_content + except yaml.YAMLError as e: + print(f" YAML parse error: {e}") + return None, content + + +def generate_skill_yaml(frontmatter: dict) -> str: + """Generate skill.yaml content from frontmatter.""" + # Use a custom dumper to preserve formatting + result = "# Skill metadata (extracted from SKILL.md frontmatter)\n\n" + + # Required fields first + if "name" in frontmatter: + result += f"name: {frontmatter['name']}\n" + + if "description" in frontmatter: + desc = frontmatter["description"] + # Check if description is multi-line + if "\n" in str(desc) or len(str(desc)) > 80: + result += "description: |\n" + for line in str(desc).strip().split("\n"): + result += f" {line}\n" + else: + # Single line - use quoted string if contains special chars + if any(c in str(desc) for c in [":", "{", "}", "[", "]", ",", "#", "&", "*", "!", "|", ">", "'", '"', "%", "@", "`"]): + result += f'description: "{desc}"\n' + else: + result += f"description: {desc}\n" + + result += "\n# Optional fields\n" + + # Optional fields + if "allowed-tools" in frontmatter: + tools = frontmatter["allowed-tools"] + if isinstance(tools, str): + # Parse comma-separated tools + tool_list = [t.strip() for t in tools.split(",")] + else: + tool_list = tools + + result += "allowed-tools:\n" + for tool in tool_list: + result += f" - {tool}\n" + + if "license" in frontmatter: + result += f"\nlicense: {frontmatter['license']}\n" + + # Add triggers section (placeholder - can be extracted from description) + result += "\n# triggers: [] # TODO: Extract from description\n" + + return result + + +def get_tool_stubs(frontmatter: dict) -> dict[str, str]: + """ + Determine which tool stub files to create based on allowed-tools. + Returns dict of {filename: content}. + """ + stubs = {} + + if "allowed-tools" not in frontmatter: + return stubs + + tools_str = frontmatter["allowed-tools"] + if isinstance(tools_str, str): + tools = [t.strip() for t in tools_str.split(",")] + else: + tools = tools_str + + # Map tools to stub files + tool_mappings = { + "mcp__firecrawl__*": "firecrawl", + "mcp__perplexity__*": "perplexity", + "mcp__notion__*": "notion", + "mcp__chrome-devtools__*": "chrome-devtools", + } + + claude_core_tools = {"Read", "Write", "Edit", "Bash", "Glob", "Grep"} + webfetch_tools = {"WebFetch"} + + has_claude_core = False + has_webfetch = False + mcp_tools = set() + + for tool in tools: + tool = tool.strip() + + # Check MCP tool patterns + for pattern, stub_name in tool_mappings.items(): + if pattern.replace("*", "") in tool or tool == pattern: + mcp_tools.add(stub_name) + break + else: + # Check Claude core tools + if tool in claude_core_tools: + has_claude_core = True + elif tool in webfetch_tools: + has_webfetch = True + + # Generate stub content + stub_template = """# {tool_name} + +> TODO: Document tool usage for this skill + +## Available Commands + +- [ ] List commands + +## Configuration + +- [ ] Add configuration details + +## Examples + +- [ ] Add usage examples +""" + + for mcp_tool in mcp_tools: + title = mcp_tool.replace("-", " ").title() + stubs[f"{mcp_tool}.md"] = stub_template.format(tool_name=title) + + if has_claude_core: + stubs["claude-core.md"] = stub_template.format(tool_name="Claude Core Tools (Read, Write, Edit, Bash, Glob, Grep)") + + if has_webfetch: + stubs["webfetch.md"] = stub_template.format(tool_name="WebFetch") + + return stubs + + +def migrate_skill(skill_md_path: Path, dry_run: bool = True, verbose: bool = False) -> dict: + """ + Migrate a single SKILL.md file. + Returns status dict. + """ + desktop_dir = skill_md_path.parent + skill_yaml_path = desktop_dir / "skill.yaml" + tools_dir = desktop_dir / "tools" + + status = { + "path": str(skill_md_path), + "success": False, + "skill_yaml_created": False, + "frontmatter_stripped": False, + "tools_dir_created": False, + "tool_stubs": [], + "error": None + } + + try: + # Read original content + content = skill_md_path.read_text(encoding="utf-8") + + # Parse frontmatter + frontmatter, remaining_content = parse_frontmatter(content) + + if frontmatter is None: + status["error"] = "No frontmatter found" + return status + + # Generate skill.yaml content + skill_yaml_content = generate_skill_yaml(frontmatter) + + # Get tool stubs + tool_stubs = get_tool_stubs(frontmatter) + status["tool_stubs"] = list(tool_stubs.keys()) + + if verbose: + print(f"\n Frontmatter fields: {list(frontmatter.keys())}") + print(f" Tool stubs to create: {status['tool_stubs']}") + + if dry_run: + print(f" [DRY-RUN] Would create: {skill_yaml_path}") + print(f" [DRY-RUN] Would strip frontmatter from: {skill_md_path}") + print(f" [DRY-RUN] Would create directory: {tools_dir}") + for stub_name in tool_stubs: + print(f" [DRY-RUN] Would create stub: {tools_dir / stub_name}") + status["success"] = True + else: + # Create skill.yaml + skill_yaml_path.write_text(skill_yaml_content, encoding="utf-8") + status["skill_yaml_created"] = True + + # Strip frontmatter from SKILL.md + skill_md_path.write_text(remaining_content.lstrip(), encoding="utf-8") + status["frontmatter_stripped"] = True + + # Create tools/ directory + tools_dir.mkdir(exist_ok=True) + status["tools_dir_created"] = True + + # Create tool stubs + for stub_name, stub_content in tool_stubs.items(): + stub_path = tools_dir / stub_name + stub_path.write_text(stub_content, encoding="utf-8") + + status["success"] = True + + except Exception as e: + status["error"] = str(e) + + return status + + +def main(): + parser = argparse.ArgumentParser(description="Migrate SKILL.md files to new structure") + parser.add_argument("--dry-run", action="store_true", help="Preview changes without executing") + parser.add_argument("--verbose", "-v", action="store_true", help="Verbose output") + parser.add_argument("--path", type=str, default=None, help="Base path to search (default: auto-detect)") + args = parser.parse_args() + + # Find base path + if args.path: + base_path = Path(args.path) + else: + # Auto-detect from script location + script_dir = Path(__file__).parent + base_path = script_dir.parent / "custom-skills" + + if not base_path.exists(): + print(f"Error: Path not found: {base_path}") + sys.exit(1) + + print(f"Searching for SKILL.md files in: {base_path}") + print(f"Mode: {'DRY-RUN' if args.dry_run else 'EXECUTE'}") + print("-" * 60) + + # Find all skill files + skill_files = find_skill_files(base_path) + print(f"Found {len(skill_files)} desktop/SKILL.md files\n") + + # Process each file + results = { + "total": len(skill_files), + "success": 0, + "failed": 0, + "skill_yaml_created": 0, + "tools_dirs_created": 0, + "tool_stubs_created": 0 + } + + for i, skill_path in enumerate(skill_files, 1): + rel_path = skill_path.relative_to(base_path) + print(f"[{i}/{len(skill_files)}] Processing: {rel_path}") + + status = migrate_skill(skill_path, dry_run=args.dry_run, verbose=args.verbose) + + if status["success"]: + results["success"] += 1 + if status["skill_yaml_created"] or args.dry_run: + results["skill_yaml_created"] += 1 + if status["tools_dir_created"] or args.dry_run: + results["tools_dirs_created"] += 1 + results["tool_stubs_created"] += len(status["tool_stubs"]) + print(f" ✓ OK") + else: + results["failed"] += 1 + print(f" ✗ FAILED: {status['error']}") + + # Summary + print("\n" + "=" * 60) + print("MIGRATION SUMMARY") + print("=" * 60) + print(f"Total files processed: {results['total']}") + print(f"Successful: {results['success']}") + print(f"Failed: {results['failed']}") + print(f"skill.yaml files {'to create' if args.dry_run else 'created'}: {results['skill_yaml_created']}") + print(f"tools/ directories {'to create' if args.dry_run else 'created'}: {results['tools_dirs_created']}") + print(f"Tool stub files {'to create' if args.dry_run else 'created'}: {results['tool_stubs_created']}") + + if args.dry_run: + print("\n[DRY-RUN] No files were modified. Run without --dry-run to execute.") + + return 0 if results["failed"] == 0 else 1 + + +if __name__ == "__main__": + sys.exit(main())