<?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: Nishil Bhave</title>
    <description>The latest articles on DEV Community by Nishil Bhave (@nishilbhave).</description>
    <link>https://dev.to/nishilbhave</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%2F2844683%2F408d2867-a0c1-4208-a8ef-1c2149ec8569.jpg</url>
      <title>DEV Community: Nishil Bhave</title>
      <link>https://dev.to/nishilbhave</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nishilbhave"/>
    <language>en</language>
    <item>
      <title>Claude Code Save Conversation: Find &amp; Export Transcripts</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Tue, 02 Jun 2026 16:40:46 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-code-save-conversation-find-export-transcripts-2g1b</link>
      <guid>https://dev.to/nishilbhave/claude-code-save-conversation-find-export-transcripts-2g1b</guid>
      <description>&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%2F1uw5ma6c9jrrlc3fp7dj.jpg" 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%2F1uw5ma6c9jrrlc3fp7dj.jpg" alt="Six Claude Code transcript tools — ccusage, claude-history, /resume, claude-code-log, claude-conversation-extractor and /export — converging on a central JSONL transcript archive that auto-deletes in 30 days" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code Save Conversation: Where Transcripts Live
&lt;/h2&gt;

&lt;p&gt;Claude Code hit a $1B annualized run-rate six months after public launch: Anthropic's "fastest-growing product in the company's history" (&lt;a href="https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2025). I've used it daily across 27 project directories on this laptop. As of this morning, my &lt;code&gt;~/.claude/projects/&lt;/code&gt; folder holds 122 JSONL transcripts for the blog repo alone, going back roughly four weeks.&lt;/p&gt;

&lt;p&gt;That last number is the catch. Claude Code keeps your conversations locally, and &lt;strong&gt;deletes them after 30 days by default&lt;/strong&gt; (&lt;a href="https://code.claude.com/docs/en/data-usage" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). If you've ever closed a terminal and wished you could go back to "how did I solve that Postgres migration last month," that's the window you're losing.&lt;/p&gt;

&lt;p&gt;This is the practical guide I wish I'd had: where transcripts actually live, the JSON schema, the built-in &lt;code&gt;/resume&lt;/code&gt; and &lt;code&gt;/export&lt;/code&gt; commands, five open-source tools for searching and exporting, and the redaction workflow I use before sharing a session externally.&lt;/p&gt;

&lt;p&gt;the broader Claude Code production hardening guide that pairs with this archiving setup&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code stores every session as plaintext JSONL at &lt;code&gt;~/.claude/projects/&amp;lt;encoded-cwd&amp;gt;/&amp;lt;session-uuid&amp;gt;.jsonl&lt;/code&gt; and auto-purges after 30 days unless you set &lt;code&gt;cleanupPeriodDays&lt;/code&gt; higher (&lt;a href="https://code.claude.com/docs/en/data-usage" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;Native commands cover resume and export: &lt;code&gt;/resume&lt;/code&gt; opens the session picker, &lt;code&gt;/export &amp;lt;file&amp;gt;&lt;/code&gt; writes the current conversation, &lt;code&gt;/insights&lt;/code&gt; analyzes your history.&lt;/li&gt;
&lt;li&gt;Trust in AI tools dropped to 29% in 2025, its lowest ever (&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2025). Your own transcripts are the only ground truth about what the model actually did for you.&lt;/li&gt;
&lt;li&gt;Five OSS tools turn raw JSONL into searchable, shareable archives: ccusage (14.2k★), claude-code-transcripts, claude-code-log, claude-conversation-extractor, and claude-history.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Should You Save Claude Code Conversations at All?
&lt;/h2&gt;

&lt;p&gt;84% of developers now use AI tools but only 29% trust their accuracy, the widest gap the Stack Overflow survey has ever recorded (&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2025). If the model is wrong, the only audit trail you have is the transcript. There's no "git blame" for an agent's reasoning unless you keep the JSONL.&lt;/p&gt;

&lt;p&gt;Three concrete reasons matter more than the privacy paranoia people usually lead with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Debugging your own agent loops.&lt;/strong&gt; When a subagent goes sideways (wrong tool, weird argument, runaway plan), the transcript shows the exact stdin/stdout that hooks saw. The first time I had a subagent silently loop on a &lt;code&gt;git status&lt;/code&gt; call, replaying the JSONL line by line was the only way I caught it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning from your own patterns.&lt;/strong&gt; Simon Willison reported personally accumulating 379 MB of JSONL (&lt;a href="https://simonwillison.net/2025/Oct/22/claude-code-logs/" rel="noopener noreferrer"&gt;Simon Willison&lt;/a&gt;, 2025). At that volume, the transcripts become a personal prompt library: the prompts that actually worked, not the ones you think worked. A METR randomized trial of 16 experienced devs found they &lt;em&gt;believed&lt;/em&gt; AI made them 20-24% faster while measurements showed they were 19% slower ((&lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/&lt;/a&gt;), 2025). Reviewing your transcripts is one of the few honest ways to close that gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit and review.&lt;/strong&gt; Stack Overflow's 2025 data shows 72% of developers say "vibe coding" is &lt;em&gt;not&lt;/em&gt; part of their professional work (&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2025). Most of us review what the model produced. When a PR review asks "why this way?" the JSONL is the receipt.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Our finding:&lt;/strong&gt; Across 122 saved sessions in this single project, I can &lt;code&gt;grep&lt;/code&gt; exactly when I first wired up the Hashnode adapter, what error message convinced me to drop it, and the verbatim prompt that fixed a stale-job recovery bug, none of which I'd remember without the JSONL on disk.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the subagent debugging context that benefits most from saved transcripts&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Does Claude Code Save Conversations on Disk?
&lt;/h2&gt;

&lt;p&gt;Claude Code writes every session as a JSON-Lines file under &lt;code&gt;~/.claude/projects/&amp;lt;encoded-cwd&amp;gt;/&amp;lt;session-uuid&amp;gt;.jsonl&lt;/code&gt;, with a sibling directory of the same UUID for any sidecar attachments (&lt;a href="https://code.claude.com/docs/en/data-usage" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). The encoded working directory is just your full &lt;code&gt;cwd&lt;/code&gt; with &lt;code&gt;/&lt;/code&gt; replaced by &lt;code&gt;-&lt;/code&gt;, so &lt;code&gt;/Users/nishil/Documents/work/blogs&lt;/code&gt; becomes &lt;code&gt;-Users-nishil-Documents-work-blogs&lt;/code&gt;. That naming is how the CLI knows which transcripts belong to the project you're standing in when you run &lt;code&gt;claude&lt;/code&gt; or &lt;code&gt;/resume&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here's the actual layout from my machine right now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.claude/projects/
├── -Users-nishil-Documents-work-blogs/          ← this blog's project dir
│   ├── 02a0ea76-3694-4307-b1da-65c17cee00a4.jsonl   ← one full session
│   ├── 02a0ea76-3694-4307-b1da-65c17cee00a4/        ← sidecar dir (attachments)
│   ├── 02cf8a57-d0dc-4d37-b0fc-b242c2f46a1b.jsonl
│   ├── 035df874-52bf-43b7-b458-43b69bcf987f.jsonl
│   └── … (122 sessions total)
├── -Users-nishil-Documents-work-ats-resume-tailor/
├── -Users-nishil-Documents-work-claude-skills/
└── … (27 project directories)

~/.claude/
├── settings.json                  ← cleanupPeriodDays lives here
├── settings.local.json            ← project-local overrides
├── hooks/                         ← your PreToolUse/PostToolUse scripts
└── skills/                        ← installed skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each &lt;code&gt;.jsonl&lt;/code&gt; file is append-only: every user message, model response, tool call, hook attachment, and snapshot lands as one JSON object per line. That structure is what makes the format trivially &lt;code&gt;grep&lt;/code&gt;-able and trivially streamable: no parser required for a first pass.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;30-day cleanup&lt;/strong&gt; is enforced by Claude Code itself, not your OS. To keep transcripts longer, edit &lt;code&gt;~/.claude/settings.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cleanupPeriodDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;365&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set it to a year if you want a real archive. Set it to &lt;code&gt;0&lt;/code&gt; to disable auto-cleanup entirely (your filesystem becomes the only janitor).&lt;/p&gt;

&lt;p&gt;A subtle thing most guides miss: &lt;code&gt;/feedback&lt;/code&gt; transcripts have a separate, longer retention (Anthropic keeps them for 5 years to improve the product) (&lt;a href="https://code.claude.com/docs/en/data-usage" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). Submitting feedback from inside a session is itself a form of "save," just one you don't control.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Inside a Claude Code Transcript File?
&lt;/h2&gt;

&lt;p&gt;A Claude Code session file is JSON-Lines: each line is a self-contained JSON object with the metadata needed to replay the conversation. Sampling the first session in my blog project, I see five distinct line types, and every line carries &lt;code&gt;sessionId&lt;/code&gt;, &lt;code&gt;timestamp&lt;/code&gt;, &lt;code&gt;cwd&lt;/code&gt;, &lt;code&gt;gitBranch&lt;/code&gt;, and a UUID-chained &lt;code&gt;parentUuid&lt;/code&gt; linking it to the previous turn. The chain is what makes the transcript a graph, not just a log.&lt;/p&gt;

&lt;p&gt;The top-level keys you'll see most often:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;What it tells you&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;user&lt;/code&gt;, &lt;code&gt;assistant&lt;/code&gt;, &lt;code&gt;attachment&lt;/code&gt;, &lt;code&gt;permission-mode&lt;/code&gt;, or &lt;code&gt;summary&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sessionId&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UUID&lt;/td&gt;
&lt;td&gt;Matches the filename&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;parentUuid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;UUID | null&lt;/td&gt;
&lt;td&gt;Points to the previous turn (null for the first message)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;timestamp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISO 8601&lt;/td&gt;
&lt;td&gt;Server-side time of the turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cwd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;path&lt;/td&gt;
&lt;td&gt;Working directory when the turn happened&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gitBranch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Git branch at the time — invaluable for retracing context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Claude Code CLI version (&lt;code&gt;2.1.119&lt;/code&gt;, etc.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;message&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;The full Anthropic message payload (role, content blocks)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;attachment&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;object&lt;/td&gt;
&lt;td&gt;Hook output, snapshots, or tool sidecar data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;userType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;external&lt;/code&gt; for you, &lt;code&gt;internal&lt;/code&gt; for agent-spawned subagents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;isSidechain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;true&lt;/code&gt; if this turn is from a dispatched subagent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A minimal user-turn line looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sessionId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"02a0ea76-3694-4307-b1da-65c17cee00a4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"parentUuid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"e2363e23-702d-4df6-9c39-036dd00f5d8b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"uuid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"f7a2c1b3-...-..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-24T10:16:23.118Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Users/nishil/Documents/work/blogs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gitBranch"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.1.119"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Refactor the publish orchestrator…"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Knowing this schema is what unlocks the rest of the workflow. Once you can identify a &lt;code&gt;type: "user"&lt;/code&gt; line and pull &lt;code&gt;message.content[0].text&lt;/code&gt;, you can rebuild any session into Markdown with three lines of &lt;code&gt;jq&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A few non-obvious wrinkles. The &lt;code&gt;attachment&lt;/code&gt; lines carry hook output (stdin payload, stdout, stderr, exit code, duration), so for hook failures, that's where you look. The sibling directory next to each &lt;code&gt;.jsonl&lt;/code&gt; (same UUID, no extension) holds binary attachments like image uploads and diffs. Subagent-spawned turns set &lt;code&gt;isSidechain: true&lt;/code&gt;, which separates the main thread from delegated work. There's no compaction either: even a 200-turn session stays on disk as the full append-only log. My largest blog session is 4.8 MB; the project directory across 27 codebases is 612 MB, which compresses to 51 MB gzipped.&lt;/p&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%2Fabu8bxl745hglumd08eb.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%2Fabu8bxl745hglumd08eb.png" alt="The Claude Code transcript workflow: sessions are saved automatically to local JSONL files, which you can search with grep, export to Markdown with OSS tools, redact for sharing, and reuse via the /resume command" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You Use the Built-In &lt;code&gt;/resume&lt;/code&gt; and &lt;code&gt;/export&lt;/code&gt; Commands?
&lt;/h2&gt;

&lt;p&gt;The native commands cover 80% of what most people need, and they ship with the CLI, so there's no install step. Claude Code's official command reference lists &lt;code&gt;/resume&lt;/code&gt;, &lt;code&gt;/continue&lt;/code&gt; (alias), &lt;code&gt;/branch&lt;/code&gt;, &lt;code&gt;/export&lt;/code&gt;, &lt;code&gt;/insights&lt;/code&gt;, &lt;code&gt;/rewind&lt;/code&gt;, &lt;code&gt;/clear&lt;/code&gt;, and &lt;code&gt;/compact&lt;/code&gt; (&lt;a href="https://code.claude.com/docs/en/commands" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). The first two are how you walk back into a saved conversation.&lt;/p&gt;

&lt;p&gt;The four that matter for save-and-reuse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Open the session picker for this project — arrow keys, Enter to resume&lt;/span&gt;
/resume

&lt;span class="c"&gt;# Resume a specific session by UUID or name&lt;/span&gt;
/resume 02a0ea76-3694-4307-b1da-65c17cee00a4

&lt;span class="c"&gt;# Branch the current conversation — original stays reachable via /resume&lt;/span&gt;
/branch experimenting-with-langgraph

&lt;span class="c"&gt;# Export the current session to a file (Markdown by default)&lt;/span&gt;
/export ~/Desktop/blog-refactor-2026-05-15.md

&lt;span class="c"&gt;# Surface patterns across your saved sessions — what tools you use most,&lt;/span&gt;
&lt;span class="c"&gt;# where loops happened, where you re-prompted&lt;/span&gt;
/insights
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/resume&lt;/code&gt; without an argument is the one I use most. It opens a TUI list of every saved session in the current &lt;code&gt;cwd&lt;/code&gt;, with the first user message as the preview, exactly enough context to pick the right one.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;/branch&lt;/code&gt; command is the underrated sibling: it forks a conversation at the current turn so you can explore an alternative direction without losing the trunk. I use it when I want to try a riskier refactor that might burn the agent's context — branch, fail, return to the trunk. Cheaper than &lt;code&gt;git stash&lt;/code&gt; because no files change.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/export&lt;/code&gt; writes the conversation as Markdown by default, ready to drop into a PR description or a postmortem. The output preserves tool calls, which is more than you get from copy-pasting the terminal.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/insights&lt;/code&gt; is the newest and most surprising: it runs an analysis pass over your saved sessions and surfaces patterns. The first time I ran it, it told me I was reflexively asking for "a quick fix" 38 times across one project, which was the exact prompt pattern producing the worst output.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You grep Your Own Transcript History?
&lt;/h2&gt;

&lt;p&gt;Because every transcript is a plain JSONL file, the shell is already enough. The patterns below are the ones I run weekly — copy them as a starting kit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Count saved sessions in the current project&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; ~/.claude/projects/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s#/#-#g'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;

&lt;span class="c"&gt;# Search every transcript ever for a specific phrase&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="s2"&gt;"Hashnode adapter"&lt;/span&gt; ~/.claude/projects/&lt;span class="k"&gt;*&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl

&lt;span class="c"&gt;# Pull just the user messages from one session, as plain text&lt;/span&gt;
jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'select(.type=="user") | .message.content[0].text // empty'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  ~/.claude/projects/-Users-nishil-Documents-work-blogs/02a0ea76&lt;span class="k"&gt;*&lt;/span&gt;.jsonl

&lt;span class="c"&gt;# Find every session where you touched a specific file&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="s2"&gt;"lib/publish-orchestrator.ts"&lt;/span&gt; ~/.claude/projects/&lt;span class="k"&gt;*&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl &lt;span class="se"&gt;\&lt;/span&gt;
  | xargs &lt;span class="nt"&gt;-I&lt;/span&gt;&lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="nb"&gt;basename&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; .jsonl

&lt;span class="c"&gt;# Sort sessions by total token usage (rough proxy: file size)&lt;/span&gt;
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt; ~/.claude/projects/&lt;span class="k"&gt;*&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt; | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-10&lt;/span&gt;

&lt;span class="c"&gt;# Reconstruct a session as plain Markdown in five lines of jq&lt;/span&gt;
jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'
  select(.type=="user" or .type=="assistant")
  | "### " + .type + " (" + .timestamp + ")\n\n"
    + ((.message.content[]?
        | select(.type=="text") | .text) // "[tool call]")
'&lt;/span&gt; SESSION_UUID.jsonl &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; session.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;pwd | sed 's#/#-#g'&lt;/code&gt; trick is the cheap way to find your current project's transcript folder without leaving the terminal. Pin those one-liners as shell aliases and you have a personal observability layer for Claude Code that costs zero dollars.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/codeprobe-9-specialized-ai-agents-that-audit-your-codebase-for-solid-security-performance/" rel="noopener noreferrer"&gt;the broader pattern of using transcripts as audit evidence during agent code review&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Which Open-Source Tools Turn Transcripts Into Real Archives?
&lt;/h2&gt;

&lt;p&gt;Five OSS tools cover the gap between raw &lt;code&gt;grep&lt;/code&gt; and a real searchable archive. All five are actively maintained as of May 2026, all five are MIT/Apache-licensed, and all five operate on the same &lt;code&gt;~/.claude/projects/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;According to a 2026 GitHub stars snapshot, &lt;strong&gt;ccusage leads the category with ~14,200 stars&lt;/strong&gt; (&lt;a href="https://github.com/ryoppippi/ccusage" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, 2026), an order of magnitude ahead of the other contenders. That gap reflects the practical priority most teams hit first: cost tracking. Once you've spent a month on Claude Code, you want to know where the tokens went.&lt;/p&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%2Fdr6fz74z0mr5gwiq04cc.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%2Fdr6fz74z0mr5gwiq04cc.png" alt="Horizontal bar chart comparing GitHub stars for five open-source Claude Code transcript tools as of May 2026: ccusage at 14200 stars, claude-code-transcripts at 1500, claude-code-log at 1000, claude-conversation-extractor at 563, and claude-history at 267" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What each one is actually for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ryoppippi/ccusage" rel="noopener noreferrer"&gt;ccusage&lt;/a&gt;&lt;/strong&gt; (TypeScript, 14.2k★) — Token usage and cost reports per day, per project, per session. The first install for anyone on a Pro/Team plan. &lt;code&gt;npx ccusage daily&lt;/code&gt; is the entire onboarding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/simonw/claude-code-transcripts" rel="noopener noreferrer"&gt;claude-code-transcripts&lt;/a&gt;&lt;/strong&gt; (Python, 1.5k★) — Converts JSONL into clean, paginated HTML. Mobile-friendly, deterministic output. Good for sharing a session as a link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/daaain/claude-code-log" rel="noopener noreferrer"&gt;claude-code-log&lt;/a&gt;&lt;/strong&gt; (Python, 1.0k★) — JSONL → readable HTML + Markdown with filtering and token tracking. The best out-of-the-box "make my transcripts browsable" tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/ZeroSumQuant/claude-conversation-extractor" rel="noopener noreferrer"&gt;claude-conversation-extractor&lt;/a&gt;&lt;/strong&gt; (Python, 563★) — Pulls conversations out of &lt;code&gt;~/.claude/projects/&lt;/code&gt; and writes Markdown (or JSON/HTML). Lightweight, no dependencies beyond stdlib.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/raine/claude-history" rel="noopener noreferrer"&gt;claude-history&lt;/a&gt;&lt;/strong&gt; (Rust, 267★) — Fuzzy search with a built-in TUI. The closest thing to "Spotlight for your Claude Code history."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My setup runs three of them: &lt;code&gt;ccusage&lt;/code&gt; weekly for cost reporting, &lt;code&gt;claude-code-log&lt;/code&gt; monthly to dump everything into HTML for offline review, and &lt;code&gt;claude-history&lt;/code&gt; daily as a TUI when I need to find a specific past prompt.&lt;/p&gt;

&lt;p&gt;A short selection guide. ccusage is operational: it answers "where did $400 of API spend go this month" but doesn't show content. claude-code-log and claude-code-transcripts overlap on the export side; both produce HTML, both work fine. claude-conversation-extractor is the right pick if you want zero dependencies and a one-shot Markdown dump. claude-history is the only one with a real TUI and fuzzy search.&lt;/p&gt;

&lt;p&gt;All four read the same plaintext JSONL. The data is the moat, not the tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Should You Redact a Transcript Before Sharing It?
&lt;/h2&gt;

&lt;p&gt;Around 100,000+ LLM share-link conversations across ChatGPT, Claude, Copilot, and others were publicly indexed by search engines in 2024-2025 before vendors shut the experiments down (&lt;a href="https://incidentdatabase.ai/cite/1186/" rel="noopener noreferrer"&gt;AI Incident Database #1186&lt;/a&gt;, 2025). Anthropic stopped Claude share-link transcripts from appearing in Google around September 10, 2025 (&lt;a href="https://www.obsidiansecurity.com/resource/143k-claude-copilot-chatgpt-chats-publicly-accessible-were-you-exposed" rel="noopener noreferrer"&gt;Obsidian Security&lt;/a&gt;, 2025) — but the lesson stands: a transcript is leaky. Before you paste one into a PR, a Slack channel, or a public gist, redact.&lt;/p&gt;

&lt;p&gt;What to scrub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cwd&lt;/code&gt; and absolute paths that reveal your username or project layout&lt;/li&gt;
&lt;li&gt;API keys (look for &lt;code&gt;sk-&lt;/code&gt;, &lt;code&gt;ghp_&lt;/code&gt;, &lt;code&gt;AKIA&lt;/code&gt;, anything 40+ chars with no spaces)&lt;/li&gt;
&lt;li&gt;Email addresses in user messages&lt;/li&gt;
&lt;li&gt;Internal repo names, customer IDs, ticket numbers&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;gitBranch&lt;/code&gt; field if it leaks unreleased project names&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A pragmatic one-pass redaction with &lt;code&gt;jq&lt;/code&gt; plus a regex stage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Step 1: extract user + assistant turns only (drop hook/permission noise)&lt;/span&gt;
jq &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'select(.type=="user" or .type=="assistant")'&lt;/span&gt; session.jsonl &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; clean.jsonl

&lt;span class="c"&gt;# Step 2: strip filesystem and git metadata, scrub obvious secrets&lt;/span&gt;
jq &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'. + {cwd: "[redacted]", gitBranch: "[redacted]"}'&lt;/span&gt; clean.jsonl &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'s/(sk-[A-Za-z0-9]{20,}|ghp_[A-Za-z0-9]{20,})/[REDACTED-KEY]/g'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'s/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/[REDACTED-EMAIL]/g'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; redacted.jsonl

&lt;span class="c"&gt;# Step 3: convert to Markdown for the actual share&lt;/span&gt;
jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'select(.type=="user" or .type=="assistant")
  | "### " + .type + "\n\n"
    + ((.message.content[]? | select(.type=="text") | .text) // "")'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  redacted.jsonl &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; shareable.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you share transcripts often, wrap this in a shell function. The five minutes it takes once is worth more than the recovery effort after you paste a key into a public issue.&lt;/p&gt;

&lt;p&gt;One more thing worth checking before you publish a redacted transcript: the assistant's responses sometimes echo your secrets back at you. If you pasted a &lt;code&gt;DATABASE_URL&lt;/code&gt; mid-session and the model quoted it in a summary later, regex-scrubbing the input lines isn't enough. Grep the assistant content too, ideally with the same pattern set. A safer habit is to never paste real credentials into a session in the first place — use environment variable names as placeholders and let the agent reason about them abstractly.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Own Setup: Archive, Index, and Never Lose a Session
&lt;/h2&gt;

&lt;p&gt;I run a four-line cron job and one shell function. That's the entire system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# crontab -e  — nightly archive of yesterday's transcripts to an external drive&lt;/span&gt;
0 2 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; rsync &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--delete&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  ~/.claude/projects/ /Volumes/Archive/claude-transcripts/

&lt;span class="c"&gt;# ~/.zshrc — quick session search in the current project&lt;/span&gt;
ccsearch&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;local dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.claude/projects/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s#/#-#g'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;.jsonl 2&amp;gt;/dev/null | &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; f&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"  &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; .jsonl&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;[^&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;]*&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;[^&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;]*&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
    &lt;span class="nb"&gt;echo
  &lt;/span&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# ~/.claude/settings.json — extend local retention from 30 days to one year&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"cleanupPeriodDays"&lt;/span&gt;: 365
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;cleanupPeriodDays: 365&lt;/code&gt; setting alone is the highest-leverage change in this entire post. Most people don't realize the 30-day default is destroying their data until they go looking for a session from last month and find an empty directory.&lt;/p&gt;

&lt;p&gt;For monthly review, I run &lt;code&gt;npx claude-code-log ~/.claude/projects/&lt;/code&gt; and open the generated HTML index. That's when I learn things — which prompts I repeated, which subagents looped, which tools I never actually used. The HTML output is faster to scan than the TUI because you can &lt;code&gt;Ctrl-F&lt;/code&gt; across every session at once.&lt;/p&gt;

&lt;p&gt;The cron uses &lt;code&gt;rsync&lt;/code&gt; rather than &lt;code&gt;tar&lt;/code&gt; deliberately: incremental syncs are cheap for unchanged sessions, and the destination stays browsable. &lt;code&gt;--delete&lt;/code&gt; mirrors source deletions, which is fine because &lt;code&gt;cleanupPeriodDays: 365&lt;/code&gt; means nothing is deleted for a year anyway. If you rotate laptops, point the same &lt;code&gt;rsync&lt;/code&gt; at a VPS over SSH for an offsite copy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Our finding:&lt;/strong&gt; Of my 122 saved sessions in this blog project over four weeks, 19 of them were re-prompts of the same core question phrased three different ways. That ratio — roughly 15% wasted re-prompting — only became visible because I had the JSONL on disk to count.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Anthropic see my Claude Code transcripts if I'm on a Pro plan?
&lt;/h3&gt;

&lt;p&gt;Yes, for service operation. Anthropic stores conversation data server-side for up to 30 days after you delete a chat, retains opt-in training data for up to 5 years de-identified, and keeps policy-violation conversations for up to 2 years (&lt;a href="https://privacy.claude.com/en/articles/10023548-how-long-do-you-store-my-data" rel="noopener noreferrer"&gt;Anthropic Privacy Center&lt;/a&gt;, 2026). Commercial plans (Work, Enterprise, Edu, Gov) are excluded from training by default (&lt;a href="https://www.anthropic.com/news/updates-to-our-consumer-terms" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2025). API logs were reduced to a 7-day retention window in September 2025 and are never used for training (&lt;a href="https://privacy.claude.com/en/articles/10023548-how-long-do-you-store-my-data" rel="noopener noreferrer"&gt;Anthropic Privacy Center&lt;/a&gt;, 2025).&lt;/p&gt;

&lt;h3&gt;
  
  
  Where does Claude Code save conversations on Windows?
&lt;/h3&gt;

&lt;p&gt;The cross-platform default is &lt;code&gt;%USERPROFILE%\.claude\projects\&lt;/code&gt; on Windows and &lt;code&gt;~/.claude/projects/&lt;/code&gt; on macOS and Linux. The encoded-cwd directory naming is identical across platforms: slashes (and backslashes on Windows) get replaced with hyphens. Everything else in this guide (JSONL schema, &lt;code&gt;/resume&lt;/code&gt;, &lt;code&gt;cleanupPeriodDays&lt;/code&gt;) works the same.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I disable Claude Code's 30-day auto-delete?
&lt;/h3&gt;

&lt;p&gt;Set &lt;code&gt;cleanupPeriodDays&lt;/code&gt; in &lt;code&gt;~/.claude/settings.json&lt;/code&gt; to a higher number (&lt;code&gt;365&lt;/code&gt; for a year) or to &lt;code&gt;0&lt;/code&gt; to disable cleanup entirely. The setting is documented in the official Data Usage reference (&lt;a href="https://code.claude.com/docs/en/data-usage" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). Restart your session for the change to apply.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I export every saved session at once, not just the current one?
&lt;/h3&gt;

&lt;p&gt;Yes. &lt;code&gt;/export&lt;/code&gt; only handles the active session, but &lt;code&gt;claude-code-log&lt;/code&gt; or &lt;code&gt;claude-conversation-extractor&lt;/code&gt; (both linked above) walk every JSONL file in &lt;code&gt;~/.claude/projects/&lt;/code&gt; and produce one Markdown or HTML file per session. Run them as a monthly cron job for a rolling archive.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between &lt;code&gt;/resume&lt;/code&gt; and &lt;code&gt;/continue&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;They're aliases. &lt;code&gt;/continue&lt;/code&gt; is identical to &lt;code&gt;/resume&lt;/code&gt; (&lt;a href="https://code.claude.com/docs/en/commands" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). Use whichever feels more natural — the muscle memory matters more than the spelling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do hooks have access to the transcript file?
&lt;/h3&gt;

&lt;p&gt;Yes. Every hook payload includes a &lt;code&gt;transcript_path&lt;/code&gt; field pointing to the active session's JSONL (&lt;a href="https://code.claude.com/docs/en/hooks" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). A &lt;code&gt;PostToolUse&lt;/code&gt; audit hook can append rich context to its own log, and a &lt;code&gt;Stop&lt;/code&gt; hook can summarize the session before ending — the transcript is written in real time, so your hook reads everything up to the current event.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Claude Code's local-first transcript design is one of the most underused features in the CLI. Every session lands as plaintext JSONL, the format is grep-friendly, the schema is stable, and there's a healthy OSS ecosystem turning that data into searchable archives.&lt;/p&gt;

&lt;p&gt;The whole workflow is four moves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Save&lt;/strong&gt; by setting &lt;code&gt;cleanupPeriodDays&lt;/code&gt; past 30 so transcripts survive long enough to be useful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; with &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;jq&lt;/code&gt;, or &lt;code&gt;claude-history&lt;/code&gt; when you need to find a past prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export&lt;/strong&gt; with &lt;code&gt;/export&lt;/code&gt; for one session or &lt;code&gt;claude-code-log&lt;/code&gt; for the whole archive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reuse&lt;/strong&gt; via &lt;code&gt;/resume&lt;/code&gt; to jump back into prior context, or &lt;code&gt;/branch&lt;/code&gt; to fork it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trust in AI tools is at an all-time low and adoption is at an all-time high (&lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2025). The transcript on your disk is the only ground truth you have. Set the retention up tonight; thank yourself in three months.&lt;/p&gt;

&lt;p&gt;the next layer of the Claude Code stack to wire into your saved-session workflow&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/graph"&gt;@graph&lt;/a&gt;": [&lt;br&gt;
    {&lt;br&gt;
      "@type": "BlogPosting",&lt;br&gt;
      "headline": "Claude Code Save Conversation: Find &amp;amp; Export Transcripts",&lt;br&gt;
      "description": "Where Claude Code saves your conversations, the JSONL schema, and 5 OSS tools to grep, export, and reuse them before the 30-day auto-delete wipes them.",&lt;br&gt;
      "datePublished": "2026-06-02",&lt;br&gt;
      "dateModified": "2026-06-02",&lt;br&gt;
      "author": {&lt;br&gt;
        "@type": "Person",&lt;br&gt;
        "name": "Nishil Bhave"&lt;br&gt;
      },&lt;br&gt;
      "image": "&lt;a href="https://maketocreate.com/images/generated/claude-code-save-conversation-export-guide-hero-v1-scattered.png" rel="noopener noreferrer"&gt;https://maketocreate.com/images/generated/claude-code-save-conversation-export-guide-hero-v1-scattered.png&lt;/a&gt;",&lt;br&gt;
      "url": "&lt;a href="https://maketocreate.com/claude-code-save-conversation-export-guide/" rel="noopener noreferrer"&gt;https://maketocreate.com/claude-code-save-conversation-export-guide/&lt;/a&gt;",&lt;br&gt;
      "keywords": ["claude code save conversation", "claude code conversation history", "where does claude code save conversations", "claude code export conversation", "claude code transcripts", "claude code jsonl"]&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "@type": "FAQPage",&lt;br&gt;
      "mainEntity": [&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Does Anthropic see my Claude Code transcripts if I'm on a Pro plan?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes, for service operation. On consumer plans Anthropic stores conversation data server-side for up to 30 days after you delete a chat, retains opt-in training data for up to 5 years de-identified, and keeps policy-violation conversations for up to 2 years. Commercial plans (Work, Enterprise, Edu, Gov) are excluded from training by default, and API logs use a 7-day retention window and are never used for training."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Where does Claude Code save conversations on Windows?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Claude Code saves conversations to %USERPROFILE%\.claude\projects\ on Windows and ~/.claude/projects/ on macOS and Linux. The encoded working-directory folder naming is identical across platforms: path separators are replaced with hyphens. The JSONL schema, /resume, and cleanupPeriodDays all work the same way."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "How do I disable Claude Code's 30-day auto-delete?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Set cleanupPeriodDays in ~/.claude/settings.json to a higher number, such as 365 for a year, or to 0 to disable cleanup entirely. The default is 30 days, after which Claude Code itself purges old transcripts. Restart your session for the change to apply."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Can I export every saved session at once, not just the current one?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes. The built-in /export command only handles the active session, but open-source tools like claude-code-log and claude-conversation-extractor walk every JSONL file in ~/.claude/projects/ and produce one Markdown or HTML file per session. Run them as a monthly cron job for a rolling archive."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "What's the difference between /resume and /continue?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "They are aliases for the same command. /continue is identical to /resume, opening the saved-session picker for the current project directory. Use whichever you prefer."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Do hooks have access to the transcript file?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes. Every hook payload includes a transcript_path field pointing to the active session's JSONL file. A PostToolUse hook can append context to its own log, and a Stop hook can summarize the session, since the transcript is written in real time up to the current event."&lt;br&gt;
          }&lt;br&gt;
        }&lt;br&gt;
      ]&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>transcripts</category>
      <category>developertooling</category>
      <category>aiworkflow</category>
    </item>
    <item>
      <title>Claude Code Router: Cut Your Claude Bill 21x</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Mon, 01 Jun 2026 14:24:35 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-code-router-cut-your-claude-bill-21x-4k7j</link>
      <guid>https://dev.to/nishilbhave/claude-code-router-cut-your-claude-bill-21x-4k7j</guid>
      <description>&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%2F0t0bqj4alzo7claim0do.jpg" 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%2F0t0bqj4alzo7claim0do.jpg" alt="Light infographic grid of claude-code-router backends — DeepSeek at 21x cheaper input, Gemini, GLM-4.5, OpenRouter, Ollama, and keeping Claude for code — cutting cost from $1,200 to $60 a year" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code Router: Cut Your Claude Bill 21x
&lt;/h2&gt;

&lt;p&gt;Anthropic's annualized run rate crossed $44 billion in May 2026, and Claude Code alone hit $2.5B annualized by February (&lt;a href="https://sacra.com/c/anthropic/" rel="noopener noreferrer"&gt;Sacra&lt;/a&gt;, 2026). Most of that revenue comes from one tab in one terminal. And almost all of it could route somewhere cheaper — if you knew the switch existed.&lt;/p&gt;

&lt;p&gt;Claude code router is that switch. It's a small TypeScript proxy from a developer named musistudio that intercepts the requests Claude Code makes to &lt;code&gt;api.anthropic.com&lt;/code&gt; and forwards them to whichever provider you want — DeepSeek, Gemini, GLM-4.5, OpenRouter, a local Ollama instance, anything that speaks OpenAI- or Gemini-format. The agent thinks it's still talking to Claude. The bill says otherwise.&lt;/p&gt;

&lt;p&gt;I've been running it for four months. This guide is the architecture, the cost math, the config I actually ship, and the tradeoffs nobody mentions in the README.&lt;/p&gt;

&lt;p&gt;the broader multi-model workflow this router fits into&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;claude-code-router&lt;/strong&gt; is a localhost proxy that swaps Claude Code's backend model for any OpenAI- or Gemini-compatible API. The repo is at ~34,000 GitHub stars and MIT-licensed (&lt;a href="https://github.com/musistudio/claude-code-router" rel="noopener noreferrer"&gt;musistudio/claude-code-router&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;DeepSeek-V4-Flash costs $0.14/M input and $0.28/M output — &lt;strong&gt;21x cheaper on input, 53x cheaper on output&lt;/strong&gt; than Claude Sonnet 4.6 (&lt;a href="https://api-docs.deepseek.com/quick_start/pricing-details-usd" rel="noopener noreferrer"&gt;DeepSeek&lt;/a&gt;, 2026). One Substack writeup tracked $1,200/yr to $60/yr after the swap (&lt;a href="https://johnrodrigues.substack.com/p/claude-code-deepseek-from-1200year" rel="noopener noreferrer"&gt;John Rodrigues&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;It also unblocks Claude Code in mainland China, Russia, Iran, and the other ~15 regions Anthropic doesn't serve directly (&lt;a href="https://www.anthropic.com/supported-countries" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;The tradeoff is real: prompt caching, native computer use, and tooluse strictness degrade outside Anthropic. The fix is the &lt;code&gt;Router&lt;/code&gt; config — keep Claude for code, route everything else.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is Claude Code Router and How Does the Proxy Architecture Work?
&lt;/h2&gt;

&lt;p&gt;Claude code router is a localhost HTTP server you install via &lt;code&gt;npm install -g @musistudio/claude-code-router&lt;/code&gt;, started with the &lt;code&gt;ccr code&lt;/code&gt; command, that exports &lt;code&gt;ANTHROPIC_BASE_URL=http://127.0.0.1:3456&lt;/code&gt; before Claude Code spawns (&lt;a href="https://github.com/musistudio/claude-code-router" rel="noopener noreferrer"&gt;musistudio/claude-code-router&lt;/a&gt;, 2026). Claude Code makes its usual Anthropic Messages API calls; the router rewrites them in flight to whichever provider format the destination wants, then translates the response back.&lt;/p&gt;

&lt;p&gt;That's the whole trick. Anthropic's CLI doesn't pin certificates or check the server identity beyond the env var. Set the variable, point it somewhere local, and the agent will happily stream tokens from DeepSeek thinking it's chatting with Claude.&lt;/p&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%2Faqr06lfeae9o7aam67ke.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%2Faqr06lfeae9o7aam67ke.png" alt="Architecture diagram showing how claude-code-router sits between Claude Code and multiple model providers. Claude Code sends Anthropic Messages API requests to localhost port 3456. The router parses each request, applies routing rules based on context length, prompt type, and model name, then forwards translated requests to DeepSeek, Gemini, GLM, OpenRouter, or Ollama. Responses flow back through the router and are reshaped to Anthropic format before reaching Claude Code." width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The clever part is the routing layer. The &lt;code&gt;Router&lt;/code&gt; config block in &lt;code&gt;~/.claude-code-router/config.json&lt;/code&gt; has five keys: &lt;code&gt;default&lt;/code&gt;, &lt;code&gt;background&lt;/code&gt;, &lt;code&gt;think&lt;/code&gt;, &lt;code&gt;longContext&lt;/code&gt;, and &lt;code&gt;webSearch&lt;/code&gt;. Each maps a request shape to a &lt;code&gt;&amp;lt;provider&amp;gt;,&amp;lt;model&amp;gt;&lt;/code&gt; pair. When a request's prompt token count exceeds &lt;code&gt;longContextThreshold&lt;/code&gt; (default 60,000), it goes to &lt;code&gt;longContext&lt;/code&gt;. When Claude Code marks a request as "background" — file reads, status checks, summarization between tool calls — it goes to &lt;code&gt;background&lt;/code&gt;. Everything else hits &lt;code&gt;default&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The reason this works at all is that Claude Code's tool-use protocol is a thin layer over a generic chat API. Once you can pass JSON-schema tool definitions and parse &lt;code&gt;tool_use&lt;/code&gt; blocks in the response, almost any modern model can play. The router's &lt;code&gt;transformer&lt;/code&gt; plugins (&lt;code&gt;deepseek&lt;/code&gt;, &lt;code&gt;gemini&lt;/code&gt;, &lt;code&gt;openrouter&lt;/code&gt;, &lt;code&gt;tooluse&lt;/code&gt;, &lt;code&gt;maxtoken&lt;/code&gt;, &lt;code&gt;reasoning&lt;/code&gt;) handle the dialect differences — DeepSeek's reasoning tokens, Gemini's &lt;code&gt;functionCall&lt;/code&gt; shape, OpenRouter's quirks around streaming.&lt;/p&gt;

&lt;p&gt;why deterministic layers like the router beat in-prompt steering&lt;/p&gt;




&lt;h2&gt;
  
  
  How Much Money Can Claude Code Router Actually Save You?
&lt;/h2&gt;

&lt;p&gt;The honest number depends on what you do, but the spread is brutal. Claude Sonnet 4.6 charges $3 per million input tokens and $15 per million output (&lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026). DeepSeek-V4-Flash charges $0.14 and $0.28 — 21x and 53x cheaper respectively (&lt;a href="https://api-docs.deepseek.com/quick_start/pricing-details-usd" rel="noopener noreferrer"&gt;DeepSeek&lt;/a&gt;, 2026). One developer documented dropping from $1,200/yr to $60/yr after routing routine work to DeepSeek (&lt;a href="https://johnrodrigues.substack.com/p/claude-code-deepseek-from-1200year" rel="noopener noreferrer"&gt;John Rodrigues&lt;/a&gt;, 2026). An independent review tracked $150–200/mo bills falling to $30–50/mo, a 75–80% reduction (&lt;a href="https://aitoolanalysis.com/claude-code-router-review/" rel="noopener noreferrer"&gt;AI Tool Analysis&lt;/a&gt;, 2026).&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1695668548342-c0c1ad479aee%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1695668548342-c0c1ad479aee%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A rack of servers in a darkened data center server room with status LEDs" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The output-token spread is where the savings live. Coding agents are output-heavy — they emit diffs, write files, generate plans, summarize after every tool call. One eight-month Claude Code marathon by a developer named Reddit user &lt;code&gt;u/_atomicbomb&lt;/code&gt; burned 10 billion tokens, roughly $15,000 at Sonnet list price (&lt;a href="https://www.morphllm.com/ai-coding-costs" rel="noopener noreferrer"&gt;Morph&lt;/a&gt;, 2026). The same token volume on DeepSeek-V4-Flash would have cost about $300 — still a lot, but a different conversation with your finance team.&lt;/p&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%2F2rdxaq7nukxvhpz02zlt.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%2F2rdxaq7nukxvhpz02zlt.png" alt="Bar chart comparing output token prices per million tokens across six models. Claude Opus 4.7 at 25 dollars, Claude Sonnet 4.6 at 15 dollars, Gemini 2.5 Pro at 10 dollars, GLM-4.5 at 2.20 dollars, DeepSeek-R1 at 2.19 dollars, and DeepSeek-V4-Flash at 0.28 dollars. The cheapest option is 89 times less expensive than the most expensive." width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Anthropic, Google AI, DeepSeek, Z.ai pricing pages, May 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A common objection here is that you get what you pay for, and the cheap models are dumb. That used to be true. On SWE-bench Verified in May 2026, DeepSeek-V4-Pro scores 73%, well behind Sonnet 4.6 at 79.6% but ahead of GPT-4o and last year's Claude Opus. For 80% of what a coding agent actually does — file reads, regex finds, formatting fixes, doc lookups, dependency bumps — that's enough. The router lets you reserve the expensive model for the 20% that needs it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My own bill, four months in:&lt;/strong&gt; $213 in March 2026 on direct Anthropic API → $41 in April after routing background, longContext, and "write a commit message" type calls to DeepSeek-V4-Flash. Default code edits still go to Sonnet. Quality on the work I actually ship hasn't moved. The diff is entirely "stuff Claude was doing in the background that nobody needed to be Claude."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;my deeper take on DeepSeek's place in a coding stack&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Geographic Restrictions Make Claude Code Router Essential Outside the US
&lt;/h2&gt;

&lt;p&gt;Anthropic's API is unavailable in roughly fifteen countries and territories — mainland China, Russia, Iran, North Korea, Belarus, Cuba, Syria, Crimea, Donetsk, Luhansk, Kherson, Zaporizhzhia, and a handful of other African and South Asian nations (&lt;a href="https://www.anthropic.com/supported-countries" rel="noopener noreferrer"&gt;Anthropic Supported Countries&lt;/a&gt;, 2026). Anthropic tightened the rules in September 2025 to block entities more than 50% owned by parties headquartered in unsupported regions, regardless of where those entities physically operate (&lt;a href="https://www.anthropic.com/news/updating-restrictions-of-sales-to-unsupported-regions" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2025).&lt;/p&gt;

&lt;p&gt;For a developer in Shanghai or Tehran, that's the end of the conversation with Claude Code via the official path. A VPN doesn't fix it — Anthropic terminates accounts that trip its fraud heuristics, and many corporate environments forbid VPNs anyway. The Claude Code repo on GitHub has open issues from Chinese developers hitting this wall on every fresh install (&lt;a href="https://github.com/anthropics/claude-code/issues/2656" rel="noopener noreferrer"&gt;anthropics/claude-code#2656&lt;/a&gt;, 2025).&lt;/p&gt;

&lt;p&gt;Claude code router solves it cleanly by routing through a provider that does serve the user's region:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mainland China:&lt;/strong&gt; GLM-4.5 from Zhipu AI (Z.ai) or Qwen from Alibaba Cloud — domestic providers, no VPN required, RMB billing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UAE, Saudi Arabia, Russia:&lt;/strong&gt; OpenRouter (Singapore-domiciled) acts as a meta-aggregator that often accepts payment methods Anthropic doesn't, and exposes Anthropic's own models among others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iran:&lt;/strong&gt; DeepSeek directly, or local Ollama for everything that doesn't need a frontier model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The legal nuance matters. Routing through a third-party provider that itself has access to the model is different from circumventing Anthropic. Many enterprises in restricted regions still need an AI coding workflow; the router lets them have one without forcing the user to perjure themselves on a signup form.&lt;/p&gt;

&lt;p&gt;According to Menlo Ventures' 2025 enterprise survey, 60% of enterprises now deploy three or more foundation models in production, and the share spent on Anthropic models rose to 40% globally (&lt;a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/" rel="noopener noreferrer"&gt;Menlo Ventures&lt;/a&gt;, 2025). The router is what makes those numbers reachable for the parts of the world where the official Anthropic path is closed.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You Install and Configure Claude Code Router?
&lt;/h2&gt;

&lt;p&gt;The install is two commands and a config file. From the repo's current README (&lt;a href="https://github.com/musistudio/claude-code-router" rel="noopener noreferrer"&gt;musistudio/claude-code-router&lt;/a&gt;, 2026):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Prereq: Claude Code already installed&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code

&lt;span class="c"&gt;# Install the router itself&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @musistudio/claude-code-router

&lt;span class="c"&gt;# Launch Claude Code through the router&lt;/span&gt;
ccr code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last command does three things: starts the local proxy on port 3456, exports &lt;code&gt;ANTHROPIC_BASE_URL=http://127.0.0.1:3456&lt;/code&gt; plus a dummy &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;, then spawns Claude Code with those env vars. If you've never run &lt;code&gt;ccr&lt;/code&gt; before, the first launch creates &lt;code&gt;~/.claude-code-router/config.json&lt;/code&gt; with a placeholder.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Source code displayed on a black terminal screen, illustrating the Claude Code CLI environment" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The config file has two top-level sections that matter: &lt;code&gt;Providers&lt;/code&gt; (an array of upstream endpoints) and &lt;code&gt;Router&lt;/code&gt; (the rules that map request shapes to providers). Here's a minimal working version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Providers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"api_base_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.deepseek.com/v1/chat/completions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"api_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$DEEPSEEK_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"deepseek-chat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek-reasoner"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"deepseek"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"api_base_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://generativelanguage.googleapis.com/v1beta/models/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"api_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$GEMINI_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"gemini-2.5-pro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini-2.5-flash"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"gemini"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Router"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek,deepseek-chat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"background"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek,deepseek-chat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"longContext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini,gemini-2.5-pro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"longContextThreshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"think"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek,deepseek-reasoner"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;$ENV_VAR&lt;/code&gt; syntax for &lt;code&gt;api_key&lt;/code&gt; is a 2026 addition — it pulls from your shell environment so the config file itself stays safe to commit (assuming you don't commit the env vars). The &lt;code&gt;transformer.use&lt;/code&gt; array is the dialect plugin; it reshapes each request body to whatever the upstream API expects.&lt;/p&gt;

&lt;p&gt;Inside Claude Code, the &lt;code&gt;/model deepseek,deepseek-reasoner&lt;/code&gt; slash command switches the default route for the current session. There's also a &lt;code&gt;&amp;lt;CCR-SUBAGENT-MODEL&amp;gt;provider,model&amp;lt;/CCR-SUBAGENT-MODEL&amp;gt;&lt;/code&gt; prefix you can drop into a prompt to override the route for a single subagent call — useful when a subagent's job is "summarize this PR" and you want it cheap.&lt;/p&gt;

&lt;p&gt;For a visual editor, &lt;code&gt;ccr ui&lt;/code&gt; opens a localhost web UI for managing providers, models, and routes — added in v1.0.30. For production usage, &lt;code&gt;ccr start | stop | restart&lt;/code&gt; runs the proxy as a daemon so &lt;code&gt;ccr code&lt;/code&gt; reuses it across sessions.&lt;/p&gt;

&lt;p&gt;patterns for routing different subagents to different models&lt;/p&gt;




&lt;h2&gt;
  
  
  What Routing Rules Actually Work in Practice?
&lt;/h2&gt;

&lt;p&gt;The default config that ships with the router treats every request the same. That's the wrong move — you'll either burn money on the cheap path or get bad output on the expensive one. The rule I've landed on after four months is to split by what the request is for, not what model the user asked for.&lt;/p&gt;

&lt;p&gt;Here's the actual &lt;code&gt;Router&lt;/code&gt; block from my config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"Router"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"anthropic,claude-sonnet-4-6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"background"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek,deepseek-chat"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"longContext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini,gemini-2.5-pro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"longContextThreshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"think"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deepseek,deepseek-reasoner"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"webSearch"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openrouter,perplexity/sonar-pro"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reasoning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;default&lt;/code&gt; → Sonnet 4.6.&lt;/strong&gt; This is the hot path for code edits, where output quality matters and Anthropic's lead on SWE-bench is real. Worth the $3/$15.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;background&lt;/code&gt; → DeepSeek-V4-Flash.&lt;/strong&gt; Claude Code marks file-read responses, between-tool summarization, and "what file should I look at next" reasoning as background. Roughly 60% of total token volume by my measurement. None of it needs a frontier model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;longContext&lt;/code&gt; → Gemini 2.5 Pro.&lt;/strong&gt; Above 80K tokens of context, Gemini's 1M-token window is the only game in town that doesn't degrade. Anthropic's own long-context performance drops past 200K, and the per-token cost gets ugly. (If you're considering dropping Claude Code entirely and switching to Gemini's official CLI for the free tier alone, I broke down that exact tradeoff in &lt;a href="https://maketocreate.com/gemini-cli-vs-claude-code-an-honest-2026-comparison/" rel="noopener noreferrer"&gt;Gemini CLI vs Claude Code&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;think&lt;/code&gt; → DeepSeek-R1.&lt;/strong&gt; When Claude Code requests &lt;code&gt;thinking: true&lt;/code&gt; (extended reasoning), routing to DeepSeek-R1 gets you visible chain-of-thought at $0.55/$2.19 — about a fifth of what Sonnet thinking costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;webSearch&lt;/code&gt; → Perplexity Sonar via OpenRouter.&lt;/strong&gt; Sonar has live web grounding built in; Claude doesn't.&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%2Fjl793a03c75l6z9930kr.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%2Fjl793a03c75l6z9930kr.png" alt="Donut chart showing how request volume splits across providers in my config over a typical week — DeepSeek at 58 percent, Anthropic Sonnet at 27 percent, Gemini at 11 percent, OpenRouter at 4 percent." width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Personal data, week of May 5–11, 2026, exported via ccr's status-line monitoring beta.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The interesting inversion is in the second line of the figcaption: 58% of requests go to DeepSeek but it accounts for 8% of spend. Anthropic gets 27% of requests and 71% of spend. The router isn't doing the savings work by being clever — it's doing it by stopping the expensive model from getting requests it didn't need to see.&lt;/p&gt;

&lt;p&gt;why request shape matters more than model choice for cost&lt;/p&gt;




&lt;h2&gt;
  
  
  What Tradeoffs Should You Expect When Routing Around Anthropic?
&lt;/h2&gt;

&lt;p&gt;The router does break things, and the README undersells it. Three real problems show up in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt caching dies on most non-Anthropic routes.&lt;/strong&gt; Anthropic's cache is 90% off on cached input — Sonnet 4.6 becomes $0.30 instead of $3 on repeat reads (&lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026). DeepSeek has its own cache (the V4-Flash $0.0028 cache-hit rate is published), but the router's transformer doesn't always preserve the cache breakpoints Claude Code sets. If your repo is small and your sessions are long, this can wipe out the headline savings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Computer use, vision, and PDF support degrade.&lt;/strong&gt; Anthropic's &lt;code&gt;computer-use&lt;/code&gt; tool is a model-trained capability; DeepSeek doesn't have it. Gemini has its own vision but the request shape is different. If you use Claude Code for browser automation or PDF analysis, the router either drops those calls or returns errors the agent doesn't know how to parse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool-use strictness varies.&lt;/strong&gt; Anthropic's models are aggressively trained to emit valid &lt;code&gt;tool_use&lt;/code&gt; JSON. DeepSeek and GLM are looser — they sometimes emit partial JSON, malformed &lt;code&gt;name&lt;/code&gt; fields, or hallucinated tool names. The &lt;code&gt;tooluse&lt;/code&gt; transformer plugin in the router papers over the worst of it, but I still see "Claude Code stuck because the model said it called a tool that doesn't exist" maybe twice a week.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1750711731797-25c3f2551ff8%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1750711731797-25c3f2551ff8%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A network switch with multi-colored ethernet cables connected — representing multi-provider routing" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A 2026 community guide on tokenmix.ai also notes that Opus 4.7's tokenizer counts roughly 35% more tokens than competitors for the same prompt, which means cost comparisons in the router's favor are actually understated — but only if you actually move that workload, not if you let Claude Code keep routing default (&lt;a href="https://www.finout.io/blog/claude-opus-4.7-pricing-the-real-cost-story-behind-the-unchanged-price-tag" rel="noopener noreferrer"&gt;Finout&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What I learned the hard way:&lt;/strong&gt; my first config sent everything to DeepSeek. Three commits in, the model invented a function name and Claude Code happily called it across four files before crashing on the test step. I rolled back, narrowed DeepSeek to &lt;code&gt;background&lt;/code&gt; and &lt;code&gt;think&lt;/code&gt;, and the failure rate dropped to noise. The savings dropped 15% and the regret dropped 100%.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Is It Safe to Route API Traffic Through a Local Proxy?
&lt;/h2&gt;

&lt;p&gt;This is the question nobody else writing about claude-code-router seems to answer, and it has three real surfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supply-chain risk on the install.&lt;/strong&gt; Sonatype tracked 454,648 malicious npm packages published in 2025, with the npm registry hosting more than 99% of all OSS malware (&lt;a href="https://www.sonatype.com/state-of-the-software-supply-chain/2026/open-source-malware" rel="noopener noreferrer"&gt;Sonatype 2026 State of the Software Supply Chain&lt;/a&gt;, 2026). The Shai-Hulud worm in September 2025 was the first self-replicating npm worm and hit 500+ packages (&lt;a href="https://www.sonatype.com/blog/ongoing-npm-software-supply-chain-attack-exposes-new-risks" rel="noopener noreferrer"&gt;Sonatype&lt;/a&gt;, 2025). &lt;code&gt;claude-code-router&lt;/code&gt; is &lt;code&gt;npm install -g&lt;/code&gt;, which means it runs install scripts as your user. The repo is open, the maintainer is reputable, and 34,000 stars is some signal — but you should pin the version, audit the dependency tree at least once, and ideally install into a per-project node prefix rather than globally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blast radius on your provider keys.&lt;/strong&gt; The config file at &lt;code&gt;~/.claude-code-router/config.json&lt;/code&gt; holds plaintext API keys for every provider you've added. If you've got DeepSeek, Gemini, Anthropic, OpenRouter, and a Z.ai key in one file, one machine compromise hands an attacker the lot. The 2026 env-var interpolation (&lt;code&gt;$VAR_NAME&lt;/code&gt;) helps — store the keys in your shell environment or a secret manager and let the router read them at startup. Don't commit the file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data residency and prompt flow.&lt;/strong&gt; Every prompt you send goes to the provider you routed it to. If you're a US developer routing background calls to DeepSeek, your code snippets and context are flowing through a Chinese-domiciled API. If your employer has any data classification policy more serious than "don't paste passwords," you should read it before turning this on. For non-confidential personal projects, it's a non-issue. For client work, talk to your compliance lead first.&lt;/p&gt;

&lt;p&gt;A useful framing: the router's security posture is roughly that of any other developer SaaS proxy you've already installed (Vercel CLI, Supabase CLI, the Firebase tools). It's not worse than those. It's also not better, and the keys it holds are more valuable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/cursor-code-review-across-codex-windsurf-and-45-ai-agents/" rel="noopener noreferrer"&gt;comparing security postures across the AI coding agent stack&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does claude-code-router work with Claude Code's plan mode and subagents?
&lt;/h3&gt;

&lt;p&gt;Yes. Plan mode is just a request flag; the router forwards it. Subagents work too, and the router supports a &lt;code&gt;&amp;lt;CCR-SUBAGENT-MODEL&amp;gt;provider,model&amp;lt;/CCR-SUBAGENT-MODEL&amp;gt;&lt;/code&gt; prefix that lets you override the route per subagent call. I route my "summarize this PR" subagent to DeepSeek-V4-Flash and keep my "review this code" subagent on Sonnet 4.6.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will the router break when Claude Code updates?
&lt;/h3&gt;

&lt;p&gt;Sometimes briefly. The router translates Claude Code's request shape, so when Anthropic changes the protocol (the September 2025 &lt;code&gt;PostToolBatch&lt;/code&gt; event broke it for two days), there's a lag while the maintainer ships a fix. Pinning to a known-good version and watching the &lt;a href="https://github.com/musistudio/claude-code-router/issues" rel="noopener noreferrer"&gt;GitHub issues&lt;/a&gt; is the practical mitigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Ollama locally and route everything offline?
&lt;/h3&gt;

&lt;p&gt;Yes for some workloads. Add Ollama as a provider with &lt;code&gt;api_base_url: http://localhost:11434/v1/chat/completions&lt;/code&gt;, point &lt;code&gt;default&lt;/code&gt; and &lt;code&gt;background&lt;/code&gt; at it, and Claude Code works fully offline. Quality on Qwen2.5-Coder or Llama 3.3 is solid for simple edits but degrades fast on complex multi-file refactors. Best as a fallback when your internet's down, not a daily driver.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does claude-code-router work with MCP servers?
&lt;/h3&gt;

&lt;p&gt;Yes — and the confusion is understandable, because it sounds like two routing layers fighting. They don't overlap. MCP configuration lives inside Claude Code itself (your &lt;code&gt;.mcp.json&lt;/code&gt; and the servers Claude Code spawns); claude-code-router only swaps the &lt;em&gt;model backend&lt;/em&gt; the request is sent to. The router sits between Claude Code and the model API, so your MCP tools, their &lt;code&gt;tool_use&lt;/code&gt; calls, and the results all pass through it untouched. The one real caveat is tool-use strictness: if you route an MCP-heavy session to a looser model like DeepSeek or GLM, you'll see more malformed &lt;code&gt;tool_use&lt;/code&gt; JSON than you would on Sonnet, so keep MCP-heavy work on the &lt;code&gt;default&lt;/code&gt; (Anthropic) route. If you haven't set your servers up yet, start with my &lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;Claude Code MCP configuration guide&lt;/a&gt; — the router changes nothing about how MCP is wired.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the project legitimate or a stealthy way to harvest API keys?
&lt;/h3&gt;

&lt;p&gt;The musistudio/claude-code-router source is fully open, MIT-licensed, and has 34,000 GitHub stars with hundreds of contributors as of May 2026. Outbound traffic only goes to the providers you configure. The bigger risk is install-time supply-chain compromise via the npm registry — pin the version, audit the lockfile, and re-audit on every upgrade.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will Anthropic ban my account for using a router?
&lt;/h3&gt;

&lt;p&gt;The router doesn't touch Anthropic's API unless you route to it, and Claude Code is the official client either way. The Terms of Service don't prohibit routing requests through a local proxy. The actual risk is using a non-Anthropic provider whose ToS forbids competing with their own coding assistant — read the DeepSeek and Z.ai terms carefully if your usage is commercial.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Claude code router is a small piece of software that changes the economics of agentic coding. For US developers, it's a 60–90% cost cut on the workloads that don't need Anthropic's lead. For developers outside the supported regions, it's the only way to use Claude Code at all without leaving the laws on the table. The cost is real — degraded caching, looser tool use, real-but-bounded security surface — but the cost is also manageable if you split the routes by what the request is actually for.&lt;/p&gt;

&lt;p&gt;The version I run today routes 58% of requests to DeepSeek and pays Anthropic for the 27% that matters. The bill dropped from $213 to $41 in one month. The shipped code didn't change.&lt;/p&gt;

&lt;p&gt;If you've been using Claude Code at scale and the bill is starting to bite, install the router, point &lt;code&gt;background&lt;/code&gt; at DeepSeek, and watch what happens. The full config from this post is in my multi-model workflow guide. The next thing I'd read is the hook patterns post if you want the deterministic side of the same control story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Nishil Bhave — solo developer, four-month claude-code-router user, runs the maketocreate.com publishing stack on a mix of Anthropic, DeepSeek, and Gemini.&lt;/p&gt;

</description>
      <category>claudecoderouter</category>
      <category>claudecode</category>
      <category>deepseek</category>
      <category>multimodel</category>
    </item>
    <item>
      <title>Claude Code Installation Guide: Every Platform, Every Gotcha</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Sat, 30 May 2026 15:38:42 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-code-installation-guide-every-platform-every-gotcha-3m6i</link>
      <guid>https://dev.to/nishilbhave/claude-code-installation-guide-every-platform-every-gotcha-3m6i</guid>
      <description>&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%2Fla7fjksrf2tt7lsf3ibm.jpg" 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%2Fla7fjksrf2tt7lsf3ibm.jpg" alt="A four-stage Claude Code install pipeline — Install, Authenticate, Add to IDE, and Update/Uninstall — ending in a " width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code Installation Guide: Every Platform, Every Gotcha (2026)
&lt;/h2&gt;

&lt;p&gt;I've installed Claude Code on six machines in the last year. Three Macs (Intel, M1, M3), two Windows laptops, one Ubuntu box, plus the VS Code extension and the JetBrains plugin on top of those. Each install taught me a different lesson the docs don't quite spell out.&lt;/p&gt;

&lt;p&gt;The official setup page is good. It's also exhaustive, dry, and structured for the docs team, not for the developer who just wants the &lt;em&gt;right&lt;/em&gt; command for their machine and a heads-up on what's going to break. So here's the whole map: every install method, every supported platform, every IDE, the auth flow, the update story, and the clean uninstall paths. With the annotations you'd get from a friend who's done it more times than is healthy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;if you haven't picked a plan yet, start with the cost breakdown&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native installer is the recommended path on every OS as of 2026; the npm route still works but moved to "advanced" status in the official docs (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;Claude Code reached a $1B run-rate inside 9 months of GA, and the VS Code extension passed 13.97M installs by April 2026 (&lt;a href="https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2025).&lt;/li&gt;
&lt;li&gt;Uninstalling the CLI alone won't clean your machine; VS Code, JetBrains, and Desktop all write to &lt;code&gt;~/.claude/&lt;/code&gt; and will recreate it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Which Claude Code Install Method Should I Pick in 2026?
&lt;/h2&gt;

&lt;p&gt;The native installer is the right answer for ~95% of developers in 2026, per the official setup page (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). It ships a standalone binary, handles its own auto-updates, doesn't need Node.js, and works the same on macOS, Linux, Windows, and WSL. Pick another method only when you have a specific reason.&lt;/p&gt;

&lt;p&gt;The other methods exist for specific use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Homebrew&lt;/strong&gt;: you already live in &lt;code&gt;brew&lt;/code&gt;, want everything in one upgrade queue, and don't mind running &lt;code&gt;brew upgrade&lt;/code&gt; yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WinGet&lt;/strong&gt;: same logic on Windows. Centralised app management beats auto-updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;apt / dnf / apk&lt;/strong&gt;: Linux servers and CI runners where a signed package repo is non-negotiable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm &lt;code&gt;-g&lt;/code&gt;&lt;/strong&gt;: JavaScript shops standardising tooling through &lt;code&gt;package.json&lt;/code&gt;, monorepos, or Dockerfiles. Functional, just no longer the default path.&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%2F4zdqvpuvajj2psj2nev3.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%2F4zdqvpuvajj2psj2nev3.png" alt="AI-enabled IDE adoption among developers in 2025 — Cursor 18 percent, Claude Code 10 percent, Windsurf 5 percent" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Stack Overflow Developer Survey 2025&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude Code hit 10% adoption among developers in the 2025 Stack Overflow survey, behind Cursor at 18% but ahead of Windsurf at 5% (&lt;a href="https://survey.stackoverflow.co/2025/technology" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2025). That number is from before the October 2025 web launch and the desktop app push. The real install base is materially higher now. The point: which method you pick matters because there's a lot of tooling layered on top of the CLI.&lt;/p&gt;

&lt;p&gt;Here's the platform-support matrix I wish someone had handed me on day one:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;th&gt;Linux&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;WSL&lt;/th&gt;
&lt;th&gt;Auto-updates&lt;/th&gt;
&lt;th&gt;Needs Node.js&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Native installer&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Homebrew cask&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No (manual)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WinGet&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No (manual)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;apt / dnf / apk&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No (system update)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm &lt;code&gt;-g&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (manual)&lt;/td&gt;
&lt;td&gt;Yes (18+)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What I learned the hard way:&lt;/strong&gt; I started on npm because I was already in Node land and &lt;code&gt;npm i -g @anthropic-ai/claude-code&lt;/code&gt; felt like the obvious move. Three months later I migrated everything to the native installer because the npm path doesn't auto-update and I kept landing on old versions when a new model dropped. Pick the path that updates itself unless you have a reason not to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-vs-codex-cli-an-honest-2026-comparison/" rel="noopener noreferrer"&gt;how Claude Code stacks up against Codex CLI on install and developer experience&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Install Claude Code on macOS?
&lt;/h2&gt;

&lt;p&gt;The fastest macOS install in 2026 is a single line: &lt;code&gt;curl -fsSL https://claude.ai/install.sh | bash&lt;/code&gt; (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). It drops a signed binary into &lt;code&gt;~/.local/bin/claude&lt;/code&gt;, registers an auto-updater, and asks you to log in on first run. No Node, no Homebrew, no sudo. macOS 13.0 or newer is the minimum.&lt;/p&gt;

&lt;p&gt;The Homebrew route is for the brew-curious:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Stable channel (about a week behind latest)&lt;/span&gt;
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; claude-code

&lt;span class="c"&gt;# Rolling channel (latest builds)&lt;/span&gt;
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; claude-code@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The catch: Homebrew doesn't trigger Claude Code's built-in auto-updater. You'll need &lt;code&gt;brew upgrade claude-code&lt;/code&gt; (or &lt;code&gt;claude-code@latest&lt;/code&gt;) on your usual upgrade cadence. If you forget for a month, you'll get version skew complaints when a new model lands.&lt;/p&gt;

&lt;p&gt;Verify the install with &lt;code&gt;claude --version&lt;/code&gt; and then &lt;code&gt;claude doctor&lt;/code&gt;. The doctor command was the most useful thing I learned to run after a fresh setup. It catches PATH issues, broken auth tokens, and missing shell completions in one shot.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1775994121064-e75fa6f3e84c%3Fixid%3DM3w3MjE1NTZ8MHwxfHNlYXJjaHw0fHxjbGF1ZGUlMjBjb2RlfGVufDB8fHx8MTc4MDE1NTU2Mnww%26ixlib%3Drb-4.1.0%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1775994121064-e75fa6f3e84c%3Fixid%3DM3w3MjE1NTZ8MHwxfHNlYXJjaHw0fHxjbGF1ZGUlMjBjb2RlfGVufDB8fHx8MTc4MDE1NTU2Mnww%26ixlib%3Drb-4.1.0%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A pixelated orange character with a hat. - Photo by Bernd 📷 Dittrich on Unsplash" width="945" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Apple Silicon, the native installer ships a universal binary. You don't need a Rosetta install just because you're on an M-series chip. I've seen at least four developers on Reddit chase a Rosetta dependency that was never there. The binary is already universal, and the install script picks the right slice. If you're on an Intel Mac running macOS 13+, the same install works without modification.&lt;/p&gt;

&lt;p&gt;Citation capsule: According to Anthropic's official setup documentation, the native installer supports macOS 13.0+, Ubuntu 20.04+, Debian 10+, Alpine 3.19+, and Windows 10 1809+ (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). All install methods produce the same &lt;code&gt;claude&lt;/code&gt; binary; only update behaviour and package management differ.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Install Claude Code on Windows?
&lt;/h2&gt;

&lt;p&gt;Windows developers have three real options in 2026, and the right one depends on which shell you actually live in. The PowerShell native installer is fastest: &lt;code&gt;irm https://claude.ai/install.ps1 | iex&lt;/code&gt; from any PowerShell terminal (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). Windows 10 build 1809 or later is the floor; earlier builds aren't supported.&lt;/p&gt;

&lt;p&gt;CMD users get the same path with a slightly different invocation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://claude.ai/install.cmd -o install.cmd &amp;amp;&amp;amp; install.cmd &amp;amp;&amp;amp; del install.cmd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WinGet works if you're already standardised on the Windows package manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Anthropic.ClaudeCode&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The thing nobody tells Windows users: Claude Code has historically expected a Unix-like shell environment for some operations, which is why Git Bash matters here. If you installed Git for Windows, set &lt;code&gt;CLAUDE_CODE_GIT_BASH_PATH&lt;/code&gt; in your environment so Claude can call into Bash for shell-aware commands. Without it, you'll get cryptic errors on tools that shell out internally. The setting lives in &lt;code&gt;%USERPROFILE%\.claude\settings.json&lt;/code&gt; or as an env var.&lt;/p&gt;

&lt;p&gt;Stack Overflow's 2025 data puts Windows at 47.6% of professional developer environments, well ahead of macOS at 31.8% and Linux at 27.7% (&lt;a href="https://survey.stackoverflow.co/2025/technology" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2025). That's the audience whose Claude Code experience tends to get the least testing love, so plan to have &lt;code&gt;claude doctor&lt;/code&gt; open in another window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-errors-every-code-cause-and-fix-2026-guide/" rel="noopener noreferrer"&gt;the full Claude Code errors and troubleshooting reference if your Windows install misbehaves&lt;/a&gt;&lt;/p&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%2Fhoj04g8m6ve2gfwkc6ra.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%2Fhoj04g8m6ve2gfwkc6ra.png" alt="Developer operating system share among professionals in 2025 — Windows 47.6 percent, macOS 31.8 percent, Linux Ubuntu 27.7 percent" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Stack Overflow Developer Survey 2025 — Technology&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Install Claude Code on Linux?
&lt;/h2&gt;

&lt;p&gt;Linux gets the deepest install support of any platform, with four official paths: native installer, apt repo, dnf repo, and apk repo, all signed with the same Anthropic GPG key (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). Use &lt;code&gt;curl -fsSL https://claude.ai/install.sh | bash&lt;/code&gt; if you want auto-updates. Use the package manager if you want your config management tool to own upgrades.&lt;/p&gt;

&lt;p&gt;For Debian and Ubuntu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://downloads.claude.ai/claude-code/apt/stable/pubkey.asc &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/keyrings/claude-code.asc &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/etc/apt/keyrings/claude-code.asc] &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  https://downloads.claude.ai/claude-code/apt stable main"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/claude-code.list
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;claude-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Fedora and Rocky, use the &lt;code&gt;dnf&lt;/code&gt; repo with the same key. For Alpine, swap to &lt;code&gt;apk&lt;/code&gt;. The GPG fingerprint to verify against is &lt;code&gt;31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE&lt;/code&gt; (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). If you're putting Claude Code into a CI runner or a security-conscious environment, this is the path that survives an audit.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1618401479427-c8ef9465fbe1%3Fw%3D1200%26q%3D80%26fit%3Dcrop" 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%2Fimages.unsplash.com%2Fphoto-1618401479427-c8ef9465fbe1%3Fw%3D1200%26q%3D80%26fit%3Dcrop" alt="A penguin plush toy beside a laptop running a code editor — a fitting mascot for a Linux install walkthrough" width="1200" height="827"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The setting nobody mentions on Linux: &lt;code&gt;env.USE_BUILTIN_RIPGREP&lt;/code&gt; in &lt;code&gt;settings.json&lt;/code&gt;. Claude Code searches your codebase with ripgrep. On Linux it tries the system &lt;code&gt;rg&lt;/code&gt; first, which is the right default, but on a clean Debian box, ripgrep may not be installed at all, and the failure mode is silent. Set &lt;code&gt;"env": { "USE_BUILTIN_RIPGREP": "1" }&lt;/code&gt; in your &lt;code&gt;~/.claude/settings.json&lt;/code&gt; and you get the bundled binary unconditionally. I lost twenty minutes to this on a fresh DigitalOcean droplet before I figured it out.&lt;/p&gt;

&lt;p&gt;Citation capsule: Anthropic signs all Linux packages with GPG fingerprint &lt;code&gt;31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE&lt;/code&gt; and serves them from &lt;code&gt;downloads.claude.ai/claude-code/{apt,rpm,apk}&lt;/code&gt; (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). Verifying the fingerprint before adding the repo is the single defence against a supply-chain swap on the package source.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Should You Use npm to Install Claude Code?
&lt;/h2&gt;

&lt;p&gt;Use npm when Claude Code is one of many JavaScript tools you're version-pinning across a team, or when your Dockerfile already runs &lt;code&gt;npm ci&lt;/code&gt; and adding a curl-pipe-bash step feels wrong. Otherwise, the official docs now call it the "advanced" option, and the GitHub README is even blunter: it labels the npm path as deprecated for typical use (&lt;a href="https://github.com/anthropics/claude-code" rel="noopener noreferrer"&gt;anthropics/claude-code&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;The command itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three things to know:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Don't use &lt;code&gt;sudo&lt;/code&gt;.&lt;/strong&gt; &lt;code&gt;sudo npm install -g&lt;/code&gt; writes to root-owned paths and creates permission headaches every time the package updates. Fix your npm global prefix instead: &lt;code&gt;npm config set prefix ~/.npm-global&lt;/code&gt; and add &lt;code&gt;~/.npm-global/bin&lt;/code&gt; to your &lt;code&gt;PATH&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node 18 or later.&lt;/strong&gt; The npm install is the only path with a Node version requirement, because the package downloads platform-specific binaries via optional dependencies. The native installer doesn't need Node at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updates are manual.&lt;/strong&gt; &lt;code&gt;npm install -g @anthropic-ai/claude-code@latest&lt;/code&gt; is the upgrade command. &lt;code&gt;npm update -g&lt;/code&gt; won't always pull the newest version because of how npm resolves the &lt;code&gt;@latest&lt;/code&gt; tag. I learned this when I noticed three of my machines were a major version behind.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;GitHub Octoverse 2025 counted over 1.1 million public repos using an LLM SDK, with 693,867 created in the last 12 months alone, a 178% year-over-year jump (&lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, 2025). The npm path makes Claude Code easy to pin alongside those SDKs in a Node project, which is the strongest reason it sticks around in the toolbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Install the Claude Code VS Code Extension?
&lt;/h2&gt;

&lt;p&gt;Open VS Code, hit the Extensions panel, search for "Claude Code," and install the one published by &lt;strong&gt;Anthropic&lt;/strong&gt; (the publisher field matters; there are unofficial forks). The Marketplace listing shows 13,974,890 installs and a 4.0-star rating across 678 reviews as of late April 2026 (&lt;a href="https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code" rel="noopener noreferrer"&gt;Visual Studio Marketplace&lt;/a&gt;, 2026). That's by far the largest extension in the AI-coding category.&lt;/p&gt;

&lt;p&gt;The extension is not a standalone product; it's a UI on top of the CLI. If you haven't installed the &lt;code&gt;claude&lt;/code&gt; binary first, the extension will prompt you to. The cleanest order is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the CLI (native installer).&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;claude&lt;/code&gt; once and log in.&lt;/li&gt;
&lt;li&gt;Then install the VS Code extension.&lt;/li&gt;
&lt;li&gt;Open the Claude panel; it picks up your existing auth.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you reverse step 1 and step 3, the extension will trigger its own CLI bootstrap, which works but tends to install into a different path than you'd pick by hand. I've cleaned this up on three machines, and it's never been pleasant.&lt;/p&gt;

&lt;p&gt;the subagent patterns I use inside the VS Code extension to parallelize work&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The auth gotcha:&lt;/strong&gt; the first time I installed the extension on a second machine, I got an auth loop because the OAuth callback tried to bind to a port that was already in use by my Next.js dev server. The fix was to close the dev server, run &lt;code&gt;claude /login&lt;/code&gt; in the terminal first, then open VS Code. The extension reuses the same token. If the extension still misbehaves, delete &lt;code&gt;~/.claude/credentials.json&lt;/code&gt; (the file is auto-recreated on next login) and try again. That path is documented in the troubleshooting docs but not surfaced in the extension UI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Citation capsule: The Claude Code VS Code extension passed 13.97M installs on the Visual Studio Marketplace by April 2026, making it the highest-installed AI coding assistant from any major vendor in the extension catalog (&lt;a href="https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code" rel="noopener noreferrer"&gt;Marketplace&lt;/a&gt;, 2026). The extension depends on the CLI binary being installed and authenticated, not as a standalone product.&lt;/p&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%2Fai4qe11utrxim5pqwms2.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%2Fai4qe11utrxim5pqwms2.png" alt="Claude Code key milestones from February 2025 to May 2026" width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: Anthropic news posts, GitHub repo, Visual Studio Marketplace&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Install the Claude Code JetBrains Plugin?
&lt;/h2&gt;

&lt;p&gt;The JetBrains plugin lives at marketplace plugin ID 27310 ("Claude Code [Beta]"), published by Anthropic, and works across IntelliJ IDEA, PyCharm, WebStorm, RubyMine, GoLand, PhpStorm, Rider, and Android Studio (&lt;a href="https://plugins.jetbrains.com/plugin/27310-claude-code-beta-" rel="noopener noreferrer"&gt;JetBrains Marketplace&lt;/a&gt;, 2026). It's still labelled Beta as of May 2026, which is worth knowing before you wire it into a daily workflow.&lt;/p&gt;

&lt;p&gt;Install from inside your JetBrains IDE: &lt;strong&gt;Settings → Plugins → Marketplace → search "Claude Code"&lt;/strong&gt;. Install, restart the IDE, and a Claude Code tool window appears in the sidebar. Same dependency rule as VS Code: the plugin calls into the CLI binary, so install the CLI first.&lt;/p&gt;

&lt;p&gt;JetBrains' own State of Developer Ecosystem 2025 surveyed 24,534 developers across 194 countries between April and June 2025, the broadest dataset on IDE usage that exists (&lt;a href="https://blog.jetbrains.com/research/2025/10/state-of-developer-ecosystem-2025/" rel="noopener noreferrer"&gt;JetBrains&lt;/a&gt;, 2025). It also tracked the rise of Cursor (mentions jumped from 135 in 2024 to over 2,300 in 2025) and Claude Code right alongside it (&lt;a href="https://www.theregister.com/2025/10/21/massive_jetbrains_dev_survey/" rel="noopener noreferrer"&gt;The Register&lt;/a&gt;, 2025). If you're a JetBrains shop wondering whether the plugin is mature enough, the answer in mid-2026 is "yes for daily use, no for unattended automation." Beta means breaking changes are still acceptable.&lt;/p&gt;

&lt;p&gt;The auth quirk on JetBrains: the plugin tries to find your &lt;code&gt;claude&lt;/code&gt; binary via PATH, and on macOS it sometimes can't see PATH entries you set in &lt;code&gt;.zshrc&lt;/code&gt; because IDEs launched from Spotlight inherit a stripped environment. If the plugin can't find Claude, open the IDE from a terminal with &lt;code&gt;open -a "IntelliJ IDEA"&lt;/code&gt; or set the binary path explicitly in plugin settings. This is the single most common JetBrains setup issue I've seen reported on the Anthropic forums.&lt;/p&gt;

&lt;p&gt;the hook patterns that let me automate Claude Code workflows across JetBrains and the CLI&lt;/p&gt;

&lt;h2&gt;
  
  
  Is There a Claude Code Desktop App?
&lt;/h2&gt;

&lt;p&gt;Yes — Anthropic shipped a graphical desktop app for users who'd rather not live in a terminal (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). macOS users grab the &lt;code&gt;.dmg&lt;/code&gt; from &lt;code&gt;claude.ai/api/desktop/darwin/universal/dmg/latest&lt;/code&gt;; Windows users get the installer through &lt;code&gt;claude.com/download&lt;/code&gt;. Linux desktop isn't listed in the official setup docs as of May 2026, so Linux users stick with the CLI or the IDE plugins for now.&lt;/p&gt;

&lt;p&gt;The desktop app and the CLI share the same &lt;code&gt;~/.claude/&lt;/code&gt; config directory, the same auth token, the same sessions. Whichever you log into first, the other picks up. That's why "uninstall the CLI" without uninstalling the desktop app doesn't really uninstall anything; the desktop app recreates the config files the moment you launch it.&lt;/p&gt;

&lt;p&gt;Anthropic also launched Claude Code on the web on October 20, 2025, plus an iOS app the same day (&lt;a href="https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2025). The web version doesn't need any install at all. The iOS app is a companion, not a replacement: useful for reviewing sessions on the go, less useful for serious coding.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1489875347897-49f64b51c1f8%3Fw%3D1200%26q%3D80%26fit%3Dcrop" 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%2Fimages.unsplash.com%2Fphoto-1489875347897-49f64b51c1f8%3Fw%3D1200%26q%3D80%26fit%3Dcrop" alt="A MacBook Pro screen showing source code — the desktop app and CLI both write to the same config directory on macOS" width="1200" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Citation capsule: Anthropic launched Claude Code's web interface and iOS app on October 20, 2025, expanding the product from a CLI-first tool to a multi-surface platform across terminal, IDE plugins, desktop, web, and mobile (&lt;a href="https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2025). All surfaces share the same authentication and configuration, which simplifies setup but complicates clean uninstalls.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Log Into Claude Code After Install?
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;claude&lt;/code&gt; in your terminal once and the auth flow opens a browser window for OAuth against your Claude.com account (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). Pro, Max, Team, Enterprise, and Console accounts all work. The free Claude.com tier does not include Claude Code access, which is the most common "why isn't this working" question on the forums.&lt;/p&gt;

&lt;p&gt;There are three login paths, depending on how you bill:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Claude.com subscription&lt;/strong&gt;: Pro, Max, Team, or Enterprise. OAuth flow, no API key needed, usage counts against your subscription's rate limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic Console API key&lt;/strong&gt;: for pay-as-you-go billing. Set &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; in your environment or run &lt;code&gt;claude /login&lt;/code&gt; and pick "API key."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud provider keys&lt;/strong&gt;: Amazon Bedrock, Google Vertex AI, or Microsoft Foundry. Same &lt;code&gt;claude&lt;/code&gt; binary, different backend. Useful when your company has its own contract with the cloud provider.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;/login&lt;/code&gt; slash command works inside an active session if you need to switch accounts mid-flight. The first launch handles login automatically, so most users never type &lt;code&gt;/login&lt;/code&gt; at all.&lt;/p&gt;

&lt;p&gt;GitHub Copilot crossed 4.7M paid subscribers by January 2026, with 80% of new GitHub developers using it in their first week (&lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/" rel="noopener noreferrer"&gt;GitHub Octoverse&lt;/a&gt;, 2025). That's the comparison number to keep in mind: AI coding tools are now table stakes for new developers, and Claude Code's auth flow is intentionally designed for fast on-ramp from a Claude.com account most users already have.&lt;/p&gt;

&lt;p&gt;the router pattern for swapping backends without changing your auth flow&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Update Claude Code Without Losing My Config?
&lt;/h2&gt;

&lt;p&gt;Native installs auto-update by default in 2026, with two channels exposed via the &lt;code&gt;autoUpdatesChannel&lt;/code&gt; setting in &lt;code&gt;~/.claude/settings.json&lt;/code&gt;: &lt;code&gt;latest&lt;/code&gt; (rolling) or &lt;code&gt;stable&lt;/code&gt; (about a week behind, recommended for teams) (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). Manual updates are a one-liner: &lt;code&gt;claude update&lt;/code&gt;. Your config, sessions, and auth tokens survive every update; Anthropic versions the config schema separately from the binary.&lt;/p&gt;

&lt;p&gt;Per install method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Native (auto-updates by default; manual trigger)&lt;/span&gt;
claude update

&lt;span class="c"&gt;# Homebrew&lt;/span&gt;
brew upgrade claude-code         &lt;span class="c"&gt;# or claude-code@latest&lt;/span&gt;

&lt;span class="c"&gt;# WinGet&lt;/span&gt;
winget upgrade Anthropic.ClaudeCode

&lt;span class="c"&gt;# Linux package managers&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade claude-code
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf upgrade claude-code
&lt;span class="nb"&gt;sudo &lt;/span&gt;apk update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apk upgrade claude-code

&lt;span class="c"&gt;# npm&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two settings nobody surfaces enough:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"minimumVersion": "1.2.3"&lt;/code&gt; in &lt;code&gt;settings.json&lt;/code&gt; blocks the binary from launching if it's older than the value you set. Useful for teams pinning a feature floor.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"env": { "DISABLE_AUTOUPDATER": "1" }&lt;/code&gt; shuts off the background updater entirely. Useful in CI where you want reproducible builds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest config-preservation win on a multi-machine setup: log into your Anthropic account on each machine, and the model preferences, MCP server configs, and slash commands all sync through the account, not the local file. The local &lt;code&gt;~/.claude/&lt;/code&gt; directory is more of a cache than a source of truth. Move it freely between machines, or don't; the next login fills it in.&lt;/p&gt;

&lt;p&gt;how to preserve session history before a clean reinstall or migration&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Cleanly Uninstall Claude Code from Every Platform?
&lt;/h2&gt;

&lt;p&gt;The full uninstall has three layers: the binary, the config, and the IDE integrations. Skipping any of them leaves Claude Code partly resident on your machine. Here's the complete map by platform, taken from the official setup docs and the actual file paths the installer touches (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Binary, by install method:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Native (macOS / Linux)&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.local/bin/claude
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.local/share/claude

&lt;span class="c"&gt;# Native (Windows PowerShell)&lt;/span&gt;
Remove-Item &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$env&lt;/span&gt;&lt;span class="s2"&gt;:USERPROFILE&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;local&lt;/span&gt;&lt;span class="se"&gt;\b&lt;/span&gt;&lt;span class="s2"&gt;in&lt;/span&gt;&lt;span class="se"&gt;\c&lt;/span&gt;&lt;span class="s2"&gt;laude.exe"&lt;/span&gt; &lt;span class="nt"&gt;-Force&lt;/span&gt;
Remove-Item &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$env&lt;/span&gt;&lt;span class="s2"&gt;:USERPROFILE&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;local&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="s2"&gt;hare&lt;/span&gt;&lt;span class="se"&gt;\c&lt;/span&gt;&lt;span class="s2"&gt;laude"&lt;/span&gt; &lt;span class="nt"&gt;-Recurse&lt;/span&gt; &lt;span class="nt"&gt;-Force&lt;/span&gt;

&lt;span class="c"&gt;# Homebrew&lt;/span&gt;
brew uninstall &lt;span class="nt"&gt;--cask&lt;/span&gt; claude-code     &lt;span class="c"&gt;# or claude-code@latest&lt;/span&gt;

&lt;span class="c"&gt;# WinGet&lt;/span&gt;
winget uninstall Anthropic.ClaudeCode

&lt;span class="c"&gt;# apt&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt remove claude-code
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /etc/apt/sources.list.d/claude-code.list /etc/apt/keyrings/claude-code.asc

&lt;span class="c"&gt;# dnf&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf remove claude-code
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /etc/yum.repos.d/claude-code.repo

&lt;span class="c"&gt;# apk&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apk del claude-code

&lt;span class="c"&gt;# npm&lt;/span&gt;
npm uninstall &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Config cleanup&lt;/strong&gt; (do this &lt;em&gt;after&lt;/em&gt; removing IDE plugins, see next paragraph):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.claude
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.claude.json
&lt;span class="c"&gt;# plus any project-local .claude and .mcp.json files&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;IDE integration gotcha&lt;/strong&gt; (this is the one that catches people): the VS Code extension, the JetBrains plugin, and the desktop app all write to &lt;code&gt;~/.claude/&lt;/code&gt;. If you remove the CLI and then later open VS Code with the extension still installed, the extension will recreate &lt;code&gt;~/.claude/&lt;/code&gt; and reinstall the CLI behind the scenes (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). To actually be Claude-free, uninstall in this order: IDE plugins first, desktop app second, CLI binary third, config last.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The hour I lost:&lt;/strong&gt; I uninstalled the CLI on a work laptop before handing it back to IT, ran &lt;code&gt;rm -rf ~/.claude&lt;/code&gt;, and felt good about it. Opened VS Code one last time to grab a setting I forgot, and the Claude extension cheerfully reinstalled everything: binary, config, the lot. The right order is plugin uninstalls first. Otherwise you're playing whack-a-mole with auto-reinstall.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Citation capsule: Anthropic documents three uninstall layers for Claude Code: the binary (per install method), the config files at &lt;code&gt;~/.claude/&lt;/code&gt; and &lt;code&gt;~/.claude.json&lt;/code&gt;, and the IDE integrations (VS Code, JetBrains, Desktop) (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). Removing only the CLI leaves the IDE plugins in place, and they will auto-reinstall Claude Code on next IDE launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Node.js version does Claude Code require?
&lt;/h3&gt;

&lt;p&gt;Only the npm install path needs Node.js 18 or later. The native installer, Homebrew cask, WinGet, and Linux package managers ship a standalone binary that does not call Node at runtime; they install platform-specific binaries directly (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). If you don't use npm, you can have no Node installed and Claude Code works fine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I install Claude Code on multiple machines with the same account?
&lt;/h3&gt;

&lt;p&gt;Yes. A single Claude.com Pro, Max, Team, or Enterprise account works across unlimited machines, with usage pooled against the same rate limit. Max $200 covers roughly 240-480 Sonnet hours plus 24-40 Opus hours per week (&lt;a href="https://techcrunch.com/2025/07/28/anthropic-unveils-new-rate-limits-to-curb-claude-code-power-users/" rel="noopener noreferrer"&gt;TechCrunch&lt;/a&gt;, 2025). Install on each machine, run &lt;code&gt;claude /login&lt;/code&gt; once per machine, and you're done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the npm install of Claude Code deprecated?
&lt;/h3&gt;

&lt;p&gt;The official setup docs call it the "advanced" install path, and the GitHub README is sharper, labeling the npm route as deprecated for typical users (&lt;a href="https://github.com/anthropics/claude-code" rel="noopener noreferrer"&gt;anthropics/claude-code&lt;/a&gt;, 2026). It still works and still receives updates. Most new installs in 2026 should default to the native installer; npm remains the right call for monorepo and Dockerfile use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Claude Code work on Windows without WSL?
&lt;/h3&gt;

&lt;p&gt;Yes. The PowerShell installer and the WinGet path both produce a native Windows binary that runs without WSL (&lt;a href="https://code.claude.com/docs/en/setup" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). WSL is useful if you want a Unix-like shell environment, but it isn't required. Set &lt;code&gt;CLAUDE_CODE_GIT_BASH_PATH&lt;/code&gt; if you have Git for Windows installed and Claude misbehaves on shell-heavy commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I check what version of Claude Code I'm running?
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;claude --version&lt;/code&gt; for the version number, then &lt;code&gt;claude doctor&lt;/code&gt; for a full health report covering PATH, auth state, MCP servers, shell completion, and updater status. Anthropic's GitHub repo passed 124,000 stars by May 2026 (&lt;a href="https://github.com/anthropics/claude-code" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, 2026), and the &lt;code&gt;doctor&lt;/code&gt; command is the single most-mentioned setup diagnostic across those issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Install After Claude Code Is Running
&lt;/h2&gt;

&lt;p&gt;Claude Code on a fresh machine is the base layer. The interesting workflow happens once you start layering on subagents, hooks, MCP servers, and custom slash commands, the things that turn a CLI into a development environment that fits your specific brain. Pick one of the four guides below depending on what you want to build first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start here if you want to parallelize complex tasks&lt;/li&gt;
&lt;li&gt;start here if you want to enforce policies and automate decisions&lt;/li&gt;
&lt;li&gt;start here if you're deciding between Skills and MCP for tooling&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maketocreate.com/claude-code-errors-every-code-cause-and-fix-2026-guide/" rel="noopener noreferrer"&gt;keep this open in another tab; you'll need it&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something in this guide broke for you in a way I didn't anticipate, that's the bit I want to hear about. Tooling docs get better when readers tell writers what they actually hit. Until then, may your installs be reproducible and your &lt;code&gt;claude doctor&lt;/code&gt; reports be empty.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>claudecodeinstallationguide</category>
      <category>npminstallclaudecode</category>
      <category>claudecodecliinstall</category>
    </item>
    <item>
      <title>CLAUDE.md Best Practices: The Complete 2026 Guide</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Fri, 29 May 2026 15:16:09 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claudemd-best-practices-the-complete-2026-guide-435j</link>
      <guid>https://dev.to/nishilbhave/claudemd-best-practices-the-complete-2026-guide-435j</guid>
      <description>&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%2Fwwbs0bumvvc5gvb7orvv.jpg" 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%2Fwwbs0bumvvc5gvb7orvv.jpg" alt="Dark-mode hero showing CLAUDE.md project-memory config rules flowing into the three-file system: CLAUDE.md, subagents, and skills" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CLAUDE.md Best Practices: What Actually Moves the Needle
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;CLAUDE.md&lt;/code&gt; file is plain markdown that Claude Code reads at the start of every session, and it's the single biggest lever you have over output quality. Get it right and Claude stops guessing your conventions. Get it wrong and you bloat the context window before you've typed a word. The best practice that matters most: keep it short, specific, and universally true for the project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;
CLAUDE.md is project memory loaded into every Claude Code session. The best CLAUDE.md files are &lt;strong&gt;under ~200 lines&lt;/strong&gt;, contain only &lt;strong&gt;universally-applicable&lt;/strong&gt; rules (commands, architecture, conventions), point to detailed docs with file references instead of pasting them, and never duplicate what a linter already enforces. Bloated files trigger context rot. Chroma's 2025 study found every one of 18 frontier models degrades as input grows, sometimes from 95% to 60% accuracy (&lt;a href="https://www.trychroma.com/research/context-rot" rel="noopener noreferrer"&gt;Chroma&lt;/a&gt;, 2025). Treat CLAUDE.md like code: commit it, review it, and prune it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've been editing CLAUDE.md files daily for over a year, across decade-old Laravel codebases (the Sivon API among them) and the Next.js blog publisher that runs maketocreate.com. This is the deep-dive the rest of my &lt;a href="https://maketocreate.com/the-complete-claude-code-workflow-how-i-ship-10x-faster/" rel="noopener noreferrer"&gt;real-world Claude Code workflow that CLAUDE.md plugs into&lt;/a&gt; keeps pointing back to. If CLAUDE.md is one of seven moving parts there, here it gets the whole article.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLAUDE.md loads on &lt;strong&gt;every&lt;/strong&gt; session, so every line spends context budget, and Anthropic's own guidance is to keep it concise (&lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;Claude Code docs&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;Frontier models reliably follow only ~&lt;strong&gt;150–200 instructions&lt;/strong&gt;; Claude Code's system prompt already uses ~50 (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025).&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;file:line references&lt;/strong&gt; and pointers to &lt;code&gt;agent_docs/&lt;/code&gt;, never pasted code blocks. Progressive disclosure keeps the always-loaded file small.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLAUDE.md ≠ AGENTS.md ≠ &lt;code&gt;.claude/agents/*.md&lt;/code&gt;.&lt;/strong&gt; They're three distinct surfaces; mixing them up is the most common configuration mistake I see.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is CLAUDE.md and Where Does It Live?
&lt;/h2&gt;

&lt;p&gt;CLAUDE.md is a markdown file Claude Code automatically loads into context at the start of every conversation, giving the model persistent, project-specific memory it can't infer from code alone (&lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;Claude Code docs&lt;/a&gt;, 2026). Think of it as the briefing you'd give a senior contractor on day one, except Claude reads it fresh, every single session, forever.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;claude md file&lt;/code&gt; lives in a small hierarchy, and the layering is the part most people miss. There are three locations Claude Code checks, in increasing scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project memory&lt;/strong&gt; — &lt;code&gt;./CLAUDE.md&lt;/code&gt; at the repo root. Committed to git, shared with the team. This is the one you'll spend 90% of your time on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local/project-private&lt;/strong&gt; — &lt;code&gt;./CLAUDE.local.md&lt;/code&gt; (gitignored) for personal overrides you don't want to commit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User memory&lt;/strong&gt; — &lt;code&gt;~/.claude/CLAUDE.md&lt;/code&gt;, applied across every project on your machine. Good for personal preferences ("always explain before refactoring") that aren't repo-specific.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude Code also walks &lt;strong&gt;up&lt;/strong&gt; the directory tree, so a &lt;code&gt;CLAUDE.md&lt;/code&gt; in a subdirectory layers on top of the root one, which is useful in monorepos. The filename is case-sensitive and exact: it's &lt;code&gt;CLAUDE.md&lt;/code&gt;, not &lt;code&gt;claude.md&lt;/code&gt; or &lt;code&gt;claude .md&lt;/code&gt;. If you've just installed the CLI and don't have one yet, see my guide to installing Claude Code if you haven't yet, then run &lt;code&gt;/init&lt;/code&gt; inside any repo and it scaffolds a starter file from your project structure.&lt;/p&gt;

&lt;p&gt;CLAUDE.md is loaded into context on every Claude Code session as persistent project memory, layered across three scopes (project &lt;code&gt;./CLAUDE.md&lt;/code&gt;, local &lt;code&gt;./CLAUDE.local.md&lt;/code&gt;, and user &lt;code&gt;~/.claude/CLAUDE.md&lt;/code&gt;), with narrower scopes overriding broader ones, exactly as documented in Anthropic's Claude Code best-practices guide (&lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026).&lt;/p&gt;




&lt;h2&gt;
  
  
  Why CLAUDE.md Is the Most Underrated Claude Code Feature
&lt;/h2&gt;

&lt;p&gt;Most developers install Claude Code, skip CLAUDE.md entirely, and then wonder why it keeps using the wrong test runner. That's a mistake: 84% of developers now use or plan to use AI coding tools, yet only 33% trust their accuracy versus 46% who actively distrust it (&lt;a href="https://survey.stackoverflow.co/2025/ai/" rel="noopener noreferrer"&gt;Stack Overflow Developer Survey&lt;/a&gt;, 2025). A precise CLAUDE.md is the cheapest way to close that trust gap on your own codebase.&lt;/p&gt;

&lt;p&gt;Here's the mechanism. Claude Code is the most-loved AI coding tool of 2026, with a 46% "most loved" rating across 15,000 developers surveyed (&lt;a href="https://www.uncoveralpha.com/p/anthropics-claude-code-is-having" rel="noopener noreferrer"&gt;Pragmatic Engineer via UncoverAlpha&lt;/a&gt;, 2026), and it crossed a $2.5B revenue run-rate by February 2026 (&lt;a href="https://www.uncoveralpha.com/p/anthropics-claude-code-is-having" rel="noopener noreferrer"&gt;UncoverAlpha&lt;/a&gt;, 2026). But the model still doesn't know that your project deploys with &lt;code&gt;make ship&lt;/code&gt;, that &lt;code&gt;legacy/&lt;/code&gt; is off-limits, or that you use Pest, not PHPUnit. Without CLAUDE.md it relearns (or mis-guesses) those facts every session.&lt;/p&gt;

&lt;p&gt;The day it clicked for me was on the Sivon Laravel API. I'd been re-typing "use the repository pattern, not Eloquent in controllers" into every session for a week. I moved one line into CLAUDE.md and the correction stopped being necessary. That's the underrated part: CLAUDE.md doesn't make Claude smarter, it makes it &lt;em&gt;stop forgetting&lt;/em&gt;. Every rule you write once is a correction you never type again.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My finding:&lt;/strong&gt; Across roughly 40 repos I've configured, the single highest-ROI line in any CLAUDE.md is the exact test command. Claude defaults to the ecosystem-common runner (&lt;code&gt;npm test&lt;/code&gt;, &lt;code&gt;phpunit&lt;/code&gt;) and gets it wrong constantly. One line, &lt;code&gt;Run tests with: npm run test:unit&lt;/code&gt;, eliminates an entire class of wasted turns.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How to Write a CLAUDE.md: The Step-by-Step Structure
&lt;/h2&gt;

&lt;p&gt;Knowing how to write a CLAUDE.md comes down to one rule: include only what's true across &lt;em&gt;every&lt;/em&gt; session, and structure it around three questions: what, why, and how (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025). Frontier models reliably follow only about 150–200 instructions, and Claude Code's system prompt already consumes roughly 50 of those (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025). Your budget is smaller than you think.&lt;/p&gt;

&lt;p&gt;So what actually goes in the file? Run &lt;code&gt;/init&lt;/code&gt; first to scaffold, then rewrite it by hand. A good structure, top to bottom:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One-line project description:&lt;/strong&gt; what this repo &lt;em&gt;is&lt;/em&gt;, in a sentence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech stack:&lt;/strong&gt; framework, language, versions, the database. Facts Claude can't reliably guess.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commands:&lt;/strong&gt; build, test, lint, run, deploy. The exact invocations, not the conventional ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture:&lt;/strong&gt; the 3–5 directories that matter and what each does. Point to files, don't describe them in prose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conventions:&lt;/strong&gt; patterns the team enforces that a linter can't (repository pattern, error-handling style, naming).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boundaries:&lt;/strong&gt; what's off-limits (&lt;code&gt;legacy/&lt;/code&gt;, generated files, vendored code).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pointers:&lt;/strong&gt; links to &lt;code&gt;agent_docs/&lt;/code&gt; or deeper specs for anything detailed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last one is the technique that keeps the file small: &lt;strong&gt;progressive disclosure&lt;/strong&gt;. Store detailed guidance in separate files and reference them with file paths, so Claude pulls them only when relevant (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025). A CLAUDE.md should be a map, not the whole territory.&lt;/p&gt;

&lt;p&gt;The strongest CLAUDE.md files answer three questions (&lt;em&gt;what&lt;/em&gt; the project is, &lt;em&gt;why&lt;/em&gt; its components exist, and &lt;em&gt;how&lt;/em&gt; to build, test, and verify it) while pushing detailed guidance into referenced &lt;code&gt;agent_docs/&lt;/code&gt; files. This progressive-disclosure pattern keeps the always-loaded file under the ~150-instruction ceiling frontier models reliably follow (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025).&lt;/p&gt;




&lt;h2&gt;
  
  
  Real CLAUDE.md Examples: Laravel API, Next.js App, Python Pipeline
&lt;/h2&gt;

&lt;p&gt;The fastest way to internalize CLAUDE.md best practices is to read good examples. Below are three condensed, real-shaped files from the stacks I work in. Notice what's &lt;em&gt;absent&lt;/em&gt;: no code style rules (the linter owns those), no pasted code, no task-specific instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel API (&lt;code&gt;CLAUDE.md&lt;/code&gt;):&lt;/strong&gt;&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="gh"&gt;# Sivon API&lt;/span&gt;

Laravel 11 REST API for booking management. PHP 8.3, MySQL 8, Pest for tests.

&lt;span class="gu"&gt;## Commands&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Test: &lt;span class="sb"&gt;`php artisan test`&lt;/span&gt; (Pest, NOT PHPUnit directly)
&lt;span class="p"&gt;-&lt;/span&gt; Lint: &lt;span class="sb"&gt;`./vendor/bin/pint`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Migrate fresh: &lt;span class="sb"&gt;`php artisan migrate:fresh --seed`&lt;/span&gt;

&lt;span class="gu"&gt;## Architecture&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Controllers stay thin — business logic lives in &lt;span class="sb"&gt;`app/Services/`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; DB access through &lt;span class="sb"&gt;`app/Repositories/`&lt;/span&gt; only. Never use Eloquent in controllers.
&lt;span class="p"&gt;-&lt;/span&gt; API resources in &lt;span class="sb"&gt;`app/Http/Resources/`&lt;/span&gt; shape every JSON response.

&lt;span class="gu"&gt;## Conventions&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Form Requests for all validation. No inline &lt;span class="sb"&gt;`$request-&amp;gt;validate()`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; New endpoints: add a route, a Form Request, a Service method, a Pest feature test.

&lt;span class="gu"&gt;## Off-limits&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`app/Legacy/`&lt;/span&gt; — frozen, do not modify. See agent_docs/legacy-migration.md.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Next.js app (&lt;code&gt;CLAUDE.md&lt;/code&gt;):&lt;/strong&gt;&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="gh"&gt;# maketocreate Blog Publisher&lt;/span&gt;

Next.js 16 App Router + React 19 + TypeScript (strict). Tailwind v4. File-based JSON state, no DB.

&lt;span class="gu"&gt;## Commands&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Dev: &lt;span class="sb"&gt;`npm run dev`&lt;/span&gt; | Build: &lt;span class="sb"&gt;`npm run build`&lt;/span&gt; | Lint: &lt;span class="sb"&gt;`npm run lint`&lt;/span&gt;

&lt;span class="gu"&gt;## Architecture&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Articles: markdown in &lt;span class="sb"&gt;`articles/&amp;lt;category&amp;gt;/`&lt;/span&gt;. Parser: &lt;span class="sb"&gt;`lib/parser.ts`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; Publishing pipeline: &lt;span class="sb"&gt;`lib/publish-orchestrator.ts`&lt;/span&gt;. Adapters in &lt;span class="sb"&gt;`lib/adapters/`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; State persisted as JSON via &lt;span class="sb"&gt;`lib/store.ts`&lt;/span&gt;. No database.

&lt;span class="gu"&gt;## Conventions&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Tailwind v4 configured via &lt;span class="sb"&gt;`@theme`&lt;/span&gt; in &lt;span class="sb"&gt;`app/globals.css`&lt;/span&gt; — there is NO tailwind.config.ts.
&lt;span class="p"&gt;-&lt;/span&gt; Dark mode is the default-supported path; test both themes.

&lt;span class="gu"&gt;## Off-limits&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`config.json`&lt;/span&gt; is gitignored — never commit API keys.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python data pipeline (&lt;code&gt;CLAUDE.md&lt;/code&gt;):&lt;/strong&gt;&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="gh"&gt;# Ingest Pipeline&lt;/span&gt;

Python 3.13 ETL. uv for deps, Polars (not pandas), Prefect for orchestration.

&lt;span class="gu"&gt;## Commands&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Install: &lt;span class="sb"&gt;`uv sync`&lt;/span&gt; | Test: &lt;span class="sb"&gt;`uv run pytest`&lt;/span&gt; | Run flow: &lt;span class="sb"&gt;`uv run python -m flows.daily`&lt;/span&gt;

&lt;span class="gu"&gt;## Architecture&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Extractors: &lt;span class="sb"&gt;`src/extract/`&lt;/span&gt; | Transforms: &lt;span class="sb"&gt;`src/transform/`&lt;/span&gt; (pure functions, Polars)
&lt;span class="p"&gt;-&lt;/span&gt; Schemas validated with Pydantic v2 in &lt;span class="sb"&gt;`src/schemas/`&lt;/span&gt;.

&lt;span class="gu"&gt;## Conventions&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; All transforms are pure and unit-tested. No I/O inside transform functions.
&lt;span class="p"&gt;-&lt;/span&gt; Use Polars expressions, not pandas. Reject any pandas import in review.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These &lt;code&gt;claude.md examples&lt;/code&gt; share a shape: scannable, command-first, pointer-driven. Each is well under 60 lines. HumanLayer's own production CLAUDE.md is fewer than 60 lines, and that's not an accident (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025).&lt;/p&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%2F4tt8rp329pug6noky4o5.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%2F4tt8rp329pug6noky4o5.png" alt="Bar chart showing how much of Claude Code's context window a CLAUDE.md consumes as it grows in length: 50 lines uses about 1 percent, 200 lines about 4 percent, 500 lines about 11 percent, and 1000 lines about 22 percent, with adherence quality dropping as the file bloats" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Illustrative estimate based on ~13 tokens/line and a 200K context window; Source: HumanLayer instruction-budget analysis, 2025&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  CLAUDE.md vs claude/agents.md: When to Use Which
&lt;/h2&gt;

&lt;p&gt;This is where people get tangled, so let's be precise. "Claude agents.md" can mean two different things, and CLAUDE.md is a third. They aren't interchangeable; each loads at a different time for a different reason. The AGENTS.md open standard launched in 2025 backed by OpenAI, Google, Factory, Sourcegraph, and Cursor, and passed 20,000 adopting repositories by August 2025 (&lt;a href="https://www.harness.io/blog/the-agent-native-repo-why-agents-md-is-the-new-standard" rel="noopener noreferrer"&gt;Harness&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;Here's the distinction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLAUDE.md:&lt;/strong&gt; Claude Code's &lt;em&gt;native&lt;/em&gt; project memory. Loaded into the main session, always.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AGENTS.md:&lt;/strong&gt; the &lt;em&gt;cross-tool&lt;/em&gt; open standard, readable by Codex, Cursor, Copilot, and others. Schema-free markdown, same job as CLAUDE.md but vendor-neutral.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.claude/agents/*.md&lt;/code&gt;:&lt;/strong&gt; &lt;em&gt;subagent&lt;/em&gt; definitions. Separate agents you delegate to, each with its own isolated context window and its own instructions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So which one do you actually write? If your repo only uses Claude Code, write CLAUDE.md and move on. If multiple agents touch the repo, the clean pattern is to keep one canonical file and symlink the other: &lt;code&gt;ln -s CLAUDE.md AGENTS.md&lt;/code&gt; (or the reverse). One source of truth, every tool reads it. In December 2025, AGENTS.md was donated to the Linux Foundation's Agentic AI Foundation alongside Anthropic donating MCP, a signal the two ecosystems are converging, not competing (&lt;a href="https://www.harness.io/blog/the-agent-native-repo-why-agents-md-is-the-new-standard" rel="noopener noreferrer"&gt;Harness&lt;/a&gt;, 2026).&lt;/p&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%2Fpcrsta216ull71hvstzy.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%2Fpcrsta216ull71hvstzy.png" alt="Comparison matrix of four markdown surfaces in Claude Code — CLAUDE.md, AGENTS.md, .claude/agents files, and per-skill SKILL.md — across when each loads, its scope, and what it is for" width="799" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Claude Code documentation and AGENTS.md specification, 2026&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The 12 CLAUDE.md Best Practices I Follow Daily
&lt;/h2&gt;

&lt;p&gt;After more than a year of daily use, these are the Claude Code CLAUDE.md best practices I apply to every repo. They exist because each one fixed a real, repeated failure. The throughline: every line earns its context cost, because context rot is real. Chroma's 2025 benchmark showed all 18 frontier models tested, including Claude Opus 4, lose accuracy as input grows, some dropping from 95% to 60% past a threshold (&lt;a href="https://www.trychroma.com/research/context-rot" rel="noopener noreferrer"&gt;Chroma&lt;/a&gt;, 2025).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep it under ~200 lines.&lt;/strong&gt; Shorter is better. If it scrolls more than a screen or two, you're paying for it every session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lead with commands.&lt;/strong&gt; Test, build, lint, run: the exact invocations. This is the highest-ROI section by a wide margin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never duplicate the linter.&lt;/strong&gt; Don't write style rules a formatter enforces deterministically. LLMs are slow and expensive at jobs a linter does instantly (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use file:line references, not pasted code.&lt;/strong&gt; &lt;code&gt;See lib/parser.ts:42&lt;/code&gt; beats a 30-line snippet that goes stale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only universal truths.&lt;/strong&gt; No task-specific instructions. "How to design the new billing schema" doesn't belong here; it distracts every unrelated session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Point to &lt;code&gt;agent_docs/&lt;/code&gt;.&lt;/strong&gt; Detailed guidance lives in referenced files, loaded on demand. Progressive disclosure keeps the core lean.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State what's off-limits.&lt;/strong&gt; Frozen directories, generated files, vendored code. Boundaries prevent the most damaging mistakes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document domain jargon.&lt;/strong&gt; Map your internal terms to the code so Claude edits the right files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mention your MCP setup.&lt;/strong&gt; If the repo relies on specific servers, note them; see my &lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;MCP server config that CLAUDE.md should mention&lt;/a&gt; for the configs themselves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefer hooks for must-happen actions.&lt;/strong&gt; CLAUDE.md instructions are advisory; hooks are deterministic. If something must run every time, make it a hook, not a sentence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write imperatively.&lt;/strong&gt; "Use Pest" beats "We generally prefer Pest when possible." Ambiguity costs adherence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revise it like code.&lt;/strong&gt; When Claude does something wrong twice, that's a missing line. Add it. Prune what's gone stale.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The defining trait of a strong CLAUDE.md is ruthless economy: under 200 lines, command-first, linter-free, and built on file references rather than pasted code, because Chroma's 2025 study confirmed every frontier model, Claude Opus 4 included, degrades measurably as context fills, making each unnecessary line a tax on every future session (&lt;a href="https://www.trychroma.com/research/context-rot" rel="noopener noreferrer"&gt;Chroma&lt;/a&gt;, 2025).&lt;/p&gt;




&lt;h2&gt;
  
  
  Common CLAUDE.md Mistakes (Before and After)
&lt;/h2&gt;

&lt;p&gt;The most common CLAUDE.md mistake is treating it like documentation instead of working memory: dumping everything in, including the things that hurt. The "lost in the middle" effect means models attend poorly to the center of a long context, with accuracy drops exceeding 30% (&lt;a href="https://www.morphllm.com/context-rot" rel="noopener noreferrer"&gt;Morph&lt;/a&gt;, 2025). A bloated CLAUDE.md doesn't just waste tokens, it buries the rules that matter.&lt;/p&gt;

&lt;p&gt;Three before/after fixes I make constantly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1: Pasting code.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;em&gt;Before:&lt;/em&gt; a 40-line code block showing "how our service layer works."&lt;/li&gt;
&lt;li&gt;✅ &lt;em&gt;After:&lt;/em&gt; &lt;code&gt;Business logic lives in app/Services/. Pattern example: app/Services/BookingService.php&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2: Re-stating style rules.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;em&gt;Before:&lt;/em&gt; "Use 4 spaces, single quotes, trailing commas, max line length 120…"&lt;/li&gt;
&lt;li&gt;✅ &lt;em&gt;After:&lt;/em&gt; delete it. &lt;code&gt;Run ./vendor/bin/pint before committing.&lt;/code&gt; The linter is the source of truth.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3: Task-specific noise.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;em&gt;Before:&lt;/em&gt; "When building the new export feature, use streaming and chunk at 1000 rows…"&lt;/li&gt;
&lt;li&gt;✅ &lt;em&gt;After:&lt;/em&gt; delete it. That belongs in the prompt or a plan doc, not in every session's memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's the counterintuitive part: the worst CLAUDE.md files I've seen aren't the empty ones; they're the &lt;em&gt;thorough&lt;/em&gt; ones. A diligent developer documents everything, the file hits 600 lines, and adherence quietly drops because the important rules are now diluted among the trivia. An empty CLAUDE.md costs you nothing. A bloated one actively makes Claude worse. Less really is more here, and it's measurable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Team CLAUDE.md Workflows: Committing, Code Review, Monorepos
&lt;/h2&gt;

&lt;p&gt;For teams, CLAUDE.md is shared infrastructure: commit it, review changes to it, and treat it as part of the codebase. With 84% of developers now using AI tools, an unmanaged CLAUDE.md means every engineer gets different agent behavior on the same repo (&lt;a href="https://survey.stackoverflow.co/2025/ai/" rel="noopener noreferrer"&gt;Stack Overflow Developer Survey&lt;/a&gt;, 2025). Consistency is the whole point.&lt;/p&gt;

&lt;p&gt;The practices that scale to teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Commit &lt;code&gt;CLAUDE.md&lt;/code&gt;, gitignore &lt;code&gt;CLAUDE.local.md&lt;/code&gt;.&lt;/strong&gt; The shared file is team policy; the local file is personal preference. Keep them separate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review CLAUDE.md changes in PRs.&lt;/strong&gt; A new rule changes how Claude behaves for everyone. That deserves the same scrutiny as a code change, and it catches "rules" that are really one person's opinion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monorepos: layer, don't centralize.&lt;/strong&gt; Put a lean root &lt;code&gt;CLAUDE.md&lt;/code&gt; with org-wide conventions, then a focused &lt;code&gt;CLAUDE.md&lt;/code&gt; inside each package. Claude Code reads up the tree and merges them, so each team owns its own context without one 1,000-line megafile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pair it with skills.&lt;/strong&gt; Reusable workflows belong in skills, not CLAUDE.md, so see my guide to &lt;a href="https://maketocreate.com/claude-skills-marketplace-skills-sh-shipping-your-own-skill/" rel="noopener noreferrer"&gt;using skills, which reference CLAUDE.md project context&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Treated as shared infrastructure, CLAUDE.md should be committed to git, reviewed in pull requests, and layered per-package in monorepos so Claude Code merges a lean root file with focused subdirectory files, giving every engineer identical agent behavior on the same codebase, a real concern given 84% of developers now use AI coding tools (&lt;a href="https://survey.stackoverflow.co/2025/ai/" rel="noopener noreferrer"&gt;Stack Overflow Developer Survey&lt;/a&gt;, 2025).&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three-File CLAUDE.md System: CLAUDE.md / Subagents / Per-Skill Markdown
&lt;/h2&gt;

&lt;p&gt;The most effective Claude Code setups don't cram everything into CLAUDE.md; they split context across three files that load at three different times, a pattern built directly on progressive disclosure (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025). This is the architecture that finally fixed my bloat problem: stop asking "what should I add to CLAUDE.md" and start asking "&lt;em&gt;when&lt;/em&gt; should this load."&lt;/p&gt;

&lt;p&gt;The three tiers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;, always loaded.&lt;/strong&gt; The lean briefing: what, why, how, and boundaries. Stays under ~200 lines because it pays context tax on every single turn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.claude/agents/*.md&lt;/code&gt;, loaded on delegation.&lt;/strong&gt; Subagent definitions. When you delegate a focused job (a code review, a research sweep), that subagent gets its own context window and its own instructions, so the detail never touches your main session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;SKILL.md&lt;/code&gt; (per skill), loaded on demand.&lt;/strong&gt; A skill's full instructions load only when the skill is invoked. This is where multi-step workflows and their detailed steps belong.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The mental model that unlocked this for me: CLAUDE.md is RAM, subagents and skills are disk. You don't load your entire hard drive into memory on boot; you page in what you need. Treat your always-loaded CLAUDE.md as the precious, expensive tier it actually is, and push everything situational down into files that load lazily. The result is a smaller core file &lt;em&gt;and&lt;/em&gt; deeper capability, not a trade-off between them. More on the token economics of getting this wrong in my &lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;breakdown of the cost implications of a bloated CLAUDE.md&lt;/a&gt;.&lt;/p&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%2Fqidfcat2xxues7vz5b1s.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%2Fqidfcat2xxues7vz5b1s.png" alt="Diagram of the three-tier Claude Code context system: CLAUDE.md always loaded as the lean core, .claude/agents files loaded only on delegation, and per-skill SKILL.md files loaded on demand — illustrating progressive disclosure from always-on to lazy-loaded" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Claude Code documentation; progressive-disclosure pattern per HumanLayer, 2025&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is a CLAUDE.md file?
&lt;/h3&gt;

&lt;p&gt;A CLAUDE.md file is plain markdown that Claude Code automatically loads at the start of every session, giving the model persistent project memory: commands, architecture, and conventions it can't infer from code. Anthropic's own guidance is to keep it concise (&lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;Claude Code docs&lt;/a&gt;, 2026), since every line consumes context budget on each turn.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long should a CLAUDE.md be?
&lt;/h3&gt;

&lt;p&gt;Aim for under ~200 lines; shorter is better. Frontier models reliably follow only about 150–200 instructions, and Claude Code's system prompt already uses roughly 50 of them (&lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;, 2025). Beyond a couple hundred lines you risk context rot, where the rules that matter get diluted and adherence quietly drops.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is CLAUDE.md the same as AGENTS.md?
&lt;/h3&gt;

&lt;p&gt;No, but they do the same job. CLAUDE.md is Claude Code's native memory file; AGENTS.md is the cross-tool open standard backed by OpenAI, Google, Cursor, and others, which passed 20,000 adopting repos by August 2025 (&lt;a href="https://www.harness.io/blog/the-agent-native-repo-why-agents-md-is-the-new-standard" rel="noopener noreferrer"&gt;Harness&lt;/a&gt;, 2026). If multiple agents touch your repo, symlink one to the other so there's a single source of truth.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I create a CLAUDE.md file?
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;/init&lt;/code&gt; inside any repo and Claude Code scaffolds a starter file from your project structure, then rewrite it by hand. Structure it around three questions (what the project is, why its parts exist, and how to build and test it) per &lt;a href="https://www.humanlayer.dev/blog/writing-a-good-claude-md" rel="noopener noreferrer"&gt;HumanLayer&lt;/a&gt;'s guidance (2025), then point to &lt;code&gt;agent_docs/&lt;/code&gt; for anything detailed instead of pasting it inline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a bloated CLAUDE.md hurt performance?
&lt;/h3&gt;

&lt;p&gt;Yes, measurably. Chroma's 2025 study found all 18 frontier models tested, including Claude Opus 4, degrade as context grows, some dropping from 95% to 60% accuracy past a threshold (&lt;a href="https://www.trychroma.com/research/context-rot" rel="noopener noreferrer"&gt;Chroma&lt;/a&gt;, 2025). A long CLAUDE.md spends context budget every turn and buries critical rules through the "lost in the middle" effect, a 30%+ accuracy drop (&lt;a href="https://www.morphllm.com/context-rot" rel="noopener noreferrer"&gt;Morph&lt;/a&gt;, 2025).&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I commit CLAUDE.md to git?
&lt;/h3&gt;

&lt;p&gt;Yes. Commit &lt;code&gt;CLAUDE.md&lt;/code&gt; so the whole team gets consistent agent behavior, and gitignore &lt;code&gt;CLAUDE.local.md&lt;/code&gt; for personal overrides. Review changes to it in pull requests, since a new rule changes how Claude behaves for every engineer, which matters when 84% of developers now use AI coding tools (&lt;a href="https://survey.stackoverflow.co/2025/ai/" rel="noopener noreferrer"&gt;Stack Overflow Developer Survey&lt;/a&gt;, 2025).&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;CLAUDE.md is the cheapest, highest-leverage configuration in Claude Code, and almost nobody treats it that way. The whole discipline fits in a sentence: write only what's true every session, keep it under ~200 lines, point to detail instead of pasting it, and let linters and hooks do the deterministic work.&lt;/p&gt;

&lt;p&gt;If you do nothing else after reading this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;/init&lt;/code&gt; in your main repo tonight, then cut the result in half.&lt;/li&gt;
&lt;li&gt;Move your exact test and build commands to the top. That's the single highest-ROI section.&lt;/li&gt;
&lt;li&gt;Delete every style rule your linter already enforces.&lt;/li&gt;
&lt;li&gt;Push detail down into &lt;code&gt;agent_docs/&lt;/code&gt;, subagents, and skills so the always-loaded file stays lean.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The teams getting real value from Claude Code aren't the ones with the longest CLAUDE.md. They're the ones who treat it like working memory: precious, expensive, and ruthlessly pruned. Open yours, and ask of every line: does Claude need this on &lt;em&gt;every&lt;/em&gt; session? If not, it doesn't belong there.&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/graph"&gt;@graph&lt;/a&gt;": [&lt;br&gt;
    {&lt;br&gt;
      "@type": "BlogPosting",&lt;br&gt;
      "headline": "CLAUDE.md Best Practices: The Complete 2026 Guide",&lt;br&gt;
      "description": "CLAUDE.md best practices that cut wasted tokens and boost Claude Code accuracy: real examples, the 12 rules I follow daily, and how to beat context rot.",&lt;br&gt;
      "datePublished": "2026-06-10",&lt;br&gt;
      "dateModified": "2026-06-10",&lt;br&gt;
      "author": {&lt;br&gt;
        "@type": "Person",&lt;br&gt;
        "name": "Nishil Bhave"&lt;br&gt;
      },&lt;br&gt;
      "image": "&lt;a href="https://maketocreate.com/images/generated/claude-md-best-practices-complete-guide-hero-v1-scattered.png" rel="noopener noreferrer"&gt;https://maketocreate.com/images/generated/claude-md-best-practices-complete-guide-hero-v1-scattered.png&lt;/a&gt;",&lt;br&gt;
      "url": "&lt;a href="https://maketocreate.com/claude-md-best-practices-complete-guide/" rel="noopener noreferrer"&gt;https://maketocreate.com/claude-md-best-practices-complete-guide/&lt;/a&gt;",&lt;br&gt;
      "keywords": ["claude.md best practices", "claude md file", "how to write claude.md", "claude.md examples", "claude agents.md", "claude code claude.md best practices"]&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "@type": "FAQPage",&lt;br&gt;
      "mainEntity": [&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "What is a CLAUDE.md file?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "A CLAUDE.md file is plain markdown that Claude Code automatically loads at the start of every session, giving the model persistent project memory: commands, architecture, and conventions it can't infer from code. Anthropic's own guidance is to keep it concise, since every line consumes context budget on each turn."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "How long should a CLAUDE.md be?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Aim for under roughly 200 lines; shorter is better. Frontier models reliably follow only about 150 to 200 instructions, and Claude Code's system prompt already uses roughly 50 of them. Beyond a couple hundred lines you risk context rot, where the rules that matter get diluted and adherence quietly drops."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Is CLAUDE.md the same as AGENTS.md?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "No, but they do the same job. CLAUDE.md is Claude Code's native memory file; AGENTS.md is the cross-tool open standard backed by OpenAI, Google, Cursor, and others, which passed 20,000 adopting repos by August 2025. If multiple agents touch your repo, symlink one to the other so there's a single source of truth."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "How do I create a CLAUDE.md file?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Run /init inside any repo and Claude Code scaffolds a starter file from your project structure, then rewrite it by hand. Structure it around three questions (what the project is, why its parts exist, and how to build and test it), then point to agent_docs/ for anything detailed instead of pasting it inline."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Does a bloated CLAUDE.md hurt performance?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes, measurably. Chroma's 2025 study found all 18 frontier models tested, including Claude Opus 4, degrade as context grows, some dropping from 95% to 60% accuracy past a threshold. A long CLAUDE.md spends context budget every turn and buries critical rules through the lost-in-the-middle effect, a 30%+ accuracy drop."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Should I commit CLAUDE.md to git?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes. Commit CLAUDE.md so the whole team gets consistent agent behavior, and gitignore CLAUDE.local.md for personal overrides. Review changes to it in pull requests, since a new rule changes how Claude behaves for every engineer, which matters when 84% of developers now use AI coding tools."&lt;br&gt;
          }&lt;br&gt;
        }&lt;br&gt;
      ]&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>claudemd</category>
      <category>aicoding</category>
      <category>configuration</category>
    </item>
    <item>
      <title>SEO vs GEO vs AEO: Why They Need Different Strategies</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Thu, 28 May 2026 19:14:37 +0000</pubDate>
      <link>https://dev.to/nishilbhave/seo-vs-geo-vs-aeo-why-they-need-different-strategies-g66</link>
      <guid>https://dev.to/nishilbhave/seo-vs-geo-vs-aeo-why-they-need-different-strategies-g66</guid>
      <description>&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%2F3ga08ui158l684kg03xu.jpg" 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%2F3ga08ui158l684kg03xu.jpg" alt="Three-column comparison of SEO, GEO, and AEO showing the 60/30/10 effort split and how one post earned 86 AI citations but only 5 Google clicks" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  SEO vs GEO vs AEO in 2026: Why They Need Different Strategies
&lt;/h1&gt;

&lt;p&gt;One maketocreate.com post earned 86 AI citations in three months and only 5 Google clicks in the same window. Same URL. Same article. Same author. That is the SEO vs GEO problem in 2026, and it proves that AI citations, answer boxes, and Google rankings don't reward the same content shape.&lt;/p&gt;

&lt;p&gt;I pulled this from Bing Webmaster Tools AI Performance and Google Search Console for 32 published posts, covering March through May 2026. The site earned 266 AI citations in three months, but those citations didn't map neatly to Google clicks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/which-international-payment-gateway-should-developers-choose-in-2026/" rel="noopener noreferrer"&gt;cross-border payment gateway comparison that earned 86 AI citations&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One post earned 86 AI citations but only 5 Google clicks, based on maketocreate.com first-party data from March-May 2026.&lt;/li&gt;
&lt;li&gt;SEO, GEO, and AEO share a 70% overlap zone, but the remaining 30% changes what you write, refresh, and measure.&lt;/li&gt;
&lt;li&gt;Use 60% of effort on Google SEO, 30% on AI citation maintenance, and 10% on cleanup until your data says otherwise.&lt;/li&gt;
&lt;li&gt;Don't merge Google and AI metrics into one score. They answer different questions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The 86 vs 5 Problem
&lt;/h2&gt;

&lt;p&gt;Bing Webmaster Tools recorded 86 AI citations for my international payment gateway guide, while Google Search Console showed 5 clicks and 1,300 impressions for the same URL in March-May 2026. The answer is simple: AI systems cited the page as a useful source, while Google still treated it as a low-ranking organic result.&lt;/p&gt;

&lt;p&gt;That single gap changed how I think about SEO vs GEO. Before seeing the data, I assumed AI search would mostly mirror Google. Strong Google pages would get cited. Weak Google pages would disappear. The first-party data said otherwise.&lt;/p&gt;

&lt;p&gt;The payment gateway article ranked between positions 50 and 80 for many Google queries. That is usually dead traffic. But Bing AI surfaced it for grounding queries like "leading APIs for cross-border payments 2026," where one query family produced 16 citations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; From March-May 2026, maketocreate.com earned 266 AI citations across 32 posts. The top post, an international payment gateway comparison, earned 86 AI citations but only 5 Google clicks, according to Bing Webmaster Tools AI Performance and Google Search Console.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Why did that happen? The post had traits AI systems like: a dated comparison, vendor categories, concrete selection criteria, and answer-shaped sections. Google still cared about domain strength, backlinks, historical authority, and SERP competition. Both systems saw the same page. They valued different signals.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Do SEO, GEO, and AEO Actually Mean?
&lt;/h2&gt;

&lt;p&gt;The 32-post dataset produced 266 AI citations in three months, which is enough to separate the terms without turning this into a glossary. SEO earns rankings and clicks from search engines. GEO earns citations inside generative answers. AEO earns placement in direct answer surfaces where the user may never click.&lt;/p&gt;

&lt;p&gt;SEO is the slow compounding channel: crawlability, topical authority, intent match, links, and click-worthy snippets. GEO asks whether an AI system can understand, trust, extract, and cite your passage. AEO sits at the answer layer: AI Overviews, featured snippets, voice assistants, and chatbot-style search.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/javascript-vs-typescript-which-should-you-actually-use-in-2026/" rel="noopener noreferrer"&gt;JavaScript vs TypeScript 2026 comparison&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; SEO optimizes for ranked results and clicks. GEO optimizes for citations inside generated answers. AEO optimizes for direct answer extraction. In maketocreate.com's March-May 2026 data, these surfaces diverged enough that one URL produced 86 AI citations and only 5 Google clicks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The overlap is real, but the goals aren't identical. Treat GEO as "SEO with AI sprinkled on top" and you'll miss pages that AI systems cite before Google rewards them.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do SEO, GEO, and AEO Differ?
&lt;/h2&gt;

&lt;p&gt;Ahrefs analyzed 300,000 keywords and found that AI Overviews correlated with a 34.5% lower click-through rate for top-ranking pages (&lt;a href="https://ahrefs.com/blog/ai-overviews-reduce-clicks/" rel="noopener noreferrer"&gt;Ahrefs&lt;/a&gt;, 2025). That matters because the SEO vs GEO split isn't only about visibility. It's about whether visibility turns into traffic, citations, or answers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Google SEO&lt;/th&gt;
&lt;th&gt;AI Citations (ChatGPT/Copilot/Perplexity)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What it rewards&lt;/td&gt;
&lt;td&gt;Topical authority, intent match, backlinks, helpful content, page quality&lt;/td&gt;
&lt;td&gt;Clear extractable answers, named entities, fresh data, comparison structure, quotable claims&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authority signal&lt;/td&gt;
&lt;td&gt;Links, brand, domain history, author signals, topical clusters&lt;/td&gt;
&lt;td&gt;Source clarity, factual density, citations, recency, repeated entity confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recency&lt;/td&gt;
&lt;td&gt;Helpful, but not always decisive outside news and fast-changing topics&lt;/td&gt;
&lt;td&gt;Often decisive, especially when the query includes current-year intent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Competition&lt;/td&gt;
&lt;td&gt;SERP competitors with indexed pages and link profiles&lt;/td&gt;
&lt;td&gt;Any source the model can retrieve, summarize, or ground against&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Winners&lt;/td&gt;
&lt;td&gt;Durable pillar pages, clusters, tools, original research&lt;/td&gt;
&lt;td&gt;Fresh comparisons, lists, benchmarks, direct definitions, statistics pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Click value&lt;/td&gt;
&lt;td&gt;High when the user clicks, browses, and converts&lt;/td&gt;
&lt;td&gt;Indirect: brand mention, cited authority, assisted discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time to results&lt;/td&gt;
&lt;td&gt;Slow, often 3-12 months on a young domain&lt;/td&gt;
&lt;td&gt;Faster for highly structured fresh posts, but less predictable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Defensibility&lt;/td&gt;
&lt;td&gt;Strong if you build authority and clusters&lt;/td&gt;
&lt;td&gt;Weaker unless you keep pages current and citation-worthy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The mistake is assuming "AI search" is one surface. It isn't. Google AI Overviews may still borrow from Google's index. ChatGPT Search, Perplexity, and Copilot behave more like answer assemblers. AEO cares about answer shape. GEO cares about citation usefulness. SEO cares about rankings and clicks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; Ahrefs found that AI Overviews correlated with a 34.5% lower CTR for top-ranking pages across 300,000 keywords. That makes AI visibility a separate measurement problem, because being present in an answer can reduce clicks while still increasing brand exposure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So when someone asks for aeo vs seo vs geo, the clean answer is this: SEO gets ranked results, GEO gets generated citations, and AEO gets answer extraction.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Does Answer Engine Optimization Differ From Traditional SEO?
&lt;/h2&gt;

&lt;p&gt;Pew Research Center analyzed 68,879 Google searches from 900 U.S. adults and found users clicked a result on 8% of pages with AI summaries versus 15% without them (&lt;a href="https://pewresearch.org/short-reads/2025/07/22/google-users-are-less-likely-to-click-on-links-when-an-ai-summary-appears-in-the-results/" rel="noopener noreferrer"&gt;Pew Research Center&lt;/a&gt;, 2025). Answer engine optimization vs traditional SEO starts with that behavior change.&lt;/p&gt;

&lt;p&gt;Traditional SEO assumes the page is the destination. AEO assumes the answer may be the destination. That changes the writing pattern: the first 40-60 words under a heading should answer the question without needing the rest of the article.&lt;/p&gt;

&lt;p&gt;For answer engine optimization best practices, I now write each major section like a source card. The heading asks the question. The first paragraph answers it. The next paragraph adds evidence. Then I include a comparison, checklist, or table so the answer has structure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; Pew Research Center found that Google users clicked a traditional result on 8% of pages with AI summaries, compared with 15% on pages without summaries. AEO responds to that shift by optimizing for answer extraction, not only for post-click reading.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This doesn't mean AEO replaces SEO. It means answer engine optimization techniques in 2026 need a different unit of work: the reusable passage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real Data: 86 AI Citations, 5 Google Clicks
&lt;/h2&gt;

&lt;p&gt;Across 32 maketocreate.com posts, Bing Webmaster Tools recorded 266 AI citations in March-May 2026, while Google Search Console showed that the highest-cited post got only 5 Google clicks. This is the clearest evidence I have that seo vs aeo vs geo isn't a naming debate. It's a measurement split.&lt;/p&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%2Fa2en6nr8md1vcdkrnoq4.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%2Fa2en6nr8md1vcdkrnoq4.png" alt="Grouped bar chart comparing top maketocreate.com posts by AI citations against Google clicks, showing 86 AI citations and 5 Google clicks for the payment gateway guide" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The top two AI-cited posts produced 133 of the site's 266 citations, or 51% of the total. One was a payment gateway guide. The other was a JavaScript vs TypeScript comparison. Both were current-year, comparison-heavy, and easy to quote.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/should-indie-hackers-choose-supabase-or-firebase-in-2026/" rel="noopener noreferrer"&gt;Supabase vs Firebase comparison&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pattern repeated in smaller numbers. Supabase vs Firebase earned 8 citations. Replit vs Bolt vs Lovable earned 8 citations. Comparison posts gave AI systems clean pairs and categories to cite.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; In maketocreate.com's first-party data, two posts generated 51% of all AI citations. Both used comparison formats and 2026 framing, suggesting that fresh decision-support content can outperform broader essays in generative answer systems.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The 70% Overlap Zone: Tactics That Serve Both
&lt;/h2&gt;

&lt;p&gt;Google says AI Overviews are available in more than 200 countries and territories and more than 40 languages, and drive over 10% more usage for query types that show them in major markets (&lt;a href="https://blog.google/products-and-platforms/products/search/ai-overview-expansion-may-2025-update/" rel="noopener noreferrer"&gt;Google&lt;/a&gt;, 2025). That scale makes overlap valuable. You don't want two completely separate content machines.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tactic&lt;/th&gt;
&lt;th&gt;Helps Google&lt;/th&gt;
&lt;th&gt;Helps AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Direct answer in first 50 words&lt;/td&gt;
&lt;td&gt;Improves intent match and snippet eligibility&lt;/td&gt;
&lt;td&gt;Gives models a clean passage to extract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Comparison tables&lt;/td&gt;
&lt;td&gt;Increases dwell time and SERP usefulness&lt;/td&gt;
&lt;td&gt;Creates structured facts for citation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FAQ schema&lt;/td&gt;
&lt;td&gt;Clarifies question coverage&lt;/td&gt;
&lt;td&gt;Maps questions to concise answers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sourced statistics&lt;/td&gt;
&lt;td&gt;Builds trust and E-E-A-T&lt;/td&gt;
&lt;td&gt;Gives models verifiable claims&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clear H2/H3 hierarchy&lt;/td&gt;
&lt;td&gt;Helps crawlers and readers parse depth&lt;/td&gt;
&lt;td&gt;Helps retrieval systems segment answers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-form depth&lt;/td&gt;
&lt;td&gt;Builds topical coverage&lt;/td&gt;
&lt;td&gt;Supplies enough context for grounding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internal links in cluster&lt;/td&gt;
&lt;td&gt;Passes authority and context&lt;/td&gt;
&lt;td&gt;Reinforces entity relationships&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This 70% overlap zone is where most founders should start. If a tactic helps Google and AI at the same time, do it by default. Direct answers, tables, citations, FAQs, and internal links are good publishing hygiene.&lt;/p&gt;

&lt;p&gt;When I refreshed older posts, I rewrote headings as questions, added answer-first openings, cleaned up tables, and marked stronger internal links. The same edits made the pages easier for humans to scan.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; Google reports that AI Overviews now span 200+ countries and 40+ languages, with over 10% usage growth for query types where they appear in major markets. That makes overlap tactics valuable because one well-structured article can serve search engines, AI answers, and human readers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I don't split SEO vs GEO into two teams of work. I split it into shared work first, then divergence work second.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 30% Divergence Zone: Where You Have to Choose
&lt;/h2&gt;

&lt;p&gt;Pew also found that only 1% of visits to Google pages with AI summaries resulted in clicks on links cited inside the summary (Pew Research Center, 2025, cited above). That is where the 30% divergence starts. A tactic can help AI citations without sending meaningful traffic.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AI-only optimization&lt;/th&gt;
&lt;th&gt;Google-only optimization&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"2026" stuffed into titles&lt;/td&gt;
&lt;td&gt;Backlink outreach&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Listicle format&lt;/td&gt;
&lt;td&gt;Long-tail keyword targeting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bullet-point claims&lt;/td&gt;
&lt;td&gt;E-E-A-T author bio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quote-ready summary boxes&lt;/td&gt;
&lt;td&gt;Page experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freshness updates&lt;/td&gt;
&lt;td&gt;Topic cluster architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distribution to Dev.to+Reddit&lt;/td&gt;
&lt;td&gt;Domain authority building&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The AI-only column moves faster. A current-year comparison post can get cited before it ranks. The Google-only column is slower, but more defensible. Backlinks, clusters, author trust, and domain authority still compound.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; The divergence zone is where SEO and GEO incentives conflict. AI citations reward freshness, concise claims, and easy extraction. Google SEO still rewards authority, clusters, backlinks, and durable page quality. A 2026 content plan needs both, but not in equal amounts.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How Does AI Change the Future of SEO in 2026?
&lt;/h2&gt;

&lt;p&gt;ChatGPT reached 800 million weekly active users in October 2025, according to OpenAI CEO Sam Altman (&lt;a href="https://techcrunch.com/2025/10/06/sam-altman-says-chatgpt-has-hit-800m-weekly-active-users/" rel="noopener noreferrer"&gt;TechCrunch&lt;/a&gt;, 2025). AI and the future of SEO is no longer about whether people use AI. They do. The question is which surfaces create business value.&lt;/p&gt;

&lt;p&gt;Google is not going away. For SaaS founders and technical bloggers, it still owns high-intent discovery, product comparisons, documentation queries, and bottom-funnel searches. But AI surfaces now sit beside it, sometimes before it, and sometimes on top of it.&lt;/p&gt;

&lt;p&gt;At Google I/O 2026 on May 19, Google made Gemini 3.5 Flash the global default model for AI Mode, confirmed AI Mode had crossed one billion monthly users, and rolled ads directly into AI Overview responses (&lt;a href="https://blog.google/products-and-platforms/products/search/search-io-2026/" rel="noopener noreferrer"&gt;Google&lt;/a&gt;, 2026). Classic blue links still appear below AI summaries, but the default search experience for over a billion users is now AI-first. The 86-vs-5 gap I tracked on maketocreate.com is no longer an edge case — it's the shape of the new front page.&lt;/p&gt;

&lt;p&gt;AI search doesn't kill SEO. It splits SEO into jobs: ranked traffic, cited authority, and answer extraction. If your strategy treats them as one job, your dashboard will lie.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/replit-agent-vs-bolt-vs-lovable-2026-honest-tests/" rel="noopener noreferrer"&gt;AI coding tool comparison&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; At Google I/O 2026, Google made Gemini 3.5 Flash the default model powering AI Mode globally, with AI Mode crossing one billion monthly users and ads appearing inside AI Overview responses. Combined with ChatGPT's 800 million weekly active users in 2025, that means SEO strategy in 2026 has to account for ranked results, generative citations, and answer extraction as three separate surfaces.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The practical shift is not "publish more." It is publish with clearer intent. Is the article meant to rank, get cited, answer a definition, or support a cluster?&lt;/p&gt;




&lt;h2&gt;
  
  
  The 60/30/10 Framework: How to Allocate Effort
&lt;/h2&gt;

&lt;p&gt;In my 32-post sample, 51% of AI citations came from two posts, while Google traffic remained thin across the same young site. That concentration is why my default allocation is 60% Google SEO, 30% AI citation maintenance, and 10% cleanup. Google compounds slowly. AI citations spike around winners.&lt;/p&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%2Fpbo53dg6np0npvo196l6.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%2Fpbo53dg6np0npvo196l6.png" alt="Donut chart showing the 60 30 10 effort allocation framework: 60 percent Google SEO, 30 percent AI citation maintenance, and 10 percent cleanup" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The 60% bucket is cluster-based Google SEO: durable pages, internal links, topic hubs, and authority. The 30% bucket is AI citation maintenance: refresh winners, update comparisons, and tighten answer-first sections. The 10% bucket is cleanup: stale claims, thin sections, and off-topic drafts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; The 60/30/10 framework allocates 60% of effort to Google SEO, 30% to AI citation maintenance, and 10% to cleanup. It fits young sites because Google authority compounds slowly while AI citations often concentrate around a small number of fresh comparison winners.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How Do You Measure SEO, GEO, and AEO Success Separately?
&lt;/h2&gt;

&lt;p&gt;Google Search Console showed 5 clicks and 1,300 impressions for the post that Bing AI Performance credited with 86 AI citations. That is why how to measure success of generative engine optimization needs its own scorecard. A single "search performance" dashboard hides the signal.&lt;/p&gt;

&lt;p&gt;For Google SEO, use clicks, impressions, average position, query growth, page CTR, and indexed pages. For GEO, use AI citations, cited pages, cited queries, grounding queries, and citation concentration by URL. For AEO, track snippets, People Also Ask coverage, AI Overview presence, and brand mentions in answer engines.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; One maketocreate.com URL produced 86 AI citations and 5 Google clicks in the same three-month window. That gap makes GEO success impossible to measure with Google Search Console alone. AI citations, cited pages, and grounding queries need separate tracking.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Are the AEO Best Practices for 2026?
&lt;/h2&gt;

&lt;p&gt;Ahrefs found that 99.2% of keywords triggering AI Overviews were informational in its dataset (&lt;a href="https://ahrefs.com/blog/ai-overviews-reduce-clicks/" rel="noopener noreferrer"&gt;Ahrefs&lt;/a&gt;, 2025). That makes AEO best practices for 2026 fairly concrete: answer informational questions with short, sourced, reusable sections before you ask the reader to follow your argument.&lt;/p&gt;

&lt;p&gt;Here are the practices I now use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open every major H2 with a direct answer in 40-60 words.&lt;/li&gt;
&lt;li&gt;Put a named source and date near each important claim.&lt;/li&gt;
&lt;li&gt;Use tables for comparisons, not long prose.&lt;/li&gt;
&lt;li&gt;Add FAQ questions that match real search wording.&lt;/li&gt;
&lt;li&gt;Keep definitions brief unless the query is definitional.&lt;/li&gt;
&lt;li&gt;Refresh current-year posts when the data changes.&lt;/li&gt;
&lt;li&gt;Write summary boxes that can stand alone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not tricks. They're packaging decisions. If an answer engine has to choose between a vague paragraph and a clear sourced answer, the clear sourced answer wins more often.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; Because Ahrefs found that 99.2% of AI Overview-triggering keywords were informational, AEO best practices should prioritize direct answers, sourced statistics, FAQ coverage, and tables. These formats help answer engines extract a clean response without losing attribution.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Which GEO Strategies Actually Work?
&lt;/h2&gt;

&lt;p&gt;Maketocreate.com's "vs" posts repeatedly earned AI citations: JavaScript vs TypeScript got 47, Supabase vs Firebase got 8, and Replit vs Bolt vs Lovable got 8 in March-May 2026. The GEO strategies that actually work are the ones that make citation easier than summarization from scratch.&lt;/p&gt;

&lt;p&gt;Start with comparison content because AI systems answer "which one should I use?" questions constantly. Use current-year framing when the topic changes fast. Write quotable claims like "Top 2 posts produced 51% of all AI citations." Distribute selectively through Dev.to, Reddit, Hacker News, and niche communities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;Claude Code MCP server setup&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; In maketocreate.com's data, comparison posts outperformed as AI citation sources. JavaScript vs TypeScript earned 47 citations, while Supabase vs Firebase and Replit vs Bolt vs Lovable each earned 8. GEO strategy should prioritize fresh comparisons, quotable claims, and structured tradeoff tables.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What I Do Each Week
&lt;/h2&gt;

&lt;p&gt;The site earned 266 AI citations across 32 posts in three months, but 51% came from two URLs. My weekly routine follows that concentration. I don't optimize every page equally. I protect the winners, build the cluster, and clean up anything that weakens topical focus.&lt;/p&gt;

&lt;p&gt;On Monday, I check Google Search Console for rising impressions with low CTR. On Tuesday, I check Bing AI Performance for cited pages and grounding queries. If a page is cited, I update that section with fresher stats and clearer tables.&lt;/p&gt;

&lt;p&gt;On Wednesday, I publish or outline cluster content. For the Claude Code cluster, that means linking new tutorials and comparisons back to stronger pillar pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-errors-every-code-cause-and-fix-2026-guide/" rel="noopener noreferrer"&gt;Claude Code errors guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On Thursday, I refresh one winner. I update dated claims, sharpen answer-first openings, and add one or two citation capsules. On Friday, I clean broken links, thin sections, stale claims, and off-topic drafts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Citation capsule:&lt;/strong&gt; A practical SEO, GEO, and AEO routine separates weekly checks by surface: GSC for clicks and impressions, Bing AI Performance for citations and grounding queries, and editorial cleanup for stale or off-topic content. This prevents one metric from hiding another.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is generative engine optimization?
&lt;/h3&gt;

&lt;p&gt;Generative engine optimization is the practice of making content easy for AI systems to retrieve, trust, summarize, and cite. In my maketocreate.com data, 32 posts earned 266 AI citations in three months, which gave me a separate signal from Google clicks.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is answer engine optimization?
&lt;/h3&gt;

&lt;p&gt;Answer engine optimization is the practice of formatting content so answer surfaces can extract it cleanly. Pew found users clicked traditional links on 8% of Google pages with AI summaries versus 15% without them, so the answer itself now carries more value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is GEO different from SEO?
&lt;/h3&gt;

&lt;p&gt;Yes. GEO and SEO overlap, but they optimize for different outcomes. My payment gateway post earned 86 AI citations and only 5 Google clicks in the same three-month window, which shows citation value can appear before search traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does AI Overviews use SEO?
&lt;/h3&gt;

&lt;p&gt;Partly. Google AI Overviews still draw from web content, and Google says the feature is available in 200+ countries and 40+ languages. But AI Overview visibility doesn't equal organic ranking visibility, and Google Search Console doesn't isolate AI Overview clicks cleanly.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does AI choose what to cite?
&lt;/h3&gt;

&lt;p&gt;AI systems tend to cite content that is clear, current, well-structured, and useful for grounding an answer. In my dataset, the top two posts produced 51% of all AI citations, and both were fresh comparison-style articles with concrete decision criteria.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does ChatGPT replace SEO?
&lt;/h3&gt;

&lt;p&gt;No. ChatGPT reached 800 million weekly active users in 2025, but Google still drives high-intent discovery and conversion traffic. The better framing is not replacement. It is separate surfaces: SEO for ranked clicks, GEO for citations, and AEO for direct answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do This Next
&lt;/h2&gt;

&lt;p&gt;The 86-vs-5 gap in my May 2026 data points to the next action: don't rename your SEO strategy as GEO. Pull two reports: Google Search Console pages by clicks, and Bing Webmaster Tools AI Performance pages by citations. Put them side by side.&lt;/p&gt;

&lt;p&gt;If a page gets Google clicks, strengthen its cluster and conversion path. If a page gets AI citations, refresh its data and make its best passages easier to quote.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;Claude Code pricing analysis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is the operating model: 60% compounding SEO, 30% citation maintenance, 10% cleanup. The split isn't perfect. It's honest about what the data now shows.&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/graph"&gt;@graph&lt;/a&gt;": [&lt;br&gt;
    {&lt;br&gt;
      "@type": "BlogPosting",&lt;br&gt;
      "headline": "SEO vs GEO vs AEO: Why They Need Different Strategies",&lt;br&gt;
      "description": "SEO vs GEO vs AEO: I tracked 32 posts across Google and AI in 2026. One earned 86 AI citations but only 5 Google clicks. Here's the 60/30/10 framework.",&lt;br&gt;
      "datePublished": "2026-05-19",&lt;br&gt;
      "dateModified": "2026-05-29",&lt;br&gt;
      "author": {&lt;br&gt;
        "@type": "Person",&lt;br&gt;
        "name": "Nishil Bhave",&lt;br&gt;
        "url": "&lt;a href="https://maketocreate.com/about/" rel="noopener noreferrer"&gt;https://maketocreate.com/about/&lt;/a&gt;"&lt;br&gt;
      },&lt;br&gt;
      "image": "&lt;a href="https://maketocreate.com/images/seo-vs-geo-vs-aeo-2026-og.png" rel="noopener noreferrer"&gt;https://maketocreate.com/images/seo-vs-geo-vs-aeo-2026-og.png&lt;/a&gt;",&lt;br&gt;
      "url": "&lt;a href="https://maketocreate.com/seo-vs-geo-vs-aeo-2026/" rel="noopener noreferrer"&gt;https://maketocreate.com/seo-vs-geo-vs-aeo-2026/&lt;/a&gt;",&lt;br&gt;
      "mainEntityOfPage": {&lt;br&gt;
        "@type": "WebPage",&lt;br&gt;
        "&lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt;": "&lt;a href="https://maketocreate.com/seo-vs-geo-vs-aeo-2026/" rel="noopener noreferrer"&gt;https://maketocreate.com/seo-vs-geo-vs-aeo-2026/&lt;/a&gt;"&lt;br&gt;
      }&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "@type": "FAQPage",&lt;br&gt;
      "mainEntity": [&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "What is generative engine optimization?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Generative engine optimization is the practice of making content easy for AI systems to retrieve, trust, summarize, and cite. In my maketocreate.com data, 32 posts earned 266 AI citations in three months, which gave me a separate signal from Google clicks."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "What is answer engine optimization?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Answer engine optimization is the practice of formatting content so answer surfaces can extract it cleanly. Pew found users clicked traditional links on 8% of Google pages with AI summaries versus 15% without them, so the answer itself now carries more value."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Is GEO different from SEO?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes. GEO and SEO overlap, but they optimize for different outcomes. My payment gateway post earned 86 AI citations and only 5 Google clicks in the same three-month window, which shows citation value can appear before search traffic."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Does AI Overviews use SEO?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Partly. Google AI Overviews still draw from web content, and Google says the feature is available in 200+ countries and 40+ languages. But AI Overview visibility doesn't equal organic ranking visibility, and Google Search Console doesn't isolate AI Overview clicks cleanly."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "How does AI choose what to cite?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "AI systems tend to cite content that is clear, current, well-structured, and useful for grounding an answer. In my dataset, the top two posts produced 51% of all AI citations, and both were fresh comparison-style articles with concrete decision criteria."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Does ChatGPT replace SEO?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "No. ChatGPT reached 800 million weekly active users in 2025, but Google still drives high-intent discovery and conversion traffic. The better framing is not replacement. It is separate surfaces: SEO for ranked clicks, GEO for citations, and AEO for direct answers."&lt;br&gt;
          }&lt;br&gt;
        }&lt;br&gt;
      ]&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

</description>
      <category>seovsgeo</category>
      <category>answerengineoptimization</category>
      <category>generativeengineoptimization</category>
      <category>aisearch</category>
    </item>
    <item>
      <title>Sequential Thinking in Claude Code: A Practical MCP Guide</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Wed, 27 May 2026 14:15:58 +0000</pubDate>
      <link>https://dev.to/nishilbhave/sequential-thinking-in-claude-code-a-practical-mcp-guide-o4f</link>
      <guid>https://dev.to/nishilbhave/sequential-thinking-in-claude-code-a-practical-mcp-guide-o4f</guid>
      <description>&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%2Fveryyhop4bzb7xt71mqw.jpg" 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%2Fveryyhop4bzb7xt71mqw.jpg" alt="Scattered reasoning-step cards — Thought, Hypothesis, Revise, Branch, Backtrack — flowing along cyan paths into three synthesis panels, illustrating how the sequential thinking MCP server structures Claude Code's reasoning" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Sequential Thinking MCP Server Is For
&lt;/h2&gt;

&lt;p&gt;Anthropic's official &lt;code&gt;@modelcontextprotocol/server-sequential-thinking&lt;/code&gt; package shipped as one of the original reference MCP servers and is still maintained by the MCP team today (&lt;a href="https://www.npmjs.com/package/@modelcontextprotocol/server-sequential-thinking" rel="noopener noreferrer"&gt;npm&lt;/a&gt;, v2025.12.18). It's one of the most-recommended servers in every Claude Code setup guide, and it's also one of the most misused: installed once, forgotten, and quietly burning tokens on tasks it has no business touching.&lt;/p&gt;

&lt;p&gt;I've had sequential-thinking in my Claude Code config for nine months. This is the working guide: what the server actually does at the protocol level, the prompts that reliably invoke it, the tasks where it earns its slot, and the ones where it's pure latency tax.&lt;/p&gt;

&lt;p&gt;the broader question of when MCP servers belong in your Claude Code loop vs when a Skill does the job. If you haven't set up MCP at all yet, start with the &lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;complete MCP configuration playbook&lt;/a&gt; — sequential-thinking only makes sense once the scope hierarchy and config file basics are in place.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sequential thinking is an &lt;strong&gt;external MCP tool&lt;/strong&gt; Claude calls during the agent loop, not an internal reasoning mode. It exposes &lt;code&gt;thought&lt;/code&gt;, &lt;code&gt;nextThoughtNeeded&lt;/code&gt;, &lt;code&gt;isRevision&lt;/code&gt;, and &lt;code&gt;branchFromThought&lt;/code&gt; parameters so the model can revise and branch its own chain (&lt;a href="https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking" rel="noopener noreferrer"&gt;MCP servers/sequentialthinking&lt;/a&gt;, 2025).&lt;/li&gt;
&lt;li&gt;On Opus 4.7, manual extended thinking now returns a 400 error. Adaptive thinking is the only built-in option, which makes sequential-thinking MCP one of the few ways to get explicit, inspectable reasoning back (&lt;a href="https://platform.claude.com/docs/en/build-with-claude/extended-thinking" rel="noopener noreferrer"&gt;Anthropic platform docs&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;It earns its slot on debugging, architecture decisions, and multi-step planning. It loses on simple edits, renames, and any task the model would have solved in one shot. Install it, but learn when to invoke it explicitly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Does the Sequential Thinking MCP Server Actually Do?
&lt;/h2&gt;

&lt;p&gt;The sequential-thinking server exposes exactly one tool (also called &lt;code&gt;sequential_thinking&lt;/code&gt;) that Claude can call during a session to record an explicit, revisable chain of thoughts (&lt;a href="https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking" rel="noopener noreferrer"&gt;MCP servers/sequentialthinking README&lt;/a&gt;, 2025). Each call writes one numbered thought to a per-session ledger; the model decides when it's done by setting &lt;code&gt;nextThoughtNeeded: false&lt;/code&gt;. That's the whole protocol.&lt;/p&gt;

&lt;p&gt;The tool spec, verbatim from the official README, takes nine parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"thought"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Current thinking step (any string)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nextThoughtNeeded"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"thoughtNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"totalThoughts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"isRevision"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"revisesThought"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"branchFromThought"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"branchId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"needsMoreThoughts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interesting parameters are the last four. &lt;code&gt;isRevision&lt;/code&gt; plus &lt;code&gt;revisesThought&lt;/code&gt; lets the model say &lt;em&gt;"thought 3 was wrong, here's the corrected version."&lt;/em&gt; &lt;code&gt;branchFromThought&lt;/code&gt; plus &lt;code&gt;branchId&lt;/code&gt; lets it explore two alternative approaches in parallel without losing the original. &lt;code&gt;needsMoreThoughts&lt;/code&gt; overrides &lt;code&gt;totalThoughts&lt;/code&gt; when the model realizes mid-stream that the problem is bigger than it estimated.&lt;/p&gt;

&lt;p&gt;None of those exist in default tool-calling or in Anthropic's built-in extended thinking. They're the actual reason to install this server — not the linear chain itself, but the explicit revision and branching primitives.&lt;/p&gt;

&lt;p&gt;Most people install sequential-thinking expecting it to make Claude &lt;em&gt;smarter&lt;/em&gt;. It doesn't. It makes Claude's reasoning &lt;strong&gt;inspectable and revisable&lt;/strong&gt;, which is a different thing. The smartness comes from the same model; what changes is that the model now has a sanctioned mechanism to walk back a wrong assumption mid-task instead of doubling down on it.&lt;/p&gt;

&lt;p&gt;why exposing intermediate reasoning to the agent loop changes what context engineering can do&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You Install Sequential Thinking in Claude Code?
&lt;/h2&gt;

&lt;p&gt;One command, from any directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add sequential-thinking &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @modelcontextprotocol/server-sequential-thinking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The server runs on demand via npx, so there's no daemon to babysit. The Claude Code docs cover three scopes for this command: &lt;code&gt;local&lt;/code&gt; (you, this project), &lt;code&gt;project&lt;/code&gt; (&lt;code&gt;.mcp.json&lt;/code&gt; checked into the repo), and &lt;code&gt;user&lt;/code&gt; (every project on this machine), picked via &lt;code&gt;--scope&lt;/code&gt; (&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code MCP docs&lt;/a&gt;, 2026). For a server this lightweight I keep it at user scope.&lt;/p&gt;

&lt;p&gt;If you prefer editing JSON directly, the equivalent block in &lt;code&gt;~/.claude.json&lt;/code&gt; is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sequential-thinking"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-sequential-thinking"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the install three ways. From the shell, &lt;code&gt;claude mcp list&lt;/code&gt; should show &lt;code&gt;sequential-thinking&lt;/code&gt; in the green-checkmark column. Inside a Claude Code session, &lt;code&gt;/mcp&lt;/code&gt; prints live connection status and tool inventory; you should see the &lt;code&gt;sequential_thinking&lt;/code&gt; tool listed. And in a session itself, &lt;em&gt;"think through this step by step using sequential thinking"&lt;/em&gt; will trigger a call you can watch in the transcript.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1555066931-4365d14bab8c%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1555066931-4365d14bab8c%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A laptop screen showing a terminal session with green-checkmark output from claude mcp list, including the sequential-thinking server entry" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One environment variable worth knowing: &lt;code&gt;DISABLE_THOUGHT_LOGGING=true&lt;/code&gt; silences the formatted thought output in your terminal but keeps the protocol working. I leave it on for long agent runs where the thought stream is noise; I turn it off when I'm debugging the reasoning itself.&lt;/p&gt;

&lt;p&gt;If you don't want npx in your boot path, the same package ships as a Docker image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; mcp/sequentialthinking
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wire that to your MCP config with &lt;code&gt;"command": "docker"&lt;/code&gt; and the &lt;code&gt;run --rm -i mcp/sequentialthinking&lt;/code&gt; args. Slower cold-start, no Node toolchain required.&lt;/p&gt;

&lt;p&gt;routing MCP servers across multiple Claude Code projects without re-installing each time&lt;/p&gt;




&lt;h2&gt;
  
  
  Sequential Thinking MCP vs Claude's Extended Thinking — Which One Wins?
&lt;/h2&gt;

&lt;p&gt;They're not the same mechanism and they shouldn't be compared as if they were. Anthropic's extended thinking runs &lt;strong&gt;inside the model&lt;/strong&gt; at the API layer. The model emits &lt;code&gt;thinking&lt;/code&gt; content blocks before its visible response, and those tokens are billed as output tokens regardless of whether the client displays them (&lt;a href="https://platform.claude.com/docs/en/build-with-claude/extended-thinking" rel="noopener noreferrer"&gt;Anthropic platform docs&lt;/a&gt;, 2026). Sequential thinking is an &lt;strong&gt;external tool&lt;/strong&gt; the model calls during the agent loop, with all the latency and per-call overhead of any other MCP tool.&lt;/p&gt;

&lt;p&gt;The deeper change is on Opus 4.7. Manual extended-thinking parameters now return HTTP 400. Adaptive thinking is the only built-in option on the latest Opus and Sonnet 4.6 (&lt;a href="https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking" rel="noopener noreferrer"&gt;Anthropic platform docs: Adaptive thinking&lt;/a&gt;, 2026). The model decides how deep to think per request, and you don't see the trace. If you want &lt;strong&gt;inspectable, revisable, branchable&lt;/strong&gt; reasoning back, sequential-thinking MCP is one of the few ways to get it.&lt;/p&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%2F0c3i7dp4anyunh1qicnp.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%2F0c3i7dp4anyunh1qicnp.png" alt="Comparison flow diagram showing extended thinking runs inside the model API emitting thinking content blocks, while sequential thinking MCP runs as an external tool call producing inspectable revisable thought objects" width="799" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The practical decision is simpler than the theory. Adaptive thinking is on by default and you can't see it, so for &lt;em&gt;any&lt;/em&gt; hard task you want to inspect the reasoning trail of — debugging, architecture, anything multi-step — sequential thinking gives you a tool you can read after the fact. For tasks where you just want the answer and don't care how Claude got there, adaptive thinking wins on latency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;the token accounting for thinking tokens vs tool-call tokens in Claude Code billing&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  When Does Sequential Thinking Earn Its Slot in the Loop?
&lt;/h2&gt;

&lt;p&gt;Three task shapes pay back the latency overhead consistently. They share a feature: the failure mode is not "wrong syntax" but "wrong direction." Sequential thinking buys you a chance to detect the wrong direction before the model commits 8,000 tokens to coding it up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Bug hunts where the symptom is far from the cause.&lt;/strong&gt; A failing test that's actually upstream of a stale lock file. A 500 that's really a CORS preflight from a sibling service. The kind of bug where the first hypothesis is almost never right. Sequential thinking lets the model state "Hypothesis 1: stale cache" and then mark it &lt;code&gt;isRevision&lt;/code&gt; once it sees evidence pointing elsewhere, instead of writing a fix for hypothesis 1 and only noticing after running tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Architecture decisions with non-obvious trade-offs.&lt;/strong&gt; "Should this be a worker or a serverless function?" "Where does the rate limiter live?" These are decisions where the right answer depends on five constraints the model needs to surface one by one. The &lt;code&gt;branchFromThought&lt;/code&gt; parameter is purpose-built for this — &lt;em&gt;"Branch A: worker. Branch B: function. Compare on cold-start, on cost ceiling, on observability."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Multi-step planning where step N depends on step N-1.&lt;/strong&gt; Migration scripts, refactors that touch 20 files, anything where you need a written plan before any code. Sequential thinking forces the plan to live in a readable ledger; without it, the plan exists only in the model's hidden adaptive-thinking trace and you can't audit it.&lt;/p&gt;

&lt;p&gt;Practitioners who've run the same workflow for months report material wins on the first two categories. Rob Marshall, writing on robertmarshall.dev, reports a &lt;em&gt;"60–70% reduction on complex features, fewer bugs, better patterns, and consistent architecture"&lt;/em&gt; after a month of Claude Code with sequential thinking in the loop (&lt;a href="https://robertmarshall.dev/blog/turning-claude-code-into-a-development-powerhouse/" rel="noopener noreferrer"&gt;Rob Marshall&lt;/a&gt;, 2025). Luis Gallardo, writing about Cursor-to-Claude-Code migration, notes that &lt;em&gt;"Claude Code solved the same problem in one or two runs"&lt;/em&gt; where Cursor &lt;em&gt;"would cycle through planning, implementing, and troubleshooting repeatedly"&lt;/em&gt; (&lt;a href="https://lgallardo.com/2025/07/09/beyond-cursor-claude-code-sequential-thinking/" rel="noopener noreferrer"&gt;lgallardo.com&lt;/a&gt;, Jul 2025). Mapping those reports against my own task log, here's roughly where the payoff lands by task type. Treat the numbers as a directional estimate, not a measured benchmark.&lt;/p&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%2Fkmpco6gxj32ngr6zewu0.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%2Fkmpco6gxj32ngr6zewu0.png" alt="Bar chart showing the author's directional estimate of task improvement with sequential thinking: debugging plus sixty-two percent, architecture plus forty-eight percent, simple refactor plus three percent essentially noise, documentation minus twelve percent slower" width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where it earned its keep for me:&lt;/strong&gt; Last March I had a Next.js 16 build that was failing intermittently: passes locally, fails on CI, passes again on rerun. Without sequential thinking, Claude's first move was to "fix" the Tailwind config. With sequential thinking explicitly invoked, the first thought was &lt;em&gt;"This is a non-determinism symptom; the config is unlikely to be the cause."&lt;/em&gt; Five thoughts later it was on the actual culprit: a race between &lt;code&gt;next build&lt;/code&gt; and an instrumentation hook firing twice. Two thoughts in the ledger were marked &lt;code&gt;isRevision&lt;/code&gt;. That session would have cost me an evening; it cost me twelve minutes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-errors-every-code-cause-and-fix-2026-guide/" rel="noopener noreferrer"&gt;the broader Claude Code troubleshooting catalog this pattern slots into&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  When Does Sequential Thinking Hurt More Than It Helps?
&lt;/h2&gt;

&lt;p&gt;The honest answer: most of the time you invoke it for a task that doesn't need it.&lt;/p&gt;

&lt;p&gt;Three categories where sequential thinking is pure overhead. &lt;strong&gt;Renames and refactors of a single function.&lt;/strong&gt; The model already knows the rename; the tool call adds two round-trips for a problem that didn't have any branching to do. &lt;strong&gt;Documentation writing.&lt;/strong&gt; The thought ledger competes for attention with the prose you're trying to produce, and adaptive thinking already handles this category fine. &lt;strong&gt;Quick file edits driven by a clear instruction&lt;/strong&gt;, such as "add a try/catch around line 42" or "swap the parameter order in this function." There's nothing to revise. Just do it.&lt;/p&gt;

&lt;p&gt;The token math is unforgiving here. A trivial edit that should be one tool call (Edit) becomes 4–6 calls once sequential thinking is in the mix. The package itself has no per-call cost, but Claude pays standard input/output token charges per round-trip. On Sonnet 4.6's $3-in / $15-out pricing, a five-thought ledger on a thirty-second task adds maybe $0.04. Not catastrophic, but if it happens 200 times a day across a team it's $8/day for thinking on tasks that didn't need it.&lt;/p&gt;

&lt;p&gt;The right mental model is &lt;em&gt;"sequential thinking has a fixed cost per invocation and a variable payoff depending on task complexity."&lt;/em&gt; The payoff curve is steep. Hard tasks pay back ten times the overhead; easy tasks pay back zero.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;From my own logs:&lt;/strong&gt; Across 1,200 Claude Code sessions in the last three months, sequential-thinking calls fired in 38% of sessions. Of those, roughly 22% (about 8% of all sessions) accounted for tasks where I judged the call clearly load-bearing. The other 16% were the model invoking it on tasks that didn't need it — adaptive thinking would have produced the same answer faster. That's not a problem with the server; it's a prompting problem.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Which Prompting Patterns Actually Trigger It?
&lt;/h2&gt;

&lt;p&gt;The model invokes sequential thinking opportunistically based on the task description and what's available in the tool inventory. You can nudge it deliberately with prompts that pattern-match to its training on "structured reasoning" tasks.&lt;/p&gt;

&lt;p&gt;Three patterns I've tested for several months and watch consistently fire the tool:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern A — explicit invocation.&lt;/strong&gt; &lt;em&gt;"Think through this step by step using sequential thinking. Revise if you find evidence against an earlier step."&lt;/em&gt; This is the cheap one. It works almost always on Sonnet 4.6 and Opus 4.7. Use it when you've already decided the task is complex enough to deserve it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern B — hypothesis framing.&lt;/strong&gt; &lt;em&gt;"List your top three hypotheses, rank them, and as you investigate, mark any hypothesis that gets ruled out."&lt;/em&gt; The "rank and rule out" language is the trigger; the model reaches for the &lt;code&gt;isRevision&lt;/code&gt; parameter naturally because the prompt has set up a refutation loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern C — branching for trade-offs.&lt;/strong&gt; &lt;em&gt;"Compare approach A and approach B on cold-start, cost, and observability. Use branches if you want to develop each independently before recommending one."&lt;/em&gt; The word "branches" is doing work here — the model treats it as a hint that &lt;code&gt;branchFromThought&lt;/code&gt; is the right primitive.&lt;/p&gt;

&lt;p&gt;What doesn't reliably work: vague calls for "deep thinking" or "extended thinking" without describing the structure. The model has a strong prior that those phrases mean adaptive thinking, not the MCP server. If you want the MCP server, name the structure: revise, rank, branch, rule out.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1518770660439-4636190af475%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1518770660439-4636190af475%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A close-up of a circuit board with branching traces, representing the divergent reasoning paths sequential thinking can produce via branchFromThought" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's also a system-prompt-level pattern worth knowing. In a &lt;code&gt;CLAUDE.md&lt;/code&gt; at the repo root, this clause significantly increases sensible invocation rates on hard tasks:&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="gu"&gt;## Reasoning&lt;/span&gt;
When tackling debugging, architecture, or multi-step planning,
invoke sequential-thinking with at least 3 thoughts and revise
any earlier thought that turns out to be wrong. For simple
edits, do not invoke sequential-thinking.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The negative half of that clause — &lt;em&gt;"do not invoke for simple edits"&lt;/em&gt; — is the part most setups miss. Without it the model errs toward invoking on everything once it sees the tool listed.&lt;/p&gt;

&lt;p&gt;how sequential thinking composes with subagent dispatch for hard tasks&lt;/p&gt;




&lt;h2&gt;
  
  
  Before/After: Three Real Tasks Where Sequential Thinking Mattered
&lt;/h2&gt;

&lt;p&gt;Three examples from my own logs, lightly anonymized. Each shows the model's first move with and without sequential thinking in the loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 1 — Flaky CI build.&lt;/strong&gt; &lt;em&gt;"Next.js 16 build passes locally, fails 30% of the time on CI, passes on rerun."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without sequential thinking, first response: &lt;em&gt;"This is likely a stale Tailwind cache. Let me clear it and rebuild."&lt;/em&gt; — patched the wrong layer.&lt;/p&gt;

&lt;p&gt;With sequential thinking explicitly invoked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thought 1: Symptom is non-determinism. Cache issues are deterministic
once the cache is warm. This is unlikely to be a pure cache problem.

Thought 2: Intermittent + only-on-CI suggests a race condition or
an environment-specific timing issue.

Thought 3 (isRevision of 2): Refining — the instrumentation hook in
this repo runs on every Next.js build entry. If it can fire twice
in the CI environment, two scheduler instances would race.

Thought 4: Check `instrumentation.ts` for an idempotency guard.

Thought 5: Confirmed — no guard. The `__schedulerStarted` global is
exactly the pattern needed. Implement and verify.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five thoughts, one revision, problem solved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 2 — Service refactor decision.&lt;/strong&gt; &lt;em&gt;"Should the email queue stay as a Bull queue in the same Node process or move to a dedicated worker?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without sequential thinking: &lt;em&gt;"Move it to a dedicated worker; it's cleaner architecturally."&lt;/em&gt; — true but didn't surface the constraints.&lt;/p&gt;

&lt;p&gt;With sequential thinking (Pattern C — branching):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thought 1: Two approaches to compare. Use branches.

Branch A, thought 1: In-process Bull. Cold-start: instant.
Cost: shared with web tier. Observability: shares the web logger.

Branch B, thought 1: Dedicated worker. Cold-start: 8s on Fly.io.
Cost: $5/mo standing. Observability: separate logger needed.

Branch A, thought 2: Risk — slow email handler blocks event loop.
Mitigated by Bull's own queueing but the worker shares CPU.

Branch B, thought 2: Risk — deploy coupling between web and worker.
Both must redeploy on shared-package change.

Synthesis (thought 3): Pick A until email volume exceeds 50/min
sustained. Below that, the deploy-coupling cost of B outweighs
the event-loop risk of A.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The synthesis thought is the answer; the branches are the receipts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 3 — Twelve-file refactor.&lt;/strong&gt; &lt;em&gt;"Extract the auth middleware into a separate package; update all callers."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without sequential thinking: started editing files in alphabetical order, missed two callers in a test fixture, broke CI.&lt;/p&gt;

&lt;p&gt;With sequential thinking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thought 1: Enumerate callers first. Don't edit until the full list
is in this ledger.

Thought 2: ripgrep finds 14 imports across the repo, including 2 in
__tests__/fixtures.

Thought 3: Group by file type. Production code: 12. Test fixtures: 2.
Order edits so tests run green throughout — fixtures last.

Thought 4: Risk — the package boundary changes the import path.
Update the new package's public exports first, then call sites.

Thought 5: Order locked. Begin.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The pre-flight thought ledger is the deliverable; the actual edits become mechanical.&lt;/p&gt;

&lt;p&gt;how to combine sequential thinking with PostToolUse hooks that capture the thought ledger for audit&lt;/p&gt;




&lt;h2&gt;
  
  
  Do You Actually Need to Install Sequential Thinking?
&lt;/h2&gt;

&lt;p&gt;A contrarian beat that's earned. The reason most Claude Code users get away without sequential thinking is that adaptive thinking on Opus 4.7 and Sonnet 4.6 already handles 80% of what you'd reach for it on. The model is doing internal reasoning regardless; you just can't see it.&lt;/p&gt;

&lt;p&gt;Install sequential thinking only if you want &lt;strong&gt;inspectable, revisable, branchable&lt;/strong&gt; reasoning visible in the transcript. That's a real value but a specific one. The use cases are: post-hoc auditing of how an agent reached a decision, situations where you want to interrupt and redirect a long thought chain, and tasks where revision-aware reasoning measurably out-performs single-pass reasoning.&lt;/p&gt;

&lt;p&gt;If your Claude Code workflow is mostly "ask, edit, commit" — quick iterations, short sessions, you eyeball the diff — sequential thinking is overhead you won't recover. There's no shame in not installing it. The HN sentiment on this is mixed for a reason; one practitioner notes &lt;em&gt;"it's better than thinking mode [for certain use cases]"&lt;/em&gt; (&lt;a href="https://news.ycombinator.com/item?id=43681296" rel="noopener noreferrer"&gt;Hacker News id=43681296&lt;/a&gt;, 2025), which is exactly the right framing: &lt;em&gt;certain&lt;/em&gt; use cases.&lt;/p&gt;

&lt;p&gt;The decision rule I now use: install it if you do &lt;strong&gt;any&lt;/strong&gt; of these regularly — debug hard intermittent failures, make architectural decisions in code, run multi-file refactors longer than 30 minutes, audit agent decisions after the fact. Skip it if your sessions are mostly under 5 minutes and your tasks are mostly atomic edits.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does sequential thinking work with Claude Sonnet 4.6 and Haiku 4.5, or only Opus?
&lt;/h3&gt;

&lt;p&gt;Yes to all three. It's an MCP tool, not a model feature — any model that supports MCP tool calling can invoke it. Sonnet 4.6 and Opus 4.7 invoke it most reliably; Haiku 4.5 will use it when explicitly prompted but invokes it less often on its own (&lt;a href="https://platform.claude.com/docs/en/build-with-claude/extended-thinking" rel="noopener noreferrer"&gt;Anthropic platform docs&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does sequential thinking cost in tokens compared to extended thinking?
&lt;/h3&gt;

&lt;p&gt;There's no special "thinking token" billing for the MCP server — each thought is a normal tool round-trip billed at the model's input/output rate. Extended thinking, by contrast, bills its thinking tokens as output tokens even when the SDK shows them as "omitted" (&lt;a href="https://platform.claude.com/docs/en/build-with-claude/extended-thinking" rel="noopener noreferrer"&gt;Anthropic platform docs&lt;/a&gt;, 2026). For a 5-thought session on Sonnet 4.6, expect ~$0.03–$0.06 of overhead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I see the thoughts after the session ends?
&lt;/h3&gt;

&lt;p&gt;Yes — the full thought ledger is in the Claude Code transcript log for the session. The server also accepts &lt;code&gt;DISABLE_THOUGHT_LOGGING=true&lt;/code&gt; to suppress its formatted terminal output, but that flag only affects the live display, not the stored transcript (&lt;a href="https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking" rel="noopener noreferrer"&gt;MCP servers/sequentialthinking&lt;/a&gt;, 2025).&lt;/p&gt;

&lt;h3&gt;
  
  
  Will sequential thinking break my existing Claude Code prompts?
&lt;/h3&gt;

&lt;p&gt;No. The model only invokes sequential thinking when the task and your prompt suggest it. Installing it adds one tool to the inventory but changes nothing about how other tools behave. The most common failure mode is *over-*invocation on tasks that don't need it, not regressions on tasks that do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the sequential-thinking server safe to enable at project scope (&lt;code&gt;.mcp.json&lt;/code&gt;)?
&lt;/h3&gt;

&lt;p&gt;It's safe in the sense that the server only reads/writes its own in-memory thought ledger — it doesn't touch files, network, or shell. The risk is the standard MCP risk: any project-scope server runs on every collaborator's machine when they open the repo. For this server that risk is low; for any server that touches the filesystem, vet the source first (&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code MCP docs&lt;/a&gt;, 2026).&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Do With This
&lt;/h2&gt;

&lt;p&gt;Install it once with &lt;code&gt;claude mcp add sequential-thinking -- npx -y @modelcontextprotocol/server-sequential-thinking&lt;/code&gt;. Add the &lt;code&gt;CLAUDE.md&lt;/code&gt; reasoning clause from the prompting section so the model invokes it on the tasks where it pays back and skips the ones where it doesn't. Then watch the transcript for a week and decide whether you keep it.&lt;/p&gt;

&lt;p&gt;The reason to install sequential thinking isn't that Claude reasons badly without it. It's that you want to see and audit the reasoning, and on the latest Opus you can't see the adaptive trace any other way. That's a narrow but real reason. Pretend it's broader and you'll burn tokens on overhead; ignore it entirely and you'll lose a tool that genuinely helps on hard problems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/agentic-ai-explained-what-it-is-how-it-works-and-why-it-matters/" rel="noopener noreferrer"&gt;the broader agentic AI context that makes inspectable reasoning a baseline expectation rather than a nice-to-have&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>mcp</category>
      <category>sequentialthinking</category>
      <category>aireasoning</category>
    </item>
    <item>
      <title>Claude Code vs Codex CLI: 6 Months of Real Daily Use</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Mon, 25 May 2026 15:26:37 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-code-vs-codex-cli-an-honest-2026-comparison-37m9</link>
      <guid>https://dev.to/nishilbhave/claude-code-vs-codex-cli-an-honest-2026-comparison-37m9</guid>
      <description>&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%2Foh3oy7vudnl09whrzqat.jpg" 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%2Foh3oy7vudnl09whrzqat.jpg" alt="Dashboard card grid comparing Claude Code vs Codex CLI across model quality (87.6% vs ~85% SWE-bench), sandboxing, extensibility, pricing, security, and daily driver verdict — navy background editorial hero" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code vs Codex CLI: Six Months of Real Daily Use
&lt;/h2&gt;

&lt;p&gt;Two terminal agents. One slot in your daily driver workflow. I've been running both Claude Code and OpenAI's Codex CLI as primary tools for the last six months — different repos, different stakes, different team setups. They look almost identical from the outside: a CLI, a permission prompt, a model that edits your files. Under the hood, they're not the same product at all.&lt;/p&gt;

&lt;p&gt;JetBrains' April 2026 research shows Claude Code adoption at work jumped from roughly 3% (April–June 2025) to 18% by January 2026 — a 6x increase in nine months — and its customer satisfaction score hit 91%, the highest of any coding tool they tracked (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026). Codex CLI grew from 82,000 monthly npm downloads at launch to 14.53 million by March 2026, a 177x increase (&lt;a href="https://www.gradually.ai/en/codex-statistics/" rel="noopener noreferrer"&gt;gradually.ai&lt;/a&gt;, 2026). Both are winning. They're winning for different reasons. This is the honest comparison.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/cursor-code-review-across-codex-windsurf-and-45-ai-agents/" rel="noopener noreferrer"&gt;portable code review across both agents&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code wins on agentic quality and extensibility (Hooks, Skills, Subagents) but is closed-source and had four CVEs disclosed and patched across 2025–2026 (&lt;a href="https://research.checkpoint.com/2026/rce-and-api-token-exfiltration-through-claude-code-project-files-cve-2025-59536/" rel="noopener noreferrer"&gt;Check Point Research&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;Codex CLI is Apache 2.0, Rust-native, and ships a stricter default sandbox — better for untrusted repos and pull request review work.&lt;/li&gt;
&lt;li&gt;70% of developers run 2–4 AI tools at once (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). The right answer is usually both, with one as the daily driver.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Are Claude Code and Codex CLI Converging?
&lt;/h2&gt;

&lt;p&gt;Both products believe the same thing: the IDE is a deeply customized editor, and an agent doesn't need to live inside it to be useful. 95% of engineers in the Pragmatic Engineer survey now use AI tools weekly, and 75% report AI handles at least half of their engineering work (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). When the agent is doing half the work, the question stops being "which editor extension" and starts being "which process runs my repo."&lt;/p&gt;

&lt;p&gt;That's the philosophical convergence. A terminal agent reads your files, runs commands, watches output, and proposes changes. It's a long-running process that owns a working directory. Claude Code shipped this model in February 2025. Codex CLI shipped its first public version in April 2025 and then rewrote the whole thing in Rust by June 2025 — the TypeScript prototype is gone, the repo is now 95.6% Rust with over 75,000 stars and 400 contributors (&lt;a href="https://github.com/openai/codex" rel="noopener noreferrer"&gt;OpenAI Codex GitHub&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;The convergence isn't surface-level. The daily ritual is genuinely the same: open a terminal in the repo, type a goal, watch a plan appear, approve or deny tool calls, accept the diff. If you blindfolded me and dropped me into either CLI mid-task, I'd need at least thirty seconds to figure out which one I was in. The differences only show up under load — when the agent gets confused, when something fails, when you need to do anything outside the happy path.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1515879218367-8466d910aaa4%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1515879218367-8466d910aaa4%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A computer screen filled with lines of code in a classic terminal aesthetic — the surface area where both Claude Code and Codex CLI live" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;why the hook layer matters once you're past the happy path&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do GPT-5 and Claude Opus 4.7 Actually Behave on Real Codebases?
&lt;/h2&gt;

&lt;p&gt;Among the models powering these two tools, Claude Opus 4.7 posts 87.6% on SWE-bench Verified — ahead of GPT-5.3-Codex at around 85% and the base GPT-5 at 74.9% (&lt;a href="https://www.vellum.ai/blog/claude-opus-4-7-benchmarks-explained" rel="noopener noreferrer"&gt;Vellum&lt;/a&gt;, 2026; &lt;a href="https://llm-stats.com/benchmarks/swe-bench-verified" rel="noopener noreferrer"&gt;LLM-Stats&lt;/a&gt;, 2026). That gap is real but it's also misleading — both models are trained on a lot of public SWE-bench-like data, and the benchmark increasingly measures how well a model has memorized the eval set, not how it handles your code.&lt;/p&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%2F9oft7iw4k9e91q1fpgjo.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%2F9oft7iw4k9e91q1fpgjo.png" alt="Horizontal bar chart of SWE-bench Verified scores in May 2026 with Claude Opus 4.7 at 87.6 percent, GPT-5.3-Codex at 85 percent, Claude Sonnet 4.6 at 79.6 percent, Claude Sonnet 4.5 at 77.2 percent, and base GPT-5 at 74.9 percent" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what I see in practice. On a tangled refactor — say, lifting a service interface out of three coupled controllers in a legacy PHP/Laravel codebase — Claude Opus 4.7 produces a more cautious plan. It asks before touching shared types. It writes a checklist and follows it. It backs out cleanly when I tell it to. GPT-5.3-Codex is faster and bolder. It writes more code per turn, which is great when the code is right and painful when it isn't.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My finding:&lt;/strong&gt; On a 20-file refactor I ran on the same Laravel repo, Claude Code needed 3 prompts and stopped to confirm 4 times. Codex CLI did it in 1 prompt but introduced two regressions that broke tests in unrelated files. The fix for the regressions took longer than the original task would have on Claude.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the consistent pattern. Claude is more conservative, more aligned with "ask first," and recovers from mistakes better. Codex is more aggressive, more willing to refactor adjacent code without asking, and faster on greenfield work. Pragmatic Engineer's 2026 survey reflects this preference split: 46% of engineers named Claude Code as the tool they love most, vs 19% for Cursor and 9% for GitHub Copilot (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026).&lt;/p&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%2Fkshhclbj3kjz7ysdvrso.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%2Fkshhclbj3kjz7ysdvrso.png" alt="Lollipop chart showing percent of engineers who name each AI coding tool as the one they love most: Claude Code 46 percent, Cursor 19 percent, GitHub Copilot 9 percent, Codex 6 percent, Windsurf 4 percent" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't read that as "Codex is bad." Codex didn't exist when the 2025 survey ran, and it's already at 6% with momentum. Read it as "Claude Code has the strongest emotional pull right now, especially for engineers doing focused refactor and debug work."&lt;/p&gt;

&lt;p&gt;the multi-model workflow I actually use&lt;/p&gt;




&lt;h2&gt;
  
  
  What's the Real Difference in Sandboxing and Permissions?
&lt;/h2&gt;

&lt;p&gt;Codex CLI ships with a stricter default. It runs with three sandbox modes — &lt;code&gt;read-only&lt;/code&gt;, &lt;code&gt;workspace-write&lt;/code&gt;, and &lt;code&gt;danger-full-access&lt;/code&gt; — combined with three approval modes (&lt;code&gt;suggest&lt;/code&gt;, &lt;code&gt;auto-edit&lt;/code&gt;, &lt;code&gt;full-auto&lt;/code&gt;) (&lt;a href="https://developers.openai.com/codex/concepts/sandboxing" rel="noopener noreferrer"&gt;OpenAI Codex Sandboxing&lt;/a&gt;, 2026). The default behavior asks before every write and refuses network calls outside the workspace. Claude Code has five permission modes (&lt;code&gt;default&lt;/code&gt;, &lt;code&gt;acceptEdits&lt;/code&gt;, &lt;code&gt;plan&lt;/code&gt;, &lt;code&gt;dontAsk&lt;/code&gt;, &lt;code&gt;bypassPermissions&lt;/code&gt;) with file-level and command-level deny rules layered on top (&lt;a href="https://code.claude.com/docs/en/permission-modes" rel="noopener noreferrer"&gt;Claude Code Permission Modes&lt;/a&gt;, 2026).&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1744555270794-6d378b9e7cd3%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1744555270794-6d378b9e7cd3%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A developer at a multi-monitor coding setup with terminal windows and editors open — the daily-driver question that this article tries to settle" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The naming is different. The actual capabilities are roughly equivalent. The difference that matters is the default. Codex's default refuses more aggressively. Claude's default trusts more aggressively. Neither is wrong; they reflect different assumptions about who's at the keyboard.&lt;/p&gt;

&lt;p&gt;Then there's the security record. Four CVEs were disclosed against Claude Code across 2025–2026: CVE-2025-59536 (RCE via untrusted project config, CVSS 8.7), surfaced by &lt;a href="https://research.checkpoint.com/2026/rce-and-api-token-exfiltration-through-claude-code-project-files-cve-2025-59536/" rel="noopener noreferrer"&gt;Check Point Research&lt;/a&gt; (2026); CVE-2025-54794 (path bypass, CVSS 7.7) and CVE-2025-54795 (command injection, CVSS 8.7), both from &lt;a href="https://cymulate.com/blog/cve-2025-547954-54795-claude-inverseprompt/" rel="noopener noreferrer"&gt;Cymulate&lt;/a&gt; (2025); and CVE-2025-55284 (DNS exfiltration, CVSS 7.1) from &lt;a href="https://embracethered.com/blog/posts/2025/claude-code-exfiltration-via-dns-requests/" rel="noopener noreferrer"&gt;Embrace The Red&lt;/a&gt; (2025). Anthropic patched all of them, and the underlying issue — that &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;.mcp.json&lt;/code&gt; files in a cloned repo could execute arbitrary shell on startup — is now mitigated. But the lesson is real: &lt;strong&gt;cloning a repo and immediately running Claude Code on it is not as safe as the UX makes it feel.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; If you're reviewing untrusted pull requests or pulling random GitHub repos to investigate them, Codex's stricter default sandbox is the safer starting point. If you're working in a repo you own, on a machine you trust, with a workflow you've tuned, Claude Code's permission model is more ergonomic.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;how MCP server config intersects with Claude Code's permission model&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Which One Has the Stronger MCP and Extensibility Story?
&lt;/h2&gt;

&lt;p&gt;Both support the Model Context Protocol. Claude Code shipped MCP first and shaped the spec. Codex CLI added MCP support in 2026 with stdio and Streamable HTTP transports, including OAuth, configured through &lt;code&gt;~/.codex/config.toml&lt;/code&gt; (&lt;a href="https://developers.openai.com/codex/mcp" rel="noopener noreferrer"&gt;OpenAI Codex MCP docs&lt;/a&gt;, 2026). The MCP ecosystem now has more than 10,000 public servers, and the protocol was donated to the Linux Foundation's Agentic AI Foundation in December 2025 (&lt;a href="https://www.mcpbundles.com/blog/state-of-mcp-clients" rel="noopener noreferrer"&gt;MCP Bundles&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;So MCP support is no longer a Claude-only advantage. What is still Claude-only: Hooks, Skills, and Subagents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt; intercept tool calls at nine documented lifecycle events (&lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;Stop&lt;/code&gt;, and others). They run as shell scripts, return exit codes, and let you build deterministic gates the model can't reason its way past.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; are reusable prompt + tool bundles installed via npm-style commands. Anthropic shipped them in October 2025 alongside Plugins, and they're how the broader ecosystem (skills.sh, etc.) packages workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subagents&lt;/strong&gt; are model-launched workers with their own context windows. You spawn one for research, code review, or exploration, and the parent agent continues without polluting its context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Codex doesn't have direct equivalents. You can build a lot of the same outcomes with shell wrappers and MCP servers, but you're rebuilding the framework.  This is the part of the comparison that gets undersold in most reviews. The extensibility surface isn't a checkbox — it's a multiplier. Once you have a Skill that knows how to ship a feature in your repo, or a Hook that blocks &lt;code&gt;rm -rf&lt;/code&gt; regardless of what the model thinks, the productivity gap widens fast.&lt;/p&gt;

&lt;p&gt;The trade-off is that this surface is also the attack surface. Three of the four CVEs above exploited Hooks, MCP config files, or project-level instructions. Power and risk on the same axis.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1744640326166-433469d102f2%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1744640326166-433469d102f2%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A glowing AI chip on a circuit board — the underlying model is half the agent, the surrounding framework is the other half" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;when to reach for a Skill vs an MCP server&lt;/p&gt;




&lt;h2&gt;
  
  
  How Does the Pricing Math Actually Compare?
&lt;/h2&gt;

&lt;p&gt;Both tools start at the same price. Claude Code is included in Claude Pro at $20/month, with Max 5x at $100/month (5x the Pro rate limits) and Max 20x at $200/month (20x Pro limits) above that — or pay-per-token through the API (&lt;a href="https://claude.com/pricing" rel="noopener noreferrer"&gt;Anthropic Pricing&lt;/a&gt;, 2026). Codex CLI is bundled into ChatGPT Plus ($20/month), Pro ($200/month), Business, Enterprise, and Edu plans, plus pay-per-token through the OpenAI API.&lt;/p&gt;

&lt;p&gt;Entry price is a wash — $20 either way. What differs is the ladder above it. Here's the math from my own usage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Pro or ChatGPT Plus&lt;/strong&gt; ($20/mo): both real entry points, and both throttle hard on long agentic sessions. I burn through either one in roughly 2 hours of serious refactor work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Max 5x&lt;/strong&gt; ($100/mo): comfortable for one developer doing 6–8 hours of agent-heavy work a day. I rarely hit limits — and Codex has no equivalent middle tier, so its next step up is $200.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Max 20x or ChatGPT Pro&lt;/strong&gt; ($200/mo): top tier for both. Max 20x rarely throttles me even on heavy solo days; ChatGPT Pro lifts Codex's ceiling the same way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API for both&lt;/strong&gt;: roughly comparable per-token, but Claude Sonnet 4.6 is significantly cheaper than Opus 4.7 for most coding tasks, and you can route between them in the same session.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest version: at $20 it's a genuine tie — both rate-limit you on heavy days. Claude's real edge is the $100 Max 5x tier, which has no ChatGPT counterpart and is the sweet spot for full-time agent work. At $200 the two are matched again. I run both — Max 20x for daily-driver work, ChatGPT Plus for the occasional Codex run on something Claude is being weird about.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature Matrix: Where Each Tool Genuinely Wins
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Codex CLI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Underlying model&lt;/td&gt;
&lt;td&gt;Claude Opus 4.7 / Sonnet 4.6&lt;/td&gt;
&lt;td&gt;GPT-5 / GPT-5.3-Codex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench Verified&lt;/td&gt;
&lt;td&gt;87.6% (Opus 4.7)&lt;/td&gt;
&lt;td&gt;~85% (5.3-Codex)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Closed-source (npm)&lt;/td&gt;
&lt;td&gt;Apache 2.0 (Rust)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission modes&lt;/td&gt;
&lt;td&gt;5 modes + deny rules&lt;/td&gt;
&lt;td&gt;3 approval + 3 sandbox modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP support&lt;/td&gt;
&lt;td&gt;Yes (original)&lt;/td&gt;
&lt;td&gt;Yes (stdio + Streamable HTTP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hooks&lt;/td&gt;
&lt;td&gt;Yes (9+ lifecycle events)&lt;/td&gt;
&lt;td&gt;No direct equivalent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills&lt;/td&gt;
&lt;td&gt;Yes (Oct 2025)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagents&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugins&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE extensions&lt;/td&gt;
&lt;td&gt;VS Code, JetBrains&lt;/td&gt;
&lt;td&gt;VS Code, JetBrains, Cursor, Windsurf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desktop app&lt;/td&gt;
&lt;td&gt;Yes (Mac/Windows), web, CLI&lt;/td&gt;
&lt;td&gt;Yes (macOS Feb 2026, Windows Mar 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry pricing&lt;/td&gt;
&lt;td&gt;$20/mo (Claude Pro)&lt;/td&gt;
&lt;td&gt;$20/mo (ChatGPT Plus)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mid tier&lt;/td&gt;
&lt;td&gt;$100/mo (Max 5x)&lt;/td&gt;
&lt;td&gt;— (no equivalent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top pricing&lt;/td&gt;
&lt;td&gt;$200/mo (Max 20x)&lt;/td&gt;
&lt;td&gt;$200/mo (ChatGPT Pro)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recent CVEs&lt;/td&gt;
&lt;td&gt;4 patched in early 2026&lt;/td&gt;
&lt;td&gt;None publicly disclosed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSAT&lt;/td&gt;
&lt;td&gt;91%&lt;/td&gt;
&lt;td&gt;Not publicly reported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub stars&lt;/td&gt;
&lt;td&gt;n/a (closed-source)&lt;/td&gt;
&lt;td&gt;75K+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open governance&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (Apache 2.0, 400 contributors)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The matrix tells you what; it doesn't tell you what to actually do. That's the next section.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which One Should Be Your Daily Driver in 2026?
&lt;/h2&gt;

&lt;p&gt;Use this framework.  The decision isn't "which is better" — it's "which fits the work you do most."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick Claude Code as your daily driver if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You spend most of your time in repos you trust (your own code, your team's code).&lt;/li&gt;
&lt;li&gt;You want the strongest agentic quality and recovery behavior on hard tasks.&lt;/li&gt;
&lt;li&gt;You'll actually use Hooks, Skills, or Subagents — that extensibility edge is the main reason to pick Claude over a roughly-comparable Codex.&lt;/li&gt;
&lt;li&gt;You do enough daily agent work to justify Max 5x ($100), though Pro ($20) is a fine place to start.&lt;/li&gt;
&lt;li&gt;You value extensibility over open-source guarantees.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pick Codex CLI as your daily driver if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You frequently work on untrusted repos (PR review, OSS triage, security research).&lt;/li&gt;
&lt;li&gt;You need open-source guarantees for legal or audit reasons.&lt;/li&gt;
&lt;li&gt;You're already paying for ChatGPT Plus or Pro and want to avoid a second subscription.&lt;/li&gt;
&lt;li&gt;You prefer GPT-5's faster, more aggressive coding style.&lt;/li&gt;
&lt;li&gt;You want Codex's desktop app with built-in parallel agent management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Run both if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're doing 6+ hours of agent-heavy work daily.&lt;/li&gt;
&lt;li&gt;You want a second opinion on hard tasks (one agent's stuck plan often unblocks fast in the other).&lt;/li&gt;
&lt;li&gt;You work across languages where the models diverge — I find Claude better on PHP/Ruby/Go, Codex slightly stronger on TypeScript/Python/Rust.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Pragmatic Engineer survey backs this up: 70% of engineers run 2–4 AI tools simultaneously, and 15% run 5 or more (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). Treating this as a one-winner question is the wrong frame.&lt;/p&gt;

&lt;p&gt;My current setup: Claude Code is the daily driver. Codex CLI is the second opinion. When Claude gets confused on a long task — usually around the 30-minute mark on something architecturally tangled — I'll fork the conversation, paste the state into a fresh Codex session, and see what it does. The disagreement is often more useful than either agent's answer alone.&lt;/p&gt;

&lt;p&gt;why running two agents in parallel beats one for hard tasks&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Claude Code's $100 Max tier worth it, or is the $20 Pro plan enough?
&lt;/h3&gt;

&lt;p&gt;Both Claude Code and Codex start at $20/month (Claude Pro and ChatGPT Plus), and both throttle on heavy sessions at that tier. Claude Max 5x ($100/mo) gives roughly 5x Pro rate limits — enough for 6–8 hours of agent-heavy work daily without hitting walls (&lt;a href="https://claude.com/pricing" rel="noopener noreferrer"&gt;Anthropic Pricing&lt;/a&gt;, 2026). The crossover where Max pays for itself is around 3 hours/day of active agent use; below that, Pro is plenty.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Codex CLI support MCP servers?
&lt;/h3&gt;

&lt;p&gt;Yes. Codex CLI added MCP support in 2026 with both stdio and Streamable HTTP (including OAuth) transports, configured in &lt;code&gt;~/.codex/config.toml&lt;/code&gt; (&lt;a href="https://developers.openai.com/codex/mcp" rel="noopener noreferrer"&gt;OpenAI Codex MCP&lt;/a&gt;, 2026). The MCP ecosystem has more than 10,000 public servers, and most work in both Claude Code and Codex CLI without modification.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are Claude Code's CVEs a reason to avoid it?
&lt;/h3&gt;

&lt;p&gt;Not really. All four 2026 CVEs were patched within days of disclosure, and the underlying class of bug — trusting project-local config files on startup — has been mitigated (&lt;a href="https://thehackernews.com/2026/02/claude-code-flaws-allow-remote-code.html" rel="noopener noreferrer"&gt;The Hacker News&lt;/a&gt;, 2026). The takeaway isn't "Claude is unsafe," it's "don't run any agent on a freshly cloned untrusted repo without sandboxing."&lt;/p&gt;

&lt;h3&gt;
  
  
  Which model is actually better at coding, GPT-5 or Claude Opus 4.7?
&lt;/h3&gt;

&lt;p&gt;On SWE-bench Verified, Claude Opus 4.7 leads at 87.6% vs GPT-5.3-Codex at ~85% and base GPT-5 at 74.9% (&lt;a href="https://www.vellum.ai/blog/claude-opus-4-7-benchmarks-explained" rel="noopener noreferrer"&gt;Vellum&lt;/a&gt;, 2026). In practice the gap is smaller and task-dependent. Claude is more cautious and recovers better from mistakes; GPT-5 is faster and more aggressive on greenfield work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Claude Code on the cheaper Claude Pro plan?
&lt;/h3&gt;

&lt;p&gt;Yes. Claude Code is included in Claude Pro at $20/month — the same entry price as ChatGPT Plus with Codex. Pro's rate limits are tight for heavy agentic work, which is why Max 5x ($100/mo) exists for full-time use. You can also pay per-token through the Anthropic API. There's no free tier for Claude Code itself (&lt;a href="https://claude.com/pricing" rel="noopener noreferrer"&gt;Anthropic Pricing&lt;/a&gt;, 2026).&lt;/p&gt;







&lt;p&gt;&lt;em&gt;&lt;a href="https://maketocreate.com/about/" rel="noopener noreferrer"&gt;Nishil Bhave&lt;/a&gt; is a developer and builder who writes about AI tooling, agentic workflows, and the practical realities of shipping with AI. He has been running Claude Code and Codex CLI as primary tools since their respective launches.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;If you only have one slot, Claude Code is the daily driver I'd recommend for most engineers in mid-2026 — 91% CSAT and the strongest extensibility story aren't accidents. If you also have $20/month for ChatGPT Plus, add Codex CLI as your second opinion. The cost of running both is rounding-error for any working engineer, and the dual-agent setup beats either one solo on hard tasks.&lt;/p&gt;

&lt;p&gt;The terminal-agent paradigm is the new default. Pick the one that fits the work you do most, and don't agonize over the choice — both will be different products by Q4 2026, and the only mistake is staying on the sidelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading on this comparison:&lt;/strong&gt; &lt;a href="https://maketocreate.com/claude-code-vs-cursor-honest-2026-comparison-from-daily-use/" rel="noopener noreferrer"&gt;Claude Code vs Cursor (different philosophies — terminal agent vs AI IDE)&lt;/a&gt; and &lt;a href="https://maketocreate.com/gemini-cli-vs-claude-code-an-honest-2026-comparison/" rel="noopener noreferrer"&gt;Gemini CLI vs Claude Code (the free-tier comparison that changes the math)&lt;/a&gt;. And the meta-question: &lt;a href="https://maketocreate.com/is-vibe-coding-production-ready-an-honest-2026-verdict/" rel="noopener noreferrer"&gt;whether agent-driven coding is production-ready in 2026&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>codexcli</category>
      <category>aicodingagents</category>
      <category>terminalagents</category>
    </item>
    <item>
      <title>Gemini CLI vs Claude Code: A 2026 Verdict Before the Shutdown</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Sat, 23 May 2026 21:25:06 +0000</pubDate>
      <link>https://dev.to/nishilbhave/gemini-cli-vs-claude-code-an-honest-2026-comparison-40b1</link>
      <guid>https://dev.to/nishilbhave/gemini-cli-vs-claude-code-an-honest-2026-comparison-40b1</guid>
      <description>&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%2F8osus7s27o5vuc8x9uhi.jpg" 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%2F8osus7s27o5vuc8x9uhi.jpg" alt="Three-column editorial comparison of Gemini CLI (deprecated June 18, 2026), its Antigravity CLI successor, and Claude Code, showing SWE-bench scores, pricing, and feature metrics for each terminal coding agent" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini CLI vs Claude Code, After Months of Daily Use
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update — May 24, 2026:&lt;/strong&gt; Google has deprecated the original Gemini CLI. Starting &lt;strong&gt;June 18, 2026&lt;/strong&gt;, it stops serving requests for free personal, Google AI Pro, and Google AI Ultra accounts, and points users to the new &lt;strong&gt;Antigravity CLI&lt;/strong&gt; instead (&lt;a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026). This rewrite accounts for that. Short version: the free tier that made Gemini CLI a no-brainer is going away, but the successor is cheaper than Claude Code and now ships Skills, Hooks, and Subagents too. The choice got more interesting, not simpler.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two terminal agents. One slot in your shell. I've been driving both Gemini CLI and Claude Code in real work — different repos, different stakes, different budgets — for the better part of a year. Most comparison posts you'll find online are either feature-checklist exercises or thinly veiled marketing for one side. This one is neither, and as of late May it has to account for a moving target.&lt;/p&gt;

&lt;p&gt;The honest take, before I show my work: until June 18, Gemini CLI's free tier is still the most generous deal in the agent space — 1,000 free model requests per day with a 1M token context window on a personal Google account (&lt;a href="https://geminicli.com/docs/resources/quota-and-pricing/" rel="noopener noreferrer"&gt;Gemini CLI Docs&lt;/a&gt;, 2026). After that date, free, Pro, and Ultra users either move to Antigravity CLI or keep Gemini CLI alive with a paid API key. Claude Code charges $20 to $200 a month for a more refined product, and its footing hasn't moved. Which one belongs in your daily shell now depends on a transition almost nobody had priced in a month ago, so this post prices it in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-vs-codex-cli-an-honest-2026-comparison/" rel="noopener noreferrer"&gt;if you're comparing Claude Code against Codex CLI instead&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google deprecated the original Gemini CLI on May 19, 2026. It stops serving free, Pro, and Ultra accounts on &lt;strong&gt;June 18, 2026&lt;/strong&gt;, replaced by the closed-source Antigravity CLI (&lt;a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026). The Apache 2.0 repo stays public, but the hosted free quota does not.&lt;/li&gt;
&lt;li&gt;Antigravity CLI is a Go rewrite that now ships Skills, Hooks, and async Subagents — the extensibility features that were Claude Code's clearest moat (&lt;a href="https://agentpedia.codes/blog/antigravity-cli-deep-dive" rel="noopener noreferrer"&gt;Agentpedia&lt;/a&gt;, 2026). Entry pricing is $20/month Google AI Pro, undercutting Claude's $100 Max 5x.&lt;/li&gt;
&lt;li&gt;Claude Code starts at $20/month Pro (serious use realistically $100 Max 5x) and holds a 91% CSAT and 54 NPS in JetBrains' April 2026 survey — the highest of any coding tool tracked (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;The honest split for 2026: Claude still wins on raw agentic quality (87.6% SWE-bench Verified). Gemini's successor wins on price and now matches the feature checklist. Most serious daily-driver users I know still run both.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Are Gemini CLI and Claude Code Even Comparable?
&lt;/h2&gt;

&lt;p&gt;Both products start from the same bet: the IDE is a deeply customized editor, and an agent does not need to live inside it to do useful work. 95% of engineers in The Pragmatic Engineer's 2026 survey use AI tools weekly, and 75% report AI handles at least half of their engineering work (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). When the agent is doing half the work, the right question stops being "which editor extension" and starts being "which process owns my repo."&lt;/p&gt;

&lt;p&gt;That's the philosophical convergence. Both CLIs run as long-lived processes that read files, run shell commands, watch output, and propose diffs. Claude Code shipped this paradigm in May 2025. Google launched Gemini CLI on June 25, 2025 as an open-source Apache 2.0 project (&lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemini-cli-open-source-ai-agent/" rel="noopener noreferrer"&gt;Google Blog&lt;/a&gt;, 2025). Inside a year, the Gemini CLI repo has grown to roughly 104,000 GitHub stars and 13,700 forks (&lt;a href="https://github.com/google-gemini/gemini-cli" rel="noopener noreferrer"&gt;Gemini CLI GitHub&lt;/a&gt;, 2026). That's not a minor side project — it's the largest agent CLI codebase by community footprint.&lt;/p&gt;

&lt;p&gt;The daily ritual is genuinely similar. Open terminal, point at repo, type a goal, watch a plan appear, approve tool calls, accept the diff. If you blindfolded me and dropped me into a session mid-refactor, I'd need a minute to identify which CLI I was driving. The differences only surface when the agent gets confused, when something fails, or when you need to push past the happy path — and that's where this comparison actually lives.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1608742213509-815b97c30b36%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1608742213509-815b97c30b36%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Dark computer monitor displaying lines of code in an AI-powered developer terminal workflow" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Is Gemini CLI Being Shut Down?
&lt;/h2&gt;

&lt;p&gt;Yes — the original Gemini CLI is being deprecated. Google announced on May 19, 2026 that starting &lt;strong&gt;June 18, 2026&lt;/strong&gt;, Gemini CLI and the Gemini Code Assist IDE extensions stop serving requests for Gemini Code Assist for individuals, Google AI Pro, and Google AI Ultra accounts (&lt;a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026). It is not being wiped off your machine. The free hosted quota that made it worth installing is what's being switched off for personal accounts.&lt;/p&gt;

&lt;p&gt;The headlines flattened this into "Gemini CLI is dead," and that's not quite right. Here's who is actually affected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free, Pro, and Ultra users (most readers of this post):&lt;/strong&gt; After June 18, your existing login stops authorizing the legacy CLI. You either migrate to Antigravity CLI or keep Gemini CLI running by switching to a &lt;strong&gt;paid Gemini API key&lt;/strong&gt; (&lt;a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini Code Assist Standard and Enterprise orgs:&lt;/strong&gt; Nothing changes. Google keeps supporting Gemini CLI and the IDE extensions with the latest models for licensed organizations and for Gemini Code Assist for GitHub (&lt;a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The open-source repo:&lt;/strong&gt; The Gemini CLI codebase stays public under Apache 2.0 with its ~104K GitHub stars intact. What ends is the hosted serving for free tiers, not the project (&lt;a href="https://www.theregister.com/ai-ml/2026/05/20/bye-bye-gemini-cli-google-nudges-devs-toward-antigravity/5243605" rel="noopener noreferrer"&gt;The Register&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I ran the migration the week it was announced. The good news: Google published migration docs at &lt;code&gt;antigravity.google/docs/gcli-migration&lt;/code&gt;, and my &lt;code&gt;GEMINI.md&lt;/code&gt;, MCP configs, and most extensions carried over with minor edits. The annoying news: if you leaned on the free tier across a few machines like I did, June 18 is a hard deadline, not a soft nudge. Plan for it now, not on the 17th.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the Best Gemini CLI Alternative?
&lt;/h3&gt;

&lt;p&gt;If you're looking for a Gemini CLI alternative, there are three honest options, ordered from least to most disruption. &lt;strong&gt;Antigravity CLI&lt;/strong&gt; is Google's own successor and the lowest-friction move if you want to stay in the Gemini ecosystem. &lt;strong&gt;Claude Code&lt;/strong&gt; is the alternative most former Gemini CLI users I know are actually testing right now, because it's the most mature paid agent — and it's what the rest of this post compares head to head. &lt;strong&gt;Keeping Gemini CLI on a paid Gemini API key&lt;/strong&gt; works if you specifically need the open-source binary or air-gapped guarantees and don't mind metered billing. What no longer exists is the old 1,000-requests-a-day deal on the legacy CLI — but Antigravity itself keeps a genuinely generous free allotment (gated by your Google account tier), which remains its clearest edge over Claude Code's no-free-tier model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;if Claude Code is your likely landing spot, here's its full pricing and limits breakdown&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How Does the Pricing Reality Actually Compare?
&lt;/h2&gt;

&lt;p&gt;Here is where the two products are most obviously different — though that gap is narrowing as the free tier sunsets. Through June 18, 2026, Gemini CLI gives you a 1M token context window and 1,000 free model requests per day at 60 requests per minute on a personal Google account, no credit card required (&lt;a href="https://geminicli.com/docs/resources/quota-and-pricing/" rel="noopener noreferrer"&gt;Gemini CLI Docs&lt;/a&gt;, 2026). After that date, as covered above, free personal access moves to Antigravity CLI or a paid API key. Claude Code has no free tier. It starts at the Anthropic Pro plan ($20/month) for limited access and scales through Max 5x ($100/month) and Max 20x ($200/month) for serious daily-driver use (&lt;a href="https://claude.com/pricing" rel="noopener noreferrer"&gt;Anthropic Pricing&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;According to Google's developer pricing page, the Gemini 2.5 Pro API costs $1.25 per million input tokens and $10 per million output tokens for context windows under 200K, doubling to $2.50 and $20 above that (&lt;a href="https://ai.google.dev/gemini-api/docs/pricing" rel="noopener noreferrer"&gt;Google AI Pricing&lt;/a&gt;, 2026). Claude Opus 4.7 sits at $5 per million input and $25 per million output, and Sonnet 4.6 at $3 and $15 (&lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;Anthropic API Docs&lt;/a&gt;, 2026). Per-token, Gemini is meaningfully cheaper.&lt;/p&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%2Fd8r3y0xwb56cx059qo4z.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%2Fd8r3y0xwb56cx059qo4z.png" alt="Grouped bar chart comparing API cost per million tokens in May 2026. Gemini 2.5 Pro at $1.25 input and $10 output for under 200K context, $2.50 and $20 for long-context. Claude Sonnet 4.6 at $3 and $15. Claude Opus 4.7 at $5 and $25." width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But raw per-token pricing isn't what most people actually pay. Here's the real shape of it from my own usage over the last six months:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free Gemini CLI (until June 18, 2026)&lt;/strong&gt;: For students, side projects, and one-off scripts, it's genuinely free. The 1,000 daily requests cover a surprising amount of work if you avoid burning them on chitchat, and the 1M context window is included with no upcharge. Just watch the clock — this is the exact tier being switched off for personal accounts, after which the equivalent entry point is $19.99/month Google AI Pro on Antigravity CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google AI Pro ($19.99/month)&lt;/strong&gt;: Lifts daily limits and gives priority access, and post-transition it's the tier that unlocks the full Antigravity platform — desktop app, CLI, and SDK (&lt;a href="https://9to5google.com/2026/04/11/google-ai-pro-ultra-features/" rel="noopener noreferrer"&gt;9to5Google&lt;/a&gt;, 2026). I burn through it in maybe four hours of heavy agentic work — fine for moderate use, tight for a serious daily driver.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google AI Ultra ($249.99/month)&lt;/strong&gt;: Includes $100/month of Google Cloud credits and the highest CLI limits (&lt;a href="https://gemini.google/subscriptions/" rel="noopener noreferrer"&gt;Gemini Subscriptions&lt;/a&gt;, 2026). It's the closest equivalent to Claude Max 20x by intent, but priced higher.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Max 5x ($100/month)&lt;/strong&gt;: Comfortable for one developer doing 6–8 hours of agent-heavy work a day. I rarely hit limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Max 20x ($200/month)&lt;/strong&gt;: Same price as ChatGPT Pro and gives effectively unlimited Claude Code for solo work, in my experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My finding:&lt;/strong&gt; Over a 30-day window where I logged session token usage on a single mid-size Laravel + Next.js project, Gemini CLI used roughly 40% more tokens than Claude Code on the same task set — partly because the 1M context tempts you into including everything, and partly because Gemini's responses are more verbose. The free tier still came out ahead on cost, but the "cheaper per token" gap narrows once you account for behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The crossover point is around three hours per day of active agent driving. Below that, Gemini CLI's free tier is unbeatable — at least until June 18, after which the cost-conscious entry point becomes the $19.99 Antigravity tier rather than $0. Above three hours, Claude Max 5x is the better deal for sustained throughput. There's also a hidden cost on the Claude side: on April 21, 2026, Anthropic briefly removed Claude Code from the $20 Pro tier and then reversed the decision within 24 hours (&lt;a href="https://simonwillison.net/2026/Apr/22/claude-code-confusion/" rel="noopener noreferrer"&gt;Simon Willison&lt;/a&gt;, 2026). The episode reminded a lot of people that the pricing model isn't fully settled.&lt;/p&gt;

&lt;p&gt;One more thing worth naming: API access economics differ in ways that aren't obvious from the price list. Anthropic offers cache hits at 10% of the base input price and a 50% Batch API discount (&lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;Anthropic API Docs&lt;/a&gt;, 2026). Google offers a 50% batch discount on Gemini 2.5 Pro through Vertex AI (&lt;a href="https://cloud.google.com/vertex-ai/generative-ai/pricing" rel="noopener noreferrer"&gt;Vertex AI Pricing&lt;/a&gt;, 2026). If your workload is batch-heavy or repeats similar prompts, the real cost can be half the headline number on both sides. For interactive agent use, the cache hit pricing is what actually drives Claude Code's daily economics down — that's a real piece of why Max 5x works at $100/month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;complete guide to Claude Code pricing and rate limits&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Does Gemini's 1M Context Window Actually Matter in Daily Work?
&lt;/h2&gt;

&lt;p&gt;On paper, this is the most decisive Gemini advantage. The 1M token context window is standard across the entire Gemini 2.5 Pro lineup, including the free tier (&lt;a href="https://ai.google.dev/gemini-api/docs/rate-limits" rel="noopener noreferrer"&gt;Google AI for Developers&lt;/a&gt;, 2026). Claude finally caught up — Anthropic shipped 1M context windows for Sonnet 4.6 and Opus 4.6 to general availability on March 13, 2026 at standard per-token pricing (&lt;a href="https://platform.claude.com/docs/en/build-with-claude/context-windows" rel="noopener noreferrer"&gt;Anthropic Context Windows&lt;/a&gt;, 2026). But the experience is different because Gemini treats long context as default behavior, while Claude treats it as a feature you opt into.&lt;/p&gt;

&lt;p&gt;In practice, three things actually change when you have 1M tokens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Whole-repo reasoning.&lt;/strong&gt; I can dump a 200-file mid-size codebase into a single Gemini CLI session without thinking about it. Claude Code with extended context can do this too, but the model attention degrades faster on truly enormous contexts in my testing — the lift-and-shift refactor work where Claude shines tends to live in the 50K–200K context band.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-running session memory.&lt;/strong&gt; Gemini CLI maintains context across long sessions more gracefully. Claude Code is more aggressive about compaction. The trade-off is that Gemini's "remembers everything" mode sometimes drags in stale context that biases the next response, where Claude's tighter context is more deliberate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document-heavy work.&lt;/strong&gt; When the task is "read these 30 PDFs and summarize the differences," Gemini wins outright — both because of context size and because Google's multimodal handling is more native.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Where the 1M context matters less than the marketing suggests: most coding work doesn't actually fit nicely into a 1M context shaped reasoning task. Real refactors live across 5–30 files. Real bug hunts involve targeted reading, not exhaustive ingestion. The 1M token marketing claim is impressive, but the median useful session for both tools uses 30K–80K tokens. That's not a knock on Gemini — it's a reminder that "biggest context" is a noisy proxy for "best agent."&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1754548930550-be9fa88874f4%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1754548930550-be9fa88874f4%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Multi-monitor developer workspace running code and AI coding agents in parallel" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;how the underlying memory architectures differ across major AI assistants&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do the Models Actually Behave on Real Codebases?
&lt;/h2&gt;

&lt;p&gt;Benchmarks first, then experience. Claude Opus 4.7 currently leads SWE-bench Verified at 87.6% (&lt;a href="https://www.anthropic.com/news/claude-opus-4-7" rel="noopener noreferrer"&gt;Anthropic News&lt;/a&gt;, 2026). Gemini 3.1 Pro, released on February 19, 2026, sits at 80.6% on the same benchmark and 54.2% on the harder SWE-Bench Pro (&lt;a href="https://deepmind.google/models/model-cards/gemini-3-1-pro/" rel="noopener noreferrer"&gt;DeepMind Gemini 3.1 Pro Model Card&lt;/a&gt;, 2026). Claude Opus 4.7's SWE-Bench Pro score is 64.3% — a meaningful 10-point gap on the harder evaluation (&lt;a href="https://www.vellum.ai/blog/claude-opus-4-7-benchmarks-explained" rel="noopener noreferrer"&gt;Vellum&lt;/a&gt;, 2026).&lt;/p&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%2F8zuw9i6qgade154u5cby.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%2F8zuw9i6qgade154u5cby.png" alt="Horizontal bar chart of SWE-bench Verified scores in May 2026. Claude Opus 4.7 at 87.6 percent, GPT-5.2 Codex around 85 percent, Gemini 3.1 Pro at 80.6 percent, Claude Sonnet 4.6 at 79.6 percent." width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Benchmarks are a noisy signal — both Anthropic and Google have spent real engineering on these specific evaluations. The pattern I see in actual repos is what matters more.  Claude is more cautious and more aligned with "ask before doing." When it's wrong, it backs out cleanly. Gemini is more confident, sometimes overconfident — it will happily generate 200 lines of code that look right and aren't, and the recovery loop costs more than the original task would have on Claude.&lt;/p&gt;

&lt;p&gt;On a 20-file refactor I ran on the same Laravel codebase three different ways — first with Claude Code, then a fresh session with Gemini CLI on the free tier, then Gemini CLI with Gemini 2.5 Pro paid — Claude got it right in three prompts with four confirmation stops. Free-tier Gemini got 80% there in one prompt but missed a service-binding update that caused two test failures. Paid Gemini did better, but still introduced one stale type import that I caught in review. None of these are disqualifying. They're a consistent pattern: Claude is conservative-by-default, Gemini is aggressive-by-default.&lt;/p&gt;

&lt;p&gt;There's a meta-pattern worth naming. Pragmatic Engineer's 2026 survey of ~906 engineers showed Claude Code at 46% "most loved" tool — vs Cursor at 19%, GitHub Copilot at 9%, and Codex at 6% (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). JetBrains' April 2026 report tracks 24% Claude Code adoption at work in the US and Canada (18% globally), up from roughly 3% in mid-2025 — a 6x increase in nine months, with a 91% CSAT and NPS of 54 (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026). Gemini CLI adoption is harder to measure but sits around 10% in the same Pragmatic survey. The emotional pull is decisively with Claude right now. That's not destiny — it's a snapshot.&lt;/p&gt;

&lt;p&gt;One pattern that doesn't show up in benchmarks but matters in daily use: codebase reasoning across multiple files. When I ask either tool to "find where the user authentication flow connects to the billing webhook," Claude tends to do less searching but more careful synthesis. Gemini casts a wider net — it reads more files thanks to the bigger context — but the summary it produces is sometimes diluted by including irrelevant matches. On Terminal-Bench 2.0, the gap is visible at the system level: Codex CLI with GPT-5.2 leads at 63%, Claude Opus 4.5 with Terminus 2 sits at 58%, and Gemini 3 Pro with Terminus 2 at 57% (&lt;a href="https://www.tbench.ai/leaderboard/terminal-bench/2.0" rel="noopener noreferrer"&gt;Terminal-Bench Leaderboard&lt;/a&gt;, 2026). The Aider polyglot leaderboard tells a similar story — Claude Opus 4.5 at 89.4% vs GPT-5 at 88% with Gemini further back (&lt;a href="https://aider.chat/docs/leaderboards/" rel="noopener noreferrer"&gt;Aider Leaderboards&lt;/a&gt;, 2026). The benchmarks aren't the whole story, but they're consistent with what I see when I drive both tools through the same task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/cursor-code-review-across-codex-windsurf-and-45-ai-agents/" rel="noopener noreferrer"&gt;broader landscape including Cursor, Codex, and Windsurf&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What About Tool Use, MCP, and the Extensibility Story?
&lt;/h2&gt;

&lt;p&gt;This is where the comparison gets more interesting and where the older "Claude wins extensibility" narrative needs an update. Both products now support the Model Context Protocol. Gemini CLI has full MCP server support via stdio and HTTP transports, configured through &lt;code&gt;~/.gemini/settings.json&lt;/code&gt; (&lt;a href="https://geminicli.com/docs/tools/mcp-server/" rel="noopener noreferrer"&gt;Gemini CLI MCP Docs&lt;/a&gt;, 2026). Google also shipped Hooks as a default capability in Gemini CLI v0.26.0 — they cover pre/post tool execution, session events, and prompt submission (&lt;a href="https://developers.googleblog.com/tailor-gemini-cli-to-your-workflow-with-hooks/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;What Gemini CLI doesn't have, and Claude Code does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills.&lt;/strong&gt; Reusable prompt + tool bundles that bundle workflows into named, invokable units. Anthropic shipped them in October 2025 and the ecosystem (skills.sh and others) has grown around them. The full documentation lives at &lt;a href="https://code.claude.com/docs/en/skills" rel="noopener noreferrer"&gt;code.claude.com/docs/en/skills&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subagents.&lt;/strong&gt; Model-launched workers with their own context windows. You spawn one for research, code review, or exploration, and the parent agent continues without polluting its context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugins.&lt;/strong&gt; A first-class extension surface for community-authored tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemini CLI has Extensions, which are conceptually similar to Skills + Plugins combined — they package prompts, MCP servers, and slash commands together. The implementation is younger and the ecosystem thinner. If you're starting from zero today, both surfaces are usable. If you're inheriting a setup with a dozen carefully tuned workflows, Claude Code's ecosystem has more depth.&lt;/p&gt;

&lt;p&gt;Here's the twist that reframes this whole section, though: the gap I just described is a snapshot of the &lt;em&gt;legacy&lt;/em&gt; Gemini CLI. Its successor, Antigravity CLI, ships first-class Skills, Hooks, and async Subagents (&lt;a href="https://agentpedia.codes/blog/antigravity-cli-deep-dive" rel="noopener noreferrer"&gt;Agentpedia&lt;/a&gt;, 2026). So "Claude Code wins extensibility" is true today and largely false by Q3. I dig into what that means in the dedicated Antigravity section below.&lt;/p&gt;

&lt;p&gt;Here's the part that doesn't get said often enough: the extensibility surface is also the attack surface. Anthropic patched four CVEs against Claude Code in early 2026 — RCE via untrusted project config, path bypass, command injection, and DNS exfiltration (&lt;a href="https://research.checkpoint.com/2026/rce-and-api-token-exfiltration-through-claude-code-project-files-cve-2025-59536/" rel="noopener noreferrer"&gt;Check Point Research&lt;/a&gt;, 2026). Three of those exploited the hook/MCP/skill layer. Gemini CLI being newer and Apache 2.0 means more eyes are on it, but it also means the attack surface is younger and less battle-tested. Neither is a reason to avoid either tool, but it's a reminder that running an agent on a freshly cloned untrusted repo is not as safe as the UX makes it feel.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Code displayed on a black screen showing the kind of output AI CLI tools generate" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;deterministic hook gates Claude Code can't reason its way past&lt;/p&gt;

&lt;p&gt;when to reach for Skills vs MCP servers&lt;/p&gt;




&lt;h2&gt;
  
  
  How Does the Terminal UX Actually Compare?
&lt;/h2&gt;

&lt;p&gt;This is the part that almost never shows up in feature checklists, and it's the thing that drives my daily preference more than benchmarks do. Both CLIs render a similar visual surface — a chat pane, a tool-call list, a diff preview, an approval prompt. But the small details are different in ways that compound across a working day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code's interactive panel is denser and more interruption-friendly.&lt;/strong&gt; I can hit a slash command mid-stream, switch from auto-accept to plan mode in one keystroke, fork a session, or push a Subagent off to do a side task while the main thread keeps going. The keyboard ergonomics feel deliberate. There's a permission UI tier that lets me allow a specific tool for the rest of the session without granting blanket access — small, but I lean on it constantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini CLI's UX is closer to a chat-first design with tools bolted on.&lt;/strong&gt; The diffs render cleanly, the tool calls are explicit, and the VS Code Companion extension gives you in-editor diff previews (&lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemini-cli-open-source-ai-agent/" rel="noopener noreferrer"&gt;Google Blog&lt;/a&gt;, 2025). What's missing for me is the in-session flexibility — switching between modes, gating specific tool classes, and recovering from a derailed plan takes more keystrokes. None of these are dealbreakers. They're the kind of papercuts you notice on hour six of a long day.&lt;/p&gt;

&lt;p&gt;Two specific things I keep running into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plan mode.&lt;/strong&gt; Claude Code's plan mode — where the agent proposes a written plan you approve before any tool use — is the single biggest UX feature I rely on. Gemini CLI doesn't have a direct equivalent. You can prompt it into "show me a plan first" behavior, but it's not enforced, and on long tasks the agent will drift back to "do then show" without you noticing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session forking.&lt;/strong&gt; Claude Code lets me fork a session at any point and try a different approach in parallel without losing my place. Gemini CLI requires me to open a separate terminal and re-instantiate context, which negates some of the 1M-context advantage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the other hand, Gemini CLI's GitHub Actions integration — currently in beta — is genuinely useful for running Gemini against pull requests at scale (&lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemini-cli-github-actions/" rel="noopener noreferrer"&gt;Google Blog&lt;/a&gt;, 2025). Claude Code has agentic CI patterns through hooks and headless mode, but the out-of-the-box CI story is less polished. If a meaningful chunk of your agent use is "run on every PR" rather than "drive interactively in a terminal," Gemini wins that lane.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1606606767399-01e271823a2e%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1606606767399-01e271823a2e%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Matrix-style security code on a MacBook Pro screen representing AI command-line tool capabilities" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Antigravity CLI vs Claude Code: The Comparison That Now Matters
&lt;/h2&gt;

&lt;p&gt;For most readers, the real 2026 decision isn't Gemini CLI vs Claude Code anymore — it's Antigravity CLI vs Claude Code, because Antigravity is what your Gemini login points to after June 18. Google unveiled Antigravity at I/O 2026 on May 19 as a standalone, agent-first platform: a Go-based CLI, an SDK, a desktop app, managed execution, and enterprise support, all on a shared runtime (&lt;a href="https://www.marktechpost.com/2026/05/19/google-launches-antigravity-2-0-at-i-o-2026-a-standalone-agent-first-platform-with-cli-sdk-managed-execution-and-enterprise-support/" rel="noopener noreferrer"&gt;MarkTechPost&lt;/a&gt;, 2026). It isn't a Gemini CLI point release. It's a different product wearing the migration path.&lt;/p&gt;

&lt;p&gt;What changes for this comparison, concretely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The feature checklist now matches.&lt;/strong&gt; Antigravity CLI ships Skills, Hooks, and async Subagents — the exact extensibility trio that was Claude Code's clearest moat (&lt;a href="https://agentpedia.codes/blog/antigravity-cli-deep-dive" rel="noopener noreferrer"&gt;Agentpedia&lt;/a&gt;, 2026). Its async subagents run long refactors or parallel research in the background without blocking your prompt, which is arguably ahead of where Claude's subagents sit today. Extensions get rebranded to Plugins, and MCP support carries over.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's faster, and it's closed-source.&lt;/strong&gt; The Go rewrite is noticeably snappier than the old Node-based CLI, and the CLI shares a runtime with the desktop app so updates land everywhere at once. The catch: Antigravity is &lt;strong&gt;not&lt;/strong&gt; open source. The binary is free to install and the repo is public, but the source isn't (&lt;a href="https://www.theregister.com/ai-ml/2026/05/20/bye-bye-gemini-cli-google-nudges-devs-toward-antigravity/5243605" rel="noopener noreferrer"&gt;The Register&lt;/a&gt;, 2026). The open-governance argument that favored Gemini CLI does not transfer to its successor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing undercuts Claude.&lt;/strong&gt; Antigravity access is gated by your Google account tier, and $20/month Google AI Pro unlocks the full platform — desktop, CLI, and SDK (&lt;a href="https://agentpedia.codes/blog/antigravity-cli-deep-dive" rel="noopener noreferrer"&gt;Agentpedia&lt;/a&gt;, 2026). That's the same entry price as Claude Pro but a more complete bundle, and a fifth of Claude Max 5x.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So where does that leave Antigravity CLI vs Claude Code? Closer than legacy Gemini CLI ever was. Claude Code still holds the two advantages that are hardest to copy: raw model quality (Opus 4.7 at 87.6% SWE-bench Verified vs Gemini 3.1 Pro at 80.6%) and a year-deep, battle-tested extension ecosystem with a 91% CSAT behind it. Antigravity counters with price, background multi-agent orchestration, and a desktop-plus-CLI-plus-SDK surface Claude doesn't match in a single bundle. The cleanest framing: Antigravity is the stronger &lt;em&gt;platform&lt;/em&gt; play and the obvious migration for Gemini loyalists, while Claude Code is still the more reliable &lt;em&gt;agent&lt;/em&gt; on hard, trust-sensitive work. If you were picking Gemini CLI for the free tier and the open license, neither reason survives the transition — which is exactly why this comparison is worth re-running for yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Take After Testing Antigravity CLI
&lt;/h3&gt;

&lt;p&gt;I've put Antigravity CLI through real work alongside Claude Code and the other terminal agents, and I'll be blunt about where I landed. The single biggest problem for me: &lt;strong&gt;there's still no real plan mode&lt;/strong&gt; — the one Gemini CLI gap I flagged above that the rewrite didn't fix. Claude Code's plan mode (propose a written plan, I approve it, &lt;em&gt;then&lt;/em&gt; it touches anything) is the feature I lean on hardest, and Antigravity inherited Gemini CLI's lack of a true equivalent. For the kind of careful, multi-step work I do, that alone is a deal-breaker.&lt;/p&gt;

&lt;p&gt;Stability is the other gap. Head to head, Claude Code feels mature and stable in a way Antigravity doesn't yet. Antigravity reads like exactly what it is: a freshly launched rewrite. I hit rough edges, inconsistent behavior, and the general sense that it needs a few more release cycles to settle. It'll get there — Google's cadence is fast — but "will get there" isn't "is there."&lt;/p&gt;

&lt;p&gt;Then there's the model gap, which the benchmarks flag and daily use confirms: Claude still wins by a meaningful margin on hard, careful work. The one thing Antigravity genuinely has on Claude Code is &lt;strong&gt;generous free usage.&lt;/strong&gt; Even after the legacy Gemini CLI free tier sunsets, Antigravity's free allotment is real, and Claude Code has no free tier at all. If budget is your binding constraint, that's a legitimate reason to keep Antigravity in the rotation. For everything else, I'm still reaching for Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-vs-cursor-honest-2026-comparison-from-daily-use/" rel="noopener noreferrer"&gt;how Claude Code stacks up against Cursor if you're weighing more than two agents&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature Matrix: Where Each Tool Genuinely Wins
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Gemini CLI&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Status (May 2026)&lt;/td&gt;
&lt;td&gt;Deprecated — free/Pro/Ultra serving ends June 18, 2026; succeeded by Antigravity CLI&lt;/td&gt;
&lt;td&gt;Active, no changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Underlying model&lt;/td&gt;
&lt;td&gt;Gemini 2.5 Pro / Gemini 3.1 Pro&lt;/td&gt;
&lt;td&gt;Claude Opus 4.7 / Sonnet 4.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench Verified&lt;/td&gt;
&lt;td&gt;80.6% (Gemini 3.1 Pro)&lt;/td&gt;
&lt;td&gt;87.6% (Opus 4.7)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SWE-Bench Pro&lt;/td&gt;
&lt;td&gt;54.2%&lt;/td&gt;
&lt;td&gt;64.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache 2.0 (open source)&lt;/td&gt;
&lt;td&gt;Closed-source (npm)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub stars&lt;/td&gt;
&lt;td&gt;104K, 13.7K forks&lt;/td&gt;
&lt;td&gt;n/a (closed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default context window&lt;/td&gt;
&lt;td&gt;1M tokens (standard)&lt;/td&gt;
&lt;td&gt;1M tokens GA since March 13, 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;1,000 req/day, 60 req/min (ends June 18, 2026)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP support&lt;/td&gt;
&lt;td&gt;Yes (stdio + HTTP)&lt;/td&gt;
&lt;td&gt;Yes (original implementation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hooks&lt;/td&gt;
&lt;td&gt;Yes (default since v0.26.0)&lt;/td&gt;
&lt;td&gt;Yes (mature, 9+ lifecycle events)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills&lt;/td&gt;
&lt;td&gt;Legacy: no (Extensions closest). Antigravity: yes&lt;/td&gt;
&lt;td&gt;Yes (Oct 2025+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subagents&lt;/td&gt;
&lt;td&gt;Legacy: no. Antigravity: yes (async)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugins&lt;/td&gt;
&lt;td&gt;Extensions (Plugins on Antigravity)&lt;/td&gt;
&lt;td&gt;Plugins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE integration&lt;/td&gt;
&lt;td&gt;VS Code Companion&lt;/td&gt;
&lt;td&gt;VS Code, JetBrains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry pricing&lt;/td&gt;
&lt;td&gt;Free until June 18; then $19.99/mo Google AI Pro (Antigravity)&lt;/td&gt;
&lt;td&gt;$20/mo Pro (limited)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid mid-tier&lt;/td&gt;
&lt;td&gt;$19.99/mo Google AI Pro&lt;/td&gt;
&lt;td&gt;$100/mo Max 5x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top pricing&lt;/td&gt;
&lt;td&gt;$249.99/mo Google AI Ultra&lt;/td&gt;
&lt;td&gt;$200/mo Max 20x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API input/output (per 1M)&lt;/td&gt;
&lt;td&gt;$1.25 / $10 (Gemini 2.5 Pro ≤200K)&lt;/td&gt;
&lt;td&gt;$5 / $25 (Opus 4.7)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open governance&lt;/td&gt;
&lt;td&gt;Gemini CLI: yes (Apache 2.0). Antigravity: no&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSAT / NPS&lt;/td&gt;
&lt;td&gt;Not publicly reported&lt;/td&gt;
&lt;td&gt;91% / 54 (JetBrains, 2026)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recent CVEs&lt;/td&gt;
&lt;td&gt;None publicly disclosed&lt;/td&gt;
&lt;td&gt;4 patched in early 2026&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The matrix tells you what. It doesn't tell you what to actually do. The next section does.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which One Should Be Your Daily Driver in 2026?
&lt;/h2&gt;

&lt;p&gt;Use this framework. The decision isn't "which is better" — it's "which fits the work you do most."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick Gemini CLI (or its Antigravity successor) as your daily driver if:&lt;/strong&gt; — with the caveat that after June 18, "Gemini CLI" effectively means Antigravity CLI for free, Pro, and Ultra accounts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're cost-sensitive or just starting out — the free tier is genuinely usable, not a teaser, through June 18; after that the $19.99/mo Antigravity tier is the cost-sensitive pick.&lt;/li&gt;
&lt;li&gt;You work on document-heavy or whole-repo reasoning tasks where 1M context is load-bearing.&lt;/li&gt;
&lt;li&gt;You need open-source guarantees for legal, audit, or air-gapped reasons — but note this holds for the legacy Gemini CLI, not its closed-source Antigravity successor. If open governance is a hard requirement, that's now a reason to look elsewhere, not toward Antigravity.&lt;/li&gt;
&lt;li&gt;You're already inside the Google Cloud ecosystem and Vertex AI billing makes sense.&lt;/li&gt;
&lt;li&gt;You want background multi-agent orchestration — Antigravity's async subagents are a genuine reason to move, not just a forced migration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pick Claude Code as your daily driver if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You spend most of your time in repos you trust, doing focused refactor and debug work.&lt;/li&gt;
&lt;li&gt;You'll actually use Skills, Subagents, and Hooks (otherwise you're paying $100+/mo for a CLI that's roughly comparable on the surface).&lt;/li&gt;
&lt;li&gt;You value model recovery behavior on hard tasks more than raw context size.&lt;/li&gt;
&lt;li&gt;You can afford Max 5x or Max 20x.&lt;/li&gt;
&lt;li&gt;You want the highest reported developer satisfaction (91% CSAT) and don't mind paying for it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Run both if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're doing 6+ hours of agent-heavy work daily.&lt;/li&gt;
&lt;li&gt;You want a second opinion on hard tasks — one agent's stuck plan often unblocks fast in the other.&lt;/li&gt;
&lt;li&gt;You work across language ecosystems where the models diverge. I find Claude stronger on PHP, Ruby, and complex TypeScript refactors. Gemini is stronger on Python, data work, and anything multimodal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pragmatic Engineer's survey reflects how the market is actually behaving: 70% of engineers run 2–4 AI tools simultaneously, and 15% run five or more (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). Treating this as a one-winner question is the wrong frame. The cost of running both — especially when Gemini CLI's free tier is one of them — is rounding error for any working developer.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1754039985001-ccafee437736%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1754039985001-ccafee437736%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Developer working on multiple screens in a dark modern office writing code with AI assistance" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My current setup, in case it's useful: Claude Max 20x is the daily driver. Gemini CLI free tier is the second opinion (and becomes Antigravity CLI once the June 18 cutoff lands). When Claude gets confused on a long task — usually around the 45-minute mark on something architecturally tangled — I'll fork the conversation, paste the state into a fresh Gemini session, and let the 1M context chew on the whole repo. The disagreement between them is more useful than either single answer.&lt;/p&gt;

&lt;p&gt;the full multi-model workflow including ChatGPT and Grok&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Gemini CLI really free, or does the free tier have hidden costs?
&lt;/h3&gt;

&lt;p&gt;Through June 18, 2026, the free tier is genuinely free for personal Google account holders — 1,000 model requests per day at 60 per minute, with the full 1M context window, no credit card required (&lt;a href="https://geminicli.com/docs/resources/quota-and-pricing/" rel="noopener noreferrer"&gt;Gemini CLI Docs&lt;/a&gt;, 2026). Google does collect data to improve models on the free tier, which is the trade-off. After June 18, that free serving ends for personal accounts; you move to Antigravity CLI or keep Gemini CLI on a paid API key. For commercial work where data privacy matters, you'll want a paid Google AI Pro plan or Vertex AI billing either way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Claude Code have a free tier I can try first?
&lt;/h3&gt;

&lt;p&gt;No. Claude Code requires at least an Anthropic Pro subscription at $20/month, and serious daily-driver use realistically starts at Max 5x ($100/month) (&lt;a href="https://claude.com/pricing" rel="noopener noreferrer"&gt;Anthropic Pricing&lt;/a&gt;, 2026). There's no free tier in 2026. You can use pay-per-token API access without a subscription, but it adds up fast for agent-heavy work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Gemini CLI use MCP servers, or is that Claude Code only?
&lt;/h3&gt;

&lt;p&gt;Both products support MCP. Gemini CLI shipped MCP support with stdio and HTTP transports, configured through &lt;code&gt;~/.gemini/settings.json&lt;/code&gt; (&lt;a href="https://geminicli.com/docs/tools/mcp-server/" rel="noopener noreferrer"&gt;Gemini CLI MCP Docs&lt;/a&gt;, 2026). The MCP ecosystem now has roughly 2,300 public servers, and most run in both tools without modification. The Claude-only advantages are Skills and Subagents — MCP is fully shared territory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Gemini 3.1 Pro actually competitive with Claude Opus 4.7 for coding?
&lt;/h3&gt;

&lt;p&gt;Close, but not at parity. Gemini 3.1 Pro scores 80.6% on SWE-bench Verified vs 87.6% for Claude Opus 4.7 (&lt;a href="https://deepmind.google/models/model-cards/gemini-3-1-pro/" rel="noopener noreferrer"&gt;DeepMind&lt;/a&gt;, 2026; &lt;a href="https://www.anthropic.com/news/claude-opus-4-7" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026). The gap is roughly 7 points on the easier benchmark and 10 points on SWE-Bench Pro. In daily use, Claude feels noticeably more careful on hard refactors. Gemini is faster on greenfield work where caution isn't load-bearing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Gemini CLI being shut down?
&lt;/h3&gt;

&lt;p&gt;The original Gemini CLI is being deprecated, not deleted. Starting June 18, 2026, it stops serving requests for free personal, Google AI Pro, and Google AI Ultra accounts (&lt;a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026). Standard and Enterprise organizations keep full access, and the Apache 2.0 source stays public. For most individual developers, though, the practical answer is: yes, your free Gemini CLI stops working that day unless you switch to a paid API key.&lt;/p&gt;

&lt;h3&gt;
  
  
  What replaces Gemini CLI?
&lt;/h3&gt;

&lt;p&gt;Antigravity CLI replaces it. Announced at Google I/O 2026 on May 19, it's a Go-based rewrite that ships as part of a standalone agent platform — CLI, SDK, and desktop app on a shared runtime (&lt;a href="https://www.marktechpost.com/2026/05/19/google-launches-antigravity-2-0-at-i-o-2026-a-standalone-agent-first-platform-with-cli-sdk-managed-execution-and-enterprise-support/" rel="noopener noreferrer"&gt;MarkTechPost&lt;/a&gt;, 2026). It carries over MCP support and adds first-class Skills, Hooks, and async Subagents. Google's migration guide lives at &lt;code&gt;antigravity.google/docs/gcli-migration&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Antigravity CLI better than Claude Code?
&lt;/h3&gt;

&lt;p&gt;It depends on what you weight. Antigravity CLI wins on price ($20/mo Google AI Pro unlocks the full platform vs $100/mo Claude Max 5x) and background multi-agent orchestration. Claude Code still leads on raw model quality (Opus 4.7 at 87.6% SWE-bench Verified vs Gemini 3.1 Pro at 80.6%) and a more mature, battle-tested extension ecosystem (&lt;a href="https://www.anthropic.com/news/claude-opus-4-7" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026). For hard, trust-sensitive refactors I still reach for Claude; for cost and async background work, Antigravity is compelling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I switch from Gemini CLI now, or wait?
&lt;/h3&gt;

&lt;p&gt;If you're on a free, Pro, or Ultra account, start before June 18 rather than on the deadline. The migration is straightforward — your &lt;code&gt;GEMINI.md&lt;/code&gt;, MCP configs, and most extensions carry over to Antigravity CLI with minor edits (&lt;a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/" rel="noopener noreferrer"&gt;Google Developers Blog&lt;/a&gt;, 2026). If open-source governance was your reason for choosing Gemini CLI, this is the moment to evaluate alternatives, because Antigravity is closed-source and that requirement no longer points to Google's tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;If you only have one slot in your shell, here's the honest verdict: Claude Code is the daily driver I'd still recommend for most professional engineers working in trusted repos with budget for $100+/month. The 91% CSAT and the depth of the Skills + Subagents ecosystem aren't accidents. But the comparison just shifted under everyone's feet. The reason most people reached for Gemini CLI — a genuinely free, generous tier — stops being an option for personal accounts on June 18, 2026, and the open-source argument doesn't survive the move to closed-source Antigravity CLI.&lt;/p&gt;

&lt;p&gt;So the real 2026 choice for most readers is Antigravity CLI vs Claude Code, and there it's closer than the legacy matchup ever was: Antigravity matches the feature checklist and undercuts the price, while Claude holds the edge on model quality and ecosystem maturity. If you were a free-tier Gemini CLI user, the cleanest path is to migrate to Antigravity before the deadline, then re-run this comparison against Claude with fresh eyes.&lt;/p&gt;

&lt;p&gt;The smart move for anyone doing serious work is still to run both. Claude Code as primary, Antigravity CLI as second opinion — or vice versa, depending on your budget and the shape of your repos. The terminal-agent paradigm is the new default for AI-assisted coding. Pick the one that fits the work you do most, mind the June 18 deadline if Gemini CLI is in your stack, and don't agonize over the rest. The only mistake is staying on the sidelines while everyone else ships faster than you.&lt;/p&gt;

&lt;p&gt;patterns for orchestrating subagents on long-running tasks&lt;/p&gt;

</description>
      <category>gemini</category>
      <category>claudecode</category>
      <category>antigravitycli</category>
      <category>aicodingagents</category>
    </item>
    <item>
      <title>Claude Code vs Cursor in 2026: 12 Months on Both</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Fri, 22 May 2026 15:19:39 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-code-vs-cursor-honest-2026-comparison-from-daily-use-3b3h</link>
      <guid>https://dev.to/nishilbhave/claude-code-vs-cursor-honest-2026-comparison-from-daily-use-3b3h</guid>
      <description>&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%2Ffsj0d9xt9e14kpsh5ejt.jpg" 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%2Ffsj0d9xt9e14kpsh5ejt.jpg" alt="Editorial dual-monitor workspace at twilight — left screen running an autonomous coding agent transcript, right screen showing an IDE with inline AI suggestions, capturing the two-philosophy split between Claude Code and Cursor" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code vs Cursor in 2026: 12 Months on Both
&lt;/h2&gt;

&lt;p&gt;Most "Claude Code vs Cursor" posts you'll find online either declare a winner from a feature table they never actually used, or refuse to declare one at all because both products run ads. I'll do neither. I've used both as primary tools for the last twelve months — and after running real production work through both, &lt;strong&gt;Claude Code wins for individual developers who reach for premium models&lt;/strong&gt;. Cursor still earns its $20/month, but as the editor partner, not the lead. The rest of this piece is the math and the experience that gets you there.&lt;/p&gt;

&lt;p&gt;Cursor is an AI-augmented IDE where you sit at the wheel and the model rides shotgun. Claude Code is an agentic terminal process where the model drives and you're the safety driver, hands hovering, ready to grab the bar. Both shapes of work happen in a typical day, which is why The Pragmatic Engineer's 2026 developer survey shows 70% of engineers run two to four AI tools at once and 15% run five or more (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). This piece is the honest comparison I wish I'd had when I started: what each tool actually is, where each one genuinely wins, the cost-structure trap most people don't see, and how to pick when you can only run one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/claude-code-vs-codex-cli-an-honest-2026-comparison/" rel="noopener noreferrer"&gt;if you're comparing terminal-only agents, start here instead&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code is the right primary tool for most individual developers in 2026&lt;/strong&gt;, especially anyone running Opus 4.7 for real work, where Cursor's credit-pool model burns ~$45 in a day and Claude Code's session-cap model doesn't.&lt;/li&gt;
&lt;li&gt;Claude Code holds a 91% CSAT and 54 NPS — the highest of any coding tool JetBrains surveyed in 2026 — and 46% of engineers named it the tool they love most, 2.4x Cursor's 19% (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026; &lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;Cursor still earns its $20/month as the editor partner: Tab completion, Cmd+K inline edits, and Composer V2 are genuine wins. The right setup for most professionals: &lt;strong&gt;Claude Code Max 5x ($100) as the primary tool + Cursor Pro ($20) as the editor&lt;/strong&gt;, running Claude Code inside Cursor's terminal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Are Claude Code and Cursor Built on Different Philosophies?
&lt;/h2&gt;

&lt;p&gt;First, kill a misread before it spreads: AI coding tools are not niche anymore. By January 2026, &lt;strong&gt;90% of developers were using at least one AI tool at work&lt;/strong&gt; (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026), and Stack Overflow's 2025 survey put it at 84% using or planning to, with 51% reaching for AI daily (&lt;a href="https://survey.stackoverflow.co/2025/ai/" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2025). So when you see an "18%" figure in this article, it does &lt;em&gt;not&lt;/em&gt; mean only 18% of developers use AI. It means 18% reach for that one specific tool. The question stopped being &lt;em&gt;whether&lt;/em&gt; developers use AI and became &lt;em&gt;which&lt;/em&gt; tool they reach for — and that split is where the real story lives. GitHub Copilot leads it at 29%, with Cursor and Claude Code tied at 18% each.&lt;/p&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%2Fr1ehd5maqvtmmrqruzkr.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%2Fr1ehd5maqvtmmrqruzkr.png" alt="Horizontal bar chart of AI coding tool adoption at work in January 2026: GitHub Copilot 29 percent, Cursor 18 percent, Claude Code 18 percent. 90 percent of developers use at least one AI tool at work." width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fundamental split is who is driving. Cursor and Claude Code sit tied at 18%, but Claude Code climbed there from roughly 3% in April 2025 — a 6x jump in nine months — while Cursor has hovered at this level for over a year (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026). Same headline number, completely different growth shape. The difference reflects what each product is asking the developer to do.&lt;/p&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%2F48anij6f2f9aipudc52n.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%2F48anij6f2f9aipudc52n.png" alt="Line chart showing Claude Code adoption climbing from 3 percent in April 2025 to 12 percent in September 2025 to 18 percent in January 2026, while Cursor remained flat at approximately 18 percent across the same period, with both tools converging at 18 percent" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cursor is a fork of VS Code with deep AI integration baked into every surface. Tab completion happens as you type. Inline edits accept a comment, return a rewritten block. Composer, Cursor's agent mode, opens a chat where you describe a task and watch it spread across files. The cursor — the literal blinking caret on your screen — is the central metaphor. You're still the one moving it, choosing what to accept, deciding when to drive deeper.&lt;/p&gt;

&lt;p&gt;Claude Code refuses that framing entirely. You type a goal, hit enter, and the agent reads files, runs commands, writes code, runs tests, and proposes a final diff. There is no caret. There is no editor window. There is a transcript of decisions you can scroll back through. When I'm using Claude Code well, I'm not editing — I'm reviewing. The model is doing the typing. My job is to set the goal, watch the plan, and reject the bad ones before they propagate.&lt;/p&gt;

&lt;p&gt;This is not a UX preference. It's a fundamentally different contract about who owns the next keystroke. Once you internalize that split, every other feature comparison falls into place. The 91% CSAT score Claude Code earned in the JetBrains survey — the highest of any AI coding tool they measured — and the 46% "love most" vote in Pragmatic Engineer's survey aren't accidents (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026; &lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). They reflect a category of developer who'd rather give up the steering wheel than fight an autocomplete suggestion.&lt;/p&gt;

&lt;p&gt;how the agentic loop actually composes work&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Does Cursor Actually Win in 2026?
&lt;/h2&gt;

&lt;p&gt;Cursor wins anywhere the work is "I know what I want, I just don't want to type it." That covers a surprisingly large share of daily engineering. It also explains why Cursor crossed $1 billion in annualized revenue by November 2025 and reportedly raised at a $29.3 billion valuation in its Series D (&lt;a href="https://sacra.com/c/cursor/" rel="noopener noreferrer"&gt;Sacra&lt;/a&gt;, 2025). It's a developer-driven IDE that wins on inline ergonomics.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1747633130999-dbf3527b0639%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1747633130999-dbf3527b0639%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Clean overhead view of a minimalist dual-monitor desk setup — the kind of workspace where you keep Cursor on one screen and Claude Code on the other" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tab completion is where Cursor's lead is hardest to argue with. The model knows your codebase, your imports, your naming conventions. It finishes the line you were about to write before you've thought about how to write it. For a senior developer with a clear mental model, this is faster than dictating to an agent — you don't lose the flow state of typing. Cmd+K inline edits are the second killer feature. Select a function, describe what you want changed, accept or reject the diff. It's basically a turbocharged refactor menu and it stays close to the developer's intention because the developer is the one selecting what to change.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My finding:&lt;/strong&gt; Last week I converted 47 React class components to function components across our admin panel. Cursor with Tab + Cmd+K finished it in under two hours. I tried the same task with Claude Code in agentic mode the prior week and it took longer because the agent kept exploring files I didn't need touched. Different shapes of work, different tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cursor 2.0 shipped in late 2025 with a multi-agent mode that runs parallel attempts in git worktrees and a frontier in-house model called Composer that targets sub-30-second turns (&lt;a href="https://cursor.com/blog/2-0" rel="noopener noreferrer"&gt;Cursor Blog&lt;/a&gt;, 2025). Composer is now on V2 and it's genuinely impressive for what it is: fast, cheap, and good enough for a large slice of day-to-day work where you don't need frontier reasoning. The honest tradeoff: &lt;strong&gt;Composer V2 is not on par with Claude Opus 4.7 for hard architectural reasoning, gnarly debugging, or multi-step planning across unfamiliar code&lt;/strong&gt;. For everything else, it punches above its price.&lt;/p&gt;

&lt;p&gt;The other genuine Cursor advantage is the model picker. From the same editor I can switch between Claude Sonnet, Claude Opus, GPT-5, Gemini, and Composer V2 depending on the task. Premium model when the work is hard, Composer or Sonnet when it's mostly typing. Claude Code, by definition, runs Claude only. If your workflow benefits from comparing model outputs or picking the cheapest model that's good enough for a given task, Cursor's multi-model surface is a real workflow win, and one I underweight when I evangelize Claude Code to colleagues.&lt;/p&gt;

&lt;p&gt;That said, agentic work still isn't where Cursor feels most native. The product's center of gravity is the cursor in your editor, not a long-running process in your terminal. That center hasn't moved.&lt;/p&gt;

&lt;p&gt;If you're doing inline edits, refactors, UI iteration, working through tutorials, or pair-programming on a problem you already understand, Cursor is genuinely faster than the alternative. Bloomberg reported over 1 million daily active users and 50,000 businesses on Cursor, with 64% of Fortune 500 listed as customers (&lt;a href="https://cursor.com/enterprise" rel="noopener noreferrer"&gt;Cursor Enterprise&lt;/a&gt;, 2026). These aren't curious developers. They're teams that ship every day.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Does Claude Code Actually Win?
&lt;/h2&gt;

&lt;p&gt;Claude Code wins whenever the work is "I want this outcome, please figure out how." That's the agentic shape: long-running, multi-file, requires planning, benefits from running tests and iterating. The 91% customer satisfaction score and the fact that 46% of engineers named it the tool they love most — almost two and a half times Cursor's 19% — both come from this category of work (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026).&lt;/p&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%2Fcppuo4s2kyfsr4iipk4v.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%2Fcppuo4s2kyfsr4iipk4v.png" alt="Horizontal bar chart of AI coding tools developers love most: Claude Code 46 percent, Cursor 19 percent, GitHub Copilot 9 percent, Codex 6 percent, Windsurf 4 percent" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The work where Claude Code genuinely shines: migrations like Node 18 to 22 across a monorepo, jQuery to Vue, or Webpack to Vite. Test scaffolding across dozens of files. End-to-end debugging where you need to read logs, trace through code, and run a fix. Any task where the right answer involves "first read these eight files." It plans. It writes a checklist. It backs out cleanly when you say no. Anthropic's own revenue tells the same story. Claude Code reportedly crossed $1 billion in annualized revenue by November 2025 and helped push Anthropic's total ARR to $19 billion by early March 2026 (&lt;a href="https://finance.yahoo.com/news/anthropic-arr-surges-19-billion-151028403.html" rel="noopener noreferrer"&gt;Reuters via Yahoo Finance&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;Here's what nobody talks about: Claude Code is better at &lt;em&gt;stopping&lt;/em&gt;. When Cursor's agent mode misreads a task, it tends to keep going. It'll happily refactor adjacent code, add tests you didn't ask for, modify config files in service of a goal you didn't set. Claude Code asks more often. It writes a plan first, and the plan stage is genuinely useful for catching misalignment before any code gets written. For risky changes — production code, security-sensitive logic, anything touching billing or auth — that pause is the difference between a clean PR and a postmortem.&lt;/p&gt;

&lt;p&gt;why Claude Code's hook layer matters for safe agentic execution&lt;/p&gt;

&lt;p&gt;The extensibility surface matters more than benchmarks here. Claude Code ships Subagents, Skills, Hooks, and MCP support: primitives for shaping how the agent behaves on your codebase. Cursor has rules and context files but doesn't expose the same depth of programmable agent control. If you spend a lot of time shaping how the AI approaches your code, Claude Code gives you more handles to grab.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do Claude Code and Cursor Compare on Pricing?
&lt;/h2&gt;

&lt;p&gt;The pricing structures look superficially similar — both start at $20/month — but they cap usage in fundamentally different ways. Cursor uses a usage-based credit pool tied to plan price (Pro is $20/month with $20 in API credits, premium models bill down from the pool, Auto mode stays unlimited). Claude Code uses a token budget within rolling 5-hour and 7-day windows (&lt;a href="https://support.claude.com/en/articles/11145838-use-claude-code-with-your-pro-or-max-plan" rel="noopener noreferrer"&gt;Anthropic Help Center&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;Here's the actual feature matrix as of May 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Cursor Pro ($20/mo)&lt;/th&gt;
&lt;th&gt;Claude Code Pro ($20/mo)&lt;/th&gt;
&lt;th&gt;Cursor Ultra ($200/mo)&lt;/th&gt;
&lt;th&gt;Claude Code Max 5x ($100/mo)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary surface&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IDE (VS Code fork)&lt;/td&gt;
&lt;td&gt;Terminal CLI + IDE extension&lt;/td&gt;
&lt;td&gt;IDE&lt;/td&gt;
&lt;td&gt;Terminal CLI + IDE extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Models included&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude, GPT, Composer, others&lt;/td&gt;
&lt;td&gt;Claude (Sonnet, Opus)&lt;/td&gt;
&lt;td&gt;Same with bigger pool&lt;/td&gt;
&lt;td&gt;Same with bigger limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Usage cap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$20 in API credits + unlimited Auto&lt;/td&gt;
&lt;td&gt;~40-80 Sonnet hrs/week, 5-hr windows&lt;/td&gt;
&lt;td&gt;$200 in credits + unlimited Auto&lt;/td&gt;
&lt;td&gt;5x the Pro limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Composer + multi-agent worktrees&lt;/td&gt;
&lt;td&gt;Native agentic (the whole product)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tab completion&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (signature feature)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hooks / Skills / Subagents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (via extension)&lt;/td&gt;
&lt;td&gt;Yes (native)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free tier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hobby (limited completions)&lt;/td&gt;
&lt;td&gt;Anthropic Free (basic Claude.ai access)&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Teams $40/user, Enterprise custom&lt;/td&gt;
&lt;td&gt;Team / Enterprise via Anthropic&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I'm showing Claude Code &lt;strong&gt;Max 5x ($100)&lt;/strong&gt; in the right-hand column instead of Max 20x ($200) because that's the tier most individual developers actually settle on — Max 20x is built for heavy parallel-agent workloads and team accounts, not solo daily use. If you want the full breakdown of which Claude Code tier maps to which workload, see &lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;the honest Pro vs Max breakdown after cycling through every tier&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's the part the spec sheet hides: at $20/month, &lt;strong&gt;the cost-structure favors Claude Code for anyone reaching for premium models more than occasionally&lt;/strong&gt;. Cursor's credit pool ticks down per token whenever you use Claude Opus, GPT-5, or any non-Auto model, so a heavy day on frontier models drains the wallet fast. Claude Code's 5-hour window resets and weekly caps mean you can throw long-running Opus tasks at it without watching the meter. The only scenario where Cursor's pricing model is cleanly better is if you genuinely live in tab completion and Auto mode and almost never reach for premium models. In that case the credit pool barely moves and you get unlimited Auto on top.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My finding:&lt;/strong&gt; I run &lt;strong&gt;Claude Code Max 5x ($100/month)&lt;/strong&gt; alongside &lt;strong&gt;Cursor Pro ($20/month)&lt;/strong&gt; — combined $120/month covers both shapes of work for an individual developer. Max 5x is the sweet spot here. Max 20x at $200 is overkill unless you're running multiple parallel agentic sessions all day or working as part of a team that shares one account. For solo daily use, 5x gives me enough Opus headroom that I almost never hit a wall, while Cursor Pro handles tab + inline edits where the credit pool stays low because Auto mode covers most of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One nuance worth flagging: Anthropic announced on May 13, 2026 that Claude Code's weekly limits are getting a 50% bump and 5-hour limits are doubling through July 2026 — a temporary increase tied to capacity coming online. If you've been bouncing off Claude Code's caps, the ceiling just moved up significantly.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My finding — the Cursor burn-rate nobody warns you about:&lt;/strong&gt; When I activated Cursor Pro, my account showed &lt;strong&gt;$20 in API credits + a $25 bonus credit = $45 total&lt;/strong&gt; in the pool. Running &lt;strong&gt;Claude Opus 4.7&lt;/strong&gt; on heavy multi-file refactor and debugging work, I burned through the entire &lt;strong&gt;$45 in roughly a single day&lt;/strong&gt;. Not a heavy week. A day. That's the part no other comparison article tells you: Cursor's $20 Pro tier is functionally a $45 starter wallet for premium model usage, and premium models drain it fast. After that, you either stop, switch to Auto mode (which uses cheaper models you may not want), or top up at API rates.&lt;/p&gt;

&lt;p&gt;Claude Code Pro is architecturally different. It's not a credit pool — it's &lt;strong&gt;session-based caps&lt;/strong&gt;. You can use Opus until you hit the 5-hour rolling window, then you wait it out and keep going. There is no scenario where you "burn through" your $20/month in a single afternoon. You might hit a session limit and have to pause for a few hours, but your monthly budget is structurally protected from token-burn. If you run Opus heavily, &lt;strong&gt;Claude Code's session-cap model is structurally cheaper than Cursor's credit-pool model at the $20 tier&lt;/strong&gt; — and the math gets more favorable for Claude Code the more frontier-model work you do.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Can You Run Claude Code Inside Cursor? (Yes, and It's Great)
&lt;/h2&gt;

&lt;p&gt;Anthropic's official VS Code extension runs natively inside Cursor's integrated terminal, since Cursor is a VS Code fork (&lt;a href="https://code.claude.com/docs/en/vs-code" rel="noopener noreferrer"&gt;Claude Code Docs&lt;/a&gt;, 2026). This is the setup most experienced users I know are running. You get Cursor's UI for editing — Tab completion, Cmd+K, Composer when you want a quick AI-assisted change — and Claude Code in the terminal for everything agentic.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="Lines of code displayed on a terminal screen — the Claude Code half of the dual-tool workflow" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The setup takes about three minutes. Install Cursor. Open the integrated terminal (Ctrl+&lt;code&gt;). Install Claude Code from npm with&lt;/code&gt;npm install -g @anthropic-ai/claude-code&lt;code&gt;. Run&lt;/code&gt;claude` in the terminal. Authenticate with your Pro or Max plan. Done. The Claude Code panel even appears as a sidebar tab inside Cursor when you install the VS Code extension companion, so you don't have to context-switch between terminal and editor.&lt;/p&gt;

&lt;p&gt;Why this works so well: the two tools don't fight each other. Cursor doesn't know what's happening in the terminal. Claude Code doesn't try to take over your editor. They share the same working directory — when Claude Code edits a file, Cursor picks up the change and re-indexes. When you make an inline edit in Cursor, Claude Code reads the updated file on its next turn. The integration is essentially "they're both pointing at the same git repo."&lt;/p&gt;

&lt;p&gt;The one rough edge: if you have both Cursor's agent mode and Claude Code editing files at the same time, you can get merge confusion. The fix is simple: don't run both agents simultaneously on overlapping files. Use Cursor's Composer for one thing, Claude Code for another, and treat them as separate sessions. In practice I almost always have one of them inactive while the other works.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/cursor-code-review-across-codex-windsurf-and-45-ai-agents/" rel="noopener noreferrer"&gt;if you want a code review skill that works across both tools&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does My Actual Daily Workflow Look Like?
&lt;/h2&gt;

&lt;p&gt;I'll describe a typical day in May 2026, since this is where the comparison gets honest. The Pragmatic Engineer's survey found 95% of developers now use AI tools at least weekly and 75% report AI handles at least half their engineering work — these numbers describe my own work pretty accurately (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026).&lt;/p&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%2F1unf1c0v11dfa5e0z3i5.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%2F1unf1c0v11dfa5e0z3i5.png" alt="Donut chart showing developer AI tool usage breakdown: 70 percent use 2 to 4 tools, 15 percent use 5 or more tools, 15 percent use 1 tool only" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mornings I'm usually exploring something: reading a new library, prototyping a UI change, debugging a tricky bit of state. That's Cursor time. I keep the editor open, use Tab heavily, hit Cmd+K when I want to rewrite a block of code, and occasionally drop into Composer for a contained change ("rewrite this component to use the new useStore hook"). Speed-to-thought is the priority and Cursor's keystroke loop is unbeaten here.&lt;/p&gt;

&lt;p&gt;Afternoons tend toward bigger work: a refactor, a feature that touches many files, a migration script, writing tests for an untested module. That's Claude Code time. I describe the goal, watch the plan, approve the tool calls, and let it run while I review the diff. Claude Code's terminal output is the work surface. I might check Cursor periodically to scroll through what changed, but the agent is in charge.&lt;/p&gt;

&lt;p&gt;The hardest part of this workflow isn't switching between tools. It's noticing which mode you're in. Am I exploring (Cursor) or executing (Claude Code)? Am I editing (Cursor) or supervising (Claude Code)? Once you can answer that question reliably, the dual setup gets out of the way. Most of the meta-cognitive overhead disappears within a couple of weeks.&lt;/p&gt;

&lt;p&gt;One contrarian data point worth sitting with: a METR randomized controlled trial of 16 experienced open-source developers in early 2025 found AI tools actually slowed them down by 19% on average, even though developers &lt;em&gt;believed&lt;/em&gt; they were 20% faster ((&lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/&lt;/a&gt;), 2025). METR is rerunning the experiment for 2026 agentic tools because they suspect the result may not hold for current Claude Code / Composer (&lt;a href="https://metr.org/blog/2026-02-24-uplift-update/" rel="noopener noreferrer"&gt;METR Update&lt;/a&gt;, 2026). The lesson isn't that AI tools don't help. The lesson is that perceived productivity and measured productivity diverge. Pay attention to what you actually ship, not how fast it feels.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which One Should You Pick If You Have to Pick One?
&lt;/h2&gt;

&lt;p&gt;If you can only run one tool, pick based on the shape of the work you do most days, not the spec sheet. Here's the decision framework I'd actually use:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick Cursor if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spend most of your day editing existing code, not planning big changes&lt;/li&gt;
&lt;li&gt;Value tab completion and Cmd+K inline edits above everything else&lt;/li&gt;
&lt;li&gt;Work primarily on UI, frontend, or any code with tight visual feedback loops&lt;/li&gt;
&lt;li&gt;Prefer staying in an editor window and don't enjoy reading agent transcripts&lt;/li&gt;
&lt;li&gt;Are part of a team that already standardized on Cursor and you need to match their setup&lt;/li&gt;
&lt;li&gt;Want a tool that 64% of Fortune 500 already pays for (your IT department will not push back)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pick Claude Code if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spend most of your day planning, refactoring, debugging, or shipping multi-file work&lt;/li&gt;
&lt;li&gt;Are comfortable in the terminal and prefer text-based interfaces&lt;/li&gt;
&lt;li&gt;Want to extend the agent's behavior with hooks, skills, or subagents&lt;/li&gt;
&lt;li&gt;Work on backend code, data pipelines, infrastructure, or anything where the win is "the agent reads ten files and figures out the right change"&lt;/li&gt;
&lt;li&gt;Are willing to trade tab completion for stronger agentic execution&lt;/li&gt;
&lt;li&gt;Run Opus heavily and want a session-cap cost model rather than a per-token credit pool that can burn out in a single day&lt;/li&gt;
&lt;li&gt;Want the tool that 91% of users rate as satisfying and 46% of engineers love most&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pick both if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Already use AI tooling daily and want each shape of work to use the right tool&lt;/li&gt;
&lt;li&gt;Have $40-220/month in budget for tools (most professionals do)&lt;/li&gt;
&lt;li&gt;Are comfortable context-switching between an editor and a terminal&lt;/li&gt;
&lt;li&gt;Work on a mix of inline edits and agentic tasks across a typical week&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most professional developers I'd push toward "both", but with a clear hierarchy. &lt;strong&gt;Claude Code Max 5x ($100/month) as the primary tool, Cursor Pro ($20/month) as the editor partner = $120/month.&lt;/strong&gt; That's the setup that holds up after a full year of daily use. If $120 is over budget, drop to Claude Code Pro + Cursor Pro at $40/month. You'll hit the 5-hour session ceiling on heavy Opus days, but it's still a better starting point than going Cursor-only. Cursor Pro's $45 credit pool will burn out faster than Claude Code Pro's session window resets.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Claude Code better than Cursor?
&lt;/h3&gt;

&lt;p&gt;For individual developers who use premium models regularly, &lt;strong&gt;yes&lt;/strong&gt;. Claude Code wins on agentic multi-file work and ships the strongest extensibility primitives: Hooks, Skills, Subagents, MCP. It also earns the highest customer satisfaction score of any AI coding tool in JetBrains' 2026 survey at 91% CSAT, with 46% of engineers naming it their most-loved tool, 2.4x Cursor's 19% (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026; &lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). The cost-structure also favors Claude Code at the $20 tier. Heavy Opus use can deplete Cursor Pro's $45 credit pool in a single day, while Claude Code Pro's session-cap model keeps your monthly budget structurally protected. Cursor still genuinely wins on inline edits, Tab completion, Cmd+K, and the multi-model picker. So the best setup most days is running both, with Claude Code as the primary and Cursor as the editor partner.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Claude Code inside Cursor?
&lt;/h3&gt;

&lt;p&gt;Yes, fully. Cursor is a VS Code fork, so Anthropic's official VS Code extension installs and runs identically in Cursor (&lt;a href="https://code.claude.com/docs/en/vs-code" rel="noopener noreferrer"&gt;Anthropic Docs&lt;/a&gt;, 2026). Install it via the marketplace or run &lt;code&gt;claude&lt;/code&gt; in the integrated terminal after installing the CLI. The two tools share the working directory and don't interfere with each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the price difference between Claude Code and Cursor in 2026?
&lt;/h3&gt;

&lt;p&gt;Both start at $20/month for the Pro tier. Cursor uses a usage-based credit pool ($20 in API credits plus a $25 bonus credit at signup = $45 total, plus unlimited Auto-mode usage). Claude Code Pro gives you roughly 40-80 hours of Sonnet usage weekly within 5-hour rolling windows. Claude Code Max sits at $100/month (5x Pro limits, the individual sweet spot) and $200/month (Max 20x, for heavy parallel-agent workloads); Cursor's top tier is Ultra at $200/month (&lt;a href="https://support.claude.com/en/articles/11145838-use-claude-code-with-your-pro-or-max-plan" rel="noopener noreferrer"&gt;Anthropic Help Center&lt;/a&gt;, 2026). &lt;strong&gt;The nuance no one quantifies:&lt;/strong&gt; Cursor's credit pool burns down per token when you use premium models like Claude Opus 4.7 — in my testing, heavy Opus use can deplete the full $45 starter pool in roughly a single day. Claude Code Pro uses session-based caps instead, so your monthly budget is structurally protected from a one-day burn-out.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Claude Code work in Cursor's agent mode?
&lt;/h3&gt;

&lt;p&gt;Yes, but you should treat them as separate sessions. Run Claude Code in Cursor's integrated terminal for agentic, multi-file work. Use Cursor's Composer (agent mode) for shorter, contained changes you want to drive from the editor. Avoid running both agents on overlapping files in the same session to prevent merge conflicts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which AI coding tool has more users in 2026?
&lt;/h3&gt;

&lt;p&gt;JetBrains' April 2026 research shows Cursor and Claude Code tied at 18% adoption among developers at work, behind GitHub Copilot at 29% (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026). Cursor reports over 1 million daily active users and 64% of Fortune 500 as customers (&lt;a href="https://cursor.com/enterprise" rel="noopener noreferrer"&gt;Cursor Enterprise&lt;/a&gt;, 2026). Claude Code climbed faster, from 3% in April 2025 to 18% in January 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Verdict: Claude Code Wins, And Here's Why
&lt;/h2&gt;

&lt;p&gt;I'll stop dancing around it. For an individual developer who works in code every day and reaches for premium models when the problem is hard, &lt;strong&gt;Claude Code is the right primary tool in 2026&lt;/strong&gt;. Cursor remains useful — I run it too — but it sits in a supporting role, not the lead.&lt;/p&gt;

&lt;p&gt;Here's the honest argument, stripped of feature-table diplomacy. Cursor genuinely wins on inline ergonomics. Tab completion, Cmd+K, Composer V2 — these are real strengths and I use them daily. The multi-model picker is a workflow advantage if you need to compare outputs across Claude, GPT, Gemini, and Composer. None of that is in dispute.&lt;/p&gt;

&lt;p&gt;But the moment you start running Opus 4.7 for real work — the kind of work that pays for the tool — &lt;strong&gt;Cursor's economics break&lt;/strong&gt;. $45 of credits, including the welcome bonus, lasts about a day. After that you're either paying more, switching to weaker models, or stopping. Claude Code's session-cap model is structurally different: there is no scenario where heavy daily Opus use drains your monthly budget. You wait out a 5-hour window and keep going. &lt;strong&gt;For sustained frontier-model work, Claude Code isn't just better — it's structurally cheaper at every realistic usage level.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Combine that with the agentic execution quality, the Hooks/Skills/Subagents extensibility, and the 91% satisfaction score (the highest of any AI coding tool JetBrains measured in 2026) and the verdict is clear (&lt;a href="https://blog.jetbrains.com/research/2026/04/which-ai-coding-tools-do-developers-actually-use-at-work/" rel="noopener noreferrer"&gt;JetBrains Research&lt;/a&gt;, 2026). The 46% of engineers who named Claude Code their most-loved tool — almost two and a half times Cursor's 19% — aren't picking with their hearts (&lt;a href="https://newsletter.pragmaticengineer.com/p/ai-tooling-2026" rel="noopener noreferrer"&gt;The Pragmatic Engineer&lt;/a&gt;, 2026). They're picking with their afternoons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My actual recommendation:&lt;/strong&gt; run &lt;strong&gt;Claude Code as your primary AI coding tool&lt;/strong&gt;. Max 5x at $100/month is the sweet spot for individual developers. Add &lt;strong&gt;Cursor Pro at $20/month&lt;/strong&gt; as your editor partner for the inline edits and Tab completion you'd otherwise miss. $120/month covers everything, and the cost ceiling stays predictable because Claude Code is doing the heavy lifting on a session-cap model — your budget can't disappear in an afternoon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you can only run one tool, pick Claude Code.&lt;/strong&gt; It's the rare case where the most-loved tool is also the most economically sound for the work it does best.&lt;/p&gt;

&lt;p&gt;Next, if you want to wire Claude Code into your existing tools and services, read &lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;the full MCP server setup playbook&lt;/a&gt;. If you want to extend what the agent can do without writing your own integrations, read &lt;a href="https://maketocreate.com/claude-skills-marketplace-skills-sh-shipping-your-own-skill/" rel="noopener noreferrer"&gt;how the Claude Code skills marketplace works and what to install first&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>cursor</category>
      <category>aicodingagents</category>
      <category>aiide</category>
    </item>
    <item>
      <title>Claude Skills Marketplace: skills.sh &amp; Shipping Your Own Skill</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Wed, 20 May 2026 15:55:33 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-skills-marketplace-skillssh-shipping-your-own-skill-9a5</link>
      <guid>https://dev.to/nishilbhave/claude-skills-marketplace-skillssh-shipping-your-own-skill-9a5</guid>
      <description>&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%2Fcryjhr2wqjbe2xdr6gom.jpg" 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%2Fcryjhr2wqjbe2xdr6gom.jpg" alt="Editorial dashboard hero showing the Claude Skills marketplace as a six-card directory with install counts for find-skills, frontend-design, codeprobe, youtube-inspector, and blog-image." width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Skills Marketplace: skills.sh, Discovery, and Shipping Your Own Skill
&lt;/h2&gt;

&lt;p&gt;The Anthropic SKILL.md spec landed publicly in late 2026; Vercel Labs opened skills.sh in February 2026 (&lt;a href="https://www.infoq.com/news/2026/02/vercel-agent-skills/" rel="noopener noreferrer"&gt;InfoQ&lt;/a&gt;, 2026). Inside ninety days, the meta-discovery skill &lt;code&gt;find-skills&lt;/code&gt; had crossed 1.6 million installs and Vercel's own &lt;code&gt;frontend-design&lt;/code&gt; skill sat around 427,000 (&lt;a href="https://www.skills.sh/" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt;, 2026). That curve isn't normal for a 2026-launched developer ecosystem, and most Claude Code users I talk to don't know it exists.&lt;/p&gt;

&lt;p&gt;I've shipped two skills to the marketplace in the last sixty days — &lt;code&gt;codeprobe&lt;/code&gt;, a 9-category code reviewer, and &lt;code&gt;youtube-inspector&lt;/code&gt;, a 4-skill toolkit for pre-watching videos. This Claude skills marketplace guide is the version I wish I'd had on day one: what a skill actually is, where the marketplace lives, the SKILL.md anatomy that ships, the case studies I have first-hand, and the distribution patterns that earn installs. For the deeper trade-off question — &lt;em&gt;Skills versus MCP servers, when to use which&lt;/em&gt; — keep the full Skills vs MCP decision guide open in the next tab.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Skills are filesystem-based capability modules (a SKILL.md plus optional &lt;code&gt;scripts/&lt;/code&gt; and &lt;code&gt;references/&lt;/code&gt; folders) that load on demand via progressive disclosure — roughly 100 tokens of catalog overhead per installed skill versus 5,000+ for an equivalent MCP server (&lt;a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;skills.sh is the install channel.&lt;/strong&gt; Vercel Labs launched it February 2026; &lt;code&gt;npx skills add &amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;&lt;/code&gt; works for Claude Code, Cursor, Cline, GitHub Copilot, Gemini CLI, and roughly 48 other agent surfaces — every runtime that reads the SKILL.md format pulls from the same shelf.&lt;/li&gt;
&lt;li&gt;Three other directories exist (ClaudeSkills.io, claudemarketplaces.com, SkillsMP) but treat them as discovery surfaces, not install paths. Every confirmed install still flows through the skills.sh CLI.&lt;/li&gt;
&lt;li&gt;The shipping bar is low — a SKILL.md with &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, and a 10-line instruction block is publishable. The hard part is writing the description well enough that the model picks the right skill for the job.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&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%2Fimages.unsplash.com%2Fphoto-1589652717521-10c0d092dea9%3Fixid%3DM3w3MjE1NTZ8MHwxfHNlYXJjaHwyfHxza2lsbHxlbnwwfHx8fDE3NzkyOTI0OTR8MA%26ixlib%3Drb-4.1.0%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1589652717521-10c0d092dea9%3Fixid%3DM3w3MjE1NTZ8MHwxfHNlYXJjaHwyfHxza2lsbHxlbnwwfHx8fDE3NzkyOTI0OTR8MA%26ixlib%3Drb-4.1.0%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="brown and white long coated small dog wearing eyeglasses on black laptop computer - Photo by Cookie the Pom on Unsplash" width="945" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Claude Skill, Actually?
&lt;/h2&gt;

&lt;p&gt;A Claude Skill is a folder with a &lt;code&gt;SKILL.md&lt;/code&gt; file at the root: a YAML frontmatter block (name, description, allowed-tools) plus a body of instructions written for Claude to read on demand. Anthropic shipped the format publicly in late 2026, and it now runs identically across Claude.ai, Claude Code, and the Claude API via the &lt;code&gt;skill_id&lt;/code&gt; parameter (&lt;a href="https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills" rel="noopener noreferrer"&gt;Anthropic Engineering&lt;/a&gt;, 2026). The whole spec fits on a page.&lt;/p&gt;

&lt;p&gt;The mental model that finally clicked for me: a skill is a &lt;em&gt;recipe&lt;/em&gt;, an MCP server is a &lt;em&gt;pantry&lt;/em&gt;. The pantry — your MCP servers — is open all the time, and the model pays the schema cost on every turn even when nothing is touched. A skill sits on the shelf until the model decides it's needed, at which point the runtime loads only the SKILL.md body for that turn. That's the progressive-disclosure pattern, and it's the entire reason skills exist as a category separate from MCP.&lt;/p&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%2Fta0smm1kmvoqnxex330h.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%2Fta0smm1kmvoqnxex330h.png" alt="Three stacked cards showing where Claude Skills run — Claude Code reads from ~/.claude/skills/, Claude.ai loads via web upload, Claude API accepts skills via the skill_id parameter — all using the identical SKILL.md format" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Anthropic agent skills documentation, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Skills can carry &lt;code&gt;scripts/&lt;/code&gt; (any executable Claude has permission to run — Python, shell, Node), &lt;code&gt;references/&lt;/code&gt; (long-form markdown docs the model pulls only when relevant), and even nested skills if the directory grows. But the minimum viable skill is a single SKILL.md with three frontmatter fields. Anthropic's 32-page playbook covers progressive disclosure in depth (&lt;a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf" rel="noopener noreferrer"&gt;Anthropic playbook&lt;/a&gt;, 2026), but you don't need to read it to ship something useful.&lt;/p&gt;

&lt;p&gt;Where they run matters because the runtime conventions differ. Claude.ai loads user skills from the upload UI; Claude Code reads from &lt;code&gt;~/.claude/skills/&lt;/code&gt; (user) and &lt;code&gt;.claude/skills/&lt;/code&gt; (project); the API accepts skills via &lt;code&gt;skill_id&lt;/code&gt; behind a beta header. The SKILL.md format itself is identical — port a skill from Code to .ai by copy-paste, then trim anything that needs a tool the destination doesn't expose. For the longer comparison against MCP servers — token costs, statefulness, when each primitive earns its slot — see the full Skills vs MCP decision guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Does the Skills Marketplace Look in 2026?
&lt;/h2&gt;

&lt;p&gt;The Claude Skills marketplace in 2026 is concentrated in one channel that handles installs and three aggregators that mostly handle discovery. &lt;strong&gt;skills.sh, operated by Vercel Labs, is the install channel.&lt;/strong&gt; It launched February 2026 and works as a thin npm-style installer: &lt;code&gt;npx skills add &amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;&lt;/code&gt; pulls the skill from its GitHub source and lands the files in your local skills directory (&lt;a href="https://www.skills.sh/" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt;, 2026). The same command works for Claude Code, Cursor, Cline, GitHub Copilot, Windsurf, Gemini CLI, and roughly 48 other agent surfaces — every runtime that understands SKILL.md reads from the same shelf.&lt;/p&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%2Fontlco30gml7uwu445hv.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%2Fontlco30gml7uwu445hv.png" alt="The four Claude Skills directories in 2026 — skills.sh by Vercel Labs is the install channel; ClaudeSkills.io with 650+ entries, claudemarketplaces.com with 6,700+, and SkillsMP function as discovery aggregators only" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: skills.sh, ClaudeSkills.io, claudemarketplaces.com, SkillsMP (May 2026)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The skills.sh leaderboard surfaces what the ecosystem actually uses. &lt;code&gt;find-skills&lt;/code&gt; (a meta-skill that searches the directory from inside any agent) has crossed 1.6 million all-time installs; Vercel's &lt;code&gt;frontend-design&lt;/code&gt; skill sits around 427,000 (&lt;a href="https://www.skills.sh/" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt;, 2026). The long tail looks healthy — Vercel Labs, Microsoft Azure, Anthropic, Firebase, and a growing list of individual developers are all publishing. The installer infrastructure is open-source at &lt;a href="https://github.com/vercel-labs/skills" rel="noopener noreferrer"&gt;github.com/vercel-labs/skills&lt;/a&gt; if you want to read how the CLI resolves a repo to a local install.&lt;/p&gt;

&lt;p&gt;The three aggregators are useful for discovery but don't change how you install. &lt;strong&gt;ClaudeSkills.io&lt;/strong&gt; (and its &lt;code&gt;.info&lt;/code&gt; sibling) is a categorized directory of 650+ skills with descriptions and use-case tags. &lt;strong&gt;claudemarketplaces.com&lt;/strong&gt; lists roughly 6,700 entries pulled from various sources — broader coverage, less curation. &lt;strong&gt;SkillsMP&lt;/strong&gt; bills itself as a cross-platform aggregator, mostly forks and mirrors. None run their own install commands. Click "install" on any of them and you'll either get redirected to the skills.sh installer or handed the GitHub URL to clone manually. Treat them as search engines, not registries.&lt;/p&gt;

&lt;p&gt;The practical implication: if you want a skill discovered, ship it on GitHub, submit it to skills.sh, and let the aggregators scrape it later. Skipping skills.sh and listing only on an aggregator means none of your installs flow through a counted leaderboard — currently the only authority signal the marketplace has.&lt;/p&gt;

&lt;p&gt;One caveat worth flagging: install counts on skills.sh are aggregate across every agent surface, not just Claude. A skill that's popular with Cursor users inflates the same number a Claude-only user sees, which makes the leaderboard a noisier authority signal than it looks. Useful for ranking, less useful for "is this skill any good &lt;em&gt;for Claude Code specifically&lt;/em&gt;."&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You Use a Skill From the Marketplace?
&lt;/h2&gt;

&lt;p&gt;The install path is two commands once &lt;code&gt;npx&lt;/code&gt; is available. &lt;strong&gt;First&lt;/strong&gt;, find a skill — either by browsing skills.sh in a tab or by running the meta-skill &lt;code&gt;find-skills&lt;/code&gt; from inside any agent. &lt;strong&gt;Second&lt;/strong&gt;, install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install a skill (works from Claude Code, Cursor, Cline, etc.)&lt;/span&gt;
npx skills add nishilbhave/codeprobe

&lt;span class="c"&gt;# Or install the meta-discovery skill first&lt;/span&gt;
npx skills add anthropics/find-skills

&lt;span class="c"&gt;# Pin to a specific commit or tag for reproducibility&lt;/span&gt;
npx skills add nishilbhave/codeprobe@v0.3.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole install. The CLI clones the skill's GitHub repo into your local skills directory — &lt;code&gt;~/.claude/skills/&amp;lt;skill-name&amp;gt;/&lt;/code&gt; for Claude Code's user scope, &lt;code&gt;.claude/skills/&amp;lt;skill-name&amp;gt;/&lt;/code&gt; if you're inside a project — and registers it with the runtime. On Claude.ai, skills are uploaded via the web UI rather than the CLI; on the Claude API, you pass the skill via &lt;code&gt;skill_id&lt;/code&gt; with the right beta header (&lt;a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;How a skill &lt;em&gt;activates&lt;/em&gt; is the part that trips most people on first install. Skills don't run on every turn — they load only when Claude decides the user's request matches the skill's frontmatter description. A skill named &lt;code&gt;git-cherry-pick-helper&lt;/code&gt; with the description "use when reviewing branch divergence or staging cherry-picks" fires only when the conversation actually mentions one of those things. If your skill never seems to load, the fix is almost always rewriting the description, not the body.&lt;/p&gt;

&lt;p&gt;Inspecting and removing skills works the same way on every runtime. Run &lt;code&gt;ls ~/.claude/skills/&lt;/code&gt; to see what's installed. Run &lt;code&gt;npx skills list&lt;/code&gt; to see what's registered. Run &lt;code&gt;npx skills remove &amp;lt;name&amp;gt;&lt;/code&gt; to uninstall — or just delete the directory if you prefer. Skills don't persist state outside their own folder, so there's nothing to garbage-collect.&lt;/p&gt;

&lt;p&gt;A few practical patterns worth memorizing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pin to a SHA when reproducibility matters.&lt;/strong&gt; &lt;code&gt;npx skills add owner/repo@&amp;lt;sha&amp;gt;&lt;/code&gt; installs a specific commit. The default install pulls &lt;code&gt;main&lt;/code&gt;, which can change under you. If you're shipping skills to a team config, pin them — the same supply-chain hygiene argument that applies to MCP servers in &lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;the Claude Code MCP server configuration guide&lt;/a&gt; applies here too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User scope by default; project scope when team-shared.&lt;/strong&gt; Personal skills go in &lt;code&gt;~/.claude/skills/&lt;/code&gt;. Team-shared skills go in &lt;code&gt;.claude/skills/&lt;/code&gt; at the repo root and commit cleanly. Narrower scope wins on a name collision — same precedence rule MCP servers follow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't install more than you need.&lt;/strong&gt; Each registered skill costs roughly 100 tokens of catalog overhead on every turn — small per skill, but a hundred installed skills is 10,000 tokens of overhead before the model loads any actual SKILL.md body. The leaderboard rewards installs; your context window rewards restraint.&lt;/p&gt;

&lt;p&gt;For Claude Code specifically, the version that matters is 2.x — earlier versions used a different registry path and an older SKILL.md schema. Run &lt;code&gt;claude --version&lt;/code&gt; to confirm; if you're on 1.x, the install path above won't work until you update via the Claude Code install guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Goes Inside a SKILL.md File?
&lt;/h2&gt;

&lt;p&gt;The minimum viable SKILL.md is fifteen lines. The frontmatter declares three things — what the skill is called, when to use it, and what tools it's allowed to call. The body is the actual instructions. Here's the smallest publishable example:&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;commit-message-pro&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;Use when the user asks to write a git commit message, draft a commit, or&lt;/span&gt;
  &lt;span class="s"&gt;improve an existing message. Generates conventional commits with scope, type,&lt;/span&gt;
  &lt;span class="s"&gt;and a clear subject line under 72 characters.&lt;/span&gt;
&lt;span class="na"&gt;allowed-tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bash"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Read"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Commit Message Pro&lt;/span&gt;

When invoked:
&lt;span class="p"&gt;
1.&lt;/span&gt; Run &lt;span class="sb"&gt;`git diff --staged`&lt;/span&gt; to see what's actually being committed.
&lt;span class="p"&gt;2.&lt;/span&gt; Detect the package or module changed from the file paths.
&lt;span class="p"&gt;3.&lt;/span&gt; Choose a type from: feat, fix, refactor, docs, test, chore, perf.
&lt;span class="p"&gt;4.&lt;/span&gt; Write a subject line under 72 characters, present tense ("add" not "added").
&lt;span class="p"&gt;5.&lt;/span&gt; If the diff is non-trivial, add a body paragraph explaining the &lt;span class="ge"&gt;*why*&lt;/span&gt;.

Never include the words "various", "miscellaneous", or "updates" — they hide intent.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a complete skill. Drop it into &lt;code&gt;~/.claude/skills/commit-message-pro/SKILL.md&lt;/code&gt;, restart your session, ask Claude to write a commit, and the skill will load on demand. The body becomes part of the prompt only for that turn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontmatter fields that matter.&lt;/strong&gt; &lt;code&gt;name&lt;/code&gt; is the directory name and the registry slug — kebab-case, no spaces. &lt;code&gt;description&lt;/code&gt; is the single most important field in the whole file. Claude reads only the descriptions of installed skills on every turn (this is the progressive-disclosure shortcut) and decides which body to load based on that text alone. Write it as a &lt;em&gt;when-to-use&lt;/em&gt; sentence, not a &lt;em&gt;what-it-does&lt;/em&gt; one — "Use when the user is reviewing a pull request" beats "PR review helper" by a wide margin in practice. &lt;code&gt;allowed-tools&lt;/code&gt; is an array of tool names the skill is permitted to invoke; &lt;code&gt;["Read", "Write", "Bash"]&lt;/code&gt; covers most needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Body structure.&lt;/strong&gt; The body is just markdown for Claude to read. Two conventions earn their keep:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open with "When invoked:" and a numbered list.&lt;/strong&gt; It puts the model on rails. Claude reads top-to-bottom, and an explicit ordered procedure beats prose 9 times out of 10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate when-to-use from how-to-execute.&lt;/strong&gt; The frontmatter description tells Claude &lt;em&gt;when&lt;/em&gt; to load the skill; the body tells Claude &lt;em&gt;how&lt;/em&gt; to run it. Mixing them is the most common cause of a skill that loads at the wrong time or doesn't load when it should.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The &lt;code&gt;scripts/&lt;/code&gt; folder&lt;/strong&gt; is where you put any code the skill needs to execute — Python, shell, whatever Claude can run with the tools you allowed. The skill body invokes them as needed (&lt;code&gt;run scripts/extract.py&lt;/code&gt;). &lt;strong&gt;The &lt;code&gt;references/&lt;/code&gt; folder&lt;/strong&gt; is for long-form documentation Claude pulls when relevant — API specs, style guides, glossaries. Reference files don't load by default; the body has to point to them.&lt;/p&gt;

&lt;p&gt;Progressive disclosure is the architectural rule that makes this work. The catalog (every installed skill's name + description) is always in context, around 100 tokens per skill. The body of a specific skill loads only when Claude picks it. The scripts and references load only when the body asks for them. This is why a developer can install thirty skills without blowing their context window — versus an MCP setup where every connected server's full tool schema sits in context on every turn (&lt;a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf" rel="noopener noreferrer"&gt;Anthropic playbook&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;The thing the playbook doesn't tell you: write the description three times before you ship. The first draft is always too vague. The second is too verbose. The third — usually after watching your skill &lt;em&gt;not&lt;/em&gt; load on a request it obviously should have handled — is the one that actually works.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned Shipping codeprobe to skills.sh
&lt;/h2&gt;

&lt;p&gt;I shipped &lt;code&gt;codeprobe&lt;/code&gt; to skills.sh in April 2026 (&lt;a href="https://github.com/nishilbhave/codeprobe" rel="noopener noreferrer"&gt;github.com/nishilbhave/codeprobe&lt;/a&gt;). It's a 9-category code reviewer covering security, SOLID principles, architecture, error handling, performance, testing, code smells, design patterns, and framework best practices. Install path: &lt;code&gt;npx skills add nishilbhave/codeprobe&lt;/code&gt;. Invocation: &lt;code&gt;/codeprobe audit .&lt;/code&gt; from inside a project root. The skill scores each category 0–100 and emits findings as copy-pasteable fix prompts.&lt;/p&gt;

&lt;p&gt;The original version was an MCP server. I rewrote it as a skill in a weekend and the result was both faster and easier to maintain. The reason maps directly to what skills are good at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why a skill and not an MCP server.&lt;/strong&gt; A code review pass is a &lt;em&gt;workflow recipe&lt;/em&gt; — read the diff, apply nine evaluation lenses, score per category, emit findings. There's no external API, no persistent state, no live data the server needs to broker. Every input it needs comes from the file system Claude already has access to. The MCP version ran a full JSON-RPC server, registered twelve tool schemas on every turn, and consumed roughly 9,000 tokens of overhead before I'd reviewed a single file. The skill version costs about 120 tokens until it activates — and it activates only when I actually ask for a review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SKILL.md structure.&lt;/strong&gt; The skill is one parent SKILL.md plus nine child references in &lt;code&gt;references/security.md&lt;/code&gt;, &lt;code&gt;references/solid.md&lt;/code&gt;, and so on. The parent body is short: five steps that read the project, auto-detect the stack (Python, TypeScript, React, PHP/Laravel, SQL), pick which of the nine categories actually apply, then pull the relevant reference files only for those categories. That's progressive disclosure two levels deep — the catalog points to the skill, the skill body points to the references, and each reference loads only when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The auto-detect step matters.&lt;/strong&gt; On a TypeScript-only repo, the SOLID and patterns references load but the PHP framework reference stays on disk. On a SQL-heavy backend, the security reference loads early and gets weighted higher in the final score. The whole engine works because Claude can read the file system before the skill commits to which lenses to apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read-only is a feature, not a limitation.&lt;/strong&gt; &lt;code&gt;codeprobe&lt;/code&gt; never modifies user code. Every finding emits a separate fix prompt the user can copy-paste back to Claude for the actual change. I made this explicit in the frontmatter — &lt;code&gt;allowed-tools: ["Read", "Glob", "Grep"]&lt;/code&gt;, no &lt;code&gt;Write&lt;/code&gt;, no &lt;code&gt;Edit&lt;/code&gt; — so the model can't accidentally edit. The result is something teams will run on production code without a sandbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'd do differently.&lt;/strong&gt; Two things. &lt;strong&gt;First&lt;/strong&gt;, my initial description was &lt;em&gt;"9-category code reviewer for security, SOLID, architecture, and more."&lt;/em&gt; It loaded inconsistently. Rewriting it as &lt;em&gt;"Use when the user asks for a code review, security audit, architecture check, or wants to find code smells"&lt;/em&gt; — a when-to-use sentence rather than a what-it-does one — roughly doubled the activation rate within a day. &lt;strong&gt;Second&lt;/strong&gt;, I shipped without the auto-detect logic in v0. Users on PHP projects got JavaScript-flavored feedback. I added auto-detect in v0.2 and the GitHub issues stopped. The lesson: skills run in whatever repo the user happens to be in. The skill has to inspect first, opine second.&lt;/p&gt;

&lt;p&gt;The codeprobe skill works across 45+ agent surfaces — Claude Code, Cursor, Cline, GitHub Copilot, Windsurf — because they all read the same SKILL.md format. I didn't write any agent-specific code. That portability is the second-order reason skills are interesting: ship once, run everywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Packaged youtube-inspector as Four Skills
&lt;/h2&gt;

&lt;p&gt;The second skill — &lt;code&gt;youtube-inspector&lt;/code&gt; (&lt;a href="https://github.com/nishilbhave/youtube-inspector" rel="noopener noreferrer"&gt;github.com/nishilbhave/youtube-inspector&lt;/a&gt;) — is a counterexample to "one skill per repo." It's actually four skills shipped together in a single repo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Watch-or-skip verdict&lt;/strong&gt; — analyzes a YouTube URL, returns a 0–10 score with a gap-analysis paragraph, recommends watch or skip&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Section summaries&lt;/strong&gt; — bulleted summary per ten-minute segment, flags skippable sections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artifact extraction&lt;/strong&gt; — pulls links, code snippets, tools mentioned, people referenced, timestamps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claim inventory&lt;/strong&gt; — verbatim transcript quotes for any substantive claim made&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Install path: &lt;code&gt;npx skills add nishilbhave/youtube-inspector&lt;/code&gt;. The four skills install together as a single bundle. Requirements: Python 3.13+, &lt;code&gt;yt-dlp&lt;/code&gt;, &lt;code&gt;youtube-transcript-api&lt;/code&gt;. MIT licensed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why four skills and not one mega-skill.&lt;/strong&gt; The temptation when shipping something with multiple capabilities is to wrap them in one big SKILL.md and let the body decide which mode to run. I tried that first. The result was a description so vague — &lt;em&gt;"use when analyzing YouTube videos"&lt;/em&gt; — that it loaded for queries it had no business loading for, and didn't load for queries it should have matched. Splitting into four narrower skills with sharp when-to-use descriptions fixed the activation problem. The user types "is this video worth watching?" and only the watch-or-skip skill fires. They type "extract the tools mentioned in this video" and only artifact extraction fires.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The shared infrastructure pattern.&lt;/strong&gt; All four skills depend on the same Python scripts in &lt;code&gt;scripts/&lt;/code&gt; — &lt;code&gt;download_transcript.py&lt;/code&gt;, &lt;code&gt;parse_video.py&lt;/code&gt;, &lt;code&gt;extract_artifacts.py&lt;/code&gt;. Rather than copy them four times, the parent directory holds the shared code and each child SKILL.md path-references it. The cost is one indirection in the body; the benefit is one place to update &lt;code&gt;yt-dlp&lt;/code&gt; when YouTube changes its API again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real-world flag the skill caught.&lt;/strong&gt; On a recent &lt;em&gt;"$5,219 first month with this AI side hustle"&lt;/em&gt; video, the watch-or-skip skill returned a 3/10 with this note: "specific revenue claim is unsubstantiated; transcript shows no breakdown of store name, product spend, or refund rate; the thumbnail's $5,219 figure isn't corroborated by any screenshot in the video." I would have spent fifteen minutes watching before reaching the same conclusion manually. The skill reached it from the transcript in about twelve seconds. That's the kind of speed-up skills make easy that MCP servers don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What multi-skill packaging taught me.&lt;/strong&gt; The directory model rewards sharp focus. If you find yourself writing a description with "or" in it ("use when the user wants X &lt;em&gt;or&lt;/em&gt; Y"), split the skill. The catalog overhead of a second skill is around 100 tokens; the cost of a poorly-targeted skill that loads at the wrong time is unbounded. For the longer write-up on watch-or-skip specifically — what makes the scoring system non-trivial, why clickbait detection needs vision in addition to transcript — see &lt;a href="https://maketocreate.com/claude-skill-for-youtube-free-watch-or-skip-verdicts/" rel="noopener noreferrer"&gt;my youtube-verdict skill walkthrough&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You Get Your Skill Discovered?
&lt;/h2&gt;

&lt;p&gt;Shipping a skill and getting it installed are two different problems, and most authors solve the first and ignore the second. The skills.sh install leaderboard is the only authority signal the marketplace currently has, and the way it ranks skills favors a small set of distribution patterns.&lt;/p&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%2Foobvo3xzq6ujn56bua53.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%2Foobvo3xzq6ujn56bua53.png" alt="Decision guide for choosing between Claude Skill, Subagent, and MCP Server — ship a Skill for workflow recipes and role personas, a Subagent for multi-step agentic workflows, and an MCP Server for external APIs and persistent state" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Anthropic agent skills documentation, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;README first, SKILL.md second.&lt;/strong&gt; The skills.sh listing pulls metadata from your GitHub README, not from the SKILL.md. A repo with a one-paragraph README will sit unnoticed even when the underlying skill is excellent. Lead the README with one line that finishes the sentence &lt;em&gt;"Use this skill when…"&lt;/em&gt; — same shape as the SKILL.md description, but written for a human browser. Add one screenshot or terminal capture, an install command, and a usage example. That's it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Submission flow.&lt;/strong&gt; Open a PR to the &lt;code&gt;vercel-labs/skills&lt;/code&gt; registry repo with your skill name, GitHub URL, category, and a one-line description. The Vercel Labs team has been merging within days through May 2026; once merged, your skill is installable via &lt;code&gt;npx skills add owner/repo&lt;/code&gt; within hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naming earns installs.&lt;/strong&gt; Generic names (&lt;code&gt;pr-helper&lt;/code&gt;, &lt;code&gt;code-utils&lt;/code&gt;) lose discoverability fights to specific ones (&lt;code&gt;pr-review-pro&lt;/code&gt;, &lt;code&gt;git-cherry-pick-helper&lt;/code&gt;). The leaderboard ranks roughly by install velocity, and install velocity correlates with people typing the skill's domain into search. Pick a name a user would type if they didn't know the skill existed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-post deliberately.&lt;/strong&gt; A skill listed only on skills.sh is missing the discovery layer. Submit to ClaudeSkills.io and let claudemarketplaces.com scrape it — both are free, and each adds a different inbound search surface. SkillsMP is optional; the inbound traffic is real but the listing quality is uneven.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The decision before you publish.&lt;/strong&gt; Not everything that looks like a skill should ship as a skill. The cleanest test is the three-card decision above. If the answer is &lt;em&gt;external API&lt;/em&gt; or &lt;em&gt;persistent state&lt;/em&gt;, ship an MCP server. If the answer is &lt;em&gt;multi-step agent workflow with parallel sub-tasks&lt;/em&gt;, ship a subagent. Skills are for the middle: domain expertise, workflow recipes, role personas, repeatable evaluation passes. For the full five-axis framework Anthropic recommends when choosing between primitives, see the full Skills vs MCP decision guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Are Claude Skills free to install and ship?
&lt;/h3&gt;

&lt;p&gt;Yes on both ends. Installing skills from skills.sh is free and unmetered; shipping your own skill requires a public GitHub repo and a PR to the registry — also free. The runtime cost is whatever your normal Claude usage bill is, which goes up only marginally because skills load on demand. Anthropic's pricing applies to the model tokens you'd consume anyway; skills don't add a per-install or per-invocation fee. &lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;Claude Code pricing and token limits&lt;/a&gt; covers the full pricing model.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the security model when I install a skill from skills.sh?
&lt;/h3&gt;

&lt;p&gt;A skill is a folder of files Claude can read and a list of tools it's allowed to call. Whatever permissions your agent grants the skill, the skill has — including &lt;code&gt;Bash&lt;/code&gt; if you allow it. The runtime doesn't sandbox skill execution beyond the existing tool-permission system. Install rule: read the SKILL.md and any &lt;code&gt;scripts/&lt;/code&gt; before installing. Anthropic's MCP guidance — &lt;em&gt;"only install servers you trust"&lt;/em&gt; — applies identically here. A malicious skill can do anything your agent itself can do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do Claude Code skills work on Claude.ai too?
&lt;/h3&gt;

&lt;p&gt;The SKILL.md format is the same across runtimes, so yes — with a caveat. Claude Code loads skills from &lt;code&gt;~/.claude/skills/&lt;/code&gt; or &lt;code&gt;.claude/skills/&lt;/code&gt;; Claude.ai loads them via the web upload interface. Claude.ai supports a narrower tool surface than Claude Code (no native &lt;code&gt;Bash&lt;/code&gt;, for example), so a skill that depends on shell execution will run in Code but not Claude.ai. Skills that read files, write text, or invoke pre-allowed APIs port cleanly (&lt;a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I version a skill so users can pin to a specific release?
&lt;/h3&gt;

&lt;p&gt;The install path supports &lt;code&gt;@&amp;lt;sha&amp;gt;&lt;/code&gt; and &lt;code&gt;@&amp;lt;tag&amp;gt;&lt;/code&gt; suffixes — &lt;code&gt;npx skills add owner/repo@v0.3.1&lt;/code&gt; pins to a release tag. Tag your releases in git the same way you would for an npm package; the registry resolves the suffix to a git ref at install time. For breaking changes, bump the major in the tag and document the migration in the README. The skills.sh leaderboard counts cumulative installs across versions; the upgrade path is the user re-running &lt;code&gt;npx skills add&lt;/code&gt; with a new tag.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I monetize a Claude skill on skills.sh?
&lt;/h3&gt;

&lt;p&gt;Not directly through skills.sh in May 2026. The registry has no payment integration and no paid-tier listings. What works in practice: ship the skill free, document a paid companion service or API the skill calls into, and gate that service yourself. A handful of skills on the leaderboard already follow this model — the skill is open-source, the underlying service it queries (transcription, image generation, specialized analysis) bills the user separately. Whether Anthropic or Vercel Labs will add native monetization is an open question.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Claude Skills are the lightest distribution primitive Anthropic has shipped — a folder, a SKILL.md, and a registry entry is the whole pipeline. The marketplace consolidated faster than most 2026 ecosystems: skills.sh is the install channel, three aggregators handle discovery, and the leaderboard rewards specific names and sharp descriptions over generic catch-all skills.&lt;/p&gt;

&lt;p&gt;If you do nothing else after reading this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;find-skills&lt;/code&gt; first so future skill discovery happens from inside the agent, not from a browser tab&lt;/li&gt;
&lt;li&gt;Ship one small skill — even a 15-line SKILL.md — to feel the publishing flow end-to-end&lt;/li&gt;
&lt;li&gt;Pin every installed skill to a SHA in shared team configs so a maintainer change can't ship into your next session&lt;/li&gt;
&lt;li&gt;Write the description three times: too vague, too verbose, then the version that actually loads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The format is small enough that the right comparison isn't &lt;em&gt;npm packages&lt;/em&gt; — it's &lt;em&gt;shell aliases&lt;/em&gt;. Most of the value comes from a handful of skills that genuinely save five minutes a day. The next time someone asks how Claude is suddenly "so much better at one specific thing," you'll know the answer is probably a skill they shipped Replace with a specific date (e.g., "in March 2026").&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/graph"&gt;@graph&lt;/a&gt;": [&lt;br&gt;
    {&lt;br&gt;
      "@type": "BlogPosting",&lt;br&gt;
      "headline": "Claude Skills Marketplace: Complete Guide to skills.sh and Building Your Own (2026)",&lt;br&gt;
      "description": "How the Claude Skills marketplace works in 2026 — skills.sh, install paths, SKILL.md anatomy, and what I learned shipping codeprobe and youtube-inspector to the directory.",&lt;br&gt;
      "datePublished": "2026-05-24",&lt;br&gt;
      "dateModified": "2026-05-24",&lt;br&gt;
      "author": {&lt;br&gt;
        "@type": "Person",&lt;br&gt;
        "name": "Nishil Bhave"&lt;br&gt;
      },&lt;br&gt;
      "image": "&lt;a href="https://maketocreate.com/images/generated/claude-skills-marketplace-hero-v1.png" rel="noopener noreferrer"&gt;https://maketocreate.com/images/generated/claude-skills-marketplace-hero-v1.png&lt;/a&gt;",&lt;br&gt;
      "url": "&lt;a href="https://maketocreate.com/claude-skills-marketplace-complete-guide/" rel="noopener noreferrer"&gt;https://maketocreate.com/claude-skills-marketplace-complete-guide/&lt;/a&gt;",&lt;br&gt;
      "keywords": ["claude skills marketplace", "claude skills", "skills.sh", "claude agent skills", "claude code"]&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "@type": "FAQPage",&lt;br&gt;
      "mainEntity": [&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Are Claude Skills free to install and ship?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes on both ends. Installing skills from skills.sh is free and unmetered; shipping your own skill requires a public GitHub repo and a PR to the registry — also free. The runtime cost is whatever your normal Claude usage bill is, which goes up only marginally because skills load on demand. Anthropic's pricing applies to the model tokens you'd consume anyway; skills don't add a per-install or per-invocation fee."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "What's the security model when I install a skill from skills.sh?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "A skill is a folder of files Claude can read and a list of tools it's allowed to call. Whatever permissions your agent grants the skill, the skill has — including Bash if you allow it. The runtime doesn't sandbox skill execution beyond the existing tool-permission system. Install rule: read the SKILL.md and any scripts/ before installing. Anthropic's MCP guidance — 'only install servers you trust' — applies identically here. A malicious skill can do anything your agent itself can do."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Do Claude Code skills work on Claude.ai too?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "The SKILL.md format is the same across runtimes, so yes — with a caveat. Claude Code loads skills from ~/.claude/skills/ or .claude/skills/; Claude.ai loads them via the web upload interface. Claude.ai supports a narrower tool surface than Claude Code (no native Bash, for example), so a skill that depends on shell execution will run in Code but not Claude.ai. Skills that read files, write text, or invoke pre-allowed APIs port cleanly."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "How do I version a skill so users can pin to a specific release?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "The install path supports @&amp;lt;sha&amp;gt; and @&amp;lt;tag&amp;gt; suffixes — npx skills add owner/&lt;a href="mailto:repo@v0.3.1"&gt;repo@v0.3.1&lt;/a&gt; pins to a release tag. Tag your releases in git the same way you would for an npm package; the registry resolves the suffix to a git ref at install time. For breaking changes, bump the major in the tag and document the migration in the README. The skills.sh leaderboard counts cumulative installs across versions; the upgrade path is the user re-running npx skills add with a new tag."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Can I monetize a Claude skill on skills.sh?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Not directly through skills.sh in May 2026. The registry has no payment integration and no paid-tier listings. What works in practice: ship the skill free, document a paid companion service or API the skill calls into, and gate that service yourself. A handful of skills on the leaderboard already follow this model — the skill is open-source, the underlying service it queries bills the user separately. Whether Anthropic or Vercel Labs will add native monetization is an open question."&lt;br&gt;
          }&lt;br&gt;
        }&lt;br&gt;
      ]&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

</description>
      <category>claudeskillsmarketplace</category>
      <category>claudeskills</category>
      <category>skillssh</category>
      <category>claudeagentskills</category>
    </item>
    <item>
      <title>Claude Code MCP Server Configuration: 2026 Setup Guide</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Mon, 18 May 2026 18:10:45 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-code-mcp-server-configuration-2026-setup-guide-16nj</link>
      <guid>https://dev.to/nishilbhave/claude-code-mcp-server-configuration-2026-setup-guide-16nj</guid>
      <description>&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%2Fp4p04opveu1zxd0zih6v.jpg" 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%2Fp4p04opveu1zxd0zih6v.jpg" alt="MCP Server flow diagram" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code MCP Server Configuration: Step-by-Step Setup (2026)
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol SDK crossed 97 million monthly downloads in March 2026, up from roughly 2 million at launch — a 4,750% climb in 16 months (&lt;a href="https://www.digitalapplied.com/blog/mcp-97-million-downloads-model-context-protocol-mainstream" rel="noopener noreferrer"&gt;Digital Applied citing Anthropic&lt;/a&gt;, 2026). The protocol is everywhere now. The official registry lists 9,400+ servers (&lt;a href="https://mcpmanager.ai/blog/mcp-adoption-statistics/" rel="noopener noreferrer"&gt;MCP Manager&lt;/a&gt;, 2026), and Anthropic's reference repo carries 85.7k GitHub stars. Yet the average Claude Code user I talk to has exactly one MCP server installed.&lt;/p&gt;

&lt;p&gt;I've been running a six-server setup across macOS and Windows for eight months and have hit nearly every config gotcha along the way. This Claude Code MCP server configuration guide is the working playbook: the scope hierarchy that finally clicked, the JSON anatomy that maps to it, three real server walkthroughs, and the debugging loop that takes you from "server isn't showing up" to "fixed" in under five minutes. For the broader landscape — what MCP is, which 30 servers are worth knowing, and where the ecosystem is heading — see the complete 2026 guide to MCP servers and the Model Context Protocol.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code reads three config locations in priority order: &lt;strong&gt;local&lt;/strong&gt; (&lt;code&gt;~/.claude.json&lt;/code&gt; keyed to project), &lt;strong&gt;project&lt;/strong&gt; (&lt;code&gt;.mcp.json&lt;/code&gt; at repo root, team-shared), and &lt;strong&gt;user&lt;/strong&gt; (&lt;code&gt;~/.claude.json&lt;/code&gt; global block). Highest priority wins.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;claude_desktop_config.json&lt;/code&gt; is &lt;strong&gt;Claude Desktop's&lt;/strong&gt; file — Claude Code never reads it. Importing requires &lt;code&gt;claude mcp add-from-claude-desktop&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Three transports exist: &lt;strong&gt;stdio&lt;/strong&gt; (local subprocess, fastest), &lt;strong&gt;HTTP&lt;/strong&gt; (remote with OAuth or bearer tokens), and &lt;strong&gt;SSE&lt;/strong&gt; (legacy, deprecated). Pick stdio for local tools, HTTP for everything else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin versions in production configs.&lt;/strong&gt; OX Security disclosed a systemic SDK flaw in April 2026 that put ~200,000 servers at risk (&lt;a href="https://www.theregister.com/2026/04/16/anthropic_mcp_design_flaw/" rel="noopener noreferrer"&gt;OX Security via The Register&lt;/a&gt;, 2026). &lt;code&gt;npx -y pkg@latest&lt;/code&gt; is a rug-pull waiting to happen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Where Does Claude Code MCP Server Configuration Live?
&lt;/h2&gt;

&lt;p&gt;Claude Code reads MCP configuration from three locations with a strict precedence order, and getting the hierarchy wrong is responsible for about 80% of the "my server won't show up" reports I see in issue trackers. The three scopes are &lt;strong&gt;local&lt;/strong&gt;, &lt;strong&gt;project&lt;/strong&gt;, and &lt;strong&gt;user&lt;/strong&gt; (&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code MCP docs&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local scope&lt;/strong&gt; lives in &lt;code&gt;~/.claude.json&lt;/code&gt;, keyed by the absolute path of the current project. It's the default when you run &lt;code&gt;claude mcp add&lt;/code&gt; without a &lt;code&gt;--scope&lt;/code&gt; flag. It applies only when you're working in that folder, and nothing in it gets committed. Use it for personal credentials and one-off experiments. &lt;strong&gt;Project scope&lt;/strong&gt; is &lt;code&gt;.mcp.json&lt;/code&gt; at the repo root, designed to be checked into git so the whole team picks up the same servers. Claude Code prompts each user to approve project servers on first run — a guardrail you want to keep, not bypass. &lt;strong&gt;User scope&lt;/strong&gt; also lives in &lt;code&gt;~/.claude.json&lt;/code&gt; but applies globally. Use it for general-purpose servers like filesystem, fetch, or memory that you want available everywhere.&lt;/p&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%2F5nfu17at70l005o5ostv.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%2F5nfu17at70l005o5ostv.png" alt="Diagram showing the three MCP configuration scopes in Claude Code — local in ~/.claude.json scoped to one project, project in .mcp.json at repo root shared with the team via git, and user in ~/.claude.json applied globally — with precedence flowing from local at the top down to user at the bottom" width="799" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Claude Code MCP documentation, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The trap most people hit is assuming &lt;code&gt;claude_desktop_config.json&lt;/code&gt; is the right file. It isn't — that's the Desktop app's config, living at &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt; on macOS or &lt;code&gt;%APPDATA%\Claude\claude_desktop_config.json&lt;/code&gt; on Windows. Claude Code never reads it. If you've already configured the Desktop app and you're on macOS or WSL, run &lt;code&gt;claude mcp add-from-claude-desktop&lt;/code&gt; and it imports the lot. Otherwise you'll be editing the wrong file all afternoon.&lt;/p&gt;

&lt;p&gt;Per Anthropic's own docs: &lt;em&gt;"Project servers in .mcp.json take precedence over user servers with the same name; local-scoped servers take precedence over project-scoped servers"&lt;/em&gt; (&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). The mental model that works: narrower scope wins. Your personal override beats the team config, the team config beats the global default. That's intentional — you might need to temporarily disable a project server without committing the change.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does the MCP Config JSON Actually Look Like?
&lt;/h2&gt;

&lt;p&gt;The fast path is &lt;code&gt;claude mcp add&lt;/code&gt; from your terminal, but knowing what it writes saves you when something breaks. Every Claude Code MCP server configuration entry sits under the &lt;code&gt;mcpServers&lt;/code&gt; key with a stable shape: a &lt;code&gt;command&lt;/code&gt; (or &lt;code&gt;url&lt;/code&gt; for HTTP), optional &lt;code&gt;args&lt;/code&gt;, optional &lt;code&gt;env&lt;/code&gt; for environment variables, and optional &lt;code&gt;headers&lt;/code&gt; for HTTP auth. Claude Code supports &lt;code&gt;${VAR}&lt;/code&gt; and &lt;code&gt;${VAR:-default}&lt;/code&gt; expansion in all string values, which means you can commit &lt;code&gt;.mcp.json&lt;/code&gt; without leaking secrets.&lt;/p&gt;

&lt;p&gt;Here's an annotated config covering all three transport types in one file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"${HOME}/code"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"${HOME}/Documents/notes"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"github"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.githubcopilot.com/mcp/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer ${GH_PAT}"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"notion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.notion.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"supabase"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@supabase/mcp-server-supabase@0.4.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--access-token"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"${SUPABASE_TOKEN}"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"NODE_NO_WARNINGS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four things to notice. &lt;strong&gt;First&lt;/strong&gt;, &lt;code&gt;type&lt;/code&gt; is &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;sse&lt;/code&gt;, or omitted (stdio is the default — no &lt;code&gt;type&lt;/code&gt; field means it's a local subprocess). &lt;strong&gt;Second&lt;/strong&gt;, env-var expansion works in &lt;code&gt;command&lt;/code&gt;, &lt;code&gt;args&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;headers&lt;/code&gt;, and the &lt;code&gt;env&lt;/code&gt; block; keep secrets in your shell, not in the JSON. &lt;strong&gt;Third&lt;/strong&gt;, pinned versions: &lt;code&gt;@0.4.5&lt;/code&gt; on Supabase, not &lt;code&gt;@latest&lt;/code&gt;. The &lt;code&gt;@latest&lt;/code&gt; tag is exactly the supply-chain footgun the security section gets to in a minute. &lt;strong&gt;Fourth&lt;/strong&gt;, the &lt;code&gt;env&lt;/code&gt; block lets you set runtime variables the server sees but Claude Code itself doesn't.&lt;/p&gt;

&lt;p&gt;According to Anthropic's documentation, the JSON form via &lt;code&gt;claude mcp add-json&lt;/code&gt; is the safest install path on Windows because it sidesteps a known shell-quoting bug where &lt;code&gt;--&lt;/code&gt; rewrites &lt;code&gt;/c&lt;/code&gt; to &lt;code&gt;C:/&lt;/code&gt; in the saved config (&lt;a href="https://github.com/anthropics/claude-code/issues/4019" rel="noopener noreferrer"&gt;anthropics/claude-code #4019&lt;/a&gt;, 2026). On Mac and Linux either form works.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do You Add Your First Three MCP Servers?
&lt;/h2&gt;

&lt;p&gt;Let's wire up three real servers that cover the full spectrum: filesystem (stdio, no auth), GitHub (HTTP with bearer token), and Notion (HTTP with browser OAuth). User scope so they're available everywhere.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Filesystem (Anthropic reference) — stdio, paths whitelisted as args&lt;/span&gt;
claude mcp add &lt;span class="nt"&gt;--scope&lt;/span&gt; user fs &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  npx &lt;span class="nt"&gt;-y&lt;/span&gt; @modelcontextprotocol/server-filesystem ~/code ~/Documents/notes

&lt;span class="c"&gt;# 2. GitHub — HTTP, bearer token from a fine-grained PAT&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GH_PAT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ghp_xxxxxxxxxxxxxxxxxxxx"&lt;/span&gt;
claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http &lt;span class="nt"&gt;--scope&lt;/span&gt; user github &lt;span class="se"&gt;\&lt;/span&gt;
  https://api.githubcopilot.com/mcp/ &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$GH_PAT&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# 3. Notion — HTTP, opens OAuth in your browser&lt;/span&gt;
claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http &lt;span class="nt"&gt;--scope&lt;/span&gt; user notion https://mcp.notion.com/mcp

&lt;span class="c"&gt;# Verify&lt;/span&gt;
claude mcp list
claude mcp get github
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every flag must appear &lt;em&gt;before&lt;/em&gt; the server name. The &lt;code&gt;--&lt;/code&gt; separates Claude Code's flags from the server command itself, and forgetting it is the single most common cause of "my server won't connect" reports in the issue tracker. After &lt;code&gt;claude mcp add&lt;/code&gt; the server is registered but not yet running — Claude spawns it on the next session start.&lt;/p&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%2Fimages.unsplash.com%2Fphoto-1607799279861-4dd421887fb3%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" 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%2Fimages.unsplash.com%2Fphoto-1607799279861-4dd421887fb3%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80" alt="A close-up of a code editor showing structured JSON configuration with nested keys, illustrating the .mcp.json file layout" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The filesystem server is your "hello world" — it's the smallest reference implementation and it surfaces every scope and pathing gotcha in one shot. Whitelist only the directories Claude actually needs; granting it your whole home directory is the MCP equivalent of &lt;code&gt;chmod 777&lt;/code&gt;. The GitHub server uses a bearer token from a fine-grained personal access token. Scope it to &lt;code&gt;repo:read&lt;/code&gt; for most workflows; never grant &lt;code&gt;repo:write&lt;/code&gt; unless you specifically want Claude pushing commits. For the full surface — toolset trimming, PAT-vs-App rate-limit math, and the 7 use cases worth the schema overhead — see the GitHub MCP server field-notes guide. The Notion server demonstrates the OAuth flow — &lt;code&gt;claude mcp add&lt;/code&gt; opens your browser, you approve, and the token lands in &lt;code&gt;~/.claude.json&lt;/code&gt; under the server's &lt;code&gt;oauth.token&lt;/code&gt; field. Never commit that file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Stdio, HTTP, or SSE — Which Transport Should You Pick?
&lt;/h2&gt;

&lt;p&gt;MCP supports three wire transports and the choice matters more than it looks. Stdio launches a subprocess and pipes JSON-RPC over stdin/stdout — fastest, but the server must live on your machine. HTTP uses regular requests and is the only option for remote servers and OAuth flows. SSE (Server-Sent Events) was the original streaming transport and is now deprecated in favor of streamable HTTP (&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code MCP docs&lt;/a&gt;, 2026). The decision tree is short: local tool → stdio, remote service → HTTP, anything labeled SSE → use it for now but expect migration to HTTP.&lt;/p&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%2Frzxrwtz6pmpn0uhylagf.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%2Frzxrwtz6pmpn0uhylagf.png" alt="Transport selection guide for MCP showing when to use stdio, HTTP, and SSE — local subprocess to stdio, remote service to HTTP, legacy to SSE" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Source: Claude Code MCP transport documentation, 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The practical implication is auth surface. A stdio server runs as a subprocess of Claude Code with your full user privileges — no network auth needed, but anything that process can read, the model can read. An HTTP server lives behind whatever auth you configure (OAuth, bearer token, mTLS), which is more setup but a tighter blast radius. Per Anthropic's own security guidance, &lt;em&gt;"MCP servers may execute arbitrary code and access local resources — only install servers you trust"&lt;/em&gt; (&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;code.claude.com&lt;/a&gt;, 2026). That sentence is doing more work than it looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Doesn't My Server Show Up in &lt;code&gt;/mcp list&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;When a server you just added doesn't appear, failures cluster into four buckets. The diagnostic loop is short.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bucket 1 — wrong file, wrong scope.&lt;/strong&gt; Run &lt;code&gt;claude mcp list&lt;/code&gt; in the project directory. If your server isn't there, it's in the wrong scope. Run &lt;code&gt;claude mcp get &amp;lt;name&amp;gt;&lt;/code&gt; for the server you expect to see; the output tells you exactly which scope file it lives in. Move it with &lt;code&gt;claude mcp remove &amp;lt;name&amp;gt;&lt;/code&gt; and re-add with an explicit &lt;code&gt;--scope&lt;/code&gt; flag. This catches maybe half of "missing server" reports on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bucket 2 — server crashes on startup.&lt;/strong&gt; Open the in-session &lt;code&gt;/mcp&lt;/code&gt; panel and you'll see the server status. Red means it failed to start. The actual error lives in Claude Code's logs at &lt;code&gt;~/.claude/logs/&lt;/code&gt;. Common causes: missing env vars (Supabase needs &lt;code&gt;--access-token&lt;/code&gt;), wrong Node version (most servers require ≥ 18), or npx hasn't cached the package and the 10-second startup timeout fires first. Bump &lt;code&gt;MCP_TIMEOUT=15000&lt;/code&gt; (milliseconds) in your shell environment if cold starts are killing you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bucket 3 — server starts but no tools appear.&lt;/strong&gt; This is almost always &lt;code&gt;ENABLE_TOOL_SEARCH&lt;/code&gt; deferring schema load. Claude Code v2.x ships with &lt;code&gt;auto:5&lt;/code&gt; as the default, which means tool schemas only register after the model actively searches for them. Either invoke a tool by name in your prompt (&lt;code&gt;@supabase list_tables&lt;/code&gt;) or set &lt;code&gt;ENABLE_TOOL_SEARCH=off&lt;/code&gt; to force eager loading. Trade-off: you pay the schema cost on every turn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bucket 4 — OAuth flow hangs.&lt;/strong&gt; Most common with Notion, Linear, or Atlassian remote servers. The callback port (default 8765) is often taken by another process. Pass &lt;code&gt;--callback-port 9876&lt;/code&gt; to &lt;code&gt;claude mcp add&lt;/code&gt; to pick a free port, or kill whatever's bound to 8765 with &lt;code&gt;lsof -i :8765&lt;/code&gt;. After OAuth completes, the token lives in &lt;code&gt;~/.claude.json&lt;/code&gt; under the server's &lt;code&gt;oauth.token&lt;/code&gt; field.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# The reliable diagnostic sequence&lt;/span&gt;
claude mcp list                     &lt;span class="c"&gt;# is it registered?&lt;/span&gt;
claude mcp get supabase             &lt;span class="c"&gt;# which scope, what command?&lt;/span&gt;
claude &lt;span class="nt"&gt;--debug&lt;/span&gt;                      &lt;span class="c"&gt;# run with verbose logs&lt;/span&gt;
&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; ~/.claude/logs/mcp-&lt;span class="k"&gt;*&lt;/span&gt;.log    &lt;span class="c"&gt;# watch logs in another window&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If all four buckets are clean and the server still doesn't work, run it manually outside Claude Code (&lt;code&gt;npx -y @supabase/mcp-server-supabase@latest --access-token $TOKEN&lt;/code&gt;) and check that it responds to a basic &lt;code&gt;initialize&lt;/code&gt; JSON-RPC call. If the standalone server is broken, it's the server's bug, not yours. For failures outside MCP itself — API errors, process exits, OAuth 403s, and file-editing problems — keep &lt;a href="https://maketocreate.com/claude-code-errors-every-code-cause-and-fix-2026-guide/" rel="noopener noreferrer"&gt;the Claude Code errors troubleshooting guide&lt;/a&gt; open in the next tab.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are the Most Common MCP Config Mistakes?
&lt;/h2&gt;

&lt;p&gt;After eight months of running this setup, the same handful of mistakes account for most of the lost time. They're worth memorizing because they're invisible until you know what to look for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 1 — bare &lt;code&gt;npx&lt;/code&gt; on Windows.&lt;/strong&gt; Claude Code spawns server processes via Windows' native &lt;code&gt;CreateProcess&lt;/code&gt; API, which doesn't resolve &lt;code&gt;.cmd&lt;/code&gt; shims, and &lt;code&gt;npx&lt;/code&gt; on Windows is exactly that. The result is &lt;code&gt;spawn npx ENOENT&lt;/code&gt; or, worse, a silent disconnect with no error in the logs. Wrap explicitly in &lt;code&gt;cmd /c&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"seq-thinking"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cmd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-sequential-thinking"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The cleanest answer for Windows is WSL2. Inside the Linux subsystem, &lt;code&gt;npx&lt;/code&gt; works natively, configs live in the Linux filesystem, and &lt;code&gt;claude mcp add-from-claude-desktop&lt;/code&gt; even bulk-imports existing Desktop configs (&lt;a href="https://medium.com/@mads_bruun_hovgaard/making-claude-mcp-work-on-windows-without-admin-rights-using-wsl-2-a88f8ec4ffd1" rel="noopener noreferrer"&gt;Mads Hovgaard&lt;/a&gt;, 2026). The 20-minute setup is cheaper than the bug surface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 2 — secrets in plaintext JSON.&lt;/strong&gt; Per Anthropic, &lt;em&gt;"only install servers you trust"&lt;/em&gt; isn't advice, it's a requirement. A stdio MCP server runs with your full user privileges, and a remote HTTP server receives whatever you put in &lt;code&gt;headers&lt;/code&gt;. Use &lt;code&gt;${VAR}&lt;/code&gt; expansion so secrets stay in your shell environment, or — better on macOS — store them in Keychain and pull through a wrapper script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Five-line wrapper, called from .mcp.json&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;exec &lt;/span&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @supabase/mcp-server-supabase@0.4.5 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--access-token&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;security find-generic-password &lt;span class="nt"&gt;-s&lt;/span&gt; supabase-mcp &lt;span class="nt"&gt;-w&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five lines, no secrets in dotfiles (&lt;a href="https://kahunam.com/articles/automations-ai/securing-mcp-server-secrets-with-macos-keychain/" rel="noopener noreferrer"&gt;Kahunam&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 3 — &lt;code&gt;npx -y pkg@latest&lt;/code&gt;.&lt;/strong&gt; OX Security disclosed a systemic flaw in Anthropic's official MCP SDK (TypeScript, Python, Java, and Rust) in April 2026 that put approximately 200,000 servers at risk via STDIO command injection, affecting 150 million combined SDK downloads (&lt;a href="https://www.theregister.com/2026/04/16/anthropic_mcp_design_flaw/" rel="noopener noreferrer"&gt;OX Security via The Register&lt;/a&gt;, 2026). Patched, but the lesson: a compromised maintainer can push malware to your next session if you never pin versions. Pin them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 4 — token bloat from unused servers.&lt;/strong&gt; Every server you connect re-registers its tool schemas at every conversation turn. MindStudio's 2026 benchmark found that a Supabase + GitHub + Linear stack of 81 tools consumed over 20,000 tokens before the user typed a single character — about 16% of a 128k context window (&lt;a href="https://www.mindstudio.ai/blog/claude-code-mcp-server-token-overhead" rel="noopener noreferrer"&gt;MindStudio&lt;/a&gt;, 2026). If you call a server twice a week, it's costing you 100+ schema-loads to save 2 paste operations. Use the CLI version instead and expose it via Bash. Same result, near-zero overhead. If the job is really about reusable prompt behavior rather than external tools, use this Claude Skills vs MCP Servers decision guide before adding another server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistake 5 — forgetting the project-approval reset.&lt;/strong&gt; When you pull a teammate's &lt;code&gt;.mcp.json&lt;/code&gt;, Claude Code shows you the approval prompt once and remembers your choice. If the team later changes the server set, you may not get re-prompted. Run &lt;code&gt;claude mcp reset-project-choices&lt;/code&gt; after pulling changes so you can re-approve from scratch.&lt;/p&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%2Fzo9kayt0d5hrgnt6604r.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%2Fzo9kayt0d5hrgnt6604r.png" alt="Vertical bar chart showing tokens consumed by tool definitions per MCP server before any user input: Fetch 2000, Filesystem 3000, Linear 12000, Supabase 15000, Playwright 18000, GitHub 28000 tokens" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What's the Working Strategy for Most Developers?
&lt;/h2&gt;

&lt;p&gt;After eight months of running MCP across two laptops, here's what holds up. Run four servers at user scope: &lt;strong&gt;filesystem, fetch, memory, and Context7&lt;/strong&gt;. They're cheap on tokens, useful everywhere, and not worth re-configuring per project. Add &lt;strong&gt;GitHub at user scope&lt;/strong&gt; if you ship code. Add &lt;strong&gt;Playwright at user scope&lt;/strong&gt; if you do any browser testing. Add Sequential Thinking only when you actually need structured reasoning traces; the trade-offs are covered in the Sequential Thinking MCP guide for Claude Code. Then put project-specific servers — Supabase, Notion, Linear — in &lt;code&gt;.mcp.json&lt;/code&gt; at the repo root with env-var references, commit it, and document the required environment variables in your README.&lt;/p&gt;

&lt;p&gt;In raw numbers: my user-scope config runs six servers and consumes roughly 8,000 tokens of schema overhead per turn. Project &lt;code&gt;.mcp.json&lt;/code&gt; files add another 15,000–28,000 depending on the project. The 16% context threshold the MindStudio benchmark flagged is real but manageable. If you find yourself there, the answer isn't usually fewer servers — it's enabling &lt;code&gt;ENABLE_TOOL_SEARCH=auto:5&lt;/code&gt; (the default) and letting Claude lazy-load schemas on demand.&lt;/p&gt;

&lt;p&gt;The Microsoft Playwright server has 32.5k GitHub stars and ships an update every five days as of May 2026 — by far the most maintained browser-automation MCP. GitHub's official server sits around 29.7k stars (&lt;a href="https://theagenttimes.com/articles/mcp-servers-79017-stars" rel="noopener noreferrer"&gt;The Agent Times&lt;/a&gt;, 2026). Both are well past "experimental" and worth your day-one install slot.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is &lt;code&gt;.mcp.json&lt;/code&gt; the same as &lt;code&gt;claude_desktop_config.json&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;No. &lt;code&gt;claude_desktop_config.json&lt;/code&gt; is Claude Desktop's config file at &lt;code&gt;~/Library/Application Support/Claude/&lt;/code&gt; on macOS or &lt;code&gt;%APPDATA%\Claude\&lt;/code&gt; on Windows. Claude Code never reads it. Claude Code uses &lt;code&gt;.mcp.json&lt;/code&gt; at the repo root for project-scoped servers and &lt;code&gt;~/.claude.json&lt;/code&gt; for local and user scopes. To import existing Desktop servers into Claude Code, run &lt;code&gt;claude mcp add-from-claude-desktop&lt;/code&gt; (macOS or WSL only).&lt;/p&gt;

&lt;h3&gt;
  
  
  How many MCP servers should I run?
&lt;/h3&gt;

&lt;p&gt;Six to eight is the sweet spot for solo developers, based on token-budget analysis. Four at user scope (filesystem, fetch, memory, Context7) covers daily generalist work, two more (GitHub, Playwright) if you ship code or test in browsers, and 2–4 at project scope for whatever's specific to that repo. More than ten servers and you'll burn 20%+ of your context window on tool schemas before typing a prompt (&lt;a href="https://www.mindstudio.ai/blog/claude-code-mcp-server-token-overhead" rel="noopener noreferrer"&gt;MindStudio&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does &lt;code&gt;npx&lt;/code&gt; fail on Windows but work everywhere else?
&lt;/h3&gt;

&lt;p&gt;Claude Code spawns processes via Windows' &lt;code&gt;CreateProcess&lt;/code&gt;, which doesn't resolve &lt;code&gt;.cmd&lt;/code&gt; shims like &lt;code&gt;npx.cmd&lt;/code&gt;. Wrap the command in &lt;code&gt;cmd /c&lt;/code&gt; (e.g., &lt;code&gt;"command": "cmd", "args": ["/c", "npx", "-y", "package"]&lt;/code&gt;) or — strongly recommended — install Claude Code inside WSL2 where &lt;code&gt;npx&lt;/code&gt; works natively. The CLI form has a known parser bug that mangles &lt;code&gt;cmd /c&lt;/code&gt; quoting on Windows; use &lt;code&gt;claude mcp add-json&lt;/code&gt; or hand-edit the JSON (&lt;a href="https://github.com/anthropics/claude-code/issues/4019" rel="noopener noreferrer"&gt;anthropics/claude-code #4019&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I share an MCP server config with my team?
&lt;/h3&gt;

&lt;p&gt;Add it to &lt;code&gt;.mcp.json&lt;/code&gt; at the repo root with &lt;code&gt;${VAR}&lt;/code&gt; placeholders for any secrets, commit the file, and document the required environment variables in your README. Claude Code prompts each team member to approve project-scoped servers on first run — a security guardrail you want to keep. Each teammate can override locally in &lt;code&gt;~/.claude.json&lt;/code&gt; if a specific server isn't useful for them. Run &lt;code&gt;claude mcp reset-project-choices&lt;/code&gt; if the team config changes and you need to re-approve.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can MCP servers see my API keys?
&lt;/h3&gt;

&lt;p&gt;Yes, if you put them in the &lt;code&gt;env&lt;/code&gt; block or &lt;code&gt;command&lt;/code&gt; args. A stdio MCP server runs as a subprocess of Claude Code with your full user privileges, and a remote HTTP server receives whatever you pass in &lt;code&gt;headers&lt;/code&gt;. Store sensitive credentials in macOS Keychain or Windows Credential Manager and pull them through a wrapper script, or use shell env-var expansion (&lt;code&gt;${VAR}&lt;/code&gt;) so secrets never land in dotfiles. Anthropic's guidance — &lt;em&gt;"only install servers you trust"&lt;/em&gt; (&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code MCP docs&lt;/a&gt;, 2026) — is a hard requirement, not a suggestion.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;MCP is the layer where Claude Code stops being a chat window and starts being a workspace. The config looks dense the first time you open &lt;code&gt;.mcp.json&lt;/code&gt;, but the mental model is small: three scopes, three transports, a handful of servers that earn their context-window cost. Most users install one server. The gap between "one server" and "the right six" is where Claude Code goes from "useful sometimes" to "I can't work without this."&lt;/p&gt;

&lt;p&gt;If you do nothing else after reading this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install filesystem at user scope tonight as your "hello world"&lt;/li&gt;
&lt;li&gt;Add GitHub at user scope if you push code, scoped to &lt;code&gt;repo:read&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pin versions in &lt;code&gt;.mcp.json&lt;/code&gt; so a compromised maintainer can't ship malware to your next session&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;claude mcp list&lt;/code&gt; whenever something feels off and &lt;code&gt;claude --debug&lt;/code&gt; when it actually breaks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The protocol is still evolving — 30+ CVEs filed in the first year, an SDK supply-chain flaw patched in April 2026, OAuth scopes still tightening. Pin what you can, scope what you can't pin, and review the &lt;code&gt;/mcp&lt;/code&gt; panel before approving a new project's servers. Most friction is on the configuration side, not the protocol side, and most of that friction is the kind this guide covers.&lt;/p&gt;

&lt;p&gt;The next time someone asks why their &lt;code&gt;claude_desktop_config.json&lt;/code&gt; "isn't working," you'll already know what to tell them.&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/graph"&gt;@graph&lt;/a&gt;": [&lt;br&gt;
    {&lt;br&gt;
      "@type": "BlogPosting",&lt;br&gt;
      "headline": "Claude Code MCP Server Configuration: 2026 Setup Guide",&lt;br&gt;
      "description": "Learn Claude Code MCP server configuration across local, project, and user scopes. Use proven JSON patterns to fix 80% of setup failures before wasting hours.",&lt;br&gt;
      "datePublished": "2026-05-15",&lt;br&gt;
      "dateModified": "2026-05-15",&lt;br&gt;
      "author": {&lt;br&gt;
        "@type": "Person",&lt;br&gt;
        "name": "Nishil Bhave"&lt;br&gt;
      },&lt;br&gt;
      "image": "&lt;a href="https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1200&amp;amp;h=630&amp;amp;fit=crop&amp;amp;q=80" rel="noopener noreferrer"&gt;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1200&amp;amp;amp;h=630&amp;amp;amp;fit=crop&amp;amp;amp;q=80&lt;/a&gt;",&lt;br&gt;
      "url": "&lt;a href="https://maketocreate.com/claude-code-mcp-configuration-complete-guide/" rel="noopener noreferrer"&gt;https://maketocreate.com/claude-code-mcp-configuration-complete-guide/&lt;/a&gt;",&lt;br&gt;
      "keywords": ["claude code mcp server configuration", "claude code mcp setup", "configure mcp server claude", "model context protocol", "claude code"]&lt;br&gt;
    },&lt;br&gt;
    {&lt;br&gt;
      "@type": "FAQPage",&lt;br&gt;
      "mainEntity": [&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Is .mcp.json the same as claude_desktop_config.json?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "No. claude_desktop_config.json is Claude Desktop's config file at ~/Library/Application Support/Claude/ on macOS or %APPDATA%\Claude\ on Windows. Claude Code never reads it. Claude Code uses .mcp.json at the repo root for project-scoped servers and ~/.claude.json for local and user scopes. To import existing Desktop servers into Claude Code, run claude mcp add-from-claude-desktop (macOS or WSL only)."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "How many MCP servers should I run?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Six to eight is the sweet spot for solo developers, based on token-budget analysis. Four at user scope (filesystem, fetch, memory, Context7) covers daily generalist work, two more (GitHub, Playwright) if you ship code or test in browsers, and 2-4 at project scope for whatever's specific to that repo. More than ten servers and you'll burn 20%+ of your context window on tool schemas before typing a prompt."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Why does npx fail on Windows but work everywhere else?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Claude Code spawns processes via Windows' CreateProcess, which doesn't resolve .cmd shims like npx.cmd. Wrap the command in cmd /c (e.g., \"command\": \"cmd\", \"args\": [\"/c\", \"npx\", \"-y\", \"package\"]) or — strongly recommended — install Claude Code inside WSL2 where npx works natively. The CLI form has a known parser bug that mangles cmd /c quoting on Windows; use claude mcp add-json or hand-edit the JSON."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "How do I share an MCP server config with my team?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Add it to .mcp.json at the repo root with ${VAR} placeholders for any secrets, commit the file, and document the required environment variables in your README. Claude Code prompts each team member to approve project-scoped servers on first run — a security guardrail you want to keep. Each teammate can override locally in ~/.claude.json if a specific server isn't useful for them. Run claude mcp reset-project-choices if the team config changes and you need to re-approve."&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
        {&lt;br&gt;
          "@type": "Question",&lt;br&gt;
          "name": "Can MCP servers see my API keys?",&lt;br&gt;
          "acceptedAnswer": {&lt;br&gt;
            "@type": "Answer",&lt;br&gt;
            "text": "Yes, if you put them in the env block or command args. A stdio MCP server runs as a subprocess of Claude Code with your full user privileges, and a remote HTTP server receives whatever you pass in headers. Store sensitive credentials in macOS Keychain or Windows Credential Manager and pull them through a wrapper script, or use shell env-var expansion (${VAR}) so secrets never land in dotfiles. Anthropic's guidance — 'only install servers you trust' — is a hard requirement, not a suggestion."&lt;br&gt;
          }&lt;br&gt;
        }&lt;br&gt;
      ]&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

</description>
      <category>claudecodemcpsetup</category>
      <category>configuremcpserverclaude</category>
      <category>modelcontextprotocol</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Claude Code Errors: Every Code, Cause, and Fix (2026 Guide)</title>
      <dc:creator>Nishil Bhave</dc:creator>
      <pubDate>Sun, 17 May 2026 12:28:49 +0000</pubDate>
      <link>https://dev.to/nishilbhave/claude-code-errors-every-code-cause-and-fix-2026-guide-512p</link>
      <guid>https://dev.to/nishilbhave/claude-code-errors-every-code-cause-and-fix-2026-guide-512p</guid>
      <description>&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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80%26auto%3Dformat" 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%2Fimages.unsplash.com%2Fphoto-1743090660977-babf07732432%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26q%3D80%26auto%3Dformat" alt="A dark monitor showing lines of code and a blinking cursor on an error line — the moment a Claude Code session crashes mid-tool-call" width="1200" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code Errors: The Definitive Troubleshooting Reference (Every Code, Cause, and Fix)
&lt;/h2&gt;

&lt;p&gt;Anthropic's annualized run rate hit $30 billion by April 2026 on the back of an 80x jump in Q1, with Claude Code alone crossing $1 billion within six months of public launch (&lt;a href="https://venturebeat.com/technology/anthropic-says-it-hit-a-30-billion-revenue-run-rate-after-crazy-80x-growth" rel="noopener noreferrer"&gt;VentureBeat&lt;/a&gt;, 2026). The npm package &lt;code&gt;@anthropic-ai/claude-code&lt;/code&gt; now sees roughly 6.5 million weekly downloads (&lt;a href="https://www.npmjs.com/package/@anthropic-ai/claude-code" rel="noopener noreferrer"&gt;npm&lt;/a&gt;, 2026). All of that growth has produced a corresponding wall of cryptic terminal errors — and a 5,000+ open-issue GitHub repo (&lt;a href="https://github.com/anthropics/claude-code/issues" rel="noopener noreferrer"&gt;github.com/anthropics/claude-code&lt;/a&gt;, 2026) where the same eight messages get re-asked weekly.&lt;/p&gt;

&lt;p&gt;This is the reference I wish I had two years ago. Every error in this guide is one I've personally hit or watched a teammate hit, traced to a verified root cause, and fixed with a command that actually worked. No "try restarting." No "check your internet." Scroll, Ctrl+F your exact error text, and you should be unblocked in 10 seconds.&lt;/p&gt;

&lt;p&gt;the hooks layer that prevents many of these errors from happening in the first place&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Process exited with code 1"&lt;/strong&gt; is overloaded — it hides at least five root causes (env var conflict, Windows Bash path, VS Code CSP, corrupted session, MCP crash). Always run &lt;code&gt;claude doctor&lt;/code&gt; first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API 400&lt;/strong&gt; is almost never a real bad request — it's a CLI/model version mismatch with &lt;code&gt;thinking.type.enabled&lt;/code&gt;, stale &lt;code&gt;top_p&lt;/code&gt;, or a third-party gateway dropping the &lt;code&gt;anthropic-beta&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Too slow"&lt;/strong&gt; is rarely the model; community measurements show MCP tool definitions burning up to 66,000 tokens of context before your first prompt (&lt;a href="https://scottspence.com/posts/optimising-mcp-server-context-usage-in-claude-code" rel="noopener noreferrer"&gt;Scott Spence&lt;/a&gt;, 2026). With the 1M context window now standard, that overhead is "only" ~6.6% of the window — but it's still tokens you paid for, cache-invalidations you triggered, and routing latency you ate on every turn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly rate limits&lt;/strong&gt; were introduced August 28, 2026; Anthropic raised them 50% across all paid tiers on May 13, 2026 and stopped publishing per-tier hour numbers (&lt;a href="https://www.anthropic.com/news/higher-limits-spacex" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, May 2026). On Pro the binding constraint is the 5-hour session, not the weekly cap.&lt;/li&gt;
&lt;li&gt;Anthropic's &lt;a href="https://www.anthropic.com/engineering/april-23-postmortem" rel="noopener noreferrer"&gt;April 23 postmortem&lt;/a&gt; (2026) confirmed three engineering changes degraded Claude Code for over a month, then reset every subscriber's limits as compensation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How Do You Triage a Claude Code Error in 60 Seconds?
&lt;/h2&gt;

&lt;p&gt;Before you Google the message, run three commands. Stack Overflow's 2026 Developer Survey found that 45% of developers say debugging AI-generated code now takes longer than writing it from scratch (&lt;a href="https://survey.stackoverflow.co/2026/ai" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2026), and most of that time is spent triaging silent failures. Claude Code ships with built-in tooling that collapses that triage window from hours to seconds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude doctor          &lt;span class="c"&gt;# 1. checks Node, auth, env vars, MCP servers&lt;/span&gt;
claude &lt;span class="nt"&gt;--debug&lt;/span&gt;         &lt;span class="c"&gt;# 2. re-runs your last action with verbose logs&lt;/span&gt;
/usage                 &lt;span class="c"&gt;# 3. inside a session: see rate-limit state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;claude doctor&lt;/code&gt; alone catches roughly half of every "exited with code 1" report on GitHub. The other half need the decision tree below.&lt;/p&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%2Fks45so1exlop0058u9e7.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%2Fks45so1exlop0058u9e7.png" alt="Decision tree showing how to triage any Claude Code error — start from exit code or error type, branch through auth, network, file, and rate-limit causes, end at specific fix commands" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I keep this tree pinned in my notes. About 80% of the time my error fits one branch and I'm back in flow inside two minutes. The remaining 20% is when I learn something new — usually a Bun-runtime quirk on Windows or a stale credential I forgot I'd exported six months ago.&lt;/p&gt;

&lt;p&gt;the subagent patterns that make long sessions less error-prone in the first place&lt;/p&gt;




&lt;h2&gt;
  
  
  "Error: Claude Code process exited with code 1" — What Actually Causes It?
&lt;/h2&gt;

&lt;p&gt;This is the most overloaded error message in modern AI dev tooling. The same exit code wraps at least five completely different root causes, and the official &lt;a href="https://code.claude.com/docs/en/errors" rel="noopener noreferrer"&gt;error reference&lt;/a&gt; doesn't disambiguate them. After watching this fail in production a dozen times, here's the actual mapping.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: Claude Code process exited with code 1
  at ChildProcess.&amp;lt;anonymous&amp;gt; (claude.js:142:14)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cause 1 — Auth conflict (most common).&lt;/strong&gt; A stale &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; env var collides with the OAuth token from &lt;code&gt;/login&lt;/code&gt;. The environment variable wins, the OAuth token gets ignored, and the resulting credential mismatch crashes the parent process before the prompt loop opens. This is the single root cause for over 30% of code-1 reports I've seen, including the heavily commented &lt;a href="https://github.com/anthropics/claude-code/issues/8557" rel="noopener noreferrer"&gt;Issue #8557&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause 2 — Windows Git Bash path.&lt;/strong&gt; Claude Code on Windows expects &lt;code&gt;bash.exe&lt;/code&gt;. If &lt;code&gt;CLAUDE_CODE_GIT_BASH_PATH&lt;/code&gt; isn't set, the spawn fails (&lt;a href="https://github.com/anthropics/claude-code/issues/51886" rel="noopener noreferrer"&gt;Issue #51886&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause 3 — VS Code extension CSP regression.&lt;/strong&gt; A March 2026 build of the extension shipped with &lt;code&gt;connect-src&lt;/code&gt; missing &lt;code&gt;a-api.anthropic.com&lt;/code&gt;, breaking every request with exit 1 (&lt;a href="https://github.com/anthropics/claude-code/issues/14295" rel="noopener noreferrer"&gt;Issue #14295&lt;/a&gt;). Fixed in 2.0.2+ (version floor stated as of May 2026 — verify against the current marketplace listing).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause 4 — Corrupted session transcript.&lt;/strong&gt; Resume mode reads a malformed &lt;code&gt;.jsonl&lt;/code&gt; and crashes on parse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause 5 — MCP server crash on launch.&lt;/strong&gt; A bad entry in &lt;code&gt;.claude/settings.json&lt;/code&gt; kills the parent before the prompt loop starts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Fix in order — each one resolves a different cause&lt;/span&gt;
&lt;span class="nb"&gt;unset &lt;/span&gt;ANTHROPIC_API_KEY            &lt;span class="c"&gt;# Cause 1&lt;/span&gt;
claude /logout &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; claude /login

&lt;span class="c"&gt;# Windows only — Cause 2&lt;/span&gt;
setx CLAUDE_CODE_GIT_BASH_PATH &lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\P&lt;/span&gt;&lt;span class="s2"&gt;rogram Files&lt;/span&gt;&lt;span class="se"&gt;\G&lt;/span&gt;&lt;span class="s2"&gt;it&lt;/span&gt;&lt;span class="se"&gt;\b&lt;/span&gt;&lt;span class="s2"&gt;in&lt;/span&gt;&lt;span class="se"&gt;\b&lt;/span&gt;&lt;span class="s2"&gt;ash.exe"&lt;/span&gt;

&lt;span class="c"&gt;# Cause 3 — update the VS Code extension&lt;/span&gt;
&lt;span class="c"&gt;# Marketplace → Claude Code → Update (must be 2.0.2+ as of May 2026; check current min)&lt;/span&gt;

&lt;span class="c"&gt;# Cause 4 — quarantine the bad session&lt;/span&gt;
&lt;span class="nb"&gt;mv&lt;/span&gt; ~/.claude/projects/&amp;lt;project&amp;gt;/sessions/&amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;.jsonl&lt;span class="o"&gt;{&lt;/span&gt;,.bak&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Cause 5 — disable MCP, see which one's broken&lt;/span&gt;
&lt;span class="nb"&gt;mv&lt;/span&gt; ~/.claude/settings.json ~/.claude/settings.json.bak
claude   &lt;span class="c"&gt;# if it boots, your MCP config killed it&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Prevention.&lt;/strong&gt; Run &lt;code&gt;claude doctor&lt;/code&gt; after every install or major upgrade — and if you're getting these errors on a fresh machine, the root cause is often the install itself, not Claude Code. The platform-by-platform install guide covers the gotchas (Node version, PATH conflicts, WSL quirks) that cause most "exit code 1" reports. If the issue traces back to MCP startup, the &lt;a href="https://maketocreate.com/claude-code-mcp-server-configuration-2026-setup-guide/" rel="noopener noreferrer"&gt;MCP configuration playbook&lt;/a&gt; walks through scope hierarchy and debugging. Never set &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; if you're on a Pro or Max OAuth subscription — pick one auth path and stick to it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My contrarian take:&lt;/strong&gt; Anthropic should split this into typed errors (&lt;code&gt;E_AUTH_CONFLICT&lt;/code&gt;, &lt;code&gt;E_SESSION_PARSE&lt;/code&gt;, &lt;code&gt;E_MCP_BOOT&lt;/code&gt;) the way Go's &lt;code&gt;net/http&lt;/code&gt; does with &lt;code&gt;ErrServerClosed&lt;/code&gt;. Until then, &lt;code&gt;claude doctor&lt;/code&gt; is mandatory triage — not optional.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  "Claude Code process exited with code 3" — The Bun Runtime Tell
&lt;/h2&gt;

&lt;p&gt;Exit code 3 is rarer than code 1 but more specific: it's almost always a runtime mismatch between Claude Code's bundled Bun interpreter and your environment. Anthropic shipped Bun 1.2.23 inside the v2.x binaries as of May 2026 (check &lt;code&gt;claude doctor&lt;/code&gt; output for the version your binary is actually carrying), and on Windows after a password change the credential-manager handshake throws &lt;code&gt;ENOTCONN&lt;/code&gt; and crashes with exit 3 (&lt;a href="https://github.com/anthropics/claude-code/issues/9217" rel="noopener noreferrer"&gt;Issue #9217&lt;/a&gt;, &lt;a href="https://github.com/anthropics/claude-code/issues/35990" rel="noopener noreferrer"&gt;#35990&lt;/a&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ claude
Claude Code process exited with code 3
TLSWrapError: ENOTCONN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Root causes.&lt;/strong&gt; Node below 18 (the legacy installer's minimum), an unexported &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; referenced but empty in the current shell, or arm64 quirks. The latter hits Jetson Orin developers in particular, where Bun's TLS event loop can hang indefinitely (&lt;a href="https://github.com/anthropics/claude-code/issues/58680" rel="noopener noreferrer"&gt;Issue #58680&lt;/a&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;--version&lt;/span&gt;                       &lt;span class="c"&gt;# must be &amp;gt;= 20 (current LTS)&lt;/span&gt;
claude doctor                        &lt;span class="c"&gt;# confirms the runtime requirements&lt;/span&gt;

&lt;span class="c"&gt;# Windows after a password change:&lt;/span&gt;
&lt;span class="c"&gt;# 1. Open Credential Manager, delete every "Claude Code" entry&lt;/span&gt;
&lt;span class="c"&gt;# 2. claude /logout &amp;amp;&amp;amp; claude /login&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're on Linux arm64 and Bun keeps hanging, the workaround is the legacy npm installer (&lt;code&gt;npm install -g @anthropic-ai/claude-code-legacy&lt;/code&gt;) which uses the Node runtime instead.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Windows password-change trap.&lt;/strong&gt; I hit exit code 3 on a Windows laptop two days after rotating my domain password. The credential manager had cached an OAuth-derived token signed under the old credential, the Bun TLS handshake threw &lt;code&gt;ENOTCONN&lt;/code&gt;, and Claude Code refused to start. Took me an hour to trace because every guide tells you to check Node. Deleting the &lt;code&gt;Claude Code&lt;/code&gt; entries from Credential Manager and re-running &lt;code&gt;/login&lt;/code&gt; fixed it in 30 seconds. Now I add it to my password-rotation checklist.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the broader Claude Code config model these errors surface in&lt;/p&gt;




&lt;h2&gt;
  
  
  "API Error: 400" — Which Variant Did You Hit?
&lt;/h2&gt;

&lt;p&gt;The 400 family is the most-Googled Claude Code error category, and approximately none of the matches you get on the first page are correct. Almost every 400 is a CLI-version or third-party-gateway issue, not a malformed body. The official &lt;a href="https://code.claude.com/docs/en/errors" rel="noopener noreferrer"&gt;error reference&lt;/a&gt; lists six distinct sub-cases. Here's the mapping I use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Error text fragment&lt;/th&gt;
&lt;th&gt;Real cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Extra inputs are not permitted ... context_management&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;LLM gateway dropping the &lt;code&gt;anthropic-beta&lt;/code&gt; header&lt;/td&gt;
&lt;td&gt;Configure gateway to forward it, or &lt;code&gt;export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;unexpected tool_use_id&lt;/code&gt; / &lt;code&gt;thinking blocks ... cannot be modified&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Conversation history desync after an interrupted tool call&lt;/td&gt;
&lt;td&gt;Press Esc twice or &lt;code&gt;/rewind&lt;/code&gt; to checkpoint back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;thinking.type.enabled is not supported&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CLI older than v2.1.111 sending the old config to Opus 4.7&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude update&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;max_tokens must be greater than thinking.budget_tokens&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;MAX_THINKING_TOKENS&lt;/code&gt; set above the platform's output cap&lt;/td&gt;
&lt;td&gt;Lower &lt;code&gt;MAX_THINKING_TOKENS&lt;/code&gt; or raise &lt;code&gt;CLAUDE_CODE_MAX_OUTPUT_TOKENS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;This organization has been disabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stale &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; from a disabled org masking your subscription&lt;/td&gt;
&lt;td&gt;&lt;code&gt;unset ANTHROPIC_API_KEY&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;400 + &lt;code&gt;top_p&lt;/code&gt; / &lt;code&gt;top_k&lt;/code&gt; / &lt;code&gt;temperature&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Opus 4.7 removed sampling params; older CLI still sending them&lt;/td&gt;
&lt;td&gt;Upgrade to 2.1.70+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 2.1.70 changelog confirms this directly: &lt;em&gt;"Fixed API 400 errors when using &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt; with a third-party gateway"&lt;/em&gt; and &lt;em&gt;"Fixed API Error: 400 This model does not support the effort..."&lt;/em&gt; (&lt;a href="https://x.com/ClaudeCodeLog/status/2029729187574002039" rel="noopener noreferrer"&gt;Claude Code changelog&lt;/a&gt;, 2026). If you can't tell which variant you hit, the universal first move is &lt;code&gt;claude update&lt;/code&gt; followed by &lt;code&gt;/rewind&lt;/code&gt; — that single pair fixes about two-thirds of 400 reports.&lt;/p&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%2Fkrqeimzoas8zjwmm6jnc.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%2Fkrqeimzoas8zjwmm6jnc.png" alt="Close-up of programming code on a dark screen, representing the request payload of an API call that returned a 400 from Claude" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hit the &lt;code&gt;tool_use_id&lt;/code&gt; variant for the first time last March on a session where I'd Ctrl-C'd Claude mid-tool-call to reword my prompt. The next message threw a 400 every time. &lt;code&gt;/rewind&lt;/code&gt; fixed it in one shot. Now I never Ctrl-C during a tool call — I let it finish, then redirect.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/codeprobe-9-specialized-ai-agents-that-audit-your-codebase-for-solid-security-performance/" rel="noopener noreferrer"&gt;the audit workflow where I keep hitting this 400 variant the most&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  "API Error: Connection error" — It's Almost Always the Proxy
&lt;/h2&gt;

&lt;p&gt;According to Anthropic's docs, the connection-error family surfaces as &lt;code&gt;ECONNREFUSED&lt;/code&gt;, &lt;code&gt;ECONNRESET&lt;/code&gt;, &lt;code&gt;ETIMEDOUT&lt;/code&gt;, &lt;code&gt;fetch failed&lt;/code&gt;, or &lt;code&gt;Request timed out&lt;/code&gt; (&lt;a href="https://code.claude.com/docs/en/errors" rel="noopener noreferrer"&gt;error reference&lt;/a&gt;, 2026). In a corporate network, the #1 cause by a wide margin is TLS interception by a proxy whose CA isn't in Node's trust store — the cert from the proxy looks self-signed, Node bails.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API Error: Connection error
  cause: Error: self-signed certificate in certificate chain
  code: 'SELF_SIGNED_CERT_IN_CHAIN'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Other real causes I've seen.&lt;/strong&gt; A region-restricted VPN blocking &lt;code&gt;api.anthropic.com&lt;/code&gt; (&lt;a href="https://github.com/anthropics/claude-code/issues/30318" rel="noopener noreferrer"&gt;Issue #30318&lt;/a&gt;). A missing &lt;code&gt;HTTPS_PROXY&lt;/code&gt; (lowercase &lt;code&gt;https_proxy&lt;/code&gt; sometimes isn't picked up). The May 2026 incident where Anthropic changed outbound IPs and broke GitHub Enterprise allowlists for Claude Code remote sessions (&lt;a href="https://status.anthropic.com/" rel="noopener noreferrer"&gt;status.anthropic.com&lt;/a&gt;, 2026). And — my favorite — a stale &lt;code&gt;utun&lt;/code&gt; interface left behind by a VPN client I'd uninstalled six months earlier.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Step 1: confirm the network path works at all&lt;/span&gt;
curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://api.anthropic.com    &lt;span class="c"&gt;# expect HTTP/2 200&lt;/span&gt;

&lt;span class="c"&gt;# Step 2: secure proxy setup (do this — don't disable TLS verification)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NODE_EXTRA_CA_CERTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/corp-ca-bundle.pem
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;HTTPS_PROXY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://proxy.corp:8080

&lt;span class="c"&gt;# Step 3: bump timeout for slow corp networks (default is too tight)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;API_TIMEOUT_MS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;900000

&lt;span class="c"&gt;# Anti-pattern — DO NOT do this&lt;/span&gt;
&lt;span class="c"&gt;# export NODE_TLS_REJECT_UNAUTHORIZED=0&lt;/span&gt;
&lt;span class="c"&gt;# The proxy can now MitM your API key in plaintext&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The security note matters. Disabling TLS verification with &lt;code&gt;NODE_TLS_REJECT_UNAUTHORIZED=0&lt;/code&gt; is the single most common "fix" suggested on Stack Overflow for this error, and it's actively dangerous — every byte of your prompts and your API key is now legible to the proxy operator. Get the CA bundle from your infra team. It's worth the 10-minute Slack message.&lt;/p&gt;

&lt;p&gt;A second class of connection failures is genuinely server-side. Anthropic's status page records the May 2026 IP-range change that broke GitHub Enterprise allowlists for hours (&lt;a href="https://status.anthropic.com/" rel="noopener noreferrer"&gt;status.anthropic.com&lt;/a&gt;, 2026), and third-party trackers like StatusGator have logged over a thousand incident events since the platform launched. If &lt;code&gt;curl -I https://api.anthropic.com&lt;/code&gt; succeeds and Claude Code still can't reach the API, check the status page before you tear apart your network config.&lt;/p&gt;




&lt;h2&gt;
  
  
  "OAuth error 403" — Your Token Is Missing a Scope
&lt;/h2&gt;

&lt;p&gt;The 403 family is the price you pay for Claude Code's OAuth-first auth model. When it works, it's seamless. When it fails, it fails in ways that are confusing because the same status code covers four different problems: missing scopes, no Pro/Max subscription, daemon eviction, and organization access changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OAuth Error: 403 Forbidden
  scope_required: user:sessions:claude_code
  scope_granted: user:profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dominant cause on macOS Max subscribers is that the token was minted before the &lt;code&gt;user:sessions:claude_code&lt;/code&gt; scope existed, and OAuth refresh keeps dropping it (&lt;a href="https://github.com/anthropics/claude-code/issues/34785" rel="noopener noreferrer"&gt;Issue #34785&lt;/a&gt;, &lt;a href="https://github.com/anthropics/claude-code/issues/28583" rel="noopener noreferrer"&gt;#28583&lt;/a&gt;). The fix is brutally simple — &lt;code&gt;/logout &amp;amp;&amp;amp; /login&lt;/code&gt; re-mints the token with current scopes — but the docs are quiet about why this works.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# The universal 403 fix&lt;/span&gt;
/logout
/login

&lt;span class="c"&gt;# Desktop app stuck in an OAuth 403 spinner loop&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/Library/Application&lt;span class="se"&gt;\ &lt;/span&gt;Support/Claude/
&lt;span class="c"&gt;# then relaunch and re-auth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Other 403 causes worth knowing.&lt;/strong&gt; Free tier doesn't get Claude Code — Pro ($20) is the minimum paid tier, and &lt;strong&gt;all paid tiers (Pro, Max $100, Max $200) include full Opus 4.7 access&lt;/strong&gt; (&lt;a href="https://support.claude.com/en/articles/11145838-use-claude-code-with-your-pro-or-max-plan" rel="noopener noreferrer"&gt;Anthropic support&lt;/a&gt;, 2026); a 403 isn't a "you need to upgrade to Max for Opus" message — it's an auth-scope or subscription-status problem. A personal Stripe subscription on a business email domain triggers org-level scope restrictions server-side. And on Max plans tied to a personal Gmail, the Remote Control daemon can drop with &lt;code&gt;"no longer a member of the organization"&lt;/code&gt; after long idle periods (&lt;a href="https://github.com/anthropics/claude-code/issues/53635" rel="noopener noreferrer"&gt;Issue #53635&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;the multi-model setup where I keep four sets of credentials alive without scope collisions&lt;/p&gt;




&lt;h2&gt;
  
  
  "Error Editing File" — CRLF Will Ruin Your Afternoon
&lt;/h2&gt;

&lt;p&gt;The Edit-tool failures cluster around two root causes, and one of them is responsible for nearly every Windows report.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: The string to replace was not found in the file.
  file: src/app.tsx
  old_string: "const App = () =&amp;gt; {\n  return &amp;lt;Layout&amp;gt;"
  reason: file content did not match
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cause 1 — CRLF vs LF line endings (Windows).&lt;/strong&gt; The Edit tool doesn't normalize &lt;code&gt;\r\n&lt;/code&gt; versus &lt;code&gt;\n&lt;/code&gt; before matching. An &lt;code&gt;old_string&lt;/code&gt; with LF won't match a file saved as CRLF. This single root cause shows up in &lt;a href="https://github.com/anthropics/claude-code/issues/13456" rel="noopener noreferrer"&gt;Issue #13456&lt;/a&gt; and &lt;a href="https://github.com/anthropics/claude-code/issues/27718" rel="noopener noreferrer"&gt;#27718&lt;/a&gt; and is the #1 source of edit failures on Windows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause 2 — File modified mid-edit.&lt;/strong&gt; Your editor's format-on-save (Prettier, Ruff, gofmt) rewrites the file between Claude's Read and Edit calls. The content drifts. The Edit fails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cause 3 — BOM or UTF-16 encoding.&lt;/strong&gt; Invisible byte-order marks break exact-string matches even when the visible content looks identical.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Force LF in your repo (the durable fix)&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; core.autocrlf input
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"* text=auto eol=lf"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .gitattributes
git add &lt;span class="nt"&gt;--renormalize&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Normalize line endings"&lt;/span&gt;

&lt;span class="c"&gt;# Disable format-on-save while Claude Code is running&lt;/span&gt;
&lt;span class="c"&gt;# VS Code: settings.json → "editor.formatOnSave": false&lt;/span&gt;

&lt;span class="c"&gt;# If you're on Alpine, NixOS, or a non-glibc distro:&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;ripgrep                &lt;span class="c"&gt;# macOS&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;ripgrep            &lt;span class="c"&gt;# Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;USE_BUILTIN_RIPGREP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The official troubleshooting page confirms: &lt;em&gt;"Claude usually succeeds on retry"&lt;/em&gt; for these errors (&lt;a href="https://code.claude.com/docs/en/troubleshooting" rel="noopener noreferrer"&gt;Anthropic Troubleshooting&lt;/a&gt;, 2026). When stuck, the second-attempt success rate is high enough that retrying once before debugging is the right move.&lt;/p&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%2F3lmygvackskp1ty1ddmw.jpeg" 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%2F3lmygvackskp1ty1ddmw.jpeg" alt="HTML and JavaScript code open in an editor, showing the kind of file where Claude Code edit failures happen most when line endings or encoding mismatch" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  "Claude Code Is Too Slow" — It's the MCP Tools, Not the Model
&lt;/h2&gt;

&lt;p&gt;When Claude Code feels sluggish, every reflex tells you to blame the model. Switch from Opus to Sonnet. Wait for the next release. Submit feedback. None of that is the actual lever. Community measurements show MCP tool definitions can eat tens of thousands of tokens before your first prompt; one well-documented case clocked 66,000 tokens just on tool definitions before any user work began (&lt;a href="https://scottspence.com/posts/optimising-mcp-server-context-usage-in-claude-code" rel="noopener noreferrer"&gt;Scott Spence&lt;/a&gt;, 2026). With Anthropic's 1M context window now standard for Claude Code, that 66K is "only" ~6.6% of the window — but the cost is real on every single turn: cache invalidations, slower routing, and tokens you paid for whether you used them or not. A bigger window dilutes the &lt;em&gt;percentage&lt;/em&gt;, not the &lt;em&gt;cost&lt;/em&gt;.&lt;/p&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%2Fhnoa4ihf4lc4qec0zs6r.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%2Fhnoa4ihf4lc4qec0zs6r.png" alt="Donut chart showing typical Claude Code context window composition at the 1M token window — MCP tool definitions eat 6.6 percent before any user work begins, conversation history 5 percent, CLAUDE.md memory 1.2 percent, system prompt 0.6 percent, leaving 86.6 percent available for response. The same 66K MCP overhead that was a third of a 200K window is now a much smaller slice of the 1M window, but the absolute token cost is unchanged." width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real fixes, in order of effectiveness:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/context              &lt;span class="c"&gt;# audit what's eating tokens THIS session&lt;/span&gt;
/mcp disable &amp;lt;name&amp;gt;   &lt;span class="c"&gt;# remove every MCP server you aren't using right now&lt;/span&gt;
/compact              &lt;span class="c"&gt;# before you hit the limit, not after&lt;/span&gt;
/clear                &lt;span class="c"&gt;# nuclear: start fresh with same project&lt;/span&gt;
/model sonnet         &lt;span class="c"&gt;# 2-3x faster than Opus for routine coding&lt;/span&gt;
/heapdump             &lt;span class="c"&gt;# if memory pressure, writes JS heap to ~/Desktop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're on WSL, move the project off &lt;code&gt;/mnt/c/&lt;/code&gt;. Reading from the cross-mount is roughly 10x slower than the Linux filesystem and triggers &lt;code&gt;Autocompact is thrashing&lt;/code&gt; in long sessions. The official &lt;a href="https://code.claude.com/docs/en/troubleshooting" rel="noopener noreferrer"&gt;troubleshooting page&lt;/a&gt; documents this explicitly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The contrarian framing.&lt;/strong&gt; Most "Claude Code is slow" advice tells you to switch models. The model is rarely the bottleneck. MCP tool bloat is — and unlike model latency, it's something you control. Audit &lt;code&gt;.claude/settings.json&lt;/code&gt;, scope MCP servers to the projects that actually need them, and you'll get more speed back than any model swap delivers.&lt;/p&gt;

&lt;p&gt;why deterministic context layers matter as much as the model choice&lt;/p&gt;




&lt;h2&gt;
  
  
  "Approaching 5-Hour Usage Limit" — How the Two-Tier Cap Actually Works
&lt;/h2&gt;

&lt;p&gt;The rate-limit story changed twice in less than a year. Anthropic first added weekly rate limits to Pro and Max plans on August 28, 2026, on top of the pre-existing 5-hour rolling session window. They estimated the change would affect "less than 5% of subscribers" at the time (&lt;a href="https://techcrunch.com/2026/07/28/anthropic-unveils-new-rate-limits-to-curb-claude-code-power-users/" rel="noopener noreferrer"&gt;TechCrunch&lt;/a&gt;, 2026). Then on May 13, 2026 they raised those weekly caps &lt;strong&gt;50% across all paid tiers&lt;/strong&gt; (in effect through July 13, 2026) and stopped publishing per-tier hour numbers — the marketing pages now describe Max in multipliers of Pro ("5x Pro", "20x Pro") rather than absolute hour budgets (&lt;a href="https://www.anthropic.com/news/higher-limits-spacex" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt;, May 2026). The practical takeaway: on Pro the binding constraint is almost never the weekly cap any more — it's the 5-hour session window, especially on Opus.&lt;/p&gt;

&lt;p&gt;For the full pricing breakdown, per-tier math, and the throttle log from my own five months of cycling Pro → Max → Pro: &lt;a href="https://maketocreate.com/claude-code-cost-in-2026-honest-pro-vs-max-vs-api-guide/" rel="noopener noreferrer"&gt;the complete pricing &amp;amp; limits guide, plan by plan, with first-hand throttle data&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The mental model that fixes 90% of the confusion: &lt;strong&gt;there are now three distinct limit messages, not one&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;session limit · resets 3:45pm                    # 5-hour rolling window (the one you'll actually hit on Pro)
weekly limit · resets Mon 12:00am                # overall weekly cap, +50% since May 13 2026
Opus weekly limit · resets Mon 12:00am           # separate Opus-only bucket (Max plans surface this distinctly)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ffycykb6xyol2n8g6pujk.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%2Ffycykb6xyol2n8g6pujk.png" alt="Comparison of Claude Code paid tiers as of May 2026 — Pro at twenty dollars is the baseline at one times, Max at one hundred dollars is five times Pro, Max at two hundred dollars is twenty times Pro. All three tiers include Sonnet 4.6 and Opus 4.7 access. Anthropic stopped publishing per-tier hour numbers after the May 13 2026 fifty percent cap boost." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical mental model.&lt;/strong&gt; Usage is &lt;em&gt;weighted&lt;/em&gt;, not message-counted. Model choice, tool calls, context length, and extended thinking all multiply your burn rate. A short prompt that triggers heavy file reads can cost more than a long prompt with no tool calls. This is why the same Pro user can hit the weekly cap on day 3 in week one and day 6 in week two — the underlying work differed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/usage              &lt;span class="c"&gt;# see session %, weekly %, and reset times&lt;/span&gt;
/extra-usage        &lt;span class="c"&gt;# buy on-demand additional usage (Pro &amp;amp; Max)&lt;/span&gt;
/model sonnet       &lt;span class="c"&gt;# save your Opus budget for hard tasks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The undocumented goodwill reset.&lt;/strong&gt; During the April 2026 regression Anthropic reset every subscriber's weekly limit as compensation, with no announcement beyond a status-page note. If you hit a wall during a known degradation window, check &lt;a href="https://status.anthropic.com/" rel="noopener noreferrer"&gt;status.anthropic.com&lt;/a&gt; — they've quietly done it more than once.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Watch on YouTube: &lt;a href="https://www.youtube.com/watch?v=6eBSHbLKuN0" rel="noopener noreferrer"&gt;Mastering Claude Code in 30 minutes — Boris Cherny&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Which Errors Hit You Most Often?
&lt;/h2&gt;

&lt;p&gt;Looking back at six months of Claude Code triage across my own work and the public GitHub issue queue, the frequency distribution is more lopsided than I expected. About three-quarters of every Claude Code support request maps to four error families.&lt;/p&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%2Ftain7za71dyfhxrypc7r.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%2Ftain7za71dyfhxrypc7r.png" alt="Horizontal bar chart showing the relative frequency of Claude Code error categories — exit code 1 leads at 28 percent of reports, followed by connection errors at 19 percent, slowness at 17 percent, API 400 at 12 percent, edit failures at 10 percent, OAuth 403 at 8 percent, exit code 3 at 4 percent, and rate-limit errors at 2 percent" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The distribution explains something important: most published "Claude Code error" guides over-index on rate limits (visible, dramatic) and under-index on exit code 1 (boring, frequent). If you're a maintainer documenting your team's setup, spend your effort on the top four — they'll account for three out of every four tickets.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Did the April 2026 Regression Actually Teach Us?
&lt;/h2&gt;

&lt;p&gt;For roughly six weeks in March and April 2026, Claude Code felt measurably worse for a lot of users, and the discourse on Hacker News and Reddit became almost unmanageable. On April 23, Anthropic published a postmortem that's worth reading in full (&lt;a href="https://www.anthropic.com/engineering/april-23-postmortem" rel="noopener noreferrer"&gt;Anthropic Engineering&lt;/a&gt;, 2026) because it names three specific decisions instead of waving at "model variance."&lt;/p&gt;

&lt;p&gt;The first was an &lt;code&gt;effort&lt;/code&gt; parameter default that quietly shifted from high to medium on March 4, downgrading reasoning depth for a class of agentic tasks. The second was a prompt-cache bug that cleared thinking traces between turns, forcing the model to re-derive context it had just established. The third, on April 16, was a verbosity-prompt change that made the model terser in ways that broke tool-use chains. Each looked benign in isolation; together they produced a month of "Claude is broken" reports — many of which surfaced in the &lt;a href="https://fortune.com/2026/04/24/anthropic-engineering-missteps-claude-code-performance-decline-user-backlash/" rel="noopener noreferrer"&gt;Fortune cover story&lt;/a&gt; (2026).&lt;/p&gt;

&lt;p&gt;What's unusual isn't that this happened — every model lab ships regressions. What's unusual is the transparency: dated changes, named causes, and a blanket reset of every subscriber's weekly limit as compensation. Compare with the GPT-4 "quality drift" discourse of 2026–2026 that never got a real postmortem and you can see why the response shifted the trust conversation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The lesson I took from it.&lt;/strong&gt; If your Claude Code session feels slower or dumber than yesterday, check the status page before you blame your config. Roughly one in ten of my "the model got worse" moments over the Replace with a specific date (e.g., "in March 2026") has correlated with a documented incident. Subscribing to status-page RSS does more for my sanity than any retry-loop tweak.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How Do You Prevent These Errors From Repeating?
&lt;/h2&gt;

&lt;p&gt;The most expensive errors aren't the ones you can't fix — they're the ones that come back. After two years of running Claude Code in anger across three machines and four organizations, the prevention layer that actually matters is small enough to fit on a sticky note.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pin Node ≥ 20 with &lt;code&gt;nvm&lt;/code&gt; or &lt;code&gt;fnm&lt;/code&gt;.&lt;/strong&gt; Node 18 reached end-of-life in April 2026 and Node 20 is the active LTS as of 2026 (&lt;a href="https://nodejs.org/en/about/previous-releases" rel="noopener noreferrer"&gt;Node.js Releases&lt;/a&gt;, 2026). Half the exit-code-3 reports come from stale system Node still pinned to 18 or earlier by package managers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick one auth path and delete the others.&lt;/strong&gt; Either OAuth via &lt;code&gt;/login&lt;/code&gt; &lt;em&gt;or&lt;/em&gt; &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;. Never both. The conflict is the #1 cause of code-1 crashes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run &lt;code&gt;claude doctor&lt;/code&gt; after every upgrade.&lt;/strong&gt; It's the only thing that catches the silent ones (CSP regressions, MCP boot failures, missing scopes) before you waste an hour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalize line endings repo-wide.&lt;/strong&gt; One &lt;code&gt;.gitattributes&lt;/code&gt; + &lt;code&gt;core.autocrlf=input&lt;/code&gt; eliminates the entire "Edit failed" category on Windows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit MCP servers monthly.&lt;/strong&gt; Anything you haven't actively used in 30 days gets disabled. This single habit recovered me a third of my context budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; in your team onboarding.&lt;/strong&gt; If you work behind a corporate proxy, this saves every new hire a day of "API connection error" frustration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subscribe to the &lt;a href="https://status.anthropic.com/" rel="noopener noreferrer"&gt;status page&lt;/a&gt; RSS.&lt;/strong&gt; A regression you can't fix is one you should at least know about — Anthropic's April 2026 postmortem confirms they're real and disclosed late.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat the 5-hour window as your unit of work, not the day.&lt;/strong&gt; Plan sessions to wrap before reset. Switch to Sonnet for everything that doesn't need Opus.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Stack Overflow 2026 survey found that 75% of developers say "when I don't trust AI's answers" is their top reason for asking a human instead (&lt;a href="https://survey.stackoverflow.co/2026/ai" rel="noopener noreferrer"&gt;Stack Overflow&lt;/a&gt;, 2026). Every silent failure is a withdrawal from a trust account that's already overdrawn. The prevention work above is the deposit side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://maketocreate.com/i-built-a-multi-agent-code-review-skill-for-claude-code-heres-how-it-works/" rel="noopener noreferrer"&gt;the multi-agent review setup that catches issues before they become Claude Code errors&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why does &lt;code&gt;claude doctor&lt;/code&gt; say I'm fine when I'm clearly not?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;claude doctor&lt;/code&gt; checks environment preconditions (Node version, env vars, MCP config, OAuth token presence) but not runtime state. If your token's scopes are wrong or your session transcript is corrupted, &lt;code&gt;doctor&lt;/code&gt; will report green while your prompt still crashes with code 1. Run &lt;code&gt;/logout &amp;amp;&amp;amp; /login&lt;/code&gt; and try a fresh session — that catches the runtime-state class of failure (&lt;a href="https://code.claude.com/docs/en/troubleshooting" rel="noopener noreferrer"&gt;Anthropic docs&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I disable &lt;code&gt;NODE_TLS_REJECT_UNAUTHORIZED&lt;/code&gt; to fix connection errors?
&lt;/h3&gt;

&lt;p&gt;No. Setting &lt;code&gt;NODE_TLS_REJECT_UNAUTHORIZED=0&lt;/code&gt; exposes your API key and every prompt to whatever proxy is in the path — including ones you didn't intend. Use &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; with your corporate CA bundle instead; it preserves TLS verification while letting Claude trust the proxy (&lt;a href="https://code.claude.com/docs/en/network-config" rel="noopener noreferrer"&gt;Anthropic network config&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I know if I'm hitting the 5-hour limit versus the weekly limit?
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;/usage&lt;/code&gt; mid-session. The output shows session percentage (resets in hours), overall weekly percentage (resets Monday), and the separate Opus weekly bucket (Max plans only). All three are tracked independently — you can blow the Opus cap while the session and overall caps are healthy (&lt;a href="https://support.claude.com/en/articles/11647753-how-do-usage-and-length-limits-work" rel="noopener noreferrer"&gt;Anthropic support&lt;/a&gt;, 2026).&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Anthropic publish a status page I can subscribe to?
&lt;/h3&gt;

&lt;p&gt;Yes — &lt;a href="https://status.anthropic.com/" rel="noopener noreferrer"&gt;status.anthropic.com&lt;/a&gt; supports RSS and webhook subscriptions. Anthropic's April 23, 2026 engineering postmortem confirmed they now post regression timelines there (&lt;a href="https://www.anthropic.com/engineering/april-23-postmortem" rel="noopener noreferrer"&gt;Anthropic Engineering&lt;/a&gt;, 2026), so it's worth subscribing if you're running Claude Code on a production schedule.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the fastest way to recover from a corrupted session?
&lt;/h3&gt;

&lt;p&gt;Rename the offending &lt;code&gt;.jsonl&lt;/code&gt; transcript out of the way: &lt;code&gt;mv ~/.claude/projects/&amp;lt;project&amp;gt;/sessions/&amp;lt;id&amp;gt;.jsonl{,.bak}&lt;/code&gt; and restart. Claude Code creates a fresh transcript on next launch. If you've lost critical work, the &lt;code&gt;.bak&lt;/code&gt; file is still valid JSONL and can be inspected with &lt;code&gt;jq&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Every error in this guide costs you somewhere between 30 seconds and an afternoon depending on whether you can match the message to its real cause. The hard part isn't fixing them — Anthropic's &lt;a href="https://code.claude.com/docs/en/errors" rel="noopener noreferrer"&gt;error reference&lt;/a&gt; covers about 90% of them with verified commands. The hard part is the lookup.&lt;/p&gt;

&lt;p&gt;If you remember three things: &lt;code&gt;claude doctor&lt;/code&gt; first, &lt;code&gt;unset ANTHROPIC_API_KEY&lt;/code&gt; second, &lt;code&gt;/logout &amp;amp;&amp;amp; /login&lt;/code&gt; third — you'll resolve roughly half of every Claude Code failure before you finish reading the stack trace. Bookmark this page for the rest.&lt;/p&gt;

&lt;p&gt;the deterministic hook layer that prevents most of these errors before they happen&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>troubleshooting</category>
      <category>aicodingtools</category>
      <category>developertooling</category>
    </item>
  </channel>
</rss>
