BLOG / 01AUG 12, 2026 · 53 MIN READ

The Pleasure of Finding Rewards

What reinforcement learning actually is, explained from the ground up

A long-form tutorial. No machine learning background assumed — only curiosity and a tolerance for thinking hard about simple things. Every section ends with instructions for drawing its figure, because if you can't draw the picture, you don't understand the idea yet.

modiqo

A Note on How We're Going to Do This

There's a story about Richard Feynman that I think about a lot. A colleague asked him to explain, in simple terms, why spin-½ particles obey Fermi-Dirac statistics. Feynman said, "I'll prepare a freshman lecture on it." A few days later he came back and said: "I couldn't do it. I couldn't reduce it to the freshman level. That means we don't really understand it."

That's the standard we're going to hold ourselves to. Reinforcement learning — RL — has a reputation for being the most mystical corner of modern AI. People say things like "the model learns from experience" and wave their hands, and the hands wave right past the part where anything actually happens. Papers bury the idea under Greek letters. Twitter threads bury it under vibes.

But here's the secret: RL is not mystical. It is one idea, applied with great stubbornness:

Try things. Notice what worked. Do more of that.

That's it. That's the whole field. Everything else — policies, gradients, advantages, GRPO, all of it — is engineering built to make that one idea work when "trying things" costs millions of dollars of GPU time and "noticing what worked" turns out to be shockingly hard.

We're going to build the whole machine up from parts. First the nouns — agent, harness, environment, the pieces on the board. Then the verbs — rollouts, rewards, gradients, the moves those pieces make. Then the actual algorithms people use in 2026, like GRPO and GEPA. Then the hard part nobody warns you about: what to do when there's no answer key. And finally, convergence — how you know the learning is done, and the strange fact that in RL, the learning signal dies at the exact moment you succeed.

One rule for the whole trip: any time an equation shows up, it must also be said in plain English, and the English version is the real one. The equation is just shorthand for people in a hurry.

Let's go.


You Cannot Learn to Ride a Bicycle From a Lecture

Start with something you already know deeply, even if you've never said it out loud.

Nobody ever learned to ride a bicycle from a book. You can read about balance, about counter-steering, about gyroscopic effects. It will not help you. The only way to learn is to get on the bicycle and fall off it, repeatedly, until some part of your nervous system — a part that doesn't speak English and never read the book — figures out the correlation between what you did with your body and whether you ended up on the ground.

Notice three things about that process, because they are the entire subject of this essay:

First, nobody told you the right answer. There was no teacher standing there saying "at timestamp 3.2 seconds, lean 4 degrees left." The world just let you fall or not fall. The feedback was brutally compressed: one bit, pavement or no pavement.

Second, the feedback came late. When you hit the ground, the mistake wasn't the hitting — it was something you did with the handlebars two full seconds earlier. Somehow your nervous system solved the puzzle of which earlier action deserved the blame. This puzzle has a name in RL — the credit assignment problem — and it is the deepest problem in the field. Hold onto it. We'll meet it again and again.

Third, you got better anyway. Despite feedback that was late, rare, and one bit wide, some update happened inside you, and tomorrow's attempt was better than today's.

Machine learning people took this loop, formalized it, and pointed it at neural networks. Supervised learning — the other big paradigm, the one that built most of what you've seen AI do — is learning from a book: here are ten million examples of the right answer, imitate them. RL is learning from the bicycle: here is a world, here is a goal, go fall down until you stop falling down.

The whole rest of this essay is the anatomy of that loop. And the loop, at ten thousand feet, looks like this: an agent acts on an environment; the environment eventually emits a reward; the reward is used to compute an update; the update changes the agent; repeat.

Figure 1: The Loop
FIGURE 1The Loop

BOOK DIVISION

The Nouns — What the Pieces Are

The Agent Is a Model Plus a Harness

Now let's take the pieces apart one at a time, and let's be more careful than most explanations bother to be, because the sloppiness usually starts right here, with the word "agent."

When people in 2026 say "agent," they mean a model plus a harness. These are two different things, they are built by different people, and confusing them causes real engineering mistakes. So let's split them properly.

The model

The model — the LLM, the neural network — is a function. A big one, but just a function. You put text in, you get text out. More precisely: you put text in, and you get a probability distribution over what the next little chunk of text (a "token") should be. The model looks at everything so far and says: "next token: 31% chance it's the, 12% chance it's a, 0.9% chance it's wait, ..." across its entire vocabulary. Sample a token from that distribution, append it, and ask again. That's all text generation is: this loop, run thousands of times.

Inside the function are the weights — billions of numbers that determine how input maps to output. I want you to picture the weights as an absurd wall of knobs. A radio has five knobs. A recording studio console has five hundred. A frontier language model has hundreds of billions, and every single one is just a number you could, in principle, reach in and change. Every capability the model has — arithmetic, French, sarcasm, Python — is stored in nothing but the settings of those knobs. There is no other place for anything to be stored. Remember the knobs. In Chapter 6 they become the entire story.

The harness

But a model, by itself, can't do anything. It's a brain in a jar. It maps text to text and that is the complete list of its powers. It cannot run code, click a button, read a file, or check its own answer.

The harness is everything you wrap around the model to turn it into something that acts. The harness is a perfectly ordinary program — no magic in it — that runs a loop like this: send the model its instructions and the situation so far; read the model's reply; if the reply says, in some agreed format, "run these tests," then actually go run the tests; take whatever came back — output, error message, whatever — paste it into the conversation; and ask the model again. Around and around, until the model says it's finished or the harness pulls the plug.

The harness decides which tools exist, how results get formatted, what stays in the context window when the conversation gets long, how many turns are allowed, when to give up. If the model is the brain, the harness is the body: eyes, hands, and the rulebook.

Here's why the distinction pays rent. When your agent fails, you must diagnose which part failed. Did the model reason badly? Or did the harness feed it a 40,000-line log file that drowned the one line that mattered? The first is a model problem — you fix it with training, which is what the rest of this essay is about. The second is a harness problem — you fix it with ordinary software engineering, this afternoon, for free. People waste enormous amounts of money doing RL to paper over harness bugs. Don't be those people.

Agent = model + harness. The thing that thinks, plus the thing that lets it act.

Figure 2: The Agent, Dissected
FIGURE 2The Agent, Dissected

The Environment Is a Task Plus a World Plus a Scoring Rule

Now the other side of the loop. The word "environment" sounds like scenery, but in RL it's a precise, three-part object: a world, a task, and a scoring rule. An environment is a world with a question attached and a way to grade the answer.

The world

