{"slug": "installs-claude-code-mods-with-one-command", "title": "Installs Claude Code Mods with one command", "summary": "A catalog of 38 Claude Code \"Mods\" has launched on aitmpl.com, letting developers install function-hook plugins with a single npx command instead of packaging and publishing them through a plugin marketplace. Each Mod runs in a sandboxed module that receives the engine object, event and next continuation, allowing it to inspect, rewrite or deny tool calls, with access to UI, HTTP, filesystem and other capabilities routed through the engine. The catalog spans security, workflow, UI, caching, integration and game categories, and requires the CLAUDE_CODE_ENABLE_FUNCTION_HOOKS flag.", "body_md": "Mods let you hook into Claude Code while it works: block a command, rewrite a tool call, redact a secret from a result, or draw a live pane above the prompt. Until recently that meant writing the module yourself, packaging it as a plugin and publishing a marketplace. The Mods catalog on [aitmpl.com](https://www.aitmpl.com) removes those steps: 38 mods, one command each.\n\nA Mod is a Claude Code plugin whose behavior lives in a function-hooks module. A shell hook reacts to an event after the fact. A function hook wraps the event: your function receives the engine object `$`, the event `e`, and a `next` continuation, and decides what happens.\n\nThat gives three positions instead of one:\n\n`next(e)` and inspect what came back.`next({ ...e, input })` with changed data, or change the result on the way out.`{ deny: \"reason\" }` and never call `next`. The tool does not run.\nThe module runs in a sandbox of its own, with no DOM and no Node. Everything outside it goes through `$`: `$.ui`, `$.http`, `$.fs`, `$.process`, `$.state`, `$.store`, `$.session`, `$.command`, `$.tool`, `$.model` and `$.clock`. That is what makes a mod more than a filter.\n\nMods are distributed as plugins. The standard route is a plugin marketplace (a repo with `.claude-plugin/marketplace.json`):\n\n```\n/plugin marketplace add <repo>\n/plugin install <mod>@<marketplace>\n/reload-plugins\n```\n\nWith aitmpl.com you skip that. Pick a mod on the site, copy the command, run it in your project:\n\n```\nnpx claude-code-templates@latest --mod security/secret-redactor\n```\n\nThe CLI downloads the whole plugin directory (`.claude-plugin/plugin.json`, `hooks/`, commands, types, tests) and writes it to `.claude/skills/secret-redactor/`. Claude Code loads it on the next session as `secret-redactor@skills-dir`.\n\nTwo details that trip people up:\n\n`.claude/skills/` is only read once you have accepted the workspace trust prompt. In a folder you never opened interactively (for example a headless `claude -p` run) the mod does not load. Install it in `~/.claude/skills/` if you want it everywhere.`userConfig` in `plugin.json` and read from your \n\n```\n{ \"pluginConfigs\": { \"npm-to-pnpm-rewriter@skills-dir\": { \"options\": { \"manager\": \"yarn\" } } } }\n```\n\nUse the wrong key (`\"npm-to-pnpm-rewriter\"`) and every option silently stays at its default.\n\nSeven categories, 38 mods:\n\n`secret-redactor`, `block-destructive-commands`, `protected-paths-guard`, `large-edit-confirmation`, `jev-auto-mode`, `jev-guardrails`, `jev-vercel-sandbox`\n`aitmpl` (a component browser inside Claude Code), `npm-to-pnpm-rewriter`, `webfetch-cache`, `jev-model-router`, `jev-skill-suggestion`\n`agent-flow`, `git-sidebar`, `tool-timing-badge`\n`prompt-cache-control`, `universal-audit-log`\n`linear-tickets`, `vercel-deploys`, `neon-branch-per-session`, `websearch-to-exa`, `pi-agent-for-claude`\n`admin-capability-lockdown`\n`snake` and `tetris` to `doom`, `pacman` and `tool-defense`, where every enemy is one of Claude's real tool calls\nMods are not terminal-only. The official guide demos each one in both Claude Code in the terminal and Claude Code Desktop, and surfaces like panes and status lines are drawn through `$.ui.resolve(e)`, which returns the constructors for whichever surface you are on. Same plugin, same install command, both places.\n\n`CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1`.)`$` API is still young and can change between releases. The catalog's type definitions follow Claude Code 2.1.283 and every mod is typechecked against them in CI.\nBefore touching the code, check in this order:\n\n`$.ui.log` goes to the transcript and to `~/.claude/debug/<session-id>.txt`; in `pluginConfigs` keyed by `name@skills-dir`?` claude --debug` show `hooks module <name>@skills-dir loaded`?\nA note on model routers: a mod that rewrites `model` or `effort` at `turn.step` changes that request only. The header, the status line and the effort box show your session's setting and will not move.\n\n```\nnpx claude-code-templates@latest --mod games/pacman\n```\n\nBrowse the catalog at [aitmpl.com](https://www.aitmpl.com), validate any installed mod with `claude plugin validate <dir>`, and run its tests with `claude plugin test <dir>`.\n\nEvery mod has its own page with the install command, the options it accepts and what it hooks.", "url": "https://wpnews.pro/news/installs-claude-code-mods-with-one-command", "canonical_source": "https://dev.to/dani_avila7/installs-claude-code-mods-with-one-command-36h8", "published_at": "2026-10-21 15:03:00+00:00", "updated_at": "2026-10-21 15:10:16.613553+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Claude Code", "aitmpl.com", "Anthropic", "Vercel", "Neon", "Linear", "Exa"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/installs-claude-code-mods-with-one-command", "markdown": "https://wpnews.pro/news/installs-claude-code-mods-with-one-command.md", "text": "https://wpnews.pro/news/installs-claude-code-mods-with-one-command.txt", "jsonld": "https://wpnews.pro/news/installs-claude-code-mods-with-one-command.jsonld"}}