#!/usr/bin/env python3 """ SKILL.md Enhancement Script (Local - Using Claude Code) Opens a new terminal with Claude Code to enhance SKILL.md, then reports back. No API key needed - uses your existing Claude Code Max plan! Usage: python3 enhance_skill_local.py output/steam-inventory/ python3 enhance_skill_local.py output/react/ """ import os import sys import time import subprocess import tempfile from pathlib import Path class LocalSkillEnhancer: def __init__(self, skill_dir): self.skill_dir = Path(skill_dir) self.references_dir = self.skill_dir / "references" self.skill_md_path = self.skill_dir / "SKILL.md" def create_enhancement_prompt(self): """Create the prompt file for Claude Code""" # Read reference files references = self.read_reference_files() if not references: print("❌ No reference files found") return None # Read current SKILL.md current_skill_md = "" if self.skill_md_path.exists(): current_skill_md = self.skill_md_path.read_text(encoding='utf-8') # Build prompt prompt = f"""I need you to enhance the SKILL.md file for the {self.skill_dir.name} skill. CURRENT SKILL.MD: {'-'*60} {current_skill_md if current_skill_md else '(No existing SKILL.md - create from scratch)'} {'-'*60} REFERENCE DOCUMENTATION: {'-'*60} """ for filename, content in references.items(): prompt += f"\n## {filename}\n{content[:15000]}\n" prompt += f""" {'-'*60} YOUR TASK: Create an EXCELLENT SKILL.md file that will help Claude use this documentation effectively. Requirements: 1. **Clear "When to Use This Skill" section** - Be SPECIFIC about trigger conditions - List concrete use cases 2. **Excellent Quick Reference section** - Extract 5-10 of the BEST, most practical code examples from the reference docs - Choose SHORT, clear examples (5-20 lines max) - Include both simple and intermediate examples - Use proper language tags (cpp, python, javascript, json, etc.) - Add clear descriptions for each example 3. **Detailed Reference Files description** - Explain what's in each reference file - Help users navigate the documentation 4. **Practical "Working with This Skill" section** - Clear guidance for beginners, intermediate, and advanced users - Navigation tips 5. **Key Concepts section** (if applicable) - Explain core concepts - Define important terminology IMPORTANT: - Extract REAL examples from the reference docs above - Prioritize SHORT, clear examples - Make it actionable and practical - Keep the frontmatter (---\\nname: ...\\n---) intact - Use proper markdown formatting SAVE THE RESULT: Save the complete enhanced SKILL.md to: {self.skill_md_path.absolute()} First, backup the original to: {self.skill_md_path.with_suffix('.md.backup').absolute()} """ return prompt def read_reference_files(self, max_chars=50000): """Read reference files with size limit""" references = {} if not self.references_dir.exists(): return references total_chars = 0 for ref_file in sorted(self.references_dir.glob("*.md")): if ref_file.name == "index.md": continue content = ref_file.read_text(encoding='utf-8') # Limit size per file if len(content) > 20000: content = content[:20000] + "\n\n[Content truncated...]" references[ref_file.name] = content total_chars += len(content) if total_chars > max_chars: break return references def run(self): """Main enhancement workflow""" print(f"\n{'='*60}") print(f"LOCAL ENHANCEMENT: {self.skill_dir.name}") print(f"{'='*60}\n") # Validate if not self.skill_dir.exists(): print(f"❌ Directory not found: {self.skill_dir}") return False # Read reference files print("📖 Reading reference documentation...") references = self.read_reference_files() if not references: print("❌ No reference files found to analyze") return False print(f" ✓ Read {len(references)} reference files") total_size = sum(len(c) for c in references.values()) print(f" ✓ Total size: {total_size:,} characters\n") # Create prompt print("📝 Creating enhancement prompt...") prompt = self.create_enhancement_prompt() if not prompt: return False # Save prompt to temp file with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False, encoding='utf-8') as f: prompt_file = f.name f.write(prompt) print(f" ✓ Prompt saved ({len(prompt):,} characters)\n") # Launch Claude Code in new terminal print("🚀 Launching Claude Code in new terminal...") print(" This will:") print(" 1. Open a new terminal window") print(" 2. Run Claude Code with the enhancement task") print(" 3. Claude will read the docs and enhance SKILL.md") print(" 4. Terminal will auto-close when done") print() # Create a shell script to run in the terminal shell_script = f'''#!/bin/bash claude {prompt_file} echo "" echo "✅ Enhancement complete!" echo "Press any key to close..." read -n 1 rm {prompt_file} ''' # Save shell script with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False) as f: script_file = f.name f.write(shell_script) os.chmod(script_file, 0o755) # Launch in new terminal (macOS specific) if sys.platform == 'darwin': # macOS Terminal - simple approach try: subprocess.Popen(['open', '-a', 'Terminal', script_file]) except Exception as e: print(f"⚠️ Error launching terminal: {e}") print(f"\nManually run: {script_file}") return False else: print("⚠️ Auto-launch only works on macOS") print(f"\nManually run this command in a new terminal:") print(f" claude '{prompt_file}'") print(f"\nThen delete the prompt file:") print(f" rm '{prompt_file}'") return False print("✅ New terminal launched with Claude Code!") print() print("📊 Status:") print(f" - Prompt file: {prompt_file}") print(f" - Skill directory: {self.skill_dir.absolute()}") print(f" - SKILL.md will be saved to: {self.skill_md_path.absolute()}") print(f" - Original backed up to: {self.skill_md_path.with_suffix('.md.backup').absolute()}") print() print("⏳ Wait for Claude Code to finish in the other terminal...") print(" (Usually takes 30-60 seconds)") print() print("💡 When done:") print(f" 1. Check the enhanced SKILL.md: {self.skill_md_path}") print(f" 2. If you don't like it, restore: mv {self.skill_md_path.with_suffix('.md.backup')} {self.skill_md_path}") print(f" 3. Package: python3 /mnt/skills/examples/skill-creator/scripts/package_skill.py {self.skill_dir}/") return True def main(): if len(sys.argv) < 2: print("Usage: python3 enhance_skill_local.py ") print() print("Examples:") print(" python3 enhance_skill_local.py output/steam-inventory/") print(" python3 enhance_skill_local.py output/react/") sys.exit(1) skill_dir = sys.argv[1] enhancer = LocalSkillEnhancer(skill_dir) success = enhancer.run() sys.exit(0 if success else 1) if __name__ == "__main__": main()