<?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: Shen Huang</title>
    <description>The latest articles on DEV Community by Shen Huang (@shenhuang).</description>
    <link>https://dev.to/shenhuang</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%2F936104%2F47f8fca8-4790-49fe-889b-9f4179202580.jpg</url>
      <title>DEV Community: Shen Huang</title>
      <link>https://dev.to/shenhuang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shenhuang"/>
    <language>en</language>
    <item>
      <title>How I Indexed 2,000 Claude Code Skills (And What the Install Data Says About AI Coding in 2026)</title>
      <dc:creator>Shen Huang</dc:creator>
      <pubDate>Sun, 24 May 2026 04:57:53 +0000</pubDate>
      <link>https://dev.to/shenhuang/how-i-indexed-2000-claude-code-skills-and-what-the-install-data-says-about-ai-coding-in-2026-3k80</link>
      <guid>https://dev.to/shenhuang/how-i-indexed-2000-claude-code-skills-and-what-the-install-data-says-about-ai-coding-in-2026-3k80</guid>
      <description>&lt;h2&gt;
  
  
  The problem: 2,000 skills, no map
&lt;/h2&gt;

&lt;p&gt;Claude Code skills exploded across 2025 and into 2026. The official registry at &lt;a href="https://skills.sh" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt; and the parallel ecosystem on GitHub now expose well over 2,000 public skills — covering everything from &lt;code&gt;frontend-design&lt;/code&gt; patterns to &lt;code&gt;azure-deploy&lt;/code&gt; to &lt;code&gt;nano-banana-pro&lt;/code&gt; image generation. The format won. Every serious AI coding agent — Claude Code, Cursor, OpenSeek, Codex — now ships some flavor of "loadable context package".&lt;/p&gt;

&lt;p&gt;But there is no ranked, install-weighted, searchable index. The registry lists skills alphabetically, paginates them across dozens of pages, and doesn't surface install volume in a way you can sort. You discover a useful skill one of three ways: someone tweets it, you scroll forever, or you already know the author/repo combo. None of those scale past a few hundred skills.&lt;/p&gt;

&lt;p&gt;So I built one. &lt;a href="https://orangebot.ai/skills" rel="noopener noreferrer"&gt;orangebot.ai/skills&lt;/a&gt; is a ranked, filterable index of 1,998 public Claude Code skills sorted by weekly install volume, tagged by domain, with individual detail pages for the top 50 highest-installed entries. It is the page I wanted six months ago and didn't have.&lt;/p&gt;

&lt;p&gt;This post is the build log. Three parts: the stack (boring on purpose), the SEO crisis I walked into and the fix that shipped today, and what the install data actually says about where AI coding tools are headed in 2026.&lt;/p&gt;

&lt;p&gt;Source registry: &lt;a href="https://skills.sh" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt;. The catalog: &lt;a href="https://orangebot.ai/skills" rel="noopener noreferrer"&gt;orangebot.ai/skills&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack (zero infrastructure surprises)
&lt;/h2&gt;

&lt;p&gt;I picked the most boring stack I could justify, on purpose. The catalog is not where I want to spend operational attention — the data pipeline and the SEO are.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16 App Router&lt;/strong&gt;. Server Components by default so Google sees real HTML, not a JS shell. Routing is filesystem-based, the metadata API is built in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firebase App Hosting&lt;/strong&gt;. &lt;code&gt;git push&lt;/code&gt; deploys. No manual ops, no Docker, no Kubernetes. Free tier so far.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron on a Linux box at home&lt;/strong&gt;. A Python scraper runs daily on &lt;code&gt;lich-ubuntu&lt;/code&gt;, normalizes install counts and author attribution, and writes a single ~2.5MB &lt;code&gt;skills_index.json&lt;/code&gt; to the repo's &lt;code&gt;public/data/&lt;/code&gt; directory. When the file changes, the next deploy picks it up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No database at request time&lt;/strong&gt;. The Next.js page reads the JSON at revalidate time (every 6 hours). Firebase serves the rendered HTML. No Postgres, no Redis, no Firestore call on the hot path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the whole architecture. One JSON file, one Next.js page, one daily cron. The catalog routes in the repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/app/skills/page.js              # SSR catalog (server component)
src/app/skills/SkillsClient.js      # interactive island (search/filter/sort)
src/app/skills/[category]/page.js   # domain filter pages
src/app/s/[id]/page.js              # individual skill detail page (top 50)
public/data/skills_index.json       # 1,998 entries, ~2.5MB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Honest disclosure on the data freshness: &lt;code&gt;skills_index.json&lt;/code&gt; is regenerated weekly-ish during active development as I iterate on the parser. The production cron — separate Python service on &lt;code&gt;lich-ubuntu&lt;/code&gt; — is what stabilizes it to daily; that part is still rolling out. So treat the snapshot as recent, not "fresh this morning".&lt;/p&gt;