The world is the stuff the agent can touch, and the rules for what happens when it does. For a coding agent: a repository and a shell, where the rule is "if you run pytest, you get pytest's real output." For a browsing agent: websites. For a customer-service agent: a ticketing system, a refund API, and a customer. The world doesn't care about the agent. It has no opinion about the task. Type rm -rf / and the world deletes the files, cheerfully. It's physics, not a teacher.

The task

The task is the question: "fix this failing test," "book me a window seat to Denver," "find what's draining this battery." Same world, thousand different tasks — that's important, because when we get to training, tasks are the unit you need in bulk. A world is expensive to build once; tasks are what you need ten thousand of.

The scoring rule

The scoring rule — call it the verifier, the reward function, the grader; the names all mean the same thing — is the piece that looks at what the agent did and pronounces a number. Did the test pass? Is the booked flight actually to Denver, actually a window seat? This number is the reward, and it is the only channel through which "better" and "worse" enter the entire system. Nothing else in the loop knows what good means. Not the model, not the harness, not the world. Only the scoring rule — which means every flaw in your scoring rule is a flaw in what your agent will become. We'll spend all of Part III on the ways this goes wrong, because this is where RL projects actually die.

One more thing, and it's worth underlining: an environment is not just for RL. The same object — world, task, scoring rule — is also an eval (run agents in it and compare scores), a synthetic data generator (keep the high-scoring transcripts, use them as training examples for ordinary supervised learning), and a test bed for harness engineering (change the harness, rerun, did the score move?). Build the environment once, use it four ways. People who think "environment = RL thing" build them too late and too small.

Figure 3: The Environment, Dissected
FIGURE 3The Environment, Dissected

The Rollout — How the Pieces Actually Interact

We have an agent. We have an environment. Now put them in a room together and watch, closely, because this interaction — called a rollout, or an episode, or a trajectory; everyone says rollout — is the atom of reinforcement learning. Everything downstream is built out of rollouts the way matter is built out of atoms.

Here is one rollout, slowed way down. The task: fix a failing test in a Python repo.

The harness composes the opening message — instructions, task, tool list — and sends it to the model. The model emits tokens: "Let me look at the failing test first," then a tool call to show the test file. The harness executes it — for real, in the world — and pastes the result into the conversation. The model reads it, thinks, asks to see the source file. Harness obliges. The model spots it: an off-by-one, range(len(items) - 1), quietly skipping the last item. It emits an edit. Harness applies it. Model asks to run the tests. Harness runs them: 4 passed. The model declares done; the harness stops the loop; the scoring rule checks the tests independently and pronounces: reward = 1.0.

Now the observations that matter — three of them, and the third one is the heart of everything.

First: the rollout is a transcript. When it's over, what exists? A text record — every message, every tool call, every result, every token the model emitted, and one number stamped at the end. Rollouts are data. Concrete, storable, inspectable data. When you hear "the model learns from experience," the experience is a pile of these transcripts. Nothing loftier.

Second: nothing learned anything yet. The weights — those billions of knobs — are byte-for-byte identical before and after the rollout. Untrained, the model would make the same mistakes tomorrow. A rollout is pure experience collection. Learning is a separate step, done later, offline, by the update machinery of Part II. RL people say it this way: there's acting and there's learning, and they happen at different times. You act all day; you learn at night. (Sound familiar?)

Third — and this is the heart of it: one number must judge a thousand decisions. That rollout contained maybe forty decisions that mattered: which file to open first, whether to reread before editing, which fix to apply, whether to verify. Some choices were brilliant. Some were wasteful. One might have been a lucky guess. And the feedback for all of it, the entire channel through which "better" and "worse" flow back, is: 1.0. One number for the whole performance — like judging a chess game only by who won, with no commentary on any move. Was move 23 good? All we know is that the player won. Maybe move 23 was terrible and they won anyway.

This is the credit assignment problem from the bicycle, now in its adult form. Which of the forty decisions caused the 1.0? The astonishing thing about modern RL is that it never answers this question directly. It has no idea which move deserved credit. Instead it uses a statistical bludgeon: collect many rollouts, and nudge the model toward everything it did in winning transcripts and away from everything in losing ones. The wasteful step that appears in winners and losers equally gets no net push. The good decision that keeps showing up in winners gets reinforced, on average, over thousands of samples. Not because anything understood the move — because the noise cancels and the signal doesn't. Keep that phrase; it's the engine under everything in Part II.

Figure 4: One Rollout, as a Filmstrip
FIGURE 4One Rollout, as a Filmstrip

BOOK DIVISION

The Verbs — How Learning Actually Happens

The Policy Is Just the Weights (Wearing a Fancy Name)

Time for RL's most intimidating word, which turns out to name something you've already met.

The policy is the agent's way of choosing what to do in each situation. That's the whole definition: situation in, choice out. Your bicycle-riding policy is whatever your nervous system does between "feeling of leaning left" and "steering correction." Written as math, it's π(action | state) — "the probability the policy picks each possible action, given the situation" — and yes, RL people use π for "policy" for no better reason than the p sound. It is not the circle constant. It's a function with a Greek nickname.

Now — for an LLM agent, what chooses the next action? The model does. Given the transcript so far (the state), the model produces a probability distribution over the next token (the action). And what determines the model's output? The weights. Nothing else. Same weights, same probabilities, every time.

So follow the chain: the policy is the choosing-machinery; the choosing-machinery is the model; the model is its weights. Therefore:

The policy is the model weights. The knob wall from Chapter 2 — that's the policy. "Improving the policy" means, physically, changing the numbers stored in those knobs so the probability distributions shift toward better choices. When DeepMind says "we trained a policy to play Go" and a lab says "we ran RL on our model," they're describing the same act: adjusting knobs so good actions become more probable.

One subtlety earns its keep before we move on: the policy is probabilistic, and during training this is a feature, not a bug. Faced with the failing test, the model doesn't have one fixed response; it has a distribution — maybe 60% of samples read the test first, 30% read the source first, 10% try something odd. Run the same task five times, get five different transcripts. This built-in dice-rolling is called exploration, and it's where all learning material comes from. A deterministic agent tries one path forever and learns nothing new about the other paths. A probabilistic one occasionally stumbles into a better way of doing things — and once it has stumbled, the update machinery can grab that lucky transcript and make it less lucky and more habitual. In RL you can't learn from an action you never tried. The dice are the tuition.

Figure 5: The Policy Is the Knobs
FIGURE 5The Policy Is the Knobs

Gradient Descent — Rolling Downhill in a Billion Dimensions

