CLAUDE CODE COURSE · LEVEL 2 / 3

Claude Code · Intermediate
ten modules to make it daily

For engineers who've tried the Code tab a few times and want to fold it into real project work. Thirty to sixty minutes per module, six to eight hours total. Covers CLAUDE.md, Skills, MCP, subagents, worktrees, hooks — and ends with one monthly task you've automated end to end.

Level 2 10 modules 6–8 hours Git + Docker required

Where this course fits

You've touched Claude Code in the beginner course. This one takes it from "I've tried it" to a daily partner inside your normal workflow. Assumes you're comfortable in a terminal or VS Code or JetBrains, and you know the basics of Git and Docker.

Ten modules, thirty to sixty minutes each, six to eight hours total. After all ten, you can move on to the advanced course (Team / Enterprise / Agent SDK / Bedrock).

Module shape. Each module follows a six-block rhythm: 🎯 Goal / 📖 What / 💬 Prompt / 🛠 Hands-on / ✅ Checkpoint / 💡 Tip. Do the hands-on parts on your real project, not a toy repo.

Module 1 · Give Claude project context with CLAUDE.md

40 min · ★★ · One of your own projects

🎯 Goal

Put a CLAUDE.md at the project root so Claude reads it at the start of every session and understands the project before doing anything.

📖 What

CLAUDE.md sits at the root of your repo. It's Claude's briefing document. Claude Code reads it automatically at session start, picks up coding conventions, project-specific habits, and what to avoid, then gets to work with that in hand.

Sections that earn their keep:

  • Project summary — what you're building, for whom, the stack.
  • Coding rules — naming, import order, formatter, linter.
  • Common commandsnpm run dev, make test, docker compose up.
  • Things to avoid — files not to touch, deprecated APIs, old patterns.
  • Test flow — how to run tests, coverage targets.

💬 Prompt

I want to write CLAUDE.md for this project. Read the README and package.json and put together what Claude should know.

🛠 Hands-on

  1. Open one existing project of yours.
  2. Use the prompt above to draft the CLAUDE.md.
  3. Drop CLAUDE.md at the project root.
  4. In a fresh session, ask "summarize this project." See what Claude pulls out.
  5. Ask the same question in a different project that doesn't have a CLAUDE.md. Compare the two replies.

✅ Checkpoint

  • Claude responds with your naming, your test commands, your idioms.
  • It respects "don't touch this file" when you've written that down.

💡 Tip

CLAUDE.md is living. As the project grows, ask Claude to "update the CLAUDE.md to match what the code looks like now." If it's team-shared, commit it. Personal notes go in CLAUDE.local.md (gitignored).

Module 2 · Fine-grained settings with .claude/

40 min · ★★ · Module 1

🎯 Goal

Put a .claude/settings.json in each project and control which Bash commands Claude is allowed to run.

📖 What

  • .claude/settings.json — team-shared settings (committed).
  • .claude/settings.local.json — personal settings (gitignored).
  • /permissions — inspect and change the current allow/deny state.
  • Modesask (prompt every time), allow (auto-run), deny (blocked).
  • Custom prompts — save as .claude/commands/xxx.md and invoke via slash.

💬 Prompt

Create a .claude/settings.json for this project. Allow npm-family commands. Block rm and sudo.

🛠 Hands-on

  1. Create .claude/settings.json.
  2. Put npm / yarn / pnpm family on allow.
  3. Put rm -rf, sudo, curl | sh on deny.
  4. Leave unknown commands as ask.
  5. Trigger all three modes (allow / ask / deny) on purpose and watch the behavior.

✅ Checkpoint

  • npm commands run without asking.
  • Dangerous commands get blocked, reliably.
  • /permissions shows the current state clearly.

💡 Tip

Commands that touch prod DB or prod servers never go on allow. Leave them as ask and keep a human in the loop. This is the "least privilege" rule from deep-api-keys.html.

Module 3 · Custom slash commands

