Day 1: From chat to spec

3 Days of Spec-Driven Development · Day 1 of 3 · six lessons on four pages, four exercises, a wrap-up · about three hours: 153 minutes including the opener

You delete the entire system prompt, and then you bring it back line by line.

Boris Cherny, on how Claude Code's own instructions were cut, reported 2026-08-05. Today you do the small version of that to a CLAUDE.md.

Today you stop asking and start assigning. The first half is the mechanical shift: what an agent has that a chat session does not, a prompt that is an assignment rather than a question, and plan mode, which lets you reject a change before it exists — ending on a seeded bug taken from red to green. The second half turns that prompt into a file: a spec with numbered criteria a command can fail, then a cut of the lane's roughly 180-line CLAUDE.md to under 40 lines.

Watch this first

Opener · 10 min

Andrej Karpathy: From Vibe Coding to Agentic Engineering w/ Stephanie Zhan

Sequoia Capital, 2026-04-29. Watch the chapter From Vibe Coding to Agent Engineering, 15:46 to 25:17.

What to listen for. The moment the speaker stops describing a model that answers and starts describing one that acts: tools, a working directory, and a loop that runs until something says it is done, and what the human's job becomes once the machine can run commands — reviewing a diff, owning the finish line. Lesson 3 has the keystrokes.

Before you start

You never edit sandbox/ itself. Day 1 works in day1-work, a copy of your lane that Exercise 1 makes at the course root; start Claude Code inside it, because every command and every path on every Day 1 page is written from inside it. Lessons 1 and 2 need no folder; Exercise 1 creates day1-work. Two kinds of block run from the course root instead: the setup blocks of Exercises 1 to 3, which leave you in day1-work, and the end-of-day cleanup at the foot of Exercises 1 and 4, rm -rf day1-work. Starter files sit one level up, at ../day-1-from-chat-to-spec/starter/…, and your answers one level up too, in ../work/, which nothing on a Day 1 page deletes. Day 2 and Day 3 write there too, so it stays until the Day 3 wrap-up removes it when you are done for good.

Below is the command that decides in your lane. Exercise 1 runs it inside day1-work before anything changes, so that when Day 1 turns a test red on purpose you know where the red came from.

Swift lane
swift test

A green run from this machine on 2026-09-22 carries this verdict for the whole suite and its count line:

Test Suite 'All tests' passed at ….
	 Executed 34 tests, with 1 test skipped and 0 failures (0 unexpected) in … seconds

The skipped test is the seeded bug; Exercise 2 turns it on.

Kotlin lane
./gradlew test

A green run from this machine on 2026-09-22 carries Gradle's verdict:

BUILD SUCCESSFUL in …
5 actionable tasks: 5 executed
Consider enabling configuration cache to speed up this build: …

This lane gates the seeded bug's test on an environment variable, so it does not run and the summary carries no test counts; Exercise 2 turns it on.

The reset is the same everywhere: delete day1-work, copy the lane again, step back in. It uses no git, so a download works as well as a clone, and it reaches nothing outside the copy: the shipped sandbox/ and your ../work/ answers survive. Quit Claude Code first, run it from inside day1-work, then start Claude Code there again.

Swift lane
cd .. && rm -rf day1-work && cp -R sandbox/swift day1-work && cd day1-work
Kotlin lane
cd .. && rm -rf day1-work && cp -R sandbox/kotlin day1-work && cd day1-work
What today needs

The day in order

Nine pages after the video, in this order. Lessons 1 and 2 share a page, as do Lessons 4 and 5, so the six lessons take four pages. Exercise 3 follows Lessons 4 and 5 and uses both halves. The day's first change is LEDGER-7, the seeded bug; Exercise 3's Change B, the pending-aware daily summary, is the second, and Day 3 has a Change C.

Ticks need JavaScript and stay in this browser.

Starter files

Today's starter folder is day-1-from-chat-to-spec/starter/ at the course root, one level up from day1-work. Exercise 1 makes that copy; each exercise then copies the starter file it needs when it needs it, so there is nothing to install now.

Videos and reading

Every video sits on the page that uses it; none is required to finish an exercise:

Sources