{"slug": "how-to-create-claude-skills-build-install-and-test-your-first-skill", "title": "How to Create Claude Skills: Build, Install and Test Your First Skill", "summary": "A developer published a step-by-step guide to creating Claude Skills, walking through the required SKILL.md file with YAML frontmatter (name capped at 64 characters, description at 200), optional scripts for deterministic operations, and installation paths for Claude.ai, the desktop app, and Claude Code. The walkthrough uses a Code Review Skill enforcing TypeScript, JavaScript, and Python standards as its example, and recommends testing by running the skill in a fresh session with it disabled to compare outputs.", "body_md": "Here is how to create Claude Skills, from the first SKILL.md to installing the skill in Claude.ai or Claude Code and testing that it triggers.\n\nIn **[Part 1 of this series](https://nulltensor.com/posts/claude-skills-might-be-bigger-than/?utm_source=devto&utm_medium=crosspost&utm_campaign=claude-skills-might-be-bigger-than)** - “An Intro to Claude Skills and How It’s Different” - we covered the fundamentals:\n\nWhat Claude Skills are and how progressive disclosure works\n\nThe critical differences between Skills, Projects, MCP, and Custom Instructions\n\nA decision framework for when to use each tool\n\nWhy Skills represent a fundamental shift in AI customization\n\nIf you haven’t read Part 1 yet, I highly recommend starting there to understand the concepts we’ll be building on.\n\nNow that you understand *what* Skills are and *why* they matter, it’s time to get hands-on. In this guide, we’ll actually build Skills together, explore real-world use cases, and give you the practical knowledge to start creating your own AI expertise library.\n\n**What we’ll cover in this post:**\n\nCreating your first Skill step-by-step (Code Review Skill example)\n\nAdding executable scripts for deterministic operations\n\nReal-world Skills I use as a CTO\n\nIndustry examples from companies using Skills in production\n\nAdvanced patterns and best practices\n\nCommon pitfalls and debugging strategies\n\nYour week-by-week action plan\n\nLet’s build.\n\nIf you only want the steps, here they are. The rest of the guide explains each one.\n\nCreate a folder named after the skill, for example `code-review/`. In Claude Code the folder name becomes the command name.\n\nInside it, create `SKILL.md`. Start with YAML frontmatter containing a `name` (64 characters maximum) and a `description` (200 characters maximum). Claude reads the description to decide when to load the skill, so write it as the situations that should trigger it, not as a slogan.\n\nBelow the frontmatter, write the instructions in Markdown: when to use the skill, the standards to apply, and the output format. Put long reference material in separate files in the same folder and link to them from `SKILL.md`, so Claude loads them only when needed.\n\nAdd scripts under `scripts/` if a step needs a deterministic result, such as a complexity check.\n\nInstall it. Where you put the folder depends on which Claude you are using:\n\n**Claude.ai and the desktop app:** zip the folder (the skill folder must be the root of the zip), upload it, then enable it under **Customize, then Skills**.\n\n**Claude Code:** no upload. Save the folder as `.claude/skills/code-review/` inside the repository for a project skill, or `~/.claude/skills/code-review/` for a personal skill available in every project.\n\n`/code-review`. Then try a fresh session with the skill disabled and compare the two outputs. If the skill did not help, the instructions need work.\nNow, the full walk-through.\n\nLet’s build something real. I’ll show you how to create a “Code Review Skill” that enforces your team’s standards.\n\nEvery skill needs just one required file: `SKILL.md`\n\nHere’s the basic structure:\n\n```\n---\nname: code-review\ndescription: Review code following team standards, catching common issues and suggesting improvements\n---\n\n# Code Review Skill\n\n## When to Use This Skill\n\nActivate this skill when the user asks to:\n- Review code for quality, security, or performance\n- Check pull requests\n- Identify anti-patterns or bugs\n- Suggest code improvements\n\n## Our Code Standards\n\n### TypeScript/JavaScript\n- Use explicit return types for functions\n- Prefer const over let, never use var\n- Use meaningful variable names (no single letters except loop counters)\n- Max function length: 50 lines\n- Max file length: 300 lines\n\n### Python\n- Follow PEP 8 strictly\n- Use type hints for function signatures\n- Docstrings required for all public functions\n- Max function complexity: 10 (McCabe)\n\n### General Principles\n- DRY: Don’t Repeat Yourself\n- Single Responsibility: Each function does one thing\n- Boy Scout Rule: Leave code better than you found it\n\n## Common Anti-Patterns to Flag\n\n1. **God Objects**: Classes that do too much\n2. **Magic Numbers**: Unexplained constants\n3. **Premature Optimization**: Over-engineering simple solutions\n4. **Callback Hell**: Deeply nested callbacks (use async/await)\n5. **Swallowed Exceptions**: Empty catch blocks\n\n## Review Checklist\n\nFor each code review, check:\n- [ ] Code follows language-specific standards above\n- [ ] Functions have clear, single purposes\n- [ ] No obvious security issues (SQL injection, XSS, etc.)\n- [ ] Error handling is appropriate\n- [ ] Tests would be easy to write for this code\n- [ ] Code is self-documenting or has necessary comments\n\n## Output Format\n\nStructure your review as:\n\n**Summary**: Brief overview (2-3 sentences)\n\n**Critical Issues**: Security or correctness problems (if any)\n\n**Improvements**: Specific suggestions with line numbers\n\n**Positive Notes**: What’s done well (always include this!)\n\n**Priority**: High/Medium/Low for addressing the issues\n\n## Examples\n\n### Good Review Example\n\n**Summary**: Clean implementation of user authentication with proper validation and error handling.\n\n**Critical Issues**: None\n\n**Improvements**:\n- Line 45: Consider extracting email validation to a separate utility\n- Line 78: Add rate limiting to prevent brute force attacks\n\n**Positive Notes**: Excellent use of TypeScript types, clear separation of concerns, good test coverage.\n\n**Priority**: Medium (suggestions are enhancements, not blockers)\n```\n\n**Method 1: Manual Creation in Claude.ai**\n\nCreate a folder: `code-review/`. The folder name should match the `name` in the frontmatter.\n\nInside it, create `SKILL.md` with the content above\n\nZip the folder so that the skill folder is the root of the archive, not nested inside another folder\n\nIn Claude.ai, upload the zip and enable the skill under **Customize, then Skills**. Anthropic's [custom skills guide](https://support.claude.com/en/articles/12512198-how-to-create-custom-skills) has the current screenshots; this menu has moved once already since Skills launched.\n\nSkills need code execution enabled in your Claude.ai settings. If the upload option is missing, check that first.\n\n**Method 1b: Manual Creation in Claude Code**\n\nClaude Code reads skills from disk, so there is nothing to upload:\n\nCreate `.claude/skills/code-review/SKILL.md` in the repository (project skill, shared with everyone who clones it) or `~/.claude/skills/code-review/SKILL.md` (personal skill, every project on your machine)\n\nStart a session and type `/code-review` to run it directly, or ask for a review and let Claude pick it up from the description\n\nThe frontmatter format is the same, so one folder can serve both. The [Claude Code skills reference](https://code.claude.com/docs/en/skills) lists extra frontmatter fields that only apply there, such as pre-approving tools.\n\n**Method 2: Use the skill-creator Skill (Recommended)**\n\nThis is meta, but it works brilliantly. The [skill-creator](https://github.com/anthropics/skills/tree/main/skills/skill-creator) is a pre-installed Skill that helps you create new Skills:\n\nIn Claude.ai, enable the “skill-creator” skill (it’s pre-installed)\n\nSay: “I want to create a code review skill”\n\nClaude will interview you about your requirements\n\nIt generates the folder structure and SKILL.md file\n\nIt even bundles resources you might need\n\nThe skill-creator asks questions like:\n\n“What’s the primary purpose of this skill?”\n\n“What specific workflows should it support?”\n\n“Do you need any executable scripts?”\n\n“What format should outputs follow?”\n\nThen it creates everything for you. It’s like using an AI to teach an AI how to help you better.\n\nSkills can include scripts for deterministic operations. Here’s an example for the code review skill:\n\nCreate `code-review-skill/scripts/complexity_checker.py`:\n\n``` python\n#!/usr/bin/env python3\n“”“\nCheck code complexity metrics\n“”“\nimport sys\nimport ast\n\ndef calculate_complexity(code: str) -> dict:\n    “”“Calculate McCabe complexity and other metrics”“”\n    try:\n        tree = ast.parse(code)\n\n        stats = {\n            ‘functions’: 0,\n            ‘classes’: 0,\n            ‘lines’: len(code.split(’\\n’)),\n            ‘complexity’: 0\n        }\n\n        for node in ast.walk(tree):\n            if isinstance(node, ast.FunctionDef):\n                stats[’functions’] += 1\n                # Simple complexity: count decision points\n                complexity = 1  # Base complexity\n                for subnode in ast.walk(node):\n                    if isinstance(subnode, (ast.If, ast.While, ast.For,\n                                           ast.ExceptHandler, ast.With)):\n                        complexity += 1\n                stats[’complexity’] = max(stats[’complexity’], complexity)\n            elif isinstance(node, ast.ClassDef):\n                stats[’classes’] += 1\n\n        return stats\n    except Exception as e:\n        return {’error’: str(e)}\n\nif __name__ == ‘__main__’:\n    if len(sys.argv) < 2:\n        print(”Usage: complexity_checker.py <file_path>”)\n        sys.exit(1)\n\n    with open(sys.argv[1], ‘r’) as f:\n        code = f.read()\n\n    results = calculate_complexity(code)\n    print(f”Functions: {results.get(’functions’, 0)}”)\n    print(f”Classes: {results.get(’classes’, 0)}”)\n    print(f”Lines: {results.get(’lines’, 0)}”)\n    print(f”Max Complexity: {results.get(’complexity’, 0)}”)\n```\n\nUpdate your SKILL.md to reference it:\n\n```\n## Tools Available\n\nThis skill includes a complexity checker script. Claude can run:\n`python scripts/complexity_checker.py <file_path>`\n\nto get objective complexity metrics before reviewing.\n```\n\nNow Claude can automatically run complexity analysis without you asking, and without loading the entire script into context.\n\nThe most common problem with a first skill is that it never activates. Work through these in order:\n\n**Is it enabled?** In Claude.ai, check Customize, then Skills. In Claude Code, check the folder path and that the file is named exactly `SKILL.md`.\n\n**Does the description match how you ask?** Claude only sees the description until it decides to load the skill. A description that says “Review code following team standards” will not fire for “look at this PR”. Add the phrasings you actually use.\n\n**Is the frontmatter valid?** A missing closing `---` or a description over 200 characters is enough to break loading.\n\n**Force it once.** In Claude Code, invoke the skill with `/code-review` to confirm the instructions work when loaded. If the output is right, the problem is activation, not content, and the fix is the description.\n\nLet me share some Skills I’ve built and how they’ve changed my workflow:\n\n**Problem**: Every time I designed a new system, I’d have to remember our documentation template, what diagrams to include, what sections to cover.\n\n**Solution**: Created a skill that knows:\n\nOur architecture doc template (intro, requirements, constraints, options, decision, consequences)\n\nWhen to create sequence diagrams vs. architecture diagrams\n\nHow to document trade-offs in our style\n\nOur specific Mermaid diagram conventions\n\n**Impact**: Architecture docs that used to take 2 hours now take 30 minutes, and they’re consistently formatted.\n\n**Problem**: Creating Jira tickets with proper structure, acceptance criteria, and labels was tedious.\n\n**Solution**: Skill that encodes:\n\nOur ticket template (title format, description structure, acceptance criteria format)\n\nTeam conventions (when to add specific labels, how to estimate points)\n\nLinks to related documentation\n\nA script to validate ticket structure before creation\n\n**Impact**: Combined with MCP (Jira connection), I can now say “create tickets for this feature” and get properly structured, ready-to-assign tickets.\n\n**Problem**: Needed consistency across interviewers for technical evaluations.\n\n**Solution**: Skill containing:\n\nInterview question bank by difficulty\n\nEvaluation rubric\n\nFollow-up questions based on candidate responses\n\nHow to give hints without giving away answers\n\nNote-taking template\n\n**Impact**: All interviewers now use the same framework, making candidate comparisons fair and feedback consistent.\n\nSome real implementations from companies using Skills:\n\n**Rakuten (E-commerce Giant)**\n\nCreated Skills for management accounting workflows\n\nAutomated finance operations that previously required manual coordination across departments\n\nResult: Streamlined workflows, reduced processing time\n\n**Box (Enterprise Content Management)**\n\nSkills that transform stored files into presentations, spreadsheets, and Word documents\n\nAll outputs follow organizational standards automatically\n\nResult: Hours saved on document creation, consistent branding\n\n**Financial Services Firms**\n\nSkills for Discounted Cash Flow (DCF) modeling\n\nComparable company analysis\n\nDue diligence workflows\n\nInitiating coverage reports\n\nResult: Junior analyst work automated, consistent methodologies\n\nHere’s how to dive into Skills effectively:\n\nEnable Skills in Claude.ai under Customize, then Skills\n\nTry the [document creation skills](https://github.com/anthropics/skills/tree/main/skills) (docx, pptx, xlsx, pdf)\n\nAsk Claude to create a simple document to see Skills in action\n\nNote: You’ll see Skills mentioned in Claude’s “thinking” as it works\n\nAsk yourself:\n\nWhat task do I repeat weekly that has specific rules?\n\nWhat workflow requires consistency across my team?\n\nWhat knowledge do I keep having to explain to Claude?\n\nGood first Skills:\n\nEmail response templates for common scenarios\n\nReport generation following your format\n\nCode scaffolding for your tech stack\n\nMeeting note structuring\n\nUse the skill-creator skill to build your first custom skill\n\nTest it thoroughly with variations of your typical requests\n\nRefine the instructions based on what Claude misses\n\nShare with a colleague for feedback\n\nCreate a complementary skill\n\nTest how they work together automatically\n\nDocument what worked/didn’t work\n\nPlan your next 3 skills\n\n**Wrong**: “General writing skill” that covers emails, blogs, tweets, documentation, and reports\n\n**Right**: Separate skills for each content type with specific guidelines\n\n**Why**: Broad skills defeat the purpose of progressive disclosure. Claude loads the whole skill when any writing task comes up.\n\n**Problem**: Your skill works for the happy path but fails when things get weird\n\n**Solution**:\n\nTest with incomplete inputs\n\nTry contradictory requirements\n\nSee what happens when users ask questions the skill doesn’t anticipate\n\n**Problem**: Including your entire company handbook in a single skill\n\nRemember Claude only loads what it needs, but massive skills take longer to parse\n\nBreak large knowledge bases into focused skills\n\nUse links to external docs for reference rather than including everything\n\n**Problem**: Creating skills and never updating them as processes change\n\nVersion your skills (add version info to YAML frontmatter)\n\nSet quarterly reviews\n\nTrack when skills give outdated advice\n\nUpdate promptly when processes change\n\nOnce you’re comfortable with basic Skills, here are some advanced patterns:\n\nCreate skills that naturally work together:\n\n`data-extraction` skill → pulls data from sources\n\n`data-analysis` skill → analyzes extracted data\n\n`report-generation` skill → formats analysis into reports\n\nClaude automatically chains them when you say “analyze this data and create a report.”\n\nUse clear conditionals in your skill instructions:\n\n```\n## Decision Logic\n\n**If** the user is asking about production issues:\n- Load emergency response procedures\n- Include on-call rotation information\n- Flag the urgency level\n\n**If** the user is asking about development:\n- Load coding standards\n- Reference architecture docs\n- Suggest testing approaches\n```\n\nStart simple, evolve based on usage:\n\n**Version 1**: Basic instructions and examples\\\n\n**Version 2**: Add common edge cases you discovered\\\n\n**Version 3**: Include executable scripts for repeated computations\\\n\n**Version 4**: Add links to related skills for complex workflows\n\nTrack version history in your SKILL.md:\n\n```\n---\nname: my-skill\ndescription: Does something useful\nversion: 1.2.0\nlast_updated: 2025-11-02\n---\n\n## Changelog\n- v1.2.0: Added script for automated validation\n- v1.1.0: Expanded examples based on user feedback\n- v1.0.0: Initial release\n```\n\nBefore writing a skill, describe what you want in a normal conversation with Claude. Refine it over several chats. Once you have wording that works consistently, turn that into a skill.\n\nWhen Claude uses a skill, you see it in the “thinking” section (if enabled). This shows:\n\nWhich skills were activated\n\nWhat information was loaded\n\nHow skills interacted\n\nThis is invaluable for debugging and improving skills.\n\nIf one skill relies on another, document it:\n\n```\n## Related Skills\n\nThis skill works best when combined with:\n- `data-validation` skill (for input checking)\n- `report-formatting` skill (for output styling)\n\nClaude should load these skills when using this one for comprehensive workflows.\n## When NOT to Use This Skill\n\nDon’t use this skill for:\n- Quick calculations (use built-in math instead)\n- Simple queries (this skill is for complex analysis only)\n- Real-time data (use MCP connections for live data)\n```\n\nThis helps Claude make better decisions about skill activation.\n\nKeep a log of times when:\n\nThe skill didn’t activate when it should have\n\nThe skill activated incorrectly\n\nThe output wasn’t what you expected\n\nUse this to refine the description and instructions.\n\nThe real magic happens when you combine Skills with [MCP connections](https://www.anthropic.com/news/model-context-protocol). Here’s a concrete example:\n\n**Setup:**\n\nMCP connection to your company’s PostgreSQL database\n\nMCP connection to your Slack workspace\n\nSkill: “Database Query Standards”\n\nSkill: “Slack Message Formatting”\n\n**What you can do:**\n\n“Check yesterday’s sales numbers and post a summary to the [#sales] channel”\n\nClaude:\n\nLoads the Database Query Standards skill\n\nWrites a query following your conventions\n\nExecutes it via MCP connection\n\nLoads the Slack Message Formatting skill\n\nFormats results according to team style\n\nPosts via MCP to Slack\n\nAll of this happens automatically, consistently, following your standards.\n\nSkills will evolve. Here’s how to build them for longevity:\n\n```\nversion: 2.1.3\n# Major.Minor.Patch\n# Major: Breaking changes to skill interface\n# Minor: New features, backwards compatible\n# Patch: Bug fixes and clarifications\n## Assumptions\n\nThis skill assumes:\n- Python 3.9+ is available\n- User has basic understanding of financial models\n- Data is in CSV format with headers\n- Date format is YYYY-MM-DD\n## Deprecation Notice\n\n**Status**: Active (will be deprecated 2026-03-01)\n**Replacement**: Use `advanced-analysis-v2` skill instead\n**Migration**: [Link to migration guide]\n```\n\nOne skill, one purpose. Don’t try to make a skill that does everything. It’s easier to maintain five focused skills than one mega-skill.\n\nIf you’re still reading, you’re probably convinced that Skills are worth exploring. Here’s my opinionated take on getting started:\n\n**Start with:** A code generation skill for your stack\n\nInclude your team’s conventions\n\nAdd linting rules\n\nInclude common patterns\n\nAdd a script to validate generated code\n\n**Then build:** A PR review skill\n\nYour review checklist\n\nCommon issues in your codebase\n\nHow to give constructive feedback\n\nAuto-generated review comments format\n\n**Advanced:** A deployment verification skill\n\nPre-deployment checklist\n\nPost-deployment verification steps\n\nRollback procedures\n\nIncident response templates\n\n**Start with:** Content formatting skill\n\nYour brand voice guidelines\n\nContent structure templates\n\nSEO best practices specific to your niche\n\nCTAs that work for your audience\n\n**Then build:** Research synthesis skill\n\nHow you organize research notes\n\nCitation formats you prefer\n\nInsight extraction methods\n\nContent ideation from research\n\n**Advanced:** Multi-platform adaptation skill\n\nBlog post → Twitter thread converter\n\nTwitter thread → LinkedIn post adapter\n\nLong-form → Newsletter snippet generator\n\n**Start with:** Meeting notes skill\n\nYour meeting note template\n\nAction item formatting\n\nWho gets which type of follow-up\n\nIntegration with your project management\n\n**Then build:** Report generation skill\n\nCompany report templates\n\nKPI calculations\n\nVisualization preferences\n\nDistribution formatting\n\n**Advanced:** Process documentation skill\n\nSOP template\n\nProcess mapping conventions\n\nTroubleshooting flowcharts\n\nTraining material generation\n\nWe’re at the very beginning of the Skills era. Right now (November 2025), Skills are:\n\nTwo weeks old\n\nUnderstood by few\n\nUsed by fewer\n\nMastered by almost none\n\nThis is your opportunity.\n\nIn six months, there will be Skills for everything. There will be best practices, design patterns, and entire ecosystems. Companies will have libraries of organizational Skills. Freelancers will specialize in Skill creation. Courses will teach “Skills Engineering.”\n\nBut right now? It’s wide open.\n\nThe people who start building Skills today will be the experts everyone learns from tomorrow. The companies that encode their processes into Skills now will have a significant advantage over competitors who wait.\n\nThis isn’t hype, it’s the logical evolution of how we work with AI. Skills turn one-off interactions into reusable expertise. They turn prompt engineering into knowledge engineering. They turn AI assistance into AI collaboration.\n\n**Today:** Enable Skills in your Claude account, try the pre-built document skills\n\n**This week:** Identify one repetitive task that has specific rules, use skill-creator to build your first custom skill\n\n**This month:** Create three skills that work together, share them with a colleague or community\n\n**This quarter:** Build a library of skills for your core workflows, measure the time saved\n\nAnd when you do, I’d love to hear about it. What skills are you building? What’s working? What surprised you?\n\nBecause here’s the thing: Skills are so new that we’re all figuring this out together. Every experiment matters. Every insight contributes to the collective understanding.\n\nThe revolution isn’t coming. It’s here. And it’s wearing the humble disguise of a Markdown file in a folder.\n\n**Want to dive deeper?** Check out [Anthropic’s Skills GitHub repository](https://github.com/anthropics/skills) for examples, or join the discussion on [r/ClaudeAI](https://reddit.com/r/ClaudeAI).\n\n**Final Note:** This guide will become outdated. Skills are evolving rapidly. I’ll update it as I learn more, and I encourage you to treat Skills as an experiment, not a doctrine. Try things. Break things. Share what you learn.\n\nThe best Skill you’ll ever create is the one you start building today.\n\n*Originally published on [nulltensor.com](https://nulltensor.com/posts/getting-started-with-claude-skills/?utm_source=devto&utm_medium=crosspost&utm_campaign=getting-started-with-claude-skills).*", "url": "https://wpnews.pro/news/how-to-create-claude-skills-build-install-and-test-your-first-skill", "canonical_source": "https://dev.to/rss_holmes/how-to-create-claude-skills-build-install-and-test-your-first-skill-29e6", "published_at": "2026-09-28 03:00:00+00:00", "updated_at": "2026-09-28 03:18:29.975252+00:00", "lang": "en", "topics": ["ai-tools", "ai-products", "developer-tools", "large-language-models", "ai-agents"], "entities": ["Claude", "Claude Code", "Claude.ai", "Anthropic"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-to-create-claude-skills-build-install-and-test-your-first-skill", "markdown": "https://wpnews.pro/news/how-to-create-claude-skills-build-install-and-test-your-first-skill.md", "text": "https://wpnews.pro/news/how-to-create-claude-skills-build-install-and-test-your-first-skill.txt", "jsonld": "https://wpnews.pro/news/how-to-create-claude-skills-build-install-and-test-your-first-skill.jsonld"}}