<?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: assaf baruch</title>
    <description>The latest articles on DEV Community by assaf baruch (@asfbar).</description>
    <link>https://dev.to/asfbar</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4069241%2F85678e70-b666-4935-ae7c-e75f2b9d700f.png</url>
      <title>DEV Community: assaf baruch</title>
      <link>https://dev.to/asfbar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asfbar"/>
    <language>en</language>
    <item>
      <title>Most Claude Code Complaints Are Context Problems, Not Model Problems</title>
      <dc:creator>assaf baruch</dc:creator>
      <pubDate>Tue, 18 Aug 2026 20:22:15 +0000</pubDate>
      <link>https://dev.to/asfbar/most-claude-code-complaints-are-context-problems-not-model-problems-1dak</link>
      <guid>https://dev.to/asfbar/most-claude-code-complaints-are-context-problems-not-model-problems-1dak</guid>
      <description>&lt;p&gt;I've been spending time in the Claude Code community lately, reading through the complaint threads. Model got nerfed. Token usage exploded. It ignores my CLAUDE.md. It's vague and won't explain itself.&lt;/p&gt;

&lt;p&gt;Some of these are real. But after reading enough of them, a pattern shows up: the same underlying issue keeps wearing different costumes. It's almost always about context. What's in the window, what the model is being asked to infer, and what nobody told it explicitly.&lt;/p&gt;

&lt;p&gt;Here are the four versions I keep running into, and what actually fixes them.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Token usage suddenly exploded"
&lt;/h2&gt;

&lt;p&gt;The complaint: usage doubled without the workload changing.&lt;/p&gt;

&lt;p&gt;What's usually happening: long sessions. Every turn resends the entire conversation history. A session that ran for two hours isn't paying for what you asked in the last message. It's paying for everything you asked since the beginning, again, on every single turn.&lt;/p&gt;

&lt;p&gt;The fix is unglamorous: end sessions and start fresh ones. Keep durable state in files (a &lt;code&gt;PROJECT.md&lt;/code&gt;, a scratch notes file) rather than letting it accumulate in the conversation. Then every new session starts compact and reads only what it needs.&lt;/p&gt;

&lt;p&gt;A useful signal: if you can't remember what you asked at the start of the session, it's too long.&lt;/p&gt;

&lt;h2&gt;
  
  
  "It ignores my CLAUDE.md"
&lt;/h2&gt;

&lt;p&gt;The complaint: rules are written down, the model doesn't follow them.&lt;/p&gt;

&lt;p&gt;What's usually happening: the file is too long, and the rules are bare assertions.&lt;/p&gt;

&lt;p&gt;Two things consistently help. First, shorter. A file with twelve rules that get followed beats forty that get diluted. Second, attach reasons. Compare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Never use raw SQL string concatenation.
&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;Never use raw SQL string concatenation, injection risk.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first is a rule the model applies literally, to the exact pattern named. The second is a &lt;em&gt;principle&lt;/em&gt;, and the model generalizes it to the whole category: parameterized queries, ORM misuse, anywhere the same risk shows up. Models extrapolate from reasons far better than they comply with lists.&lt;/p&gt;

&lt;h2&gt;
  
  
  "It's vague and won't explain itself"
&lt;/h2&gt;

&lt;p&gt;The complaint: it says there are "some issues to address" and you burn three rounds extracting what it means.&lt;/p&gt;

&lt;p&gt;What's usually happening: you asked for clarity, which is an adjective, not a constraint.&lt;/p&gt;

&lt;p&gt;Asking a model to "be clear" or "think like a senior engineer" gives it a persona, not a specification. It has no way to know what clear means for you, so it defaults to hedged, safe phrasing.&lt;/p&gt;

&lt;p&gt;Replace the adjective with a structure. Instead of "explain the issues clearly", try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For each issue, state:
- file and line
- what breaks
- the exact fix you propose

If you can't fill all three, say so instead of guessing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things happen. Vagueness has nowhere to hide, because every slot has to be filled. And when the model genuinely doesn't know something, you see it immediately instead of receiving a confident paragraph that says nothing.&lt;/p&gt;

&lt;p&gt;This is the same lesson as skill descriptions, which I wrote about &lt;a href="https://dev.to/asfbar/your-claude-code-skill-never-fires-and-its-not-the-skills-fault-2mpg"&gt;in a previous post&lt;/a&gt;: adjectives are wishes, constraints are instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  "The output quality feels inconsistent"
&lt;/h2&gt;

