{"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":"e09b7a16-870f-4902-99d6-ada619972be7","date":"2026-09-23","status":"locked","createdAt":"2026-09-22T19:16:16.697Z","storyCount":9,"newsletterSubject":"Opus 5.5 arrives at lower cost, Planner and reviewer agents vet payments, OpenAI Codex plugin ships for Claude"},"updatedAt":"2026-09-22T21:30:37.271Z","stories":[{"id":"8707fa5c-e72a-4916-b1ce-66c49579f5e3","title":"Opus 5.5 lands in Claude Code, matching rival models at a lower price","dek":"The update, shipped today as Claude Code v2.1.280, also fixes the jargon-heavy replies that made Opus 5 hard to read and adds the same risky-topic safeguards Anthropic uses on its other flagship model.","bodyMd":"Anthropic's Opus 5.5 went live inside Claude Code today, arriving through the app's v2.1.280 update as the new top-end reasoning model for coding work and replacing Opus 5. Posts on X confirmed the rollout as soon as it landed, and one commentator on a same-day video walkthrough noted that some Claude outputs over the past week had already looked like they were quietly running on the new model before Anthropic made it official.\n\nThe headline pitch, according to a same-day benchmark walkthrough, is that Opus 5.5 performs roughly on par with Fable 5.1, Anthropic's other top-tier model, while costing 40% less to run. On raw token pricing, Opus 5.5 runs $4 per million input tokens and $20 per million output tokens, well under Fable 5.1 and GPT6 Astra's shared $10-input, $50-output rate. Anthropic also cut the price of cached reads and writes.\n\nThose cuts show up in task-level testing too. On the Terminal Bench 4.0 coding test at high effort, Opus 5.5 scored 64.2% for $3.88 per task, roughly half GPT6 Astra's $7.21 price at the same setting, and clearly ahead of Fable 5.1, which scored 49.4% for $10.50. Across most coding and knowledge-work benchmarks Opus 5.5 also beat Astra, with two exceptions: it lost on a business-workflows benchmark by 1.4 points and on an agentic scientific-research benchmark by about 6 points. The same walkthrough flagged diminishing returns at higher effort settings: on the Frontier Code benchmark, medium effort scored 54.6%, edging out max effort's 54.4%, at six to seven times lower cost.\n\nThe pricing matters for how Claude Code's usage limits actually feel. Anthropic's paid plans split a weekly allowance between Fable and Opus, and Opus 5 had been the weaker half of that split, with one rundown describing it as effectively wasted quota next to Fable 5.1. Getting close to Fable-level output on the Opus allocation would make the whole weekly allowance useful rather than half of it.\n\nAnthropic also addressed a running complaint about Opus 5's writing, which had built a reputation among users for dense, jargon-heavy replies that were hard to parse. The company says Opus 5.5 is less likely to use jargon or idiosyncratic phrasing and follows a user's explicit writing-style instructions more closely, and it published before-and-after examples covering things like bug reports, thread summaries and design-change writeups.\n\nOn safety, Opus 5.5 adopts the same guardrails as Fable 5.1: cybersecurity or biology questions Anthropic judges risky get rerouted to Opus 4.8 instead of being answered directly, and the API blocks users from editing Claude's prior context in ways designed to extract its reasoning for distillation. Opus 5.5 is available everywhere today.\n\nAnthropic wasn't alone in cutting prices this week. OpenAI followed about an hour later with GPT6 Soul and GPT6 Luna, two cheaper siblings to GPT6 Astra. On Frontier Code, Luna scored 42.4% for 11 cents a task versus Astra's 53.3% at $4.59, while Soul landed in between at 49.3% for $2.14; both also cut factual-error rates from their prior generation, with Soul's 4.6% error rate now close to Astra's 3.9%. Three new pricing tiers landed in front of Claude Code and ChatGPT users within hours of each other, all chasing the same target: near-frontier performance at a fraction of the cost.","status":"published","storyType":"news","category":"Models","clusterKey":"claude-opus-5-5-ships-in-claude-code","slug":"opus-5-5-lands-in-claude-code-matching-rival-models-at-a-lower-price-8707fa","url":"https://claudecodereview.ai/a/opus-5-5-lands-in-claude-code-matching-rival-models-at-a-lower-price-8707fa/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/8707fa5c-e72a-4916-b1ce-66c49579f5e3","role":"lead","position":0,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/opus-5-5-lands-in-claude-code-matching-rival-models-at-a-lower-price-8707fa/4a6a12236c09b8fb-f95099058a1a1d13/web_hero.webp","imageAlt":"A diagram showing two rectangular blocks side by side, with the smaller right-hand block highlighted to represent the new model's improved efficiency.","createdAt":"2026-09-22T21:25:05.826Z","updatedAt":"2026-09-22T21:30:37.271Z","sources":[{"role":"primary","title":"Opus 5.5 Crushes Fable & Astra","url":"https://www.youtube.com/watch?v=ijPsFZ1EHlI","sourceName":"Chase AI","author":"Chase AI","publishedAt":"2026-09-22T17:15:10Z"},{"role":"supporting","title":"GPT 6 Sol & Luna Are Here (And 50% CHEAPER!)","url":"https://www.youtube.com/watch?v=U_sjnF3jvCo","sourceName":"Chase AI","author":"Chase AI","publishedAt":"2026-09-22T19:05:34Z"},{"url":"https://x.com/bridgemindai/status/2102426671756316992","title":null,"sourceName":"x.com","author":"BridgeMind","publishedAt":"2026-09-22T15:55:54.000Z","role":"supporting"},{"url":"https://x.com/DanDr1s/status/2102043235166093650","title":null,"sourceName":"x.com","author":"Dan","publishedAt":"2026-09-21T14:32:15.000Z","role":"supporting"},{"url":"https://x.com/Angaisb_/status/2102429116205269180","title":null,"sourceName":"x.com","author":"Angel 🌼","publishedAt":"2026-09-22T16:05:37.000Z","role":"supporting"}]},{"id":"25b40355-7c30-4503-9795-e25362dd80ee","title":"Everything Claude Code's planner and reviewer agents can vet payment code before it ships","dek":"A builder demo shows Everything Claude Code's existing planner and reviewer agents, part of a free open-source setup that splits one Claude Code session into dozens of specialized coding agents, can be pointed at payment flows to test failed charges and double-clicks before checkout code ships.","bodyMd":"Everything Claude Code, a free and open-source project that turns a single Claude Code session into a coordinated team of specialized coding agents, includes a planner agent and a reviewer agent among its built-in roles. A builder demo shows how those two agents can be pointed specifically at payment code: one agent maps out a payment flow, then deliberately tests what happens when a charge fails or a customer clicks \"Pay\" twice, before handing the code to the separate reviewer agent for a check. A checkout page can look finished in a demo and still break the moment a real payment misfires, which is exactly the gap this workflow targets.\n\nThe project's builder, Affaan Mustafa, spent ten months refining a private version of this setup before using it to win one of Anthropic's own hackathons. He open-sourced the whole thing afterward, free on GitHub, describing it as a way to turn one Claude Code instance into a full development team: one agent plans work, another reviews finished code, and another specifically fixes broken builds. The kit also ships with a security scanner meant to find holes in a project's own configuration, and memory tools that are supposed to carry lessons forward from one coding session to the next rather than starting fresh each time.\n\nScale is the project's calling card. Reports on it put the count at 68 subagents (smaller, task-specific Claude Code sessions that each handle one job, like planning or testing) paired with a large library of skills, packaged sets of instructions Claude Code can call on for a specific task. One account puts that library at 286 skills; another, describing the same release, counts 292. Either way, it's a far bigger toolkit than most developers assemble by hand, and Mustafa's pitch is that ten months of trial and error are now available as a two-command install inside Claude Code.\n\nThe setup also isn't locked to Anthropic's tool. According to a demo of the project, it works with OpenAI's Codex, Cursor, and Google's Gemini as well, which makes it less a Claude Code plugin than a portable agent-orchestration layer that happens to have been built and proven inside Claude Code first.\n\nThe payment-review workflow comes with an explicit caveat from the person demonstrating it: the output still needs a human check, and the suggested starting point is testing what happens when checkout goes wrong, not trusting the agent's word that it's ready. The setup itself is free; the underlying Claude, Codex, Cursor, or Gemini model access it runs on is billed separately by each provider.","status":"published","storyType":"news","category":"Agents","clusterKey":"everything-claude-code-hackathon-project-open-sourced","slug":"everything-claude-code-s-planner-and-reviewer-agents-can-vet-payment-cod-25b403","url":"https://claudecodereview.ai/a/everything-claude-code-s-planner-and-reviewer-agents-can-vet-payment-cod-25b403/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/25b40355-7c30-4503-9795-e25362dd80ee","role":"item","position":1,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/everything-claude-code-s-planner-and-reviewer-agents-can-vet-payment-cod-25b403/c73a18ee0d2ccf5b-7d2245c1297cb016/web_hero.webp","imageAlt":"A diagram shows one large cylinder at the base branching upward into sixty-eight smaller units, with two units near the top highlighted to signify their role in payment code review.","createdAt":"2026-09-22T21:29:15.066Z","updatedAt":"2026-09-22T21:30:28.320Z","sources":[{"role":"primary","title":"Free Claude Code Setup Adds Safety Checks Before Shipping Payment Code","url":"https://instagram.com/reel/DdlQoEByx0K","sourceName":"@maddypreneur","author":"@maddypreneur","publishedAt":"2026-09-22T08:03:26Z"},{"role":"supporting","title":"Anthropic Hackathon Winner Open Sources 286-Skill Claude Code Setup","url":"https://tiktok.com/@coleshihan.ai/video/7687918259504450836","sourceName":"coleshihan","author":"coleshihan","publishedAt":"2026-09-21T09:29:23Z"},{"role":"supporting","title":"Anthropic Hackathon Winner Open Sources 38-Agent Claude Code Setup","url":"https://tiktok.com/@dawid_przybylski/video/7687865059111980320","sourceName":"Smarte Meta Ads + KI 🤖","author":"Smarte Meta Ads + KI 🤖","publishedAt":"2026-09-21T06:02:41Z"},{"role":"supporting","title":"Anthropic Hackathon Winner Open Sources 38-Agent Claude Code Setup","url":"https://tiktok.com/@build.with.alan/video/7686482325055589652","sourceName":"Alan Brown l AI & Robotics","author":"Alan Brown l AI & Robotics","publishedAt":"2026-09-17T12:37:14Z"}]},{"id":"46edea36-7755-4392-b280-518ae19cb737","title":"OpenAI ships a Codex plugin that reviews code inside Claude Code","dek":"Codex, OpenAI's AI coding agent, now installs into Claude Code through Anthropic's plugin marketplace, an in-app directory of add-ons, so developers can have Codex critique code Claude just wrote without leaving the coding session.","bodyMd":"OpenAI's Codex plugin for Claude Code surfaced in a demo video posted September 20, packaging its own coding agent as an installable add-on inside Anthropic's tool instead of a separate app you'd have to switch to. Codex is OpenAI's AI coding agent, the company's own system for writing and editing code, and the rough counterpart to Claude Code itself. According to the video, the plugin lets Codex act as a reviewer from inside the same coding session Claude is already working in.\n\nInstalling it takes four typed commands, according to the video's setup instructions: add the marketplace source with `/plugin marketplace add openai/codex-plugin-cc`, install the plugin with `/plugin install codex@openai-codex`, reload with `/reload-plugins`, then run `/codex:setup`. A plugin marketplace is Claude Code's built-in directory for finding and installing add-ons without leaving the app, similar to how a phone's app store handles installs. Once that's done, typing `/codex:review` hands whatever code Claude just wrote over to Codex for a second look, without leaving the session.\n\nThe pitch, according to the demo video, is that Claude's and Codex's underlying models tend to have different blind spots left over from how each was trained, so having one model review the other's output catches mistakes a single tool would miss on its own. That reframes the ongoing debate over which tool to pick, as the narrator puts it, \"everyone keeps debating between Claude Code and Codex\", instead of choosing a favorite, the plugin argues for running both, with Codex cast as the critic checking whatever Claude Code just produced.\n\nThe plugin fits into Claude Code's existing add-on system, so installing Codex takes the same handful of commands as any other plugin, not a separate download or account to manage. What the review actually flags, and how it compares to the checks Claude Code's own review passes already run, isn't detailed beyond the demo.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"openai-codex-plugin-for-claude-code-review","slug":"openai-ships-a-codex-plugin-that-reviews-code-inside-claude-code-46edea","url":"https://claudecodereview.ai/a/openai-ships-a-codex-plugin-that-reviews-code-inside-claude-code-46edea/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/46edea36-7755-4392-b280-518ae19cb737","role":"item","position":2,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/openai-ships-a-codex-plugin-that-reviews-code-inside-claude-code-46edea/89a9b23bbf2b5deb-c184766f955fbd4f/web_hero.webp","imageAlt":"A diagram showing four command blocks being joined by a fifth plugin crate block that slots into a larger structure.","createdAt":"2026-09-22T16:11:14.284Z","updatedAt":"2026-09-22T16:30:16.339Z","sources":[{"role":"primary","title":"OpenAI Ships Official Codex Plugin for Claude Code to Review AI-Generated Code","url":"https://tiktok.com/@expainingai/video/7687608306503798029","sourceName":"Explaining AI","author":"Explaining AI","publishedAt":"2026-09-20T13:27:02Z"}]},{"id":"e3e74954-1fee-4435-bd63-1f55a7a4dde2","title":"A hook stops Claude Code from installing exploited Python packages","dek":"The open-source tool blocks pip, uv, and poetry installs only when a package's flaw is on CISA's list of actively exploited vulnerabilities, not just flagged by advisories.","bodyMd":"Claude Code will happily run `pip install`, `uv add`, or `poetry add` for whatever package name it decides it needs, without checking whether that package or version has a known security hole. A new open-source hook closes that gap by intercepting install commands before they run and blocking the ones that carry real, documented exploitation risk.\n\nThe tool is called Package Doctor, released as a PreToolUse hook (MIT license, no API keys required) on GitHub. A PreToolUse hook is a script Claude Code runs automatically before it executes a given tool call, which is what lets Package Doctor inspect an install command and veto it before anything gets written to disk.\n\nIts filtering logic, described by its developer in a Reddit post, is narrower than a typical vulnerability scanner:\n\n- It ignores plain age. A library with no recent commits, like `six`, is left alone unless it's the kind of package that handles untrusted input, such as a parser, an auth library, or an HTTP client.\n- It ignores advisory counts. A package with 18 open advisories isn't automatically blocked; what triggers a block is one of those flaws appearing on CISA's list of vulnerabilities known to be actively exploited, such as `pillow==10.0.0`'s CVE-2023-4863.\n- When it blocks a package, it names a fixed version to install instead, such as `pillow==12.3.0`, so Claude Code can act on the response instead of retrying the same failed command.\n- It only calls a package \"abandoned\" when there's direct evidence, like an archived repository or the maintainer's own \"Inactive\" label, not an inference from a stale commit history.\n- If PyPI or the OSV vulnerability database is unreachable, it fails open: the install goes through, and the hook reports that the package went unchecked rather than blocking on someone else's outage.\n\nThe use case is dependency safety in agentic workflows, where an agent that picks packages faster than a human would review them can just as easily pick one with an actively exploited flaw. The post also asks other developers how they're currently managing this risk, whether through allowlists, post-install CI scanning, or manual review, suggesting there's no settled convention yet for keeping an autonomous coding agent from installing something dangerous.","status":"published","storyType":"tip","category":"Workflow","clusterKey":"claude-code-hook-blocks-vulnerable-python-packages","slug":"a-hook-stops-claude-code-from-installing-exploited-python-packages-e3e749","url":"https://claudecodereview.ai/a/a-hook-stops-claude-code-from-installing-exploited-python-packages-e3e749/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/e3e74954-1fee-4435-bd63-1f55a7a4dde2","role":"item","position":3,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-hook-stops-claude-code-from-installing-exploited-python-packages-e3e749/2006a331ece4e68b-b223627729caf9df/web_hero.webp","imageAlt":"A diagram showing a row of eighteen small spheres blocked by a barrier, while a single distinct cube is diverted into a separate path leading to a fixed version marker.","createdAt":"2026-09-20T19:31:00.972Z","updatedAt":"2026-09-20T20:00:15.807Z","sources":[{"role":"primary","title":"Open-Source Hook Blocks Claude Code From Installing Vulnerable Python Packages","url":"https://reddit.com/r/ClaudeCode/comments/1wi9fs2/stopping_claude_code_from_installing_python","sourceName":"/u/No_Wedding2230","author":"/u/No_Wedding2230","publishedAt":"2026-09-16T20:50:48Z"}]},{"id":"40ce0dea-07f1-4d97-ad59-b97e3650bbc7","title":"CodeGraph beat Graphify and cut Claude Code's token use 35% in a head-to-head build test","dek":"CodeGraph indexed the test project in under two seconds without spending any AI tokens, then let Claude Code skip repeated file rereads to finish a feature build faster and far cheaper than a plain Claude run or the rival indexing tool Graphify.","bodyMd":"A head-to-head test posted September 16 pitted two code-indexing tools, CodeGraph and Graphify, against plain Claude Code on the same feature build, and the gap in speed, cost, and accuracy was wide enough to be useful even from a single run of each. Both tools build a searchable map of a codebase before an agent starts working, so Claude can look up where something is defined instead of opening and rereading the same files over and over.\n\nThe test feature was a word-by-word subtitle exporter for a Swift-based video editor that already stores every recognized word from a transcript. The exporter had to track edits as they happened: deleted speech disappears from the output, and inserted clips shift the timing of everything after them. Every run started from the same frozen commit with an identical prompt, using Claude Opus 5 at medium reasoning effort in plan mode. The plain-Claude baseline, with no indexing tool at all, took 9 minutes 42 seconds, passed all 16 existing tests, and used 6.55 million tokens, equivalent to $516 in API cost (the tester ran everything through a subscription rather than paying per token).\n\nGraphify, an open-source Python tool that scans a repo locally with tree-sitter at no model cost, needed an AI model only for non-code files. In this run it picked Gemini 3 Flash Preview, which burned about 230,000 tokens, roughly 14 cents, to turn documents and images into graph nodes. It detected 219 files but left 13 non-code files without graph entries, and the index build took about three minutes and required Claude to install a missing Python dependency mid-run. During planning, Claude queried Graphify three times and reported it barely helped: one query returned mostly unrelated data, another found no node for the subtitle feature at all. Counting the index build, Graphify's total run stretched to 12 minutes 44 seconds, using 5.34 million tokens at a $429 API-equivalent cost. The separate indexing session added about $2.30 across Gemini and Claude.\n\nCodeGraph, at version 1.6.0, built its index in under two seconds using zero model tokens, storing a local SQLite database that tracks where code is defined and how pieces connect. Its background server keeps that index current as files change, and the installer wrote setup instructions for both Codex and Claude Code, exposing itself to Claude as a single MCP tool called CodeGraph Explorer with instructions to reach for it before grep or plain file reads. Claude called it twice during planning; the results were noisy but included the current source and the relevant export logic. The full run finished in 8 minutes 45 seconds, planning ran 40% faster than the plain-Claude baseline, and it needed 17 navigation calls during planning versus 28 for both other setups. Total token use came to 4.23 million, 35% below baseline, at a $3.71 API-equivalent cost.\n\nTo check the code itself, the tester had Codex audit all three exporters against an extreme 101-frame-clip timeline. Graphify's export ended one frame early, a 33-millisecond error at 30 frames per second that grew with each additional clip and could drop a valid word near a cut. Plain Claude's export had a smaller one-millisecond rounding error. CodeGraph's was the only version to pass both timing checks cleanly.\n\nA separate roundup of Claude Code add-ons lists Graphify alongside other tools built to cut token spend and cost: a hook called Ponytail that reportedly trims generated code by about 54% on average, and a router called OmniRoute that fails over across 352 model providers when a subscription's usage limit runs out mid-session. That roundup frames the pattern the test results back up: the model increasingly isn't the bottleneck, the tooling wrapped around it is. The tester was explicit that this was one run per setup, self-funded and unsponsored, and cautioned that both the underlying models and the indexing tools change fast enough that any single benchmark can go stale within weeks.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"codegraph-vs-graphify-token-benchmark","slug":"codegraph-beat-graphify-and-cut-claude-code-s-token-use-35-in-a-head-to-40ce0d","url":"https://claudecodereview.ai/a/codegraph-beat-graphify-and-cut-claude-code-s-token-use-35-in-a-head-to-40ce0d/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/40ce0dea-07f1-4d97-ad59-b97e3650bbc7","role":"item","position":4,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/codegraph-beat-graphify-and-cut-claude-code-s-token-use-35-in-a-head-to-40ce0d/2a86144645d5712a-095e186f828e297f/web_hero.webp","imageAlt":"A diagram shows three columns for build methods, where the CodeGraph column features a single distinct square representing efficient indexing, leading to a successfully completed build.","createdAt":"2026-09-22T17:52:32.762Z","updatedAt":"2026-09-22T18:00:21.647Z","sources":[{"role":"primary","title":"CodeGraph Cuts Claude Code Token Use 35% vs Graphify in Head-to-Head Test","url":"https://www.youtube.com/watch?v=Xr2MjfirjqA","sourceName":"@thegraytcat","author":"@thegraytcat","publishedAt":"2026-09-16T10:15:39Z"},{"role":"supporting","title":"Four Plugins That Turn Claude Code Into a Faster, Cheaper Engineering System","url":"https://instagram.com/reel/DdjkD4xi1ma","sourceName":"@peterstewiestartup","author":"@peterstewiestartup","publishedAt":"2026-09-21T16:14:35Z"}]},{"id":"1befe299-5950-4000-9772-b20ff71aa82e","title":"A 'Chief of Staff' pattern splits Claude Code work between a verifier and its workers","dek":"A blog post lays out a coordinator-and-worker setup for Claude Code where one session's whole job is re-running other sessions' claimed test results before trusting them.","bodyMd":"Long Claude Code sessions tend to degrade after about an hour: context gets compacted into lossy summaries, and an agent reporting \"tests pass\" is often describing its intent rather than something it just checked. A blog post from asyncdot.com, shared on Hacker News, lays out a fix it calls the Chief of Staff pattern: one long-lived Claude Code session acts as coordinator, assigning work and checking it, while separate short-lived sessions do the actual coding. The name is the post's own coinage, but the shape is the established orchestrator-worker or supervisor pattern, and Claude Code's own subagent docs describe the same split as a team lead with teammates.\n\nThe coordinator's job is narrow and deliberately unglamorous: pull work from a queue, write a brief a weaker model could follow, spawn an executing session, then verify what comes back by re-running the commands it claims to have run and reading the diff rather than the transcript. The moment the coordinator starts writing code itself, the post argues, it stops verifying and the whole setup collapses back into one overloaded session.\n\nThe operating loop runs one item at a time: pull the next task, read its linked spec, run the verifier first and confirm it fails (a \"red gate,\" since a check that's already green before you start proves nothing), delegate the fix to an executing session, re-run every claimed command and treat exit codes as authoritative, read the diff, then ship with one commit per task. To spawn a worker, the post's example uses cmux, a tool for scripting terminal workspaces from the command line:\n\n```\ncmux workspace create \\\n --name project-session-12 \\\n --cwd /path/to/repo \\\n --command 'claude \"Read docs/briefs/current.md and do exactly what it says.\"'\n```\n\nTwo details matter here: `--command` types text into the new workspace's shell, it doesn't launch an agent by itself, so the `claude` invocation has to be explicit. And the prompt should stay short and point at a committed file rather than carrying the whole brief inline, because long command strings fail to execute reliably.\n\nState lives outside any session's context, in a task board reachable over MCP, a protocol that lets an AI agent read and write external tools and data sources directly. The post's example is Plan Desk, a planning board hosted at plandesk.asyncdot.com, the same asyncdot.com domain that publishes the blog itself, meaning it's the author's own product rather than an independent third-party tool, though the post says any durable store with an API works: tasks carry a problem statement, interfaces, and a validation contract detailed enough that a worker session never has to go read a parent document to finish the job.\n\nThe post is specific about why self-reports fail: in one case a session wrote a commit hash into a log file by hand, then verified it against the short hash sitting in its own shell rather than the string it had actually written to disk. Both checks passed, and the file still pointed at a hash that resolved to nothing. Its rule: verify a value by reading it back out of the artifact you're checking, never out of the variable you assume matches it.\n\nThis is worth setting up, per the post, when a piece of work spans more sessions than one context window can hold, when several streams can run in parallel, or when a wrong \"done\" is expensive to discover later. It's explicitly not worth it for a single well-scoped change, since the coordination and verification overhead spends real tokens without producing code, and without a durable store you're not running the pattern at all, just several sessions and hoping.","status":"published","storyType":"tip","category":"Workflow","clusterKey":"claude-code-multi-agent-orchestration-patterns","slug":"a-chief-of-staff-pattern-splits-claude-code-work-between-a-verifier-and-1befe2","url":"https://claudecodereview.ai/a/a-chief-of-staff-pattern-splits-claude-code-work-between-a-verifier-and-1befe2/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/1befe299-5950-4000-9772-b20ff71aa82e","role":"item","position":5,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-chief-of-staff-pattern-splits-claude-code-work-between-a-verifier-and-1befe2/44362d07325fda7c-ee5d51954ae5f723/web_hero.webp","imageAlt":"A single node at the top connects to four identical nodes in a row below, representing a coordinator managing separate worker sessions.","createdAt":"2026-09-20T16:49:39.699Z","updatedAt":"2026-09-20T17:00:14.424Z","sources":[{"role":"primary","title":"Chief of Staff Pattern: Orchestrate Multiple Claude Code Agents Together","url":"https://asyncdot.com/blog/chief-of-staff-pattern-orchestrating-claude-code-sessions","sourceName":"Hacker News","author":"Hacker News","publishedAt":"2026-09-20T05:46:19Z"}]},{"id":"ed4f6287-a5b1-4354-8a5d-c2c31dd55520","title":"SkillSpector can scan GitHub code for malware before Claude Code installs it","dek":"NVIDIA's SkillSpector is a scanner built from the company's AI security playbooks, and a new setup turns it into a Claude Code hook, a script that runs automatically right before an action, so no GitHub code downloads or installs until it clears the scan.","bodyMd":"NVIDIA's SkillSpector is a security scanner the company built from its own AI-agent security playbooks, meant to check code for hidden attacks before an AI agent acts on it. A new setup wires that scanner directly into Claude Code, so the check runs on its own instead of something a developer has to remember to launch by hand.\n\nThe setup uses a Claude Code hook, a small script the tool fires automatically at a set moment, in this case a \"PreToolUse\" hook that runs right before Claude Code takes a specific action. Configured this way, it triggers before every git clone (downloading a copy of a project's code from GitHub) and before every skill install (adding a packaged tool into Claude Code), handing that code to SkillSpector for a scan before anything else happens.\n\nGetting SkillSpector to behave takes one more step, according to the instructions: out of the box, the scanner is described as highly sensitive and blocks everything. The setup narrows it to flag only three categories, high-severity prompt injection, supply-chain attacks, and known malware, so an ordinary GitHub project passes straight through and only flagged code needs a manual look. The same hook can reportedly be added to Codex, OpenAI's coding agent, giving both tools the same automatic check.\n\nThe appeal is that anyone who regularly installs skills or pulls code from GitHub into Claude Code gets a standing check against those three threat categories without extra effort, only reviewing what the scanner actually flags. The source gives no version requirements or false-positive numbers beyond noting the scanner's aggressive default settings, so how well the narrowed rules hold up in daily use isn't detailed.","status":"published","storyType":"tip","category":"Workflow","clusterKey":"nvidia-skillspector-pretooluse-security-hook","slug":"skillspector-can-scan-github-code-for-malware-before-claude-code-install-ed4f62","url":"https://claudecodereview.ai/a/skillspector-can-scan-github-code-for-malware-before-claude-code-install-ed4f62/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/ed4f6287-a5b1-4354-8a5d-c2c31dd55520","role":"item","position":6,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/skillspector-can-scan-github-code-for-malware-before-claude-code-install-ed4f62/6f1475b8ea4ca7fc-e2ef5fdbd9bf97b5/web_hero.webp","imageAlt":"A diagram showing three rectangular blocks acting as filters in a narrow channel that funnels items into a larger stack of files.","createdAt":"2026-09-22T19:04:12.251Z","updatedAt":"2026-09-22T19:30:27.940Z","sources":[{"role":"primary","title":"You can make Claude Code check every GitHub repo before it clones it by using this one hook setup. Install NVIDIA/skillspector from @nvidia ...","url":"https://tiktok.com/@jensheitmann_/video/7688094613005077790","sourceName":"Jens Heitmann","author":"Jens Heitmann","publishedAt":"2026-09-21T20:53:52Z"},{"role":"supporting","title":"Add a Security Hook to Claude Code That Scans Every GitHub Repo Before Install","url":"https://instagram.com/reel/DdkERWoS28n","sourceName":"@jens.heitmann","author":"@jens.heitmann","publishedAt":"2026-09-21T20:56:19Z"}]},{"id":"846b027e-4c99-47b0-9779-b66ec7926b6d","title":"Claude Code's /doctor command clears stale rules out of your CLAUDE.md","dek":"Running the built-in /doctor check in a project scans CLAUDE.md, the file that stores your standing instructions for Claude Code, and flags old rules left over from before newer models needed as much hand-holding.","bodyMd":"Claude Code's /doctor command, run inside a project, scans that project's CLAUDE.md file for rules that no longer pull their weight. CLAUDE.md is where Claude Code keeps the standing instructions you've given it for a project: style preferences, off-limits folders, phrases to avoid, that kind of thing. Every rule sitting in that file is something Claude has to read and reason through before it even starts a task, and each one costs tokens, the small chunks of text a model reads and gets charged for on every request.\n\nThe reasoning, according to Claude's own account, is that older Claude models needed a lot of explicit guidance to behave the way you wanted, while the newer ones need much less. A rule that once fixed a real problem can quietly turn into dead weight: the model would follow it anyway, so it just adds an extra reasoning step on every task.\n\nTo use it, run /doctor in a Claude Code project. It flags rules in CLAUDE.md that look outdated, redundant, or contradictory. For each one, the test is simple: does Claude actually still need this, or would deleting it change nothing? One demonstration of the command found that trimming the flagged rules made Claude's outputs better, while the preferences still worth keeping stayed in place. The same demonstration claimed Anthropic's own team had removed roughly 80% of Claude Code's built-in system prompts for similar reasons.\n\nIt's most worth running on a CLAUDE.md file that's been built up gradually over months, the kind where a new rule got added every time Claude did something annoying and nobody went back to prune the old ones. Claude Code also now saves relevant memories about how you work automatically, which cuts down on how much still needs to be written as a hard rule in the first place. A related walkthrough treats this as routine upkeep, checked every few weeks alongside which loaded skills are actually getting used, rather than a one-time cleanup.","status":"published","storyType":"tip","category":"Workflow","clusterKey":"doctor-command-stale-claude-md-rules","slug":"claude-code-s-doctor-command-clears-stale-rules-out-of-your-claude-md-846b02","url":"https://claudecodereview.ai/a/claude-code-s-doctor-command-clears-stale-rules-out-of-your-claude-md-846b02/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/846b027e-4c99-47b0-9779-b66ec7926b6d","role":"item","position":7,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-s-doctor-command-clears-stale-rules-out-of-your-claude-md-846b02/7c1f7ea6c4d7777e-7ef2642f46d9378c/web_hero.webp","imageAlt":"Ten rectangular blocks stacked vertically, with two blocks being removed from the middle of the stack.","createdAt":"2026-09-22T15:39:57.479Z","updatedAt":"2026-09-22T16:00:27.788Z","sources":[{"role":"primary","title":"Every hard rule in your CLAUDE.md is one more thing Claude Code has to reason about before it gets to the task. While older models needed th...","url":"https://tiktok.com/@claude/video/7686936140523261198","sourceName":"Claude","author":"Claude","publishedAt":"2026-09-18T17:58:21Z"},{"role":"supporting","title":"comment “routine” on my IG @Itsmariahbrunner and I’ll send you my full Claude Code maintenance checklist 🫡 run these every few weeks: 1. /d...","url":"https://tiktok.com/@itsmariahbrunner/video/7687659993717411085","sourceName":"Mariah | AI & Tech","author":"Mariah | AI & Tech","publishedAt":"2026-09-20T16:47:30Z"},{"role":"supporting","title":"Claude Code's /doctor Command Finds Outdated Rules Wasting Tokens","url":"https://instagram.com/reel/DdcBZxhuosH","sourceName":"@claudeai","author":"@claudeai","publishedAt":"2026-09-18T17:57:06Z"}]},{"id":"ba9d00ae-399b-40c6-9565-fd750203b579","title":"Claude Code's Agent Skills can save proven scripts so agents stop re-solving problems","dek":"Anthropic engineers describe building Claude Code skills like reusable software components: once Claude writes code that works, the skill stores it and calls it directly on future runs instead of writing it again.","bodyMd":"Agent Skills, Anthropic's format for packaging a specific job into a folder of instructions, scripts and reference files that Claude Code can call on, work best when they're treated less like a one-off prompt and more like software that gets refined every time it runs. Anthropic engineers who built the format describe four habits that turn a skill into something that keeps getting better instead of restarting from zero each session.\n\n**Save working code instead of regenerating it.** Claude will often rewrite the same script from scratch on every run of a skill, burning tokens and producing slightly different results each time. The fix is the same one developers have used for decades under the name DRY, \"don't repeat yourself\": once Claude solves the problem, save that script into the skill's own folder and update its skill.md file to call that file directly. A prompt for this: \"Save the script you just used inside the skill's script folder. Update the skill.md so that future runs execute that file instead of trying to rewrite it again. Then run the skill again and verify the result.\" Test it by running the same task twice and confirming the skill is actually calling the saved file rather than reinventing it.\n\n**Write tight descriptions so Claude finds the right skill.** Claude doesn't load a skill's full instructions up front. It first reads only the short name and description, known as the skill's YAML front matter, and only opens the full file once a prompt matches that description. Anthropic calls this progressive disclosure, and it keeps unrelated instructions out of Claude's working context. It breaks down when two descriptions overlap, like \"help with content\" versus \"create marketing assets\": Claude ends up guessing. A tighter version names the actual job and the phrases a person would use to ask for it, for example: \"This skill creates LinkedIn carousels from a topic, a transcript, or an outline. Use this when the user asks for a carousel, carousel slides, or a LinkedIn document post.\" Claude Code can audit its own skills for this: ask it to review every description, say what triggers it and where it overlaps with others, and rewrite only the ambiguous ones. Then test each skill against an obvious request, a differently worded one, and an unrelated request that should not trigger it.\n\n**Turn corrections into permanent rules.** Telling Claude to just \"fix it\" fixes the output but leaves the underlying process broken, so the same mistake resurfaces next time. Instead, update the smallest part of the skill that caused the error: the process instructions in skill.md, a missing reference file for tone or brand voice, or an explicit rule if the same mistake keeps recurring. A prompt for this: \"Review what went wrong during this run. Decide whether the cause was the process, missing context, a weak rule, or unreliable code. Update the skill in the smallest durable place. Then rerun the same task and verify the fix.\" Because Agent Skills are an open format, the same skill folder can be tested against other compatible agent harnesses to expose assumptions baked in for one specific model.\n\n**Verify the output before it reaches you.** A skill that hands back its first draft and calls the job done typically gets 70 to 80 percent of the way there, leaving a person to catch formatting errors, unsupported claims, or weak writing by hand. Building the check into the skill closes more of that gap: for a slide deck, have it render each slide as an image and fix anything cropped or unreadable before rerendering; for a research report, have it match claims against primary sources and drop anything it can't verify; for subjective work, have separate agent personas, a confused beginner, a skeptical buyer, review it before revising. A prompt for this: \"Before returning the final output, define the acceptance criteria. Create the first version, inspect it using the relevant verification method, fix every issue you find, and then run another pass. Return the output only after it meets the criteria, with a short summary of what you checked. If something can't be verified, tell me exactly what remains.\"\n\nThe caveat on all of this: a skill can't force a weaker model to match a stronger one's output, since different models interpret the same instructions differently. What travels well is the process, not a guarantee of identical results.","status":"published","storyType":"tip","category":"Agents","clusterKey":"claude-code-skill-building-tips-roundup","slug":"claude-code-s-agent-skills-can-save-proven-scripts-so-agents-stop-re-sol-ba9d00","url":"https://claudecodereview.ai/a/claude-code-s-agent-skills-can-save-proven-scripts-so-agents-stop-re-sol-ba9d00/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/ba9d00ae-399b-40c6-9565-fd750203b579","role":"item","position":8,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-s-agent-skills-can-save-proven-scripts-so-agents-stop-re-sol-ba9d00/a8ae62bd3e43d1de-2f88c08767bae063/web_hero.webp","imageAlt":"A clean, singular document file being removed from a messy stack of discarded papers, representing the transition to permanent, reusable code.","createdAt":"2026-09-18T13:46:38.557Z","updatedAt":"2026-09-18T14:01:27.598Z","sources":[{"role":"primary","title":"Four Claude Code Skill Patterns That Make Agents Self-Improving","url":"https://www.youtube.com/watch?v=HIRDzMtuWFk","sourceName":"Nate Herk | AI Automation","author":"Nate Herk | AI Automation","publishedAt":"2026-09-13T13:55:05Z"}]}],"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"}]}