Function Hooks become Claude Mods. Anthropic renamed the feature, shipped it
behind an early-access flag in Claude Code >= 2.1.259, and published the source of
its three built-in mods plus the full TypeScript declarations
(anthropics/claude-code#91870,
mods/). This release
aligns the CLI, the catalog and the site with what actually ships.
Install
npx claude-code-templates@latest --mod security/secret-redactor--mod downloads the whole plugin directory (like a skill) and writes it verbatim to
.claude/skills/<name>/, which Claude Code auto-loads as <name>@skills-dir:
.claude/skills/secret-redactor/
├── .claude-plugin/plugin.json # name, description, userConfig, author, license
├── hooks/
│ ├── hooks.json # { "modules": ["./secret-redactor.ts"] }
│ └── secret-redactor.ts
└── README.md
Then run Claude Code with the flag:
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude
# or, for one session with hot reload:
claude --plugin-dir .claude/skills/secret-redactor--function-hook still works as a hidden alias of --mod.
What changed
CLI
- New
--mod <category/name>flag (comma-separated values supported). Recursive
download of the plugin directory via the GitHub API, verbatim write, and validation
ofplugin.json,hooks/hooks.jsonand that every module listed inmodulescame
down. - Post-install output explains the flag,
claude plugin validate/claude plugin test, and how to set options viapluginConfigs[name].optionsin user settings. - Download tracking type is now
mod.
Components: 24 mods, all typechecked against Anthropic's real API
- Every mod is now a complete plugin in Anthropic's layout
(cli-tool/components/mods/{category}/{name}/). - The 10 existing modules were rewritten against the real
$API and runtime-tested
on Claude Code 2.1.272:$.fs.read,$.http.fetch→{status, ok, text},
$.ui.ask,{ deny }/{ result }+context,Box/TextUI primitives,
{ refuse }onplugin.register. - Options must be declared in
plugin.jsonuserConfigand are read from user or
managed settings (never project settings). Declared and documented for every mod. cli-tool/components/mods/types/claude-code.d.ts(as/plugin-typeswrites it)
plus atsconfig.json; CI runstscon every mod (mods-typecheck.yml).
14 new game mods (games/)
cc-arcadevendored as-is (MIT, Seza Akgün), with a fix for$.clock.now()
returning a Promise in the current API.- One mod per cc-arcade game with its own slash command:
/tetris,/snake,
/2048,/minesweeper,/flappy,/pong,/invaders,/typing,/doom,/pet. - Three originals written for aitmpl:
pacman(scatter/chase ghost AI, power
pellets, tunnel),tool-defense(a tower defense where every tool call Claude
makes spawns an enemy shaped by the tool) anddiff-invaders(every Edit/Write's
added lines become the alien formation, drawn with the code's own characters).
Site
/function-hooks→ /mods (Beta). Old URLs
redirect. A mod's page shows the README and the full file tree; "Send to repo"
writes the entire plugin.
The catalog
| Mod | What it does |
|---|---|
security/block-destructive-commands
| Denies rm -rf /, force push, hard reset, destructive SQL
|
security/secret-redactor
| Redacts keys, tokens, JWTs and connection strings in tool output |
security/protected-paths-guard
| Denies edits to .env, lockfiles, CI workflows, private keys |
security/large-edit-confirmation
| Asks before editing a file over N lines (fail-closed) |
productivity/npm-to-pnpm-rewriter
| Rewrites npm/npx to pnpm, yarn or bun |
productivity/webfetch-cache
| Serves repeated WebFetch calls from a session cache |
observability/universal-audit-log
| JSON line per event, including other plugins' $ calls and denials
|
ui/tool-timing-badge
| Times every tool call, draws a badge on the ToolUse row |
integrations/websearch-to-exa
| Replaces built-in WebSearch with Exa |
enterprise/admin-capability-lockdown
| Withholds http/process from $, allowlists plugins
|
games/* (14)
| Arcade games and two tool-reactive games rendered above the prompt |
Early access — read this first
Mods are behind CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 and the $ API may change
between Claude Code releases. When Anthropic bumps it, we regenerate the d.ts with
/plugin-types and re-run the typecheck. Options only take effect from user/managed
settings, not from .claude/settings.json in the project.
Also in this release
- New command:
regression-triage(#904) - New skill:
eval-genius(#880); synced new skills fromanthropics/skills(#898) - Enhanced agents:
competitive-analyst,web3-integration-specialist,
smart-contract-auditor,smart-contract-specialist,content-marketer,
mlops-engineer,business-analyst,hackathon-ai-strategist discernment-nudge: narrowed the code-execution exemption (#900)- CI: contributor PRs that touch generated catalog files are now blocked with revert
instructions (#899) - Dashboard: Featured section hidden on the homepage (#902), Beta label on Mods (#912)
Full Changelog: v1.29.5...v1.29.6