Trending-skills claude-howto-guide

```markdown

install
source · Clone the upstream repo
git clone https://github.com/Aradotso/trending-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Aradotso/trending-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/claude-howto-guide" ~/.claude/skills/aradotso-trending-skills-claude-howto-guide && rm -rf "$T"
manifest: skills/claude-howto-guide/SKILL.md
source content
---
name: claude-howto-guide
description: Master Claude Code features — slash commands, memory, hooks, subagents, MCP, skills, plugins, checkpoints, and CLI — using the claude-howto structured tutorial guide.
triggers:
  - how do I use Claude Code effectively
  - set up Claude Code slash commands
  - configure hooks in Claude Code
  - create a subagent workflow with Claude Code
  - install MCP servers for Claude Code
  - use Claude Code memory and CLAUDE.md
  - set up a Claude Code plugin
  - automate code review with Claude Code
---

# Claude How-To: Master Claude Code Features

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

`claude-howto` is a structured, visual, example-driven tutorial guide for Claude Code. It covers every major feature — slash commands, memory, skills, subagents, MCP, hooks, plugins, checkpoints, and CLI — with copy-paste templates, Mermaid diagrams, and a progressive 11–13 hour learning path.

---

## Installation

```bash
git clone https://github.com/luongnv89/claude-howto.git
cd claude-howto

No Python dependencies are required to use the templates. To build the offline EPUB:

uv run scripts/build_epub.py

Repository Structure

claude-howto/
├── 01-slash-commands/     # User-invoked shortcuts (/cmd)
├── 02-memory/             # Persistent context (CLAUDE.md)
├── 03-skills/             # Reusable capabilities (auto-invoked)
├── 04-subagents/          # Specialized AI assistants
├── 05-mcp/                # External tool access via MCP protocol
├── 06-hooks/              # Event-driven automation
├── 07-plugins/            # Bundled feature packages
├── 08-checkpoints/        # Session snapshots and rewind
├── 09-advanced-features/  # Planning, thinking, background tasks
├── 10-cli/                # CLI commands, flags, options
├── LEARNING-ROADMAP.md    # Guided learning path
├── CATALOG.md             # Full feature catalog
└── CONTRIBUTING.md

Quick 15-Minute Setup

# Create Claude Code command directory in your project
mkdir -p /path/to/your-project/.claude/commands

# Copy a slash command template
cp 01-slash-commands/optimize.md /path/to/your-project/.claude/commands/

# Set up project memory
cp 02-memory/project-CLAUDE.md /path/to/your-project/CLAUDE.md

# Install a skill
cp -r 03-skills/code-review ~/.claude/skills/

Feature 1: Slash Commands

Slash commands are Markdown files in

.claude/commands/
. The filename becomes the command name.

File:

.claude/commands/review.md

# Code Review

Review the current file or selection for:
- Logic errors and edge cases
- Performance bottlenecks
- Security vulnerabilities
- Style and readability

Provide a structured report with severity levels (critical / warning / suggestion).

Usage in Claude Code:

/review

Copy all example commands:

