Curriculum · Claude Code / Desktop / Cowork
Seven phases, one running project. Each phase pairs a Claude capability with a milestone on TaskFlow — an AI-augmented task manager built with a Python backend and a TypeScript frontend — so the practice is never abstract.
github.com/nickhargreaves/ClaudePowerUser →A small task tracker with one twist — it uses the Claude API itself to triage new tasks. That gives the curriculum a real reason to touch every part of the lifecycle: an API to test, a UI to ship, an LLM call to observe, and a deploy target to watch in production.
Before any lesson: get the repo, the CLI, and terminal habits in order so later phases aren't fighting the environment.
Follow this phase yourself →What happened
uv installed for Python toolingbackend/ — FastAPI scaffold managed with uvfrontend/ — Vite + React + TypeScript scaffold/health wired end-to-end, verified live in the browserWhy it matters
Claude Code reasons about the repo it's sitting in. A clean, committed baseline means every later diff is legible — to you and to Claude.
The highest-leverage skill is giving Claude the right context before it writes a line — the habits that separate "prompt and pray" from deliberate collaboration.
Follow this phase yourself →What happened
CLAUDE.md — conventions, commands, gotchas specific to this repoTask data model and CRUD API before writing any code — plan approved, then implementedTaskStore, /tasks CRUD routes, 6 passing testsConcepts exercised
Milestone hit — a running FastAPI backend and a React shell that lists tasks from it, plus a CLAUDE.md you'd hand to a new teammate.
Where Claude Code stops being "a chatbot with file access" and becomes a configurable system shaped to the project.
Follow this phase yourself →What happened
/new-endpoint, a project skill that scaffolds a route + model + test + optional frontend wrapper togetherPostToolUse hook auto-runs ruff/oxlint on every edit — verified live by watching it silently fix an injected bugConcepts exercised
Milestone hit — the AI-triage endpoint exists, built using a self-authored skill.
Claude will tell you something works. This phase is about never taking that on faith.
Follow this phase yourself →What happened
/verify end-to-end in a live browser — found that headless automation auto-accepts native dialogs, a real gap worth knowingConcepts exercised
verify skill — driving the real flow, not just green testsMilestone hit — backend and frontend both have a real test suite, including a test that deliberately breaks the Claude call to check the fallback path.
Writing code is half the job. This phase wires Claude into the gate that decides whether code merges.
Follow this phase yourself →What happened
.github/workflows/ci.yml — backend and frontend jobs on every push/PR/code-review at medium effort found two confirmed bugs the new feature made more visible; kept out of scope and spawned as a follow-up instead of scope-creepingGH006), routed through PR #2 insteadConcepts exercised
/code-review at medium effortMilestone hit — no PR reaches main without CI green — verified by watching one actually get blocked, for real.
Best practice here is less about Claude-specific tricks and more about having Claude execute deployment discipline you'd want from any engineer: reproducible builds, secrets handled correctly, no surprise prod pushes.
Follow this phase yourself →What happened
taskflow-nh-api (FastAPI/uv) and taskflow-nh-web (Vite build + nginx) — live at taskflow-nh-web.fly.dev/api/* to the backend server-to-server over Fly's private network — no CORS, and /api/* behaves identically in dev and proddocker-compose.yml for local parity; CD triggers automatically on merge to main/code-review caught two real deploy-breaking bugs before they shipped (a config path bug, an unnecessary job dependency serializing two independent deploys)Concepts exercised
Milestone hit — the app is live at a real URL, deployed by a pipeline, verified working through a real backend restart — not just "the deploy succeeded."
Traditional observability plus one new problem: LLM calls fail silently, drift in latency, and cost real money per request.
Follow this phase yourself →What happened
flyctl logs directly — deliberately no hosted service, no webhook/code-review found six real bugs before any of it shipped, including a log line that could record status="ok" before the model's output was actually validatedWhat broke, and what happened instead
docker compose up was tried as a cloud-free alternative and genuinely failed too (Docker Desktop's VM wouldn't boot in this sandboxed environment) — abandoned after a real observed failure, not more retriesMilestone hit — the dashboard and alerting scripts correctly diagnosed a real, deliberately-injected incident from logs alone — verified live, not simulated on paper.
The capstone: build the kind of tool you've been using all along, and use orchestration patterns beyond single-agent chat.
Follow this phase yourself →What happened
mcp.server.fastmcp.FastMCP server, stdio transport, exposing TaskFlow's own REST API as six tools — a thin wrapper around the running backend, not a second storetaskflow_create_task call round-tripped and confirmed against the backend directly, and every error path (404, connection-refused, upstream-502) exercised on its ownThe plan said "Agent SDK" — that was wrong
The lesson goal says rebuild triage on the Claude Agent SDK. But that SDK is Claude Code itself, packaged as a library — a full coding-agent harness (file tools, bash, subagents, permissions) for open-ended work. TaskFlow's triage call is one forced-tool classification request, not an agent. That mismatch got caught and confirmed with a human before any code was written, and the rebuild happened on the Anthropic SDK's Tool Runner instead — the right next tier up, honestly assessed as a small real win, not oversold as a rewrite.
Milestone hit — TaskFlow tasks managed live from a real MCP client via a self-written server, and a scheduled agent (not a cron script) produces a weekly digest without being asked.
| Phase | Claude surface | Status |
|---|---|---|
| 00 Setup | CLI install, repo init | done |
| 01 Foundations | CLAUDE.md, plan mode | done |
| 02 Agentic workflow | Skills, subagents, hooks | done |
| 03 Testing | verify skill, TDD loop | done |
| 04 CI/CD | /code-review, branch protection | done |
| 05 Deployment | Guided deploy, risk narration | done |
| 06 Observability | Log-driven debugging | done |
| 07 MCP & agents | MCP server, Tool Runner, scheduled agent | done |