30 min · ★★ · Module 2

🎯 Goal

Turn three of your recurring tasks (PR creation, release notes, dependency updates) into custom slash commands runnable as /your-command.

📖 What

A file at .claude/commands/pr.md becomes /pr inside the project. Format is YAML frontmatter + Markdown body.

Example (.claude/commands/review-pr.md):

---
description: Review the current PR diff for quality issues
---
Look at git diff main...HEAD and review for:
- naming and readability
- error handling
- missing tests
- security concerns
Output: bullet list, ordered by priority.

💬 Prompt

Build a /review-pr custom command for this project. It should look at git diff and do a quality review.

🛠 Hands-on

  1. Pick three recurring tasks (e.g. /release-notes, /deps-update, /review-pr).
  2. Have Claude draft each command.
  3. Put them under .claude/commands/.
  4. In a fresh session, run /your-command and confirm it works.

✅ Checkpoint

  • Three commands show up in the / autocomplete.
  • Each one produces what you expected.

💡 Tip

Add allowed-tools to frontmatter to limit what the command can do (e.g. only Bash(git diff:*)). For org-wide commands, tighten permissions further.

Module 4 · Hook up one MCP server (Google Drive)

50 min · ★★★ · Claude Desktop installed

🎯 Goal

Connect the Google Drive MCP server to Claude Desktop. Have Claude search and summarize your real Drive files.

📖 What

MCP (Model Context Protocol) is how external tools and data plug into Claude. Detail: deep-mcp.html.

As of 2026, Desktop Extensions (.dxt files) make this a one-click install. No JSON editing.

Install:

  1. Grab the Google Drive Extension (.dxt) from the official MCP catalog.
  2. Drag it onto Claude Desktop → Settings → Extensions.
  3. Finish the OAuth flow (browser opens).
  4. Once connected, any session can reach Drive.

💬 Prompt

Search my Drive for a file titled "weekly report" dated today and summarize it.

🛠 Hands-on

  1. Install the Google Drive MCP.
  2. OAuth with your Drive account.
  3. Search and summarize one of your real files.
  4. Search for a fake filename to see how errors look.

✅ Checkpoint

  • Files in Drive are searchable.
  • File contents get summarized correctly.
  • Files without access return a clear error.

💡 Tip (troubleshooting)

  • Auth expired: re-auth from Extensions. Tokens last an hour to a day.
  • Permission error: check the OAuth scope includes drive.readonly.
  • Slow search: Drive API rate-limits, max 100 results per call.

Module 5 · Use Skills, then build one

50 min · ★★★ · Module 4

🎯 Goal

Use official Skills, then build your own with skill-creator, and have it auto-trigger in your next session.

📖 What

Skills are how you give Claude a specialist playbook. Each one is a SKILL.md plus helper files, loaded only when relevant (progressive disclosure), which keeps the context window clean.

Official skills include skill-creator (a skill that writes skills), pdf, docx, xlsx (office file handling), and mcp-builder (scaffolds MCP servers).

The body lives in SKILL.md:

---
name: mixi-weekly-report
description: Write the MIXI weekly report. Includes template + checklist.
---
# Weekly report format
## Template
...
## Required checks
- [ ] Top 3 wins this week
- [ ] Top 3 priorities next week
...

💬 Prompt

Use skill-creator to build a skill for writing the MIXI weekly report. Include the template and a checklist.

🛠 Hands-on

  1. Launch skill-creator.
  2. Pick one recurring task from your work (weekly report, code review, meeting minutes).
  3. Put template + checklist into the generated SKILL.md.
  4. Place it under .claude/skills/ or globally.
  5. In a fresh session, ask for that task and check the skill fires on its own.

✅ Checkpoint

  • The skill triggers automatically on the next session.
  • Your description is specific enough that related tasks reach for it.

💡 Tip

The description is what Claude reads to decide whether to use the skill. Writing when to use it AND when not to sharpens the trigger accuracy. More detail at deep-mcp.html — Skills.

