{"schemaVersion":"1.0","publication":{"slug":"pivot-claude-code","name":"Claude Code Review","description":"Workflows, releases, and field notes for Anthropic's coding agent.","audience":"Developers and teams adopting Claude Code.","geography":null},"edition":{"id":"aa77f4c6-bab9-4dc1-b94a-6efcd613e465","date":"2026-09-30","status":"locked","createdAt":"2026-09-29T16:16:31.340Z","storyCount":9,"newsletterSubject":"Sonnet 5.5 costs half as much as Opus 5.5 and beats it on one coding test, but hands-on builds still favor Opus"},"updatedAt":"2026-09-29T16:00:44.311Z","stories":[{"id":"ac21b80f-9e3e-489f-80e7-39c75c1b78e6","title":"Sonnet 5.5 costs half as much as Opus 5.5 and beats it on one coding test, but hands-on builds still favor Opus","dek":"Sonnet 5.5 scores higher than Opus 5.5 on one standard coding test (a fixed set of tasks used to compare models) at half the price, though side-by-side builds still lean toward Opus.","bodyMd":"Anthropic released Claude Sonnet 5.5, and one writer reports trying it inside Claude Code. Separately, another tester compared it with Claude Opus 5.5 and OpenAI's GPT-6 Astra. A write-up of the model's scores says Terminal-Bench 4.0, a standard test used to compare models on the same tasks, jumps from 10.3% for Sonnet 5 to 70.6% for Sonnet 5.5. On GDPval-AA v2.1, another such test, Sonnet 5.5 scores 1844 against Opus 5.5's 1846.\n\nThe price gap is the practical part. A hands-on comparison puts Sonnet 5.5 at $2 for input and $10 for output, half the cost of Opus 5.5 and a fifth of OpenAI's GPT-6 Astra. The same write-up says Sonnet 5.5 costs the same per token as Sonnet 5 (tokens are the chunks of text a model reads and writes, and what you are billed for). It also says the model runs more than 30% faster than Sonnet 5 and typically costs up to 30% less per task at that unchanged rate.\n\nThe scores do not tell a one-way story. In that comparison, Opus 5.5 wins four of the five tests where all three models have data, and Sonnet 5.5 takes Terminal-Bench 4 even though it is the smallest of the three. The comparison then ran practical builds: a 15-second explainer video written in JavaScript, a boutique-hotel landing page and a sci-fi 3D travel dashboard. On the first two, the tester picked Opus 5.5 as the winner. On the explainer, Sonnet 5.5 followed closely, though the tester called its animation so fast in places that it was hard to follow. On the landing page, the tester said Sonnet and GPT-6 Astra were both not far behind Opus, and preferred Astra's page to Sonnet's. Astra's explainer was slower and, in the tester's view, less impressive.\n\nToken use was also reported. Sonnet 5.5 and Opus 5.5 each used about 300,000 tokens on the explainer, against about 70,000 for Astra. On the landing page the two Anthropic models used around 200,000 and Astra about 125,000.\n\nAnother builder used Claude Code with Sonnet 5.5 and subagents (helper Claude instances working in parallel) to make a 97-second film that renders live in the browser. The builder wrote one brief. Separate subagents composed the score and built ten scenes, including a 300,000-particle system. Every frame is a WebGL2 shader and the music is synthesised in the browser, with no image, video or sample files. Claude checked its own work by rendering frames to contact sheets and analysing the audio.\n\nOne safety detail: the write-up says Sonnet 5.5 carries Opus-level cyber safeguards, because its ability to develop exploits rose well past Sonnet 5's. It also says the model can beat Pokémon Red working only from screenshots. These are single-source claims from hands-on write-ups.","status":"published","storyType":"news","category":"Models","clusterKey":"sonnet-5-5-release-claude-code","slug":"sonnet-5-5-costs-half-as-much-as-opus-5-5-and-beats-it-on-one-coding-tes-ac21b8","url":"https://claudecodereview.ai/a/sonnet-5-5-costs-half-as-much-as-opus-5-5-and-beats-it-on-one-coding-tes-ac21b8/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/ac21b80f-9e3e-489f-80e7-39c75c1b78e6","role":"lead","position":0,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/sonnet-5-5-costs-half-as-much-as-opus-5-5-and-beats-it-on-one-coding-tes-ac21b8/dc9fbbeaa31be8ba-5cbb9ddd4891f355/web_hero.webp","imageAlt":"A balance scale weighing a single small block against a stack of two larger blocks to compare the cost and capability of two software models.","createdAt":"2026-09-29T15:41:19.426Z","updatedAt":"2026-09-29T16:00:34.956Z","sources":[{"role":"primary","title":"Claude Sonnet 5.5 Is Here: I Tried It on Claude Code (Opus 5.5 Level for Less)","url":"https://medium.com/@joe.njenga/claude-sonnet-5-5-is-here-i-tried-it-on-claude-code-opus-5-5-level-for-less-8f5b44a54b69?source=rss------claude_code-5","sourceName":"Joe Njenga","author":"Joe Njenga","publishedAt":"2026-09-29T07:36:11Z"},{"role":"supporting","title":"I Tested Sonnet 5.5 vs Opus 5.5 vs GPT 6 Astra (No Hype)","url":"https://www.youtube.com/watch?v=UREYH2PX6sI","sourceName":"Chase AI","author":"Chase AI","publishedAt":"2026-09-29T06:31:45Z"},{"role":"supporting","title":"I Tested Sonnet 5.5 vs Opus 5.5. What You Need to Know.","url":"https://www.youtube.com/watch?v=7eo-11K2e3c","sourceName":"Nate Herk | AI Automation","author":"Nate Herk | AI Automation","publishedAt":"2026-09-29T00:14:17Z"},{"role":"supporting","title":"Motion Design Showreel with Sonnet 5.5 | On par with Opus 5.5","url":"https://reddit.com/r/ClaudeAI/comments/1wsup4y/motion_design_showreel_with_sonnet_55_on_par_with","sourceName":"/u/Various-Affect4841","author":"/u/Various-Affect4841","publishedAt":"2026-09-28T23:43:44Z"},{"role":"supporting","title":"Sonnet 5.5 Just Beat Opus At Coding (At Half The Cost...)","url":"https://www.youtube.com/watch?v=aBPAmYi1FfU","sourceName":"Chase AI","author":"Chase AI","publishedAt":"2026-09-28T19:44:15Z"}]},{"id":"07551e5c-cacf-4735-8f5c-dffe59ac0c42","title":"Claude Code's read-only safety check could be tricked into approving commands that run attacker code","dek":"Anthropic's advisory says the fix in version 1.0.93 swapped a list of banned shell commands for a list of the only permitted ones, which refuses anything unfamiliar instead of letting new tricks through.","bodyMd":"Anthropic has disclosed on its own claude-code security-advisories page that the validator behind Claude Code's read-only mode could be fooled into auto-approving a command that then executed arbitrary code. The flaw is tracked as CVE-2025-66032 (GHSA-xq4m-mc3c-vvg3), rated 8.7 (High) on the CVSS v4.0 severity scale. Security researcher RyotaK of GMO Flatt Security Inc. reported it.\n\nRead-only mode decides which shell commands are safe enough to run without asking the user first. That makes the validator the trust boundary for any session where the agent works without a human approving each step. According to the advisory, the validator matched the surface form of a proposed command instead of correctly parsing what the shell would do with it. Two gaps did the damage: `$IFS`, the shell's field-separator variable, which can stand in for a literal space, and certain short CLI flag forms. A command built around either could be classified as read-only and approved, then execute arbitrary code.\n\nAnthropic states the precondition plainly: \"reliably exploiting this requires the ability to add untrusted content into a Claude Code context window.\" So this is a bypass of the gate, not a standalone remote-execution hole. It becomes dangerous when paired with prompt injection, such as a malicious file, issue, or tool output the agent reads during a session.\n\nAffected versions are `@anthropic-ai/claude-code` before 1.0.93. The fix did more than patch the two parsing cases. It replaced the validator's blocklist, a list of commands known to be unsafe where anything not listed gets through, with an allowlist, a list of the only commands permitted where anything not listed is refused. A blocklist only has to miss one shell construct to fail. An allowlist fails closed.\n\nThe advisory reports no in-the-wild exploitation before the fix shipped, and users on the standard auto-update channel received it without taking action. There is no confirmed case of the bypass being combined with a real injection payload against a real user. The advisory shows the gate could be defeated, not that it was.\n\nFor teams, the practical lesson is in the fix itself. If your own tooling gates agent actions by enumerating dangerous commands, the same failure mode applies. Anyone pinned to an older Claude Code build should check that it is at 1.0.93 or later.","status":"published","storyType":"news","category":"Release","clusterKey":"read-only-mode-validator-advisory","slug":"claude-code-s-read-only-safety-check-could-be-tricked-into-approving-com-07551e","url":"https://claudecodereview.ai/a/claude-code-s-read-only-safety-check-could-be-tricked-into-approving-com-07551e/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/07551e5c-cacf-4735-8f5c-dffe59ac0c42","role":"item","position":1,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-s-read-only-safety-check-could-be-tricked-into-approving-com-07551e/d00655f5f63ec0be-e8917642ba74cc01/web_hero.webp","imageAlt":"A diagram showing a gate transition from an open, permissive frame to a restricted grid that only allows three specific shapes to pass through.","createdAt":"2026-09-29T15:22:56.778Z","updatedAt":"2026-09-29T15:30:32.366Z","sources":[{"role":"primary","title":"Anthropic's Own Advisory: Claude Code's Read-Only Gate Could Be Tricked Into Running Arbitrary Code","url":"https://dev.to/ramdai_bista/anthropics-own-advisory-claude-codes-read-only-gate-could-be-tricked-into-running-arbitrary-code-3a11","sourceName":"Ramdai Bista","author":"Ramdai Bista","publishedAt":"2026-09-29T10:42:32Z"}]},{"id":"a6a86a60-c88f-4608-8143-1bc7c2cc6678","title":"Claude Code now starts sessions in auto mode as its plan-first setting loses its job","dek":"Auto mode uses a classifier to decide which actions are blocked and which are allowed, and plan mode, the older setting where it writes out a plan for you to approve before touching any file, is no longer where sessions begin.","bodyMd":"Claude Code v2.1.283 made auto mode the built-in starting mode for interactive terminal and VS Code sessions, on every plan and provider, according to a write-up of the release. Auto mode uses a classifier to decide which actions are blocked and which are allowed. That replaces plan mode as the default, which is the setting where the agent writes out a plan, waits for you to approve it, and only then builds.\n\nFor many developers the ritual before real work was pressing Shift+Tab until the footer said plan mode. Sessions no longer begin there. Claude Code has six permission modes in total: Manual, acceptEdits, plan, auto, dontAsk and bypassPermissions. The same write-up notes that plan mode only blocks edits.\n\nThe change followed a public argument. A developer's blog post titled \"Plan mode is dead,\" published September 24, reached the front page of Hacker News. Its case: plan mode made sense when models had to be forced to think before acting, but it now adds friction, produces tedious AI-written specs, and puts a wall between planning and building that better models do not need. Point counts differ by account: one write-up cites 576 points and nearly 500 comments, another 149 points and 151 comments.\n\nThe most notable reply came from Boris Cherny, the Anthropic engineer who built Claude Code and wrote its plan mode. He agreed, and explained how the feature worked. Plan mode never changed which tools the agent could use, because swapping the toolset mid-conversation invalidates the prompt cache and makes every following turn more expensive to serve. All it did was add a line to the prompt telling the model not to write code yet. Cherny said he stopped relying on it a few months ago, once he noticed that with newer models \"the model just got it,\" and planning became something that happens inside the normal back-and-forth.\n\nNot everyone in the thread agreed. One commenter argued plan mode still earns its keep when the blast radius is high, such as auth, payments or a shared schema, because a human needs a moment to say no before the edit starts. Another described a heavier process: plans written to markdown, reviewed with a separate tool, and a fresh session started just to hunt for ambiguities before anything is implemented.\n\nThe open question is where the pause should sit. One write-up's author calls a fixed on/off toggle a blunt proxy for what developers actually want, which is friction that scales with how much damage a bad edit could do. The other write-up pairs its comparison of the six modes with a settings.json meant to hold up under the new auto-mode default.","status":"published","storyType":"news","category":"Release","clusterKey":"plan-mode-dead-auto-mode-default","slug":"claude-code-now-starts-sessions-in-auto-mode-as-its-plan-first-setting-l-a6a86a","url":"https://claudecodereview.ai/a/claude-code-now-starts-sessions-in-auto-mode-as-its-plan-first-setting-l-a6a86a/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/a6a86a60-c88f-4608-8143-1bc7c2cc6678","role":"item","position":2,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-now-starts-sessions-in-auto-mode-as-its-plan-first-setting-l-a6a86a/d99845e6e49980cb-0eb9903fabaf5f6f/web_hero.webp","imageAlt":"Editorial illustration accompanying “Claude Code now starts sessions in auto mode as its plan-first setting loses its job”.","createdAt":"2026-09-29T15:45:09.101Z","updatedAt":"2026-09-29T16:00:24.944Z","sources":[{"role":"primary","title":"The Guy Who Built Claude Code’s Plan Mode Just Said It’s Dead","url":"https://medium.com/@sylvesteroguikpu/the-guy-who-built-claude-codes-plan-mode-just-said-it-s-dead-aff7f98ad1e3?source=rss------claude_code-5","sourceName":"Sylvester Oguikpu","author":"Sylvester Oguikpu","publishedAt":"2026-09-29T11:48:59Z"},{"role":"supporting","title":"Claude Code Modes Compared: Why Plan Mode Died","url":"https://medium.com/code-your-own-path/claude-code-modes-compared-why-plan-mode-died-8958e609434a?source=rss------claude_code-5","sourceName":"Aleksei Aleinikov","author":"Aleksei Aleinikov","publishedAt":"2026-09-28T06:28:23Z"}]},{"id":"6278b4f2-b528-4c1a-b671-717e2d708a59","title":"Running Claude Code without a live session used about 3x more of the 5-hour limit in one test","dek":"In a six-run Pro-account test, claude -p (a terminal command that has Claude Code answer one prompt and exit, without opening the back-and-forth chat) and the Python Agent SDK (a kit of ready-made code for building on a product) used far more of the 5-hour window than VS Code or the terminal CLI for the same dollar value of tokens, the chunks of text a model reads and writes.","bodyMd":"Running Claude Code headless, meaning without an interactive session, appears to cost far more of a subscription's 5-hour limit than running it interactively, even when the work is cheaper at API prices. A measurement posted to r/ClaudeAI on September 28 found interactive use (the VS Code extension and the terminal CLI) consumed about 1.7% of the limit per $1 of API-equivalent tokens. Headless use (the Python Agent SDK and `claude -p`) consumed about 5.2% per $1. Tokens are the chunks of text a model reads and writes, and they are what API pricing charges for. The `claude -p` flag is the CLI's non-interactive print mode: you type it in your terminal to have Claude Code answer one prompt and exit, without opening the back-and-forth chat. The Agent SDK is a kit of ready-made code for building on Claude Code. The author says they could not find this documented anywhere.\n\nThe developer noticed that one mid-sized headless task, run through the Agent SDK in a container, ate a big chunk of the window, while similar work in VS Code felt far cheaper. Assuming the headless agent was simply burning more tokens, they measured it.\n\nThe test used a Claude Code Pro account and one task: a medium refactor in a Python monorepo. The task added an optional field to a shared protocol model, handled it on several failure paths in a worker, updated the docs, and wrote tests across three packages. Each run made roughly 45 to 75 model calls. Every run started from the same commit in a fresh git worktree, on Opus 5 at medium effort, standard tier, no fast mode (checked in the transcripts). Nothing else touched the account. The author describes the flow as a \"study the repo and propose a plan\" step followed by \"plan approved, implement, run tests, commit\", and says the `claude -p` run got a single prompt covering both.\n\nUsage came from `/usage` before and after each run, and again 10 to 20 minutes later to catch delayed accounting; there was none. Cost was computed from per-message usage in the session transcripts at API list prices, and it matched Claude Code's own cost tracking to the cent.\n\nThe results:\n\n- VS Code extension, run A: 56 steps, 119k max context, $4.01, +7% of the 5-hour limit, 1.7% per $1.\n- VS Code extension, run B: 76 steps, 144k, $5.66, +9%, 1.6% per $1.\n- Interactive CLI: 63 steps, 119k, $4.38, +8%, 1.8% per $1.\n- Python Agent SDK, run A: 54 steps, 81k, $2.88, +15%, 5.2% per $1.\n- Python Agent SDK, run B: 61 steps, 98k, $3.44, +18%, 5.2% per $1.\n- `claude -p`: 44 steps, 84k, $2.53, +13 to 14%, 5.1 to 5.5% per $1.\n\nThe headless runs used fewer tokens, with smaller context and fewer steps, yet took about twice the limit per run, which works out to about 3x per token. The split is not VS Code against the terminal, since the CLI landed next to VS Code. Nor is it a custom system prompt or odd SDK settings: `claude -p` on the same machine, with the same CLI version as the extension and the default system prompt, matched the SDK's number.\n\nThe practical takeaway from the author: a headless task worth about $18 at API prices would take roughly 90% of a 5-hour window, while the same work done interactively would take about 30%. If you run agents headless on a subscription, the author says, budget for that.\n\nThe caveats are real. This is six runs, one task, one model and one Pro account, and `/usage` reports whole percentages, so each reading carries about ±1%. The author does not know which signal the accounting uses: the entrypoint, request patterns, or something else.","status":"published","storyType":"news","category":"Pricing","clusterKey":"headless-claude-code-rate-limit-cost","slug":"running-claude-code-without-a-live-session-used-about-3x-more-of-the-5-h-6278b4","url":"https://claudecodereview.ai/a/running-claude-code-without-a-live-session-used-about-3x-more-of-the-5-h-6278b4/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/6278b4f2-b528-4c1a-b671-717e2d708a59","role":"item","position":3,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/running-claude-code-without-a-live-session-used-about-3x-more-of-the-5-h-6278b4/920898f497686201-30da70f492dbe546/web_hero.webp","imageAlt":"A bar chart comparing six test runs, showing four short bars on the left and two much taller bars on the right.","createdAt":"2026-09-29T15:29:02.466Z","updatedAt":"2026-09-29T15:30:20.734Z","sources":[{"role":"primary","title":"Measured it: headless Claude Code (Agent SDK / claude -p) eats ~3x more of the 5-hour limit per token than interactive use (vscode)","url":"https://reddit.com/r/ClaudeAI/comments/1wsijnv/measured_it_headless_claude_code_agent_sdk_claude","sourceName":"r/ClaudeAI · u/Bitter-Truck1049","author":"r/ClaudeAI · u/Bitter-Truck1049","publishedAt":"2026-09-28T16:00:08Z"},{"role":"supporting","title":"Headless Claude Code Burns Through Rate Limits 3x Faster Than VS Code","url":"https://reddit.com/r/ClaudeAI/comments/1wsijnv/measured_it_headless_claude_code_agent_sdk_claude","sourceName":"r/ClaudeAI · u/Bitter-Truck1049","author":"r/ClaudeAI · u/Bitter-Truck1049","publishedAt":"2026-09-28T16:00:08Z"},{"role":"supporting","title":"Measured it: headless Claude Code (Agent SDK / claude -p) eats ~3x more of the 5-hour limit per token than interactive use (vscode)","url":"https://reddit.com/r/ClaudeAI/comments/1wsijnv/measured_it_headless_claude_code_agent_sdk_claude","sourceName":"/u/Bitter-Truck1049","author":"/u/Bitter-Truck1049","publishedAt":"2026-09-28T16:00:08Z"}]},{"id":"76e7d149-b1ac-4997-8221-c936f0360ef3","title":"Some tool servers connect to Claude Code but show zero tools after a 30-second timeout","dek":"Claude Code now negotiates a newer version of MCP, the standard connector that lets it plug into outside tools; the opening exchange between Claude Code and older tool servers written in Go stalls, so the connection looks fine but no tools load, and two workarounds and a fix exist.","bodyMd":"Since Claude Code began negotiating the 2026-07-28 version of the Model Context Protocol (MCP, the standard connector that lets Claude Code call outside tools), some local stdio servers connect fine and then list no tools. One developer's write-up, which cites GitHub issue anthropics/claude-code#97189, puts the cause on the server side.\n\n**What happens.** The handshake is the first exchange when Claude Code and a tool server connect and agree on how to talk. In the new version, that handshake sends a `subscriptions/listen` request. Servers built on older mcp-go, a Go library for writing MCP servers (in other words, tool servers written in the Go programming language), acknowledge it and then never answer anything else on stdio. Claude Code's `tools/list` call times out after 30 seconds, and the server sits there with no tools. The issue names mcp-grafana as an affected server. If you use an older Go-based server, you may hit this and need to update it or use a workaround.\n\n**How to spot it.** Look in the Claude Code logs for this line right after a successful connect:\n\n`Failed to fetch tools: Request timed out`\n\n**Workarounds** (both from the issue thread):\n\n1. Set `MCP_PROTOCOL_NEGOTIATION=legacy` before launching Claude Code.\n2. Put a filter in front of the server command so the listen request never reaches it: `grep --line-buffered -v '\"subscriptions/listen\"'`. Claude Code then cancels the pending listen on its own and lists the tools.\n\n**Permanent fix.** Update the server's mcp-go dependency to v1.1.1 or newer and redeploy. Not every server has bumped yet, so if you maintain a Go MCP server, check your mcp-go version before your users hit this.\n\n**Limits.** The grep wrapper is a stopgap, and the permanent fix needs access to the server's code, which users of third-party servers may not have.","status":"published","storyType":"tip","category":"Ecosystem","clusterKey":"stdio-mcp-zero-tools-protocol-negotiation","slug":"some-tool-servers-connect-to-claude-code-but-show-zero-tools-after-a-30-76e7d1","url":"https://claudecodereview.ai/a/some-tool-servers-connect-to-claude-code-but-show-zero-tools-after-a-30-76e7d1/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/76e7d149-b1ac-4997-8221-c936f0360ef3","role":"item","position":4,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/some-tool-servers-connect-to-claude-code-but-show-zero-tools-after-a-30-76e7d1/0471ecf2cf1f1775-09ade34ff8d72f69/web_hero.webp","imageAlt":"A broken chain representing a failed handshake, with a funnel below failing to catch empty set symbols.","createdAt":"2026-09-29T15:30:54.165Z","updatedAt":"2026-09-29T16:00:44.311Z","sources":[{"role":"primary","title":"heads up if a stdio MCP server suddenly shows zero tools in claude code","url":"https://reddit.com/r/ClaudeCode/comments/1wrxv0r/heads_up_if_a_stdio_mcp_server_suddenly_shows","sourceName":"/u/optima-pacifist","author":"/u/optima-pacifist","publishedAt":"2026-09-27T22:38:55Z"},{"role":"supporting","title":"[Workflow] Troubleshooting: Claude Code stdio MCP Server Shows Zero Tools (mcp-go protocol negotiation issue)","url":"https://reddit.com/r/ClaudeWorkflows/comments/1ws1ud1/workflow_troubleshooting_claude_code_stdio_mcp","sourceName":"/u/ClaudeAI-mod-bot","author":"/u/ClaudeAI-mod-bot","publishedAt":"2026-09-28T01:47:41Z"}]},{"id":"25de31ce-e550-4642-8373-4251f050816a","title":"Claude Code's Max effort costs 3x the tokens, and one team member's tests show when High is enough","dek":"Effort controls how much checking Claude does on its own work, and a Claude Code team member's test numbers suggest Max pays off mainly when Claude runs unattended.","bodyMd":"Effort tells Claude how much compute to spend on a task. Higher effort means Claude takes more independent steps to evaluate and verify its own work. Each level up improves the result and costs more tokens, the units of text Claude reads and writes. A Claude Code team member ran the same tasks at different levels and published the changes. The conclusion: Max is not a sensible default.\n\n**What the numbers showed**\n\n- On Terminal Bench 3, a community benchmark, Opus 5.5 at High matched Fable 5.1 at Max with half the tokens.\n- In a fitness-tracker app built from a single prompt, Low took 1.5 minutes and produced a log and a simple chart. Medium took 4 minutes and High took 11. Max took 67 minutes, added a heatmap and made more decisions on its own.\n- After Claude interviewed the developer about the app and that spec was applied at every level, the final versions came out largely similar. Max took 79 minutes and spent some of them simplifying details.\n- The big gains came on hard tasks full of hidden edge cases. Fable 5.1 went from 34% to 75% on hardware tasks and from 64% to 87% on security tasks.\n- An HTML sanitizer task shows the gap. At Low, Claude wrote it in one attempt, tested one page and stopped after about two minutes. At High it took 33 minutes: it attacked its own draft, checked the process source, ran a series of XSS tests and wrote a fuzzer. Fable 5.1 passed 1 of 5 attempts at Low and all 5 at High.\n\n**Where Max stops helping**\n\nAcross 370 attempts per setting, Max cut the edge cases Fable 5.1 missed from 59 to 24. Wrong decisions fell only from 133 to 107, while picking the wrong interpretation of the task rose from 25 to 47. Max also used three times the tokens per attempt. The takeaway: effort catches the case you forgot, but it does not fix a wrong approach.\n\n**The suggested routine**\n\n1. Use Low for a first sketch, Medium for everyday features and High for bugs and edge cases.\n2. Save Max for runs where Claude works alone from start to finish.\n3. For a feature, let Claude interview you first, build on Low, review the result yourself, then have Claude verify on High.\n4. Switch levels mid-conversation with `/effort`. The team member says this does not break the prompt cache.\n\nOn feature work, Max pulls you out of the follow-up loop, and Claude makes more assumptions on your behalf. Build on Low or Medium, review it yourself and keep High for verification.","status":"published","storyType":"tip","category":"Workflow","clusterKey":"effort-level-guidance-max-wastes-tokens","slug":"claude-code-s-max-effort-costs-3x-the-tokens-and-one-team-member-s-tests-25de31","url":"https://claudecodereview.ai/a/claude-code-s-max-effort-costs-3x-the-tokens-and-one-team-member-s-tests-25de31/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/25de31ce-e550-4642-8373-4251f050816a","role":"item","position":5,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-s-max-effort-costs-3x-the-tokens-and-one-team-member-s-tests-25de31/0b43d46b45ea5f0b-7f770251a23813fe/web_hero.webp","imageAlt":"A four-tier stack with the highest level detached and floating above the others.","createdAt":"2026-09-29T02:59:25.073Z","updatedAt":"2026-09-29T03:00:15.301Z","sources":[{"role":"primary","title":"Claude Code Team Member Reveals When Max Effort Wastes 3x Tokens","url":"https://www.youtube.com/watch?v=JYyzYnvad50","sourceName":"@DIYSmartCode","author":"@DIYSmartCode","publishedAt":"2026-09-26T15:15:36Z"}]},{"id":"9e290101-f653-42e3-a835-41fe844a1360","title":"Claude Code kept passing tests while getting five tasks wrong on a 240,000-line online-store add-on","dek":"A course team's field report on Easy Digital Downloads, a 240,000-line add-on that lets WordPress sites sell downloads, shows five ways the agent reported success on wrong work, each caught by a quick terminal command.","bodyMd":"Sleeves Up, which runs a course on Claude Code, watched the agent work on Easy Digital Downloads: a GPL-licensed WordPress ecommerce plugin of about 240,000 lines of PHP, with a PHPUnit test suite that runs in Docker. Most of the time, the team says, Claude Code read the right files and named the right causes. In five cases it did not, and none looked wrong: each ended in a confident summary, most in a green test run.\n\n**The fix that patched the crash site.** With the admin language set to Russian, the Downloads page died with a `ValueError` at line 159 of `License_Upgrade_Notice.php`. The agent correctly guessed that a Russian string had a single `%` where English has `%%`. Then it swapped `printf` for `str_replace` on that line, and the test went green in two minutes six seconds. The bad value actually lived in the language pack, which renders in four other places. A Stripe fee test then failed with an `ArgumentCountError`: same cause, new location. The team's own CLAUDE.md told the agent never to read `languages/`, which kept it one folder short. The check: read the diff at the crash site last, and ask where the value came from.\n\n**The requirement that became a comment.** The task was to add a test that registers a gateway through a filter and asserts that `Registry::get()` includes it. That function caches gateways in a `static` variable that earlier tests had already filled. The agent recognised this and declined to change production code. It asserted through reflection and a second filter instead, then said the test confirmed the behaviour end to end. Searching the diff with `grep -n` showed both mentions of `Registry::get()` were comments. The test never called it. The check: write your asks down and diff them before you diff the code.\n\n**The refactor that stayed green.** Asked to modernise three credit card helpers with no behaviour change, the agent rewrote them, ran the checkout suite (241 tests, 3 known upstream failures) and reported the behaviour matched. But no test referenced `edd_purchase_form_validate_cc_exp_date()`. A three-assertion probe showed month `'12'` with year `'27'` came back expired after the rewrite, because a capital `Y` in the new date format demands four digits. The original passed all three. The function is public API for gateway extensions, and the checkout form shows two-digit years. The check: look up test coverage for every function the diff touches.\n\n**The three-line change that came back as twenty-eight.** Upstream issue #9819 needs one parameter passed through in `edd_format_discount_rate()`. Given a store owner's phrasing, the agent produced 28 lines in and 3 out. It added a new filter, and \"10.00%\" became \"10%\" on every store. It also wrote seven passing tests for behaviour it had invented. `git diff --stat` shows the size gap. `git status --short` reveals the untracked test file. The discounts group the agent skipped then showed 255 tests with 3 failures, each expecting `'20.00%'`.\n\n**The session that read and changed nothing.** For the bare prompt \"fix the bug where searching a customer by email returns nothing\", the agent found the right lines in 53 seconds. It kept reading anyway: 11 groups of searches and reads with no edits at three minutes eighteen seconds. Left to finish, a rehearsal ran 29 minutes and 92 tool calls, with the first edit at call 80. It changed the query class every customer lookup uses, and cost $5.09. The team pressed Escape at three minutes and kept the session, then re-asked with the symptom's condition, a model to copy and a fence. One minute thirty-nine later: a seven-line edit in the right file, 202 customer tests green, $0.27.\n\nThe team's reading budget has three tells, any one of which stops the turn: three minutes with no edit, the same file read twice with nothing changed between, or a new approach announced with no edit behind the last one.\n\nAll five checks, run in order on the five diffs, took three minutes fifty-one seconds. The team also turned each catch into a CLAUDE.md rule and re-ran the first failure with a fresh session. The agent fixed the language pack and hardened the PHP, but left the Stripe fee string with the same lone percent two lines below its edit, and the Stripe test still failed. The rules got the agent further; the review still had to catch the rest. Sleeves Up notes that model output varies between runs, so results may differ, and the post promotes its paid course.","status":"published","storyType":"news","category":"Workflow","clusterKey":"five-failures-240k-line-codebase","slug":"claude-code-kept-passing-tests-while-getting-five-tasks-wrong-on-a-240-0-9e2901","url":"https://claudecodereview.ai/a/claude-code-kept-passing-tests-while-getting-five-tasks-wrong-on-a-240-0-9e2901/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/9e290101-f653-42e3-a835-41fe844a1360","role":"item","position":6,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-kept-passing-tests-while-getting-five-tasks-wrong-on-a-240-0-9e2901/3a1255fee556129b-1e9f9a914c431fbf/web_hero.webp","imageAlt":"Five vertical stacks of code blocks, with one stack slightly pulled apart to reveal a mismatched fragment that highlights a discrepancy in the code.","createdAt":"2026-09-29T03:05:19.374Z","updatedAt":"2026-09-29T03:30:45.994Z","sources":[{"role":"primary","title":"Five Claude Code Failures on a 240K-Line Codebase and How to Catch Them","url":"https://dev.to/sleevesupai/five-ways-claude-code-failed-on-a-240000-line-wordpress-plugin-2l7j","sourceName":"Sleeves Up","author":"Sleeves Up","publishedAt":"2026-09-26T08:30:06Z"}]},{"id":"164b7efd-84ec-4e30-9a2b-b5333a5ec223","title":"Orca, a free app, runs Claude Code and other coding agents side by side on one project","dek":"Each agent works in its own separate copy of your project's code, so several can build features at once without overwriting each other's unfinished files.","bodyMd":"Orca, a free open-source desktop app, lets a developer run Claude Code, Codex, Cursor's command-line agent, Devin and roughly 30 other coding agents at the same time on one project, according to a recent walkthrough. Each task gets its own Git worktree: a second real copy of the project's code, on its own branch and in its own folder. One agent can rebuild a billing page while another fixes a login bug, and neither sees the other's half-finished files.\n\nThe walkthrough says Orca is built by Stability, is MIT-licensed, and has passed 70,000 GitHub stars. The team calls it an agentic development environment. Doing the same by hand meant running `git worktree add`, opening a terminal, changing folders and remembering which window belonged to which branch. Orca handles that from a sidebar.\n\n**What runs where.** Orca does not host your code or route model calls through its own server. You sign in with your existing Claude or Codex plan and everything runs on your machine. Downloads are at orca.dev/downloads: Mac builds for Apple Silicon and Intel, a signed Windows installer, Linux packages and a Homebrew command. A headless mode, Orca Server, targets Linux machines with no screen. A separate video describes a companion mobile app, now on the iOS App Store with an Android APK, that pings you when an agent finishes or needs input.\n\n**Setup details that matter.** Git ignores `node_modules` and `.env`, so new worktrees start without them. Orca reads an `orca.yaml` file at the project root where you list shared folders such as `node_modules`, which are linked instead of reinstalled. A separate `.worktree` file holds items like `.env` that should not be copied, so each worktree keeps its own environment variables. It tracks exact paths only, not wildcard patterns. Pasting a GitHub, Linear or Jira ticket link into the name field generates the branch name.\n\n**Permissions default.** By default Orca launches agents with permission checks bypassed, so they do not stop to ask before adding a file. The walkthrough calls that a time saver for throwaway projects and recommends switching to manual mode for a client repo or anything using production credentials. The setting can be changed later.\n\n**Comparing agents.** The main use the walkthrough demonstrates is giving the same prompt to several agents on separate branches, then keeping the best diff and deleting the rest, which removes both folder and branch. Different models make different mistakes on the same task, so side-by-side comparison is often faster than going back and forth with one. It also helps with rate limits: if Claude hits its cap mid-day, the Codex worktree keeps going. A status bar shows usage per provider by reading the usage files each agent already keeps on disk, with 5-hour and weekly limits and an alert at 80%.\n\nFor review, Orca's diff view compares against the branch you started from, lets you comment on specific lines and send those comments to the agent as follow-up instructions, and shows which lines the agent wrote. A design mode lets you click a UI element in a built-in browser tab. Orca then attaches its HTML, computed CSS, a cropped screenshot and the source file and line, when a source map exists, to the agent's prompt. A separate post describes Hermes, an agent-to-agent communication layer, as included by default.\n\nThe walkthrough is candid about costs. Each worktree takes disk space, so cleanup becomes routine. The interface feels crowded on 13-inch laptops. Orca collects anonymous usage data by default, which can be turned off from the telemetry page in the docs. The release page shows more than 70 releases, sometimes several in one day, so a setting learned last month may have moved. For a team already paying for two or three agents, the walkthrough judges putting them in one window with a real review tool an easy call.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"orca-parallel-worktree-agents","slug":"orca-a-free-app-runs-claude-code-and-other-coding-agents-side-by-side-on-164b7e","url":"https://claudecodereview.ai/a/orca-a-free-app-runs-claude-code-and-other-coding-agents-side-by-side-on-164b7e/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/164b7efd-84ec-4e30-9a2b-b5333a5ec223","role":"item","position":7,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/orca-a-free-app-runs-claude-code-and-other-coding-agents-side-by-side-on-164b7e/69ddb8e96ea89c96-1a9486ec45672a8a/web_hero.webp","imageAlt":"A diagram shows a main folder branching into four smaller sub-folders, with one sub-folder lifted away from the group to highlight its separation.","createdAt":"2026-09-29T03:13:36.872Z","updatedAt":"2026-09-29T03:30:37.840Z","sources":[{"role":"primary","title":"Orca Lets You Run Claude Code, Codex, and Cursor on One Repo in Parallel","url":"https://www.youtube.com/watch?v=RNuNVbLdwVw","sourceName":"@AIStackEngineer","author":"@AIStackEngineer","publishedAt":"2026-09-24T09:55:44Z"},{"role":"supporting","title":"Orca IDE Runs Multiple Claude Code Agents in Parallel With Isolated Worktrees","url":"https://instagram.com/reel/DdrFmrrRT_k","sourceName":"@drcintas","author":"@drcintas","publishedAt":"2026-09-24T14:23:36Z"}]},{"id":"d3648e95-3db5-4a78-92ca-1a11f4361c54","title":"Claude-mem and four other GitHub tools aim to give Claude Code memory between sessions","dek":"Claude Code starts each session without your earlier work, and a handful of community plugins try to fix that by saving and restoring project context.","bodyMd":"Memory across sessions is the gap several community tools target, and the same names keep turning up in recent roundups. The techniques below are separate, but all of them aim to spare you from re-explaining your project every time you open Claude Code.\n\n**A five-repo shortlist for session memory.** One roundup points to five GitHub projects that it says help Claude remember past sessions, restore project context and search previous work: Lossless Context Management (LCM), claude-memory, claude-mem, claude-code-memory and context-memory. The post gives links and no comparison, so you would need to read each README to see how they store and retrieve context. Treat it as a list of candidates, not a ranking.\n\n**Claude-mem as the default pick.** The one tool that appears in every source is claude-mem. A video walkthrough says it gives Claude Code memory across sessions so it remembers your projects, files and context without you explaining everything again. A separate short video makes the same claim, and both call it a plugin you install. Neither shows how it works internally or what it costs in tokens.\n\n**Trimming context with Headroom.** The same walkthrough pairs memory with Headroom, which it says removes unnecessary context before a request reaches the model. The stated payoff is the same results with fewer tokens. That matters if a memory tool starts feeding more history into each session than you want to pay for.\n\n**Converting Office files with AnyDoc.** A second video recommends AnyDoc, which turns PowerPoint, Excel and Word files into clean markdown. The claim is that Claude reads them faster and burns far fewer tokens than it would on the raw files. It is aimed at projects where specs or data live in Office documents.\n\n**Setup advice from Claude Code Setup.** Both videos mention Claude Code Setup, a plugin that scans your codebase and recommends hooks, skills, sub-agents and MCP servers that fit the project. One of them describes it as an official Anthropic plugin. It sits alongside memory rather than replacing it: it suggests what to configure, not what to remember.","status":"published","storyType":"roundup","category":"Ecosystem","clusterKey":"memory-plugins-roundup","slug":"claude-mem-and-four-other-github-tools-aim-to-give-claude-code-memory-be-d3648e","url":"https://claudecodereview.ai/a/claude-mem-and-four-other-github-tools-aim-to-give-claude-code-memory-be-d3648e/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/d3648e95-3db5-4a78-92ca-1a11f4361c54","role":"item","position":8,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-mem-and-four-other-github-tools-aim-to-give-claude-code-memory-be-d3648e/dc17a444becfb51e-17ccd3e0fa8a05d8/web_hero.webp","imageAlt":"Five blocks in a row with the centre block lifted upwards, representing the primary session memory tool highlighted among four other GitHub repository options.","createdAt":"2026-09-29T03:15:44.269Z","updatedAt":"2026-09-29T03:30:29.258Z","sources":[{"role":"primary","title":"Five Claude Code Plugins That Extend Memory, Routing, and Context Control","url":"https://www.youtube.com/watch?v=zXlfetZy7Mc","sourceName":"@AIwithAbhijay","author":"@AIwithAbhijay","publishedAt":"2026-09-26T10:15:50Z"},{"role":"supporting","title":"Five Free Claude Code Plugins That Boost Memory, Skills, and Token Efficiency","url":"https://tiktok.com/@sadie.ontech/video/7689581380824485153","sourceName":"sadie.ontech","author":"sadie.ontech","publishedAt":"2026-09-25T21:03:05Z"},{"role":"supporting","title":"Five GitHub Tools That Stop Claude Code From Forgetting Your Project","url":"https://x.com/RoundtableSpace/status/2103563940919681396","sourceName":"0xMarioNawfal","author":"0xMarioNawfal","publishedAt":"2026-09-25T19:15:00Z"}]}],"tips":[{"id":"a1514f8d-452e-45f5-a72a-2b9592d638e2","title":"Which Claude Code project files to commit, and what goes in CLAUDE.md versus .claude","dek":"Anthropic's docs contrast CLAUDE.md, the instructions file Claude reads every session, with skills, which load only when called or relevant; the hidden .claude folder holds the rest of the project's Claude Code configuration.","bodyMd":"Claude Code's docs say what each project file does and when it loads, and that decides where an instruction belongs. The clearest contrast is between `CLAUDE.md`, the instructions file Claude reads at the start of every session, and skills, which load only when you call them or when they are relevant. Here is the layout, drawn from Anthropic's pages on memory, the `.claude` directory, skills, subagents, MCP and settings (read October 25, 2026).\n\n**CLAUDE.md: what every session needs.** Put build and test commands, naming conventions, project layout and \"always do X\" rules in `CLAUDE.md` at the repo root or in `.claude/CLAUDE.md`. Keep it under 200 lines: longer files use more context and Claude follows them less reliably. Write checkable instructions (\"Run `npm test` before committing\", not \"Test your changes\"). Run `/init` to draft one from your codebase and `/context` to confirm it loaded. Anthropic's trigger for adding a line: Claude made the same mistake twice, a code review caught something it should have known, or you retyped the same correction.\n\nCLAUDE.md is context, not enforcement. If something must happen every time, such as blocking edits to `.env`, use a hook in settings.\n\n**Everything else under `.claude`**\n\n`.claude` is the hidden project folder that holds Claude Code's configuration, skills, agents and rules.\n\n- `.claude/rules/*.md`: topic-specific instructions. A rule with `paths` frontmatter (for example `\"src/api/**/*.ts\"`) loads only when Claude reads or edits a matching file. A rule without `paths` loads at launch, with the same priority as `.claude/CLAUDE.md`. `@path` imports in CLAUDE.md still load with it, so they don't save context. Path-scoped rules do.\n- `.claude/skills/<name>/SKILL.md`: workflows and long checklists that load when called or relevant. The folder name becomes a command such as `/deploy`.\n- `.claude/agents/<name>.md`: subagents with their own system prompt, tools and optional model. They run in a separate context window and return a summary, which suits tasks that read dozens of files.\n- `.claude/settings.json`: team permissions, hooks, plugins and environment variables.\n- `.mcp.json` at the repo root: project MCP servers, added with `claude mcp add --scope project`. Each person is asked to approve them before use. Use `${API_KEY}` or `${VAR:-default}` placeholders so keys expand from each person's environment.\n\n**What to commit.** `CLAUDE.md` (or `.claude/CLAUDE.md`), `.claude/rules/`, `.claude/skills/`, `.claude/agents/`, `.claude/settings.json`, and `.mcp.json` with placeholders.\n\n**What to keep out of git.** `CLAUDE.local.md` (add it to `.gitignore`) and `.claude/settings.local.json`, which holds personal overrides and wins over the team file. Claude Code creates the latter when you pick \"Yes, and don't ask again\" on a permission prompt and adds it to your global git excludes. If you create it by hand, ignore it yourself. Files in `~/.claude` and auto memory under `~/.claude/projects/` never enter the repo.\n\n**If the repo also serves other agents.** By default Claude Code reads `AGENTS.md` only when no `CLAUDE.md`, `.claude/CLAUDE.md` or `CLAUDE.local.md` exists in the working directory or above. Adding a `CLAUDE.local.md` therefore makes Claude stop reading `AGENTS.md` for you. To keep one shared file, put `@AGENTS.md` on the first line of `CLAUDE.md` and add Claude-only notes below. Alternatively, set **Project instructions** in `/config` to `claude-md-and-agents-md` to read both. Reading `AGENTS.md` directly needs Claude Code v2.1.277 or later, so use the import on older installs.\n\nAnything under `.agents/` is not read as instructions, and the skills docs list only `.claude/skills` locations. Cursor documents reading `.claude/skills`, which makes it the one skills path both tools document.","category":"Workflow","slug":"which-claude-code-project-files-to-commit-and-what-goes-in-claude-md-ver-a1514f","url":"https://claudecodereview.ai/a/which-claude-code-project-files-to-commit-and-what-goes-in-claude-md-ver-a1514f/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/a1514f8d-452e-45f5-a72a-2b9592d638e2","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/which-claude-code-project-files-to-commit-and-what-goes-in-claude-md-ver-a1514f/88eda2ba5e65f4bd-18af441a6d0bd9f4/web_hero.webp","imageAlt":"A tall rectangular prism stands taller than a group of small, varied blocks, representing the distinction between core instructions and modular project configuration.","createdAt":"2026-10-30T03:33:49.533Z"},{"id":"012d35b5-2133-4478-8cb3-f1e7957e1fbe","title":"Keep long sessions from filling up on tool output with the Context Mode plugin","dek":"Context Mode routes raw MCP output into a sandbox and tracks session events in SQLite, which its README says keeps far less raw output from heavy browser, GitHub and log tools in your context.","bodyMd":"Context Mode is an MCP server plus a set of hooks that keeps raw tool output out of the chat. According to its README, a Playwright snapshot costs 56 KB, twenty GitHub issues cost 59 KB and one access log is 45 KB. After about 30 minutes of work, roughly 40% of a Claude Code context can be gone, and after compaction the agent can lose track of which files it was editing. Context Mode keeps the raw output in a sandbox so only a small result reaches the conversation. It also records session events in SQLite so work survives compaction.\n\n## Set it up\n\nYou need Claude Code v1.0.33 or newer (`claude --version`). If `/plugin` is not recognized, update with `brew upgrade claude-code` or `npm update -g @anthropic-ai/claude-code`.\n\n1. **Install.** Inside Claude Code run `/plugin marketplace add mksglu/context-mode`, then `/plugin install context-mode@context-mode`. Restart Claude Code or run `/reload-plugins`.\n2. **Verify.** Run `/context-mode:ctx-doctor`. Every check should show `[x]`. It validates runtimes, hooks, FTS5 and plugin registration. Fix anything red first, because the routing hooks are what make the savings automatic.\n3. **Let the model write code instead of reading files.** Routing is automatic: a SessionStart hook injects instructions at runtime, so nothing is written into your project. The README's example replaces 47 `Read()` calls (700 KB) with one `ctx_execute()` script that prints only line counts (3.6 KB). The README quotes 315 KB shrinking to 5.4 KB for sandboxed output. Those are the project's own numbers, so measure yours.\n4. **Measure.** `/context-mode:ctx-stats` shows a per-tool breakdown, tokens consumed and the savings ratio. For a live meter, add this to `~/.claude/settings.json` and restart:\n\n```json\n{\n  \"statusLine\": {\n    \"type\": \"command\",\n    \"command\": \"context-mode statusline\"\n  }\n}\n```\n\n5. **Index docs you keep re-reading.** `/context-mode:ctx-index` loads a local file or directory into a persistent FTS5 knowledge base. `/context-mode:ctx-search` then returns only the relevant passages through BM25 search. `/context-mode:ctx-purge` permanently deletes everything indexed.\n\n## Try it without the plugin\n\n`claude mcp add context-mode -- npx -y context-mode` adds only the MCP server. You get all 11 tools but no automatic routing or slash commands, so the model is not nudged away from raw Bash, Read and WebFetch and savings are smaller. It works as a low-commitment test.\n\n## When it is worth it\n\nThe plugin targets long sessions that lean on browser, GitHub or log-heavy MCP tools and keep hitting compaction. For short sessions, the write-up says the overhead is not worth it.\n\nOne caution from the README: if you do not start with `--continue`, previous session data is deleted immediately, so a fresh session is a clean slate. After a compaction, Context Mode indexes the recorded events (file edits, git operations, tasks, errors, decisions) and retrieves only what is relevant rather than replaying the history.","category":"Workflow","slug":"keep-long-sessions-from-filling-up-on-tool-output-with-the-context-mode-012d35","url":"https://claudecodereview.ai/a/keep-long-sessions-from-filling-up-on-tool-output-with-the-context-mode-012d35/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/012d35b5-2133-4478-8cb3-f1e7957e1fbe","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/keep-long-sessions-from-filling-up-on-tool-output-with-the-context-mode-012d35/64ab7afaa95425f6-2859cb9dfee6cb92/web_hero.webp","imageAlt":"A funneling graphic showing forty-seven rectangular blocks passing through a narrow aperture into one single, small cube.","createdAt":"2026-10-30T03:31:19.263Z"},{"id":"a3b34cbb-9e00-4643-bdea-82b6d27706e5","title":"Shrink test logs and JSON output before they hit your token bill","dek":"Headroom, an open-source local proxy (a program on your machine that sits between Claude Code and the model), compresses logs and tool output, including JSON and token-heavy text, before it is sent, and one command wraps your sessions.","bodyMd":"Test runs, build logs, large JSON (the structured data format many tools print) and long diffs go back to the model on every step, and you pay for those tokens each time. Tokens are the units of text the model bills by. Headroom is an open-source tool that sits between Claude Code and the model and compresses that material first. Its README gives one example: a log that costs 10,144 tokens shrinks to 1,260 while the same fatal error is still found.\n\nCompression runs on your machine. Headroom routes each piece of content to a fitting compressor (one for JSON, one that understands code structure, a text model for prose) and caches the originals locally. The model gets a `headroom_retrieve` tool to pull back the full text when it needs it. Headroom flags content that would break your provider's prompt cache but does not rewrite your prompts.\n\n## Setup\n\n1. Install the CLI with `uv tool install --python 3.13 \"headroom-ai[all]\"` or `pip install \"headroom-ai[all]\"`. The npm package (`npm install headroom-ai`) is the TypeScript SDK only and has no CLI.\n2. Run `headroom wrap claude`. It starts a local proxy (a program on your machine that sits between Claude Code and the model), installs the Serena MCP server for semantic code navigation (registered for the wrapped project only) and launches Claude Code routed through Headroom. Launch Claude Code this way each session. To back out, run `headroom unwrap claude`.\n3. Check it works: `headroom doctor` confirms routing, `headroom perf` shows compression stats, and `headroom dashboard` shows live savings while the proxy is running. Run `doctor` first.\n4. If you would rather not wrap anything, run `headroom proxy --port 8787` and point your tools at it. Anything that can set an API base URL can use it, including your own scripts.\n5. Optionally, run `headroom learn`. It mines failed sessions and writes corrections to `CLAUDE.local.md` (gitignored) by default, or to `CLAUDE.md` or `AGENTS.md` if you choose. Review what it proposes before committing it to a shared file.\n\n## When it pays off\n\nLong sessions on a large repo, usage limits you keep hitting, or per-token billing are the cases where a quick trial makes sense. Sessions heavy on test runs, build logs and large JSON compress well. A session of short prompts will not move much.\n\n## Caveats\n\nThe 10,144 to 1,260 figure is the README's own example, not a benchmark of your repo, so measure with `headroom perf` on real sessions. Headroom also adds a local proxy to your setup, one more moving part when something breaks. The same `wrap` command works for Codex, Cursor, Aider, Cline, Goose and OpenHands.","category":"Workflow","slug":"shrink-test-logs-and-json-output-before-they-hit-your-token-bill-a3b34c","url":"https://claudecodereview.ai/a/shrink-test-logs-and-json-output-before-they-hit-your-token-bill-a3b34c/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/a3b34cbb-9e00-4643-bdea-82b6d27706e5","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/shrink-test-logs-and-json-output-before-they-hit-your-token-bill-a3b34c/5aa2e890dcb437f0-544c3236601d11e5/web_hero.webp","imageAlt":"A wide funnel feeds three types of data blocks into a single narrow tube, where a clay-orange filter section represents compressed data output.","createdAt":"2026-10-29T21:58:29.261Z"},{"id":"bbbd9b99-2dd4-4c09-9d14-30e77a90254a","title":"Catch file changes a PostToolUse hook misses with a Stop hook that asks git","dek":"In a scripted test, a PostToolUse hook matching Edit|MultiEdit|Write saw 3 of 7 file changes, while a Stop hook running git status saw all 7.","bodyMd":"In a scripted test, a PostToolUse hook matched on `Edit|MultiEdit|Write` saw only the changes made through Claude's file tools. On Claude Code 2.1.312, it caught 3 of 7 changes. The four it missed were made through Bash: `sed -i`, a `>` redirect, `rm` and `git mv`. A Stop hook that runs `git status` listed all seven, including the delete and the rename.\n\nA quick gloss on the terms: a hook is a script Claude Code runs automatically at set points. A PostToolUse hook runs after each tool call, and a Stop hook runs when Claude finishes. Git is the version-control tool that tracks uncommitted changes in a repo, and `git status` lists them.\n\nThe test used a scripted fake model (a local server standing in for the Messages API) that issued a fixed list of tool calls against the real Claude Code binary, so no API key was needed. A real model picks its own routes, and seven routes are a sample, not a census.\n\n**Add the git-backed Stop hook**\n\n1. Create `.claude/stop-check.sh`:\n\n```\ngit status --porcelain -uall > .git/hk-status\ngrep -q '\"stop_hook_active\":true' && exit 0\n[ -s .git/hk-status ] || exit 0\ncat .git/hk-status >&2\nexit 2\n```\n\n2. Register it in `.claude/settings.json` as a `Stop` hook with the command `cd \"$CLAUDE_PROJECT_DIR\" && sh .claude/stop-check.sh`.\n\nThe `cd` matters because hooks run in Claude's current directory, which moves when Claude runs `cd`. Exit code 2 tells Claude Code not to stop yet and passes stderr to the model, so Claude sees the list of changed files before it finishes. The `stop_hook_active` check lets the second stop through, so the hook can't loop. In the test, this cost one extra model call and delivered all seven status lines.\n\n**Why adding Bash to the matcher doesn't fix it**\n\nMatching `Edit|Write|Bash` makes the hook fire on the four Bash changes. But those payloads hold the command string, with no `file_path` and no patch. To learn which files `rm` or `git mv` touched, the hook would have to parse shell.\n\n**New files arrive with an empty patch**\n\nA file created with Write reports `type=create` and `structuredPatch=[]`; the text sits in `tool_response.content`. A hook that reviews `structuredPatch` sees nothing for new files, so read `content` when `type` is `create`.\n\n**Worth using when** a review loop depends on knowing what Claude changed. Keep PostToolUse for instant per-edit checks, since Stop only runs when Claude finishes.\n\n**Limits**\n- Git skips gitignored files, files outside the repo, and anything Claude commits itself.\n- The hook also lists your own uncommitted work.\n- `MultiEdit` did not appear in the request Claude Code 2.1.312 sent the model, so it widens nothing.\n- `NotebookEdit` appears as a deferred tool and the usual matcher doesn't name it; its payload wasn't tested.\n- PostToolUse behavior in subagents wasn't tested.","category":"Workflow","slug":"catch-file-changes-a-posttooluse-hook-misses-with-a-stop-hook-that-asks-bbbd9b","url":"https://claudecodereview.ai/a/catch-file-changes-a-posttooluse-hook-misses-with-a-stop-hook-that-asks-bbbd9b/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/bbbd9b99-2dd4-4c09-9d14-30e77a90254a","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/catch-file-changes-a-posttooluse-hook-misses-with-a-stop-hook-that-asks-bbbd9b/77803526806d849e-d986ba588b19e4b0/web_hero.webp","imageAlt":"A diagram shows seven file blocks being caught by a container versus a sieve that only catches three.","createdAt":"2026-10-29T21:56:56.756Z"},{"id":"8d01e30d-2c9d-4811-9baa-5d6f7de00bfd","title":"See every waiting session, subagent and Codex run that Agent View leaves off its list","dek":"Agent View only lists background sessions, so a JSON command, a Notification hook or ccdeck, a free, open-source dashboard that runs on your machine and shows Claude Code and Codex sessions, has to cover the rest.","bodyMd":"Agent View, opened with `claude agents`, is one screen for background sessions. Anthropic's documentation says interactive sessions open in other terminals don't appear until you background them, and that subagents and teammates a session spawns aren't listed as separate rows. Codex isn't listed either. The feature is in research preview, and a row shows only the session's name, current activity and age: no spend or quota.\n\nTwo terms used below: a subagent is a helper session that a main Claude Code session spawns. Codex is a separate coding-agent CLI that has its own `codex agents` dashboard and writes rollout files under `~/.codex/sessions`.\n\nThree ways to see the rest:\n\n1. **Poll `claude agents --json`.** In Claude Code 2.1.312 the command prints active sessions, interactive and background, as a JSON array. Each entry has a `kind` and, while its process is alive, a `status` of `busy`, `waiting` or `idle`. A waiting session adds `waitingFor`, such as `permission prompt` or `input needed`. Filter it with jq: `claude agents --json | jq '.[] | select(.status == \"waiting\")'`. It lists sessions, not subagents, and it is a snapshot, so poll it to keep it current.\n\n2. **Add a `Notification` hook** to `~/.claude/settings.json`. It applies to every session that reads that file, whichever terminal started it. Match `permission_prompt|idle_prompt` and have the hook command append one line per wait to a log, for example with `jq -c` writing to `~/.claude/waiting.log`. Notification hooks can't block or modify notifications, so this only observes.\n\n3. **Run a dashboard.** ccdeck, a free, open-source dashboard, starts with `npx ccdeck`. Its first run adds a hook to `~/.claude/settings.json`, so sessions from any terminal report to it. Each subagent gets its own card joined to its session, and Codex CLI sessions appear on the same canvas, read from the rollout files under `~/.codex/sessions`. The topbar names Claude Code sessions stopped on a prompt or question, with how long each has waited. It also shows estimated spend per session. `ccdeck sessions` prints the waiting list in a terminal.\n\nFor subagents without a dashboard, hooks from settings files also run inside subagents. Tool events such as `PreToolUse` carry `agent_id` and `agent_type` when a subagent made the call, and `SubagentStart` and `SubagentStop` mark each one's life.\n\n**When to use which.** Dispatch and reply in Agent View. Poll the JSON if all you need is who is waiting in any terminal. Add a hook or dashboard when you want subagents, Codex or spend alongside.\n\n**Limits.** ccdeck can't reply, start or attach to sessions, because its hook is a one-way forwarder. It keeps nothing while no deck is running. Its waiting list covers Claude Code only, and the tool name beside a wait is its inference. Codex logs record no approval request, so a running Codex session shows \"approvals not visible\". Because the hook only observes, it doesn't change what Agent View does, and background sessions read user settings, so they report too.","category":"Workflow","slug":"see-every-waiting-session-subagent-and-codex-run-that-agent-view-leaves-8d01e3","url":"https://claudecodereview.ai/a/see-every-waiting-session-subagent-and-codex-run-that-agent-view-leaves-8d01e3/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/8d01e30d-2c9d-4811-9baa-5d6f7de00bfd","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/see-every-waiting-session-subagent-and-codex-run-that-agent-view-leaves-8d01e3/00195507b7b60ff9-5f4c5c671f925426/web_hero.webp","imageAlt":"A diagram shows rectangular session strips, square subagent tiles, and circular coding-agent discs being connected by a single line into a unified cluster.","createdAt":"2026-10-29T21:52:06.001Z"}]}