How to Create Claude Skills: Build, Install and Test Your First Skill 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. 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. In 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: What Claude Skills are and how progressive disclosure works The critical differences between Skills, Projects, MCP, and Custom Instructions A decision framework for when to use each tool Why Skills represent a fundamental shift in AI customization If you haven’t read Part 1 yet, I highly recommend starting there to understand the concepts we’ll be building on. Now 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. What we’ll cover in this post: Creating your first Skill step-by-step Code Review Skill example Adding executable scripts for deterministic operations Real-world Skills I use as a CTO Industry examples from companies using Skills in production Advanced patterns and best practices Common pitfalls and debugging strategies Your week-by-week action plan Let’s build. If you only want the steps, here they are. The rest of the guide explains each one. Create a folder named after the skill, for example code-review/ . In Claude Code the folder name becomes the command name. Inside 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. Below 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. Add scripts under scripts/ if a step needs a deterministic result, such as a complexity check. Install it. Where you put the folder depends on which Claude you are using: 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 . 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. /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. Now, the full walk-through. Let’s build something real. I’ll show you how to create a “Code Review Skill” that enforces your team’s standards. Every skill needs just one required file: SKILL.md Here’s the basic structure: --- name: code-review description: Review code following team standards, catching common issues and suggesting improvements --- Code Review Skill When to Use This Skill Activate this skill when the user asks to: - Review code for quality, security, or performance - Check pull requests - Identify anti-patterns or bugs - Suggest code improvements Our Code Standards TypeScript/JavaScript - Use explicit return types for functions - Prefer const over let, never use var - Use meaningful variable names no single letters except loop counters - Max function length: 50 lines - Max file length: 300 lines Python - Follow PEP 8 strictly - Use type hints for function signatures - Docstrings required for all public functions - Max function complexity: 10 McCabe General Principles - DRY: Don’t Repeat Yourself - Single Responsibility: Each function does one thing - Boy Scout Rule: Leave code better than you found it Common Anti-Patterns to Flag 1. God Objects : Classes that do too much 2. Magic Numbers : Unexplained constants 3. Premature Optimization : Over-engineering simple solutions 4. Callback Hell : Deeply nested callbacks use async/await 5. Swallowed Exceptions : Empty catch blocks Review Checklist For each code review, check: - Code follows language-specific standards above - Functions have clear, single purposes - No obvious security issues SQL injection, XSS, etc. - Error handling is appropriate - Tests would be easy to write for this code - Code is self-documenting or has necessary comments Output Format Structure your review as: Summary : Brief overview 2-3 sentences Critical Issues : Security or correctness problems if any Improvements : Specific suggestions with line numbers Positive Notes : What’s done well always include this Priority : High/Medium/Low for addressing the issues Examples Good Review Example Summary : Clean implementation of user authentication with proper validation and error handling. Critical Issues : None Improvements : - Line 45: Consider extracting email validation to a separate utility - Line 78: Add rate limiting to prevent brute force attacks Positive Notes : Excellent use of TypeScript types, clear separation of concerns, good test coverage. Priority : Medium suggestions are enhancements, not blockers Method 1: Manual Creation in Claude.ai Create a folder: code-review/ . The folder name should match the name in the frontmatter. Inside it, create SKILL.md with the content above Zip the folder so that the skill folder is the root of the archive, not nested inside another folder In 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. Skills need code execution enabled in your Claude.ai settings. If the upload option is missing, check that first. Method 1b: Manual Creation in Claude Code Claude Code reads skills from disk, so there is nothing to upload: Create .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 Start a session and type /code-review to run it directly, or ask for a review and let Claude pick it up from the description The 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. Method 2: Use the skill-creator Skill Recommended This 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: In Claude.ai, enable the “skill-creator” skill it’s pre-installed Say: “I want to create a code review skill” Claude will interview you about your requirements It generates the folder structure and SKILL.md file It even bundles resources you might need The skill-creator asks questions like: “What’s the primary purpose of this skill?” “What specific workflows should it support?” “Do you need any executable scripts?” “What format should outputs follow?” Then it creates everything for you. It’s like using an AI to teach an AI how to help you better. Skills can include scripts for deterministic operations. Here’s an example for the code review skill: Create code-review-skill/scripts/complexity checker.py : python /usr/bin/env python3 “”“ Check code complexity metrics “”“ import sys import ast def calculate complexity code: str - dict: “”“Calculate McCabe complexity and other metrics”“” try: tree = ast.parse code stats = { ‘functions’: 0, ‘classes’: 0, ‘lines’: len code.split ’\n’ , ‘complexity’: 0 } for node in ast.walk tree : if isinstance node, ast.FunctionDef : stats ’functions’ += 1 Simple complexity: count decision points complexity = 1 Base complexity for subnode in ast.walk node : if isinstance subnode, ast.If, ast.While, ast.For, ast.ExceptHandler, ast.With : complexity += 1 stats ’complexity’ = max stats ’complexity’ , complexity elif isinstance node, ast.ClassDef : stats ’classes’ += 1 return stats except Exception as e: return {’error’: str e } if name == ‘ main ’: if len sys.argv < 2: print ”Usage: complexity checker.py