<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Prismatic]]></title><description><![CDATA[How software developers use AI to do real work]]></description><link>https://www.prismatic.to</link><image><url>https://substackcdn.com/image/fetch/$s_!Gzj-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaae2866-0b92-4ef6-a2b4-0f6bc40237f6_1280x1280.png</url><title>Prismatic</title><link>https://www.prismatic.to</link></image><generator>Substack</generator><lastBuildDate>Sat, 11 Apr 2026 07:03:10 GMT</lastBuildDate><atom:link href="https://www.prismatic.to/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Landon Schropp]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[prismaticdevelopment@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[prismaticdevelopment@substack.com]]></itunes:email><itunes:name><![CDATA[Landon Schropp]]></itunes:name></itunes:owner><itunes:author><![CDATA[Landon Schropp]]></itunes:author><googleplay:owner><![CDATA[prismaticdevelopment@substack.com]]></googleplay:owner><googleplay:email><![CDATA[prismaticdevelopment@substack.com]]></googleplay:email><googleplay:author><![CDATA[Landon Schropp]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Claude Code's Skills Are Kinda Broken—Use Them Anyway]]></title><description><![CDATA[An honest look at Claude Code skills&#8212;what works, what doesn't, and how to actually use them reliably in practice]]></description><link>https://www.prismatic.to/p/claude-codes-skills-are-kinda-broken</link><guid isPermaLink="false">https://www.prismatic.to/p/claude-codes-skills-are-kinda-broken</guid><dc:creator><![CDATA[Landon Schropp]]></dc:creator><pubDate>Sat, 14 Mar 2026 17:20:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Gzj-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbaae2866-0b92-4ef6-a2b4-0f6bc40237f6_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Claude Code&#8217;s skills documentation says that:</p><blockquote><p>Claude automatically applies relevant Skills when your request matches their description.</p></blockquote><p>That&#8217;s <em>utter horseshit</em>. And it&#8217;s not the only broken promise with skills.</p><p>After converting my entire workflow to skills and testing every several approaches to improving invocation rates, I can tell you auto-invocation never works consistently. You&#8217;ll either manually invoke every skill (defeating the purpose) or write aggressive workarounds to force the behavior Anthropic promises out of the box.</p><p>I still love skills and think they&#8217;re the next evolution of agent tooling. The specification is elegant and mixing scripts with prompts is powerful. But there are several broken promises with skills&#8212;and you need to know what works and what doesn&#8217;t before you spend days converting your workflow like I did.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.prismatic.to/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Prismatic! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>Auto-Invocation</h2><p>The <a href="https://code.claude.com/docs/en/skills#how-skills-work">writing on the box</a> for skills says:</p><blockquote><p>Skills are <strong>model-invoked</strong>: Claude decides which Skills to use based on your request. You don&#8217;t need to explicitly call a Skill.</p></blockquote><p><em>This is a lie.</em> In practice, Claude Code will not invoke skills related to a task most of the time. I&#8217;ve experimented with a few different approaches to try and improve this.</p><ul><li><p><strong>Skill description optimization:</strong> The <a href="https://github.com/obra/superpowers">Superpowers</a> repository has a <a href="https://github.com/obra/superpowers/blob/main/skills/writing-skills/SKILL.md#1-rich-description-field">Claude Search Optimization</a> guide to help increase the hit rate of descriptions. The gist is that the description should state <em>when</em> the skill should be used, not what it does. This helps, but still isn&#8217;t enough to get Claude Code to take initiative.</p></li><li><p><strong>Using Superpowers:</strong> The Superpowers repo also includes a <code>using-superpowers</code><a href="https://github.com/obra/superpowers/blob/main/skills/using-superpowers/SKILL.md"> skill</a> that gives strict instructions to agents to always invoke a skill. This didn&#8217;t help&#8212;Claude Code still ignored skills.</p></li><li><p><code>CLAUDE.md</code><strong> instructions:</strong> I also experimented with writing <a href="https://github.com/LandonSchropp/agent-toolkit/blob/main/references/using-skills.md">instructions</a> similar to Using Superpowers and directly reading that file from my <code>CLAUDE.md</code> file via an <code>@</code> reference. This seems to work better, and has the bonus of not requiring an extra skill invocation, but it&#8217;s not perfect.</p></li></ul><p>For now, I&#8217;ve decided I&#8217;d rather invoke skills manually. It&#8217;s a pain, but at least I <em>know</em> that they&#8217;ll run when I need them.</p><h2>Slash Commands</h2><p>Claude Code recently consolidated Skills and commands, which makes a lot of sense&#8212;they&#8217;re both forms of pre-written prompts, but skills have more capabilities. Even better, skills now show up as custom slash commands, making them easy to invoke with <code>/my-awesome-skill</code>. So auto-invocation not working isn&#8217;t that big of a deal, right?</p><p>Well, not quite. There are several quirky issues with how skills show up as slash commands that can easily bite you.</p><ul><li><p><strong>Marketplace skills <a href="https://github.com/anthropics/claude-code/issues/18949">don&#8217;t show up</a> in slash command autocompletion.</strong> This makes it difficult to distribute skills, especially if you&#8217;re trying to share them with a development team.</p></li><li><p><strong>Skills don&#8217;t work with <a href="https://github.com/anthropics/claude-code/issues/18192">subdirectories</a> or <a href="https://github.com/anthropics/claude-code/issues/26489">parent directories</a>.</strong> This can make organizing skills more complicated in more complex setups, such as monorepos.</p></li><li><p><strong>The name field in skills is <a href="https://github.com/anthropics/claude-code/issues/17271">finicky</a>.</strong> It has strange interactions with slash commands, stripping out the namespace sometimes depending on how they&#8217;re loaded. The current fix is to leave it out entirely &#8212; Claude Code falls back to the directory name.</p></li></ul><p>None of these are insurmountable, but it&#8217;s better to be aware of them <em>before</em> you spend a bunch of time debugging. I&#8217;m hoping that Anthropic fixes these soon. However, the Claude Code Issues page is a <a href="https://github.com/anthropics/claude-code/issues?q=is:issue%20state:closed%20label:bug">haunted graveyard of bugs</a>, so who knows?</p><h2>Script Paths</h2><p>Slash commands aside, there&#8217;s another problem with how Claude Code handles skills.</p><p>The <a href="https://agentskills.io/specification">Agent Skills specification</a> says that skill paths should be relative to the <code>SKILL.md</code> file itself&#8212;reference files like <code>references/example.md</code> or scripts like <code>scripts/example.ts</code> directly.</p><p>And yet Claude Code seems <em>clueless</em> when trying to find these files. Here&#8217;s an example of the agent struggling to find a script file from my <code>planning</code> skill:</p><pre><code><code>&#9210; Bash(scripts/generate-plan-template.ts --help)
  &#9151;  Error: Exit code 127
     (eval):1: no such file or directory: scripts/generate-plan-template.ts

