About

We don't trust your agent. We authorize the action.

NullRun decides before an action runs. The decision is bound to the payload, and a changed payload is refused.

Agents will eventually take an action they shouldn't.
Not because the model is bad.
Because the system has no veto.

NullRun is that veto.
Bound to the payload. Decided before it executes.

What stops the agent from doing something catastrophic?
Today the answer is a prompt that says be careful.
A prompt is not a control plane.

Four principles

The rules NullRun ships under. They do not change.

01

Decide before execute

Authorization happens before the action lands. Reordering to observe later is not authorization.

02

Payload over prompt

The grant is bound to the typed action payload. User input and the system message are not part of it.

03

Refuse by default

When in doubt, refuse. The cost of an unexecuted action is always lower than the cost of an executed wrong one.

04

Audit the decision

Every block and every approval is logged — a hash-chained row, not a summary. Allowed calls are recorded in the cost trail. On Lite and Starter the audit log is not part of the plan, so there it is a plan choice rather than a control.

Who it's for

Four roles use it differently. They all read the same audit log.

Developer

Wraps the agent, ships the workflow.

A single @protect decorator that doesn't blow up under load.

Operator

On call when the workflow misbehaves.

Kill switch, approval queue, real spend — one screen.

Security

Audits the decisions, signs off on the controls.

A tamper-evident log, a typed payload, no prompt recall.

Finance

Watches the bill, owns the spend ceiling.

One counter, bound to the billing period.

What NullRun is — and what it isn't

What NullRun is, and what it is not.

Is: Runtime authorization for AI agents.

Is not: Not an LLM firewall.

Why not: An LLM firewall reads prompts. NullRun reads the action.

Is: Decides before actions execute.

Is not: Not observability-only.

Why not: Observability describes what already ran. NullRun answers before the action.

Is: Controls tools, costs, and approvals.

Is not: Not an agent framework.

Why not: A framework hosts the agent. NullRun refuses what it tries to do.

Is: Binds approvals to a typed action payload, not the prompt.

Is not: Not a guardrail library.

Why not: A guardrail nudges. NullRun refuses.

Is: Refuses the grant if the payload changes between approve and execute.

Is not: Not OAuth or an identity provider.

Why not: OAuth was designed for a client that was human.

Is: Authorizes like a bank transaction — not a policy dashboard.

Is not: Not a replacement for IAM.

Why not: A dashboard informs. NullRun controls.

Is: Creates explainable audit trails.

Is not: Not a prompt recorder.

Why not: A prompt recorder logs what the model said. NullRun logs what was decided.

Is: Works alongside your existing guardrails, policies, and observability.

Is not: Not a replacement for your agents.

Why not: The agent does the work. NullRun decides whether the work proceeds.

Six architectural choices

Each one shows up in the audit log rather than in a feature comparison table.

Stateful Spend

Spend is refused against a counter bound to the billing period. The check runs before the spend. The org has one and each workflow has its own, and a workflow cap is measured against that workflow's spend — never against the org's.

Sub-cent Precision

The counter carries millicents — a thousandth of a cent — so rounding cannot quietly push you past the cap. The settlement tolerance is a fixed number of cents, never a percentage, so it cannot scale with the size of the spend.

Server-assigned IDs

Every action gets its own ID — generated by us, not handed in by the caller. It is bound to the org and key that requested it, and that binding is re-compared atomically when the spend settles.

Fail-closed

When something we depend on goes down, we block the action rather than letting it through. A legitimate request refused is easier to retry than a risky one approved.

Refusals are Evidence

Every blocked action leaves a hash-chained row, so an auditor sees what was prevented as well as what ran. On Lite and Starter the audit log is not part of the plan, so there it is a plan choice rather than a control.

Tamper-evident Log

The action history is locked: every entry is cryptographically linked to the one before it. Anyone with the log can verify nothing was edited, added late, or deleted — no special access required.

Behind the build

Anatolii Maltsev

Founder & Lead Engineer

Background in fintech SDET, agentic AI, and systems that had to refuse.
Watched teams stack guardrails on top of prompt engineering and call it safety.
Authorization belongs to the system around the model.
NullRun is that system.

Anatolii Maltsev
    About NullRun — runtime authorization for AI agents — NullRun