{"slug": "claude-code-mods-an-install-guide-for-your-agent-code-cave", "title": "Claude Code mods: an install guide for your agent · Code Cave", "summary": "A developer published an agent-readable install guide for seven Claude Code mods, including Anthropic's sample plugins token-weather, blast-radius and replay-theater. The file instructs Claude Code to check its version (mods are on by default from 2.1.287 in the terminal and 2.1.286 in the Desktop app), validate each plugin's hooks and permission footprint with `claude plugin validate` before installing, and warn users that several mods share the band above the prompt. It also notes blast-radius needs a terminal roughly 144 columns wide or its Proceed and Cancel buttons may not render.", "body_md": "**This file is for your agent.** It is written as instructions for Claude Code, which is why it is in English.\nYou don't need to read it. Give it to Claude Code and say which mods you want, for example:\n\n`Read https://gist.githubusercontent.com/CodeCave0000/89fa887e69f475b2245777d06596e6f0/raw/claude-mods-codecave.md and install token-weather, blast-radius, replay-theater and cache-tax.`\n\nFrom the Code Cave video on Claude Code mods · [https://www.youtube.com/@codecave0000](https://www.youtube.com/@codecave0000)\n\nYou are Claude Code. The user gave you this file so you can install one or more of the seven mods from the video. Follow these steps.\n\n1. \n**Which mods.** Install only the mods the user named. If they said \"all\" or named none, list the seven with one line\neach and ask which ones they want. The four the video keeps for everyday use: token-weather (the forecast above the\nprompt), blast-radius (the brake before a delete), replay-theater (the replay at the end of a turn) and cache-tax (the\nkeepwarm for breaks).\n2. \n**Version.** Mods are on by default from Claude Code 2.1.287 in the terminal, and from 2.1.286 in the Desktop app.\nRun`claude --version` (in the Desktop app's Code tab:`/status` , the Claude Code row). If the version is lower, tell\nthe user and ask before you run`claude update` .\n3. \n**Validate before installing.** A mod runs inside Claude Code with the user's own permissions: it can read and write\nfiles, run processes, reach the network and see every message the user types. For each mod, get its source (the clone\nor the marketplace below), run`claude plugin validate <folder>` , and show the user the two lines that matter:\n  - `hooks:` the events the mod sits on\n  - `calls:` what it asks Claude Code to do (for example`$.fs.read` ,`$.process.run` ,`$.http` ,`$.model.complete` )\n Say in plain words what that means, and wait for the user's go-ahead. The footprints listed below come from `claude plugin validate` on 2026-10-08 (Claude Code 2.1.294). If what you see differs, point out the difference before\ninstalling.\n4. \n**Install** with the exact commands listed for that mod, with`--scope user` where it is listed. A mod installs like any\nplugin, and most take two lines:`claude plugin marketplace add <GitHub repo>` adds the source, then`claude plugin install <mod>@<marketplace>` installs the mod. Anthropic's three samples (token-weather, blast-radius,\nreplay-theater) come from one clone of their repository instead: clone it once, add its`claude-code/mods` folder as a\nlocal marketplace, and install each sample with one line. Do not install these mods from any other source. If the user\nasks for a mod that is not in this file, validate it the same way, tell them where it comes from, and install it only\nif it comes from a source they trust.\n5. \n**The band above the prompt.** token-weather, replay-theater, cache-tax and reflect-mod all draw in the band above the\nprompt. Anthropic's samples note that the band is shared: another mod that draws there can take it from them. If the\nuser installs more than one of these, tell them, and if one of them stops showing, that is the first thing to check.\nblast-radius draws its own pane in a terminal about 144 columns wide or more; in a narrower terminal it falls back to the\nband, and if another mod holds the band its Proceed and Cancel buttons may not show (the command is then refused after\n10 minutes). Suggest a wide terminal to anyone who relies on blast-radius.\n6. \n**Load.** Mods load when a session starts. In a session that is already open, the user runs`/reload-plugins` .`/plugin` shows what loaded: a dim line under the tabs gives the count and the names, such as`1 mod active · first-mod` .\n7. \n**Report.** Say what you installed, how to use each one (the commands and keys below), and how to turn it off (end of\nthis file).\n\nSome mod READMEs were written during the early access and say to set `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1`. Skip that step:\nfrom Claude Code 2.1.287 mods are on by default, and Claude Code ignores that variable.\n\n- Claude Code 2.1.287 or later in the terminal; the Desktop app from 2.1.286.\n- Works in the terminal and in the Claude app's Code tab. In the VS Code extension the hooks run, but nothing a mod draws is shown.\n- Docs: [https://code.claude.com/docs/en/plugins/mods/overview](https://code.claude.com/docs/en/plugins/mods/overview)\n- Anthropic's announcement: [https://claude.com/blog/claude-code-mods](https://claude.com/blog/claude-code-mods)\n\nAnthropic's own sample mod. The model remembers nothing between messages: every turn, Claude Code sends it the whole\nconversation again, and that is the context window. When the window fills up, the conversation is compacted into a summary\nand details are lost. token-weather shows how full the window is, as weather, in a band above the prompt: ☀ Clear under\n25%, ☁ Cloudy from 25%, ☂ Showers from 50%, ☇ Storm from 75%, and ↯ Compact soon from 90%. Beside it: the percentage, the\ntokens used out of the window, a chart of the last 12 turns, and how much the last turn added (`▲ +N last turn`). It\nreads only the session's usage figures (`$.session.usage`, a free call) and draws them. It updates once per turn.\n\n- Footprint: `hooks: session.start, turn.complete, ui.render{AbovePrompt}` ·`calls: $.session.usage, $.ui.invalidate, $.ui.resolve`\n- Source: [https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/token-weather](https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/token-weather)\n\nClone the repo where the user keeps tools (ask if unsure) and leave it there: the marketplace is added from that folder, and the mods stop loading if the clone is moved or deleted.\n\n```\ngit clone https://github.com/anthropics/claude-code-playground.git\ncd claude-code-playground/claude-code/mods\nclaude plugin marketplace add ./\nclaude plugin install token-weather@claude-code-playground-mods --scope user\n```\n\nTo try it for one session without installing: `claude --plugin-dir ./token-weather` (from the same folder).\n\nReplaces API keys, email addresses and public IP addresses with a placeholder (`[REDACTED-SECRET-…]`, the same placeholder\nfor the same value) before they reach the model or the transcript, and shows a short notice that a value was hidden. The\nreal value is kept in the mod's memory, for this session only, and is never written to disk. On the way into a tool call\n(a command, a file write) the placeholder is swapped back for the real value; on the way out, the tool's result is hidden\nagain, so a `cat .env` or a `Read` of a config file comes back with the placeholder too. Keys are recognised by their\nshape (`sk-ant-`, `ghp_`, `AKIA`, JWTs and more) and by entropy. Free and open source (MIT).\n\nIts README still asks for `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1`, from the early access: skip that step.\n\n- Footprint: `hooks: prompt.submit, tool.call, prompt.context` ·`calls: $.ui.notice, $.ui.toast`\n- Source: [https://github.com/ray-amjad/awesome-claude-code-function-hooks/tree/main/plugins/secret-redactor](https://github.com/ray-amjad/awesome-claude-code-function-hooks/tree/main/plugins/secret-redactor)\n\n```\nclaude plugin marketplace add ray-amjad/awesome-claude-code-function-hooks\nclaude plugin install secret-redactor@awesome-claude-code-function-hooks\n```\n\nAnthropic's own sample mod. It catches `rm -rf` (also `rm -r` and `rm -f`), `git reset --hard`, `git clean`,\n`git push --force` and database migrations (`manage.py migrate`, `db:migrate`, `alembic upgrade`, `prisma migrate`) just\nbefore they run, and shows what would change (how many files, what size, their names) with two buttons: Proceed (1) and\nCancel (2). Cancel has the focus, so Enter refuses. After Cancel the model is told the command was cancelled, and it\nreports that nothing changed. It reads the command's text: it is one more layer before Claude Code's permission prompt, not\na replacement for it. For its side pane the terminal should be about 144 columns wide (see step 5).\n\n- Footprint: `hooks: tool.call{Bash}, ui.render{Pane}, ui.render{AbovePrompt}` ·`calls: $.clock.now, $.process.run, $.session.cwd, $.ui.close, $.ui.invalidate, $.ui.open, $.ui.resolve, $.ui.toast`\n- Source: [https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/blast-radius](https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/blast-radius)\n\n```\nclaude plugin install blast-radius@claude-code-playground-mods --scope user\n```\n\nIt needs the local marketplace from mod 1: run that mod's first three commands first if they have not run.\n\nA file tree on the right of the terminal. In the terminal it needs `/tui fullscreen` and a terminal at least 110 columns\nwide. Files shimmer purple while Claude reads them, orange while it writes them and green when they are committed; every\nchanged file shows `+N -N` (lines added and removed); the branch and the git status sit at the top, and a commit shows at\nthe bottom of the pane. It searches the whole tree, including folders not opened yet, sends a selected file to the model\nas context, and shows sizes. It reads the folder and git, and runs `git` when asked to.\n\n- Footprint: `hooks: session.start, command.run{filetree}, tool.call, ui.message, classic.FileChanged, prompt.submit, ui.render{Pane} …` ·`calls: $.fs.list, $.fs.read, $.fs.stat, $.process.run, $.session.cwd, $.state.get/set, $.ui.open/close/copy/toast …`\n- Source: [https://github.com/data-goblin/claude-code-filetree](https://github.com/data-goblin/claude-code-filetree)\n\n```\nclaude plugin marketplace add data-goblin/claude-code-filetree\nclaude plugin install filetree@claude-code-filetree\n```\n\nTo use it inside a session: `/tui fullscreen`, then `/filetree`.\n\nAnthropic's own sample mod. After a turn that edited files, a Replay button waits above the prompt\n(`▶ Replay: 8 edits (press r)  [ Replay ]`). `r` (or `/replay`) opens a pane that steps through every edit of that turn, in\nthe order Claude made them: the file, the deleted lines in red, the added lines in green (`n` next, `p` previous,\n`c` close). It only records the Edit, Write and MultiEdit calls and reads the files to draw the diffs; it never blocks,\nchanges or delays an edit.\n\n- Footprint: `hooks: session.start, command.run{replay}, tool.call, turn.start, turn.complete, ui.render{AbovePrompt}, ui.render{Pane}, ui.close` ·`calls: $.clock.sleep, $.command.register, $.fs.exists, $.fs.read, $.session.cwd, $.ui.close/invalidate/open/resolve`\n- Source: [https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/replay-theater](https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/replay-theater)\n\n```\nclaude plugin install replay-theater@claude-code-playground-mods --scope user\n```\n\nIt needs the local marketplace from mod 1.\n\nPart of the claude-reflect project (about 1,700 stars on GitHub). Install `reflect-mod`, not `claude-reflect`: the same\nmarketplace lists both. Every short message from the user (up to 500 characters, not a slash command, not an\nacknowledgement like \"ok\") is checked by one small model call (Haiku). When it spots a correction worth keeping, for\nexample \"no, in this project we use pnpm\", a band above the prompt shows the rule it wrote and offers to save it in one\nclick: to `./CLAUDE.md` (this project) or to `~/.claude/CLAUDE.md` (every project), or to edit it first. The rule also\napplies in the current session at once, and CLAUDE.md loads it in every session after. `remember: <rule>` skips the check\nand goes straight to the band. Each check is a model call on the user's own plan: tell the user before installing.\n\n- Footprint: `hooks: prompt.submit, ui.render{AbovePrompt} …` ·`calls: $.model.complete, $.fs.read/write (CLAUDE.md), $.ui …` (run`claude plugin validate` on the repo's`mod/` folder for the full list)\n- Source: [https://github.com/BayramAnnakov/claude-reflect](https://github.com/BayramAnnakov/claude-reflect) (the`mod/` folder)\n\n```\nclaude plugin marketplace add bayramannakov/claude-reflect\nclaude plugin install reflect-mod@claude-reflect-marketplace\n```\n\nThe only one of the seven that deals with money. Anthropic's prompt cache keeps the conversation for an hour (on a subscription), so inside that hour each turn reads only what is new, cheaply. After an hour of quiet the cache is gone, and the next message, even two words, has the model read the whole conversation again. cache-tax holds such a \"cold\" message once, in a session with 50,000 tokens of context or more, and shows its estimated price (an upper bound, the API equivalent; on a subscription it uses quota, not money). Sending it again goes ahead; the decision stays with the user. After a cold send it arms at least three hours of keepwarm by itself.\n\nBefore a break, `/keepwarm 90m` keeps the cache warm for a window the user picks (`/keepwarm` alone arms six hours,\n`/keepwarm off` stops). After 50 minutes of quiet it sends the model one tiny ping that asks for nothing, so the hour starts\nagain, and it stops by itself when the window ends. While a window is armed, a row above the prompt shows warm or cold, the\nwindow and the next ping. Pings cost tokens, so suggest a window the user will really come back in. `/cache-tax` shows the\nstatus.\n\nThe 50-minute schedule needs a one-hour cache. A subscription has it by default. With an API key, usage credits or a cloud\nprovider the cache lasts five minutes unless the `promptCacheTtl` setting is `\"1h\"`: ask which the user has, and if they\nneed it, offer to set it.\n\n- Footprint: `hooks: config.set{key=theme}, ui.render{component=AbovePrompt}, session.start, classic.SessionStart, command.run{command=keepwarm}, command.run{command=cache-tax}, prompt.submit, turn.step, turn.complete, session.compact` ·`calls: $.clock.after (via arm), $.clock.now, $.command.list, $.command.register, $.config.list, $.env.get, $.model.fork (via ping), $.session.id, $.session.model, $.session.usage, $.store.delete (via prune, startWindow, stop), $.store.get, $.store.set, $.ui.invalidate, $.ui.log, $.ui.resolve, $.ui.status`\n- Source: [https://github.com/karanb192/cache-tax](https://github.com/karanb192/cache-tax)\n\n```\nclaude plugin marketplace add karanb192/claude-code-mods\nclaude plugin install cache-tax@claude-code-mods\n```\n\nAfter installing from the terminal, in a session that is already open: `/reload-plugins`.\n\nClaude Code ships with a built-in skill for writing mods, `plugin-authoring`: use it. This is the request from the video:\n\n```\nWrite me a mod that counts the tool calls you make and shows the count beside the spinner while you work, like 'Thinking · tool calls: 3'. Keep it small, and hot reload it in this session.\n```\n\nIn the video this produced a small folder, with hot reloading turned on for that session (`2. Enable for this session`),\nso there was no need to restart Claude Code:\n\n```\ntool-call-counter/\n├── .claude-plugin/plugin.json     name, version, description\n├── hooks/\n│   ├── hooks.json                 points at the code: { \"modules\": [\"./register.ts\"] }\n│   └── register.ts                the functions\n├── tests/counter.test.ts          a test\n└── types/ · tsconfig.json         Claude Code's types for TypeScript\n```\n\nThe `register.ts` it wrote:\n\n``` python\nimport { atom, read, update } from 'claude-code'\nimport type { Register } from 'claude-code'\n\nconst count = atom({ plugin: 'tool-call-counter', key: 'count' } as const, 0)\n\nexport const register: Register = on => {\n  on('turn.start', async ($, e, next) => {\n    await update($, count, () => 0)\n    return next(e)\n  })\n\n  on('tool.call', async ($, e, next) => {\n    await update($, count, n => n + 1)\n    return next(e)\n  }).catch(($, e, next) => next(e))\n\n  on('ui.render', { component: 'Spinner' }, async ($, e, next) => {\n    const n = await read($, count)\n    const base = e.props.message ?? e.props.word\n    return next({ ...e, props: { ...e.props, message: `${base} · tool calls: ${n}` } })\n  })\n}\n```\n\nThe function on `tool.call` counts, the function on the Spinner's render adds the count to it, and `turn.start` resets it\nevery turn. On the next turn the spinner reads `tool calls: 3`. A mod built this way lasts for that session only, so it can\nbe tried without committing to anything. If the user likes it, save it as a plugin and install it, or:\n\n```\nclaude plugin validate ./tool-call-counter\nclaude --plugin-dir ./tool-call-counter          # one session\n```\n\n- One mod: `/plugin` → Installed → disable or uninstall.\n- All mods, for one session: `claude --safe-mode` (it also turns off the user's other customizations).\n- All mods, in every session: `\"disableAllHooks\": true` in`~/.claude/settings.json` (the user's settings hooks and custom\nstatus line stop too).\n- To see what is loaded: `/plugin` shows a small line,`N mods active · …` .\n\nA community catalogue that scans GitHub, [https://mods.aidojo.si](https://mods.aidojo.si), counted 2,692 mods a week after the launch: 1,373 of\nthem write files or run processes, and 327 use the network. If the user asks for one of them, apply step 3 before anything\nelse, and install only from a source the user trusts.\n\nCode Cave · [https://www.youtube.com/@codecave0000](https://www.youtube.com/@codecave0000)", "url": "https://wpnews.pro/news/claude-code-mods-an-install-guide-for-your-agent-code-cave", "canonical_source": "https://gist.github.com/CodeCave0000/89fa887e69f475b2245777d06596e6f0", "published_at": "2026-10-08 23:43:41+00:00", "updated_at": "2026-10-18 06:14:20.107498+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Claude Code", "Anthropic", "Code Cave", "token-weather", "blast-radius", "replay-theater", "cache-tax", "reflect-mod"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/claude-code-mods-an-install-guide-for-your-agent-code-cave", "markdown": "https://wpnews.pro/news/claude-code-mods-an-install-guide-for-your-agent-code-cave.md", "text": "https://wpnews.pro/news/claude-code-mods-an-install-guide-for-your-agent-code-cave.txt", "jsonld": "https://wpnews.pro/news/claude-code-mods-an-install-guide-for-your-agent-code-cave.jsonld"}}