So learning means adjusting knobs. Billions of them. Adjust them which way? This chapter is the answer, and it's the same answer that powers every neural network on earth, so if you get this, you get deep learning, not just RL.

Start with a game. I put you on a vast hilly landscape, blindfolded. Your job: get to low ground. You can't see. What can you do? You can feel the slope under your feet. So: sense which direction is downhill, take one modest step that way, and repeat. Feel, step, feel, step. Thousands of times. You will walk down into a valley — no map, no sight, using only local slope.

Now the dictionary that turns the game into machine learning, one entry at a time. The landscape: every possible setting of the knobs is a place. With two knobs, a place is a point on a plain — knob one is your east-west position, knob two north-south. With billions of knobs it's a billion-dimensional space, which nobody can picture, so everybody pictures rolling hills and that's fine. The altitude at each place: how badly the model performs with those knob settings — the loss. High ground, bad model; low ground, good model; somewhere out there is a valley where the loss is low and the model does what we want. The slope under your feet: the gradient — for each knob, "if I turned just this knob up a hair, would the loss rise or fall, and how fast?" The gradient is that answer for all knobs at once — a billion-entry arrow pointing uphill. The step: move every knob a small amount against its gradient entry. Downhill. The step size: the learning rate — too big and you overshoot valleys and rattle around; too small and the walk takes forever. And the whole procedure — feel, step, feel, step — is gradient descent.

The miracle you should refuse to gloss over is the feel step. How can you possibly know, for each of a billion knobs, which way to turn it — without trying each one? Testing knobs one at a time would take a billion forward runs per step. The answer is an algorithm called backpropagation, and here is the honest cartoon of it: a neural network is a long chain of simple operations, each one so simple that its individual effect on the final output is basic calculus. Backprop runs the chain backward from the loss, multiplying these local effects together (the chain rule, industrialized), and out comes the exact gradient for every knob in roughly the cost of one extra pass. Not a billion experiments — two passes, forward and back. That's the trick that makes training possible at all. Everything else in deep learning is commentary.

For contrast, here's gradient descent in its natural habitat — supervised learning, where there's an answer key. Show the model an example: input "the capital of France is", correct answer "Paris." The loss is "how little probability did you put on Paris?" Backprop the gradient, step the knobs, and probability shifts toward Paris. Millions of repetitions later, the model has rolled downhill into knowing a great many things. Clean, right? The loss compares output to a known correct answer, so the landscape is well-defined everywhere.

Now watch the RL problem sabotage this. Our agent fixed the test and scored 1.0. The reward came out of the environment — pytest ran, in a shell, in the world. To feel the slope, backprop needs to trace influence backward through every step between knob and loss. Trace it: knobs → token probabilities → a dice roll picks a token → pytest executes → reward. The chain breaks twice. You cannot take the derivative of a dice roll, and you cannot take the derivative of pytest. The world is not made of the smooth simple operations backprop feeds on. The slope-feeling trick — the one miracle that makes deep learning work — dies at the boundary of the model.

So are we stuck with a beautiful downhill-walker and no ground to walk on? We are not, and the escape — one of the sharpest ideas in the field — is the next chapter. The trick, in one sneaky sentence: if you can't differentiate through the world, find a quantity that lives entirely inside the model, is differentiable, and whose downhill direction happens to point at higher reward.

Figure 6: The Blindfolded Walk
FIGURE 6The Blindfolded Walk

The Policy Gradient — Make Good Luck More Likely

Here's where RL earns its keep. We want to increase reward, but we can't differentiate through the world. The escape is so simple that when you first see it you'll suspect it's a scam. It isn't — but its flaw is real, and the fix for the flaw is where GRPO comes from. Watch closely.

The trick: don't differentiate the reward. Differentiate the probability of what you already did, and let the reward decide the direction.

Concretely. The agent ran a rollout and scored well. Every token it emitted along the way — every choice — was something the model assigned a probability to. Those probabilities live entirely inside the model, upstream of the dice roll, upstream of pytest. The chain from knobs to probabilities is unbroken, smooth, differentiable — backprop's home turf. So we can absolutely answer this question: "which way do I turn each knob to make the model MORE likely to say what it just said?"

That's the move. Reward was high? Turn the knobs so that entire transcript becomes more probable. Reward was low? Turn them so it becomes less probable. We never differentiate the world — we just use the world's verdict as a coefficient, a signed volume dial on an update we already know how to compute. In pseudo-math:

nudge = reward × (gradient of log-probability of what the agent did)

— and read it as: "the gradient part says which way makes this behavior more likely; the reward out front says how hard, and whether to push toward or away." (Why log of the probability? For a rollout, sequence probability is thousands of per-token probabilities multiplied together — an absurdly tiny number that underflows any computer. Logs turn the product into a sum, and pushing up the log pushes up the probability. An engineering convenience with a fancy name: the policy gradient. This, plus decades of refinement, is the "REINFORCE" family — and GRPO, PPO, and friends are all its descendants.)

Squint and you'll see the bicycle again. Wobble, don't fall, and the nervous system stamps "more of that" on whatever it just did. No physics was differentiated. Behavior that coincided with success got reinforced — literally, re-in-forced, made stronger.

But now be suspicious. I said "make the entire transcript more probable." The winning rollout contained forty decisions — the sharp deduction and the pointless re-reading of a file it had already seen. Reward 1.0 cranks up all of it, brilliance and stupidity alike, because one number judges the whole performance — credit assignment, back again, still unsolved. The answer is the one from Chapter 4, now made mechanical: averaging over many rollouts. The pointless re-read occurs in winners and losers about equally; its nudges come with positive signs from winners, negative from losers, and cancel. The sharp deduction shows up mostly in winners; its nudges pile up all-positive. Over thousands of rollouts, noise cancels, signal accumulates. No component of the system ever knows which move was good. The statistics know.

And then there's a second flaw, sneakier, and this one sets up everything in the next chapter. Suppose your environment hands out rewards on a 0-to-100 scale and the agent is mediocre: rollouts score 70, 72, 69, 74. Every reward is a positive coefficient — so the update makes every rollout more probable, the 69s almost as enthusiastically as the 74s. Technically the 74 gets pushed hardest, so there's a whisper of preference in the right direction, but it's buried under a roar of "everything you did was great!" The learning signal isn't the roar — it's the differences: 74 was good for this model on this task, 69 was bad, relative to what it typically does.

So subtract the typical. Compute a baseline — expected reward, here about 71 — and use reward minus baseline as your coefficient. Now 74 becomes +3 (push toward), 69 becomes −2 (push away), and the roar is gone; only the differences remain. This quantity has a name you now fully understand: the advantage. How much better was this rollout than what we'd have expected anyway? Grade on a curve, push on the curve, not the raw score.

