> ## Documentation Index
> Fetch the complete documentation index at: https://mandate-db2d83af-26675499.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Built on Hermes

> Mandate is a plugin for Hermes Agent by Nous Research, built for the Hermes Agent Plugin Hackathon.

Mandate is built on [Hermes Agent](https://github.com/NousResearch/hermes-agent) by [Nous Research](https://nousresearch.com).

Thanks to Nous for the Hermes Agent Plugin Hackathon, for shipping a plugin hook that can veto a tool call before it runs, and for making cron execution identity available to plugins. Mandate needs both of those. A prompt cannot do this work.

![A steel snap clip on a ring, with the line: Mandate is a plugin for Hermes Agent by Nous Research.](https://mintcdn.com/mandate-db2d83af-26675499/fcZw1yVF4Ehu6H8R/images/docs-art.webp?fit=max\&auto=format\&n=fcZw1yVF4Ehu6H8R\&q=85\&s=c5f05f66d4d8013e009e220c4e09f94b)

This page is a text credit only. There are no Nous or Hermes logos on this site, on purpose.

## What Mandate uses from Hermes

* `pre_tool_call` and `post_tool_call` hooks, registered from `mandate_core/plugin.py`
* `ctx.current_cron_execution()` so each job gets its own policy and two jobs running at once never share one
* `ctx.register_cli_command`, `ctx.register_command`, and `ctx.register_tool` for the CLI, `/mandate`, and `mandate_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

Mandate is tested against Hermes Agent v0.23.0 and v0.23.1. `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](https://github.com/NousResearch/hermes-agent/issues/20984): feat: add cron\_mode: allowlist to restrict cron jobs to command\_allowlist only
* [#60505](https://github.com/NousResearch/hermes-agent/issues/60505): Approval gate: fail-closed option for non-interactive contexts + permanent allowlist bypasses cron\_mode deny
* [#144434](https://github.com/NousResearch/hermes-agent/issues/144434): \[Bug]: command\_allowlist (Always Allow) also exempts commands in cron runs with cron\_mode: deny
* [#83626](https://github.com/NousResearch/hermes-agent/issues/83626): Cron command guards ignore cron\_mode when HERMES\_EXEC\_ASK is inherited
* [#58673](https://github.com/NousResearch/hermes-agent/issues/58673): \[Bug]: approvals.cron\_mode: deny never applies to gateway-hosted cron/kanban sessions — each gated call blocks for approvals.gateway\_timeout

Mandate does not close those issues. It offers a per-job policy, learned from observed runs and approved by a human, enforced in the hook those issues are about.

Source: [github.com/JoeProAI/mandate](https://github.com/JoeProAI/mandate). License: MIT.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.