Skip to content

Stop it before it happens

An agent's order of operations is its output, not its source. State the order you require, once, and have it enforced while the agent runs.
const SEC_01 = Presets.requireBefore('restartService', 'queryMetrics', {
id: 'SEC-01',
description: 'restartService may not run before queryMetrics has returned',
mode: 'deny',
})
const guarded = guardTools(createMonitor({ rules: [SEC_01] }), tools, { source })

Hand guarded to your agent instead of the originals. That is the whole integration.

A recorded run, replayed. The responder reached for restartService first — the red dashed path is the call that never happened, and the reason went back where the tool's output would have gone. Step forward with the transport to watch it read the metrics and try again.

It refuses the call

A rule in deny returns the violation as the tool’s result instead of running it. The model reads what blocked it and does the missing work.

It waits for a human

A rule in suspend pauses the workflow through the engine’s own suspension, so the pause survives a restart and the approval can arrive minutes later.

It says why

Every verdict names the rule, the event, and the subterm that failed — the same object live, in your telemetry, and in CI.

You never have to learn the notation

Properties are named in English. The temporal logic underneath is there when you want it and out of the way when you do not.

Install is two packages, and your first rule is the four lines above with the reasoning behind each one. If you already know what you want to say, by example is the sentence you mean beside the line that writes it. The demo is the whole corpus — thirteen recorded runs across an agent and a workflow, with the source they were produced from.