<?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: Lin Zhu</title>
    <description>The latest articles on DEV Community by Lin Zhu (@lin_zhu_c66f7f4c200d3a186).</description>
    <link>https://dev.to/lin_zhu_c66f7f4c200d3a186</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%2F3926034%2F7ef812a4-b446-4792-baa6-313a520e71cb.jpg</url>
      <title>DEV Community: Lin Zhu</title>
      <link>https://dev.to/lin_zhu_c66f7f4c200d3a186</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lin_zhu_c66f7f4c200d3a186"/>
    <language>en</language>
    <item>
      <title>HappyCapy ships skill-share analytics, contributor leaderboards &amp; one-click install for Claude agents</title>
      <dc:creator>Lin Zhu</dc:creator>
      <pubDate>Tue, 12 May 2026 03:47:56 +0000</pubDate>
      <link>https://dev.to/lin_zhu_c66f7f4c200d3a186/happycapy-ships-skill-share-analytics-contributor-leaderboards-one-click-install-for-claude-2ig9</link>
      <guid>https://dev.to/lin_zhu_c66f7f4c200d3a186/happycapy-ships-skill-share-analytics-contributor-leaderboards-one-click-install-for-claude-2ig9</guid>
      <description>&lt;h2&gt;
  
  
  What HappyCapy is (30-second version)
&lt;/h2&gt;

&lt;p&gt;HappyCapy is a marketplace for Claude Skills — composable units of agent behavior you can drop into any Claude-powered app. Think npm for agent reasoning patterns, but with first-class Anthropic SDK integration.&lt;/p&gt;

&lt;p&gt;This week we shipped three things: skill-share analytics, a contributor leaderboard, and a one-click installer. Here's what each means for you as a builder.&lt;/p&gt;

&lt;h2&gt;
  
  
  One-click skill adoption
&lt;/h2&gt;

&lt;p&gt;Previously, adding a community skill to your agent meant copying boilerplate, wiring up the tool manifest, and hoping the author's README was accurate. The new installer does all that in one call:&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;happycapy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;install_skill&lt;/span&gt;

&lt;span class="n"&gt;skill&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;install_skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web-search-summarizer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.2.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-4-7&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;# auto-wired tool definitions
&lt;/span&gt;    &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# author's tested system prompt
&lt;/span&gt;    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&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;role&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;user&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;content&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;Summarize the top 3 AI papers from last week.&lt;/span&gt;&lt;span class="sh"&gt;"&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;skill.tools&lt;/code&gt; and &lt;code&gt;skill.system_prompt&lt;/code&gt; are pre-validated against the Anthropic tool-use spec. If the skill author updates to a new schema format, the installer adapts on the fly — your call site stays unchanged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skill-share analytics
&lt;/h2&gt;

&lt;p&gt;As a consumer, you can now see how a skill performs in the wild before you adopt it. The dashboard surfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Invocation counts&lt;/strong&gt; — how often the skill's tools are called across all installs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error rate by model&lt;/strong&gt; — whether the skill behaves differently on Haiku vs Sonnet vs Opus&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency p50 / p95&lt;/strong&gt; — useful when a skill sits in a latency-sensitive path&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token usage histogram&lt;/strong&gt; — reason about cost before you commit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As an author, the same data flows into your contributor dashboard. You can see which tools are actually invoked, where users drop off, and which model tiers trigger the most errors.&lt;/p&gt;

&lt;p&gt;Claude's tool-use behavior varies subtly across model tiers. A skill that's solid on Opus can hit edge cases on Haiku. Analytics makes that visible before it bites you in prod.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributor leaderboards
&lt;/h2&gt;

&lt;p&gt;The leaderboard ranks contributors by a composite score: installs, 30-day retention, and community ratings — not raw download counts.&lt;/p&gt;

&lt;p&gt;High-retention skills tend to be the ones that actually work in production rather than just demos that look sharp in a README. The leaderboard surfaces those.&lt;/p&gt;

&lt;p&gt;For contributors, it creates a concrete feedback loop. High installs but low retention means something is wrong with the out-of-the-box experience — more actionable than a vague thumbs-down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills compose
&lt;/h2&gt;

&lt;p&gt;Skills are designed to layer. The installer supports loading multiple skills and merging their tool manifests:&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;happycapy&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;install_skill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;merge_skills&lt;/span&gt;

&lt;span class="n"&gt;search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;install_skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web-search-summarizer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;install_skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;persistent-memory&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;combined&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;merge_skills&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4-6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2048&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;combined&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;combined&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&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;&lt;code&gt;merge_skills&lt;/code&gt; handles tool name collisions and system prompt merging with a priority stack — last skill listed wins on conflicts. Inspect &lt;code&gt;combined.manifest&lt;/code&gt; to see the resolved state before you run anything.&lt;/p&gt;

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

&lt;p&gt;Skill versioning with semantic diff (see exactly what changed between v1.1 and v1.2 before upgrading) and a local test runner that replays real invocation traces against a new skill version.&lt;/p&gt;

&lt;p&gt;If you're building Claude agents and want to stop copy-pasting tool boilerplate, check it out: &lt;a href="https://happycapy.ai" rel="noopener noreferrer"&gt;https://happycapy.ai&lt;/a&gt;. Free to browse; publishing requires an account.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudeai</category>
      <category>agents</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
