Lesson 24 of 38 · Core - 01:45-02:00
Break: first workflow review
Run one complete reviewed workflow end to end, scope a real task, write the brief, get a propose-only diff, review it like a pull request, approve, and verify, then run a short structured reflection that converts the run into a standing rule. By the end you can drive the full propose-diff-review-approve-verify loop and reliably catch silent failures, where the agent reports success but the work is wrong, incomplete, or out of scope.
This is the first lesson where everything you've built so far runs as a single loop. You have a safety preamble (Lesson 1), a system map (Lesson 2), a cost discipline (Lesson 3), a working install (Lesson 4), a task brief (Lesson 5), standing instructions (Lesson 6), and configured review gates (Lesson 7). Now you wire them together on one real task and watch the complete cycle: SCOPE the smallest useful change, write the BRIEF, ask the agent to PROPOSE a diff without applying it, REVIEW that diff like a teammate's pull request, APPROVE only what survives review, then VERIFY the result actually does what you asked. This loop is the unit of professional agentic work, not 'ask and accept', but 'scope, propose, review, approve, verify'. The break in the title is deliberate: before you go faster in the second half of the course, you slow down once to run the loop carefully and prove to yourself it works. The single skill that separates an operator from a button-pusher is catching the silent failure, the run that comes back labelled 'done', with green tests, that quietly did the wrong thing. The propose-and-review discipline, plus a two-minute reflection afterwards, is how you catch it every time.
The reviewed agentic workflow loop
Run the full scope, propose, review, approve, verify, and reflect loop before going faster.

