8 production-ready skills for enhanced Claude Code workflows: 1. github-ops - Comprehensive GitHub operations via gh CLI and API - PR/issue management, workflow automation, API interactions 2. markdown-tools - Document conversion to markdown - PDF/Word/PowerPoint/Confluence → Markdown with WSL support 3. mermaid-tools - Mermaid diagram generation - Extract and render diagrams from markdown to PNG/SVG 4. statusline-generator - Claude Code statusline customization - Multi-line layouts, cost tracking, git status, colors 5. teams-channel-post-writer - Microsoft Teams communication - Adaptive Cards, formatted announcements, corporate standards 6. repomix-unmixer - Repomix file extraction - Extract from XML/Markdown/JSON formats with auto-detection 7. skill-creator - Skill development toolkit - Init, validation, packaging scripts with privacy best practices 8. llm-icon-finder - AI/LLM brand icon finder - 100+ AI model icons in SVG/PNG/WEBP formats Features: - Individual skill installation (install only what you need) - Progressive disclosure design (optimized context usage) - Privacy-safe examples (no personal/company information) - Comprehensive documentation with references - Production-tested workflows Installation: /plugin marketplace add daymade/claude-code-skills /plugin marketplace install daymade/claude-code-skills#<skill-name> Version: 1.2.0 License: See individual skill licenses 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
65 lines
2.1 KiB
Python
Executable File
65 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Quick validation script for skills - minimal version
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
import re
|
|
from pathlib import Path
|
|
|
|
def validate_skill(skill_path):
|
|
"""Basic validation of a skill"""
|
|
skill_path = Path(skill_path)
|
|
|
|
# Check SKILL.md exists
|
|
skill_md = skill_path / 'SKILL.md'
|
|
if not skill_md.exists():
|
|
return False, "SKILL.md not found"
|
|
|
|
# Read and validate frontmatter
|
|
content = skill_md.read_text()
|
|
if not content.startswith('---'):
|
|
return False, "No YAML frontmatter found"
|
|
|
|
# Extract frontmatter
|
|
match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL)
|
|
if not match:
|
|
return False, "Invalid frontmatter format"
|
|
|
|
frontmatter = match.group(1)
|
|
|
|
# Check required fields
|
|
if 'name:' not in frontmatter:
|
|
return False, "Missing 'name' in frontmatter"
|
|
if 'description:' not in frontmatter:
|
|
return False, "Missing 'description' in frontmatter"
|
|
|
|
# Extract name for validation
|
|
name_match = re.search(r'name:\s*(.+)', frontmatter)
|
|
if name_match:
|
|
name = name_match.group(1).strip()
|
|
# Check naming convention (hyphen-case: lowercase with hyphens)
|
|
if not re.match(r'^[a-z0-9-]+$', name):
|
|
return False, f"Name '{name}' should be hyphen-case (lowercase letters, digits, and hyphens only)"
|
|
if name.startswith('-') or name.endswith('-') or '--' in name:
|
|
return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens"
|
|
|
|
# Extract and validate description
|
|
desc_match = re.search(r'description:\s*(.+)', frontmatter)
|
|
if desc_match:
|
|
description = desc_match.group(1).strip()
|
|
# Check for angle brackets
|
|
if '<' in description or '>' in description:
|
|
return False, "Description cannot contain angle brackets (< or >)"
|
|
|
|
return True, "Skill is valid!"
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) != 2:
|
|
print("Usage: python quick_validate.py <skill_directory>")
|
|
sys.exit(1)
|
|
|
|
valid, message = validate_skill(sys.argv[1])
|
|
print(message)
|
|
sys.exit(0 if valid else 1) |