This file is for your agent. It is written as instructions for Claude Code, which is why it is in English. You don't need to read it. Give it to Claude Code and say which mods you want, for example:
Read https://gist.githubusercontent.com/CodeCave0000/89fa887e69f475b2245777d06596e6f0/raw/claude-mods-codecave.md and install token-weather, blast-radius, replay-theater and cache-tax.
From the Code Cave video on Claude Code mods · https://www.youtube.com/@codecave0000
You 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.
Which mods. Install only the mods the user named. If they said "all" or named none, list the seven with one line
each and ask which ones they want. The four the video keeps for everyday use: token-weather (the forecast above the
prompt), blast-radius (the brake before a delete), replay-theater (the replay at the end of a turn) and cache-tax (the
keepwarm for breaks).
2.
Version. Mods are on by default from Claude Code 2.1.287 in the terminal, and from 2.1.286 in the Desktop app.
Runclaude --version (in the Desktop app's Code tab:/status , the Claude Code row). If the version is lower, tell
the user and ask before you runclaude update .
3.
Validate before installing. A mod runs inside Claude Code with the user's own permissions: it can read and write
files, run processes, reach the network and see every message the user types. For each mod, get its source (the clone
or the marketplace below), runclaude plugin validate <folder> , and show the user the two lines that matter:
hooks:the events the mod sits oncalls:what it asks Claude Code to do (for example$.fs.read,$.process.run,$.http,$.model.complete) Say in plain words what that means, and wait for the user's go-ahead. The footprints listed below come fromclaude plugin validateon 2026-10-08 (Claude Code 2.1.294). If what you see differs, point out the difference before installing.
Install with the exact commands listed for that mod, with--scope user where it is listed. A mod installs like any
plugin, and most take two lines:claude plugin marketplace add <GitHub repo> adds the source, thenclaude plugin install <mod>@<marketplace> installs the mod. Anthropic's three samples (token-weather, blast-radius,
replay-theater) come from one clone of their repository instead: clone it once, add itsclaude-code/mods folder as a
local marketplace, and install each sample with one line. Do not install these mods from any other source. If the user
asks for a mod that is not in this file, validate it the same way, tell them where it comes from, and install it only
if it comes from a source they trust.
5.
The band above the prompt. token-weather, replay-theater, cache-tax and reflect-mod all draw in the band above the
prompt. Anthropic's samples note that the band is shared: another mod that draws there can take it from them. If the
user installs more than one of these, tell them, and if one of them stops showing, that is the first thing to check.
blast-radius draws its own pane in a terminal about 144 columns wide or more; in a narrower terminal it falls back to the
band, and if another mod holds the band its Proceed and Cancel buttons may not show (the command is then refused after
10 minutes). Suggest a wide terminal to anyone who relies on blast-radius.
6.
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 as1 mod active · first-mod .
7.
Report. Say what you installed, how to use each one (the commands and keys below), and how to turn it off (end of
this file).
Some mod READMEs were written during the early access and say to set CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1. Skip that step:
from Claude Code 2.1.287 mods are on by default, and Claude Code ignores that variable.
- Claude Code 2.1.287 or later in the terminal; the Desktop app from 2.1.286.
- 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.
- Docs: https://code.claude.com/docs/en/plugins/mods/overview
- Anthropic's announcement: https://claude.com/blog/claude-code-mods
Anthropic's own sample mod. The model remembers nothing between messages: every turn, Claude Code sends it the whole
conversation again, and that is the context window. When the window fills up, the conversation is compacted into a summary
and details are lost. token-weather shows how full the window is, as weather, in a band above the prompt: ☀ Clear under
25%, ☁ Cloudy from 25%, ☂ Showers from 50%, ☇ Storm from 75%, and ↯ Compact soon from 90%. Beside it: the percentage, the
tokens used out of the window, a chart of the last 12 turns, and how much the last turn added (▲ +N last turn). It
reads only the session's usage figures ($.session.usage, a free call) and draws them. It updates once per turn.
- Footprint:
hooks: session.start, turn.complete, ui.render{AbovePrompt}·calls: $.session.usage, $.ui.invalidate, $.ui.resolve - Source: https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/token-weather
Clone 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 if the clone is moved or deleted.
git clone https://github.com/anthropics/claude-code-playground.git
cd claude-code-playground/claude-code/mods
claude plugin marketplace add ./
claude plugin install token-weather@claude-code-playground-mods --scope user
To try it for one session without installing: claude --plugin-dir ./token-weather (from the same folder).
Replaces API keys, email addresses and public IP addresses with a placeholder ([REDACTED-SECRET-…], the same placeholder
for the same value) before they reach the model or the transcript, and shows a short notice that a value was hidden. The
real 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
(a command, a file write) the placeholder is swapped back for the real value; on the way out, the tool's result is hidden
again, so a cat .env or a Read of a config file comes back with the placeholder too. Keys are recognised by their
shape (sk-ant-, ghp_, AKIA, JWTs and more) and by entropy. Free and open source (MIT).
Its README still asks for CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1, from the early access: skip that step.
- Footprint:
hooks: prompt.submit, tool.call, prompt.context·calls: $.ui.notice, $.ui.toast - Source: https://github.com/ray-amjad/awesome-claude-code-function-hooks/tree/main/plugins/secret-redactor
claude plugin marketplace add ray-amjad/awesome-claude-code-function-hooks
claude plugin install secret-redactor@awesome-claude-code-function-hooks
Anthropic's own sample mod. It catches rm -rf (also rm -r and rm -f), git reset --hard, git clean,
git push --force and database migrations (manage.py migrate, db:migrate, alembic upgrade, prisma migrate) just
before they run, and shows what would change (how many files, what size, their names) with two buttons: Proceed (1) and
Cancel (2). Cancel has the focus, so Enter refuses. After Cancel the model is told the command was cancelled, and it
reports that nothing changed. It reads the command's text: it is one more layer before Claude Code's permission prompt, not
a replacement for it. For its side pane the terminal should be about 144 columns wide (see step 5).
- 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 - Source: https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/blast-radius
claude plugin install blast-radius@claude-code-playground-mods --scope user
It needs the local marketplace from mod 1: run that mod's first three commands first if they have not run.
A file tree on the right of the terminal. In the terminal it needs /tui fullscreen and a terminal at least 110 columns
wide. Files shimmer purple while Claude reads them, orange while it writes them and green when they are committed; every
changed file shows +N -N (lines added and removed); the branch and the git status sit at the top, and a commit shows at
the bottom of the pane. It searches the whole tree, including folders not opened yet, sends a selected file to the model
as context, and shows sizes. It reads the folder and git, and runs git when asked to.
- 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 … - Source: https://github.com/data-goblin/claude-code-filetree
claude plugin marketplace add data-goblin/claude-code-filetree
claude plugin install filetree@claude-code-filetree
To use it inside a session: /tui fullscreen, then /filetree.
Anthropic's own sample mod. After a turn that edited files, a Replay button waits above the prompt
(▶ Replay: 8 edits (press r) [ Replay ]). r (or /replay) opens a pane that steps through every edit of that turn, in
the order Claude made them: the file, the deleted lines in red, the added lines in green (n next, p previous,
c close). It only records the Edit, Write and MultiEdit calls and reads the files to draw the diffs; it never blocks,
changes or delays an edit.
- 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 - Source: https://github.com/anthropics/claude-code-playground/tree/main/claude-code/mods/replay-theater
claude plugin install replay-theater@claude-code-playground-mods --scope user
It needs the local marketplace from mod 1.
Part of the claude-reflect project (about 1,700 stars on GitHub). Install reflect-mod, not claude-reflect: the same
marketplace lists both. Every short message from the user (up to 500 characters, not a slash command, not an
acknowledgement like "ok") is checked by one small model call (Haiku). When it spots a correction worth keeping, for
example "no, in this project we use pnpm", a band above the prompt shows the rule it wrote and offers to save it in one
click: to ./CLAUDE.md (this project) or to ~/.claude/CLAUDE.md (every project), or to edit it first. The rule also
applies in the current session at once, and CLAUDE.md loads it in every session after. remember: <rule> skips the check
and goes straight to the band. Each check is a model call on the user's own plan: tell the user before installing.
- Footprint:
hooks: prompt.submit, ui.render{AbovePrompt} …·calls: $.model.complete, $.fs.read/write (CLAUDE.md), $.ui …(runclaude plugin validateon the repo'smod/folder for the full list) - Source: https://github.com/BayramAnnakov/claude-reflect (the
mod/folder)
claude plugin marketplace add bayramannakov/claude-reflect
claude plugin install reflect-mod@claude-reflect-marketplace
The 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.
Before a break, /keepwarm 90m keeps the cache warm for a window the user picks (/keepwarm alone arms six hours,
/keepwarm off stops). After 50 minutes of quiet it sends the model one tiny ping that asks for nothing, so the hour starts
again, and it stops by itself when the window ends. While a window is armed, a row above the prompt shows warm or cold, the
window and the next ping. Pings cost tokens, so suggest a window the user will really come back in. /cache-tax shows the
status.
The 50-minute schedule needs a one-hour cache. A subscription has it by default. With an API key, usage credits or a cloud
provider the cache lasts five minutes unless the promptCacheTtl setting is "1h": ask which the user has, and if they
need it, offer to set it.
- 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 - Source: https://github.com/karanb192/cache-tax
claude plugin marketplace add karanb192/claude-code-mods
claude plugin install cache-tax@claude-code-mods
After installing from the terminal, in a session that is already open: /reload-plugins.
Claude Code ships with a built-in skill for writing mods, plugin-authoring: use it. This is the request from the video:
Write 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.
In the video this produced a small folder, with hot re turned on for that session (2. Enable for this session),
so there was no need to restart Claude Code:
tool-call-counter/
├── .claude-plugin/plugin.json name, version, description
├── hooks/
│ ├── hooks.json points at the code: { "modules": ["./register.ts"] }
│ └── register.ts the functions
├── tests/counter.test.ts a test
└── types/ · tsconfig.json Claude Code's types for TypeScript
The register.ts it wrote:
import { atom, read, update } from 'claude-code'
import type { Register } from 'claude-code'
const count = atom({ plugin: 'tool-call-counter', key: 'count' } as const, 0)
export const register: Register = on => {
on('turn.start', async ($, e, next) => {
await update($, count, () => 0)
return next(e)
})
on('tool.call', async ($, e, next) => {
await update($, count, n => n + 1)
return next(e)
}).catch(($, e, next) => next(e))
on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
const n = await read($, count)
const base = e.props.message ?? e.props.word
return next({ ...e, props: { ...e.props, message: `${base} · tool calls: ${n}` } })
})
}
The function on tool.call counts, the function on the Spinner's render adds the count to it, and turn.start resets it
every turn. On the next turn the spinner reads tool calls: 3. A mod built this way lasts for that session only, so it can
be tried without committing to anything. If the user likes it, save it as a plugin and install it, or:
claude plugin validate ./tool-call-counter
claude --plugin-dir ./tool-call-counter # one session
- One mod:
/plugin→ Installed → disable or uninstall. - All mods, for one session:
claude --safe-mode(it also turns off the user's other customizations). - All mods, in every session:
"disableAllHooks": truein~/.claude/settings.json(the user's settings hooks and custom status line stop too). - To see what is loaded:
/pluginshows a small line,N mods active · ….
A community catalogue that scans GitHub, https://mods.aidojo.si, counted 2,692 mods a week after the launch: 1,373 of them write files or run processes, and 327 use the network. If the user asks for one of them, apply step 3 before anything else, and install only from a source the user trusts.
Code Cave · https://www.youtube.com/@codecave0000