<?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: John Smith</title>
    <description>The latest articles on DEV Community by John Smith (@john_spaghetti).</description>
    <link>https://dev.to/john_spaghetti</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%2F3841008%2F5b211ec9-73df-4e75-992f-091d4f9f6c86.jpeg</url>
      <title>DEV Community: John Smith</title>
      <link>https://dev.to/john_spaghetti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/john_spaghetti"/>
    <language>en</language>
    <item>
      <title>I Ran SkillCompass on the Top 100 ClawHub Skills: Here's What I Found</title>
      <dc:creator>John Smith</dc:creator>
      <pubDate>Wed, 01 Apr 2026 10:47:24 +0000</pubDate>
      <link>https://dev.to/john_spaghetti/i-ran-skillcompass-on-the-top-100-clawhub-skills-heres-what-i-found-18fo</link>
      <guid>https://dev.to/john_spaghetti/i-ran-skillcompass-on-the-top-100-clawhub-skills-heres-what-i-found-18fo</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One CRITICAL command injection flaw&lt;/li&gt;
&lt;li&gt;A supply-chain prompt injection risk&lt;/li&gt;
&lt;li&gt;~199,000 installs exposed to documented vulnerabilities&lt;/li&gt;
&lt;li&gt;The most popular skill in the ecosystem has a near-failing score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbc6p5msr1k4hm6sj79lg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbc6p5msr1k4hm6sj79lg.png" alt="Core Summary" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Last week I wrote about &lt;a href="https://dev.to/john_spaghetti/launching-skillcompass-diagnose-and-improve-ai-agent-skills-across-6-dimensions-17h5"&gt;why I built SkillCompass&lt;/a&gt; — the measurement problem at the core of AI agent skill development, and why tweaking descriptions when the real bug is in D4 (Functional) sends you in circles. The launch got more traction than I expected: 40 GitHub stars and 420 downloads on ClawHub in the first four days, which told me the frustration was widely shared.&lt;/p&gt;

&lt;p&gt;The obvious next question: if individual skills fail silently, what does the ecosystem look like at scale?&lt;/p&gt;

&lt;p&gt;The timing felt right to ask it. &lt;a href="https://x.com/steipete/status/2036020395200090484?s=20" rel="noopener noreferrer"&gt;OpenClaw's founder&lt;/a&gt; put it well when he launched on March 22nd: &lt;a href="https://github.com/openclaw/openclaw/releases/tag/v2026.3.22-beta.1" rel="noopener noreferrer"&gt;"&lt;em&gt;With ClawHub enabled, the agent can search for skills automatically and pull in new ones as needed.&lt;/em&gt;" &lt;/a&gt;That's powerful, and it means the registry's quality floor becomes your agent's quality floor. Until now, no one had looked systematically at what's actually in there.&lt;/p&gt;

&lt;p&gt;So I ran SkillCompass on the top 100 ClawHub skills by download count. All 100 were evaluated across all six dimensions, scored, and classified.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Surface Reading: Mostly Fine
&lt;/h2&gt;

&lt;p&gt;70% of the top 100 pass all quality gates. The mean score is 73.8, just above the PASS threshold of 70. Security (D3) scores highest of any dimension at a mean of 8.5/10, making sense since the dominant skill type is single-purpose tool wrappers with naturally bounded permission scopes.&lt;/p&gt;

&lt;p&gt;If you stopped there, you'd conclude the ecosystem is in decent shape. I don't think that's the right conclusion.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Average Is Lying to You
&lt;/h2&gt;

&lt;p&gt;An 8.5 security mean is achieved because roughly 85 of 100 skills have zero D3 findings at all. The remaining 15 pull the mean down only slightly, but those 15 skills are not randomly distributed across the download ranking, they are disproportionately concentrated among the most-installed skills in the ecosystem.&lt;/p&gt;

&lt;p&gt;Four of the top 10 most-downloaded skills have documented security findings. The skills most people are actually running are overrepresented in the risk pool relative to their share of the dataset. A mean that weights a rank-95 skill equally with a rank-3 skill obscures this completely.&lt;/p&gt;

&lt;p&gt;Full severity breakdown:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzre3ijjlqwm1kpgdqpu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkzre3ijjlqwm1kpgdqpu.png" alt="Full Severity Breakdown" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The CRITICAL Finding: D3 = 0
&lt;/h2&gt;

