<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: jamongx</title>
    <description>The latest articles on DEV Community by jamongx (@jamongx).</description>
    <link>https://dev.to/jamongx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F474134%2F099df63d-3950-4ba0-ad3d-208b244c3b37.jpeg</url>
      <title>DEV Community: jamongx</title>
      <link>https://dev.to/jamongx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jamongx"/>
    <language>en</language>
    <item>
      <title>Claude Code Skills Guide: How to Automate Your Development Workflow</title>
      <dc:creator>jamongx</dc:creator>
      <pubDate>Mon, 13 Jul 2026 01:14:05 +0000</pubDate>
      <link>https://dev.to/jamongx/claude-code-skills-guide-how-to-automate-your-development-workflow-39ni</link>
      <guid>https://dev.to/jamongx/claude-code-skills-guide-how-to-automate-your-development-workflow-39ni</guid>
      <description>&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; is a terminal-based coding agent that can automate the repetitive parts of your development workflow, not just generate code.&lt;/p&gt;

&lt;p&gt;This article isn't about installation or basic usage. It's written for developers already using Claude Code who want to learn &lt;strong&gt;how to design Skills that deliver meaningful automation and consistency in real-world projects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Among Claude Code's features, &lt;strong&gt;Skills&lt;/strong&gt; are the main way to define how Claude should handle repeatable tasks and follow your project's engineering conventions. In this article, we'll look at how they keep code quality consistent across a team.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Updated July 2026&lt;/strong&gt; — The January version of this guide described Skills as single &lt;code&gt;.md&lt;/code&gt; files in &lt;code&gt;.claude/commands/&lt;/code&gt;. Skills have since become directory-based (&lt;code&gt;.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;), adopted a formal frontmatter specification, and become an open standard at &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;agentskills.io&lt;/a&gt;. This revision reflects the current format. The examples come from skills I actually use in real projects.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. What Are Skills?
&lt;/h2&gt;

