Steering Mid-Flight
Interrupting, redirecting, rejecting, and knowing when to throw it away and restart instead of arguing.
Watching an AI go the wrong way is uncomfortable, and most people respond by waiting politely for it to finish. Do not. Interrupting early is cheap; letting a wrong approach complete is expensive, and then you have to argue it back out.
Interrupt early
Every agent-style tool lets you stop it mid-run — usually Escape or Ctrl+C. Use it the moment you see the approach is wrong, not after.
The instinct to wait comes from conversational politeness that does not apply here. There is nobody to offend, and every additional file it touches is another thing you will need to review or revert.
Stop — you are editing the wrong file. The cart total iscalculated in src/lib/pricing.ts, not in the component.Start again there.Redirect with specifics, not vibes
“No, that’s wrong” gives the model nothing to work with. It will try a different guess, which is as likely to be wrong as the first. Say what was wrong and what you want instead.
- 1Weak
“That's not right, try again.”
- 2Better
“You used a global variable for the theme. Use React context instead, like ThemeProvider already does in src/app/providers.tsx.”
The second version costs ten more seconds and removes an entire round trip. It also removes the failure mode where the model cycles through three wrong approaches because it never learned which dimension it got wrong.
Rejecting well
You do not have to accept a change to learn from it. Reading a rejected diff often tells you the prompt was ambiguous, which is worth knowing before you rewrite it.
Ask before rejecting
- Did it do what I literally asked, rather than what I meant? Then fix the prompt, not the code.
- Did it invent something it could not see? Then attach the real file and retry.
- Is it right but not how I would do it? Consider whether that matters before spending prompts on style.
- Is it right and I simply do not understand it? Ask for an explanation instead of rejecting.
The two-strike rule
This is the most useful habit in the chapter. If two consecutive attempts fail to fix the same problem, stop prompting. Do not send a third.
Two failures almost always mean the model is missing context rather than lacking ability, and a third prompt into the same hole produces a third variation of the same misunderstanding — often while adding new damage on top.
Restart the conversation, not just the prompt
Long threads accumulate wrong turns. Once a conversation contains three rejected approaches, those rejections are still in the context — the model is now steering around its own past mistakes rather than solving your problem cleanly.
Starting fresh feels like losing progress. It is not: your code is on disk, and a new conversation with one good prompt that describes the current state will usually beat twenty messages of accumulated correction.
Fresh start. The cart total in src/lib/pricing.ts double-countsdiscounts when an item has both a percentage and a fixeddiscount. Read that file and the tests in pricing.test.ts,then explain the cause before fixing anything.Key takeaways
- Interrupt the moment the approach is wrong. There is nobody to be polite to.
- Say what was wrong and what to do instead — “try again” just buys another guess.
- A rejected diff often means the prompt was ambiguous. Fix the prompt.
- Two failures in a row: restore, add context, and change the approach. Never send a third.
- When a thread fills with wrong turns, start a new one. The code is safe on disk.