Module 6 · Parallel work with subagents

40 min · ★★★ · Module 5

🎯 Goal

Spin up subagents inside one session so independent tasks run at the same time.

📖 What

Subagents are children a parent agent dispatches work to. They're invoked through the Task tool. Each subagent has its own context and runs in parallel.

What you gain:

  • Real parallelism — faster wall time.
  • No context pollution — the child's trace doesn't flood the parent.
  • Separate viewpoints in one pass (e.g. security, perf, readability as three subagents).

What you don't get:

  • Subagent-to-subagent chatter (info flows through the parent only).
  • Subagents finish with a summary handed back up.

💬 Prompt

This report has five chapters. Run one specialist subagent per chapter, in parallel. Each one returns "top 3 points + 1 risk" for its chapter.

🛠 Hands-on

  1. Prepare two independent tasks (frontend refactor ideas / backend refactor ideas).
  2. Tell the parent "run these two as subagents in parallel."
  3. Watch the parallel execution log.
  4. Verify the parent folds the two results into one summary.

✅ Checkpoint

  • One session gives you multiple viewpoints at once.
  • The parent context stays clean — no child noise.

💡 Tip

Subagents are for independent tasks only. Sequential steps (B depends on A) belong in the parent. Don't force parallel where the tasks need to talk.

Module 7 · Parallel branches with worktrees

45 min · ★★★ · Git basics

🎯 Goal

Use git worktree to check out multiple branches of one repo into different directories, then pair that with Parallel Sessions in Claude Code for true parallel development.

📖 What

Git worktree checks the same repo out to multiple directories with different branches in each.

git worktree add ../myproj-feature-a feature-a
git worktree add ../myproj-feature-b feature-b
git worktree list

Claude Code Desktop auto-creates worktrees when you start a new session (Parallel Sessions). You don't have to run git worktree yourself — sessions stay isolated either way.

💬 Prompt

I want three features in flight at once. Split them into worktrees, different tasks each: feature-auth / feature-billing / feature-ui.

🛠 Hands-on

  1. Pick an existing project.
  2. Pick two independent features.
  3. In Claude Code Desktop, start two Parallel Sessions.
  4. Assign one feature per session.
  5. Confirm changes in one don't bleed into the other.
  6. Clean up with git worktree remove <path> when you're done.

✅ Checkpoint

  • Worktrees are auto-generated.
  • Sessions don't interfere with each other's working tree.
  • Each branch commits cleanly on its own.

💡 Tip

Worktrees can't check out the same branch twice. If you need parallel work, each has to be on a different branch. Also, node_modules / vendor install separately per worktree, so the first run is slow.

Module 8 · Plan mode inside your Git workflow

30 min · ★★ · Module 3

🎯 Goal

Fold Plan mode into the daily Git loop (issue → implement → review → commit) and make Plan → Approve → Implement → Self-review a habit.

📖 What

Plan mode is Claude sketching a plan without touching files. Toggle with Shift+Tab or /plan.

Daily shape:

  1. Plan: paste the issue, let Plan mode propose an approach.
  2. Approve: agree with it, or push back and re-plan.
  3. Implement: flip to implementation mode.
  4. Self-review: your custom /review-code (from Module 3).
  5. Commit and push.

💬 Prompt

Fix this issue: [paste issue body]. Plan mode first, propose the approach. After I approve, implement it. After that, self-review with /review-code.

🛠 Hands-on

  1. Pull one real issue from your repo.
  2. Propose an approach in Plan mode.
  3. Refine over two or three rounds.
  4. Approve, move to implementation.
  5. Self-review with /review-code.
  6. Apply fixes and commit.

✅ Checkpoint

  • Plan → Implementation → Self-review is now automatic.
  • Aligning the plan up front cuts rework.

💡 Tip

Plan mode pays off on larger changes. One-line fixes don't need it. Rough test: three files or more, a new test file, or architectural impact — turn it on.

