<?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: Wilbur</title>
    <description>The latest articles on DEV Community by Wilbur (@wilbur_1b5edac720f26e7532).</description>
    <link>https://dev.to/wilbur_1b5edac720f26e7532</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3951619%2F79099d61-f605-4692-9a29-0582002fffb4.png</url>
      <title>DEV Community: Wilbur</title>
      <link>https://dev.to/wilbur_1b5edac720f26e7532</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wilbur_1b5edac720f26e7532"/>
    <language>en</language>
    <item>
      <title>From Claude Code Setup to Your First Agent Skill</title>
      <dc:creator>Wilbur</dc:creator>
      <pubDate>Tue, 26 May 2026 09:12:46 +0000</pubDate>
      <link>https://dev.to/wilbur_1b5edac720f26e7532/from-claude-code-setup-to-your-first-agent-skill-5d8p</link>
      <guid>https://dev.to/wilbur_1b5edac720f26e7532/from-claude-code-setup-to-your-first-agent-skill-5d8p</guid>
      <description>&lt;h2&gt;
  
  
  Why Agent Skills are worth learning
&lt;/h2&gt;

&lt;p&gt;Agent Skills are easy to misunderstand at first. They are not a new model, a plugin marketplace, or a magic prompt format.&lt;/p&gt;

&lt;p&gt;In Claude Code, a Skill is a reusable capability package: a folder that contains instructions, optional scripts, optional references, and optional assets. Claude Code can discover that folder and load the right instructions when your task matches the Skill description.&lt;/p&gt;

&lt;p&gt;That makes Skills useful for work you repeat often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writing API docs in a specific format&lt;/li&gt;
&lt;li&gt;reviewing pull requests against team rules&lt;/li&gt;
&lt;li&gt;generating release notes&lt;/li&gt;
&lt;li&gt;transforming internal notes into publishable posts&lt;/li&gt;
&lt;li&gt;running a script-heavy workflow with the right guardrails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of rewriting the same prompt every week, you turn it into a small engineering artifact.&lt;/p&gt;

&lt;p&gt;This guide walks through a practical setup: choose an AI coding IDE, install Claude Code, optionally configure a provider switcher, verify the CLI, and create your first Skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;IDE with terminal&lt;/td&gt;
&lt;td&gt;Run commands and work with code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;The agentic CLI that can use Skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Provider switcher, optional&lt;/td&gt;
&lt;td&gt;Route Claude Code through a supported provider or gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Fresh terminal session&lt;/td&gt;
&lt;td&gt;Ensure environment changes are loaded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Claude Code test&lt;/td&gt;
&lt;td&gt;Confirm the CLI can respond&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Agent Skill&lt;/td&gt;
&lt;td&gt;Package a repeatable workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The exact provider setup depends on your region, organization, and account. The Skill concept stays the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Choose an IDE with a real terminal
&lt;/h2&gt;

&lt;p&gt;You can use any developer environment that gives you a terminal and access to your project files.&lt;/p&gt;

&lt;p&gt;Good options include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;li&gt;Cursor&lt;/li&gt;
&lt;li&gt;Trae&lt;/li&gt;
&lt;li&gt;Google Antigravity&lt;/li&gt;
&lt;li&gt;a plain terminal plus your preferred editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google describes Antigravity as an agent-first development environment, so it can be a comfortable place to run AI coding workflows. But it is not required for Skills. Claude Code works from the terminal, so the IDE is mostly there to make editing, chatting, and command execution easier.&lt;/p&gt;

&lt;p&gt;For this workflow, keep one practical habit: after changing provider or environment settings, open a new terminal before testing &lt;code&gt;claude&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Install Claude Code
&lt;/h2&gt;

&lt;p&gt;The current Claude Code documentation lists native installers for macOS, Linux, WSL, Windows PowerShell, and Windows CMD.&lt;/p&gt;

