<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Skills on Rich's Blog</title><link>https://richlin-blog.pages.dev/tags/skills/</link><description>Recent content in Skills on Rich's Blog</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><lastBuildDate>Thu, 30 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://richlin-blog.pages.dev/tags/skills/index.xml" rel="self" type="application/rss+xml"/><item><title>Stop Shipping Vibes</title><link>https://richlin-blog.pages.dev/posts/260430_magic_wand_test_v10/</link><pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate><guid>https://richlin-blog.pages.dev/posts/260430_magic_wand_test_v10/</guid><description>&lt;p&gt;You open Claude Code. You type: &amp;ldquo;make this UI pretty.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It picks new colors. It tweaks the spacing. It swaps the font. It runs the build. Thirty minutes pass.&lt;/p&gt;
&lt;p&gt;You open the page.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not what you were thinking. It&amp;rsquo;s not pretty. It&amp;rsquo;s still ugly.&lt;/p&gt;
&lt;p&gt;You blame Claude Code for &amp;ldquo;not understanding what you wanted.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It understood the words. The problem was: you didn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Claude Code is fast enough to ship code in minutes. The bottleneck is no longer typing. It&amp;rsquo;s the prompt you typed in.&lt;/p&gt;</description><content:encoded><![CDATA[<p>You open Claude Code. You type: &ldquo;make this UI pretty.&rdquo;</p>
<p>It picks new colors. It tweaks the spacing. It swaps the font. It runs the build. Thirty minutes pass.</p>
<p>You open the page.</p>
<p>It&rsquo;s not what you were thinking. It&rsquo;s not pretty. It&rsquo;s still ugly.</p>
<p>You blame Claude Code for &ldquo;not understanding what you wanted.&rdquo;</p>
<p>It understood the words. The problem was: you didn&rsquo;t.</p>
<p>Claude Code is fast enough to ship code in minutes. The bottleneck is no longer typing. It&rsquo;s the prompt you typed in.</p>
<p>If your prompt is fuzzy, your diff is fuzzy. The skill that fixes this is called <strong>clarify</strong>.</p>
<hr>
<p><strong>clarify</strong> is a Claude Code skill that enforces one rule: <em>no plan, no scaffold, no code, until the ask is observable, named, and unambiguous.</em></p>
<p>It runs before any other skill. If your prompt fails its three-question test, clarify refuses to hand off to a planner. It writes a Dissolution Note and stops.</p>
<p>The point isn&rsquo;t the skill. The point is the gate.</p>
<hr>
<p>clarify converts fuzzy engineering asks into asks Claude Code can act on. Six examples from my actual queue:</p>
<ul>
<li>&ldquo;Refactor the auth middleware&rdquo; becomes &ldquo;extract auth from <code>routes.go</code> so the existing 4 routes can each be unit-tested without a real session.&rdquo;</li>
<li>&ldquo;Make the build faster&rdquo; becomes &ldquo;CI on <code>main</code> finishes in under 8 minutes for the next 10 consecutive runs.&rdquo;</li>
<li>&ldquo;Clean up the database layer&rdquo; becomes &ldquo;the 23 raw SQL strings in <code>repo/</code> move to typed query builders, no test regressions.&rdquo;</li>
<li>&ldquo;Add caching&rdquo; becomes &ldquo;GET /products/:id returns from Redis when warm; p95 of the endpoint drops from 240ms to under 50ms in load tests.&rdquo;</li>
<li>&ldquo;Modernize the frontend&rdquo; becomes &ldquo;the 14 class components in <code>src/views/</code> become hooks-based functional components, no failing tests, bundle stays under 200kb.&rdquo;</li>
<li>&ldquo;Improve error handling&rdquo; becomes &ldquo;every catch in <code>api/</code> either rethrows with context or returns a typed error — no naked <code>catch (e) {}</code> blocks remain.&rdquo;</li>
</ul>
<p>Each rewrite turns a feeling into a diff Claude Code can produce and you can verify.</p>
<p>If your ask cannot be rewritten this way, do not run any planning skill. Do not type any prompt. Go back to your editor and rewrite the ask. Or back to whoever asked you, and rewrite together.</p>
<hr>
<p>clarify works because it cuts the path between vague intent and shipped code.</p>
<p>The default Claude Code workflow looks like: prompt → plan → scaffold → diff → PR. Each step compounds the input. A fuzzy prompt becomes a fuzzy plan, which becomes a confidently-typed scaffold, which becomes a 400-line diff that <em>looks</em> like progress but isn&rsquo;t tied to any verifiable outcome.</p>
<p>clarify breaks the chain at step zero.</p>
<p>When you invoke it, it scans your prompt for three things. Undefined words (&ldquo;better&rdquo;, &ldquo;cleaner&rdquo;, &ldquo;modern&rdquo;). Unverified assumptions (&ldquo;it&rsquo;s slow because of the DB&rdquo;). Missing names (&ldquo;the team wants this&rdquo;). If it finds any, it stops the chain and asks you to fix the prompt before any other skill runs.</p>
<p>Claude Code never spends compute on a question you can&rsquo;t answer. You stop accumulating diffs that you can&rsquo;t verify. The PRs you ship correspond to specific things you actually wanted.</p>
<p>The mechanism is structural, not intelligent. clarify isn&rsquo;t smart. It&rsquo;s just a gate. The gate is the IP.</p>
<p>If you&rsquo;ve ever shipped a refactor you couldn&rsquo;t explain a week later, you didn&rsquo;t have a Claude Code problem. You had a question problem. clarify makes the question expensive enough that you do the work upstream — when it costs you 5 minutes, not 3 days.</p>
<hr>
<p>Hat tip to Elon Musk&rsquo;s Algorithm, where step one is <em>&ldquo;question every requirement — and every requirement must come from a name, not a department.&rdquo;</em> And to Jesse Vincent&rsquo;s brainstorming skill, which pioneered the hard-gate pattern (refusing to plan until alignment is reached). clarify combines the two specifically for the moment Claude Code is about to write code.</p>
<hr>
<p>Once clarify is automatic, three extensions emerge.</p>
<ul>
<li><strong>Run it on your own commits before review.</strong> Take any PR description from your last week. If it doesn&rsquo;t pass clarify&rsquo;s three-question test, the PR did something you couldn&rsquo;t define. Worth noticing.</li>
<li><strong>Run it on tickets before estimation.</strong> Sprint planning gets wildly more accurate when you refuse to estimate any ticket whose acceptance criteria don&rsquo;t survive the gate. The team protests for one sprint. Then they don&rsquo;t.</li>
<li><strong>Run it in your head before the first prompt.</strong> The fastest version of clarify is a 90-second pause before the first prompt of a coding session, asking what specifically you&rsquo;d see if the session went well.</li>
</ul>
<p>The skill is here: <strong><a href="https://github.com/richlin/clarify">github.com/richlin/clarify</a></strong>.</p>
<p>It doesn&rsquo;t write your code. It refuses to write your code until the ask is shaped enough for code to be the right next move.</p>
<hr>
<p>When you let Claude Code run on vibes, you ship vibes. When you make it run on observables, you ship something a third party can verify.</p>
<p>Reminder to self: <em>if you can&rsquo;t say what done looks like, Claude Code can&rsquo;t either.</em></p>
<p>What&rsquo;s a prompt sitting in your draft pane right now that wouldn&rsquo;t survive clarify?</p>
]]></content:encoded></item></channel></rss>