&lt;p&gt;The complaint: same kind of task, wildly different quality day to day.&lt;/p&gt;

&lt;p&gt;What's usually happening: the inputs are more different than they feel. Different session length, different amount of prior context, different phrasing, different starting state of the codebase.&lt;/p&gt;

&lt;p&gt;If you want to know whether something actually changed, you need a fixed reference. Keep two or three prompts from your real work as a benchmark. Same prompt, same starting state, run them every few weeks. Compare outputs.&lt;/p&gt;

&lt;p&gt;Without that, you're comparing today's frustrating session to a remembered good one, and memory is a terrible instrument for this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing they have in common
&lt;/h2&gt;

&lt;p&gt;All four are the same mistake in different clothes: &lt;strong&gt;assuming the model has context it doesn't have, and hasn't been given.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It doesn't know your session got long. It doesn't know which of your forty rules matter most. It doesn't know what "clear" means in your codebase. It doesn't know what last week's output looked like.&lt;/p&gt;

&lt;p&gt;None of this means the models are perfect or that complaints are always user error. Genuine regressions happen, and vendors should be held to them. But before concluding a model got worse, it's worth checking whether the thing that changed was the context around it.&lt;/p&gt;

&lt;p&gt;Cheaper to check, and fixable today.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I write about building Claude Code skills and workflows for a real dev team. The full field guide, covering 5 skill patterns, anatomy, and the 7 mistakes I made, is &lt;a href="https://asfbar.gumroad.com/l/vqfdcy" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and a complete debugging skill is free &lt;a href="https://asfbar.gumroad.com/l/toofjt" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>claude</category>
    </item>
    <item>
      <title>Here's a Complete Claude Code Skill. It's Free.</title>
      <dc:creator>assaf baruch</dc:creator>
      <pubDate>Fri, 14 Aug 2026 12:19:16 +0000</pubDate>
      <link>https://dev.to/asfbar/heres-a-complete-claude-code-skill-its-free-5e0b</link>
      <guid>https://dev.to/asfbar/heres-a-complete-claude-code-skill-its-free-5e0b</guid>
      <description>&lt;p&gt;Two weeks ago I wrote about &lt;a href="https://dev.to/asfbar/your-claude-code-skill-never-fires-and-its-not-the-skills-fault-2mpg"&gt;why most Claude Code skills never fire&lt;/a&gt; — the description problem. The most common response I got, in DMs and at work: &lt;em&gt;"OK, but show me a full skill."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Fair. Here's one — complete, production-tested, free to copy.&lt;/p&gt;

&lt;p&gt;It's my team's &lt;strong&gt;debugging protocol&lt;/strong&gt;: the skill I built after watching Claude (and honestly, half my developers) do the same thing when hit with a bug — guess a fix, patch it, and hope. This skill forces the boring discipline that actually finds root causes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full skill
&lt;/h2&gt;

&lt;p&gt;Save this as &lt;code&gt;debugging-protocol/SKILL.md&lt;/code&gt; in your skills directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;debugging-protocol&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Systematic debugging for Python/FastAPI and general code.&lt;/span&gt;
  &lt;span class="s"&gt;Trigger when the user reports a bug, error, exception, crash, or&lt;/span&gt;
  &lt;span class="s"&gt;unexpected behavior, pastes a stack trace or error message, or asks&lt;/span&gt;
  &lt;span class="s"&gt;"why doesn't this work", "what's wrong", "this is broken", "fix this&lt;/span&gt;
  &lt;span class="s"&gt;bug". Also on short requests like "debug this" or "it fails".&lt;/span&gt;
  &lt;span class="s"&gt;NOT for code review of working code — that's the reviewer skill.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Role&lt;/span&gt;
You are a senior engineer who debugs systematically. You do not
propose fixes before understanding the root cause. Guessing is
the failure mode you exist to prevent.

&lt;span class="gh"&gt;# Process — in this order, no skipping&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; REPRODUCE FIRST
   Restate the bug precisely: what was expected, what happened
   instead, and under which exact conditions. If you cannot state
   all three from the information given — ask, don't assume.
