On one machine there is nobody to ask, so the gate stops the call — correct, and the end of the story. The hosted tier is where the question goes: to a person, through whatever your organisation already uses to reach one.
A pending approval carries the magnitude, the ceiling it crossed, and the policy digest it was judged under. How it reaches a human is yours to choose — and it is always a human who answers.
The control plane posts the pending approval wherever your team already looks — Slack, Teams, PagerDuty, an internal tool. No new inbox, and the on-call rotation you already trust decides who sees it.
# the payload carries evidence, never your arguments
{
"digest": "a7f3…",
"tool": "remove_group_members",
"magnitude": 41203,
"unit": "principals",
"ceiling": 200,
"expires_at": "…"
}
One call waiting, showing what it would touch against the ceiling that stopped it, with Deny and Approve. The grant is bound to that exact call under that exact policy, single-use, expiring — and refused if the target has grown since they looked.
# the agent, meanwhile
approval a_b271… is pending;
retry this exact call once it
is granted.
This is the screen, working. Press Ask Claude and see what a reviewer gets instead of a number — then notice that the briefing changed what you know and nothing about what happens.
Claude is very good at the part around the decision. It is deliberately not the part that decides.
remove_group_members
expires in 4:52
The 41,203 are every member of all-staff, not the nine leavers in the ticket. The group is nested inside nine applications, so the same call removes their access to each.
This session read offboarding-week-32.csv eleven minutes ago. That file has nine rows. The number in front of you is four thousand times the number in the source it was working from.
A call sized 9 would be under the ceiling and would not have reached you at all. This does not look like the change that was asked for.
This is the point, not a limitation. The gate's verdict is
a static comparison against a number a person committed, sealed into a chain that
re-derives offline. Putting a model in the approval path would make the strongest sentence
neti has — 0 models in the decision path — untrue, and it is the sentence a
security reviewer checks first.
Can one machine do this? If yes, it is Apache-2.0 and free forever. Enforcement runs on one machine, so blocking is free. A second person answering does not, so it is not.
Every paid item is a hole SCOPE.md already documents, or work that exists only because more than one person did it.
confirmPaying adds no availability risk to enforcement. Unreachable, absent or unpaid behaves exactly as a free install — a control plane can only widen a decision, never narrow one. That is a test in the repository, not a promise on a page. And the client is already open: read the protocol, write your own server, hold it to the same tests.
Tell us how many agents you are running and what you want a human to see before it happens. If the free tier already covers you, we will say so.