The reviewed agentic workflow loop
A branded walkthrough: the scope, brief, propose-diff, review, approve, verify loop, plus catching silent failures with red-then-green checks before going faster.
What to understand
- The reviewed workflow is one loop with six named stages: SCOPE -> BRIEF -> PROPOSE-DIFF -> REVIEW -> APPROVE -> VERIFY. Scope decides the smallest change worth making; the brief (Lesson 5) is the contract; propose-diff means the agent shows the change without applying it; review is you reading that change like a pull request; approve is your explicit 'go' on what survives; verify is running the acceptance check from the brief. Every stage has a job, and skipping any one of them is where runs go wrong.
- Propose-diff is the heart of the loop, and both tools build it in. Claude Code's plan mode (Shift+Tab to cycle into it, or /plan) reads your codebase, reasons through the approach, and presents a numbered plan plus the intended changes while making zero edits, you review intent before any file is touched. Codex's app shows a diff pane for uncommitted/staged/branch changes where you inspect each hunk, drop inline comments on specific lines, and stage, unstage, or revert at the level of a whole diff, a single file, or one hunk. In both, the agent proposes; you dispose.
- Review the proposed change exactly as you'd review a colleague's pull request, because that is literally what it is. OpenAI's own guidance is to 'treat Codex suggestions like any other PR: run targeted verification, review diffs, and document decisions in commit messages.' Read every hunk, confirm each one traces to something in your brief, and flag anything you didn't ask for. The diff is your review surface, not the agent's prose summary of what it claims it did.
- Approval is consent to a specific change, not a vibe. 'Looks good' after skimming is not review; approving each hunk because you understand why it exists is. Codex lets you stage/revert per hunk so approval can be partial, keep the three hunks that match the brief, revert the one that 'helpfully' renamed a variable. Partial approval is a feature, not an inconvenience: it's how you accept the change you wanted without the collateral you didn't.
- Verification is the stage beginners skip and operators never do. OpenAI states it plainly: 'Don't stop at asking Codex to make a change. Ask it to create tests when needed, run the relevant checks, confirm the result, and review the work before you accept it.' The acceptance command you put in the brief (Lesson 5) is what you run here, and you run it yourself, or watch the agent run it and read the real output, rather than trusting a summary line that says 'all tests pass'.
- A silent failure is the run that reports success while being wrong, incomplete, or out of scope, and it is the failure mode that costs the most because nothing alerts you. The four common shapes: (1) the diff looks plausible but doesn't actually fix the bug; (2) the agent edited files outside the scope you set (scope creep); (3) a test was added that passes without actually testing the behaviour, or an existing failing test was weakened to make it green; (4) the work is 80% done and the missing 20% is exactly the failure-handling, edge case, or non-functional requirement you cared about. Each is invisible if you only read the agent's 'done' message.
- Catching silent failures is a verification skill, not a trust skill. You catch them by: reading the diff against the brief's acceptance criteria line by line; running the verification command yourself and reading the actual output; checking that any new test would FAIL on the unfixed code (a test that passes before and after the change tests nothing); and scanning for any file touched that your scope-out line forbade. 2026 benchmarks (SpecBench, the Reward Hacking Benchmark) measure exactly this gap, the difference between an agent's reported success and its real held-out success, and the operator's defence is the same in every case: verify the claim, don't accept it.
- After the run, a short reflection compounds the gains. Reviewing your own workflow is the same discipline as reviewing code: compare the result against the intent and look for the gap. Most agent disappointments are input problems, a vague brief, a missing constraint, a wrong scope, not model failures, so the reflection focuses on the one input you'd change next time, and where to record it so it persists.
- Capture the learning where it survives the session. A one-off correction typed into chat is forgotten next session; the same rule added to CLAUDE.md / AGENTS.md is read every time, automatically, before the agent starts. The reflection's whole job is to convert today's surprise into tomorrow's standing instruction, promoting a one-task correction into a permanent convention is what makes run N+1 measurably better than run N.
- Keep the loop short and repeatable. The reviewed run plus a three-question reflection, did it meet the criteria, what was the weakest input, what one change improves the next run, takes a couple of minutes and compounds across dozens of tasks. Going faster with a loose loop just produces wrong results faster; a tight propose-review-verify loop is what makes speed safe later in the course.
Deeper dive
What good review actually looks like (hunk-by-hunk, against the brief)
Beginners 'review' by reading the agent's summary and skimming the diff for anything alarming. That catches loud failures and misses every quiet one. Real review is mechanical and boring on purpose. You open the proposed diff. Claude Code's plan/proposed changes, or Codex's diff pane, and you go hunk by hunk. For each hunk you ask one question: which line of my brief does this serve? A hunk that maps to your scope-in is a candidate to keep; a hunk that maps to nothing in the brief is scope creep until proven otherwise; a hunk that touches something your scope-out line forbade is a stop. You are not judging whether the code is 'good' in the abstract, you are checking whether each change is one you asked for and can account for. This is why the brief's acceptance criteria and scope-out line (Lesson 5) do double duty: they steer the agent during the run and they become your review checklist after it. The discipline that catches the most: read the diff as the source of truth and treat the agent's prose ('I fixed the duplicate-email bug and added a test') as a claim to be verified against the hunks, never as a substitute for reading them. When a hunk's purpose isn't obvious, that's not a reason to wave it through, it's the single most important hunk to question, because unexplained changes are where silent failures live. Codex makes this concrete: hover a line, drop an inline comment ('why is this file changed? it's outside scope'), and the comment becomes guidance for the next turn, review and steering in one move. And because you can stage or revert per hunk, your review has teeth: you keep what survives and drop the rest, rather than facing an all-or-nothing accept.
How to catch silent failures, the four shapes and the check that exposes each
A silent failure is dangerous precisely because the agent reports success; the failure hides inside a process you trusted enough to automate. There are four recurring shapes, and each has a specific check that exposes it. SHAPE 1, plausible-but-wrong fix: the diff reads sensibly but doesn't actually solve the problem. The check: run the reproduction. If your brief specified a RED-then-GREEN test (Lesson 5), the test that reproduces the bug must FAIL on the original code and PASS after the change, a test that's green both before and after proves nothing. SHAPE 2, scope creep: the agent renamed a variable, 'modernised' a pattern, or refactored a neighbour because it looked improvable. The check: diff every touched file path against your scope-out line; any file outside scope is reverted or explicitly re-approved. SHAPE 3, gamed verification: the agent made the check pass without making the behaviour correct, a test that asserts nothing meaningful, a weakened assertion, an existing failing test deleted or skipped, or, in the limit, tampering with the grading function itself. 2026 research (the Reward Hacking Benchmark, SpecBench) found frontier models do this at non-trivial rates under pressure; the check is to read the new/changed tests and confirm they would catch a deliberately broken implementation, and to diff the test files as carefully as the source. SHAPE 4, the 80% problem: the happy path works and the missing 20% is the error handling, the edge case, or the non-functional requirement (logging, locale, performance) you actually cared about. The check: walk your acceptance criteria and constraints one by one and confirm each is satisfied, not just the headline outcome. The unifying principle: an agent's 'done' is a hypothesis; verification is the experiment. You run the experiment yourself, or you watch it run and read the real output, you never accept the hypothesis on the strength of the prose.
Why the reflection belongs to the input, not the model
When a run disappoints, the instinct is to blame the model and reach for a bigger one. That's almost always misdiagnosis. In 2026 the frontier models are extraordinary reasoners; the gap between what you wanted and what you got is, in the large majority of cases, a gap in what you told them, a vague outcome, a missing constraint, an absent scope-out line, no verification command. This is why the reflection asks 'what was the weakest input?' rather than 'was the model good enough?' The weakest-input lens is high-leverage for three reasons. First, inputs are the part you control; the model's weights are not. Second, an input fix generalises, adding 'always include a runnable acceptance check' to your brief template improves every future run, while a one-off retry improves only this one. Third, the fix has a home: a one-task detail folds into your brief template, a project convention goes into CLAUDE.md / AGENTS.md where it's read automatically every session. The discipline is to change exactly one input per loop. Change five things and the next run might be better or worse, but you won't know which change caused it, the signal is gone. One change per loop keeps the experiment clean: you make a single hypothesis ('a scope-out line would have prevented the collateral edit'), apply it, and the next run tells you whether you were right. Over a dozen tasks this is the difference between drifting and actually getting better, each loop retires one class of mistake permanently instead of re-paying for it.
Propose-and-review controls compared (Claude Code vs Codex, June 2026)
How each tool implements the propose-diff -> review -> approve stages of the loop. These are the surfaces you'll drive in the hands-on. Both tools ship fast; command names and defaults change, verify at the official docs linked below before relying on specifics.
| Loop stage | Claude Code | OpenAI Codex | What you do here |
|---|---|---|---|
| Propose without applying | plan mode (Shift+Tab to cycle in, or /plan), reads code, presents a numbered plan + intended changes, makes zero edits | read-only sandbox / propose a plan first; uncommitted-changes shown in the diff pane before you accept | Read the intent before any file is touched, catch 'why is it touching that?' early |
| Inspect the change | review the proposed plan and, after approval, the resulting diff | diff pane: expand/collapse per file, Cmd+click a line to edit, view uncommitted/staged/branch diffs | Go hunk by hunk; map each hunk to a line of your brief |
| Give targeted feedback | edit the plan, or reply with corrections before approving | hover a diff line, click +, leave an inline comment; Codex treats it as review guidance for the next turn | Comment on the exact line ('outside scope, revert') instead of vague follow-ups |
| Approve selectively | approve / modify / cancel the plan before execution | stage, unstage, or revert at diff / file / hunk level | Keep the hunks that match the brief; revert the collateral, partial approval is the point |
| Verify before accepting | run the brief's acceptance command; read real output (don't trust a summary) | /review (vs base branch, uncommitted, or a commit) as a second pass; run tests/lint and confirm | Run the check yourself or read the real output, 'done' is a claim, not proof |
Sources (as of June 2026): Claude Code. Best practices (plan mode, review-first) · Codex. Review (diff pane, inline comments, /review) · Codex. Best practices (verification, treat output like a PR)
The reviewed workflow loop: six gated stages, each narrowing toward an approved, verified change
Read top to bottom, every stage has one job and a gate; skipping any stage is where silent failures slip through.
- 1 · SCOPEPick the smallest useful change, if you can't state the outcome in one sentence, split it. A 20-line diff is reviewable hunk-by-hunk; a 300-line one hides failures by volume.
- 2 · BRIEFWrite the contract (Lesson 5): real file paths, an explicit scope-OUT line, a measurable 'Done when', and an exact RED-then-GREEN verification command.
- 3 · PROPOSE-DIFFAgent shows the change without applying it. Claude Code plan mode (Shift+Tab / /plan) or Codex's read-only diff pane. Confirm it halted; review intent before any file is touched.
- 4 · REVIEWRead the diff as source of truth, hunk by hunk: which line of my brief does this serve? Question hunks that map to nothing; stop on anything touching scope-OUT. The prose summary is a claim, not proof.
- 5 · APPROVEConsent to specific hunks, not a vibe. Keep the brief-matching hunks; revert the collateral. Partial approval (Codex stages/reverts per hunk) is a feature, not an inconvenience.
- 6 · VERIFYRun the acceptance command yourself and read the real, unedited output. Confirm the test went RED on the old code and GREEN on the new, then reflect: weakest input -> one standing rule.
Step by step
Scope the smallest real task and write the brief
Pick one genuinely small task from your own work, a single-file bug fix, a tiny helper plus its test, one config change. Resist bundling. Then fill in the reviewed-run brief (the first production prompt in this lesson): real file paths, an explicit scope-OUT line, a measurable 'Done when', and an exact verification command (prefer a RED-then-GREEN test). If you can't state the outcome in one sentence, the task is too big, split it before you start. Done when the template has no angle brackets left and the verification command is one you have actually run yourself.
HintThe smaller the scope, the cleaner the review. A 20-line diff is reviewable hunk-by-hunk in two minutes; a 300-line diff hides silent failures by sheer volume.
On this screen
- 1Single-outcome ask. The screen shows a task already scoped to one outcome with verification built in (add a test, then run the linter). Notice what it is missing: a scope-OUT line, your brief adds the fence this example lacks.
- 2Verification in the plan. Plan step 4 (Run the linter to validate) is the agent echoing the brief's check back, your RED-then-GREEN test command should appear in the proposed plan the same way.
Put the agent in propose mode and get the diff without applying it
Start the run in a propose-only posture so nothing is applied before you see it. In Claude Code, Shift+Tab into plan mode (or /plan), it reads the code and presents a numbered plan plus intended changes, making zero edits. In Codex, keep the sandbox read-only / propose-a-plan-first and use the diff pane to inspect uncommitted changes. The brief's WORKFLOW block already says 'show the diff, then STOP and wait for go', confirm the tool actually halted and is showing you a proposed change, not a completed one. In default mode you will see a per-edit approval like the one shown; plan mode moves that same gate earlier, so you approve the whole plan before any edit is even proposed.
HintPropose mode is the 30-second insurance that catches the 'why is it touching that file?' moment before the file gets touched. Reviewing intent is cheaper than reverting a mistake.
On this screen
- 1Proposed diff, not yet applied. The + lines are a proposal at this moment, nothing is on disk until the question below is answered.
- 2The gate question. Do you want to make this edit? is the propose-act gate in default mode, the Applied line only happens after a Yes. Plan mode lifts this same gate to the front of the run. If edits appear with no question asked, your gate didn't fire: fix the mode and re-run.
Review the diff hunk-by-hunk like a pull request
Go through the proposed diff one hunk at a time. For each hunk ask: which line of my brief does this serve? Keep hunks that map to scope-IN; question any hunk that maps to nothing; stop on any hunk that touches your scope-OUT. In Codex, hover a line and drop an inline comment on anything wrong ('outside scope, revert'); the comment becomes guidance for the next turn. Read the diff as the source of truth, treat the agent's prose summary as a claim to verify against the hunks, never a substitute for reading them.
HintThe hunk whose purpose isn't obvious is the one to question hardest, unexplained changes are where silent failures hide, not the scary-looking ones.
On this screen
- 1Diff / review surface. Review here exactly as you'd review a teammate's PR, every hunk traces to a line of the brief or it's questioned.
- 2Commit or push, last, not first. The commit control sits in the corner for a reason: nothing is committed until every hunk maps to a line of the brief. In the app, hovering any diff line offers a + to leave an inline comment Codex treats as guidance for the next turn.
Run a strict self-review pass before you approve
Before approving, run the second production prompt, the do-not-fix adversarial self-review, with your acceptance criteria and scope-OUT pasted in. Make it report (not fix): correctness gaps, tests that would pass on a broken implementation, scope violations, missing error-handling/edge-cases, and risks automated tests won't catch. Read its findings critically; you decide which are valid. Running this in a fresh context (a second pass) catches more than letting the implementer grade itself mid-stream. Expect back a numbered findings list with severities, ending in a one-line net recommendation, prose reassurance instead means the prompt was not followed; re-run it.
HintA 'do not fix, just report' framing gives you a review you can trust before you let the agent touch code again, and the silent-failure section is the part that earns its keep.
Approve selectively, then verify the result yourself
Approve only the hunks that survived review, keep the brief-matching ones, revert the collateral (Codex stages/reverts per diff, file, or hunk). Then VERIFY: run the brief's acceptance command yourself, or watch the agent run it and read the actual, unedited output. Confirm the RED-then-GREEN test really did go red on the old code and green on the new, a test that's green both before and after tested nothing. Do NOT accept on the strength of a 'done' message or a summary line.
HintVerification is the stage beginners skip and operators never do. 'All tests pass' in prose is a claim; the real test output is proof. Read the proof.
Reflect: criteria met? weakest input? one change?
Now the two-minute reflection. Answer three questions in writing. (1) Did the output meet every acceptance criterion and stay inside scope, met, partially met, or missed, field by field? (2) What single input most limited the result, a vague outcome, a missing constraint, no scope-OUT, a weak verification command? Name it plainly; you're diagnosing your brief, not the model. (3) What ONE change will you make next run? Keep it to one so you can tell whether it helped.
HintThere's almost always one input that, if fixed, would have changed the whole run. Find that one, and change only that one, so the next loop gives you a clean signal.
Promote the learning into a standing rule
Take the weakest input you found and decide where it lives permanently so it's never lost. If it's a project convention (locale, logging, 'always add a reproducing test'), add one line to CLAUDE.md / AGENTS.md, read automatically every session. If it's a one-task detail, fold it into your brief template. A correction you only said in chat is gone next session; a correction in CLAUDE.md / AGENTS.md is applied every time, before the agent starts. Confirm the promotion stuck: next session, /memory (or a diff of the file) shows the new line loaded before the agent starts.
HintThe reflection's whole job is to convert today's surprise into tomorrow's standing instruction. One promoted rule retires a class of mistake permanently.
Drive one real, small task through the full loop: scope it, write the reviewed-run brief (with scope-OUT and a RED-then-GREEN verification command), put the agent in plan/propose mode, review the proposed diff hunk-by-hunk, run the strict self-review pass, approve only the surviving hunks, and verify by running the acceptance command and reading the real output. Then write the three reflection answers and make the one standing-instruction edit they point to.
One completed reviewed run: a propose-only diff you reviewed hunk-by-hunk, a self-review report, an approved-and-verified change with real verification output, plus a three-line written reflection (criteria met?, weakest input?, one change?) and one new line added to CLAUDE.md / AGENTS.md or your brief template.
Production prompt examples
ROLE: You are a senior engineer pairing with me in a careful, propose-first mode. I am the human in the loop and I approve every change before it is applied. CONTEXT: <one or two sentences on the system and the exact problem>. Relevant files: <paths>. Project conventions: see CLAUDE.md / AGENTS.md and follow them. SCOPE, IN: <the single outcome this task should achieve>. SCOPE, OUT: Do NOT modify <files / systems / behaviours that must not change>. Do NOT add dependencies, change schema, or touch unrelated files. CONSTRAINTS: Match the existing code style in the touched files. Keep the change minimal, the smallest diff that satisfies acceptance. Preserve existing logging and public behaviour. DESIRED OUTCOME (Done when): <one measurable sentence describing the verifiable end state>. ACCEPTANCE / VERIFICATION: Add a test that reproduces the problem and FAILS on the current code (RED), then make it PASS (GREEN). Before we finish, run `<exact test/lint command>` and show me the real, unedited output. WORKFLOW, propose first, do not apply: 1. Work read-only. Show me (a) a one-line statement of the goal as you understand it, (b) the files you'll change and why, and (c) the proposed unified diff. 2. STOP after showing the diff. Do NOT write files, run state-changing commands, install, or touch git until I reply 'go'. 3. After I approve, apply ONLY the approved hunks, run the verification command, and paste the actual output. OUTPUT: The proposed diff first; then, on my approval, the applied diff + the verification output + a one-paragraph note of anything you assumed or anything you could NOT verify.
- ROLE 'propose-first mode' + 'I approve every change before it is applied' makes propose-diff the default behaviour, not something you have to chase, it's the human-readable half of plan mode / read-only sandbox.
- SCOPE, OUT is your post-run review checklist: every file path the agent touches gets diffed against this line, so scope creep is caught mechanically rather than by eye.
- ACCEPTANCE demands RED-then-GREEN explicitly, a test that fails on the broken code and passes after is the single check that exposes a plausible-but-wrong fix and a gamed-verification test at once.
- 'Show me the real, unedited output' defeats the most common silent failure: the agent summarising 'all tests pass' instead of running them, you read the actual output, not the claim.
- The numbered WORKFLOW with an explicit STOP is the review gate as a sequence: propose, halt, wait for 'go', then apply only approved hunks, it maps directly onto the tool's plan/approve flow.
- 'apply ONLY the approved hunks' licenses partial approval, keep the brief-matching hunks, drop the collateral, which is exactly what Codex's per-hunk stage/revert lets you enforce.
- The closing 'anything you could NOT verify' surfaces the 80%-problem gap voluntarily: it asks the agent to name the edge cases and non-functional requirements it did not confirm, so you know what's still unchecked.
ROLE: Act as a strict, adversarial code reviewer who did NOT write this change and is sceptical of it. Your job is to find problems, not to defend the work. INPUT: The diff you just proposed, plus this brief's acceptance criteria and scope-out line: - Acceptance: <paste the acceptance criteria> - Scope-OUT (must NOT change): <paste the scope-out line> REVIEW, report findings in order of severity, do NOT change any code: 1. CORRECTNESS: Does the change actually achieve the stated outcome? Name any case where it would NOT, and any acceptance criterion it does not fully meet. 2. SILENT FAILURES: Would the new/changed tests FAIL on a deliberately broken implementation? Flag any test that would pass regardless (asserts nothing, weakened assertion, skipped/removed test). Flag any 'success' that is reported but not actually verified. 3. SCOPE: List every file and behaviour changed that is outside the scope-IN, i.e. any violation of scope-OUT or any unrequested edit. 4. MISSING 20%: List error handling, edge cases, and non-functional requirements (logging, locale, performance, security) that the brief implies but the diff does not cover. 5. RISKS BEFORE COMMIT: Anything I should manually check that automated tests won't catch. OUTPUT: A numbered list per section above. For each finding: file:line, one-line description, severity (CRITICAL / HIGH / MEDIUM / LOW). End with one line: 'Net recommendation: approve / approve-with-fixes / reject'. Do NOT modify anything, report only. I decide what's valid.
- ROLE 'adversarial reviewer who did NOT write this' counters the agent's bias to defend its own work, sceptical framing surfaces more real issues than 'check your work, please'.
- Pasting the acceptance criteria and scope-out line as INPUT turns the brief into the review rubric, the self-review checks against your contract, not against a generic notion of quality.
- Section 2 (SILENT FAILURES) is the high-value block: it directly asks whether tests would fail on a broken implementation, the exact check that exposes gamed/empty verification that 2026 benchmarks show models slip into under pressure.
- Section 3 (SCOPE) makes scope creep a named output you can act on, rather than something you hope to notice while skimming.
- Section 4 (MISSING 20%) forces the agent to enumerate the error-handling/edge-case/non-functional gaps that are the most common 'looks done but isn't' failure.
- 'Do NOT change any code, report only' keeps this a review you can trust before you let the agent touch anything again; you stay the decision-maker ('I decide what's valid').
- Run this as a separate pass (or a fresh context) so the reviewer isn't anchored on the implementer's rationalisations, a second set of eyes, even from the same model, catches more than one continuous stream.
Common mistakes to avoid
- Accepting the agent's 'done' message and prose summary instead of reading the diff, the prose is a claim; the diff and the real test output are the evidence.
- Letting the agent apply changes before you've seen them, because you didn't put it in plan/propose mode, review-before-apply is the whole point of the loop.
- Skimming a large diff and clicking approve on the vibe, instead of mapping each hunk to a line of the brief and questioning the ones that map to nothing.
- Trusting 'all tests pass' without running the check yourself, a test that's green before and after the change, or an assertion quietly weakened, tests nothing.
- Missing scope creep because you never diffed the touched file paths against your scope-OUT line, the collateral edit is the most common silent failure.
- Treating the loud, scary-looking hunk as the risk while waving through the small unexplained one, unexplained changes are where silent failures actually live.
- Blaming the model for an outcome a clearer scope or a runnable acceptance criterion would have fixed, then reaching for a bigger model instead of a better brief.
- Correcting the agent only in chat so the learning evaporates, instead of promoting it to CLAUDE.md / AGENTS.md or the brief template.
- Listing ten things to improve at once, leaving you unable to tell which change actually helped the next run.
Source conflicts to review
- Plan-mode activation is described inconsistently across guides (Shift+Tab cycling vs typing /plan vs a defaultMode setting), all reported valid as of June 2026; confirm against code.claude.com.
- Codex's review surface and approval behaviour shift across point releases (inline-comment handling, smart approvals default-on since ~v0.120); treat the mechanics here as accurate as of June 2026 and re-check the official review page before relying on specifics.
- Reward-hacking / silent-failure exploit rates vary widely by model and by benchmark methodology (e.g. SpecBench's validation-vs-held-out gap, the Reward Hacking Benchmark's per-model rates from ~0% to ~14%); these are research findings on a moving target, not fixed product facts, cite the specific benchmark and date and don't generalise a single number across all models.
Key terms
- Reviewed workflow loop
- The unit of professional agentic work: SCOPE -> BRIEF -> PROPOSE-DIFF -> REVIEW -> APPROVE -> VERIFY, run on one task end to end.
- Propose-diff (propose-only)
- Having the agent show the intended change without applying it. Claude Code plan mode or Codex's read-only/diff-pane proposal, so you review before any file is touched.
- Plan mode
- Claude Code's read-only mode (Shift+Tab to cycle in, or /plan) that presents a numbered plan and intended changes while making zero edits.
- Diff pane
- Codex's surface for inspecting uncommitted/staged/branch changes, leaving inline comments per line, and staging/reverting per diff, file, or hunk.
- Hunk
- A contiguous block of changed lines in a diff, the unit at which you review (does this serve the brief?) and approve (keep or revert).
- Partial approval
- Accepting only the hunks that match the brief and reverting the rest, possible because Codex stages/reverts at hunk level.
- Verification
- Running the brief's acceptance check and reading the real output, rather than trusting the agent's 'done' summary.
- Silent failure
- A run reported as successful that is actually wrong, incomplete, or out of scope, the costliest failure because nothing alerts you.
- RED-then-GREEN
- A test that FAILS on the unfixed code (RED) and PASSES after the change (GREEN); a test green both before and after proves nothing.
- Gamed verification
- Making a check pass without making the behaviour correct, empty/weakened assertions, skipped or deleted tests, or tampering with the grader.
- Reward hacking
- The research name for gamed verification, an agent optimising the signal that measures success (a passing test, a green check) instead of the behaviour the signal was meant to measure.
- 80% problem
- When the happy path works but the missing 20% (error handling, edge cases, non-functional requirements) is exactly what mattered.
- Weakest input
- The single element of your brief or setup that most limited the result, the highest-leverage thing to fix next run.
- Standing rule
- A learning promoted from a one-off chat correction into a persistent CLAUDE.md / AGENTS.md instruction or brief template.
- Acceptance criteria
- The measurable definition of done set in the brief, used both to steer the run and to review whether it actually succeeded.
Resources
- docClaude Code. Best practices (plan mode, review-first)
- docCodex. Review (diff pane, inline comments, /review)
- docCodex. Best practices (verification, treat output like a PR)
- docCodex. Prompting guide (briefs, plan, goal)
- docClaude Code. Memory & CLAUDE.md (where standing rules live)
- articleSpecBench, measuring reward hacking in long-horizon coding agents
Checkpoint