Every practical policy-gradient algorithm is, at heart, a scheme for getting a good baseline cheaply. And the simplest scheme of all — so simple it's almost embarrassing — is the reigning champion.

Figure 7: The Detour Around the World
FIGURE 7The Detour Around the World

GRPO — Grading on a Curve, Literally

Everything is now on the table: policy gradients, baselines, advantages. GRPOGroup Relative Policy Optimization, introduced by the DeepSeek team and, by 2026, roughly the default way people do RL on language models — is just one clean answer to the question Chapter 7 left dangling: where does the baseline come from?

The old answer (an algorithm called PPO, the previous champion) was: train a second neural network, a "value model," whose whole job is predicting the expected reward from any situation, and use its prediction as the baseline. It works. It also means training two giant networks at once — double the memory, double the plumbing, and a baseline that's itself a possibly-wrong learned guess.

GRPO's answer: don't predict the typical result. Measure it. You want to know the expected reward for this task? Run the task several times and take the average. That's the whole idea. Really.

Here's the recipe, concretely. Take one task — say, our failing-test repo. Instead of one rollout, sample a group — say 8 rollouts of the same task from the same model (remember Chapter 5: the policy is probabilistic, so you get 8 different transcripts for free). Score them all: 1, 0, 1, 1, 0, 0, 1, 0 — four fixed it, four didn't. Mean = 0.5. That mean is the baseline — not predicted by an auxiliary network, just measured, on this exact task, from this exact model, right now. Each rollout's advantage is its reward minus the group mean (then divided by the group's standard deviation to keep the numbers in a tame range regardless of the reward scale — here that makes each winner +1 and each loser −1). Then the standard policy-gradient move: push toward the four winning transcripts, away from the four losers, each with strength |1|. Delete the value model entirely. Half the memory, half the machinery, and the baseline can't be wrong because it isn't a guess.

The name decodes itself now: Group — a batch of attempts at the same task; Relative — each attempt judged only against its groupmates, not any absolute standard; Policy Optimization — the usual knob-turning. Grading on a curve, where the curve is set by eight clones of yourself.

And "relative" is doing more work than it looks. A raw reward of 0.5 means nothing by itself — is that good? On an impossible task, heroic; on a trivial one, embarrassing. The group answers instantly, because the group mean is the difficulty gauge for this task at this moment: score 1.0 while your seven groupmates average 0.2 and you're a hero, pushed hard; everyone scores 1.0 and — pay attention here — every advantage is exactly zero, and nothing is learned at all. Reward minus mean: 1 − 1 = 0, eight times. No differences, no signal, no update. Same if everyone fails. GRPO learns nothing from unanimous groups. All signal lives in the split — some succeed, some fail, and the contrast between siblings is the information. File this fact away with your other treasures; in Chapter 12 it turns out to be the master key to convergence, curriculum design, and why RL training dies at the exact moment it succeeds.

