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 = trueSettings
| Key | Default | What 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.tomldry_run appears in the policy band of the printed stack.
Next
- Blast radius limiter - allow writes, but bound them.
- Risk-based approval - allow writes with a person in the loop.
- All middleware - the full stack and slot ordering.