In the Claude Code: Pro Level course, every topic is practiced in a simulator right in your browser: nothing to install, no subscription, nothing to break. That is a good way to learn the mechanics. But there is always a step between “I got it in the simulator” and “I did it in my project” — a real terminal, the real Claude Code and real mistakes.
That step now has its own home. This last post in the series introduces the Claude Code practicum: 14 tasks on a small working project, checked automatically.
What it is
The practicum is a public template repository from FunFactoryDev that continues the course. Same topics, but you work in your own terminal with the real Claude Code, and after each task npm run check shows what passed and what did not. There is also a short practicum page with the path laid out step by step.
- Free. The tasks and the course cost nothing.
- Open. MIT license, and the check script is in the repository for you to read.
- Honest about the one paid part. You need access to Claude: a subscription (Pro or higher) or an API key.
What you need
- Node.js 20 or newer. Check with
node --version. - Claude Code, installed and signed in — covered in the install lesson of Claude Code from Zero.
- Access to Claude, as above.
No access to Claude yet? Take the course in the browser first. The simulator practices the same topics with nothing to install or pay, and the practicum will still be there.
Getting started
Fastest: in the browser. The repository opens in GitHub Codespaces with Node and Claude Code already installed, so nothing lands on your computer. Type claude and sign in. According to the README, the free Codespaces hours on a personal GitHub account cover the whole practicum. If the environment is rebuilt, you will need to sign in again — the exact problem the dev containers post explains.
Or locally. Click Use this template → Create a new repository to get your own copy, or clone it:
git clone https://github.com/FunFactoryDev/claude-code-practicum.git
cd claude-code-practicum
npm test # one test fails — on purpose, that is task 2
npm run check # 0 of 14 — for now
Then start claude in the project folder and work through the tasks in order. To check one task with a hint and a link to its lesson, run npm run check -- 6.
The project you work on
src/links.js is a small utility for links in Markdown: find them, bring them to one form, drop duplicates. src/cli.js prints the links from a file with npm run links. The code has two bugs and one unwritten function — those are tasks 2, 3 and 13. In task 14 you add a new feature, from plan to commit.
The 14 tasks
Each task maps to a lesson, so if you get stuck, the explanation is one click away:
| # | Task | Lesson |
|---|---|---|
| 1 | Project memory: CLAUDE.md | CLAUDE.md |
| 2 | Fix the failing test — plan first | Permission modes |
| 3 | Test first, then the fix | /rewind |
| 4 | Allow and deny rules | Allow and deny rules |
| 5 | A sandbox for commands | The sandbox |
| 6 | A guard hook for .env | PreToolUse hooks |
| 7 | Your own skill | Skill patterns |
| 8 | A reviewer subagent | Choosing a pattern |
| 9 | An MCP server for the project | MCP servers |
| 10 | The status line | Status line and output styles |
| 11 | An unattended run with limits | Unattended runs |
| 12 | Claude in GitHub Actions | GitHub Actions |
| 13 | Finale: /goal and dedupeLinks | /goal, /loop and Agent view |
| 14 | The full cycle: from request to commit | From request to commit |
Task 6 is the guard from the hooks post, done for real: the check feeds your hook a .env edit and expects exit code 2, then an edit to src/links.js and expects 0.
The completion code and the badge
Once all 14 pass, npm run check prints a completion code in the form CCP-XXXX-XXXX. Enter it on the course page — the field asks for the code from npm run check — and you get the Claude Code Practitioner badge. The code carries a checksum that catches typos. As the check script itself puts it, it is a reason to be proud, not a diploma.
Why it is safe to run
You are about to run Claude Code in a repository someone else wrote, so looking first is the right instinct. The README spells out what is there:
- No dependencies. No
npm install, not a single package from the internet. - No hooks, MCP servers or Claude settings. There is no
.claude/folder; you create all of that yourself, task by task. .devcontainer/devcontainer.jsonis only for Codespaces. It installs Node, Anthropic’s official Claude Code feature, andbubblewrapwithsocatfor the sandbox. On your computer it runs nothing.- Only what you can see runs:
npm test,npm run checkandnpm run links. The check reads project files and your~/.claude/settings.json(for task 10), changes nothing and makes no network calls.
A habit worth keeping
Before you run Claude Code in any repository you did not write, look at its .claude/settings.json, .mcp.json and .claude/hooks/. Hooks run with your rights.
A plugin kit to go with it
FunFactoryDev also publishes claude-kit, a plugin marketplace. Its English plugins are independent of each other, so you can take one or all three:
| Plugin | What is inside | Runs code on your machine |
|---|---|---|
en-kit | skills five-whys, tdd, review-diff, claude-md-review and a read-only code-reviewer agent | no, instructions for Claude only |
en-guard | a hook that keeps Claude from editing .env files and lockfiles | yes, node before every file edit |
en-notify | a hook that shows a desktop notification | yes, node on every Claude Code notification |
You add the marketplace with /plugin marketplace add FunFactoryDev/claude-kit and install a plugin with, for example, /plugin install en-kit@claude-kit. The README is candid about the limits: en-guard does not catch shell commands such as echo X >> .env — it guards against an accidental edit, it is not a sandbox. And it asks you to read the hooks before installing, because they run with your permissions. The course lessons on plugins and a shared team kit cover how marketplaces work.
Frequently asked questions
Is the practicum paid?
No. The tasks and the course are free. The only paid part is access to Claude itself: a subscription (Pro or higher) or an API key.
Can I do it without a Claude subscription?
Not the practicum itself, since it runs the real Claude Code. The browser course practices the same topics in a simulator with nothing to pay.
How do I know a task is done?
Run npm run check for all tasks, or npm run check -- 6 for one task with a hint and a link to its lesson.
Where to start
Open the practicum repository, run npm run check to see the 0 of 14, and start on task 1. If a task stops matching what you see in Claude Code, the README asks you to open an “Outdated lesson” issue — Claude Code changes fast, and that is how the tasks keep up.