&lt;p&gt;For macOS, Linux, or WSL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://claude.ai/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Windows PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://claude.ai/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Windows CMD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://claude.ai/install.cmd -o install.cmd &amp;amp;&amp;amp; install.cmd &amp;amp;&amp;amp; del install.cmd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installation, open a new terminal and verify the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Windows cannot find the &lt;code&gt;claude&lt;/code&gt; command, the most common cause is that the terminal has not picked up the updated &lt;code&gt;PATH&lt;/code&gt;. Close the terminal, open a new one, and try again.&lt;/p&gt;

&lt;p&gt;If it still fails, check whether Claude Code's binary directory is on your &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Decide how Claude Code should reach the model provider
&lt;/h2&gt;

&lt;p&gt;If you use Claude Code with Anthropic directly, follow the normal Claude Code authentication flow.&lt;/p&gt;

&lt;p&gt;If your network, organization, or region requires an Anthropic-compatible gateway, a provider switcher can help you avoid manually editing environment variables and config files.&lt;/p&gt;

&lt;p&gt;One open-source option is &lt;a href="https://github.com/farion1231/cc-switch" rel="noopener noreferrer"&gt;CC-Switch&lt;/a&gt;, a desktop tool that manages providers for Claude Code and other AI coding CLIs. Treat it as a third-party tool: check the current release notes, download from the official GitHub repository, and review what it changes before using it in a work environment.&lt;/p&gt;

&lt;p&gt;A typical custom provider setup looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Provider type: Anthropic-compatible
Base URL: https://your-gateway.example.com
API key: sk-your-provider-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using ClaudeAPI as the gateway, replace the placeholder base URL and key with the values from your ClaudeAPI console. Avoid hardcoding API keys in project files.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Apply the provider configuration
&lt;/h2&gt;

&lt;p&gt;The exact CC-Switch UI can change between releases, but the flow is usually:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install CC-Switch from its GitHub Releases page.&lt;/li&gt;
&lt;li&gt;Add or confirm a Claude Code provider profile.&lt;/li&gt;
&lt;li&gt;Add your Anthropic-compatible gateway provider.&lt;/li&gt;
&lt;li&gt;Select or enable that provider for Claude Code.&lt;/li&gt;
&lt;li&gt;Open a new terminal in your IDE.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last step matters. Existing terminals often keep the old environment. If you configured a provider and then reused an old terminal, Claude Code may still behave as if nothing changed.&lt;/p&gt;

&lt;p&gt;Now start Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful launch should take you into the Claude Code interface. If it sends you into an unexpected login flow, the provider settings probably did not reach the terminal session. Recheck the selected provider and start a new terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Run a tiny end-to-end test
&lt;/h2&gt;

&lt;p&gt;Inside Claude Code, ask for something simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write the smallest possible Python hello world.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are not testing coding ability here. You are testing the full path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IDE terminal -&amp;gt; Claude Code -&amp;gt; provider configuration -&amp;gt; model response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that works, you can move on to Skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Create your first Agent Skill
&lt;/h2&gt;

&lt;p&gt;According to the official Claude Code Skills documentation, a Skill can live in a personal folder or inside a project.&lt;/p&gt;

&lt;p&gt;A personal Skill is available across projects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.claude/skills/&amp;lt;skill-name&amp;gt;/SKILL.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A project Skill lives with one repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.claude/skills/&amp;lt;skill-name&amp;gt;/SKILL.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A minimal Skill only needs one file: &lt;code&gt;SKILL.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is a small Skill for writing API endpoint documentation.&lt;/p&gt;

&lt;p&gt;Create the folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.claude/skills/api-doc-writer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;New-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ItemType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="bp"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;\.claude\skills\api-doc-writer"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then create &lt;code&gt;SKILL.md&lt;/code&gt;:&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="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;api-doc-writer&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;Write clear API endpoint documentation. Use when the user asks for REST API docs, endpoint specs, request/response examples, parameter tables, or error code documentation.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# API Doc Writer&lt;/span&gt;

&lt;span class="gu"&gt;## Instructions&lt;/span&gt;

Write concise developer-facing API documentation.

