Claude CodeClaude Code 2.1 · macOS, Linux, Windows
1
Curious builder0 XP earned · 300 to level 2
0 daysFinish a lesson to begin
Badge collection0 of 6 unlocked
31 small wins to finish your pathNext lesson

What you are going to build

Claude Code is a program that reads your project, changes it, runs your commands and checks its own work. This course is about making it do that the way you want, on a project you can see all of.

Most tutorials show you the tool answering a question. That part takes ten minutes to learn. What takes longer, and what decides whether you can leave it alone with real work, is everything around the answer: what it is allowed to do, what it remembers, what it repeats, and how you find out what it did.

The project

One small repository, used from the first lesson to the last. A link shortener: it turns a long URL into a short code and back again. Three files, no framework, and a bug nobody has noticed yet.

Press Run on the panel beside this. It is the project's own demo, and it runs in your browser, so you can read what it does before you read anything about Claude Code.

The bug, in one run

Two links are saved, the first is deleted, and a third is added. Watch the last two lines.

Example
import shorten
import store

first = shorten.shorten("https://krishnaik.in/courses")
second = shorten.shorten("https://krishnaik.in/blog")

print("first :", first, "->", shorten.expand(first))
print("second:", second, "->", shorten.expand(second))

store.remove(first)
third = shorten.shorten("https://krishnaik.in/about")

print("third :", third, "->", shorten.expand(third))
print("second:", second, "->", shorten.expand(second))

The third link was given the code b0, which the second link already had. Saving it quietly replaced somebody else's link. Nothing crashed and nothing warned you, which is the kind of bug worth having in a teaching project.

You will meet this bug again several times: when Claude finds it by searching, when it proposes tests for it before writing any, when a run with nobody watching fixes it in four turns, and when you do it again yourself in the last lesson.

Where this ends up

By the last lesson the same repository carries all of this, and every piece of it is something you added on purpose:

WhatWhy it is there
A CLAUDE.mdSo the rules of this project do not have to be repeated every session
A slash commandOne line instead of a paragraph you keep retyping
A skillA procedure Claude follows the same way every time
A hookA rule that is code, not a request, so it cannot be talked out of
A subagentWork that happens without filling up your conversation
A review in CISomebody reading the change when you are not
Everything in this course, and where it is going
What it isa loop with toolsyour files, your shellsearch, not an indexSteering itplan before it writesrewind what it didkeep the context cleanTeaching itCLAUDE.mdslash commandsskillsHolding it to rulespermission modesallow and denyhooks that cannot be argued withMore than onesubagentsworktreesbackground sessionsWithout youheadless runsreview in CIroutinesClaude Code

How to read this course

Lessons are short and each adds one idea. Terminal blocks are real: every one was captured by running the command against this repository, and the output is what came back. Where a moment happens inside the interface and cannot be captured, the page says so and describes it rather than inventing a screenshot.

What you need
You need Claude Code installed to follow along, and a paid Claude plan or an API key to run it. The next lesson covers installing. The project itself runs in the browser panel with nothing installed at all.
Try it yourself
  • Run the panel, then change the second URL and run it again.
  • In shorten.py, read next_code and work out why deleting a link causes the collision.
Back toAll frameworks

Every expert started right here.