{"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":"6c869871-efe6-4ae7-8ee6-7a0c18aab891","date":"2026-09-25","status":"locked","createdAt":"2026-09-24T17:33:50.995Z","storyCount":10,"newsletterSubject":"Anthropic cuts Claude Code usage 17%, Claude Code loses details mid-task, Agit adds Git-style save points"},"updatedAt":"2026-09-25T00:30:32.549Z","stories":[{"id":"c3f0c36e-95cd-4729-b3d2-0f6a8975eb77","title":"Anthropic cut Claude Code's weekly usage limit 17% right before Projects launched","dek":"Claude Code Projects, a new cloud-based feature that splits coding work into parallel AI-run sessions, arrived three days after Anthropic quietly lowered the weekly usage ceiling that pays for it.","bodyMd":"Three days before Anthropic relaunched Claude Code Projects on September 17, the company quietly replaced a temporary 50% boost to subscribers' weekly usage limit with a permanent 25% increase. Measured against what users had all summer, that swap is a 17% cut: if the baseline limit was 100 units, the summer promotion pushed it to 150, and the permanent ceiling that replaced it lands at 125, according to a cost and limits breakdown published on Dev.to that cites Anthropic's own usage FAQ. Anthropic's clarification confirmed the 17% figure only after the company deleted its original announcement thread, per that same account.\n\nClaude Code Projects itself is a rebuild. It replaces the old folder-based Projects with a single \"coordinator\" conversation: you describe an engineering goal, such as retiring an old API endpoint across three repos, and Claude scopes the work and splits it into parallel \"threads.\" Each thread is a full cloud-hosted Claude Code session with its own git branch and its own copy of the repository, The Verge has reported, so two threads editing the same file just produce an ordinary merge conflict. Threads also share project memory and files, so a decision made on day one stays visible to a thread that starts on day three, letting the tool pick up work automatically instead of a developer stitching parallel sessions together by hand.\n\nThat design has a billing consequence the launch materials don't foreground: each thread draws on a full session's worth of usage allowance, so running six threads at once burns six times what one session would, per reporting on the launch. Anthropic capped the feature at 200 new threads per day per project, a limit generous enough to signal the company expects people to spawn threads aggressively. Put together, Claude Code Projects is a usage multiplier that arrived in the same week its funding ceiling got smaller.\n\nAccess is narrow for now. The beta opened September 17 to select Pro and Max subscribers using cloud sessions, with Team and Enterprise access described as coming later; the feature requires repos to live on GitHub specifically, not just any git host. There's no separate Projects price. It rides on existing subscription tiers: Pro at $20 a month, Max 5x at $100, Max 20x at $200, and Team and Enterprise plans priced per seat, with Enterprise already metered against API usage before Projects existed.\n\nThe same week carried a second, opposite move. Starting September 19, Claude Code version 2.1.278 stopped billing the safety-classifier checks that run under \"auto mode,\" the setting that lets Claude Code execute commands unattended, for users on the Claude API, Enterprise, Bedrock, Vertex, Foundry, and gateway plans, according to a changelog analysis of the release. Those checks used to show up as billed tokens. Making them free is a real cost cut, but only for metered accounts: subscription users got a tighter weekly cap in the same stretch that API-billed users got a cheaper meter.\n\nUsage credits are the piece that connects the two changes. Anthropic's support documentation describes them as a way for subscribers who hit their plan limit to keep working by switching to pay-as-you-go pricing at standard API rates, with redemptions capped at $2,000 a day and an optional monthly spend cap. Projects raises how fast people consume their allowance, the permanent cut lowers the ceiling they're consuming against, and usage credits are what catches the overflow, billed at API rates rather than the flat subscription rate.\n\nNone of this is hidden; every piece is documented somewhere. The open question is what happens once Projects leaves beta: whether Anthropic raises subscription allowances to match the parallelism it just shipped, or whether the 200-thread daily cap and linear per-thread billing become the permanent path that pushes heavy users from a flat subscription into metered credits.","status":"published","storyType":"news","category":"Pricing","clusterKey":"claude-code-weekly-limit-cut-17-percent","slug":"anthropic-cut-claude-code-s-weekly-usage-limit-17-right-before-projects-c3f0c3","url":"https://claudecodereview.ai/a/anthropic-cut-claude-code-s-weekly-usage-limit-17-right-before-projects-c3f0c3/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/c3f0c36e-95cd-4729-b3d2-0f6a8975eb77","role":"lead","position":0,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/anthropic-cut-claude-code-s-weekly-usage-limit-17-right-before-projects-c3f0c3/1382a36664bf4c14-a361ebf3d25bce3b/web_hero.webp","imageAlt":"A diagram showing a wide reservoir with one segment removed, feeding into six parallel vertical channels below it.","createdAt":"2026-09-25T00:05:24.340Z","updatedAt":"2026-09-25T00:30:18.238Z","sources":[{"role":"primary","title":"Claude Code Projects Explained: Threads, Costs, Limits","url":"https://dev.to/saaswithalex/claude-code-projects-explained-threads-costs-limits-20m1","sourceName":"Alex Morgan","author":"Alex Morgan","publishedAt":"2026-09-24T03:45:51Z"}]},{"id":"ea006a97-6dc1-4dee-9d77-fc257c0a85d6","title":"Why Claude Code loses details mid-task, and how developers are working around it","dek":"Long sessions trigger Claude Code's automatic compaction, which summarizes the conversation to save space and quietly drops the specific decisions a task depended on.","bodyMd":"Claude Code sessions have a context window, the amount of conversation and file content the model can hold at once. Long tasks fill it fast between file reads, tool output, and back-and-forth, so Claude Code compacts: it summarizes everything so far, discards the original messages, and keeps going with the summary plus whatever hadn't been folded in yet. That happens automatically when the window fills up, or on demand with `/compact`.\n\nThe summary is good at holding onto the broad shape of a task, according to a developer writing about the problem on Medium. It is bad at holding onto the specifics: why retry logic moved to the client instead of the handler, or why a caching layer got ripped out. Those details tend to fall out silently, and there's no way to see what got cut from inside the session, since the summary reads as complete either way. The failure shows up later, when Claude cheerfully re-adds something you already removed.\n\nTwo fixes are circulating for keeping long coding tasks on track.\n\nOne works inside Claude Code's hook system. ContextForge, an MCP memory server, shipped version 0.12.0 with a hook tied to the SessionStart event's compact matcher: any time `/compact` runs or auto-compaction fires, a command called `recall` pulls the 10 most recent saved decisions and up to 5 pending tasks for the linked project and prints them as plain text, which Claude Code appends straight into context. The whole thing runs in about four seconds and is built to fail silently, not break the session, if there's no API key, no linked project, no network, or it takes longer than eight seconds. Setup means running the MCP install, then an init command that writes hook config into the project's `.claude/settings.json` and memory rules into CLAUDE.md; a project needs a `.contextforge` file in the repo root to be linked. To confirm it's working, run `/compact` and ask Claude what context it just received; it should quote a block starting \"ContextForge: context restored after compaction.\" The tool only restores what was explicitly saved, and only inside Claude Code, since Cursor and Copilot don't have the same hook system.\n\nThe other fix skips the conversation entirely. A Reddit post describes a CLI workflow called wb-flow that tracks task state in a real `plan.md` file on disk rather than in chat: each task is a row with its dependencies, assigned role, status, and a report file written on completion, plus separate validation evidence. A dependency resolver groups tasks with no shared dependencies into parallel \"waves,\" while model routing (which provider runs a given task) is handled as a separate axis, so one wave can span multiple providers. Validation is deliberately assigned across a provider boundary, Claude writing code and GPT or Codex checking it, or the reverse, because same-family review \"waved straight through\" bugs that cross-provider checks caught. The setup also guards against an agent marking a task done based on a self-written report: a content hash over the workspace, excluding the report folder itself, plus explicit deterministic verification commands, keeps a report from counting as its own proof of work.\n\nBoth approaches target the same failure mode on long coding tasks: a session that keeps talking fluently while quietly losing track of what it already decided or already finished. Neither claims to recover what compaction drops from the transcript itself; they work by keeping the decisions and task state somewhere compaction can't touch in the first place.","status":"published","storyType":"tip","category":"Workflow","clusterKey":"claude-code-compaction-context-loss-fixes","slug":"why-claude-code-loses-details-mid-task-and-how-developers-are-working-ar-ea006a","url":"https://claudecodereview.ai/a/why-claude-code-loses-details-mid-task-and-how-developers-are-working-ar-ea006a/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/ea006a97-6dc1-4dee-9d77-fc257c0a85d6","role":"item","position":1,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/why-claude-code-loses-details-mid-task-and-how-developers-are-working-ar-ea006a/28de26b902f26ecb-d16aae23e552655f/web_hero.webp","imageAlt":"A continuous scroll of paper with ten rectangular blocks falling out of a hole in the center, representing lost session data during compaction.","createdAt":"2026-09-24T22:04:58.089Z","updatedAt":"2026-09-24T22:30:44.254Z","sources":[{"role":"primary","title":"Claude Code Compaction: Why Your Session Forgets Mid-Task (and the Fix)","url":"https://medium.com/@alfredodevelop/claude-code-compaction-why-your-session-forgets-mid-task-and-the-fix-74167bb85c66?source=rss------claude_code-5","sourceName":"Alfredo Izquierdo","author":"Alfredo Izquierdo","publishedAt":"2026-09-24T16:34:21Z"},{"role":"supporting","title":"How I stopped Claude Code from losing context and state on long multi-file tasks","url":"https://reddit.com/r/ClaudeCode/comments/1wp51ud/how_i_stopped_claude_code_from_losing_context_and","sourceName":"/u/Muted_Ad_9442","author":"/u/Muted_Ad_9442","publishedAt":"2026-09-24T15:40:31Z"}]},{"id":"2c0410db-90c8-4e6c-8f85-ea9d510c3cc1","title":"Agit brings Git-style save points and branches to Claude Code chats","dek":"Agit saves every exchange with Claude Code or Codex as a snapshot you can rewind to later, and can copy a conversation's full history into a different AI coding tool without retyping the backstory.","bodyMd":"Agit, short for Agent Git, applies the save-and-branch logic of Git, the version-control software developers use to track and save changes to a project over time, to conversations with AI coding agents like Claude Code and Codex. It targets a specific annoyance: an agent session is locked to one tool working in one folder, so moving a discussion to another session, another agent, or another person has meant manually writing a summary file and hoping it keeps the important details.\n\nInstead of storing code, an Agit \"repo\" stores the back-and-forth itself, along with any memory and skills the agent has picked up. Each session gets its own branch, in Git terms, a separate, parallel copy of a project that lets someone try a different direction without touching the main version, and that can simply be deleted if it doesn't work out, so several separate conversations about the same project can run side by side without bleeding into each other. Every finished exchange between a person and the agent is saved as a \"commit,\" giving each project a running log of turns that can be revisited later.\n\nThat log is also a rewind button. Running a log command lists a session's turns, numbered by prompt and response, and a revert command can roll the conversation back a given number of turns from the end. Nothing about the actual app changes: reverting only edits what the agent sees in the conversation, not any code it already wrote. The removed turns stay in the record rather than disappearing, and a resume command picks the conversation back up from the earlier point.\n\nTwo commands carry work between sessions and even between tools. A cherry-pick command finds a specific message in one conversation's log and appends it, along with the agent's original reply, to the end of a different session, so a useful exchange from one thread can be reused in another without redoing the work; it copies only the conversation text, not any file changes described in it. A fork command goes further, converting an entire Claude Code conversation into the format Codex reads and opening it there, which replaces the workaround of asking one agent to write a handoff note for the other.\n\nSharing runs through a GitHub-style profile system. Repos are private by default, so a saved session only becomes visible to others once it's pushed and access is granted, either by adding someone as a collaborator (who can then submit a pull request with their own changes) or by generating a read-only link capped at a set number of opens. Private storage is limited to 1GB across all of a user's conversations, and while a repo can be switched to public after a confirmation prompt, Agit does not allow switching it back to private once that happens.\n\nBecause agents routinely read API keys and passwords during a session, Agit scans a conversation before saving and pushing it and swaps recognized secrets for placeholders; a test with fake API keys in a walkthrough found the saved history correctly redacted. Plain-English passwords are the gap: without a fixed pattern like a key's set length and prefix, Agit can miss them even when a message calls one out directly. AI Labs, the company behind the video walkthrough, says it built a companion skill that registers passwords in advance so Agit knows to mask them, but that skill is not a built-in part of Agit itself. It's distributed only through AI Labs' own paid AI Labs Pro resources, alongside the company's starter pack, so it has to be obtained separately rather than expected inside a standard Agit install. It also only works if it's added at the start of a session, since a password already written into history stays there even after the skill is installed or the original message is deleted.\n\nGetting set up takes a few steps: install the tool through npm or a backup installer, log in through a browser, then run an init command that names the repo, points it at a project folder, and writes agent instructions into either an agents.md or claude.md file depending on which coding tool is in use. An auto-push option can save each session to the account automatically, or a user can push manually once they're ready to share it.","status":"published","storyType":"news","category":"Workflow","clusterKey":"agit-git-style-claude-code-sessions","slug":"agit-brings-git-style-save-points-and-branches-to-claude-code-chats-2c0410","url":"https://claudecodereview.ai/a/agit-brings-git-style-save-points-and-branches-to-claude-code-chats-2c0410/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/2c0410db-90c8-4e6c-8f85-ea9d510c3cc1","role":"item","position":2,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/agit-brings-git-style-save-points-and-branches-to-claude-code-chats-2c0410/42470167ef4cef36-5b06e733cafee2a5/web_hero.webp","imageAlt":"A diagram shows a main vertical line with one smaller segment branching off to the side, highlighting the ability to create separate conversation branches.","createdAt":"2026-09-24T19:24:49.749Z","updatedAt":"2026-09-24T19:30:19.029Z","sources":[{"role":"primary","title":"This New Open Source Tool Just Fixed Your Claude Code Workflow","url":"https://www.youtube.com/watch?v=CHHEjuNBxoQ","sourceName":"AI LABS","author":"AI LABS","publishedAt":"2026-09-22T15:00:26Z"},{"role":"supporting","title":"Agit Brings Git-Style Version Control to Claude Code Conversations","url":"https://www.youtube.com/watch?v=CHHEjuNBxoQ","sourceName":"@Ailabs-393","author":"@Ailabs-393","publishedAt":"2026-09-22T20:15:53Z"}]},{"id":"510c73dd-17a7-4075-9640-4e5a4cbb4fb3","title":"How Agent Skills can stop Claude Code from breaking old .NET and Vue apps","dek":"A developer working in a 10-year-old ASP.NET Core and Vue codebase found five recurring failure patterns and fixed each with an Agent Skill, a reusable instruction file that Claude Code loads only when a matching task comes up.","bodyMd":"Claude Code can write clean, plausible code for a brand-new feature and still get a decade-old enterprise codebase wrong in predictable ways. A field report from a developer working on a large ASP.NET Core, Entity Framework Core, SQL Server and Vue/Nuxt line-of-business app catalogs five mistakes the agent made repeatedly, and the fix for each: an Agent Skill, a markdown instruction file that Claude Code loads automatically when a task matches, or on direct request with a command like `/ef-migration`.\n\nThe five problems and the rules written to stop them, per the report:\n\n1. **Wrong architecture.** Asked for a new feature, Claude Code defaults to textbook patterns like `InvoiceService`, AutoMapper and a generic repository, even when the codebase actually uses `InvoiceManager`, hand-written mappers and feature-scoped repositories. The fix is a discovery step at the top of every skill: find the most similar existing feature, read it fully, and note the naming, DI registration, mapping and auth conventions before writing anything. If conventions conflict, follow the newer one and say so.\n\n2. **Loading too much data.** Code that works for 50 rows breaks down on a table with 2 million rows behind a 40-column grid. A repository skill now requires projecting fields instead of loading full entity graphs, `AsNoTracking()` on reads, paging on every user-facing query, a ban on queries inside a `foreach` loop, and whitelisting any user-supplied sort field used in Dynamic LINQ.\n\n3. **Migrations that drop data.** Renaming a property can make EF Core generate a `DropColumn` plus an `AddColumn`, and a non-nullable column added to a populated table fails on deploy. The report's `ef-migration` skill bans applying migrations to shared databases, requires opening every generated migration to check for unintended drops, non-nullable adds and type changes, and asks the agent to produce an idempotent script plus a plain-English low/medium/high risk rating for the database administrator.\n\n4. **Wrong framework version.** Most of Claude Code's training data reflects modern Vue (`<script setup>`, Pinia), but plenty of enterprise front ends still run Vue 2 with Vuex and the Options API, and mixed syntax builds fine until it doesn't. A page-scaffold skill checks the Vue and Nuxt versions in `package.json`, detects Options vs. Composition API from neighboring files, identifies the UI grid library in use, and requires loading, empty and error states on every page.\n\n5. **Shallow code reviews.** Left unguided, review requests produce long lists padded with speculative suggestions. A review skill ranks findings by severity for a.NET-plus-Vue app: authorization and IDOR risks first, then injection (including from Dynamic LINQ), then PII in logs, then API contract breaks, then EF performance. It instructs the agent to drop any finding it can't confirm by reading the actual call path.\n\nThe underlying technique works without any of these specific rules: put a skill folder with a `SKILL.md` file in `.claude/skills/` (shared via git) or `~/.claude/skills/` (personal), and open every skill with an instruction to find and read the most similar existing code before writing anything. The report calls that single line the highest-leverage sentence in any skill. Pairing skills with a short `CLAUDE.md` at the repo root covering build commands, layering rules and a \"never\" list is described as making the difference dramatic.\n\nThe report also packages these into a paid 11-skill bundle covering backend, front-end, testing and workflow scenarios, which is a separate commercial product not affiliated with Anthropic.","status":"published","storyType":"tip","category":"Agents","clusterKey":"claude-code-dotnet-enterprise-mistakes-agent-skills-fixes","slug":"how-agent-skills-can-stop-claude-code-from-breaking-old-net-and-vue-apps-510c73","url":"https://claudecodereview.ai/a/how-agent-skills-can-stop-claude-code-from-breaking-old-net-and-vue-apps-510c73/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/510c73dd-17a7-4075-9640-4e5a4cbb4fb3","role":"item","position":3,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/how-agent-skills-can-stop-claude-code-from-breaking-old-net-and-vue-apps-510c73/9138fe69c5ff0479-8d74d202f3900b5d/web_hero.webp","imageAlt":"Five modular blocks stacked together with one block lifted out, showing a branching path of five ranked instruction steps.","createdAt":"2026-09-24T20:20:15.940Z","updatedAt":"2026-09-24T20:30:16.974Z","sources":[{"role":"primary","title":"5 Mistakes Claude Code Makes in Enterprise .NET Codebases (and How to Stop Them)","url":"https://medium.com/@matthew.r.brown29/5-mistakes-claude-code-makes-in-enterprise-net-codebases-and-how-to-stop-them-2b3340d1a573?source=rss------claude_code-5","sourceName":"Matthew Brown","author":"Matthew Brown","publishedAt":"2026-09-24T16:43:50Z"}]},{"id":"49cd90fd-66ef-4540-831e-d2f0e97cd3e7","title":"A new tool browser-tests every page Claude Code builds, with no AI model involved","dek":"assay runs as a Claude Code Stop hook that automatically opens each generated page in a browser, clicks through its controls, and catches self-contradicting bugs like an Undo button that lags a press behind, all without calling an AI model.","bodyMd":"A new command-line tool called assay opens every web page Claude Code generates in an actual browser, finds every button, form, and control on it, works out a test plan from what it finds, drives all of it, and reports what broke. No test file to write, no large language model involved, and no API key needed for the check itself.\n\nFor Claude Code specifically, assay ships as a plugin: a skill paired with a Stop hook, the mechanism that fires automatically when Claude ends a turn. That means the check runs at the end of any turn that touched a page, whether or not Claude remembered to run it itself. The output is a single line back in the terminal, something like \"assay: checked todo/todo.html, 8 checks, nothing flagged,\" and the median run takes 14 seconds.\n\nThe tool works by measuring the rendered page rather than reading the markup, and it deliberately checks a narrow thing. It has no way to know what a given page is supposed to do, so it only flags moments where the page contradicts itself: an Undo button that's one press behind where it should be, a drawing canvas that registers the first stroke but drops the second. It finds which pages changed by scanning the disk, and checks at most three pages per turn, holding the turn open so the result reaches the person watching rather than arriving after the conversation has already moved on.\n\nOn a set of 225 generated pages that its developer opened and drove by hand before ever running assay against them, the tool caught 15 of 20 real bugs and never flagged a page that actually worked. That hand-testing step was deliberate: grading a checker with the same kind of tool it's checking wouldn't prove much. On a separate, harder set built from deliberately planted bugs, assay caught only 10 of 50, a gap its developer noted in the Reddit post announcing the tool without further explanation, and a useful reminder of where the tool's limits sit.\n\nThe design choice behind the plugin is that it only reports, never fixes. Its developer says a verdict makes an agent change code, while a measurement makes it look first, so assay tells Claude what it clicked and what happened and stops there, leaving the actual fix to Claude's judgment rather than auto-editing on the strength of a flagged check.\n\nInstalling it requires running `pip install assay-ui` first, then adding the plugin through Claude Code's marketplace commands pointed at the project's GitHub repo. It's a first release, and its developer is soliciting feedback on how it performs against other people's generated pages.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"assay-browser-verification-stop-hook","slug":"a-new-tool-browser-tests-every-page-claude-code-builds-with-no-ai-model-49cd90","url":"https://claudecodereview.ai/a/a-new-tool-browser-tests-every-page-claude-code-builds-with-no-ai-model-49cd90/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/49cd90fd-66ef-4540-831e-d2f0e97cd3e7","role":"item","position":4,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-new-tool-browser-tests-every-page-claude-code-builds-with-no-ai-model-49cd90/c5d73c9843d96e4e-592b2d8bdbda2471/web_hero.webp","imageAlt":"Editorial illustration accompanying “A new tool browser-tests every page Claude Code builds, with no AI model involved”.","createdAt":"2026-09-24T15:55:04.144Z","updatedAt":"2026-09-24T16:00:39.748Z","sources":[{"role":"primary","title":"assay: a Stop hook that checks every web page Claude Code writes, in a real browser, with no LLM","url":"https://reddit.com/r/ClaudeCode/comments/1wp2es3/assay_a_stop_hook_that_checks_every_web_page","sourceName":"/u/awss1i","author":"/u/awss1i","publishedAt":"2026-09-24T13:59:27Z"}]},{"id":"4fb307f1-044c-4d32-8663-8f8f4e6ea62d","title":"A studio let Claude Code build its mobile game solo, then learned autonomy has a price","dek":"The team's Claude Code agent worked unsupervised inside Xcode and Android Studio, Apple's and Google's official app-building tools, overriding the team's chosen format and running through usage credits before the team could say otherwise.","bodyMd":"A mobile game studio says it built a phone game end to end with Claude Code, Anthropic's coding agent, and its own account of the project doubles as a caution about handing that much control to an AI without checkpoints.\n\nThe team's starting point was small: its company mascot looked enough like a video game character that they figured they might as well build a game around it. From there, according to the studio's Reddit post, Claude Code took over the technical build itself. The studio says the agent \"injected itself\" into both Xcode and Android Studio, the official tools Apple and Google use for building iOS and Android apps, and decided the layout and playability of both versions largely on its own.\n\nThat autonomy cut against what the team actually wanted. The studio says it asked for a horizontal format, but Claude Code decided the format it built was the better option and shipped it that way regardless. The studio's summary of the lesson, in its own words: \"its nice to give autonomy, but too much will completely alter your game and you wont realize it or have a say before all of your usage credits is up or you just wasted alot of time waiting on it.\" In other words, an agent left to make its own product calls can spend a team's compute budget executing a decision nobody signed off on, and the team may not notice until the work, and the credits, are gone.\n\nThe finished game leans into the process that built it. The studio says Claude Code gave itself powerups that mock rival AI models, including ChatGPT, and built the core loop around \"bug killing\" that players do while waiting for the agent to finish making changes, a design meant to ease the wait for both AI edits and app store review. The studio has the game running in a mobile browser and listed on the App Store and Play Store, and is asking players for feedback on what to improve.\n\nThe post doesn't say how many usage credits the override cost or how the team caught it. The team's own takeaway, in their words, is that giving Claude Code too much autonomy means you may not realize it, or get a say, before your usage credits run out.","status":"published","storyType":"news","category":"Agents","clusterKey":"claude-code-mobile-game-autonomy-lesson","slug":"a-studio-let-claude-code-build-its-mobile-game-solo-then-learned-autonom-4fb307","url":"https://claudecodereview.ai/a/a-studio-let-claude-code-build-its-mobile-game-solo-then-learned-autonom-4fb307/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/4fb307f1-044c-4d32-8663-8f8f4e6ea62d","role":"item","position":5,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-studio-let-claude-code-build-its-mobile-game-solo-then-learned-autonom-4fb307/15d4b1412e42b7ee-64bf92854aeddd88/web_hero.webp","imageAlt":"A diagram shows a horizontal rectangle and a vertical rectangle, with a connecting line detached from the horizontal frame to join the vertical one.","createdAt":"2026-09-24T22:12:16.408Z","updatedAt":"2026-09-24T22:30:36.901Z","sources":[{"role":"primary","title":"Team Ships Mobile Game Built Entirely by Claude Code, Shares Autonomy Lesson","url":"https://reddit.com/r/ClaudeCode/comments/1wms99l/we_used_claude_code_to_create_a_mobile_game_about","sourceName":"/u/Ferb_Solos","author":"/u/Ferb_Solos","publishedAt":"2026-09-21T22:56:17Z"}]},{"id":"a0e300f8-2084-4b6f-999e-262c4a862b32","title":"A Claude Code plugin checks a public skills registry as you work, then asks before installing","dek":"Metaskill runs automatically at the start of every Claude Code session, a small script called a hook, and only installs a matching skill after the developer says yes.","bodyMd":"A new Claude Code plugin called Metaskill checks a public skills registry while you work and asks before it installs anything, so you stop reinventing solutions that already exist as ready-made skills. It runs as a hook, a small script that fires on its own at a set point in Claude Code's workflow rather than something you have to trigger yourself, so the check happens without extra effort on your part.\n\nHere's how it works, based on the build's own description. A SessionStart hook, meaning the check kicks off automatically the moment a session begins, tells Claude to run `metaskill find \"<2-4 words>\"` before starting any task. That command searches a local index of skills pulled from skills.sh, a public skills registry, ranks the closest matches, and runs a trust check on the top five before printing a question with the install and decline commands. A hit against the local index takes about 250 milliseconds; it only reaches out over the network on a miss, and that's capped at 4 seconds. No skill installs until the developer answers yes.\n\nThe registry itself gets rebuilt nightly: a scheduled job sweeps skills.sh, collapses duplicate forks and aggregator copies down to one listing (keeping whichever has the real install count), and scans every repo for risky patterns, including hook directories, `.mcp.json` files, `curl`, `wget`, `eval(`, `process.env`, and `os.environ`. Anything that trips those checks gets denied, with no override flag to bypass it. The hook itself never executes skill code; it only downloads and greps for those patterns, and prompts stay local, sent to the registry only on the rare network miss.\n\nExamples from the build's own log show the range of matches: a request to draft a Reddit post surfaced a marketing-skills package, \"export the report to xlsx with formulas\" pulled up an xlsx skill with 957 installs and a clean scan, and a Postgres schema task matched a database-skills package. When a suggested skill had no security scan attached, the log shows the developer declining it, after which Metaskill stopped offering that particular skill for 30 days.\n\nThis is aimed at developers who find themselves solving the same kind of problem, like exporting spreadsheets or writing Playwright tests, over and over inside Claude Code without realizing a packaged skill already exists for it. Every install gets pinned in a lock file, and `metaskill init --uninstall` removes it. Auto-install is off by default, so the confirmation step described above is the only path a skill takes onto disk.\n\nTo try it: `/plugin marketplace add xdm/metaskill`, then `/plugin install metaskill@metaskill`.","status":"published","storyType":"tip","category":"Ecosystem","clusterKey":"metaskill-hook-auto-suggests-skills","slug":"a-claude-code-plugin-checks-a-public-skills-registry-as-you-work-then-as-a0e300","url":"https://claudecodereview.ai/a/a-claude-code-plugin-checks-a-public-skills-registry-as-you-work-then-as-a0e300/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/a0e300f8-2084-4b6f-999e-262c4a862b32","role":"item","position":6,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-claude-code-plugin-checks-a-public-skills-registry-as-you-work-then-as-a0e300/3359773bf393850f-fc271c6a74a9aef8/web_hero.webp","imageAlt":"A hook symbol hanging above five ranked boxes, with a line leading to a choice of two paths.","createdAt":"2026-09-24T23:03:29.923Z","updatedAt":"2026-09-24T23:30:21.212Z","sources":[{"role":"primary","title":"Made a hook so Claude Code finds skills for me and asks before installing","url":"https://reddit.com/r/ClaudeCode/comments/1wp1yww/made_a_hook_so_claude_code_finds_skills_for_me","sourceName":"/u/xdmaa","author":"/u/xdmaa","publishedAt":"2026-09-24T13:41:36Z"}]},{"id":"d29575c2-25ca-48a7-ac67-2798595b7903","title":"A free plugin hides real API keys from Claude Code, then swaps them back to run commands","dek":"osm, a free open-source plugin called opensecretmask, replaces secrets with same-shaped fakes like sk-ant-bpc23 instead of blanking them out, a trick its maker says keeps Claude Code's reasoning intact.","bodyMd":"Developer pratikbin, who builds the AI sandbox service createos.sh, released osm (opensecretmask), a free, MIT-licensed Claude Code plugin that keeps API keys and other secrets out of the model's view. Before Claude reads a file or command output containing a secret, osm swaps the real value for a fake with the same shape: same vendor prefix, same length, same character types. When Claude uses that fake in an actual tool call, osm restores the real value behind the scenes, so the command still runs.\n\nThe problem it's solving is mundane and hard to avoid. Coding agents read everything in a project:.env files, configs, kubectl output, CI logs. Whatever they read gets sent to the LLM provider, and pratikbin's post notes a secret can end up in third-party logs or training data without anyone deciding to send it. The agent just ran `cat` on a file that happened to contain a key.\n\nosm's design is built around a specific failure the author says came first: plain redaction. Swapping a key for `[REDACTED]` made Claude worse at its job, the post argues, because the model stopped treating the value as a key and started treating it as a gap, then asked the user for the key, skipped the step, or suggested fixing the file. osm's fakes keep the model's plan intact instead: `sk-ant-api03-Kv8T…` becomes `sk-ant-bpc23-VpON…`, still recognizable as an Anthropic key in shape but not in value. A two-way vault tracks which fake maps to which real secret, and detection runs against 146 patterns across six groups backed by an entropy check, reading.env files automatically when a session starts. If a masking hook itself throws an error, Claude Code skips it and the real value passes through unmasked, so pratikbin built every osm hook to fail closed rather than let that happen.\n\nosm didn't start as a plugin. The post says it began in May 2026 as a Go proxy that intercepted encrypted network traffic using its own certificate authority, rewriting LLM request bodies and storing mappings in an encrypted SQLite file. That worked, but it asked a lot of every laptop: a trusted local root CA, a background daemon, a passphrase to type. When Claude Code added plugin hooks on September 15, 2026, pratikbin deleted the proxy that same day and rebuilt osm to mask secrets at the point where Claude reads tool output and issues tool calls, rather than at the network layer. All 138 of the proxy's original detection rules carried over, and the rewrite reportedly surfaced eight more leak paths that hadn't been covered, including prompts arriving through CLAUDE.md files, memory, skill bodies, and remote deliveries, not just direct user prompts.\n\nTo check the masking actually holds, pratikbin describes a test setup that points the `ANTHROPIC_BASE_URL` environment variable at a recorder and checks three things: that a real test key never appears in a request body, that a same-shaped fake does appear, and that a run with osm disabled does leak the key. That last control matters, the post argues, because without it a test where Claude simply never reads the file would pass for the wrong reason. All of these runs happen inside disposable CreateOS sandboxes so test keys never touch a developer's own machine.\n\nThe createos.sh team already runs osm daily and plans to make it a default part of CreateOS sandboxes, letting agents work with real credentials without a real key ever reaching a model provider. Anyone can install it now with `claude plugin marketplace add pratikbin/opensecretmask` and `claude plugin install osm@opensecretmask`; a `/osm-secrets` command lists each real value alongside the fake standing in for it. The source is on GitHub at pratikbin/opensecretmask under the MIT license.","status":"published","storyType":"news","category":"Ecosystem","clusterKey":"osm-claude-code-secret-masking-plugin","slug":"a-claude-code-plugin-hides-your-api-keys-from-the-ai-before-it-ever-read-d29575","url":"https://claudecodereview.ai/a/a-claude-code-plugin-hides-your-api-keys-from-the-ai-before-it-ever-read-d29575/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/d29575c2-25ca-48a7-ac67-2798595b7903","role":"item","position":7,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/a-claude-code-plugin-hides-your-api-keys-from-the-ai-before-it-ever-read-d29575/fc4c7b4b6b9e01fe-e78913ec4b785a1c/web_hero.webp","imageAlt":"A diagram shows two paths of rectangular blocks merging into one. One path holds original blocks and the other holds fakes, with the fakes continuing forward after a single block is moved aside.","createdAt":"2026-09-24T18:40:18.582Z","updatedAt":"2026-09-24T20:30:25.959Z","sources":[{"role":"primary","title":"osm: keep API keys out of Claude Code without breaking the agent","url":"https://dev.to/pratikbin/osm-keep-api-keys-out-of-claude-code-without-breaking-the-agent-1d39","sourceName":"pratikbin","author":"pratikbin","publishedAt":"2026-09-24T16:03:03Z"}]},{"id":"3ef718c2-af8b-45f7-828d-89687d730460","title":"Claude Code and Codex look for a skills folder, not a skills file","dek":"A technical explainer on the folder layout both agents expect shows that a single skill file can pass every check in an installer's own logs while never actually being read by Claude Code or Codex.","bodyMd":"Claude Code and OpenAI's Codex don't load a skill because a markdown file with the right name sits somewhere in a repo. A technical explainer posted to Dev.to lays out how both agents actually find skills, and how a real installer tool got it wrong before fixing itself.\n\nA \"skill\" here is a reusable set of instructions an agent loads only when it's needed, rather than stuffing everything into context on every request. Both Claude Code and Codex look for a skill by walking the project's folders for a directory that contains a file named SKILL.md. A single.md file dropped into a skills folder, however well it's written, simply doesn't count as a skill to either agent.\n\nFor Claude Code, the layout is `.claude/skills/<skill-name>/SKILL.md`. Two details trip people up: the command name Claude Code shows comes from that directory's name, not from the `name` field inside the file's frontmatter (the `---`-delimited metadata block at the top of the file), which is just a display label. And frontmatter only gets parsed if the opening `---` is the literal first line of the file; a stray comment or blank line above it and Claude Code won't treat it as frontmatter at all.\n\nCodex splits the job two ways. A root `AGENTS.md` file carries guidance the agent always loads, the same vendor-neutral file that Devin Desktop and JetBrains Junie also read. Detailed, on-demand skills live at `.agents/skills/<skill-name>/SKILL.md`, and Codex finds them by walking up from the current directory to the repository root, the same directory-and-SKILL.md contract Claude Code uses.\n\nThis matters most if you're building tooling that generates or installs skills rather than writing them by hand. The explainer traces the problem to an installer package called Bimaaji, built by a company named Waaseyaa. An earlier version wrote Claude skills as flat `.claude/skills/<name>.md` files; Claude Code never loaded a single one, but the installer's own \"files written\" counter reported success anyway, because it checked that files existed rather than whether the agent's discovery logic would ever find them. A separate version folded every skill's content directly into Codex's `AGENTS.md`, which worked but threw away on-demand loading, since the whole thing loaded on every request instead of just the skill in play.\n\nThe fix was to stop maintaining separate renderers for each client and build one shared renderer that both a Claude transformer and a Codex transformer extend, each supplying only its client id and its guidance file's title line. A per-client lookup handles the differences, including whether frontmatter must sit at the very start of the file. Each generated skill file also gets an HTML-comment footer carrying a sha256 hash of the whole skill inventory it came from, so you can verify Claude's and Codex's output was regenerated from the same source rather than assuming it.\n\nWorth noting: the explainer says the Codex layout only went into the installer once it was confirmed against OpenAI's own documentation, not an issue thread's description, which is a reasonable bar for anyone copying this layout into their own tooling.","status":"published","storyType":"tip","category":"Ecosystem","clusterKey":"claude-code-skills-are-directories-not-files","slug":"claude-code-and-codex-look-for-a-skills-folder-not-a-skills-file-3ef718","url":"https://claudecodereview.ai/a/claude-code-and-codex-look-for-a-skills-folder-not-a-skills-file-3ef718/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/3ef718c2-af8b-45f7-828d-89687d730460","role":"item","position":8,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/claude-code-and-codex-look-for-a-skills-folder-not-a-skills-file-3ef718/f852f6af51e037c2-af6ed76506456d57/web_hero.webp","imageAlt":"A lone file is separated from a branching folder tree structure that shows the correct nested path for agent skill files.","createdAt":"2026-09-25T00:11:08.000Z","updatedAt":"2026-09-25T00:30:32.549Z","sources":[{"role":"primary","title":"Claude Code and Codex skills are directories, not files","url":"https://dev.to/jonesrussell/claude-code-and-codex-skills-are-directories-not-files-od2","sourceName":"Russell Jones","author":"Russell Jones","publishedAt":"2026-09-24T11:53:57Z"}]},{"id":"41f0da96-71f6-4618-a5e0-74fb1683af91","title":"Two projects sync Claude Code's rules and skills with other AI coding tools","dek":"Both link one shared folder into each tool's settings so editing a rule or automation once updates Claude Code, OpenCode, and Antigravity at the same time.","bodyMd":"Running more than one AI coding agent means keeping the same ground rules everywhere, and doing that by hand gets old fast. This week two developers separately published open-source fixes for the same headache: syncing global instructions, task shortcuts, and automation scripts across Claude Code, OpenCode, and Antigravity without copying files by hand every time something changes.\n\nBoth rely on a **symlink**, a filesystem shortcut that makes one real folder or file appear to live in several places at once. Edit the original and every linked location sees the change instantly, no copying required. The shared content in question includes **skills**, which are packaged instructions that teach the assistant how to do a specific task, like a recipe it can follow on request, and **hooks**, scripts that automatically run when certain actions happen in the coding tool, such as before or after a task completes.\n\nThe first project, a repo called agents-hub posted to r/OpenSourceAI, bundles global rules, more than 40 skills, hooks, subagents, and slash commands into one folder and symlinks it into Claude Code, OpenCode, and Antigravity. Edit a single file and all three tools pick up the change on their next session. Its README ships copy-paste setup commands for each tool, and the whole thing is MIT-licensed.\n\nA separate write-up on Dev.to, describing a setup it calls the Multi-Agent Symlink Kernel, goes further into why naive approaches fail and how to fix them on Windows. Its author first tried plain file-level hard links, which broke silently: editors like VS Code save by writing a new temporary file, deleting the original, and renaming the temp file into place, which severs a hard link's connection to the original file on disk. The fix was to link at the folder level instead, using Windows' `mklink /J` (Directory Junctions), which reportedly kept 30 custom skills in sync across six agent tools with no added delay. On Mac or Linux, the write-up notes, the equivalent would be a standard `ln -s` symbolic link rather than the Windows-only junction command.\n\nThe same write-up caps each tool's root instruction file (CLAUDE.md, AGENTS.md, and similar) at 85 lines, pointing to longer reference files that get read on demand instead of stuffing everything into the file the assistant loads on every turn. Its reasoning: long instruction files can get summarized away once a session's context fills up, and a smaller entry file is less likely to lose its rules mid-session. A PowerShell script it includes hashes each rule file with SHA-256 and flags any that have drifted from the shared source before redeploying them.\n\nBoth projects target the same pain point: without a shared source, the same rule or skill can end up in slightly different states in each tool's separate config folder, and the write-up says resolving that kind of drift had been eating 30 to 40 percent of its author's debugging time. Neither approach is conceptually new (symlinked dotfiles have existed for years), and one has a real limit worth flagging: OpenCode's own configuration file reportedly can't be safely symlinked, since it corrupted the link whenever the write-up's author switched model providers, so that one file still needs a manual deploy step rather than a live link.","status":"published","storyType":"tip","category":"Workflow","clusterKey":"symlink-config-sharing-across-agent-harnesses","slug":"two-projects-sync-claude-code-s-rules-and-skills-with-other-ai-coding-to-41f0da","url":"https://claudecodereview.ai/a/two-projects-sync-claude-code-s-rules-and-skills-with-other-ai-coding-to-41f0da/","relayUrl":"https://relaygrid.com/publications/pivot-claude-code/stories/41f0da96-71f6-4618-a5e0-74fb1683af91","role":"item","position":9,"imageStatus":"ready","imageUrl":"https://media.pivotnews.ai/brands/claude-code-review/articles/two-projects-sync-claude-code-s-rules-and-skills-with-other-ai-coding-to-41f0da/1fd28d5917522f70-7f627569a9620f69/web_hero.webp","imageAlt":"A diagram showing one central folder with 40 skill blocks connected by three lines to three separate hexagonal prisms, each marked with 85 line-limit indicators.","createdAt":"2026-09-24T22:33:24.759Z","updatedAt":"2026-09-24T23:00:12.290Z","sources":[{"role":"primary","title":"The Multi-Agent Symlink Kernel: Orchestrating Autonomous Agents Without Context Drift","url":"https://dev.to/amansuryavanshi-ai/the-multi-agent-symlink-kernel-orchestrating-autonomous-agents-without-context-drift-7m","sourceName":"Aman Suryavanshi","author":"Aman Suryavanshi","publishedAt":"2026-09-24T13:56:23Z"},{"role":"supporting","title":"Syncing global rules, hooks, and 40+ skills across three different AI coding harnesses with one repo","url":"https://reddit.com/r/OpenSourceAI/comments/1wp2g35/syncing_global_rules_hooks_and_40_skills_across","sourceName":"/u/OlaVerde","author":"/u/OlaVerde","publishedAt":"2026-09-24T14:00:43Z"}]}],"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"}]}