Always include:
&lt;span class="p"&gt;
1.&lt;/span&gt; Endpoint summary
&lt;span class="p"&gt;2.&lt;/span&gt; HTTP method and path
&lt;span class="p"&gt;3.&lt;/span&gt; Authentication requirements
&lt;span class="p"&gt;4.&lt;/span&gt; Request parameters
&lt;span class="p"&gt;5.&lt;/span&gt; Example request
&lt;span class="p"&gt;6.&lt;/span&gt; Example response
&lt;span class="p"&gt;7.&lt;/span&gt; Error responses
&lt;span class="p"&gt;8.&lt;/span&gt; Notes about edge cases or rate limits when known

Use Markdown tables for parameters and errors. Use fenced code blocks with language identifiers for JSON examples. Do not invent fields that were not provided by the user.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now restart or refresh Claude Code if needed, then test the Skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api-doc-writer Write docs for GET /users. It supports page, limit, and role query parameters. It returns id, name, email, and role.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A good result should look like structured API documentation, not a generic explanation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a Skill reliable?
&lt;/h2&gt;

&lt;p&gt;The most important part of a Skill is the description. Claude Code uses it to decide when the Skill is relevant.&lt;/p&gt;

&lt;p&gt;Weak description:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Helps with docs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better description:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write clear API endpoint documentation. Use when the user asks for REST API docs, endpoint specs, request/response examples, parameter tables, or error code documentation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Good Skills also separate concerns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-skill/
├── SKILL.md
├── scripts/
├── references/
└── assets/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;scripts/&lt;/code&gt; when the workflow needs repeatable code. Use &lt;code&gt;references/&lt;/code&gt; for detailed rules, schemas, examples, or style guides. Use &lt;code&gt;assets/&lt;/code&gt; for templates, images, config examples, or files that the Skill should reuse.&lt;/p&gt;

&lt;p&gt;Do not put everything into one giant instruction file. Keep &lt;code&gt;SKILL.md&lt;/code&gt; focused on when to use the Skill and what workflow to follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common setup issues
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claude: command not found&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Terminal did not pick up &lt;code&gt;PATH&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Open a new terminal and check the install path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code asks for an unexpected login&lt;/td&gt;
&lt;td&gt;Provider settings did not apply&lt;/td&gt;
&lt;td&gt;Recheck provider selection and start a new terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API key returns 401&lt;/td&gt;
&lt;td&gt;Wrong key or wrong provider profile&lt;/td&gt;
&lt;td&gt;Regenerate or reselect the key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API key returns 403&lt;/td&gt;
&lt;td&gt;Account, group, or permission issue&lt;/td&gt;
&lt;td&gt;Check provider dashboard permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill does not activate&lt;/td&gt;
&lt;td&gt;Description is too vague&lt;/td&gt;
&lt;td&gt;Rewrite the description with concrete trigger phrases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill activates but ignores your format&lt;/td&gt;
&lt;td&gt;Instructions are too loose&lt;/td&gt;
&lt;td&gt;Use ordered steps and required output sections&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A note on provider gateways
&lt;/h2&gt;

&lt;p&gt;A gateway such as ClaudeAPI should be treated as infrastructure, not as the main point of the tutorial. The developer value comes from understanding how Claude Code and Skills work.&lt;/p&gt;

&lt;p&gt;If you mention a provider in a public article, be precise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;say whether it is official or third-party&lt;/li&gt;
&lt;li&gt;avoid implying affiliation with Anthropic unless documented&lt;/li&gt;
&lt;li&gt;avoid stale model, pricing, or latency claims&lt;/li&gt;
&lt;li&gt;link to current provider docs instead of hardcoding promises&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That keeps the article useful even when provider details change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to go next
&lt;/h2&gt;

&lt;p&gt;Once the first Skill works, build one for a task you already repeat.&lt;/p&gt;

&lt;p&gt;Good candidates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a code review checklist for your stack&lt;/li&gt;
&lt;li&gt;a bug report triage format&lt;/li&gt;
&lt;li&gt;an API documentation generator&lt;/li&gt;
&lt;li&gt;a changelog writer&lt;/li&gt;
&lt;li&gt;a migration guide assistant&lt;/li&gt;
&lt;li&gt;a blog post rewriter with publication rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to collect Skills. The goal is to turn repeated instructions into small, inspectable tools that make your day-to-day development work easier to repeat.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
