Quickstart

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.

Pro tip: tell Claude to configure its own hooks.

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.

Terminal
$ mkdir -p ~/.claude/skills/status
~/.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.

Terminal
# Make sure you have a GitHub token $ echo $GITHUB_TOKEN | head -c 10 ghp_abc123... # Add the GitHub MCP server $ claude mcp add github -- npx @modelcontextprotocol/server-github Added MCP server: github # Verify it's connected $ claude mcp list github stdio npx @modelcontextprotocol/server-github

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.

Claude Code
# Discover available plugins > /plugin discover # Install a popular one > /plugin install superpowers@obra Installed superpowers v2.1.0 Skills: /tdd, /debug-loop, /brainstorm, /code-review

Good first plugins to explore:


5 Share What You Build

Once you've built something useful, share it with the community:

  1. Package as a plugin

    Create a .claude-plugin/plugin.json manifest and organize your skills/hooks into the plugin directory structure.

  2. Push to GitHub

    Add the claude-code-plugin topic to your repo so others can find it.

  3. 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:

RequirementCostNotes
Claude Code subscription 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.
TL;DR: If you already have Claude Code, everything else is free.

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?


JD

Built by Jon Dallas

AI Consultant & Developer

I build with Claude Code every day — chatbots, websites, courses, data pipelines. This guide exists because I spent weeks figuring out what's worth using and what isn't, and I wanted to save you that time. If it helps, share it with someone else.