Human oversight fails in two familiar ways: the review step exists on paper but the code path around it doesn't ("we'll add the queue later"), or the review exists but degrades into rubber-stamping because it was designed for compliance optics rather than for the reviewer. Both are architecture problems, and both are solvable at design time. Three patterns cover most enterprise needs: review gates, threshold-based routing, and mandatory escalation.
Pattern 1: the review gate
A review gate is a hard stop between model output and effect: the output lands in a queue, and nothing happens until a named human disposes of it — approve, edit, or reject. The defining property is that the automated path does not exist. If an engineer can point to a code branch where the output reaches the customer or the ledger without a human action, you have a suggestion box, not a gate. Gates suit outputs that are consequential and low-to-moderate volume: outbound legal correspondence, credit memos, policy exceptions. Record the disposition in your decision audit trail — the reviewer's identity and decision are the accountability record.
Pattern 2: threshold-based routing
When volume makes reviewing everything impractical, route by risk instead. A word of caution first: asking the model to rate its own confidence produces a number, not a guarantee — treat self-reported confidence as one weak signal, never the sole gate. Stronger routing signals are programmatic:
- Deterministic checks: does the output parse, cite a real record, stay within numeric bounds your code can verify? Structured outputs (available across the Claude platforms, in beta on Foundry) make these checks reliable.
- Category rules: your own classifier or keyword rules flag topics that always need eyes — see high-stakes output review.
- Sampling: even fully-automated lanes should send a random slice to reviewers, so quality drift is noticed and reviewers stay calibrated.
Pattern 3: mandatory escalation
Some events should always reach a human regardless of confidence — and one of them comes from the API itself. Recent Claude models can end a response with stop_reason: "refusal"; on Claude Fable 5, safety-classifier refusals also carry a stop_details.category field (documented categories include "cyber" and "bio"). A refusal in a production flow is information: either a user is probing your system or your use case is drifting somewhere it shouldn't. Route refusals to a human queue rather than silently retrying. (An opt-in beta fallbacks parameter can auto-retry on another model — convenient for availability, but for governance-sensitive flows an unexamined auto-retry defeats the signal.)
from anthropic import AnthropicBedrockMantle
client = AnthropicBedrockMantle(aws_region="us-east-1")
msg = client.messages.create(
model="anthropic.claude-opus-4-8",
max_tokens=2048,
messages=[{"role": "user", "content": case_text}],
)
if msg.stop_reason != "end_turn":
escalate(case_id, msg) # refusal, truncation — always a human
elif is_high_stakes(case): # your rules, checked in code
review_queue.add(case_id, msg)
else:
auto_apply(case_id, msg) # low-risk lane, sampled for QA
Choosing among the patterns
The three patterns compose rather than compete. A mature system typically runs all of them at once: mandatory escalation as the outermost net (refusals, errors, novel input types), category rules routing defined high-stakes lanes to hard gates, and threshold routing with sampling covering the high-volume middle. Decide the mix per output lane using the automate-vs-review framework, write the decision down, and revisit it whenever the model, the system prompt, or the audience changes — oversight designed for last quarter's system quietly stops matching this quarter's risks.
Keeping reviewers accountable — and awake
A gate staffed by someone approving 400 items a day is a formality. Design for real review: show the reviewer the input and the model's output side by side, not just the output; cap queue throughput expectations; rotate reviewers; and track override rates. An override rate near zero is not good news — it usually means the review is theater or the easy cases are drowning the hard ones. Reviewer edits are also free training data for your eval suite.
Where to go next
Decide which lanes need which pattern with the automate-vs-review framework, and see human-in-the-loop patterns for implementation detail.