Commands are the manual triggers — shortcuts for workflows you initiate yourself.
MCP is the nervous system — connecting Claude to the outside world.
Skills are the internal playbook — teaching Claude how to do things, loaded on demand.
Hooks are the guardrails — deterministic rules that always fire, regardless of what Claude decides.
Plugins are the shipping container — bundling Skills, MCP, agents, and commands for easy distribution.
Installation Methods
⚡ Commands
# Save a markdown file to the commands directory
.claude/commands/review.md # → triggers as /review
.claude/commands/deploy.md # → triggers as /deploy
🔧 MCP / Tools
# Via CLI
claude mcp add <server-name>
# Or manually in .mcp.json (project-level)
{
"mcpServers": {
"github": { "command": "npx", "args": ["@modelcontextprotocol/server-github"] }
}
}
🧠 Skills
# Drop a folder into your project
.claude/skills/my-skill/
├── SKILL.md # instructions + YAML frontmatter
├── scripts/ # optional executables
└── resources/ # optional supporting files
# Or install via plugin marketplace
/plugin marketplace add anthropics/skills
🛡️ Hooks
# In .claude/settings.json
{
"hooks": {
"PostToolUse": [{
"matcher": "Write|Edit",
"hooks": [{ "type": "command", "command": "npm run lint:fix" }]
}]
}
}
# Or interactively via /hooks menu
📦 Plugins
# Install from marketplace inside Claude Code
/plugin install supabase-pack
# Or via npm
npm i @intentsolutionsio/supabase-pack
See real examples: View the CLAUDE.md & AGENTS.md from this repository side by side — the project-level config files that Claude Code and Codex read at session start.
Configuration Scoping — Where You Put Things Matters
Every piece of Claude Code configuration — hooks, skills, commands, MCP servers, and CLAUDE.md — is directory-scoped. The directory you launch Claude from determines which configuration is active. This has real practical consequences:
Example: If you add a PostToolUse lint hook to ~/.claude/settings.json (user level), it fires on every project you open — even repos where that linter isn’t installed or applicable. Put the same hook in the project’s .claude/settings.json instead, and it only runs when you launch Claude from that project.
Scope Hierarchy (highest precedence first)
Scope
Location
Applies to
Shared?
Managed
System directories (IT/enterprise)
All users on machine
Yes (admin-deployed)
Local
.claude/settings.local.json
You, current project only
No (gitignored)
Project
.claude/settings.json
All project collaborators
Yes (committed to git)
User
~/.claude/settings.json
You, all your projects
No
How Each Config Type Resolves
Config
Resolution rule
Settings & Hooks
Merged across scopes. Arrays concatenate; objects use highest-precedence scope. A hook defined at user level runs everywhere unless overridden.
CLAUDE.md
Walks up the directory tree from your working directory, loading every CLAUDE.md it finds. Subdirectory files lazy-load when Claude reads files there. User-level ~/.claude/CLAUDE.md applies to all projects.
Skills
Discovered from the project’s .claude/skills/. Not inherited from parent directories or user home.
Commands
Discovered from the project’s .claude/commands/. User-level commands in ~/.claude/commands/ are available everywhere.
MCP Servers
Three scopes: local (you + this project), project (.mcp.json, shared), user (~/.claude.json, all projects). Local > Project > User.
Practical Rule of Thumb
Project-specific tools (linters, test runners, deploy scripts) → put in .claude/settings.json so they only fire for that repo.
Personal preferences (notification hooks, editor style) → put in ~/.claude/settings.json so they follow you everywhere.
Team conventions (code style hooks, required test gates) → commit to .claude/settings.json so everyone on the team gets them.
Private overrides (disable a noisy team hook locally) → use .claude/settings.local.json (gitignored).
Popular Examples by Category
⚡ Commands
Command
What it does
/review
Full code review of current file
/deploy --production
Runs deployment checklist and executes deploy
/write-plan
Brainstorms and writes an implementation plan
/audit --comprehensive
Full project health audit
/create-skill
Guided workflow to generate a new Skill file
🔧 MCP / Tools
Server
What it does
github
Read PRs, create issues, review code diffs
postgres
Query your database in plain English
slack
Read channels, post messages, search threads
filesystem
Read/write local files outside the chat
brave-search
Live web search mid-conversation
🧠 Skills
Skill
Auto-activates when…
tdd
You ask Claude to write tests
code-review
You paste code and ask for a review
docx
You ask Claude to create/edit a Word document
internal-comms
You ask Claude to draft a company announcement
deploy
You mention deployment or release
🛡️ Hooks
Hook Lifecycle Events
Event
Fires when…
Can block?
PreToolUse
Before any tool executes
Yes
PostToolUse
After any tool executes
No
UserPromptSubmit
Before Claude sees your prompt
Yes
Notification
Claude needs your attention/input
No
Stop
Claude finishes a response
No
SessionStart
Session begins or resumes
No
PreCompact
Before conversation compaction
No
Handler Types
Type
How it works
Best for
command
Runs a shell script, pass/fail via exit code
Formatting, test gates, git guards
prompt
Sends a prompt to Claude for evaluation
Semantic checks, security review
agent
Spawns a subagent with tool access
Deep code analysis, complex validation
Popular Hook Examples
Hook
What it enforces
PostToolUse on Write/Edit → npm run lint:fix
Auto-format every file Claude touches
PreToolUse on git commit → run tests
Block commits until tests pass
Notification → OS/Slack alert
Ping you when Claude is waiting for input
UserPromptSubmit → security scan
Block prompts that reference sensitive files
SessionStart → load git status
Inject fresh context at session start
📦 Plugins
Example Plugin Bundles
Plugin
What's inside
supabase-pack
Skills for auth, storage, edge functions + MCP for DB