Middleware

Dry run

Suppresses every write so a run previews what it would do without doing it.

Slot: policy · Ships: off · Enable per agent in agent.toml

When you want it

Reviewing what an agent intends to change before letting it change anything. Reads still execute, so the agent gathers real context.

What it does

Every tool declared as a write is resolved before it runs. The model gets the notice in place of the tool's result, phrased as a completed step so it keeps walking its plan instead of retrying, and naming the call so it can tell which one was dropped. Reads are untouched.

The audit log records each suppressed call as denied, which is what happened: nothing executed. A write suppressed here also does not spend the blast radius limiter's budget, so a preview shows the whole plan rather than stopping at max_writes for writes that never happened.

Approval is not requested for a suppressed write either. There is nothing to approve when the call is never going to run.

Turn it on

[middleware.dry_run]
enabled = true

Settings

KeyDefaultWhat it does
notice"[dry-run] write suppressed"Text returned in place of a real write result, with the call's name appended. It may not be empty - it is the only signal the model gets that the write did not happen.

A typo in any of these keys fails the boot rather than being silently ignored.

Check it is loaded

axl weave print --config axl-config/agents/<your-agent>/agent.toml

dry_run appears in the policy band of the printed stack.

Next

On this page