# The Claude Code practicum on GitHub: 14 hands-on tasks with automatic checks

Canonical URL: https://zero2vibecode.com/blog/claude-code-practicum-github
Date: 2026-10-22
Tags: claude-code, agents, git

A free, open practicum for the Claude Code: Pro Level course: 14 tasks on a small real project that you do in your own terminal with the real Claude Code, while npm run check tells you what passed. Finish all 14 and you get a code for the Claude Code Practitioner badge.

In the [Claude Code: Pro Level](https://zero2vibecode.com/learn/claude-code-pro) 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](https://github.com/FunFactoryDev/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](https://funfactorydev.github.io/claude-code-practicum/) 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](https://zero2vibecode.com/learn/claude-code/0-2-install-claude-code) of Claude Code from Zero.
- **Access to Claude**, as above.

No access to Claude yet? Take [the course in the browser](https://zero2vibecode.com/learn/claude-code-pro) 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](https://zero2vibecode.com/blog/claude-code-dev-containers) explains.

**Or locally.** Click **Use this template → Create a new repository** to get your own copy, or clone it:

```bash
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](https://zero2vibecode.com/learn/claude-code/3-1-claude-md) |
| 2 | Fix the failing test — plan first | [Permission modes](https://zero2vibecode.com/learn/claude-code-pro/1-1-permission-modes) |
| 3 | Test first, then the fix | [/rewind](https://zero2vibecode.com/learn/claude-code-pro/0-3-rewind) |
| 4 | Allow and deny rules | [Allow and deny rules](https://zero2vibecode.com/learn/claude-code-pro/1-2-allow-deny-rules) |
| 5 | A sandbox for commands | [The sandbox](https://zero2vibecode.com/learn/claude-code-pro/1-3-sandbox) |
| 6 | A guard hook for .env | [PreToolUse hooks](https://zero2vibecode.com/learn/claude-code-pro/2-1-pretooluse-hooks) |
| 7 | Your own skill | [Skill patterns](https://zero2vibecode.com/learn/claude-code-pro/5-2-skill-patterns) |
| 8 | A reviewer subagent | [Choosing a pattern](https://zero2vibecode.com/learn/claude-code-pro/4-2-choosing-a-pattern) |
| 9 | An MCP server for the project | [MCP servers](https://zero2vibecode.com/learn/claude-code/3-3-mcp-servers) |
| 10 | The status line | [Status line and output styles](https://zero2vibecode.com/learn/claude-code-pro/2-4-status-line-and-output-styles) |
| 11 | An unattended run with limits | [Unattended runs](https://zero2vibecode.com/learn/claude-code-pro/3-2-bounded-unattended-runs) |
| 12 | Claude in GitHub Actions | [GitHub Actions](https://zero2vibecode.com/learn/claude-code-pro/3-3-github-actions) |
| 13 | Finale: /goal and dedupeLinks | [/goal, /loop and Agent view](https://zero2vibecode.com/learn/claude-code-pro/3-4-goal-loop-agent-view) |
| 14 | The full cycle: from request to commit | [From request to commit](https://zero2vibecode.com/learn/claude-code-pro/5-4-request-to-commit) |

Task 6 is the guard from the [hooks post](https://zero2vibecode.com/blog/claude-code-hooks-pretooluse), 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](https://zero2vibecode.com/learn/claude-code-pro) — 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.json` is only for Codespaces.** It installs Node, Anthropic's official Claude Code feature, and `bubblewrap` with `socat` for the sandbox. On your computer it runs nothing.
- **Only what you can see runs:** `npm test`, `npm run check` and `npm 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](https://github.com/FunFactoryDev/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](https://zero2vibecode.com/learn/claude-code-pro/2-3-plugins) and [a shared team kit](https://zero2vibecode.com/learn/claude-code-pro/5-3-team-marketplace) 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](https://github.com/FunFactoryDev/claude-code-practicum), 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.