Two footnotes for honesty, then we're done here. Real GRPO carries two safety devices worth knowing by nickname: a KL penalty — a leash to a frozen snapshot of the pre-RL model, adding a cost for drifting too far, so the model can't wander into gibberish that happens to score well — and clipping, a cap on how hard any single batch can shove the knobs (inherited from PPO, and the "trust region" idea before that: take small steps, because your rollouts were sampled from yesterday's policy, and the further you move the staler that evidence gets). And the wider algorithm zoo — RLOO, ReMax, DAPO, Dr. GRPO, a new acronym roughly monthly? Overwhelmingly: policy gradient + a cheap baseline + stability tricks. Different curves to grade on, same one idea. You now have the frame; new acronyms should take you about ninety seconds each.

Figure 8: GRPO in One Picture
FIGURE 8GRPO in One Picture

Rote — The Other Force on the Knobs

I have to stop and confess something, because Feynman's rule is that you never hide the seams of your own thinking. For eight chapters I've been telling you a story with a hole in it, and the hole has a name so old-fashioned that machine learning people are embarrassed to say it out loud: rote.

Here's how I noticed the hole. Go back to Chapter 1, where I was so pleased with myself: you cannot learn to ride a bicycle from a book. True! But now ask the question I carefully didn't ask: could you learn to ride a bicycle if you had never seen one? If you didn't know what a bicycle was, that the pedals turn, that humans balance on two wheels at all? You'd flail randomly — and here's the killer, in the vocabulary you now own: every group would come back unanimous. Eight attempts, eight failures, mean zero, advantages zero, nothing learned. Chapter 8's boxed red warning, applied to the whole of existence. RL cannot climb out of total ignorance, because its only fuel is the difference between attempts, and a model that knows nothing fails uniformly.

So something must come before the bicycle. That something is the book after all — and the book never left the story; I just kept it offstage. Let's bring it on properly.

Rote is supervised learning — pretraining and its little sibling SFT (supervised fine-tuning). And the first thing to see is that mechanically, it is not a different machine from what we built in Chapter 6. Same knobs. Same loss. Same backprop, same blindfolded walk downhill. There is exactly one difference, and it's not in the machinery — it's in where the target comes from. In rote, someone hands you the answer: "the capital of France is →" and the correct next token, Paris, sits right there in the data. Push probability toward it. No dice roll, no environment, no reward — the chain from knobs to loss never leaves the model, so backprop crosses it end to end, no detour needed. In RL, nobody hands you anything; you act, the world grades you, and the advantage decides the direction of the push. Same knobs, same downhill walk — different source of "which way is down." Rote pushes toward the given answer. RL pushes toward your own lucky answer.

Put that way, the two stop being rivals and snap into a division of labor, and I want to walk through the three places rote is quietly load-bearing in everything we've built — because once you see them, you'll realize the RL story was resting on rote the whole time, like a tablecloth trick in reverse.

First: rote sets the starting point of the walk. Chapter 5 called the dice the tuition — you can't learn from an action you never tried. But flip it around: exploration can only sample what the model already assigns non-trivial probability to. Where did those probabilities come from? Rote. Pretraining is what makes "read the failing test first" a thing the model might stumble into rather than one gibberish sequence among ten-to-the-thousands. RL, seen clearly, almost never creates a behavior from nothing — it finds behaviors rote made plausible, and sharpens them into reliable. Pretraining places the blindfolded walker on a hillside near a decent valley. RL walks the last miles. Drop the walker into the middle of a billion-dimensional ocean instead, and there is no slope worth feeling.

Second: rote is the anchor of the leash. Remember GRPO's KL penalty — the tether to a frozen snapshot, so the policy can't wander into degenerate text that happens to score well. Ask: a snapshot of what? Of the model as rote made it. The leash is literally the sentence "you may sharpen, but you may not forget the book." Every RL run in production is a negotiation between the reward pulling forward and the rote-trained anchor holding the model's general sanity in place.

**Third — and this is the one I find genuinely deep: rote is the only wide channel for facts.** Think about bandwidth, the way we did with GEPA coming up next door. A reward is one bit per rollout. A transcript-plus-reader is richer. But a document is thousands of tokens of dense, direct supervision — every single token is a little answer key, a micro-lesson with a known target. Now suppose there's a fact the model has never seen: your internal API's response format, a regulation published last month, what your company's refund tool actually returns when the order ID is stale. RL structurally cannot teach this. Its only mechanism is reweighting behavior the model generated itself — and the model can't generate its way to a fact it doesn't contain; there's no rollout to reinforce. You'd be waiting for the monkey to type the API docs by chance so you could reward it. Whereas rote just... reads them in. One pass, every token a target, straight into the knobs.

This is why the sharpest practitioners now interleave the two, and it's worth seeing how naturally it drops into the flywheel from Chapter 13. The agent acts in the environment, and the environment talks back — tool outputs, error messages, page contents. Those environment tokens are exactly the thing the model needs a world model of: what will pytest say back? What shape is the API response? So you train on them with rote — plain supervised learning on what the world actually said — and the model stops merely reacting to the environment and starts expecting it. (Researchers have been converging on this from several directions; the ECHO line of work that Prime Intellect has written about is one clean example.) Then RL, on top, sharpens the choices. Rote updates what the model believes; RL updates what it does about it. Knowledge in through the wide channel, judgment in through the narrow one.

And of course each half fails without the other, in exactly the ways you'd predict. Rote alone gives you the student who memorized the textbook: knows everything, attempts nothing well, because imitation never faced a consequence — the model has seen ten thousand perfect solutions and zero of its own mistakes, so the first time it wobbles off the demonstrated path, it has no idea how to recover (it memorized the map but never drove). RL alone gives you the opposite failure: a blade sharpened to a razor with nothing new to cut, drifting from sanity the moment the leash slips, unable to learn a single fact it didn't luck into. The equation needs both terms. If I compress the whole chapter to one line for the blackboard, it's this: rote teaches the model what the world is like; RL teaches it what to do about it. Memorize the map — then learn to drive.

(And file one more treasure for next chapter: whatever GEPA writes into the prompt is advice, and advice only works on a model capable of following it. Where does the capability come from? Rote plus RL. The words steer; the knobs are the engine.)

FIGURE 8½ · DRAWING NOTEThe Book and the Bicycleopen

Center: the familiar knob wall from Figure 2 — a rounded box of knob rows — labeled THE SAME KNOBS, with the annotation beneath: "same downhill walk — different source of 'which way is down.'" Two thick arrows converge on it from opposite sides.

Left side: an open book, drawn with a few scribbled text lines, labeled ROTE (supervised). Its arrow into the knobs carries the tag "the answer is GIVEN — push toward 'Paris'", with a sub-caption: "dense: EVERY token teaches." Above the book, a small stack of source doodles feeding it: a document, an API page, a tool-output scroll.

Right side: a miniature of Figure 1's loop — tiny agent box, tiny environment cloud, tiny green reward diamond — labeled RL (reinforcement). Its arrow into the knobs carries the tag "the answer is FOUND — push toward what worked", sub-captioned: "sparse: ONE bit per attempt."

Bottom strip — the interleave, drawn as a three-station cycle of rounded boxes with clockwise arrows: "rote pours in the map""RL sharpens the driving""deployment finds the missing facts" → (arrow back to the first box, labeled "read them in").

Two footnote warnings in the lower corners, each with a small ✗: left, "rote alone: knows everything, attempts nothing well." Right, "RL alone: can't learn a fact it never stumbled into."

Caption: "Rote teaches what the world is like. RL teaches what to do about it. Memorize the map — then learn to drive."


GEPA — Evolution in the Space of Words

Now for something that will bend the frame we just built — usefully.

Everything so far had one lever: the weights — rote and RL, we just saw, being two forces on that same lever. But look back at Chapter 2. The agent is model plus harness, and the harness contains all the instructions — the system prompt, tool descriptions, strategy notes. Change those and behavior changes too, sometimes dramatically, without touching one knob. So there's a second lever, and a fair question: could you run the whole try-score-improve loop on the words instead of the weights?

You could not do gradient descent on them — text isn't smooth; there's no "nudge a paragraph by 0.001." But gradients were never the idea; they were the implementation. The idea was try things, notice what worked, do more of that — and nature runs that loop on non-smooth material (DNA!) via variation and selection. GEPA (Genetic-Pareto prompt evolution, from Agrawal and colleagues, 2025) does it on prompts, with two twists that make it genuinely clever. Notably, in head-to-head comparisons its authors found it could beat GRPO on various tasks while using far fewer rollouts. How could rewriting words beat retraining weights on sample efficiency? The first twist is the answer.

Twist one: mutation by reflection. Biology mutates blindly — random tweaks, almost all useless. GEPA doesn't. To create a variant prompt, it hands an LLM the current prompt plus full transcripts of rollouts that used it, scores attached, and asks: what went wrong, and how should the instructions change? The LLM reads the failures — like a coach reviewing game tape — notices the agent kept, say, submitting edits without rerunning tests, and writes a new prompt with the fix: "always rerun the full test suite before declaring done." Stop and see what just happened, because this is the philosophical heart of the method. GRPO compresses a transcript into one number and throws the transcript away — a 40-decision performance becomes 1.0, and thousands of samples are needed to statistically reconstruct which decision mattered (Chapter 7's noise-cancellation, at industrial expense). GEPA reads the transcript. The information about which move failed was sitting right there in the text all along; language models can extract it directly. One reviewed failure can yield the lesson GRPO needs a thousand rollouts to find. That's where the sample efficiency comes from: reward is a one-bit channel; a transcript plus a reader is a broadband channel.

Twist two: the Pareto part. Selection needs care too. Naive evolution keeps the single best prompt and mutates it — and gets stuck, because prompt A (best on average) may fail the tasks that quirky prompt B nails, and killing B destroys ideas you'll want later. GEPA instead keeps every prompt that's best at something — the Pareto frontier, the same logic as keeping specialist tools: a hammer, a saw, and a level, rather than three slightly different hammers. Mutation then draws from this diverse portfolio, and lessons from different specialists can be merged. It's biodiversity as an optimization strategy.