&lt;span class="p"&gt;
2.&lt;/span&gt; ISOLATE
   Narrow the search space before proposing anything:
&lt;span class="p"&gt;   -&lt;/span&gt; What is the smallest input/scenario that still fails?
&lt;span class="p"&gt;   -&lt;/span&gt; When did it last work? What changed since (code, deps, data,
     config, environment)?
&lt;span class="p"&gt;   -&lt;/span&gt; Does it fail consistently or intermittently?
&lt;span class="p"&gt;
3.&lt;/span&gt; HYPOTHESIZE — OUT LOUD
   State 2-3 candidate root causes, ranked by likelihood.
   For each: what evidence would confirm or kill it, and what is
   the cheapest way to get that evidence (a log line, a breakpoint,
   a one-line test)?
&lt;span class="p"&gt;
4.&lt;/span&gt; VERIFY BEFORE FIXING
   Test the top hypothesis with evidence, not intuition. Show the
   verification step. Only a confirmed root cause earns a fix.
&lt;span class="p"&gt;
5.&lt;/span&gt; FIX THE CAUSE, NOT THE SYMPTOM
   Propose the minimal fix for the confirmed root cause. If the
   symptom could be silenced without fixing the cause (a try/except,
   a null check) — say so explicitly and explain why that's wrong here.
&lt;span class="p"&gt;
6.&lt;/span&gt; PREVENT RECURRENCE
   One short suggestion: the test, assertion, or log line that would
   have caught this class of bug earlier.

&lt;span class="gh"&gt;# Output format&lt;/span&gt;
&lt;span class="gu"&gt;## Bug&lt;/span&gt;
[one-line restatement]
&lt;span class="gu"&gt;## Root cause&lt;/span&gt;
[confirmed cause + the evidence]
&lt;span class="gu"&gt;## Fix&lt;/span&gt;
[minimal code change]
&lt;span class="gu"&gt;## Prevention&lt;/span&gt;
[one test/assertion/log suggestion]

&lt;span class="gh"&gt;# Hard rules&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Never propose a fix in step 1-3. Ever.
&lt;span class="p"&gt;-&lt;/span&gt; If information is missing, ask for the specific missing piece —
  don't fill gaps with assumptions.
