A skill explains a reusable procedure. A plugin packages capabilities for a client. An MCP server exposes callable tools or resources. A hook runs at a supported lifecycle event. These mechanisms can work together, but they solve different problems.

Follow one change through the system

Imagine asking an agent to review a Swift file. Project instructions establish the app's constraints. A skill can describe which checks matter. An MCP tool can inspect the file and return findings. A supported hook can run a deterministic check at the appropriate event. You still inspect the change and its evidence.

How extension layers cooperate
  1. 1Plugin packages capabilities
  2. 2Skill supplies procedure
  3. 3MCP exposes operations
  4. 4Hook invokes event checks

The arrows describe responsibility, not a guarantee that every client loads every component. A plugin may distribute a skill and a server configuration together, but the installed client must still discover and execute them correctly.

Four terms, four questions

Mechanism Question it answers Concrete example
Skill How should this task be approached? Review concurrency before accepting a Swift change
Plugin How are capabilities packaged for this client? A manifest plus skill and tool configuration
MCP server Which operations can the agent call? Review a Swift file and return finding locations
Hook What runs at this lifecycle event? Check protected generated files or run verification

Do not install all four simply because the words appear in a guide. Start with the need. If you only need guidance, a tool server may be unnecessary. If you need a simulator screenshot, prose alone cannot take one; the environment needs an executable operation and the required local tools.

Where failures belong

If the skill is missing, investigate discovery and task routing. If tools are absent, inspect the MCP connection. If a hook does not run, inspect the client's event and configuration support. If the tool runs but the app does not compile, inspect the actual compiler failure. Reinstalling a plugin does not automatically fix a Swift error.

Anthropic's customization guide distinguishes several of these extension mechanisms. Use the documentation for your client before copying event names or configuration structures.

A small installation exercise

Open the project's setup guide and choose one client. Configure one connection path. Reconnect the client, ask it to list the available tools, and perform one read-only operation against synthetic source. Record the client and package version. Do not equate a tool list with a completed app-building workflow.

Next, read the hook walkthrough. Notice that it distinguishes executing a script directly from having a client dispatch that hook. This distinction is useful whenever a configuration example looks correct but has not been tested through the actual runtime.

Completion checkpoint

You should now be able to explain which component provides guidance, which provides execution and which provides lifecycle enforcement. If an integration fails, name the layer before changing it. That habit makes later build/test loops easier to debug and keeps setup complexity proportional to the task.

What to do next

Next: Build a SwiftUI to-do app with Claude Code: the brief, checks and repair workflow