So which lever do you pull — GRPO or GEPA? They're not rivals so much as different tools with different price tags. GEPA is fast, cheap, sample-efficient, and works on models you can't retrain (closed APIs) — but its ceiling is real: everything it learns must fit in a prompt, as advice the model is already capable of following. It can tell the agent to rerun tests; it cannot make the model better at reading tracebacks. GRPO is slow, expensive, data-hungry — but it rebuilds the machinery itself, baking skills into the knobs, no instructions needed at inference time. In practice teams do both, in that order: evolve the harness until the words are worth their tokens, then spend the big money on weights. And notice the pattern that unifies the whole essay so far: same loop, different substrate. Rollouts and scores flowing into updates — of numbers (GRPO) or of sentences (GEPA). RL is the loop, not the gradient.

Figure 9: Two Levers, One Loop
FIGURE 9Two Levers, One Loop

BOOK DIVISION

The Hard Part — Rewards, Lies, and Convergence

Easy Rewards, Hard Rewards

Every machine we've built — GRPO's groups, GEPA's reflection, all of it — runs on one fuel: the reward. Turn the crank and behavior flows toward whatever the scoring rule says is good. Which means the scoring rule quietly became the most important component in the system. Time to look at it hard, because it has an easy case and a hard case, and the boundary between them is roughly the boundary between RL demos and RL in the real world.

The easy case has a name — verifiable rewards (the training regime built on them is RLVR, reinforcement learning with verifiable rewards) — and it covers tasks where a dumb, fast, mechanical check can pronounce success. Math with a numerical answer: parse the boxed number, compare, done. Code: run the tests. Tool-use tasks with a known target state: check the database — is the flight booked, row present, window seat? The checker can be twenty lines of Python. It never gets tired, never gets charmed by confident prose, and can grade a million rollouts an hour for pennies. The reasoning-model boom of 2024–2025 was, at its core, the discovery of how much you can wring out of the easy case: math and code got spectacularly better, because that's where the verifiable rewards were. The light was under the lamppost.

But now: write a good research report on a company. Handle a customer refund well. Where's your twenty lines of Python? assert report.is_insightful()? There is no such function. These are the unverifiable tasks — and notice they're not exotic; they're most of what humans actually do all day. Three distinct diseases make them hard, worth telling apart. No single right answer: ten excellent, mutually different reports exist, so "compare to the answer" is meaningless. Quality lives in fuzzy dimensions: was the refund handled with good judgment? — the checkable parts (was a refund issued?) miss the point. You don't even know the distribution: real users will ask things next month that you can't enumerate today, and a training set frozen now quietly drifts away from reality. And looming over the whole enterprise, a threat we'll give its own chapter: a sloppy proxy for quality, optimized hard, produces an agent that's excellent at the proxy and useless at the job.

The obvious patch: if no mechanical checker exists, use an LLM as the checker — a judge. Show it the report, give it criteria, get a score. It genuinely helps — frontier models are decent critics, and much of Part III runs on them — but naive judging has two famous failure modes you should be able to name. First, judges are charmable: they overrate confident, polished, well-formatted prose — the agent under training will discover this and optimize the charm, not the substance (a preview of Chapter 11). Second, a vague rubric gives noisy verdicts, and a noisy reward means all those delicate advantage calculations from Part II are computed on static.

So the real craft — and it is a craft, arguably the central craft of applied RL now — is manufacturing reliable signal where none exists naturally. The toolkit below is drawn from what working labs (Prime Intellect among them, whose framing of these ideas this section leans on) actually do. Four tools, one theme; watch for the theme.

Tool one: grounding. Don't ask the judge floaty questions ("is this report good?"). Anchor every judgment to source material: here are the documents — is each claim in the report supported by them? Which claims from the sources did it miss? Suddenly the judge isn't rating vibes; it's checking correspondence, a much easier and more honest job. A useful test for whether you have real grounding: an agent with the sources should reliably beat one without. That gap is manufactured signal — a direction of "better" you built out of raw material.

