<?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: Leonid Korsakov</title>
    <description>The latest articles on DEV Community by Leonid Korsakov (@komandakycto).</description>
    <link>https://dev.to/komandakycto</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%2F4038469%2F205f20d3-ede9-47b1-8161-9feb69ed4211.png</url>
      <title>DEV Community: Leonid Korsakov</title>
      <link>https://dev.to/komandakycto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/komandakycto"/>
    <language>en</language>
    <item>
      <title>Stop copy-pasting AI skills between repos: package them as Claude Code plugins</title>
      <dc:creator>Leonid Korsakov</dc:creator>
      <pubDate>Mon, 20 Jul 2026 15:55:30 +0000</pubDate>
      <link>https://dev.to/komandakycto/stop-copy-pasting-ai-skills-between-repos-package-them-as-claude-code-plugins-509h</link>
      <guid>https://dev.to/komandakycto/stop-copy-pasting-ai-skills-between-repos-package-them-as-claude-code-plugins-509h</guid>
      <description>&lt;p&gt;As we enter the era of AI and skills, we're faced with new problems — a flood of skills, and sharing knowledge (skills) between repos.&lt;/p&gt;

&lt;p&gt;Every day I work with a bunch of repositories, predominantly in Go but sometimes in other languages. A huge layer of knowledge should be shared between them — for example, how to connect to a database, how to deploy a test tag to a staging server, or where to find the logs.&lt;/p&gt;

&lt;p&gt;For several months I had been creating skills in each repo and putting the specific knowledge there, but after a while I realized I'd started copy-pasting some skills between repos.&lt;/p&gt;

&lt;p&gt;Claude built a plugin system, and it has become mature enough to use. I created a separate repository with the skills and scripts that should be shared, and organized them as plugins. A plugin is just a structured git repository with files — convenient to maintain and update.&lt;/p&gt;

&lt;p&gt;The install part is also very flexible: when I install a plugin, I can choose the scope.&lt;/p&gt;

&lt;p&gt;Here's what it looks like in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The layout
&lt;/h2&gt;

&lt;p&gt;A plugin is just a git repo with a known layout. One marketplace can hold many plugins; one plugin can hold many skills.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dev-claude-plugins/                     # the repo you push to git
├── .claude-plugin/
│   └── marketplace.json                # catalog — lists the plugins in this repo
└── plugins/
    └── backend-dev/                    # one installable plugin
        ├── .claude-plugin/
        │   └── plugin.json             # manifest: name, version, author
        └── skills/
            ├── query-db/
            │   └── SKILL.md            # how to connect + run read-only queries
            ├── staging-deploy/
            │   ├── SKILL.md            # deploy a dev tag to staging
            │   └── references/         # extra docs the skill loads on demand
            └── logs/
                ├── SKILL.md            # where/how to read service logs
                └── scripts/            # helper shell scripts the skill calls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The two manifests
&lt;/h2&gt;

&lt;p&gt;They're tiny. &lt;code&gt;marketplace.json&lt;/code&gt; is the catalog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"myteam"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"owner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-handle"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"backend-dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./plugins/backend-dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Shared cross-repo dev skills: db queries, staging deploy, logs."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;plugin.json&lt;/code&gt; is the plugin itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"backend-dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-handle"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Shared cross-repo development skills."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installing it
&lt;/h2&gt;

&lt;p&gt;Two commands. First register the marketplace, then install the plugin — this is where you pick the scope (this project only, or user scope = available in every repo):&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="c"&gt;# 1. Register the marketplace — a local path while iterating…&lt;/span&gt;
/plugin marketplace add ~/work/dev-claude-plugins
&lt;span class="c"&gt;#    …or a git URL to share across machines and teammates:&lt;/span&gt;
/plugin marketplace add https://github.com/your-handle/dev-claude-plugins.git

&lt;span class="c"&gt;# 2. Install the plugin (prompts for scope: user vs project)&lt;/span&gt;
/plugin &lt;span class="nb"&gt;install &lt;/span&gt;backend-dev@myteam
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now every skill is available as &lt;code&gt;/backend-dev:&amp;lt;skill&amp;gt;&lt;/code&gt; — e.g. &lt;code&gt;/backend-dev:query-db&lt;/code&gt; — and also auto-triggers from its description.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating
&lt;/h2&gt;

&lt;p&gt;Add a skill once, bump &lt;code&gt;version&lt;/code&gt;, push, and every repo picks it up with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin marketplace update myteam
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One source of truth instead of copy-pasting &lt;code&gt;.claude/skills/&lt;/code&gt; into ten repos.&lt;/p&gt;

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