&lt;p&gt;In SkillCompass, D3 is a hard gate. A Critical security finding forces FAIL regardless of overall score, no override. I wrote that rule deliberately: a skill that can execute arbitrary code isn't redeemable by good triggers or clean structure.&lt;/p&gt;

&lt;p&gt;One skill in this dataset hit that gate. It sits at rank 37 with 6,221 downloads, scores 61/100 overall, and has the only D3 score of zero in the entire batch.&lt;/p&gt;

&lt;p&gt;The finding is a textbook command injection. A challenge parameter passed by the user is concatenated unsanitized directly into a shell command. Any input containing shell metacharacters like &lt;code&gt;;&lt;/code&gt;, &lt;code&gt;|&lt;/code&gt;, &lt;code&gt;&amp;amp;&lt;/code&gt;, &lt;code&gt;$(&lt;/code&gt; can execute arbitrary code on the host machine. This isn't theoretical: it's a working injection vector in a skill whose name implies safety, installed on over six thousand machines.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"A skill with 6,221 downloads that cannot pass the security gate signals a dangerous gap between popularity and quality in this ecosystem."&lt;/em&gt;&lt;br&gt;
— SkillCompass Evaluation Report, March 2026&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The skill should be pulled from the registry immediately. Until it is, do not install any identity-verification skill from ClawHub without auditing its shell-handling code first.&lt;/p&gt;




&lt;h2&gt;
  
  
  The HIGH Finding: An Indirect Prompt Injection in the Registry Itself
&lt;/h2&gt;

&lt;p&gt;The HIGH finding is the most structurally interesting, because it's not really a bug in the skill itself. It's the registry itself.&lt;/p&gt;

&lt;p&gt;A meta-skill at rank 43 (4,635 downloads) is designed to help agents discover and surface other skills from ClawHub and Skills.sh. It fetches skill descriptions from public registries and injects them directly into LLM context with no sanitization or filtering.&lt;/p&gt;

&lt;p&gt;Anyone who publishes a skill with a crafted description can inject arbitrary instructions into the decision loop of any agent running a search. The attacker just needs to publish a skill, no infrastructure compromise required.&lt;/p&gt;

&lt;p&gt;The search itself is the exposure point. And this isn't something the skill author can fix, it requires the registry to implement content filtering on published descriptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  The MEDIUM Findings: Silent Data Flows
&lt;/h2&gt;

&lt;p&gt;Nine skills carry MEDIUM findings. Most are not code vulnerabilities: they involve data transmission that users may not have consented to or even know about.&lt;/p&gt;

&lt;p&gt;The two most significant patterns:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undisclosed telemetry and data transmission.&lt;/strong&gt; One analytics skill (rank 95) silently streams every CLI command's output to a third-party service, no privacy notice, no opt-out. An official CLI skill (rank 12) uploads the entire local folder on &lt;code&gt;publish&lt;/code&gt; with no pre-flight summary; co-located secrets go with it. An audio transcription skill (rank 18) POSTs audio to an external API without a confirmation step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt injection via external content.&lt;/strong&gt; The highest-download skill with a security finding (rank 8, 37,775 downloads) returns arbitrary MCP server responses directly into LLM context, a malicious server payload could override agent behavior. A video transcript skill does the same with content from arbitrary URLs. As agents become more autonomous, this attack class becomes more valuable to adversaries.&lt;/p&gt;




&lt;h2&gt;
  
  
  Beyond Security: The Quality Gap Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Security got the headlines, but the quality dimensions told an equally uncomfortable story.&lt;/p&gt;

&lt;p&gt;D2 (Trigger) is the weakest dimension at 6.2 mean. The reason is nearly universal: ~80% of skills define when to activate and never when not to. The &lt;code&gt;not_for&lt;/code&gt; rejection boundary is missing across the ecosystem, the same gap I flagged in the launch post as a common individual skill failure.&lt;/p&gt;

&lt;p&gt;D4 (Functional) sits at 6.6. About 60% of D4-weak skills document the happy path only, no error recovery, no edge cases, no output format specs. Around 40% read as user manuals rather than LLM instruction sets: they describe what the user should configure instead of what the model should do. This is the SQL skill failure mode from last week's post, playing out across dozens of skills in the wild.&lt;/p&gt;

&lt;p&gt;These aren't neglected skills. This is what the average ClawHub skill looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  Popularity ≠ Quality (Or Safety)
&lt;/h2&gt;

&lt;p&gt;The key structural finding: download count and SkillCompass score are nearly uncorrelated.&lt;/p&gt;

&lt;p&gt;The most-downloaded skill in the ecosystem (43,526 installs) scored 58, a near-FAIL, with weak functional specs and a D5 score reflecting skills that barely outperform asking the base model directly. A top-20 skill by downloads (15,623 installs) scored 56, dragged down by security concerns. Meanwhile, a rank-71 skill with under 2,300 downloads scored 88, the highest in the entire dataset.&lt;/p&gt;

&lt;p&gt;ClawHub surfaces skills by popularity. The skills most users encounter first are not the best-built or safest. They're just the oldest or most-shared.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means If You Use ClawHub Skills
&lt;/h2&gt;

&lt;p&gt;The ecosystem is not broadly unsafe: 70% PASS, mean is 73.8, and tool wrappers are lower-risk by nature. But "not broadly unsafe" is different from "safe to install without reading."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't use download count as a quality signal.&lt;/strong&gt; Read the Transparency section before activating any skill in an agentic context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scrutinize identity-verification and agent-orchestration skills.&lt;/strong&gt; Highest severity findings in this batch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review data transmission behavior before installing any skill that integrates external APIs&lt;/strong&gt;, especially analytics-adjacent ones where telemetry may be continuous and undisclosed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be cautious with any skill that discovers or loads other skills.&lt;/strong&gt; The supply-chain injection risk needs a registry-level fix, not a skill patch.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Run It On Your Own Skills
&lt;/h2&gt;

&lt;p&gt;This audit only covers the top 100 skills by download count, a tiny fraction of what's published on ClawHub.&lt;/p&gt;

&lt;p&gt;If you've built or published skills, or regularly pull skills into your Claude Code or OpenClaw setup, SkillCompass runs in minutes and shows what's wrong, where, and what to fix first.&lt;/p&gt;

&lt;p&gt;🔗 Install on ClawHub → &lt;a href="https://clawhub.ai/krishna-505/skill-compass" rel="noopener noreferrer"&gt;clawhub.ai/krishna-505/skill-compass&lt;/a&gt;&lt;br&gt;
🔗 Source code → &lt;a href="https://github.com/Evol-ai/SkillCompass" rel="noopener noreferrer"&gt;github.com/Evol-ai/SkillCompass&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start with whichever skill has been annoying you most. That's usually where the most interesting finding is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One final ask:&lt;/strong&gt; share your results. If you got a PASS, add your score to your skill's README, it's a signal to users that someone actually checked. If you got a FAIL, fix the weakest dimension, re-scan, and open a PR. Every skill that improves raises the quality floor for the whole ecosystem.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>openclaw</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Your AI Agent is Failing. You Just Don’t Know Where.</title>
      <dc:creator>John Smith</dc:creator>
      <pubDate>Thu, 26 Mar 2026 12:42:56 +0000</pubDate>
      <link>https://dev.to/john_spaghetti/launching-skillcompass-diagnose-and-improve-ai-agent-skills-across-6-dimensions-17h5</link>
      <guid>https://dev.to/john_spaghetti/launching-skillcompass-diagnose-and-improve-ai-agent-skills-across-6-dimensions-17h5</guid>
      <description>&lt;p&gt;&lt;em&gt;Launching SkillCompass: Diagnose and Improve AI Agent Skills Across 6 Dimensions&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;br&gt;
AI agent skills fail silently with wrong outputs, security gaps, and redundant logic, and the standard fix (rewrite the description, add examples, tweak instructions) usually targets the wrong layer. SkillCompass is an evaluation-driven skill evolution engine: it scores your skills across 6 dimensions, pinpoints the weakest one, fixes it, proves it worked, then moves to the next weakest. One round at a time, each one proven before the next begins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Evol-ai/SkillCompass" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; → Open source, MIT License. If you want the why and how, read on.&lt;/p&gt;



&lt;p&gt;Most AI agent skills have a quiet problem: they work well enough that you keep using them, but not well enough if you stop fiddling with them. You tweak. You rewrite. You add examples. Sometimes things improve. Often they don't. You're never quite sure which change actually helped.&lt;/p&gt;

&lt;p&gt;This isn't a skill-writing problem. It's a measurement problem. And it's worse than it sounds — without a diagnosis, every improvement attempt is as likely to make things worse as better.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Loop You Can't See You're In
&lt;/h2&gt;

&lt;p&gt;You have a skill that handles SQL queries. It works, mostly. But the outputs feel "off" on complex queries. So you try things.&lt;/p&gt;

&lt;p&gt;You rewrite the description to be more specific. Trigger rate drops; wrong outputs remain. You rewrite the core instructions — JOINs now work, but subqueries broke. You add eight few-shot examples. The prompt balloons and quality drops across the board.&lt;/p&gt;

&lt;p&gt;Three attempts. No progress. Somehow worse than when you started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The worst part? You were optimizing the wrong thing the whole time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The skill's real problem was &lt;strong&gt;D4 (Functional)&lt;/strong&gt;: once triggered, it simply didn't handle JOINs, subqueries, or CTEs in its execution. But because the description is the most visible part of a skill, that's what you kept tweaking. No amount of description tuning fixes a functional gap. You were going in circles because you had no diagnosis.&lt;/p&gt;

&lt;p&gt;This is what I kept running into. And it's what pushed me to build &lt;strong&gt;SkillCompass&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Missing Primitive: Skill Quality Measurement
&lt;/h2&gt;

&lt;p&gt;When something goes wrong with an AI agent skill today, you have almost no tools to understand &lt;em&gt;what&lt;/em&gt; is wrong. You can observe the output. You can guess. You can tweak and hope.&lt;/p&gt;

&lt;p&gt;What you can't do is say: "The trigger logic is fine. The security is clean. The problem is specifically in the functional layer, and here's exactly what's weak."&lt;/p&gt;

&lt;p&gt;That's the gap SkillCompass closes. After a lot of iteration, I landed on six dimensions that capture the full surface area of skill quality:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Weight&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;D1&lt;/td&gt;
&lt;td&gt;Structure&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Frontmatter validity, markdown format, declarations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D2&lt;/td&gt;
&lt;td&gt;Trigger&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;Activation quality, rejection accuracy, discoverability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D3&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;Secrets, injection, permissions, exfiltration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D4&lt;/td&gt;
&lt;td&gt;Functional&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Core quality, edge cases, output stability, error handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D5&lt;/td&gt;
&lt;td&gt;Comparative&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;Value over direct prompting (with vs without skill)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D6&lt;/td&gt;
&lt;td&gt;Uniqueness&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Overlap, obsolescence risk, differentiation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;D3 is a hard gate.&lt;/strong&gt; A Critical security finding forces &lt;code&gt;FAIL&lt;/code&gt; regardless of overall score — no override. &lt;strong&gt;D4 carries the most weight&lt;/strong&gt; because a skill that doesn't work after triggering fails at its core job, regardless of how clean the rest is.&lt;/p&gt;

&lt;p&gt;One command gives you the full picture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/skill-compass evaluate &lt;span class="o"&gt;{&lt;/span&gt;skill&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;╭──────────────────────────────────────────────╮
│  SkillCompass — Skill Quality Report          │
│  sql-optimizer  ·  v1.0.0  ·  atom           │
├──────────────────────────────────────────────┤
│  D1  Structure    ██████░░░░  6/10           │
│  D2  Trigger      ███░░░░░░░  3/10  ← weak  │
│  D3  Security     ██░░░░░░░░  2/10  ⛔ CRIT  │
│  D4  Functional   ████░░░░░░  4/10           │
│  D5  Comparative  +0.12                      │
│  D6  Uniqueness   ███████░░░  7/10           │
├──────────────────────────────────────────────┤
│  Overall: 38/100  ·  Verdict: FAIL           │
│  Weakest: D3 Security — user input           │
│           concatenated into instructions     │
│  Action:  Initiate eval-improve cycle        │
│                                              │
│  ┌ eval-improve cycle ─────────────────────┐ │
│  │ improve D3 → re-eval → 38→52 CAUTION  │ │
│  │ improve D2 → re-eval → 52→62 CAUTION  │ │
│  │ improve D4 → re-eval → 62→71 PASS ✓   │ │
│  └─────────────────────────────────────────┘ │
╰──────────────────────────────────────────────╯
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;D5 delta (+0.12)&lt;/strong&gt; measures how much better tasks go with the skill versus asking the base model directly — a 60/40 blend of static analysis and real usage signals (trigger accuracy, correction patterns, adoption rate). A delta near zero means the skill is barely earning its place in the context window. Above +0.20 means it's genuinely pulling its weight.&lt;/p&gt;

&lt;p&gt;The score isn't the point. The direction is. Instantly you know: stop touching the description. Fix D4. Clear the Security gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix the Weakest Link, Then the Next One
&lt;/h2&gt;

&lt;p&gt;SkillCompass targets the weakest dimension and fixes it with a scoped change — not a wholesale rewrite. Each &lt;code&gt;/eval-improve&lt;/code&gt; round follows a closed loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;fix the weakest → re-evaluate → verify improvement → next weakest&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No fix is saved unless the re-evaluation confirms it actually helped. If a dimension doesn't improve, changes are auto-discarded and the tool tells you where to look next.&lt;/p&gt;

&lt;p&gt;Each round fixes one dimension, verifies it has improved, then automatically targets the next weakest. The cycle runs up to 6 rounds (default &lt;code&gt;--max-iterations 6&lt;/code&gt;) and stops when the skill reaches &lt;code&gt;PASS&lt;/code&gt; (score ≥ 70) — or when it hits the round limit.&lt;/p&gt;

&lt;p&gt;In the example above: D3 fixed first (38→52), then D2 (52→62), then D4 (62→71 &lt;code&gt;PASS&lt;/code&gt; ✓ — cycle stops).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Diagnose → targeted fix → verified improvement → next weakness → repeat. No guesswork. No going in circles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every change creates a versioned snapshot in a &lt;code&gt;.skill-compass/&lt;/code&gt; sidecar directory. Your &lt;code&gt;SKILL.md&lt;/code&gt; stays clean, and you can roll back anytime. If any dimension drops more than 2 points after a fix, changes are automatically discarded.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dimension That Surprised Me: D6 Uniqueness
&lt;/h2&gt;

&lt;p&gt;D6 was the hardest to justify in design reviews and the one I'm most glad I kept.&lt;/p&gt;

&lt;p&gt;Models improve every month. A skill you installed eight months ago that meaningfully outperformed base Claude might now be dead weight — covering use cases the model handles natively, adding latency and context overhead for no gain. But nothing tells you this. The skill still "works." So it stays.&lt;/p&gt;

&lt;p&gt;D6 tracks this drift by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comparing skill output vs. base model on the same tasks&lt;/li&gt;
&lt;li&gt;Measuring whether the quality delta is shrinking&lt;/li&gt;
&lt;li&gt;Flagging supersession risk: &lt;em&gt;"The base model now handles 92% of this skill's test cases with equivalent or better quality"&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When that happens, you get two concrete options: &lt;strong&gt;remove the skill&lt;/strong&gt; and reclaim the context window, or &lt;strong&gt;narrow its scope&lt;/strong&gt; to the edge cases where it still wins.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;json-formatter&lt;/code&gt; case I tested, narrowing to deep-nesting scenarios only took D6 from 2 to 7, tightened the trigger, and tripled the with/without delta — because a smaller scope executed well beats a broad scope executed poorly.&lt;/p&gt;

&lt;p&gt;Without D6, skill libraries quietly accumulate dead weight. I haven't seen another tool that addresses this.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Still Figuring Out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;D5 (Comparative)&lt;/strong&gt; is the measurement I'm least satisfied with. Quantifying "how much better is the output with the skill vs. without it" is genuinely hard to make rigorous — task diversity, evaluation criteria, and base model variance all make the delta noisy. The current approach is directionally useful, but I think there's a better method.&lt;/p&gt;

&lt;p&gt;If you've solved skill-vs-baseline measurement — even partially — reply below. Are you using LLM-as-judge? Human evals on a fixed task set? Something else? Good approaches will go into v1.1 with contributor credit. This is the part of the problem I find most interesting and least resolved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone and install dependencies&lt;/span&gt;
git clone https://github.com/Evol-ai/SkillCompass.git
&lt;span class="nb"&gt;cd &lt;/span&gt;SkillCompass &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ..

&lt;span class="c"&gt;# 2. Install to user-level (all projects) or project-level (current project only)&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; SkillCompass/ ~/.claude/skills/SkillCompass/
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; SkillCompass/ .claude/skills/SkillCompass/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Node.js. Single dependency: &lt;code&gt;js-yaml&lt;/code&gt;. Works inside Claude Code or OpenClaw.&lt;/p&gt;

&lt;p&gt;Start with &lt;code&gt;/eval-skill&lt;/code&gt; on whichever skill has been annoying you most — that's usually where the most interesting finding is.&lt;/p&gt;




&lt;p&gt;The SQL skill from the opening is now at 71. The subqueries work. The security gate is clear. The description I kept rewriting was never the problem — and now I know that with certainty rather than having to guess.&lt;/p&gt;

&lt;p&gt;That's the shift SkillCompass aims to make: from &lt;em&gt;"let's try something and see"&lt;/em&gt; toward &lt;em&gt;"here's exactly what's weak, here's the fix, here's the proof it worked."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Evol-ai/SkillCompass" rel="noopener noreferrer"&gt;&lt;strong&gt;SkillCompass on GitHub&lt;/strong&gt;&lt;/a&gt; — open source, MIT license. If something breaks, open an issue. If the D5 measurement problem resonates, drop a comment.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>showdev</category>
      <category>opensource</category>
      <category>code</category>
    </item>
    <item>
      <title>Launching SkillCompass: Diagnose and Improve AI Agent Skills Across 6 Dimensions</title>
      <dc:creator>John Smith</dc:creator>
      <pubDate>Thu, 26 Mar 2026 12:42:56 +0000</pubDate>
      <link>https://dev.to/john_spaghetti/launching-skillcompass-diagnose-and-improve-ai-agent-skills-across-6-dimensions-32ek</link>
      <guid>https://dev.to/john_spaghetti/launching-skillcompass-diagnose-and-improve-ai-agent-skills-across-6-dimensions-32ek</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;br&gt;
AI agent skills fail silently with wrong outputs, security gaps, and redundant logic, and the standard fix (rewrite the description, add examples, tweak instructions) usually targets the wrong layer. SkillCompass is an evaluation-driven skill evolution engine: it scores your skills across 6 dimensions, pinpoints the weakest one, fixes it, proves it worked, then moves to the next weakest. One round at a time, each one proven before the next begins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Evol-ai/SkillCompass" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; → Open source, MIT License. If you want the why and how, read on.&lt;/p&gt;



&lt;p&gt;Most AI agent skills have a quiet problem: they work well enough that you keep using them, but not well enough if you stop fiddling with them. You tweak. You rewrite. You add examples. Sometimes things improve. Often they don't. You're never quite sure which change actually helped.&lt;/p&gt;

&lt;p&gt;This isn't a skill-writing problem. It's a measurement problem. And it's worse than it sounds — without a diagnosis, every improvement attempt is as likely to make things worse as better.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Loop You Can't See You're In
&lt;/h2&gt;

&lt;p&gt;You have a skill that handles SQL queries. It works, mostly. But the outputs feel "off" on complex queries. So you try things.&lt;/p&gt;

&lt;p&gt;You rewrite the description to be more specific. Trigger rate drops; wrong outputs remain. You rewrite the core instructions — JOINs now work, but subqueries broke. You add eight few-shot examples. The prompt balloons and quality drops across the board.&lt;/p&gt;

&lt;p&gt;Three attempts. No progress. Somehow worse than when you started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The worst part? You were optimizing the wrong thing the whole time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The skill's real problem was &lt;strong&gt;D4 (Functional)&lt;/strong&gt;: once triggered, it simply didn't handle JOINs, subqueries, or CTEs in its execution. But because the description is the most visible part of a skill, that's what you kept tweaking. No amount of description tuning fixes a functional gap. You were going in circles because you had no diagnosis.&lt;/p&gt;

&lt;p&gt;This is what I kept running into. And it's what pushed me to build &lt;strong&gt;SkillCompass&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Missing Primitive: Skill Quality Measurement
&lt;/h2&gt;

&lt;p&gt;When something goes wrong with an AI agent skill today, you have almost no tools to understand &lt;em&gt;what&lt;/em&gt; is wrong. You can observe the output. You can guess. You can tweak and hope.&lt;/p&gt;

&lt;p&gt;What you can't do is say: "The trigger logic is fine. The security is clean. The problem is specifically in the functional layer, and here's exactly what's weak."&lt;/p&gt;

&lt;p&gt;That's the gap SkillCompass closes. After a lot of iteration, I landed on six dimensions that capture the full surface area of skill quality:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Weight&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;D1&lt;/td&gt;
&lt;td&gt;Structure&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Frontmatter validity, markdown format, declarations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D2&lt;/td&gt;
&lt;td&gt;Trigger&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;Activation quality, rejection accuracy, discoverability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D3&lt;/td&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;Secrets, injection, permissions, exfiltration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D4&lt;/td&gt;
&lt;td&gt;Functional&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Core quality, edge cases, output stability, error handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D5&lt;/td&gt;
&lt;td&gt;Comparative&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;Value over direct prompting (with vs without skill)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D6&lt;/td&gt;
&lt;td&gt;Uniqueness&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Overlap, obsolescence risk, differentiation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;D3 is a hard gate.&lt;/strong&gt; A Critical security finding forces &lt;code&gt;FAIL&lt;/code&gt; regardless of overall score — no override. &lt;strong&gt;D4 carries the most weight&lt;/strong&gt; because a skill that doesn't work after triggering fails at its core job, regardless of how clean the rest is.&lt;/p&gt;

&lt;p&gt;One command gives you the full picture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/skill-compass evaluate &lt;span class="o"&gt;{&lt;/span&gt;skill&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;╭──────────────────────────────────────────────╮
│  SkillCompass — Skill Quality Report          │
│  sql-optimizer  ·  v1.0.0  ·  atom           │
├──────────────────────────────────────────────┤
│  D1  Structure    ██████░░░░  6/10           │
│  D2  Trigger      ███░░░░░░░  3/10  ← weak  │
│  D3  Security     ██░░░░░░░░  2/10  ⛔ CRIT  │
│  D4  Functional   ████░░░░░░  4/10           │
│  D5  Comparative  +0.12                      │
│  D6  Uniqueness   ███████░░░  7/10           │
├──────────────────────────────────────────────┤
│  Overall: 38/100  ·  Verdict: FAIL           │
│  Weakest: D3 Security — user input           │
│           concatenated into instructions     │
│  Action:  Initiate eval-improve cycle        │
│                                              │
│  ┌ eval-improve cycle ─────────────────────┐ │
│  │ improve D3 → re-eval → 38→52 CAUTION  │ │
│  │ improve D2 → re-eval → 52→62 CAUTION  │ │
│  │ improve D4 → re-eval → 62→71 PASS ✓   │ │
│  └─────────────────────────────────────────┘ │
╰──────────────────────────────────────────────╯
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;D5 delta (+0.12)&lt;/strong&gt; measures how much better tasks go with the skill versus asking the base model directly — a 60/40 blend of static analysis and real usage signals (trigger accuracy, correction patterns, adoption rate). A delta near zero means the skill is barely earning its place in the context window. Above +0.20 means it's genuinely pulling its weight.&lt;/p&gt;

&lt;p&gt;The score isn't the point. The direction is. Instantly you know: stop touching the description. Fix D4. Clear the Security gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix the Weakest Link, Then the Next One
&lt;/h2&gt;

&lt;p&gt;SkillCompass targets the weakest dimension and fixes it with a scoped change — not a wholesale rewrite. Each &lt;code&gt;/eval-improve&lt;/code&gt; round follows a closed loop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;fix the weakest → re-evaluate → verify improvement → next weakest&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No fix is saved unless the re-evaluation confirms it actually helped. If a dimension doesn't improve, changes are auto-discarded and the tool tells you where to look next.&lt;/p&gt;

&lt;p&gt;Each round fixes one dimension, verifies it has improved, then automatically targets the next weakest. The cycle runs up to 6 rounds (default &lt;code&gt;--max-iterations 6&lt;/code&gt;) and stops when the skill reaches &lt;code&gt;PASS&lt;/code&gt; (score ≥ 70) — or when it hits the round limit.&lt;/p&gt;

&lt;p&gt;In the example above: D3 fixed first (38→52), then D2 (52→62), then D4 (62→71 &lt;code&gt;PASS&lt;/code&gt; ✓ — cycle stops).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Diagnose → targeted fix → verified improvement → next weakness → repeat. No guesswork. No going in circles.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every change creates a versioned snapshot in a &lt;code&gt;.skill-compass/&lt;/code&gt; sidecar directory. Your &lt;code&gt;SKILL.md&lt;/code&gt; stays clean, and you can roll back anytime. If any dimension drops more than 2 points after a fix, changes are automatically discarded.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dimension That Surprised Me: D6 Uniqueness
&lt;/h2&gt;

&lt;p&gt;D6 was the hardest to justify in design reviews and the one I'm most glad I kept.&lt;/p&gt;

&lt;p&gt;Models improve every month. A skill you installed eight months ago that meaningfully outperformed base Claude might now be dead weight — covering use cases the model handles natively, adding latency and context overhead for no gain. But nothing tells you this. The skill still "works." So it stays.&lt;/p&gt;

&lt;p&gt;D6 tracks this drift by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comparing skill output vs. base model on the same tasks&lt;/li&gt;
&lt;li&gt;Measuring whether the quality delta is shrinking&lt;/li&gt;
&lt;li&gt;Flagging supersession risk: &lt;em&gt;"The base model now handles 92% of this skill's test cases with equivalent or better quality"&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When that happens, you get two concrete options: &lt;strong&gt;remove the skill&lt;/strong&gt; and reclaim the context window, or &lt;strong&gt;narrow its scope&lt;/strong&gt; to the edge cases where it still wins.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;json-formatter&lt;/code&gt; case I tested, narrowing to deep-nesting scenarios only took D6 from 2 to 7, tightened the trigger, and tripled the with/without delta — because a smaller scope executed well beats a broad scope executed poorly.&lt;/p&gt;

&lt;p&gt;Without D6, skill libraries quietly accumulate dead weight. I haven't seen another tool that addresses this.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Still Figuring Out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;D5 (Comparative)&lt;/strong&gt; is the measurement I'm least satisfied with. Quantifying "how much better is the output with the skill vs. without it" is genuinely hard to make rigorous — task diversity, evaluation criteria, and base model variance all make the delta noisy. The current approach is directionally useful, but I think there's a better method.&lt;/p&gt;

&lt;p&gt;If you've solved skill-vs-baseline measurement — even partially — reply below. Are you using LLM-as-judge? Human evals on a fixed task set? Something else? Good approaches will go into v1.1 with contributor credit. This is the part of the problem I find most interesting and least resolved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone and install dependencies&lt;/span&gt;
git clone https://github.com/Evol-ai/SkillCompass.git
&lt;span class="nb"&gt;cd &lt;/span&gt;SkillCompass &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ..

&lt;span class="c"&gt;# 2. Install to user-level (all projects) or project-level (current project only)&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; SkillCompass/ ~/.claude/skills/SkillCompass/
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; SkillCompass/ .claude/skills/SkillCompass/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt; Node.js. Single dependency: &lt;code&gt;js-yaml&lt;/code&gt;. Works inside Claude Code or OpenClaw.&lt;/p&gt;

&lt;p&gt;Start with &lt;code&gt;/eval-skill&lt;/code&gt; on whichever skill has been annoying you most — that's usually where the most interesting finding is.&lt;/p&gt;




&lt;p&gt;The SQL skill from the opening is now at 71. The subqueries work. The security gate is clear. The description I kept rewriting was never the problem — and now I know that with certainty rather than having to guess.&lt;/p&gt;

&lt;p&gt;That's the shift SkillCompass aims to make: from &lt;em&gt;"let's try something and see"&lt;/em&gt; toward &lt;em&gt;"here's exactly what's weak, here's the fix, here's the proof it worked."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Evol-ai/SkillCompass" rel="noopener noreferrer"&gt;&lt;strong&gt;SkillCompass on GitHub&lt;/strong&gt;&lt;/a&gt; — open source, MIT license. If something breaks, open an issue. If the D5 measurement problem resonates, drop a comment.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openclaw</category>
      <category>claudecode</category>
      <category>agentskills</category>
    </item>
  </channel>
</rss>