cp 01-slash-commands/*.md .claude/commands/

Feature 2: Memory (CLAUDE.md)

CLAUDE.md
files give Claude persistent context about your project. They are auto-loaded at session start.

Scopes:

  • ~/.claude/CLAUDE.md
    — global, applies to all projects
  • ./CLAUDE.md
    — project-level
  • ./src/CLAUDE.md
    — directory-level

Template:

./CLAUDE.md

# Project: my-api

## Stack
- Python 3.12, FastAPI, PostgreSQL
- Tests: pytest, httpx
- Linting: ruff, mypy

## Conventions
- All endpoints return `{"data": ..., "error": null}` or `{"data": null, "error": "..."}`
- Use `async def` for all route handlers
- Database sessions via `get_db()` dependency injection

## Key Commands
- `make test` — run test suite
- `make lint` — ruff + mypy
- `make migrate` — run Alembic migrations

## Do Not
- Never commit secrets or `.env` files
- Never use `print()` for logging — use `structlog`

Copy the template:

cp 02-memory/project-CLAUDE.md ./CLAUDE.md

Feature 3: Skills

Skills are reusable capability definitions that Claude invokes automatically based on context. They live in

~/.claude/skills/
(global) or
.claude/skills/
(project).

Structure:

~/.claude/skills/
└── code-review/
    ├── skill.md        # Skill definition
    └── templates/      # Supporting templates

Install a skill:

cp -r 03-skills/code-review ~/.claude/skills/

Example

skill.md
:

# Skill: Code Review

Trigger: When reviewing code, PRs, or diffs.

## Behavior
1. Check for security vulnerabilities (injection, secrets, auth bypass)
2. Identify performance issues (N+1 queries, unbounded loops)
3. Verify error handling completeness
4. Assess test coverage gaps
5. Output findings as a structured Markdown report

Feature 4: Subagents

Subagents are specialized Claude instances delegated subtasks. Define them in

.claude/agents/
.

File:

.claude/agents/security-auditor.md

# Agent: Security Auditor

## Role
Specialized security review agent. Focus exclusively on:
- Injection vulnerabilities (SQL, command, LDAP)
- Authentication and authorization flaws
- Secrets or credentials in code
- Insecure dependencies

## Output Format
Return a JSON report:
{
  "critical": [...],
  "high": [...],
  "medium": [...],
  "low": [...]
}

Orchestrating subagents in a workflow:

# Example: Trigger subagent delegation via Claude Code SDK
import anthropic

client = anthropic.Anthropic()

orchestrator_prompt = """
You are an orchestrator. For the following code diff, delegate to:
1. The security-auditor agent for vulnerability scanning
2. The performance-reviewer agent for bottleneck detection

Return a combined report.

Code diff:
{diff}
""".format(diff=open("changes.diff").read())

response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=4096,
    messages=[{"role": "user", "content": orchestrator_prompt}]
)
print(response.content[0].text)

Feature 5: MCP (Model Context Protocol)

MCP servers give Claude access to external tools and live data. Configure in

.claude/mcp.json
.

File:

.claude/mcp.json

{
  "servers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
    }
  }
}

Environment variables (never hardcode):

export GITHUB_TOKEN="your-token-here"
export DATABASE_URL="postgresql://user:pass@localhost/db"

Copy MCP config templates:

cp 05-mcp/mcp.json .claude/mcp.json

Feature 6: Hooks

Hooks are scripts triggered by Claude Code events. They live in

.claude/hooks/
.

Supported events:

EventTrigger
pre-tool-use
Before Claude runs any tool
post-tool-use
After a tool completes
pre-file-write
Before writing a file
post-file-write
After writing a file
session-start
When a session begins
session-end
When a session ends

File:

.claude/hooks/post-file-write.sh

#!/bin/bash
# Auto-run linter after Claude writes a Python file

FILE="$1"

if [[ "$FILE" == *.py ]]; then
  echo "Running ruff on $FILE..."
  ruff check --fix "$FILE"
  mypy "$FILE" --ignore-missing-imports
fi

File:

.claude/hooks/pre-file-write.py

#!/usr/bin/env python3
"""Block writes to protected paths."""

import sys
import os

PROTECTED = [".env", "secrets.json", "credentials.yaml"]

file_path = sys.argv[1] if len(sys.argv) > 1 else ""
filename = os.path.basename(file_path)

if filename in PROTECTED:
    print(f"BLOCKED: Writing to {filename} is not allowed.", file=sys.stderr)
    sys.exit(1)

sys.exit(0)

Register hooks in

.claude/config.json
:

{
  "hooks": {
    "post-file-write": ".claude/hooks/post-file-write.sh",
    "pre-file-write": ".claude/hooks/pre-file-write.py"
  }
}

Copy hook templates:

cp 06-hooks/*.sh .claude/hooks/
cp 06-hooks/*.py .claude/hooks/
chmod +x .claude/hooks/*

Feature 7: Plugins

Plugins bundle slash commands, skills, hooks, and memory into a single installable package.

Plugin structure:

my-plugin/
├── plugin.json
├── commands/
│   └── deploy.md
├── hooks/
│   └── pre-deploy.sh
├── skills/
│   └── deployment/skill.md
└── memory/
    └── CLAUDE.md

File:

plugin.json

{
  "name": "devops-pipeline",
  "version": "1.0.0",
  "description": "Full DevOps automation plugin",
  "commands": ["commands/deploy.md"],
  "hooks": {
    "pre-tool-use": "hooks/pre-deploy.sh"
  },
  "skills": ["skills/deployment/"],
  "memory": "memory/CLAUDE.md"
}

Install a plugin:

# Copy from claude-howto examples
cp -r 07-plugins/devops-pipeline .claude/plugins/devops-pipeline

Feature 8: Checkpoints

Checkpoints save session state so you can rewind to a known-good point.

In Claude Code:

/checkpoint save before-refactor
/checkpoint list
/checkpoint restore before-refactor

Use case — safe large refactoring:

1. /checkpoint save pre-auth-rewrite
2. Ask Claude to rewrite authentication module
3. Run tests: make test
4. If tests fail: /checkpoint restore pre-auth-rewrite

Feature 9: Advanced Features

Planning Mode

Force Claude to plan before acting:

/plan Refactor the user authentication module to use JWT tokens

Or in a slash command:

# Refactor Plan

Before making any changes:
1. Analyze the current implementation
2. Identify all affected files and dependencies
3. Write a step-by-step migration plan
4. Ask for approval before proceeding

Then execute the approved plan.

Extended Thinking

For complex problems, enable deep reasoning:

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    messages=[{
        "role": "user",
        "content": "Design a distributed rate limiter for 10M req/s with Redis"
    }]
)

for block in response.content:
    if block.type == "thinking":
        print("Reasoning:", block.thinking)
    elif block.type == "text":
        print("Answer:", block.text)

Background Tasks

Long-running tasks that don't block your session:

/background Run the full test suite and report results when complete
/background Generate API documentation for all endpoints
/background Scan all Python files for security vulnerabilities

Feature 10: CLI Reference

Key Claude Code CLI commands and flags:

# Start interactive session
claude

# Run a one-shot prompt (non-interactive)
claude -p "Explain the auth middleware in src/middleware/auth.py"

# Run with a specific model
claude --model claude-opus-4-6

# Read-only mode (no file writes)
claude --read-only

# Output as JSON (for scripting)
claude -p "List all TODO comments" --output-format json

# Continue last session
claude --continue

# Resume a specific session
claude --resume <session-id>

# Set system prompt
claude --system-prompt "You are a security-focused reviewer"

# Pipe input
cat src/api.py | claude -p "Review this file for security issues"

# Run in a specific directory
claude --cwd /path/to/project

Scripting with Claude Code CLI:

#!/bin/bash
# ci-review.sh — Run Claude Code review in CI pipeline

FILES=$(git diff --name-only HEAD~1 HEAD | grep '\.py$')

for FILE in $FILES; do
  echo "Reviewing $FILE..."
  claude -p "Review $FILE for bugs and security issues. Output JSON." \
    --output-format json \
    --read-only \
    --cwd "$(pwd)" \
    >> review-results.json
done

echo "Review complete. Results in review-results.json"

Common Workflow Patterns

Pattern 1: Automated Code Review Pipeline

Slash Command (/review)
  → Subagent: security-auditor
  → Subagent: performance-reviewer
  → Hook (post-tool-use): format and post results
  → Memory: store findings in CLAUDE.md

.claude/commands/review.md
:

# Full Code Review

Orchestrate a comprehensive review:

1. Delegate security analysis to the security-auditor agent
2. Delegate performance analysis to the performance-reviewer agent  
3. Combine results into a single Markdown report
4. Save a summary to `.claude/review-log.md`

Format: Use severity badges (🔴 Critical, 🟠 High, 🟡 Medium, 🟢 Low)

Pattern 2: Safe Refactoring

# 1. Save checkpoint
# In Claude Code: /checkpoint save pre-refactor

# 2. Run refactor with planning mode
# /plan Refactor database layer to use async SQLAlchemy

# 3. Validate
make test

# 4. On failure, restore
# /checkpoint restore pre-refactor

Pattern 3: CI/CD Integration

# .github/workflows/claude-review.yml equivalent as shell

#!/bin/bash
# Run on every PR

PR_DIFF=$(git diff main...HEAD)

echo "$PR_DIFF" | claude \
  -p "Review this PR diff. Return JSON with: summary, risks, suggestions." \
  --output-format json \
  --read-only > pr-review.json

# Post results to PR via GitHub API
curl -X POST \
  -H "Authorization: Bearer $GITHUB_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"body\": \"$(cat pr-review.json | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d[\"summary\"])')\"}" \
  "https://api.github.com/repos/$REPO/issues/$PR_NUMBER/comments"

Built-In Self-Assessment

Run directly inside Claude Code:

/self-assessment          # Full quiz — identifies your gaps and builds a personalized roadmap
/lesson-quiz hooks        # Quiz on hooks specifically
/lesson-quiz subagents    # Quiz on subagents
/lesson-quiz mcp          # Quiz on MCP protocol

Learning Path (Recommended Order)

StepModuleTime
1Slash Commands30 min
2Memory45 min
3Checkpoints45 min
4CLI Basics30 min
5Skills1 hour
6Hooks1 hour
7MCP1 hour
8Subagents1.5 hours
9Advanced Features2–3 hours
10Plugins2 hours

Troubleshooting

Slash command not appearing:

  • Verify the file is in
    .claude/commands/
    (project) or
    ~/.claude/commands/
    (global)
  • Filename must end in
    .md
  • Restart Claude Code session

CLAUDE.md not loading:

  • Must be named exactly
    CLAUDE.md
    (case-sensitive)
  • Place in project root or relevant subdirectory
  • Check for YAML syntax errors if using frontmatter

Hook not triggering:

  • Ensure hook script is executable:
    chmod +x .claude/hooks/myhook.sh
  • Verify hook is registered in
    .claude/config.json
  • Check hook output for errors: hooks that exit non-zero block the action

MCP server not connecting:

  • Confirm environment variables are exported:
    echo $GITHUB_TOKEN
  • Test the MCP server binary directly:
    npx -y @modelcontextprotocol/server-github
  • Check
    .claude/mcp.json
    for JSON syntax errors

Subagent not delegating:

  • Agent definition file must be in
    .claude/agents/
  • Verify the orchestrator prompt explicitly references the agent by name
  • Check that the agent
    .md
    file has a clear
    ## Role
    section

Resources