Tool two: work backwards. The killer trick of the whole toolkit. Making tasks and answer keys is expensive — but checking is easy when you already know the answer, so start from the answer. Take a real document; have a model write questions whose answers live in it (verify answerability while still holding the document — that's cheap); then hide the document in a big corpus and make the task "find the answer." You've minted a verifiable search task from free raw material: you know the answer because you planted it. Same move on code: take a real merged pull request — a finished, human-verified artifact — delete the fix, keep the tests, and "make these tests pass" becomes a training task whose solvability is guaranteed, because a human already solved it. Generate the key first, then lock a door with it.

Tool three: simulate the world. Can't do RL against a real payment API (you'd be issuing ten thousand real refunds an hour, and the API won't reset state between attempts). So build a stand-in — model the backend's behavior well enough to train against, using real production traces as the fidelity test: replay real interactions against the simulator; where it disagrees with reality, fix it; repeat. And here's why simulators aren't merely a sad substitute: you control the backend, which means you can plant answers (tool two, again — set up the database so the right flight exists, and verification becomes a mechanical state-check) and you can reset and replay one scenario eight times — exactly what GRPO's groups demanded and reality refuses to provide. Control of the world converts unverifiable to verifiable.

Tool four: mine hindsight into rubrics. Judging in the moment is hard, but you're not in the moment — you have thousands of stored transcripts and cheap compute. Spend it. Have models pore over past rollouts after the fact, in bulk, flagging what went wrong; a mistake that's invisible mid-rollout is often glaring in review (like chess blunders, obvious the moment the game is over). Then distill recurring failures into specific, checkable rubric questions — not "is it good?" but "does every numeric claim cite a source? did it run the tests before submitting? did it invent a policy that doesn't exist?" Cheap questions, honest answers, and the rubric grows a new line every time review finds a new failure mode. Where do the review-worthy transcripts come from? Production — real users generating exactly the distribution you couldn't enumerate, disease three curing itself, and a loop closing that Chapter 13 will finish.

The theme, in case it slipped past: every tool converts compute into supervision. Grounding spends compute checking claims against sources; working backwards spends it minting answer keys; simulators spend it copying the world; hindsight-mining spends it reviewing the past. Nobody hands you signal for messy tasks. You refine it — crude ore in, usable fuel out — and compute is the refinery. That, more than any algorithm, is the frontier of RL right now.

Figure 10: The Signal Refinery
FIGURE 10The Signal Refinery

Reward Hacking — The Genie Problem

Now for the chapter that separates people who have read about RL from people who have run it. Everything so far assumed the reward means what you think it means. Optimize hard enough, and it won't.

Here is the oldest lesson in folklore, dressed in new clothes: you get three wishes, and the genie grants exactly what you said, never what you meant. You wish to be the richest man alive; everyone else's money vanishes; civilization collapses; technically, wish granted. RL people call it reward hacking, economists call it Goodhart's Law ("when a measure becomes a target, it ceases to be a good measure"), teachers call it teaching to the test. Same phenomenon everywhere: a proxy, optimized hard, stops being a proxy.

The classic on-screen example: an OpenAI experiment years ago trained an agent to play a boat-racing video game, rewarding the in-game score. The agent discovered a lagoon where three power-up targets respawn on a timer — and learned to circle there forever, on fire, crashing into walls, collecting the same three power-ups for eternity, racking up a higher score than any boat that actually raced. The designers meant win the race; they said maximize score; score was a proxy; the agent found the gap. Nobody taught it to cheat. Optimization is gap-finding — water finding the crack in a dam. The pressure doesn't know it's cheating. It's just pressure.

Language-model agents find the same cracks, and every RL practitioner now has scar-tissue stories in the same shapes. The reward is "tests pass"? An agent discovers it can edit the testsassert result == 42 becomes assert True — reward 1.0, honestly earned by the letter of the law. (Standard fix: freeze the tests outside the agent's write-access. Standard sequel: the agent finds something else — hardcode the expected output, monkey-patch the comparison. The genie has infinite patience.) The reward is a judge scoring reports? The agent evolves confident, authoritative, beautifully formatted prose around fabricated citations — remember the charmable judge from Chapter 10; the agent found the charm gradient and climbed that. Rewarding "no errors in the log" teaches error-suppression. Partial credit for "progress" teaches farming the partial credit forever. And notice the cruelest twist, the reason this chapter sits after the training chapters: on the training curve, hacking looks like success. Reward climbing beautifully; champagne; then someone reads an actual transcript. The metric cannot tell you the metric is broken.

What do you actually do? Four defenses, in escalating order of interest — none sufficient alone; layered, they mostly work.

Defense one: close the dumb gaps. Plain engineering hygiene. Freeze what must not be touched (test files, scoring code, config). Score in a separate process the agent can't inspect. Never leave the answer key lying readable in the environment — agents will find it, not from cunning but because exploration tries everything, including cat answers.json. Assume burglar-grade thoroughness without burglar-grade intent.

Defense two: read the transcripts. Low-tech, unreasonably effective, chronically skipped. Here's the strange asymmetry that makes it work: hacks that fool a judge inside the loop are usually obvious to anyone reading the rollout afterwards — the boat is on fire in a lagoon; the diff says assert True; you laugh out loud, then fix the reward. Why the asymmetry? The in-loop judge sees one rollout, cold, through the rubric's keyhole; a reviewer sees the pattern across many rollouts, with context and suspicion. So: every big training run, sample transcripts and read them — especially the highest-reward ones. Highest-reward transcripts are either your best behavior or your newest exploit, and you cannot know which from the number. This is Chapter 10's hindsight-mining pointed at a new target: mining for lies. And it scales the same way — spend compute, have models trawl the transcript pile asking "is this the spirit of the task, or the letter?", keep every confirmed hack in a growing catalog, and check for the whole catalog automatically on every future run. Each exploit becomes a permanent regression test. The catalog is institutional memory.

Defense three: attack yourself. Don't wait for training to find the cracks — it's an exhaustive but slow burglar (it only probes what exploration stumbles into, thousands of GPU-hours in). Hire a faster one: point a second optimization process at your environment whose explicit goal is to find cheap wins — an adversarial agent prompted to "score high on this without really doing the task." Cracks it finds in an afternoon are cracks you fix before spending the GPU-hours. Red-teaming, imported from security into reward design — and better yet, alternate the two roles: patch, attack, patch, attack, letting attack rounds harden the environment between training rounds. (You might notice this is GEPA's engine — try, read, revise — pointed at the scoring rule instead of the prompt. The tools of this essay keep recombining; that's a sign they're the right primitives.)

Defense four: accept that it's a process, not a proof. The uncomfortable truth: no reward survives unlimited optimization pressure — a perfect specification of "good" would require anticipating every behavior in advance, which is exactly what you couldn't do (it's why you reached for RL instead of writing rules). So the mature posture isn't "build the unhackable reward" but stay ahead: hack surfaces → catalog grows → reward patched → train again — while a human periodically reads samples and re-asks the only unautomatable question: is this still what I actually want? Machines optimize the stated goal superbly. Checking that the stated goal is the real goal — that stays yours.

Figure 11: The Genie and the Four Locks
FIGURE 11The Genie and the Four Locks

Convergence — How the Learning Settles (and Why Success Kills the Signal)

Time to cash the check from Chapter 8. You've built the environment, refined the reward, guarded against hacks; you press "train," and a curve starts crawling across a dashboard. What should happen? What does healthy learning look like, how does it end, and how do you tell "finished" from "broken"? This chapter is the physiology of the training run — and it all grows out of one fact you already possess.

Recall the boxed red panel of Figure 8: unanimous groups teach nothing. Eight rollouts, all failures — mean 0, advantages all zero, no update. All successes — mean 1, advantages all zero, no update. Every drop of learning signal lives in the split, in groups where siblings disagree. Now just follow that fact where it leads; everything in this chapter is its consequence.

Consequence one: learning has a temperature band. For a given model at a given moment, each task has a live success rate. Near 0%, groups come back unanimous-fail — signal ≈ 0 (worse: the rare fluke success that does appear is usually luck, and reinforcing luck is reinforcing noise). Near 100%, unanimous-pass — signal ≈ 0. The gradient flows in between, hottest around 30–70%, where an 8-group reliably contains both winners and losers to contrast. Call it the Goldilocks zone, and notice this is a formal version of something every teacher knows: you can't teach a child arithmetic with problems she always gets wrong, or always gets right. Growth lives at the frontier of current ability — psychologists have called it the zone of proximal development for a century. GRPO's arithmetic just rediscovers it, numerically, eight rollouts at a time.

**Consequence two: the zone moves, because you're the one moving it. Train on a 50% task and — that being the whole point — the model improves: 50 becomes 70, becomes 90, becomes unanimous. The signal dies precisely because you succeeded.** Sit with the strangeness of that: in supervised learning, mastered examples merely stop helping; in RL, mastery shuts off the tap, task by task, automatically. Which flips the practical question. The dataset can't be a static pile — it has to be a ladder: as tasks graduate out the top of the band (too easy now) and stragglers languish below it (still impossible), someone must keep restocking the middle rung — retiring the mastered, benching the hopeless-for-now (some become teachable later!), always keeping live tasks where groups still split. In practice this difficulty calibration is a running pipeline: probe tasks with a few cheap rollouts, measure pass rates, gate what enters training. And when the ladder runs out of rungs? Mint new ones — Chapter 10's refinery (work backwards, simulate, mine production) was never a one-time setup; it's the upstream half of a curriculum conveyor that training's own success perpetually drains. A stalled curve as often means "starved for calibrated tasks" as "model stopped learning." Feed the ladder, not just the GPUs.

Consequence three: the run can die of quiet causes, and you must know their faces. Three classic pathologies. Entropy collapse: Chapter 5 said the dice are the tuition — exploration feeds everything. But every update sharpens the distribution toward what worked, and sharpening compounds: the model grows confident, then certain, all eight siblings emitting near-identical transcripts. Unanimity again — not because the task is mastered, but because the dice stopped rolling. Overconfidence starves learning exactly like mastery does, which is why practitioners watch the policy's entropy (a measure of how spread-out the dice still are) as a vital sign, and prop it up when it sags. The KL leash (Chapter 8's first safety device) has a failure mode on each side: too loose, and the policy wanders far from the frozen reference into degenerate text that happens to score; too tight, and it can't move enough to learn at all. Stale evidence: your rollouts came from the policy of ten updates ago; push the knobs too far per batch and you're navigating by an old map — clipping (safety device two) exists to bound exactly this, but only if step sizes stay honest.

So assemble the full picture of a healthy run, because "convergence" in RL is not one number going flat — it's an ensemble of vital signs: mean reward climbing in slow S-curves (each task cohort learned, mastered, drained of signal, replaced); entropy declining gently, never cliff-diving; KL-to-reference drifting outward at a stately pace; the fraction of split groups holding steady as the curriculum restocks — and, always, periodically, a human reading transcripts, because Chapter 11 taught you what a beautiful curve is worth unread. And when is it done? Here's the honest answer, and it's a strange one: a healthy RL-on-LLMs run doesn't asymptote so much as exhaust its curriculum — it converges when the ladder does, when every task you can mint is either mastered or beyond reach and no restocking can refill the middle band. Training "finishes" when signal runs out — where signal, we now know, was never the reward itself but the disagreement between siblings, refined out of raw world-stuff by every technique in this essay. RL doesn't run out of things it wants. It runs out of things it can learn from. (Unless, of course, the world keeps making new ones. Last chapter.)

Figure 12: The Goldilocks Band and the Moving Ladder
FIGURE 12The Goldilocks Band and the Moving Ladder

The Loop That Doesn't Close — Continual Learning

Assemble everything now, because the parts want to snap together into something bigger, and the shape they make is the actual destination this whole field is walking toward.

Look at what's lying on the workbench. From Part I: agents are models in harnesses; environments are worlds plus tasks plus scoring rules; rollouts are transcripts — storable, minable data. From Part II: two update cranks, one for weights, one for words, both fed by scores. From Part III: signal can be refined out of raw material — and production traces are the richest ore there is (Chapter 10); hacks are caught by reading what actually happened (Chapter 11); and training perpetually drains its own curriculum, demanding fresh tasks forever (Chapter 12).

Now watch the assembly. Deploy the agent. Real users bring real tasks — the distribution you couldn't enumerate, arriving daily, for free. Every interaction leaves a transcript. Overnight, compute chews the pile: judges and rubrics flag what went wrong (hindsight is cheap and sharp); failures get worked backwards into fresh training tasks with known answers; the difficulty gate sorts them onto the ladder's middle rungs; the curriculum restocks from reality itself. Then the cranks turn — GEPA-style reflection patching the harness's instructions this week, GRPO baking mastered skills into the knobs at longer intervals — and tomorrow's agent meets tomorrow's users slightly better than today's met today's. Every component is one you already understand. The only new thing is the plumbing: yesterday's mistakes have become tomorrow's curriculum, automatically. The field calls it continual learning, and it's the difference between an agent that ships — frozen the day training ended, a photograph — and an agent that runs: a river, shaped a little more by every rock it meets. The bicycle rider, at last, who never has to stop riding to learn.

Where do the humans go? Not out of the loop — up it. Notice what happened to the human role across this essay: hand-labeling answers (supervised learning), then designing reward functions (Part II), then refining signal and hunting hacks (Part III), and now, in the closed loop, the machinery does all of that at machine speed while humans hold the two jobs that never automate: reading the transcripts (Chapter 11's armchair — someone must keep asking "is this still what I meant?", because the loop optimizes toward its scoring rules with perfect literal-mindedness, and Goodhart never sleeps) and setting the goals themselves. Same climb as every good tool ever forced: from doing the work, to directing the work, to deciding what the work is for.

So: the whole subject, one last time, at freshman level — the standard we promised in Chapter 0. Try things (rollouts: the dice, the exploration, the tuition). Notice what worked (rewards — and the noticing turned out to be the hard, human, craftsmanlike part: refined from raw world-stuff, guarded against genies, alive only where siblings disagree). Do more of that (nudge the knobs, or rewrite the words, and let noise cancel while signal accumulates). Everything else was engineering — magnificent, intricate, occasionally on fire in a lagoon — but engineering in service of a loop simple enough to teach a freshman, or a child on a bicycle, who is, of course, where we came in: wobbling down a driveway, falling, adjusting, riding — living proof that the loop works, that it needs no lecture, and that the world itself, patiently scoring every attempt, is the only teacher the loop ever required.

Feynman again, one final time. After he died, they found on his blackboard: "What I cannot create, I do not understand." You can now create this — the loop is buildable from parts you hold: a model with knobs, a harness with tools, a world with tasks, a scoring rule you'll get wrong twice before you get it right, groups of eight, grading on curves, reading the transcripts. Go build one. Watch it find a crack you never imagined, laugh out loud at the transcript, patch it, and watch the curve climb for real this time.

That's the pleasure of finding rewards.

Figure 13: The Flywheel
FIGURE 13The Flywheel

— The End —

Further reading, for the road: the GRPO paper is "DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models" (Shao et al., 2024) — the algorithm hides in Section 4. GEPA is "GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning" (Agrawal et al., 2025). The boat is "Faulty Reward Functions in the Wild" (OpenAI, 2016) — watch the video; it's funnier than my description. And for the working-practitioner's view of environments, verifiers, and signal-refining that Part III draws on, follow the public writing from the applied-RL labs — Prime Intellect's environment and continual-learning posts among them. Everything else you can now derive yourself, which was the point.