&#9210; Bash(bun scripts/generate-plan-template.ts --help)
  &#9151;  Error: Exit code 1
     error: Module not found "scripts/generate-plan-template.ts"

&#9210; Search(pattern: "scripts/**/*")
  &#9151;  Found 0 files

&#9210; Bash(ls -la)
  &#9151;  (No content)

&#9210; Since the scripts/generate-plan-template.ts doesn't exist in this project, I'll create the plan file directly.</code></code></pre><p>Odd, right? Claude Code doesn&#8217;t follow its own specification for skill paths.</p><p>I worked around this by adding the following to my <code>CLAUDE.md</code> file:</p><blockquote><p>Scripts in skills are always relative to the <code>SKILL.md</code> file. For example, if a <code>SKILL.md</code> file references <code>scripts/generate-plan-template.ts</code> and is located at <code>skills/writing-skill/SKILL.md</code>, then the script&#8217;s path would be <code>skills/writing-skill/scripts/generate-plan-template.ts</code>.</p></blockquote><h2>Testing Skills</h2><p>Out of the box, if you ask Claude Code to write a skill for you, it probably won&#8217;t do a good job. The agent likely won&#8217;t <em>get</em> what you&#8217;re trying to do&#8212;it&#8217;ll skip steps, leave out important criteria, or miss edge cases you care about.</p><p>This is because you&#8217;re missing one of the key ideas for getting agents to perform well: give the agent a way to check its work.</p><p>One of my favorite tricks I learned from the Superpowers <a href="https://github.com/obra/superpowers/blob/main/skills/writing-skills/SKILL.md#red-green-refactor-for-skills">writing-skills</a> skill is to test skills using subagents. Run a subagent with your skill and watch exactly what breaks&#8212;what it skips, what it gets wrong, what rationalizations it makes. Then update the skill and repeat. Keep testing with fresh subagents and tightening the skill until it stops making mistakes.</p><p>To simplify this process, I&#8217;d highly, highly recommend using a skill to write skills. I started with the <a href="https://github.com/obra/superpowers/blob/main/skills/writing-skills/SKILL.md">writing-skills</a> skill from Superpowers and <a href="https://github.com/LandonSchropp/agent-toolkit/blob/main/skills/writing-skills/SKILL.md">reworked it</a> to match my own preferences.</p><h2>Conclusion</h2><p>With all of these problems, are skills worth it? Hell yeah! The skills specification is so simple and elegant&#8212;it feels like taking a weed whacker to an MCP server. With a few minutes, you can easily extend agent behavior and add new abilities your agent never had.</p><p>The bugs are real and a pain, but the productivity gains you&#8217;ll get are worth it. And things <em>will</em> get better as more agents expand their support for them. Skills will change the way you work with agents, so jump in&#8212;it&#8217;s worth it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.prismatic.to/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Prismatic! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>