<?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: Abdullah Al-Kindi</title>
    <description>The latest articles on DEV Community by Abdullah Al-Kindi (@abdullah_alkindi).</description>
    <link>https://dev.to/abdullah_alkindi</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%2F4123012%2Fe7998113-56ad-4d88-bf28-37a14528f1e3.png</url>
      <title>DEV Community: Abdullah Al-Kindi</title>
      <link>https://dev.to/abdullah_alkindi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abdullah_alkindi"/>
    <language>en</language>
    <item>
      <title>I Catalogued 1,000+ Open-Source Claude Agent Skills. Here's What the Ecosystem Actually Looks Like.</title>
      <dc:creator>Abdullah Al-Kindi</dc:creator>
      <pubDate>Sun, 13 Sep 2026 09:53:59 +0000</pubDate>
      <link>https://dev.to/abdullah_alkindi/i-catalogued-1000-open-source-claude-agent-skills-heres-what-the-ecosystem-actually-looks-like-196j</link>
      <guid>https://dev.to/abdullah_alkindi/i-catalogued-1000-open-source-claude-agent-skills-heres-what-the-ecosystem-actually-looks-like-196j</guid>
      <description>&lt;p&gt;Six months ago, finding a Claude agent skill meant opening fourteen GitHub tabs.&lt;/p&gt;

&lt;p&gt;You'd start at Anthropic's own repository, then follow a link from someone's post to a community fork, then another fork of that fork. Half the skills had no description. A quarter were broken. And every one of them lived in a different folder structure, so you couldn't tell what a skill did without reading its SKILL.md line by line.&lt;/p&gt;

&lt;p&gt;I got tired of it, so I indexed the whole thing. Over a thousand skills, pulled from Anthropic's public repositories and the largest community collections, then classified, described, and made downloadable from one page.&lt;/p&gt;

&lt;p&gt;Here is what the data looked like once it was all in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most skills solve five problems, not a thousand
&lt;/h2&gt;

&lt;p&gt;The long tail is real, but it is thinner than the raw count suggests. Cluster the skills by what they actually do and the vast majority fall into five buckets:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document manipulation.&lt;/strong&gt; Reading, generating and editing .docx, .pdf, .xlsx, .pptx. This is the single largest category, and it is not close. It is also the category where skills matter most, because these are formats where a model without procedural guidance produces output that is technically valid and visually broken.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codebase navigation.&lt;/strong&gt; Conventions, review checklists, framework-specific patterns. Skills here encode a team's taste, not a capability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External tool orchestration.&lt;/strong&gt; Wrappers and protocols around APIs, most of them now converging on MCP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content production in a fixed house style.&lt;/strong&gt; Marketing copy, changelogs, release notes, documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data extraction and transformation.&lt;/strong&gt; Scraping, parsing, reshaping.&lt;/p&gt;

&lt;p&gt;If you are writing your first skill, you are almost certainly writing one of these five. Look at what exists before you start.&lt;/p&gt;

&lt;h2&gt;
  
  
  The description field is doing the heavy lifting
&lt;/h2&gt;

&lt;p&gt;This was the most consequential thing I learned, and it has nothing to do with the skill's content.&lt;/p&gt;

&lt;p&gt;A skill is loaded based on its description. That field is not documentation. It is a routing decision. The model reads it and decides, in that moment, whether this skill applies to the task in front of it.&lt;/p&gt;

&lt;p&gt;Most of the skills I indexed get this wrong in one of two directions.&lt;/p&gt;

