Claude Code Extension Points

Canonical version: Claude Code Extension Points.

Claude Code has many extension points, and since October 2026 mods add one more. Each one changes a different layer: what Claude knows, what it may do, which tools it has, and (with mods) how Claude Code itself behaves and looks.

The choice comes down to what you want to change, and whether it has to run inside Claude Code or can run beside it.

Overview

Mechanism What you write What it changes Where it runs
CLAUDE.md and AGENTS.md (Claude Code Memory) Markdown What Claude knows at the start of every session Read into the context
Skills A SKILL.md, optionally with scripts What Claude knows and does for one kind of task, loaded on demand Read into the context
Custom commands A Markdown prompt A reusable prompt behind a /command (legacy, superseded by skills) Read into the context
Subagents (custom agents) Markdown with frontmatter A separate agent with its own prompt, tools and permission mode Its own context
Permissions Allow, ask and deny rules in settings What Claude may do without asking Claude Code's rule engine
Settings hooks A shell command, HTTP request or prompt, plus a settings.json entry Whether a tool call or prompt goes ahead, a tool call's arguments and result, context added for Claude A separate process, per event
MCP servers A server in any language Which tools Claude has A separate process or service
Status line (e.g. Claude Epic Status Line) A script that reads JSON on stdin The line at the bottom of the screen A separate process, on each refresh
Mods JavaScript or TypeScript Tool calls, prompts, commands, turns, subagents, and what the interface draws Inside Claude Code's process
Plugins A manifest plus any of the above Nothing by itself: it's the package that ships the others Installed from a marketplace

Which one to pick

  • Instructions I keep pasting: a skill, or a line in CLAUDE.md when it applies to every session in the project
  • Claude needs to reach an external system: an MCP server
  • A gate or a log, with a script I already have: a settings hook. It runs outside Claude Code, in any language, and it's easier to reason about
  • A pane, a band above the prompt, a /command that answers instantly, or rewriting an event on its way (a prompt, a tool call, a request to the model): a mod
  • Sharing any of these: wrap them in a plugin

Where mods overlap with the others

A mod can do part of what the others do. It can register tools Claude calls (named like MCP tools, mcp__<plugin>__<tool>), add slash commands, run on the settings hook events as classic.<Event>, rewrite a skill's text as Claude receives it (skill.prompt), and show a line under the prompt with $.ui.status.

That doesn't make the others obsolete. A mod is JavaScript or TypeScript only, it runs with your permissions and outside the sandbox, and its README still warns that the API "may change between releases without notice". A skill is a Markdown file you can carry to other agents (AI Skill Portability), and an MCP server works with any MCP client. Skills and MCP servers stay the portable layer. Mods are for what only they can do: drawing in Claude Code's UI and intercepting events inside the process.

One switch covers several layers: "disableAllHooks": true stops settings hooks, the custom status line and every installed mod (built-in mods keep running).

References


About Sébastien

Ready to get to the next level?

Found this valuable? Share it with someone who needs it.

Join 6,000+ readers. Get practical systems for knowledge & AI. Free.

Subscribe ✨

Free: Knowledge System Checklist

A clear roadmap to building your own knowledge system. Subscribe and get it straight to your inbox.

6,000+ readers. No spam. Unsubscribe anytime.

Subscribe