Lesson 1 said each run sends only what's in the box. Here's the bigger idea behind that, and it's the one that explains most of what apps like claude.ai do.
The model is a pure function of its input. It has no state between calls, no access to your screen, your files or your last request. Each call delivers one token sequence; the model continues it. Everything it “knows” about the situation is in that sequence or in the weights, and the weights stopped changing at the training cutoff.
The Messages API is stateless by design. A chat app keeps the transcript and, on every send, posts the whole thing: an optional system string, then the messages array of alternating user and assistant turns. The model returns the next assistant turn. Turn two is turn one re-sent with two more messages on the end; the model reads it as one document.
Below is the second turn of a chat as the user sees it and as the request body reads. The system prompt is illustrative; real ones run to pages.
promptTurn 2 of a chat
What's my name?
You are a friendly assistant. Keep answers short. User: Hi, I'm Sam. Assistant: Hi Sam! What can I do for you? User: What's my name? Assistant:
Three things to notice in the right column.
The system prompt. The system field is where you set role, rules and output format. Post-training (lesson 5) saw that slot filled in its examples, so the model weights it above a user turn, which is the whole reason to use it rather than pasting instructions into messages.
The history is literal. The only reason the model can answer “Sam” is that turn 1 is in the array. Drop it and the model cannot know; nothing is cached on the model's side.
The budget is the context window. For Claude Haiku 5.5 it is 1M tokens (about 555k words), and everything in the request counts: system, every message, tool results, documents, tool definitions, plus the output and any thinking. Every response reports usage. Two cost notes: on Haiku 5.5, prompts over 100k tokens are priced higher, and prompt cache reads cost 10% of the input price, so a long stable prefix (system prompt, documents) should be cached rather than re-paid.
Everything a product calls memory, tools, search or “reading a file” is one mechanism: code outside the model puts text into the window before the call. Long chats “forget” because the app truncated or summarised the transcript. Cross-session memory is saved notes re-inserted into system or the first turn. A PDF is extracted text, or an image block, in a message. Once you see that, context engineering is the whole job: decide what goes in the window, in what order, at what cost.
The flip side is the most useful habit in this course. If Claude needs a fact, put it in the prompt. Try it: tell Claude something it can't know, then ask it to use that fact in the same message.
Run your prompt and the replies land here.
Now run the second half without the fact (just “suggest a name for his raincoat”). Claude will ask whose raincoat, or guess. Nothing from your last run reached it. That's not forgetfulness; it's the interface.