
What Mandate uses from Hermes
pre_tool_callandpost_tool_callhooks, registered frommandate_core/plugin.pyctx.current_cron_execution()so each job gets its own policy and two jobs running at once never share onectx.register_cli_command,ctx.register_command, andctx.register_toolfor the CLI,/mandate, andmandate_status- The plugin storage path for
<HERMES_HOME>/plugin-data/mandate/ - Optional read-only routes on Hermes’s local Desktop API, behind Hermes’s own auth
plugin.yaml requires >=0.23.0.
Related Hermes issues
Mandate exists because unattended jobs can still run with the agent’s full toolset. These open issues, titles verified on 10 Nov 2026, describe that gap in Hermes’s own words:- #20984: feat: add cron_mode: allowlist to restrict cron jobs to command_allowlist only
- #60505: Approval gate: fail-closed option for non-interactive contexts + permanent allowlist bypasses cron_mode deny
- #144434: [Bug]: command_allowlist (Always Allow) also exempts commands in cron runs with cron_mode: deny
- #83626: Cron command guards ignore cron_mode when HERMES_EXEC_ASK is inherited
- #58673: [Bug]: approvals.cron_mode: deny never applies to gateway-hosted cron/kanban sessions — each gated call blocks for approvals.gateway_timeout