Module 9 · Hooks for automation (pre-commit format, etc.)

40 min · ★★★ · Module 2

🎯 Goal

Set up hooks so "prettier runs after every file edit" and "git status shows at session end" happen without you doing anything.

📖 What

Hooks are pre/post actions defined in settings.json. Lint and format don't need a manual invocation anymore.

Events you'll use:

  • PreToolUse — before a tool runs (block dangerous operations, add confirmations).
  • PostToolUse — after a tool runs (auto lint/format).
  • Stop — at session end (save summary, send notification).
  • UserPromptSubmit — on user input (logging, injection).

Example (.claude/settings.json):

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "npx prettier --write ." }
        ]
      }
    ]
  }
}

💬 Prompt

Set up a hook in this project that runs prettier after any file edit. Add it to settings.json.

🛠 Hands-on

  1. PostToolUse hook runs prettier and eslint --fix.
  2. Stop hook prints git status and the number of changed files.
  3. Edit a file, watch the hook fire.
  4. Make the hook fail once — check whether it blocks or just warns.

✅ Checkpoint

  • You don't type format commands anymore.
  • A change summary shows up at session end.

💡 Tip

Putting heavy work in hooks (full test suite) kills the pace. Keep hooks to light format and lint. Full tests belong in CI. Global settings live at ~/.claude/settings.json, project-specific at .claude/settings.json.

Module 10 · Wire one monthly task into Claude Code

60 min · ★★★ · Modules 1–9

🎯 Goal

Pick one real monthly task (monthly report, budget plan, code review, OKR check) and wire it into Claude Code using two or more of: CLAUDE.md + custom slash command + Skill.

📖 What

This module is the capstone. Combine at least two building blocks you've learned (CLAUDE.md / .claude/commands / Skills / MCP / Hooks) and automate one monthly job.

Design decisions:

  • When does it run? First of the month, last day, a specific date.
  • Input — where does data come from? Drive / GitHub / local files.
  • Output — where does it land? PR / Drive / Slack draft.
  • Review — who signs off the final version.
  • Update policy — if the template changes, who updates it.

💬 Prompt

I want the monthly engineering KPI report wired into Claude Code. Flow: pull last month's merged PRs from GitHub → format into the MIXI template → save draft to Drive. Combine CLAUDE.md + /monthly-report custom command + weekly-report skill.

🛠 Hands-on

  1. Pick one monthly task.
  2. Choose at least two building blocks (CLAUDE.md / slash command / Skill / MCP / Hook).
  3. Build and place each piece.
  4. Run the whole flow end to end once.
  5. Document who reviews, when it updates, and what to do when it breaks.

✅ Checkpoint

  • Next month's run goes through this flow unchanged.
  • Two or more building blocks are in play.
  • Human review points are clearly marked.

💡 Tip / Next step

Got one monthly task wired up? You've graduated intermediate. Team rollout, programmable integration via Agent SDK, Bedrock Japan residency, SSO / SCIM / audit — all in course-advanced.html.

Intermediate graduation checklist

Tick all ten and you're done with intermediate. The advanced course (Team / Enterprise / Agent SDK / Bedrock / org rollout) is waiting.

  • ☐ CLAUDE.md written for your own project
  • ☐ At least one custom slash command
  • ☐ One MCP server authenticated and connected
  • ☐ One custom skill built
  • ☐ Used worktree at least once
  • ☐ One hook configured
  • ☐ One monthly task automated
  • ☐ All six rules from deep-api-keys.html followed
  • ☐ Plan mode is part of your daily flow
  • ☐ Got one teammate using Claude Code
10/10 done: head to course-advanced.html. Team / Enterprise operations, programmable integration via Agent SDK, Japan-region deploys via Bedrock, SSO / SCIM / audit logs.

This page reflects what was current as of 2026-04-21. Claude Code ships often — cross-check against the official docs for anything specific.

Last verified: 2026-04-22
Sources