Heimdall ResearchSearch

The guard

The guard does not try to make an AI agent reason correctly. It limits what the agent's actions can do: before a tool call reaches a service, it checks the formal conditions it can see, and refuses the call or holds it for a person when they fail.

What it checks

One mark per study: filled when published, outlined when not yet published.
CheckStudies
One effect per operation8 published
Whose object it is6 published
Where each argument came from2 published
Whether the grounds are still current4 published, 30 not yet published
Mandates, limits and people4 published
The rules themselves3 published
What it costs4 published
Where it stops3 not yet published

An example

An agent is asked to refund one customer’s payment. It may pick the wrong customer, take a payment id from a note in the ticket that nobody checked, refund a payment that another agent refunded a second ago, or act on a policy that changed this morning. The guard sees the call before the service does. It checks that the payment belongs to the customer this session works for, that the id came from something the session read, that no refund of this payment is already recorded, and that the grounds the action rests on are still current. If a check fails, the call is refused or held for a person, and nothing reaches the service. None of this depends on how well the model reasons.

Where it sits

The guard runs as an HTTP gateway in front of a service’s API, or as a proxy in front of an MCP server. Each service is described by a declaration: which calls change state, which fields identify an object and who owns it, and what a read returns. The same checks run for refunds, bookings, GitHub issues and budgets that count operations instead of money. Refunds are the main test domain because a duplicated or misdirected refund is easy to count; the guard is not a payments product.

What the evidence shows, and what it does not

Each check below links to the studies that test it, labelled with the question each one answers. Where the guard stood between agents and the service, duplicated refunds and reads of another customer’s objects went to zero, as its design requires, while unguarded agents made them. Whether holding every check at one boundary is worth more than building each one separately has not been measured yet.

One effect per operation

The guard records each operation before sending it. A second request for the same operation is refused before anything is sent, and when an answer is lost the outcome is reported as unknown instead of being retried blindly.

Without the guard

50 of 50 refunded twice

With the guard

0 of 50 refunded twice

Pairs of agents given one ticket at once, on a simulated provider. DUP-02, re-checked.

8 published: 6 predictions held, 1 failed, 1 measurement; 6 re-checked.

Whose object it is

An action may touch only an object this session saw belong to its principal: the customer, the account or the repository the agent works for.

Without the guard

278 of 320 read another customer's payment

With the guard

0 of 320 read another customer's payment

Episodes across four models and four lures; no harmful refund occurred in either arm. OWN-02, re-checked.

6 published: 1 prediction held, 1 no difference, 3 mixed results, 1 measurement; 4 re-checked.

Where each argument came from

Every identifier and amount must trace to something read in the session, and an action on all of a set needs the complete set, not its first page.

2 published: 1 failed, 1 mixed result; none re-checked yet.

Whether the grounds are still current

An action that rests on a value read earlier is checked against the value now, so a withdrawn or amended requirement does not carry an action through.

4 published: 2 predictions held, 2 measurements; 2 re-checked.

And 30 more studies, not yet published.

Mandates, limits and people

Operator mandates and budgets bound what may happen, counted in money or in operations, and an action above a threshold is held for a person to decide.

4 published: 1 prediction held, 3 measurements; 4 re-checked.

The rules themselves

The guard enforces what its declarations state. Probe stands and a model of execution authority check the declarations themselves.

3 published: 1 prediction held, 1 failed, 1 measurement; none re-checked yet.

What it costs

Time per action, what the guard keeps about people, what an agent can learn from a refusal, and whether the guard changed what agents spent.

4 published: 1 prediction held, 1 failed, 1 mixed result, 1 measurement; 2 re-checked.

Where it stops

The guard holds what a principal wrote into a checkable field, and links made by value. If an agent misreads its task in a way no rule expresses, the guard cannot make the result correct.

3 studies, not yet published.

Next tests

  • The duplicate-delivery result in a second, non-money domain, with two agents booking one slot.
  • What the once-only check adds at the layer's executor, against simple keys, a lock and an ordinary integration kit.
  • Whether holding every check at one boundary is worth more than building each one separately.
  • Agents misled about their task, with and without a grant signed by the principal.
  • Coding agents' replies after a refusal, coded blind across vendors.