Skip to main content
A gloved hand clipping an orange leash onto a steel ring set in concrete.
Requires Hermes Agent v0.23.0 or later. Mandate is a standalone plugin. It has no runtime dependencies beyond the Python standard library.
1

Install and enable

2

Observe

Start recording a job. Observe mode never blocks.
watch accepts a cron job name or id. If you pass a name that has not run yet, Mandate stores a placeholder (name:nightly-triage) and the first cron run of a job with that name adopts it.Let the job run at least three times. propose will compile with fewer runs, but it prints a warning: 3 or more give a more reliable mandate. MIN_RUNS in the compiler is 3.By default, observe_all_cron is true, so Mandate also records call shapes for cron jobs you have not watched yet. You can still propose those from hermes mandate list. If you turn observe_all_cron off, only watched jobs are recorded.
3

Propose

This compiles the observed runs into a pending mandate and prints it, with an evidence count (# seen Nx) on every rule. Nothing is enforced yet. If the compiled YAML is byte-identical to the current pending or active mandate, it prints the text and says it is unchanged.
4

Approve

Mandate shows a unified diff of the active mandate (or empty) against the pending one, then asks y/N. Approval needs a TTY, or you must pass --yes. After you approve, the job switches to enforce unless you also pass --observe, which stores the approval but keeps recording without blocking.
5

Enforce and inspect

That prints the Leash Line. If you approved with --observe, switch later with hermes mandate enforce nightly-triage. You can go back with hermes mandate observe nightly-triage.

What happens on the next run

In enforce mode, a call inside the approved mandate runs as usual. A call outside it is blocked in pre_tool_call, before the tool runs, and a drift record is stored. The block message names the failed rule, the drift id, and the exact widen command.
Widen only proposes a new pending version. The active mandate does not change until you approve again.

Uninstall

Disabling leaves no residual effect. Mandate changes no Hermes config and wraps nothing.