ZIV LABS
Reference

AI coding agent extensions: skills, hooks, MCP servers and plugins

Skills, hooks, MCP servers and plugins are how a coding agent is extended, and most of them are files in a repository or a home folder that the agent reads at start-up. This page lists, for Claude Code and Codex, where each extension point is configured, what it can make run, and what the documentation says about approving it. It is a lookup page: it states what we read and observed, and it marks what we did not cover.

What we checked

ToolVersionSources
Claude Code2.1.306The MCP, Skills, Hooks and Plugins pages of the official documentation (MCP and Skills read in full; Hooks read through character 200,000 of about 270,000), claude mcp --help, claude plugin --help, and the runs in the MCP note and the file-access guide
Codex CLI0.163.0The official MCP page, codex --help, codex mcp --help

The checks were done on October 22, 2026. The Codex pages for skills and hooks were not found at the addresses we tried, so those rows say what the help output shows and nothing more. Gemini CLI is not covered here; see the permission reference.

1. The four extension points

Extension pointClaude CodeCodex CLI
SkillsA folder with a SKILL.md, in ~/.claude/skills/, in .claude/skills/ of a project, or inside a plugin. The description stays in context; the body loads when the skill runs.Not documented here: the page was not found. We do not state where or how.
HooksHandlers that run at lifecycle events such as PreToolUse. Defined in user, project or local settings, managed policy, plugins, and skill or subagent frontmatter. A handler can be a shell command, an HTTP endpoint, an MCP tool call, a prompt or a subagent.Hooks exist: codex --help lists an option that runs hooks without persisted hook trust and calls it dangerous. We did not read the hooks documentation.
MCP serversScopes: local (default), project (.mcp.json at the repository root) and user. Added with claude mcp add.~/.codex/config.toml, or a project .codex/config.toml for trusted projects only. codex mcp lists, gets, adds and removes servers.
PluginsA directory that bundles skills, agents, hooks and MCP servers, installed from a marketplace or a folder, at user, project or local scope. claude plugin enables, disables and inspects them.codex plugin is listed as "Manage Codex plugins". We did not read the documentation.

2. What each one can make run, and who approves it

ItemStatementHow we know
A project MCP server in Claude CodeAn interactive session asks before using it. In claude -p it loads without asking. claude mcp get and claude mcp list show an unapproved server as pending and do not connect.Documentation; and in our runs a server started under claude -p and not under mcp get or mcp list
A skill's allowed-toolsThe listed tools run without a permission prompt during the turn in which the skill is invoked. The documentation says to review the field in skills from a repository before you run Claude Code there.Documentation
A skill's shell injectionThe !`command` syntax runs a shell command before Claude sees the skill content. A setting, disableSkillShellExecution, blocks it for user, project and plugin skills.Documentation
A hook in Claude CodeA PreToolUse hook can block a call, by exit code 2 or by printing a deny decision. Exit code 2 takes precedence over an allow in the JSON.Documentation; and a deny from a command hook worked under claude -p in our runs
A plugin in Claude CodeAn enabled plugin is part of every session: its skills and agents add their names and descriptions to the context, its MCP servers run, its hooks fire. What it runs, it runs as you.Documentation
An MCP server in CodexEach server can set how its tools are approved: auto, prompt, writes or approve, with a per-tool override. The page does not state the default.Documentation

3. Before you run an agent in a repository you did not write

  1. Look for the files that configure extensions: .mcp.json, .claude/ (settings, skills), .codex/, and a plugin folder.
  2. Read any command, hook script and allowed-tools line as code you are about to run.
  3. For Claude Code, prefer claude mcp get and claude mcp list to look at servers, because they did not start an unapproved project server in our run.
  4. Remember that in a non-interactive run nobody can approve. Use a disposable environment for unfamiliar repositories.

What this page does not cover

  • Codex skills, hooks and plugins beyond what the help output shows.
  • Gemini CLI and other agents.
  • Subagents, slash commands and the Agent SDK, other than where the pages above mention them.
  • The interactive approval prompts. We ran only non-interactive commands.

References

Before you read

Related notes

  • What happens when a project asks your agent to start an MCP server — A project file that lists an MCP server is a command. In Claude Code 2.1.306 it started during a non-interactive run before any approval, and a planted tool-description instruction was not followed in six runs. What we tested, and what we did not.
  • How to keep an AI coding agent away from a file — An instruction, a permission deny rule and a hook compared on a dummy .env file, 24 runs of Claude Code: what each stopped, which route got around it, and what only an isolated setup can promise.