&lt;p&gt;Too narrow, and the skill never fires:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Formats&lt;/span&gt; &lt;span class="n"&gt;quarterly&lt;/span&gt; &lt;span class="n"&gt;reports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Too broad, and it fires on everything, crowding out skills that actually apply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Helps&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;documents&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;analysis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ones that work name the trigger conditions explicitly: the file extensions, the verbs, the phrasings a user would actually type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;creating&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;editing&lt;/span&gt; &lt;span class="n"&gt;Word&lt;/span&gt; &lt;span class="n"&gt;documents&lt;/span&gt;
  &lt;span class="p"&gt;(.&lt;/span&gt;&lt;span class="n"&gt;docx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;Word&lt;/span&gt; &lt;span class="nf"&gt;templates &lt;/span&gt;&lt;span class="p"&gt;(.&lt;/span&gt;&lt;span class="n"&gt;dotx&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt; &lt;span class="n"&gt;Triggers&lt;/span&gt; &lt;span class="n"&gt;include&lt;/span&gt; &lt;span class="n"&gt;mentions&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Word doc&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.docx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;reports&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;memos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;letters&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt;
  &lt;span class="n"&gt;downloadable&lt;/span&gt; &lt;span class="n"&gt;Word&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Do&lt;/span&gt; &lt;span class="n"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;PDFs&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;spreadsheets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the negative clause at the end. Telling the model when not to load a skill is as valuable as telling it when to. Roughly one skill in twelve in my index does this. Those are consistently the better-behaved ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bundled scripts beat prose instructions
&lt;/h2&gt;

&lt;p&gt;There are two ways to write a skill that manipulates files.&lt;/p&gt;

&lt;p&gt;You can describe the procedure in prose and hope the model reconstructs the code correctly each time. Or you can ship a working script alongside the skill and have the instructions point at it.&lt;/p&gt;

&lt;p&gt;The second approach wins on every axis that matters. It is deterministic, because the same script runs the same way every time. It consumes fewer tokens, because the model reads a one-line invocation instead of a forty-line explanation. And it is debuggable by a human, because the script is just a file you can run yourself.&lt;/p&gt;

&lt;p&gt;The best skills in the index are thin. A short SKILL.md that establishes when to act and what the constraints are, plus a scripts directory doing the actual work. The worst are three thousand words of prose trying to talk a model through something a twenty-line Python file would handle exactly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Progressive disclosure is the pattern nobody names
&lt;/h2&gt;

&lt;p&gt;Context is the scarcest resource in any agent system. Every token spent on an unused instruction is a token not spent on the user's actual problem.&lt;/p&gt;

&lt;p&gt;The well-built skills handle this in layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The description is always loaded. Keep it under about a hundred words.&lt;/li&gt;
&lt;li&gt;The body of SKILL.md loads when the skill triggers. Keep it under five hundred lines.&lt;/li&gt;
&lt;li&gt;Reference files load only when the body points to them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That third layer is where the detail belongs: the edge cases, the format specifications, the long tables. A skill that front-loads everything into SKILL.md is paying a context tax on every single invocation for content it needs five percent of the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd build differently now
&lt;/h2&gt;

&lt;p&gt;Three things I would tell my six-months-ago self.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write the failure mode first.&lt;/strong&gt; Before describing what the skill should do, write down what goes wrong without it. If you cannot name a specific failure, the model probably does not need the skill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test the trigger separately from the content.&lt;/strong&gt; These are two distinct failure modes. A skill can have flawless instructions that never load, and that is indistinguishable from having no skill at all. Test them apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steal structure, not content.&lt;/strong&gt; The folder layouts and disclosure patterns in mature skills are worth copying wholesale. The instructions inside them are specific to someone else's codebase and taste.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I put the index behind a free page
&lt;/h2&gt;

&lt;p&gt;The Arabic-speaking developer community is large and growing fast, and almost none of this tooling reaches it. The documentation is in English. The community discussions are in English. The gap is not talent, it is access and discovery time.&lt;/p&gt;

&lt;p&gt;So the library is free, it is in Arabic, every entry links back to its original source on GitHub, and it stays free. That is the whole business model, because there isn't one.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Abdullah Al-Kindi is the founder of Azhal, an independent digital product studio based in Saudi Arabia. He builds cross-platform apps with Flutter and Dart, deploys AI agents and automation workflows, and maintains a free open library of Claude agent skills for Arabic-speaking developers.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>claude</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
