{"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":"a963133b-ddf9-4b63-b516-d74989d3e3f7","date":"2026-09-28","status":"locked","createdAt":"2026-09-27T17:16:26.050Z","storyCount":9,"newsletterSubject":"Claude Code blocks expensive models, Claude Code now clicks through apps, Cloud sessions exit preview phase"},"updatedAt":"2026-09-27T22:30:29.958Z","stories":[{"id":"cda6f69e-3c0a-4d70-b33c-5e15085b35dc","title":"Claude Code adds a hard block for pricey models, but most controls still let them through","dek":"An independent review of Claude Code's seven settings for restricting which models a team can run and bill against finds only three actually stop a blocked model everywhere.","bodyMd":"Claude Code 2.1.283, which Anthropic shipped on September 25, added a `deniedModels` managed setting that blocks a specific model from running even when the existing `availableModels` allowlist would otherwise let it through. The same release added `availableModelsMatch`, which can be set to `\"exact\"` so that an `availableModels` entry only covers the model version it names, keeping new model releases blocked until an admin explicitly adds them to the list.\n\nThe timing matters for anyone watching a bill. Since September 22, every Claude Code plan on the Anthropic API has defaulted to Opus 5.5, but a user can switch to Fable 5.1 with a single `/model` command, at $10 per million input tokens, 2.5x the price, according to a review published by Automation Labs on Medium. Whether an admin's settings actually stop that switch, rather than just discouraging it, is the question the review set out to answer.\n\nAutomation Labs ranked all seven Claude Code mechanisms for restricting which models a team can run, scoring each by whether it holds up under every plan and spelling of a model name, and whether the block is enforced by Anthropic's server or only trusted to the client. Its one-line summary of the seven: three hold, one caps spend, two leak, and one amounts to a label. The review names `deniedModels`, new in 2.1.283, as the only setting that blocks a model in every spelling on every plan without requiring an allowlist to be built around it first. It ranks Anthropic's Enterprise console restriction as the only gate the server itself enforces for every session regardless of client behavior.\n\nBy the review's account, `availableModels` alone is weaker than it looks: it only holds once an admin also turns on `enforceAvailableModels` and pairs it with `availableModelsMatch` set to `\"exact\"`. Used on its own, an `availableModels` list can still leave gaps a determined user finds.\n\nThe practical upshot for teams governing spend is that the new setting isn't just an additive option among seven similar ones. It's the piece that was missing for teams that wanted a denylist enforced everywhere, rather than an allowlist they had to keep airtight by hand.","status":"published","storyType":"news","category":"Release","clusterKey":"claude-code-deniedmodels-availablemodels-spend-gating","slug":"claude-code-adds-a-hard-block-for-pricey-models-but-most-controls-still-cda6f6","url":"https://claudecodereview.ai/a/claude-code-adds-a-hard-block-for-pricey-models-but-most-controls-still-cda6f6/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/cda6f69e-3c0a-4d70-b33c-5e15085b35dc","role":"lead","position":0,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-adds-a-hard-block-for-pricey-models-but-most-controls-still-cda6f6/df3232027a8462af-d0735809d835bbb1/web_hero.webp","imageAlt":"Seven geometric blocks in a row with three lifted out and placed on a higher level.","createdAt":"2026-09-27T16:22:58.737Z","updatedAt":"2026-09-27T16:30:29.054Z","sources":[{"role":"primary","title":"deniedModels vs availableModels: 7 Claude Model Gates, Ranked","url":"https://medium.com/@automation.labs/deniedmodels-vs-availablemodels-7-claude-model-gates-ranked-ef2c5f3842bd?source=rss------claude_code-5","sourceName":"Automation Labs","author":"Automation Labs","publishedAt":"2026-09-27T06:54:40Z"},{"role":"supporting","title":"Claude Code v2.1.283","url":"https://github.com/anthropics/claude-code/releases/tag/v2.1.283","sourceName":"Anthropic","author":"Anthropic","publishedAt":"2026-09-25T21:50:12Z"}]},{"id":"22b8d507-ba65-41b0-aeb1-60ed8991ace8","title":"Claude Code can now click through your app to prove a change actually works","dek":"A new verify skill lets Claude Code run the browser checks developers used to do by hand, then save the working steps as a reusable skill.","bodyMd":"Claude Code's task loop has always had four parts: gather context, take action, verify the work, then respond. Anthropic used to leave that third step to the developer, who would open a browser, click around, watch the console, and report back what broke. In a video posted September 25, Anthropic showed a verify skill that now does that step itself: it opens the app, clicks through it, and checks the result against rules the developer wrote down.\n\nThe point is fewer rounds of back-and-forth. Claude already runs tests, type checks, and linters and fixes what they catch, but passing those doesn't prove a change does what you meant. Only opening the page and clicking the thing does. Anthropic's argument is that most of that manual click-through can be written down once as a checklist, and once it's written down, Claude can run it, catch what fails, fix it, and check again without anyone standing over the browser.\n\nThe verify skill ships with Claude Code as a starting point. The first time it runs, it launches the app and checks a change against the running app itself, then saves whatever steps worked as a skill file inside the project. From there, a developer edits that file to say when Claude should run it, what to do when a check fails, and what proves each check actually passed. Anthropic's own example: layout shift, where parts of a page jump around as content loads. That gets codified as a performance trace through Chrome's DevTools MCP, a tool that lets Claude pull browser performance data directly, which measures layout shift as one of Google's Core Web Vitals, its standard scoring metrics for page performance.\n\nIn the demo, Anthropic asked Claude to add a Like button to a page that already had unfixed layout shift. Because the edit touched the UI, Claude ran the saved skill on its own: started the dev server, opened the page, clicked the Like button, and took a screenshot to prove it worked. The performance trace then caught the layout shift, Claude fixed it, and reran the checks until they passed. What came back was a working button, a page that no longer jumped on load, and screenshots and scores as evidence, without the developer pointing out anything by hand.\n\nThe same pattern extends past the browser. Anthropic says the same verify loop applies to backend changes, calling an endpoint and reading the response, and to mobile apps, tapping through screens in an iOS simulator, using tools like a browser, a terminal, or the simulator itself. The harder part is writing checks that are actually measurable, since Anthropic notes that the more precisely a check can pass or fail, the easier it is for Claude to judge on its own. Anthropic's suggested next candidates are a performance budget, an accessibility checklist, or a design system's own rules, whatever a team currently checks by hand and could instead write down once.","status":"published","storyType":"news","category":"Workflow","clusterKey":"claude-code-verify-skill-browser-checks","slug":"claude-code-can-now-click-through-your-app-to-prove-a-change-actually-wo-22b8d5","url":"https://claudecodereview.ai/a/claude-code-can-now-click-through-your-app-to-prove-a-change-actually-wo-22b8d5/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/22b8d507-ba65-41b0-aeb1-60ed8991ace8","role":"item","position":1,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-can-now-click-through-your-app-to-prove-a-change-actually-wo-22b8d5/606c78842d495d2f-1d7e1de34a09428d/web_hero.webp","imageAlt":"An illustration showing four rectangular blocks in a row, with the third block lifted upward and isolated to signify it is now an automated task.","createdAt":"2026-09-27T15:27:15.817Z","updatedAt":"2026-09-27T15:30:33.057Z","sources":[{"role":"primary","title":"Claude Code Now Verifies Its Own UI Changes With Automated Browser Checks","url":"https://www.youtube.com/watch?v=mQZB0l-rhxE","sourceName":"Claude","author":"Claude","publishedAt":"2026-09-25T23:13:15Z"},{"role":"supporting","title":"Building verification loops in Claude Code","url":"https://www.youtube.com/watch?v=mQZB0l-rhxE","sourceName":"Claude","author":"Claude","publishedAt":"2026-09-25T23:13:15Z"}]},{"id":"048d9582-fb64-4425-9688-06ad93bfb404","title":"Claude Code's cloud sessions exit preview with a one-time credit","dek":"Anthropic's coding agent can now run tasks on its own servers instead of your machine, and Pro and Max subscribers get $100 or $250 toward trying it before the offer expires November 4.","bodyMd":"Claude Code's cloud sessions are no longer a research preview. Anthropic's official Claude Code account confirmed on September 24, 2026, that the feature is now generally available, reachable from claude.ai/code, the Code section of the Claude mobile app, the desktop app, and the command line through `claude --cloud`, according to a report from RAXXO Studios.\n\nCloud sessions run Claude Code on Anthropic's own infrastructure instead of the machine sitting in front of you. Start a task, close the laptop, and check back later to review what finished, the same way a developer might check on a build running on a remote server. That's the practical shift: a long-running job no longer needs a laptop lid kept open out of habit.\n\nAnthropic paired the general-availability move with a time-boxed promotion. Individual Pro and Max subscribers who already held an active subscription before the promotion opened on September 23 can claim a one-time credit toward cloud session usage: $100 for Pro, $250 for Max. The credit has to be claimed on Claude's website by October 7, and any unclaimed or unspent balance expires November 4. It only counts toward cloud sessions, not toward Claude Code running locally.\n\nThe mechanics matter more than the headline dollar figures. The credit spends down automatically before a session ever touches a subscriber's normal plan usage, and when the promotional balance hits zero, a cloud session doesn't stop or lock the user out. It simply falls back to counting against the regular Pro or Max usage that local sessions already draw from. One detail worth being precise about: cloud sessions share the same rate limits as the rest of Claude Code. The credit changes what gets billed against a plan, not how much total capacity is available in a given window.\n\nThe rollout drew quick attention outside Anthropic's own channels. One Reddit post on the day of the announcement described claiming the credit through a `/claim-credit` command, expressing surprise that the offer was real. RAXXO Studios' report frames the general-availability change as the more durable story, with the credit as a launch incentive layered on top: a feature leaving research preview signals Anthropic expects people to depend on it for real work, not just test it once.\n\nThe timing lines up with a broader pattern. Cloud sessions reaching general availability comes less than three months after Anthropic opened a marketplace with more than two thousand connectors, per RAXXO Studios. Taken together, the moves point toward Claude Code being built out as a platform for handing off tasks entirely, rather than a chat interface with a better terminal.\n\nWhat's still unclear is what a normal week of cloud session usage costs once the promotional credit is gone and only the shared rate limit and regular plan usage remain. That question won't have an answer until the promotional window closes on November 4.","status":"published","storyType":"news","category":"Release","clusterKey":"claude-code-cloud-sessions-ga-credits","slug":"claude-code-s-cloud-sessions-exit-preview-with-a-one-time-credit-048d95","url":"https://claudecodereview.ai/a/claude-code-s-cloud-sessions-exit-preview-with-a-one-time-credit-048d95/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/048d9582-fb64-4425-9688-06ad93bfb404","role":"item","position":2,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-s-cloud-sessions-exit-preview-with-a-one-time-credit-048d95/9a9e2ee817a6b07f-1ffdc23cf86c2d83/web_hero.webp","imageAlt":"A diagram shows a laptop linked by a conduit to a server rack, with two distinct credit vouchers moving into the server area.","createdAt":"2026-09-27T15:21:55.003Z","updatedAt":"2026-09-27T15:30:45.986Z","sources":[{"role":"primary","title":"Claude Code Cloud Sessions Go GA With a One Time Credit","url":"https://dev.to/raxxostudios/claude-code-cloud-sessions-go-ga-with-a-one-time-credit-2e92","sourceName":"RAXXO Studios","author":"RAXXO Studios","publishedAt":"2026-09-27T01:03:47Z"},{"role":"supporting","title":"Anthropic Offers Up to $250 in Free Claude Code Cloud Credits to Pro and Max Subscribers - gHacks","url":"https://ghacks.net/2026/09/26/anthropic-offers-up-to-250-in-free-claude-code-cloud-credits-to-pro-and-max-subscribers","sourceName":"\"when:7d \"Claude Code\" Anthropic\" - Google News","author":"\"when:7d \"Claude Code\" Anthropic\" - Google News","publishedAt":"2026-09-26T21:06:08Z"},{"role":"supporting","title":"Anthropic Just Put Claude Code in the Cloud","url":"https://www.youtube.com/watch?v=cu8KajeeWkI","sourceName":"Julian Goldie SEO","author":"Julian Goldie SEO","publishedAt":"2026-09-25T15:00:05Z"},{"role":"supporting","title":"Claude Code Users Can Claim $250 in Free Credits With One Command","url":"https://reddit.com/r/ClaudeCode/comments/1wp96pl/i_just_got_250_in_free_credits_on_claude","sourceName":"/u/freshWaterplant","author":"/u/freshWaterplant","publishedAt":"2026-09-24T18:14:27Z"}]},{"id":"5aa08378-3824-4be6-99dc-598e72d6c231","title":"DaVinci Resolve lets Claude Code and Codex take over video editing","dek":"A new official connector, a standard plug that lets outside AI apps drive software directly instead of needing custom code, opens DaVinci Resolve's color grading, motion graphics, and sound tools to chat commands from Claude Code or Codex.","bodyMd":"DaVinci Resolve, the free video editor whose feature set is often compared to Adobe's Premiere Pro, has added an official MCP server, a standard connector that lets outside AI tools plug straight into an app's controls instead of relying on custom-built integrations. The result is that Claude Code or OpenAI's Codex can now drive Resolve's entire timeline through ordinary chat instructions rather than an editor working through menus and mouse clicks by hand, according to posts describing the release.\n\nThat is a jump from what chat-driven video editing has handled so far. Most AI editing tools have stopped at captions and simple cuts; demos of the new connector show it handling color grading, building motion graphics, assembling multicam cuts, adding sound effects, and adjusting music to fit a scene, all through the same conversation used to make other timeline changes.\n\nThe connector also appears able to close gaps in a rough cut. One demo claims Claude can generate a missing b-roll clip on request and place it directly into the timeline, filling a hole in coverage.\n\nA professional non-linear editor, the software used to arrange and finish video, now takes the same kind of command-line instructions used for coding tasks instead of requiring a separate app and manual timeline work. Neither post detailed how the MCP server is installed beyond an offer to share setup steps, so how much configuration it takes, and how the color grading or generated b-roll actually hold up in finished output, is not yet clear from what has been shown.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"davinci-resolve-official-mcp-server","slug":"davinci-resolve-lets-claude-code-and-codex-take-over-video-editing-5aa083","url":"https://claudecodereview.ai/a/davinci-resolve-lets-claude-code-and-codex-take-over-video-editing-5aa083/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/5aa08378-3824-4be6-99dc-598e72d6c231","role":"item","position":3,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/davinci-resolve-lets-claude-code-and-codex-take-over-video-editing-5aa083/6c96b4dfe17e9897-f0608d86f249610c/web_hero.webp","imageAlt":"A diagram shows a single plug bridging a gap between two AI command blocks and a set of five icons representing video editing tools.","createdAt":"2026-09-27T17:54:47.405Z","updatedAt":"2026-09-27T18:00:49.033Z","sources":[{"role":"primary","title":"DaVinci Resolve just launched an official MCP server that lets AI like Claude Code or Codex edit videos with full production-grade features....","url":"https://tiktok.com/@ai.honeycove/video/7687746998585265421","sourceName":"AI Honeycove","author":"AI Honeycove","publishedAt":"2026-09-20T22:24:59Z"},{"role":"supporting","title":"DaVinci Resolve Ships Official MCP Server for AI Video Editing","url":"https://instagram.com/reel/DdyoqD9laUO","sourceName":"@sebintel","author":"@sebintel","publishedAt":"2026-09-27T12:42:53Z"}]},{"id":"9d987db3-008f-4f6c-a318-8c7d5aa74742","title":"Claude Code skips project instructions when usage-data sharing is off","dek":"A bug tracked as issue #95690 since September 20 shows Claude Code skips AGENTS.md, the shared project-instructions file, whenever usage-data reporting is off or the tool runs through Bedrock or Vertex, with no fix yet shipped and only a manual workaround available.","bodyMd":"Claude Code, Anthropic's command-line coding agent, has a bug that quietly stops it from reading a shared instructions file whenever a team turns off its usage-data reporting. The bug remains open, tracked as issue #95690 in the public Claude Code repository, with no official fix shipped so far; only a manual workaround exists, according to a report from Tech AI Wire that draws on the GitHub issue and a blog post describing the same behavior.\n\nThe broken feature is Claude Code's support for AGENTS.md, a plain-text file that several coding agents share to record how a project builds, tests, and is laid out. Claude Code has always had its own version of that file, called CLAUDE.md. Version 2.1.277 was supposed to add a fallback: in a project with no CLAUDE.md, Claude Code would read AGENTS.md instead, exactly as its release notes promised.\n\nThat fallback never worked as advertised for a wide swath of users. Anthropic built it as a plugin that ships off by default and gets switched on remotely through a feature flag called tengu_agents_md_mod, delivered by an outside service named Statsig that lets a company turn features on or off without shipping a new release. Checking that flag requires Claude Code to reach Statsig's servers over the network. Anyone who had set the environment variables DISABLE_TELEMETRY=1 or CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1, both ways of stopping the tool from sending usage data back to Anthropic, could not make that call, and neither could anyone running Claude Code through Amazon Bedrock or Google Vertex, the cloud platforms some companies use to reach the model instead of Anthropic's own service. In every one of those setups, AGENTS.md was simply skipped. The GitHub issue, filed September 20 as issue #95690, put it bluntly: \"No error. No warning. It just doesn't load.\"\n\nBoth the issue and a blog post published September 23 raised the same objection: reading a local file out of a project folder needs no network connection at all, so tying it to a server-side switch meant a privacy choice was quietly disabling an unrelated feature. The issue called it \"reading a local markdown file, an act that requires no network whatsoever,\" that \"is silently locked away by a server-side switch.\" The blog post framed it as a rule Anthropic had broken: \"A privacy setting should never quietly switch off unrelated local behavior.\"\n\nFor now, the only workaround is to keep a thin CLAUDE.md file in every project with a single import line, @AGENTS.md, since Claude Code always reads its own file regardless of any flag. Teams that disable usage reporting for policy reasons, or that reach Claude Code through Bedrock or Vertex, are the ones most likely to be affected without knowing it. The only sure way to check is to ask the agent to repeat an instruction that exists only in AGENTS.md and see whether it can.\n\nThe episode is a reminder that a coding tool's behavior can hinge on switches a user never sees. The GitHub issue itself points readers to watch for a fix, meaning none had landed as of the report, but the broader question both the issue and the blog post pushed on, whether local file loading should ever depend on a remote flag at all, outlasts this one bug.","status":"published","storyType":"news","category":"Release","clusterKey":"claude-code-agentsmd-telemetry-bug-fixed","slug":"claude-code-skips-project-instructions-when-usage-data-sharing-is-off-9d987d","url":"https://claudecodereview.ai/a/claude-code-skips-project-instructions-when-usage-data-sharing-is-off-9d987d/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/9d987db3-008f-4f6c-a318-8c7d5aa74742","role":"item","position":4,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-skips-project-instructions-when-usage-data-sharing-is-off-9d987d/9227ee2b02d1495b-8ffac3557432da25/web_hero.webp","imageAlt":"A document labeled as a file is separated from a stack of files by a vertical barrier.","createdAt":"2026-09-27T22:28:19.335Z","updatedAt":"2026-09-27T22:30:29.958Z","sources":[{"role":"primary","title":"Claude Code AGENTS.md support needs telemetry turned on","url":"https://dev.to/techaiwire/claude-code-agentsmd-support-needs-telemetry-turned-on-1379","sourceName":"techaiwire","author":"techaiwire","publishedAt":"2026-09-26T19:08:32Z"}]},{"id":"eaf87b9d-f392-462d-a1ee-6a44d93a764d","title":"Jev claimed to cut Claude Code costs: its own test results say otherwise","dek":"Jev is a proxy that sits in front of Claude Code and tries to pick the right tool for each request, but Claude Code's own settings block it from ever forcing that pick, leaving only a hint the model can ignore, and the project's own published side-by-side test results show that hint mode makes some coding tasks slower and costlier rather than cheaper.","bodyMd":"Jev spent five days as the tool everyone in Claude Code circles was talking about, credited across six videos with turning Anthropic's coding agent into the cheapest agentic setup around. A developer who actually opened the gateway's source code says that claim doesn't hold, and the project's own published test results back that up.\n\nJev is a gateway: a small proxy program that sits between Claude Code and Anthropic's servers, intercepting each request before it reaches the model. Its job is to look at the list of tools available in a session and tell the underlying model which one it thinks fits the task, using a cheap, fast \"decision model\" built by a company called TypeSafe that just scores or picks between options in 70 to 500 milliseconds, priced at $0.042 per million tokens of text it processes. The install itself is straightforward and doesn't touch billing: it just points Claude Code's connection setting at the gateway, so a normal Pro or Max subscription keeps working.\n\nThe catch sits in one line of Jev's code, at src/adapters/messages.ts line 99. The gateway can operate two ways: it can force the model to use a specific tool, or it can just suggest one, in a note the model is allowed to ignore. That line says a forced choice only happens when neither \"thinking\" nor prompt caching is active. Prompt caching is Anthropic's system for reusing previously processed conversation text instead of reprocessing it from scratch, which saves time and money, and thinking is Claude's extended reasoning mode. Every real Claude Code session runs with both switched on, so inside Claude Code the gateway can never force anything. It can only append a two-sentence suggestion after the fact, one the model is free to disagree with. Jev's own README says as much: \"Expect better tool picks on large tool lists, not lower cost or latency.\" That line, the review says, never made it into any of the promotional videos.\n\nThe gap between suggestion and enforcement shows up directly in numbers Jev's own maintainers published, from a 120-session comparison test called jev-gateway-bench, run five times per task on a real Claude Code subscription. On a bug-fixing task, routing helped: Sonnet 5 read 48% fewer input tokens (the chunks of text a model is billed for) and finished 25% faster. On a feature-building task, it backfired. Opus 5 used 61% more input tokens, made 47% more requests, and took 83% longer with routing turned on; Sonnet 5 used 16% more tokens and took 37% longer. One model that solved the feature task five times out of five on its own dropped to three out of five with routing on, despite using fewer tokens to get there.\n\nThere's also a cost the videos didn't mention: to suggest anything, the gateway has to resend a session's full tool list on every call. The reviewer's own Claude Code setup carried 40 tools and a 57,000-token prefix just to get a four-token answer back; the project's own bug tracker describes a worse case, one setup sending 285 tools and roughly 200,000 tokens with every single request, against 7,000 tokens for a clean install.\n\nThe reviewer's verdict splits by where Jev runs. Inside OpenAI's Codex, the gateway can force tool choices outright and does so on 76% to 100% of requests, where it can actually deliver the savings its own maintainers describe. Inside Claude Code, it forced nothing in the review's testing and could only hint, on 34% to 51% of requests, with the vendor's own feature-task numbers running the wrong way. A separate part of the same project, a compaction feature for trimming context, gets a \"not yet\" for now: the review flags a 6,400-star repository with open issues over hooks that don't register, full transcripts being sent to a third-party API, and dropped data producing fabricated work reports, on top of unresolved terms-of-service questions users had already raised.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"jev-gateway-debunked-not-cheaper","slug":"jev-claimed-to-cut-claude-code-costs-its-own-test-results-say-otherwise-eaf87b","url":"https://claudecodereview.ai/a/jev-claimed-to-cut-claude-code-costs-its-own-test-results-say-otherwise-eaf87b/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/eaf87b9d-f392-462d-a1ee-6a44d93a764d","role":"item","position":5,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/jev-claimed-to-cut-claude-code-costs-its-own-test-results-say-otherwise-eaf87b/bbee03231a144897-4b999d94ab2bfcc2/web_hero.webp","imageAlt":"A funnel narrowed by a barrier with a thin side-branch that fails to connect to the two thick parallel paths flowing through the center.","createdAt":"2026-09-27T16:02:45.190Z","updatedAt":"2026-09-27T16:30:40.753Z","sources":[{"role":"primary","title":"Jev did not make Claude Code cheaper. Its own benchmark says so.","url":"https://dev.to/aidiveyt/jev-did-not-make-claude-code-cheaper-its-own-benchmark-says-so-1abm","sourceName":"AI Dive","author":"AI Dive","publishedAt":"2026-09-27T08:47:53Z"}]},{"id":"c9df033e-20b8-40cb-9aa4-af42df960688","title":"Claude Code's agent teams let one Claude run four teammates in tmux panes","dek":"The off-by-default feature splits a terminal into panes where teammate Claudes claim tasks off a shared list and message each other directly, instead of just reporting back to whoever spawned them.","bodyMd":"Claude Code has an experimental feature called agent teams that lets one Claude spawn teammate Claudes and hand each one a job, all running at the same time instead of one task at a time. In a demo, the lead Claude was instructed to spawn four teammates. It ships off by default.\n\n**How it works.** The first Claude becomes the lead: it writes a shared task list, and the teammate Claudes claim work off that list and run in parallel, each in its own session. A companion writeup on the mechanics describes what that looks like inside tmux, the terminal tool that splits one window into multiple panes: the terminal splits into panes, with one Claude building a feature, one writing tests, one reviewing, and the lead coordinating all three. Under the hood, the piece says, it's a handful of JSON files, a lock, and tmux doing the pane-splitting it already does for anything else.\n\n**How to turn it on.** Open your Claude Code settings file and set the experimental Agent Teams setting to 1; the exact line is shown on screen in the demo. Then just ask for an agent team in plain English: tell it to spawn four teammates and give each one a job.\n\n**What makes it different from subagents.** Claude Code already had ways to split up work, including subagents. The distinction, per the mechanics writeup: subagents report back only to whoever spawned them, while teammates in an agent team share a task list, claim work on their own, and message each other directly. You can also step in and talk to any individual teammate yourself.\n\n**Caveats.** Every teammate burns its own tokens, so running a full team costs more than a single session. And don't let two teammates edit the same file at once. The feature is still experimental and described as moving fast, so behavior may drift from what's written here.","status":"published","storyType":"tip","category":"Agents","clusterKey":"claude-code-agent-teams-tmux","slug":"claude-code-s-agent-teams-let-one-claude-run-four-teammates-in-tmux-pane-c9df03","url":"https://claudecodereview.ai/a/claude-code-s-agent-teams-let-one-claude-run-four-teammates-in-tmux-pane-c9df03/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/c9df033e-20b8-40cb-9aa4-af42df960688","role":"item","position":6,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-s-agent-teams-let-one-claude-run-four-teammates-in-tmux-pane-c9df03/5e69c6b7d1374bba-7b6e8fabbe2229a4/web_hero.webp","imageAlt":"A diagram showing four square panes organized in a grid, with a single separate pane hovering above the group.","createdAt":"2026-09-27T17:05:27.684Z","updatedAt":"2026-09-27T17:30:24.498Z","sources":[{"role":"primary","title":"One Claude can manage four other Claudes 🔖 It's called agent teams — built into Claude Code, off by default. 1. Turn it on: in settings.jso...","url":"https://tiktok.com/@kodeshpa/video/7689642410082635021","sourceName":"AI Entrepreneur","author":"AI Entrepreneur","publishedAt":"2026-09-26T01:00:07Z"},{"role":"supporting","title":"What actually happens when Claude Code spawns a team (w/ tmux)","url":"https://medium.com/codex/what-actually-happens-when-claude-code-spawns-a-team-w-tmux-b152fe2cbe0e?source=rss------claude_code-5","sourceName":"Redouane Karzazi","author":"Redouane Karzazi","publishedAt":"2026-09-26T22:59:57Z"}]},{"id":"09a4ccc6-b104-409f-befd-2f63f92702c6","title":"A free tool auto-loads the right Claude Code skill from 581 options","dek":"Holstered, a free open-source hook, fires on every prompt typed into Claude Code, narrows a personal skill library with keyword search, then hands the pick to a small classifier model that can also decide nothing fits: it loaded the right skill 29 out of 32 times in one test.","bodyMd":"A free tool called holstered now sits between a developer's prompt and Claude Code, deciding which one of hundreds of installed skills, if any, should actually load. Its creator built it after noticing that Claude Code only shows a one-line description per skill in context, so once a personal library grew past a few hundred entries, most of them stopped getting used at all. The count on this particular library: 581 installed skills.\n\nHolstered runs as a UserPromptSubmit hook, meaning it fires automatically each time a prompt is typed, before Claude starts generating a response. It works in two passes. First, it uses BM25, a decades-old keyword-ranking method search engines rely on, to narrow the full skill library down to a shortlist of 20 plausible candidates. Then it hands that shortlist to a small, fast model called Jev, a \"typed decision model\" built by a company called TypeSafe and run through the model-routing service OpenRouter, which picks exactly one skill from the list or decides none apply. Whichever skill wins gets its full instruction file, called SKILL.md, injected into the conversation before Claude responds. A prompt like \"make me a 5 slide deck about our Q3 results\" loads a PowerPoint skill; \"thanks, that fixed it\" loads nothing.\n\nThe developer tested the setup against 38 labeled prompts, 32 of which should have triggered a skill and 6 of which should have triggered none, and published the comparison. Keyword matching alone got 14 of 32 right. BM25 by itself picked correctly 17 out of 32 times and stayed silent appropriately in only 2 of 6 cases. Adding a commercial reranker from Cohere on top of BM25 pushed accuracy to 25 of 32, but it still only recognized 2 of the 6 no-skill prompts, because rerankers are built to always return their best match rather than admit nothing fits. Routing the BM25 shortlist through Jev instead reached 29 of 32 correct picks and got all 6 silent cases right, at a median added latency of 915 milliseconds. A local, self-hosted model option called Kev-4B, for anyone who wants to skip an external API call entirely, scored 26 of 32.\n\nThe developer's stated takeaway is less about squeezing out extra accuracy and more about the model's ability to say \"none.\" A reranker's habit of always returning a top result means it injects irrelevant skill instructions into simple replies like \"thanks!\" A decision model that can correctly decline mattered more for daily use than a marginally higher hit rate. The hook is also designed to fail open: if the routing step errors out for any reason, it never blocks the prompt from reaching Claude.\n\nClaude Code itself wrote most of the implementation alongside its developer, including the Rust binary, the BM25 shortlisting logic, the evaluation harness, and packaging that extends the same hook to other agent tools: Codex, Gemini CLI, Hermes, and Cline. The developer has been running it as their own daily driver while building it out.\n\nThe developer flags the limits directly: the 38-prompt test set is small and was labeled by one person, so the numbers should be read as a directional signal rather than a guarantee that would hold at different scale or with different skill libraries. Holstered is released under the MIT license and posted as open source on GitHub for anyone running a large personal or team skill collection to try.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"holstered-jev-skill-router-hook","slug":"a-free-tool-auto-loads-the-right-claude-code-skill-from-581-options-09a4cc","url":"https://claudecodereview.ai/a/a-free-tool-auto-loads-the-right-claude-code-skill-from-581-options-09a4cc/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/09a4ccc6-b104-409f-befd-2f63f92702c6","role":"item","position":7,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-free-tool-auto-loads-the-right-claude-code-skill-from-581-options-09a4cc/bb54510f70840bc7-52b0b0f5d6554caf/web_hero.webp","imageAlt":"A diagram shows a large collection of items funnelling into a small selection process that outputs either a single chosen item or nothing.","createdAt":"2026-09-27T17:56:28.282Z","updatedAt":"2026-09-27T18:00:39.189Z","sources":[{"role":"primary","title":"Built a Claude Code hook that loads the right skill per prompt, using Jev as the router. 29/32 right picks on my 581-skill library.","url":"https://reddit.com/r/ClaudeCode/comments/1wqtm73/built_a_claude_code_hook_that_loads_the_right","sourceName":"r/ClaudeCode · u/tupe12334","author":"r/ClaudeCode · u/tupe12334","publishedAt":"2026-09-26T15:39:19Z"},{"role":"supporting","title":"Auto-Router Picks the Right Claude Skill From 581 Options in Real Time","url":"https://reddit.com/r/ClaudeCode/comments/1wqtm73/built_a_claude_code_hook_that_loads_the_right","sourceName":"r/ClaudeCode · u/tupe12334","author":"r/ClaudeCode · u/tupe12334","publishedAt":"2026-09-26T15:39:19Z"},{"role":"supporting","title":"Built a Claude Code hook that loads the right skill per prompt, using Jev as the router. 29/32 right picks on my 581-skill library.","url":"https://reddit.com/r/ClaudeCode/comments/1wqtm73/built_a_claude_code_hook_that_loads_the_right","sourceName":"/u/tupe12334","author":"/u/tupe12334","publishedAt":"2026-09-26T15:39:19Z"}]},{"id":"e8365b37-7b01-49b7-bc0c-57217043a967","title":"A Mac app turns parallel Claude Code sessions into an animated city","dek":"The City gives each Claude Code project its own building and each parallel session its own floor, with animated robots signaling which ones are stuck waiting for your approval.","bodyMd":"A new open-source Mac app called The City turns a screen full of Claude Code terminal windows into an animated city, giving each project its own building and each parallel session inside it its own floor.\n\nThe problem it's solving is familiar to anyone running more than one Claude Code session at once: a wall of terminal panes makes it easy to miss the one window that's actually waiting on you. The developer behind the app said as much in the original post, describing losing track of \"which of my Claude Code sessions needed me\" and wanting the whole process to feel less like staring at terminals.\n\nEvery floor represents a team with its own Claude session, and floors run in parallel, so a multi-session project looks like a building with several teams working at once. The animations aren't decorative; they're driven by the real command-line stream. Robots walk to their desks when subagents, the secondary Claude sessions that split off to handle a piece of a larger task, start work. They raise a hand when Claude needs permission to run a tool, and they drop finished work in an outbox when a task completes. Beacons across the skyline flag which buildings are busy and which are stalled waiting on a human. Instead of switching back to a terminal, users approve tool calls or answer Claude's questions from cards at the robot's desk, with keyboard shortcuts available too.\n\nThe app also handles a problem that gets messier as usage scales: running several Claude accounts at once. The City shows multiple accounts side by side with usage tracked per account, and it uses Apple Intelligence, Apple's on-device AI system, to route incoming jobs to the correct floor rather than making the user assign them manually.\n\nIt's released under the MIT license, has no accounts or telemetry, and works against an existing Claude Code install rather than requiring a separate setup. That openness cuts both ways: the app requires macOS 26, which locks out anyone on an older system, and it's Mac-only, with no path shown for Linux or Windows users running Claude Code. The repository itself wasn't linked in the announcement post, only promised \"in the comments.\"","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"the-city-mac-app-parallel-sessions","slug":"a-mac-app-turns-parallel-claude-code-sessions-into-an-animated-city-e8365b","url":"https://claudecodereview.ai/a/a-mac-app-turns-parallel-claude-code-sessions-into-an-animated-city-e8365b/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/e8365b37-7b01-49b7-bc0c-57217043a967","role":"item","position":8,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-mac-app-turns-parallel-claude-code-sessions-into-an-animated-city-e8365b/fbb07d6776f161fe-c3851717448a0620/web_hero.webp","imageAlt":"Vertical buildings with stacked floors representing parallel code sessions, with one desk lifted from a floor showing a raised hand for permission.","createdAt":"2026-09-27T20:33:50.073Z","updatedAt":"2026-09-27T21:00:32.059Z","sources":[{"role":"primary","title":"I built a native Mac app that shows my Claude Code runs as a little city of robot offices","url":"https://reddit.com/r/ClaudeAI/comments/1wracdo/i_built_a_native_mac_app_that_shows_my_claude","sourceName":"/u/hamishsec","author":"/u/hamishsec","publishedAt":"2026-09-27T04:08:01Z"},{"role":"supporting","title":"[Workflow] The City: A Native Mac App for Visualizing and Managing Parallel Claude Code Sessions and Subagent Workflows","url":"https://reddit.com/r/ClaudeWorkflows/comments/1wrdyii/workflow_the_city_a_native_mac_app_for","sourceName":"/u/ClaudeAI-mod-bot","author":"/u/ClaudeAI-mod-bot","publishedAt":"2026-09-27T07:34:35Z"}]}],"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"}]}