&lt;p&gt;In Claude Code, a &lt;strong&gt;Skill&lt;/strong&gt; is a directory containing a &lt;code&gt;SKILL.md&lt;/code&gt; file with the instructions, resources, and execution steps Claude follows when the skill is invoked. For personal and project skills, the directory name becomes the command name: &lt;code&gt;.claude/skills/code-review/SKILL.md&lt;/code&gt; gives you &lt;code&gt;/code-review&lt;/code&gt;. (Plugin skills are namespaced by the plugin name: &lt;code&gt;/my-plugin:review&lt;/code&gt;.)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Rules are your 'Policy Documents'&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Skills are your 'Standard Operating Procedures'&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important distinction is this: &lt;strong&gt;a Skill is not an independent agent.&lt;/strong&gt; It packages instructions, resources, and tool permissions—Claude, or you, decides when to invoke it, unless the frontmatter restricts invocation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you remember "custom slash commands"&lt;/strong&gt; (&lt;code&gt;.claude/commands/*.md&lt;/code&gt;): they've been merged into Skills. A file at &lt;code&gt;.claude/commands/deploy.md&lt;/code&gt; and a skill at &lt;code&gt;.claude/skills/deploy/SKILL.md&lt;/code&gt; both create &lt;code&gt;/deploy&lt;/code&gt;, and old command files keep working. Skills are the recommended format—they add supporting files, invocation control, and a richer frontmatter. If both define the same name, the skill wins.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Skill File Structure and Location
&lt;/h2&gt;

&lt;p&gt;Skills can be managed per-project or globally across your machine:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Location&lt;/th&gt;
&lt;th&gt;Applies to&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Personal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~/.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All your projects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.claude/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;This project only (shared via Git)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plugin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;plugin&amp;gt;/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wherever the plugin is enabled&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The file must be named exactly &lt;code&gt;SKILL.md&lt;/code&gt;, and a skill is a &lt;em&gt;directory&lt;/em&gt;, not a single file. That directory can carry supporting material that loads only when needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code-review/
├── SKILL.md          # required: frontmatter + instructions
├── references/       # detailed docs, loaded on demand
├── scripts/          # executable helpers (run, not loaded)
└── assets/           # templates, static resources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For me, this is the most useful improvement over the old single-file format. Keep &lt;code&gt;SKILL.md&lt;/code&gt; under ~500 lines and push heavy reference material into &lt;code&gt;references/&lt;/code&gt;—the body stays in context for the whole session once loaded, so every line has a recurring token cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Key: YAML Frontmatter
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;code-review&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Review code against .claude/rules/ for architecture and convention violations.&lt;/span&gt;
&lt;span class="na"&gt;argument-hint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[path]&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;[--staged|--branch]&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;[--fix]"&lt;/span&gt;
&lt;span class="na"&gt;allowed-tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read Glob Grep Bash(git *)&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;☝️ The &lt;code&gt;description&lt;/code&gt; field is still &lt;strong&gt;critical&lt;/strong&gt;. Claude normally sees the names and descriptions of available Skills and uses that metadata to decide which one is relevant. If you say "review my code," that request gets matched against skill descriptions—so yours must contain &lt;strong&gt;clear, searchable keywords&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One distinction worth knowing before the table: the Agent Skills standard defines the portable core fields (&lt;code&gt;name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;license&lt;/code&gt;, &lt;code&gt;compatibility&lt;/code&gt;, &lt;code&gt;metadata&lt;/code&gt;, &lt;code&gt;allowed-tools&lt;/code&gt;). The rest below—&lt;code&gt;argument-hint&lt;/code&gt;, &lt;code&gt;disable-model-invocation&lt;/code&gt;, &lt;code&gt;user-invocable&lt;/code&gt;, &lt;code&gt;context&lt;/code&gt;—are &lt;strong&gt;Claude Code extensions&lt;/strong&gt;. The table covers the fields used in this guide, not every option Claude Code supports (there are also &lt;code&gt;when_to_use&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;paths&lt;/code&gt;, &lt;code&gt;hooks&lt;/code&gt;, and more):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Display name (defaults to the directory name)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Auto-invocation trigger. Keep it ≤1,024 chars for cross-tool compatibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;argument-hint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Autocomplete hint shown after &lt;code&gt;/name&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;allowed-tools&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tools Claude may use &lt;strong&gt;without permission prompts&lt;/strong&gt; while the skill runs (space-separated per the standard; Claude Code also accepts commas)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;disable-model-invocation&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;true&lt;/code&gt; = only you can trigger it; Claude never auto-invokes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;user-invocable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;false&lt;/code&gt; = hidden from the &lt;code&gt;/&lt;/code&gt; menu; Claude-only background knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;context: fork&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run the skill in an isolated subagent context&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two of these encode a design decision the old format couldn't express: &lt;strong&gt;who is allowed to pull the trigger.&lt;/strong&gt; For side-effect workflows—deploying, committing, sending messages—set &lt;code&gt;disable-model-invocation: true&lt;/code&gt; so Claude can't decide on its own that now is a good time to deploy. For pure background knowledge, set &lt;code&gt;user-invocable: false&lt;/code&gt; so it stays out of your command menu.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Real Example: &lt;code&gt;/code-review&lt;/code&gt; Skill
&lt;/h2&gt;

&lt;p&gt;The architecture-review skill from the January version of this post is still the one I use every day—it has just grown up. Here's the frontmatter of my current production &lt;code&gt;/code-review&lt;/code&gt; skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;code-review&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Review code against .claude/rules/ for architecture and convention&lt;/span&gt;
  &lt;span class="s"&gt;violations. Supports --staged, --head, --last, --today, --branch scope options.&lt;/span&gt;
  &lt;span class="s"&gt;Add --fix to auto-correct.&lt;/span&gt;
&lt;span class="na"&gt;argument-hint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[path]&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;[--staged|--head|--last|--today|--branch]&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;[--fix]"&lt;/span&gt;
&lt;span class="na"&gt;allowed-tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Read, Glob, Grep, Edit, Bash(git *), Bash(find *)&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The current version relies on two features that didn't exist in January:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Arguments.&lt;/strong&gt; &lt;code&gt;$ARGUMENTS&lt;/code&gt; in the skill body is substituted with whatever you type after the command, so one skill covers many scopes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Invocation&lt;/th&gt;
&lt;th&gt;Review scope&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/code-review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Files changed in the last 5 commits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/code-review src/user/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A specific directory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/code-review --staged&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Final check right before committing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/code-review --branch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current branch vs main, before opening a PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/code-review --staged --fix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Auto-fix what it finds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;2. Dynamic context injection.&lt;/strong&gt; A &lt;code&gt;!`command`&lt;/code&gt; placeholder runs &lt;em&gt;before&lt;/em&gt; Claude sees the skill and gets replaced with its output. My skill uses it to enumerate the rule files and changed files up front:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Project rules: !&lt;span class="sb"&gt;`find .claude/rules -name "*.md" | sort`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Staged files: !&lt;span class="sb"&gt;`git diff --name-only --cached`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Claude Code client runs these commands during preprocessing; the model receives only the expanded results as part of the skill instructions. That removes an entire class of "the model forgot to check X first" failures.&lt;/p&gt;

&lt;p&gt;📎 Full working example: &lt;a href="///files/claude-code-skills-guide-teaching-ai-your-workflow/review-code.md"&gt;code-review SKILL.md&lt;/a&gt; — save it as &lt;code&gt;.claude/skills/code-review/SKILL.md&lt;/code&gt; in your project. The directory name is what creates the &lt;code&gt;/code-review&lt;/code&gt; command.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Claude Code already ships a bundled &lt;code&gt;/code-review&lt;/code&gt; skill. Adding your own &lt;code&gt;code-review&lt;/code&gt; skill at the personal or project level overrides the bundled version—which is exactly what I want here: a review driven by &lt;em&gt;my&lt;/em&gt; rule files, not a generic one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Why This Skill Is Powerful
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Rule-driven checklists&lt;/strong&gt; — The skill loads &lt;code&gt;.claude/rules/&lt;/code&gt; dynamically instead of hardcoding policies, so the same skill works in every project and stays aligned with the current rule files.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Severity Level definitions&lt;/strong&gt; — CRITICAL/WARNING/SUGGESTION priorities prevent getting lost in minor issues.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Explicit execution process&lt;/strong&gt; — A five-step procedure makes the review process more consistent.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. Example Output
&lt;/h2&gt;

&lt;p&gt;Running &lt;code&gt;/code-review&lt;/code&gt; in the terminal produces results like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gt"&gt;&amp;gt; /code-review src/user/api/user_router.py&lt;/span&gt;

🔍 Reviewing: src/user/api/user_router.py

&lt;span class="gu"&gt;## Architecture Violations Found&lt;/span&gt;

&lt;span class="gu"&gt;### 🚨 CRITICAL (2)&lt;/span&gt;

&lt;span class="gs"&gt;**Line 45**&lt;/span&gt;: Direct Repository import detected
&lt;span class="p"&gt;  -&lt;/span&gt; Found: &lt;span class="sb"&gt;`from src.user.repositories.user_repository import UserRepository`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; Fix: Remove this import. Use Service layer instead.

&lt;span class="gs"&gt;**Line 78**&lt;/span&gt;: Business logic in API layer
&lt;span class="p"&gt;  -&lt;/span&gt; Found: &lt;span class="sb"&gt;`if user.age &amp;gt;= 18 and user.verified:`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; Fix: Move this validation to UserService.validate_user_eligibility()

&lt;span class="gu"&gt;### ⚠️ WARNING (1)&lt;/span&gt;

&lt;span class="gs"&gt;**Line 23**&lt;/span&gt;: Service manually instantiated
&lt;span class="p"&gt;  -&lt;/span&gt; Found: &lt;span class="sb"&gt;`service = UserService()`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; Fix: Use &lt;span class="sb"&gt;`service: UserService = Depends(get_user_service)`&lt;/span&gt;

&lt;span class="gu"&gt;### 💡 SUGGESTION (1)&lt;/span&gt;

&lt;span class="gs"&gt;**Line 12**&lt;/span&gt;: Consider adding return type hint
&lt;span class="p"&gt;  -&lt;/span&gt; Current: &lt;span class="sb"&gt;`async def get_user(user_id: int):`&lt;/span&gt;
&lt;span class="p"&gt;  -&lt;/span&gt; Suggested: &lt;span class="sb"&gt;`async def get_user(user_id: int) -&amp;gt; StandardResponse[UserResponse]:`&lt;/span&gt;
&lt;span class="p"&gt;
---&lt;/span&gt;
Summary: 2 critical, 1 warning, 1 suggestion
Run &lt;span class="sb"&gt;`/code-review --fix`&lt;/span&gt; to auto-fix applicable issues.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One command produces a repeatable first-pass architecture review based on your project's documented rules. It doesn't replace human review—but it catches routine violations before a pull request ever reaches another developer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security Note: Review Skills Before Trusting Them
&lt;/h2&gt;

&lt;p&gt;The same two features that make skills powerful make them worth auditing. Skills are executable workflow definitions, not passive documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;allowed-tools&lt;/code&gt; pre-approves tool usage for the duration of the skill—no permission prompts.&lt;/li&gt;
&lt;li&gt;  Dynamic context expressions like &lt;code&gt;!`command`&lt;/code&gt; run &lt;strong&gt;during preprocessing&lt;/strong&gt;, before the rendered skill content ever reaches the model.&lt;/li&gt;
&lt;li&gt;  A skill checked into an unfamiliar repository deserves a read before you accept workspace trust. (You can disable shell preprocessing entirely with the &lt;code&gt;disableSkillShellExecution&lt;/code&gt; setting.)&lt;/li&gt;
&lt;li&gt;  Keep permissions narrow: &lt;code&gt;Bash(git *)&lt;/code&gt; beats &lt;code&gt;Bash(*)&lt;/code&gt;, and list only the tools the procedure actually needs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Where Skills Provide the Most Value
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ① Consistent Code Quality
&lt;/h3&gt;

&lt;p&gt;Human reviewers vary by mood and energy. A well-defined Skill applies the same checklist every time, reducing variation and making common omissions less likely.&lt;/p&gt;

&lt;h3&gt;
  
  
  ② Encapsulating Complex Workflows
&lt;/h3&gt;

&lt;p&gt;Tasks that touch multiple files (adding a new API endpoint requires Router, Service, Schema, and Test files) can be bundled into a single Skill, reducing the chance of missing a step.&lt;/p&gt;

&lt;h3&gt;
  
  
  ③ Knowledge as an Asset
&lt;/h3&gt;

&lt;p&gt;Embed your design philosophy into Skill files and share via Git. Junior developers can generate code that is consistently aligned with documented senior guidelines. And because Skills follow an open standard, the SOPs you encode aren't locked into one tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Practical Patterns
&lt;/h2&gt;

&lt;p&gt;These are skills currently in my &lt;code&gt;~/.claude/skills/&lt;/code&gt; and project &lt;code&gt;.claude/skills/&lt;/code&gt; directories—not hypotheticals:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Skill Command&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/code-review&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Check architecture violations against &lt;code&gt;.claude/rules/&lt;/code&gt; with severity levels and &lt;code&gt;--fix&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/commit-push&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stage, generate a conventional commit message, confirm, push&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/create-post&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scaffold a new blog post following every content convention (slug rules, image folders, frontmatter schema)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/feature-image&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Crop and convert cover images to 16:9 WebP under a size budget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;/review-skill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The meta one: audit &lt;code&gt;SKILL.md&lt;/code&gt; files against the open standard, with &lt;code&gt;--fix&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice the pattern in the last row—once your process knowledge lives in files, you can write skills that maintain other skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Key Tips for Designing Skills
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Craft your description carefully&lt;/strong&gt; — It's the primary signal Claude uses to decide when to load a Skill automatically. Describe both what the skill does and when to use it: "Review code for Clean Architecture compliance" beats "Code review."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Link to Rules&lt;/strong&gt; — Instead of duplicating policies inside the skill, load them: &lt;code&gt;.claude/rules/&lt;/code&gt; is the single source and the skill is the procedure that applies it.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Make checklists explicit&lt;/strong&gt; — "Review this code" produces inconsistent results. "Check these 5 things" delivers reliability.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Define Severity Levels&lt;/strong&gt; — Not all issues are equal. Include priority criteria in your Skill.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Add verification steps&lt;/strong&gt; — Always end with "verify the modified code builds" or "run lint" as a final check.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Keep &lt;code&gt;SKILL.md&lt;/code&gt; lean&lt;/strong&gt; — Under ~500 lines. Move deep reference material to &lt;code&gt;references/&lt;/code&gt; files that load on demand; the skill body occupies context for the whole session.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Control the trigger&lt;/strong&gt; — Side-effect workflows (deploy, commit, publish) get &lt;code&gt;disable-model-invocation: true&lt;/code&gt;. Guardrails belong in frontmatter, not in hope.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Combine with MCP&lt;/strong&gt; — If you have MCP servers connected to external tools (GitHub, databases), you can write instructions like "query the DB schema before writing code" for smarter automation.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Claude Code Skills turn repeated instructions into &lt;strong&gt;reusable, version-controlled workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Their quality depends less on clever prompting than on how clearly you've defined the process Claude should follow.&lt;/p&gt;

&lt;p&gt;If your team repeatedly explains the same conventions during code reviews, those conventions are good candidates for a Skill. Start with one narrow workflow, test it against real tasks, and refine it as your process changes.&lt;/p&gt;

&lt;p&gt;In the next article, we'll explore &lt;strong&gt;Custom Agents&lt;/strong&gt;—how to build AI that autonomously decides when to use which Skill.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Series:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://dev.to/enforcing-architecture-consistency-with-claude-rules-in-fastapi/"&gt;Enforcing Team Architecture with .claude/rules in Claude Code (FastAPI Practical Guide)&lt;/a&gt; — Teaching AI your policies&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Skills Guide&lt;/strong&gt; — Teaching AI your procedures &lt;em&gt;(this article)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="https://dev.to/claude-code-agents-guide-how-skills-power-subagents/"&gt;Claude Code Agents Guide: How Skills Power Your Subagents&lt;/a&gt; — Teaching AI when to act&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://jamongx.com/claude-code-skills-guide-teaching-ai-your-workflow/" rel="noopener noreferrer"&gt;jamongx.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
