The short version: sessions and scopes authorize the actor. Pre-action authorization authorizes the action — the exact destination, the exact amount, the exact parameters — before execution.
Most authorization systems answer one question: is this caller allowed to do things in this category? A user with a valid session and the right role can transfer funds. An AI agent with a valid OAuth token and the right scope can call the wire-transfer tool. The system says yes.
That answer was good enough when the gap between "decided to act" and "acted" was a human pressing a button. It is not good enough when the actor is an autonomous program that can be steered — by a prompt-injected document, by a compromised data source, by a malformed model response — into actions the human never authorized. The session was real. The scope was real. The action was not.
Pre-action authorization asks a sharper question: was this exact action — these arguments, this destination, this amount — approved by a named human, and is the approval still valid?
That requires four things the older systems don't typically produce together:
The places where pre-action authorization earns its weight are the places where the cost of an unauthorized action is unrecoverable — not just unwanted:
Pre-action authorization is a layer, not a replacement. It assumes you already have:
What it adds is the missing question between authorization and execution: not can you do it, but did a named human authorize the specific thing you are about to do?
EMILIA Protocol is the open standard implementation of pre-action authorization. The protocol is formally verified — 26 TLA+ theorems, 35 Alloy facts — and the reference runtime is Apache 2.0.