CertSafari
    Anthropic Claude Certified Architect – Foundations (CCAR-F)· Lessons

    Domain 4 · Lesson 24/30

    Independent Review Instances vs. Self-Review

    Design multi-instance and multi-pass review architectures

    11 min read
    3.33% of exam
    5 sources
    Published 4 Oct 2026
    Docs as of 30 Sep 2026

    What you will be able to do

    • Explain why a model that generated code is a weak reviewer of that same code within the same session
    • Explain how reasoning context retained from generation makes a model less likely to question its own decisions in that session
    • Distinguish a genuinely independent review instance from a resumed or forked session
    • Configure a read-only reviewer subagent and a writer/reviewer session pattern
    • Write reviewer criteria that force the reviewer to produce evidence instead of approving by default

    Key concept

    Independent review instance — A reviewer that starts in a fresh context, without the generator's reasoning, decisions, or shortcuts. Because it never saw why the code was written the way it was, it judges the artifact itself, not the story behind it.

    1.Why the generator is a weak grader of its own work

    By the time a session finishes writing code, its context holds every decision it made along the way: the approach it picked, the edge cases it decided not to handle, and the reasons behind each choice. Ask that same session to review the code and it reads the diff through all of that. Claude Code's best-practices guide shows what accumulated context does to quality. In the "correcting over and over" anti-pattern, "Context is polluted with failed approaches." The fix it gives is a clean context, not more instructions in the same one.

    This doesn't make self-checks useless. The prompting guide recommends appending a line like "Before you finish, verify your answer against [test criteria]" and notes that "This catches errors reliably, especially for coding and math." It also says Claude Opus 5 verifies its own work well without being told to. A self-check like this is still the same mind marking its own homework, though. Claude Code's verification options make the difference clear. A check can run inside one prompt, a separate evaluator can re-check a /goal condition after every turn, a Stop hook can run a script, or a second opinion can come from a fresh model.

    A note on scope: the exam guide claims that independent instances beat extended thinking as well as self-review instructions. The sources for this lesson compare independent review only with self-check instructions and same-session iteration. They don't discuss extended thinking.

    The core limitation is that a model retains its reasoning context from generation. In the evaluator-optimizer cookbook, a generation turn begins with the model's own thoughts, for example "To achieve O(1) for getMin(), we need to maintain a second stack that keeps track of minimums." Once that reasoning is in the session, every later turn in the same session reads the code with that plan already in view. The code looks like the plan carried out, so the decisions behind it feel settled and the model is less likely to question them. A choice that was wrong but felt justified at writing time reads as justified again at review time.

    A reviewer outside the session lacks that reasoning, so it has nothing to defer to. The Outcomes cookbook builds its grader this way: it "can't see the writer's reasoning and has no idea what shortcuts were taken," so it has to judge the artifact against the criteria. Be precise about what the sources establish. They show the design, where the grader is deliberately kept out of the writer's context. They do not measure how much less likely a model is to question its own decisions, so treat that as the exam guide's framing of why the design exists, not as a quantified result.

    Claude Code's verification strategies and who actually does the checking
    StrategyWho checks the work
    In one prompt: ask Claude to run the check and iterateThe same Claude that did the work, in the same message
    Across a session: set the check as a /goal conditionA separate evaluator that re-checks after every turn
    As a deterministic gate: a Stop hookA script that blocks the turn from ending until it passes
    By a second opinion: a verification subagent or dynamic workflowA fresh model that tries to refute the result

    Checkpoint 1 of 6· Check yourself

    A team appends "Before you finish, verify your answer against the test criteria" to its code-generation prompt and calls this its independent review step. What is wrong with that label?

    Sources1234

    2.What makes a review instance independent

    Independence depends on the reviewer's context, not its name. In the Agent SDK, each subagent runs in its own conversation, which starts fresh unless the subagent is a fork. Its intermediate tool calls stay inside it, and only its final message goes back to the parent. A reviewer subagent that starts fresh sees the diff and whatever you put in its prompt. It doesn't see the reasoning that produced the diff.

    The Managed Agents Outcomes feature is built around the same idea. After each writer turn, the platform spins up a fresh grader with the same model and tools as the writer. The grader can't see the writer's reasoning and has no idea what shortcuts the writer took. It shares the writer's capabilities but none of the writer's context, and that combination is the point.

    So picking up the generating session again, or forking it, doesn't give you an independent reviewer, even if you change its instructions. The conversation that wrote the code is still there.

    Checkpoint 2 of 6· Exam question

    A team built a pipeline where the same Claude instance that generates code is then asked, within the same conversation, to 'review your own work for bugs before finishing.' QA later finds subtle issues the model missed during that self-review step. Which architectural change is most effective at catching those issues going forward?

    Checkpoint 3 of 6· Check yourself

    Which reviewer setup gives you a review without the generator's reasoning context?

    Sources54

    3.Wiring a second instance to review generated code

    Claude Code documents two practical ways to do this. The first uses two sessions. Session A (the writer) implements a rate limiter. Session B (the reviewer) gets a focused prompt: "Review the rate limiter implementation in @src/middleware/rateLimiter.ts. Look for edge cases, race conditions, and consistency with our existing middleware patterns." You then paste B's output back into A: "Here's the review feedback: [Session B output]. Address these issues." B never saw A's reasoning, so it reviews only the code.

    The second uses a reviewer subagent in the same session: "Use a subagent to review the rate limiter diff against PLAN.md." The subagent gets its own context and returns only its findings. Define it as read-only so it can analyze code but can't change it. The Anthropic cookbook calls this a generator/evaluator loop, in which "one LLM call generates a response while another provides evaluation and feedback in a loop."

    A file-based reviewer subagent restricted to read-only toolsmarkdown
    ---
    name: code-reviewer
    description: Reviews code for quality and best practices
    tools: Read, Glob, Grep
    model: sonnet
    ---
    
    You are a code reviewer. When invoked, analyze the code and provide
    specific, actionable feedback on quality, security, and best practices.

    Checkpoint 4 of 6· Fill the gap

    Which frontmatter field limits this reviewer to read-only tools?

    ---
    name: code-reviewer
    description: Reviews code for quality and best practices
     ? : Read, Glob, Grep
    model: sonnet
    ---

    Checkpoint 5 of 6· Put it in order

    Put the writer/reviewer session workflow in order

    1. 1.Session B (reviewer) reviews the implementation for edge cases and race conditions
    2. 2.Session A receives Session B's feedback and addresses the issues
    3. 3.Session A (writer) implements the rate limiter

    Sources13

    4.Making the independent reviewer actually check

    A fresh context alone doesn't guarantee a useful review. The Outcomes cookbook warns that "The default failure mode is a grader that approves everything." A criterion like "check that the brief covers demand charges" lets the grader skim, spot a matching paragraph, and approve without opening a single source. A criterion that says where to look and what has to be there forces the grader to produce evidence.

    The cookbook's rubric principles apply directly to code review. Require concrete evidence, such as a file:line reference, before passing anything. Anticipate the shortcuts the writer is likely to take. Give the reviewer a no-fire list so it doesn't thrash on style nits, pre-existing issues, or scope creep, and have it self-check each finding before raising it. The Claude Code version of this is the reviewer prompt that ends with "Report gaps, not style preferences." The trade-off is lopsided: a grader that is too strict costs you an extra loop, while one that is too lenient lets the bad version ship.

    Checkpoint 6 of 6· Check yourself

    An independent grader approves almost every first draft, and the revise loop rarely runs. What is the most likely fix?

    Sources14

    Exam traps

    Each one states something that sounds right. Open it to see what is actually true.

    1. 1.Continuing or forking the session that generated the code, then giving it a reviewer prompt, counts as an independent review.Why is that wrong?

      Independence comes from a fresh context. A subagent starts fresh only when it isn't a fork, and a continued session still holds the generator's reasoning.

      Covered in What makes a review instance independent

    2. 2.Adding a "verify your work" instruction to the generating prompt gives the same assurance as a second reviewer.Why is that wrong?

      Self-checks catch errors, but the worker still grades itself. The second-opinion pattern uses a fresh model specifically so that the worker isn't the grader.

      Covered in Why the generator is a weak grader of its own work

    Sources

    Every claim above is drawn from one of these pages, quoted as it was written on the date shown.

    1. 1.
      “Context is polluted with failed approaches.”
      ↩︎ Why the generator is a weak grader of its own work
      “Review the rate limiter implementation in @src/middleware/rateLimiter.ts. Look for edge cases, race conditions, and consistency with our existing middleware patterns.”
      ↩︎ Wiring a second instance to review generated code
      “Use a subagent to review the rate limiter diff against PLAN.md.”
      ↩︎ Wiring a second instance to review generated code
      “Report gaps, not style preferences.”
      ↩︎ Making the independent reviewer actually check
      “has a fresh model try to refute the result, so the agent doing the work isn’t the one grading it.”
      ↩︎ Exam trap 2
      “has a fresh model try to refute the result, so the agent doing the work isn’t the one grading it.”
      ↩︎ Prediction
      “Here's the review feedback: [Session B output]. Address these issues.”
      ↩︎ Checkpoint
    2. 2.
      “This catches errors reliably, especially for coding and math.”
      ↩︎ Why the generator is a weak grader of its own work
      “Claude Opus 5 is the exception: it verifies its own work well without explicit instruction”
      ↩︎ Why the generator is a weak grader of its own work
    3. 3.
      “To achieve O(1) for getMin(), we need to maintain a second stack that keeps track of minimums.”
      ↩︎ Why the generator is a weak grader of its own work
      “one LLM call generates a response while another provides evaluation and feedback in a loop.”
      ↩︎ Wiring a second instance to review generated code
    4. 4.
      “The grader can't see the writer's reasoning and has no idea what shortcuts were taken.”
      ↩︎ Why the generator is a weak grader of its own work
      “the platform spins up a fresh grader with the same model and tools as the writer”
      ↩︎ What makes a review instance independent
      “The default failure mode is a grader that approves everything.”
      ↩︎ Making the independent reviewer actually check
      “Spell out what's out of bounds and have it self-check each finding before raising it.”
      ↩︎ Making the independent reviewer actually check
      “The grader can't see the writer's reasoning and has no idea what shortcuts were taken.”
      ↩︎ Key concept
      “Require concrete evidence (a fetched page, a traced formula, a file:line reference) before the grader passes anything.”
      ↩︎ Checkpoint
    5. 5.
      “only its final message returns to the parent.”
      ↩︎ What makes a review instance independent
      “each subagent runs in its own conversation, which starts fresh unless the subagent is a fork.”
      ↩︎ Exam trap 1
      “each subagent runs in its own conversation, which starts fresh unless the subagent is a fork.”
      ↩︎ Checkpoint

    Continue to page 2 of 2

    Multi-Pass Review for Large Multi-File Changes

    Spotted a mistake, or was something unclear? Tell us.