&lt;p&gt;The decision I keep being asked about is "why not a database". Two reasons. First, the catalog is read-mostly and changes once a day — that is the canonical shape of a static JSON file, not a row store. Second, every database I'd add is a thing that can break at 2am while I'm asleep. A JSON file in &lt;code&gt;public/&lt;/code&gt; cannot break. It can be wrong, but it cannot be down.&lt;/p&gt;

&lt;p&gt;The pillar guide that links into the catalog lives at &lt;a href="https://orangebot.ai/blog/claude-code-skills-guide" rel="noopener noreferrer"&gt;orangebot.ai/blog/claude-code-skills-guide&lt;/a&gt;. It's the long-form companion — what skills are, how to install them, when to pick a skill vs an MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  The SEO crisis I didn't see coming
&lt;/h2&gt;

&lt;p&gt;Six months after the catalog went live, I finally opened Google Search Console. The numbers were ugly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;21 of 186 known URLs indexed. 11.3%.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;151 URLs sitting in "Discovered – currently not indexed". &lt;code&gt;last_crawled&lt;/code&gt; timestamps were the 1969-12-31 Unix epoch — Google had registered the URLs from my sitemap and then never bothered to fetch them.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;/skills&lt;/code&gt; page alone was getting &lt;strong&gt;5,651 impressions per week&lt;/strong&gt; but a &lt;strong&gt;0.12% CTR&lt;/strong&gt;. People were seeing the page in search results, then bouncing past it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the failure mode for a content site. I had built the catalog, written the pillar guide, submitted the sitemap, and Google's verdict was a polite "no thanks". The 5,651 impressions were good news in disguise — the demand was real; the page just couldn't convert it because the SERP snippet was the generic brand tagline (no &lt;code&gt;generateMetadata&lt;/code&gt;) and the rendered HTML was an empty client shell.&lt;/p&gt;

&lt;p&gt;I spent a day diagnosing it instead of pushing more content. Three root causes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Root cause 1 — the catalog page was a client component.&lt;/strong&gt; The top of &lt;code&gt;src/app/skills/page.js&lt;/code&gt; had &lt;code&gt;'use client'&lt;/code&gt;. The server-rendered HTML was an empty &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;. Googlebot does run JS, eventually, but it queues JS-heavy pages on a much slower second pass, and for low-authority sites it often skips the second pass entirely. So Google saw a blank page, picked up the brand-tagline title from the root layout, and ranked accordingly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Root cause 2 — sitemap pollution.&lt;/strong&gt; Next.js App Router auto-generates routes from &lt;code&gt;metadata&lt;/code&gt; files like &lt;code&gt;opengraph-image.js&lt;/code&gt;, &lt;code&gt;twitter-image.js&lt;/code&gt;, &lt;code&gt;icon.js&lt;/code&gt;. My &lt;code&gt;next-sitemap.config.js&lt;/code&gt; was pulling all of them into &lt;code&gt;sitemap.xml&lt;/code&gt;, plus eight stale scaffold routes I never finished (&lt;code&gt;/cjobs&lt;/code&gt;, &lt;code&gt;/mnews&lt;/code&gt;, &lt;code&gt;/jobmatch&lt;/code&gt;, &lt;code&gt;/jobs&lt;/code&gt;, &lt;code&gt;/datajobs&lt;/code&gt;, &lt;code&gt;/photographer&lt;/code&gt;, &lt;code&gt;/prop&lt;/code&gt;, &lt;code&gt;/startups&lt;/code&gt;). Google saw 173 sitemap entries, found ~18 weren't HTML and another 8 returned thin/empty pages, and started treating the whole sitemap as low-trust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Root cause 3 — the homepage didn't link to /skills, /tools, or /digest in visible HTML.&lt;/strong&gt; The nav was inside a &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; element that collapsed by default. Googlebot reads &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; content fine, but the absence of a prominent above-the-fold internal link to /skills meant the catalog was getting near-zero internal PageRank from the homepage.&lt;/p&gt;

