Get Started in 5 Minutes
Five hands-on steps to go from "I've never extended Claude Code" to having hooks, skills, and MCP servers running. Each step builds on the previous one.
1 Add Your First Hook
Let's start with the most immediately useful extension: a desktop notification when Claude finishes working.
~/.claude/settings.json
{
"hooks": {
"Stop": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "osascript -e 'display notification \"Claude is done\" with title \"Claude Code\"'"
}]
}]
}
}
macOS: Uses osascript.
Linux: Replace with notify-send "Claude is done" "Claude Code".
Now start a Claude Code session and give it a task. When it finishes, you'll get a notification. That's it — your first hook is running.
Instead of editing JSON manually, tell Claude: "Add a hook that notifies me when you're done." It can configure its own hooks via the /update-config skill.
2 Create a Custom Skill
Let's build a /status command that gives you a quick project overview.
~/.claude/skills/status/SKILL.md
---
name: status
description: Quick project status overview
---
# Project Status Report
Give me a concise project status:
1. Run `git status` to see uncommitted changes
2. Run `git log --oneline -5` for recent commits
3. Check for TODOs: `grep -r "TODO\|FIXME" --include="*.{ts,js,py}" -l .`
4. Report:
- Branch name and uncommitted changes count
- Last 5 commits (one line each)
- Files with TODOs/FIXMEs
- Overall health: clean / needs attention / messy
Now in any Claude Code session, type /status and get an instant project health check.
3 Connect an MCP Server
Let's connect the GitHub MCP server so Claude can search repos and manage issues.
Now in Claude Code, you can ask things like "search my GitHub repos for anything related to authentication" or "create an issue on my-repo about the login bug."
4 Install a Community Plugin
Browse what the community has built and install what fits your workflow.
Good first plugins to explore:
- Superpowers — TDD, debugging, code review (94K+ stars)
- Severance — Semantic memory across sessions
- Trail of Bits Security — Professional security auditing skills
5 Share What You Build
Once you've built something useful, share it with the community:
-
Package as a plugin
Create a
.claude-plugin/plugin.jsonmanifest and organize your skills/hooks into the plugin directory structure. -
Push to GitHub
Add the
claude-code-plugintopic to your repo so others can find it. -
Submit to awesome-claude-code
Open a PR on the curated list to help others discover your extension.
Total Cost Summary
Here's what you actually need to spend to use everything in this guide:
| Requirement | Cost | Notes |
|---|---|---|
| Claude Code subscription | $20-200/mo | Pro ($20), Team ($25/user), or Max ($100-200). Required baseline. |
| Hooks | $0 | Included with Claude Code. Command hooks are free. Prompt/agent hooks use existing tokens. |
| Skills | $0 | Markdown files. Forked context uses tokens from your existing plan. |
| Plugins | $0 | All community plugins and marketplaces are free. |
| MCP Servers | $0 | Protocol and servers are free. API keys (GitHub, Slack, etc.) are free tier. |
| Community tools | $0 | Severance, Claude-Mem, awesome lists — all open source. |
The only thing you're paying for is the Claude Code subscription itself. Every extension layer, community plugin, MCP server, and tool in this guide works at no additional cost.
Common Issues
Hook isn't firing
# Check your settings file is valid JSON
$ cat ~/.claude/settings.json | jq .
# Common issues:
# 1. Matcher doesn't match the tool name (case-sensitive)
# 2. Command path isn't in $PATH
# 3. File is in wrong location (project vs personal)
# Debug: add a simple echo hook first
"command": "echo 'HOOK FIRED' >> /tmp/claude-hooks.log"
Skill doesn't appear
# Verify the file structure
$ ls -la ~/.claude/skills/my-skill/SKILL.md
# The file must be named exactly SKILL.md (uppercase)
# The directory name becomes the command name
# ~/.claude/skills/deploy/SKILL.md -> /deploy
# Check frontmatter is valid YAML
# The --- delimiters must be on their own lines
MCP server won't connect
# Check the server runs standalone
$ npx @modelcontextprotocol/server-github
# Common issues:
# 1. Missing environment variables (GITHUB_TOKEN, etc.)
# 2. npx can't find the package - try installing globally
# 3. Port conflicts for SSE/HTTP transports
# Check connection status
$ claude mcp list
$ claude mcp logs github
What's Next?
Deep dive into Hooks
All 24+ events, 4 hook types, data flow diagrams, and 10+ production examples.
Master Skills
Forked context, tool restrictions, supporting files, and notable community skills.
Explore the Ecosystem
Memory systems, curated lists, and the best community projects with donate links.