&lt;span class="p"&gt;-&lt;/span&gt; If the first hypothesis dies, say so and move to the next.
  Dead hypotheses are progress, not failure.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prefer a ready file? Grab the skill as a downloadable SKILL.md here (free): &lt;a href="https://asfbar.gumroad.com/l/toofjt" rel="noopener noreferrer"&gt;https://asfbar.gumroad.com/l/toofjt&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why each block is built this way
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The description names the lazy phrasings.&lt;/strong&gt; "Debug this", "it fails", "what's wrong" — that's how people actually type at 11pm. This was the whole lesson of the first article: a description without your real phrasing is a skill that never loads. Note also the last line — the &lt;em&gt;boundary&lt;/em&gt; ("NOT for code review") — which stops this skill from shadowing my reviewer skill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1-3 exist to slow the model down.&lt;/strong&gt; Claude's default instinct (like most developers') is to jump to a plausible fix. Plausible is the enemy: it feels like progress and buries the actual cause. Forcing reproduce → isolate → hypothesize &lt;em&gt;before&lt;/em&gt; any fix is allowed changes the entire quality of the output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Out loud" hypotheses are the killer feature.&lt;/strong&gt; When Claude ranks 2-3 candidate causes and states what evidence would kill each one, two things happen: you can veto a wrong direction in seconds, and the eventual fix comes with a reasoning trail you can trust — or audit when it's wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The output format makes results diffable.&lt;/strong&gt; Every debugging session ends in the same four sections. After a month, your team can scan any past session in ten seconds. Consistency is the compound interest of skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hard rules carry the "why".&lt;/strong&gt; Models generalize from reasons, not rule lists. "Dead hypotheses are progress" isn't decoration — it stops the model from stubbornly defending hypothesis #1 after the evidence kills it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adapt it in 5 minutes
&lt;/h2&gt;

&lt;p&gt;Swap "Python/FastAPI" for your stack in the description. If your team uses a specific logger or test framework, name it in step 6 — prevention suggestions get dramatically better when the skill knows your tools.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is skill #1 from my production set. The full field guide — 5 skill patterns, anatomy, and the 7 mistakes I made building them for my team — is here: &lt;a href="https://asfbar.gumroad.com/l/vqfdcy" rel="noopener noreferrer"&gt;Stop Prompting. Start Building Claude Code Skills&lt;/a&gt;. I'm packaging the complete ready-to-install skill pack next — this article is what it will feel like. Questions about adapting the skill to your stack? Comments are open.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>claude</category>
    </item>
    <item>
      <title>Your Claude Code Skill Never Fires — and It's Not the Skill's Fault</title>
      <dc:creator>assaf baruch</dc:creator>
      <pubDate>Sat, 08 Aug 2026 20:39:09 +0000</pubDate>
      <link>https://dev.to/asfbar/your-claude-code-skill-never-fires-and-its-not-the-skills-fault-2mpg</link>
      <guid>https://dev.to/asfbar/your-claude-code-skill-never-fires-and-its-not-the-skills-fault-2mpg</guid>
      <description>&lt;p&gt;I manage a dev team, and we've been running Claude Code daily for months. I built a set of custom skills for us — code review, a debugging protocol, our team conventions — and the biggest lesson I learned surprised me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The body of your skill barely matters if the description is wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure mode nobody warns you about
&lt;/h2&gt;

&lt;p&gt;Here's what happens to most developers who discover skills. They get excited, write a detailed 200-line SKILL.md encoding everything they know about code review... and then it never triggers. Not once. They conclude skills "don't really work" and go back to re-typing the same prompt every session.&lt;/p&gt;

&lt;p&gt;The skill was probably fine. The description killed it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The description is a routing rule, not documentation
&lt;/h2&gt;

&lt;p&gt;A skill's description is the &lt;strong&gt;only&lt;/strong&gt; part Claude sees upfront. The full instructions load only after the description matches your request. So the description isn't marketing copy — it's a routing rule, and it needs to be written like one.&lt;/p&gt;

&lt;p&gt;Compare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# WEAK — reads nicely, never triggers&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Helps with code quality and best practices.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# STRONG — names the situations AND the phrasings&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Security-first code review for Python/FastAPI.&lt;/span&gt;
  &lt;span class="s"&gt;Trigger when the user asks to "review", "check", or&lt;/span&gt;
  &lt;span class="s"&gt;"look at" code, pastes a function or endpoint, mentions&lt;/span&gt;
  &lt;span class="s"&gt;a bug, or asks "what's wrong with this". Also trigger&lt;/span&gt;
  &lt;span class="s"&gt;on short requests like "review this".&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference: the strong version contains the actual words you type. Including the lazy ones. Nobody writes "please perform a comprehensive quality assessment" at 11pm — they write "review this". If your description doesn't cover the two-word tired version, your skill sleeps through most of your real requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three rules that fixed my skills
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. List your real trigger phrases.&lt;/strong&gt; Open your chat history and look at how you &lt;em&gt;actually&lt;/em&gt; phrase requests. Those exact phrases go in the description — "fix it", "what's wrong here", "check this". Your real vocabulary, not your professional vocabulary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Name the artifacts, not just the verbs.&lt;/strong&gt; "When the user pastes Python code", "when a stack trace appears", "when a diff is shared". Half my requests don't contain a verb at all — I just paste code. The description has to catch that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Draw the boundary.&lt;/strong&gt; Say what the skill is &lt;em&gt;not&lt;/em&gt; for: "not for writing new features — that's handled by the builder skill". Without boundaries, overlapping skills shadow each other and you get the wrong specialist answering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test it like code
&lt;/h2&gt;

&lt;p&gt;My rule now: after writing a skill, open a fresh session and make five requests the way I'd naturally type them — tired, abbreviated, mid-task. If the skill fires on four out of five, it ships. If not, the description needs more of my real phrasing, not more adjectives.&lt;/p&gt;

&lt;p&gt;Treat every miss as a bug. The fix is almost always adding one more real-world phrasing to the description.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I packaged everything I learned building skills for my team — the anatomy, five battle-tested patterns, a complete production-ready security-review skill, and the seven mistakes I made — into a short field guide: &lt;a href="https://asfbar.gumroad.com/l/vqfdcy" rel="noopener noreferrer"&gt;Stop Prompting. Start Building Claude Code Skills&lt;/a&gt;. Happy to answer skill-building questions in the comments either way.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