&lt;p&gt;Three causes, four commits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: 4 commits, ~180 file-changes (shipped 2026-05-23)
&lt;/h2&gt;

&lt;p&gt;Four commits today, between 11:15 and 18:59 PDT: &lt;code&gt;e9b4ba0&lt;/code&gt; (SSR-ify /skills /tools /news, clean sitemap, add hub nav), &lt;code&gt;d09e0e4&lt;/code&gt; (CTR titles, EEAT author page, 5 tools SSR, news sitemap), &lt;code&gt;4442629&lt;/code&gt; (P1+P2 push — 5 more tools SSR, deep compare pages, blog framework + 8 posts), &lt;code&gt;505ec1d&lt;/code&gt; (P3 push — 23 tools SSR, 50 skill detail pages, hub depth, OG image, newsletter). Cumulative session touched ~180 file-changes across the four commits per the P3 commit message.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit 1 — convert &lt;code&gt;/skills&lt;/code&gt; and the other hub routes from client components to a server-shell + client-island pattern.&lt;/strong&gt; This is the generally useful pattern I'd recommend to anyone running into the same problem. The shape is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/app/skills/page.js  — Server Component (NO 'use client')&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node:fs/promises&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node:path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;SkillsClient&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./SkillsClient&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revalidate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;21600&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 6 hours&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2,000+ Best Claude Code Skills (2026): Top Skills by Installs &amp;amp; Stars&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A working library of Claude Code skills from across GitHub...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;alternates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;canonical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/skills&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SkillsPage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cwd&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;skills_index.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;utf-8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allSkills&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;topSkills&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;allSkills&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;installs&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;installs&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;itemListJsonLd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ItemList&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;numberOfItems&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;topSkills&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;itemListElement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;topSkills&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ListItem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})),&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;
        &lt;span class="na"&gt;dangerouslySetInnerHTML&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;__html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;itemListJsonLd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;details&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Text view · &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;allSkills&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; skills&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Claude Code Skills Index&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ol&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;topSkills&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;skillId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repository&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;strong&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;strong&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;by @&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; — &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;weeklyInstalls&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; installs/wk
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ol&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;details&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SkillsClient&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trick: the server emits the real top-60 list inside a &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; block (collapsed for users, fully readable for crawlers) plus a JSON-LD &lt;code&gt;ItemList&lt;/code&gt; schema, and only then mounts the interactive &lt;code&gt;&amp;lt;SkillsClient /&amp;gt;&lt;/code&gt;. Google indexes the static list. Users get the interactive shell. Both reads are served from the same render.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit 2 — clean the sitemap.&lt;/strong&gt; Excluded &lt;code&gt;/*/opengraph-image&lt;/code&gt;, &lt;code&gt;/*/twitter-image&lt;/code&gt;, &lt;code&gt;/*/icon&lt;/code&gt;, &lt;code&gt;/feed.xml&lt;/code&gt;, &lt;code&gt;/feed.json&lt;/code&gt;, &lt;code&gt;/feed/*&lt;/code&gt;, &lt;code&gt;/api/*&lt;/code&gt;, and the eight stale scaffold routes from &lt;code&gt;next-sitemap.config.js&lt;/code&gt;. Sitemap went 173 → 154 (cleanup), then later commits added &lt;code&gt;/blog/*&lt;/code&gt; posts and 50 &lt;code&gt;/s/[id]&lt;/code&gt; detail pages, bringing it to &lt;strong&gt;219 URLs today&lt;/strong&gt;. All current entries return HTML with &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;meta description&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit 3 — visible homepage nav.&lt;/strong&gt; Added a &lt;code&gt;&amp;lt;nav aria-label="Site sections"&amp;gt;&lt;/code&gt; block at the top of the homepage with plain anchor tags to &lt;code&gt;/skills&lt;/code&gt;, &lt;code&gt;/tools&lt;/code&gt;, &lt;code&gt;/digest&lt;/code&gt;, &lt;code&gt;/news&lt;/code&gt;, &lt;code&gt;/blog&lt;/code&gt;, &lt;code&gt;/sources&lt;/code&gt;, &lt;code&gt;/topics&lt;/code&gt;, &lt;code&gt;/year/2026&lt;/code&gt;, &lt;code&gt;/compare&lt;/code&gt;. No &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt;, no JS, no collapse. Boring. Crawlable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit 4 — depth on /tools, /blog, /s/[id], OG images, newsletter.&lt;/strong&gt; SSR'd 33 of 36 tool pages (each with HowTo / FAQPage / SoftwareApplication / BreadcrumbList JSON-LD), shipped 13 blog posts as the editorial layer, built 50 individual &lt;code&gt;/s/[id]&lt;/code&gt; skill detail pages, added a dynamic &lt;code&gt;next/og&lt;/code&gt; card per blog post, and embedded Substack signup on every post page.&lt;/p&gt;

&lt;p&gt;Expected D7 trajectory (forecast, not measured — post deploys today): indexed URLs &lt;strong&gt;30-40&lt;/strong&gt; by 2026-05-30, &lt;strong&gt;60-80&lt;/strong&gt; by 2026-06-06. The new &lt;code&gt;/skills&lt;/code&gt; title — "2,000+ Best Claude Code Skills (2026): Top Skills by Installs &amp;amp; Stars" — replaces the generic brand tagline that was driving the 0.12% CTR. I'll update this post with measured GSC numbers once the D7 pull lands.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the install data says about AI coding in 2026
&lt;/h2&gt;

&lt;p&gt;The catalog gives a daily-updated view into which skills people actually install. Here is the top 10 by weekly installs, pulled directly from &lt;code&gt;skills_index.json&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Author&lt;/th&gt;
&lt;th&gt;Installs&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;find-skills&lt;/td&gt;
&lt;td&gt;vercel-labs/skills&lt;/td&gt;
&lt;td&gt;753,732&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;vercel-react-best-practices&lt;/td&gt;
&lt;td&gt;vercel-labs/agent-skills&lt;/td&gt;
&lt;td&gt;256,738&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;frontend-design&lt;/td&gt;
&lt;td&gt;anthropics/skills&lt;/td&gt;
&lt;td&gt;212,072&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;web-design-guidelines&lt;/td&gt;
&lt;td&gt;vercel-labs/agent-skills&lt;/td&gt;
&lt;td&gt;206,584&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;remotion-best-practices&lt;/td&gt;
&lt;td&gt;remotion-dev/skills&lt;/td&gt;
&lt;td&gt;182,063&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;azure-ai&lt;/td&gt;
&lt;td&gt;microsoft/github-copilot-for-azure&lt;/td&gt;
&lt;td&gt;146,196&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;azure-deploy&lt;/td&gt;
&lt;td&gt;microsoft/github-copilot-for-azure&lt;/td&gt;
&lt;td&gt;145,787&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;azure-storage&lt;/td&gt;
&lt;td&gt;microsoft/github-copilot-for-azure&lt;/td&gt;
&lt;td&gt;145,752&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;azure-cost-optimization&lt;/td&gt;
&lt;td&gt;microsoft/github-copilot-for-azure&lt;/td&gt;
&lt;td&gt;145,752&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;azure-diagnostics&lt;/td&gt;
&lt;td&gt;microsoft/github-copilot-for-azure&lt;/td&gt;
&lt;td&gt;145,697&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four things jump out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;find-skills&lt;/code&gt; is #1 with 753K weekly installs.&lt;/strong&gt; A meta-skill — a skill whose only job is to discover other skills — outranks every domain-specific skill in the index by roughly 3x. The discovery layer is the actual moat. That's the thesis behind this entire catalog. The #1 skill is published by &lt;code&gt;vercel-labs/skills&lt;/code&gt;, not Anthropic, which is itself a tell about who is racing to own the discovery primitive. Detail page: &lt;a href="https://orangebot.ai/s/find-skills" rel="noopener noreferrer"&gt;orangebot.ai/s/find-skills&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft owns the platform-skill volume.&lt;/strong&gt; The &lt;code&gt;microsoft/github-copilot-for-azure&lt;/code&gt; family ships 22 skills totaling &lt;strong&gt;2.86M installs&lt;/strong&gt; — the largest publisher in the index by total installs. The next-largest publisher is the parallel &lt;code&gt;microsoft/azure-skills&lt;/code&gt; family at 2.29M across more skills. Combined: ~5.15M installs, all curated, all opinionated, all shipped as part of GitHub Copilot for Azure's default surface. If you're a cloud provider in 2026 and you don't have a curated skill family, you are losing this distribution channel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vercel is quietly the #2 publisher by reach.&lt;/strong&gt; &lt;code&gt;vercel-labs/skills&lt;/code&gt; (the &lt;code&gt;find-skills&lt;/code&gt; repo) plus &lt;code&gt;vercel-labs/agent-skills&lt;/code&gt; total 1.42M installs across very few skills — meaning per-skill leverage is higher than Microsoft's. Vercel is shipping skills that get installed almost universally rather than the broad-Azure-surface bet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inferen-sh and the open-source long tail are real.&lt;/strong&gt; &lt;code&gt;inferen-sh/skills&lt;/code&gt; totals 1.94M installs across 79 skills, mostly multimodal (image/video gen, OCR, Qwen). Six months ago "coding skills" meant test runners and migration helpers. Today image/video generation skills are colonizing the surface — because the same developer building a Next.js app is also generating OG images, hero shots, and product demos. The agent is the unified tool.&lt;/p&gt;

&lt;p&gt;Top publishers by total installs in the current index:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Publisher&lt;/th&gt;
&lt;th&gt;Skills&lt;/th&gt;
&lt;th&gt;Total Installs&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;microsoft/github-copilot-for-azure&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;2,858,606&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;microsoft/azure-skills&lt;/td&gt;
&lt;td&gt;(multiple)&lt;/td&gt;
&lt;td&gt;2,291,209&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;inferen-sh/skills&lt;/td&gt;
&lt;td&gt;79&lt;/td&gt;
&lt;td&gt;1,941,845&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;github/awesome-copilot&lt;/td&gt;
&lt;td&gt;209&lt;/td&gt;
&lt;td&gt;1,598,674&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;coreyhaines31/marketingskills&lt;/td&gt;
&lt;td&gt;(multiple)&lt;/td&gt;
&lt;td&gt;873,458&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;anthropics/skills&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;757,840&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;vercel-labs/skills&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;753,732&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;supercent-io/skills-template&lt;/td&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;td&gt;745,913&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Total index: 1,998 skills, 401 unique publishers, ~19.2M cumulative weekly installs. Top 8 publishers hold roughly 60% of total volume — the power law is sharper than I expected, but the long tail of ~390 smaller publishers still matters.&lt;/p&gt;

&lt;p&gt;The thesis I'd commit to: by Q4 2026 the meaningful divide will be &lt;strong&gt;"agents that ship and run skills" (Claude Code, Cursor, OpenSeek) vs "agents that just call LLMs" (everyone else)&lt;/strong&gt;. Skills become the unit of teaching an agent your stack. If your agent can't load a community skill in one command, it's a closed garden, and closed gardens lose to ecosystems.&lt;/p&gt;

&lt;p&gt;A note on install-count interpretability: the numbers above include CI installs, scripted bulk installs, and probably some bot traffic. Treat them as a relative-popularity proxy, not a clean user count. The signal is noisy at the absolute level but the relative ranking holds up across multiple pulls.&lt;/p&gt;

&lt;p&gt;For reference, the actual install command shape from &lt;code&gt;skills_index.json&lt;/code&gt;:&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;# Install find-skills (the #1 skill, by Vercel Labs)&lt;/span&gt;
npx skills add https://github.com/vercel-labs/skills &lt;span class="nt"&gt;--skill&lt;/span&gt; find-skills

&lt;span class="c"&gt;# Install frontend-design (by Anthropic)&lt;/span&gt;
npx skills add https://github.com/anthropics/skills &lt;span class="nt"&gt;--skill&lt;/span&gt; frontend-design

&lt;span class="c"&gt;# Install azure-deploy (Microsoft)&lt;/span&gt;
npx skills add https://github.com/microsoft/github-copilot-for-azure &lt;span class="nt"&gt;--skill&lt;/span&gt; azure-deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One command. No package.json, no virtualenv, no Docker. That low-friction install path is what makes install counts a usable popularity signal in the first place.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The 50 highest-installed skills now have individual SEO pages at &lt;code&gt;/s/[id]&lt;/code&gt; — searchable on Google for the skill ID directly, with &lt;code&gt;SoftwareApplication&lt;/code&gt; + &lt;code&gt;BreadcrumbList&lt;/code&gt; structured data and inline install instructions. That doubles the catalog's surface area for long-tail queries like "claude code find-skills install" or "azure-deploy skill setup".&lt;/p&gt;

&lt;p&gt;The daily digest email is up next — a curated 5-skill brief delivered each morning, weighted toward newly-published skills with unusually high first-week install velocity. The signal I'm hunting: which skills are about to break out before they hit the top 50.&lt;/p&gt;

&lt;p&gt;Open invitation: if you publish a Claude Code skill — public Git repo with a valid &lt;code&gt;SKILL.md&lt;/code&gt;, listed on skills.sh or installable via &lt;code&gt;npx skills add&lt;/code&gt; — the next scrape will pick it up. No submission form, no review queue, no gatekeeping. If your skill is good, the install counts will surface it on their own; if it isn't, no one will install it and that's also fine.&lt;/p&gt;

&lt;p&gt;The live catalog is at &lt;a href="https://orangebot.ai/skills" rel="noopener noreferrer"&gt;orangebot.ai/skills&lt;/a&gt;. The long-form pillar — what skills are, how they compare to MCP servers, how to write one — is at &lt;a href="https://orangebot.ai/blog/claude-code-skills-guide" rel="noopener noreferrer"&gt;orangebot.ai/blog/claude-code-skills-guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Go publish a skill. I'll see it on the next scrape.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>webdev</category>
      <category>seo</category>
    </item>
    <item>
      <title>I got tired of all the desktop agent tools being macOS only, so I built one for Linux.</title>
      <dc:creator>Shen Huang</dc:creator>
      <pubDate>Sun, 01 Feb 2026 06:26:59 +0000</pubDate>
      <link>https://dev.to/shenhuang/i-got-tired-of-all-the-desktop-agent-tools-being-macos-only-so-i-built-one-for-linux-4mh5</link>
      <guid>https://dev.to/shenhuang/i-got-tired-of-all-the-desktop-agent-tools-being-macos-only-so-i-built-one-for-linux-4mh5</guid>
      <description>&lt;p&gt;Like many of you, I’ve been messing around with OpenClaw  (formerly clawdbot) and the whole "vibe coding" concept. It's cool, but finding a decent tool that actually drives the UI on Linux was a pain. Everything seems to be Mac-first right now. &lt;/p&gt;

&lt;p&gt;Since I do all my local inference on Linux, I built a dedicated tool for it.&lt;/p&gt;

&lt;p&gt;It's called &lt;strong&gt;Peepbo&lt;/strong&gt; : &lt;a href="https://github.com/LichAmnesia/peepbo" rel="noopener noreferrer"&gt;https://github.com/LichAmnesia/peepbo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically, it's a lightweight Node/TS wrapper that connects your local VLM (LLaVA, Qwen-VL, etc) to your desktop Linux environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vision:&lt;/strong&gt; Wraps &lt;code&gt;scrot&lt;/code&gt;, &lt;code&gt;gnome-screenshot&lt;/code&gt;, or &lt;code&gt;gdbus&lt;/code&gt; so the model can see the screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; Uses &lt;code&gt;xdotool&lt;/code&gt; to handle mouse/keyboard inputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wayland:&lt;/strong&gt; Yes, it works on GNOME Wayland, but you'll need to run in unsafe mode (details in the readme).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's open source. Give it a shot if you're trying to build agents on Linux and let me know if it breaks anything.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>linux</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
