Skip to content

Respire for Hermes Agent ​

Hermes logo

respire-hermes implements the Memory Provider Plugins contract, so Hermes shares the same local encrypted library as the other agents on this machine (ZCode, Kimi Code and friends). Unlike the hook adapters, it is a directory provider: Hermes calls it through the provider API rather than shell hooks. See the plugin overview for the shared tuning reference.

What it does ​

  • prefetch every turn: recalls the title tier for the current query (score + short id + title, truncated to the budget); the agent reads full records with respire_show
  • system_prompt_block: injects the usage rules plus a state probe (engine missing / not signed in / empty library / model missing — one section each, silent when ready)
  • Three tools: respire_recall / respire_show / respire_remember (store-with-judgment: near-duplicates return candidates; the model decides to attach or force-write)
  • Prompts starting with 「记:」 / 「存:」 / remember: are stored directly by the provider; /nomem disables automatic recall for the turn
  • Later prefetch calls may add a storage reminder based on turn count and recent storage time
  • fail-open: engine missing, timeout or parse failure degrade to an empty injection — the host turn is never blocked

It is a wrapper-style provider with zero Python dependency footprint: the engine is the rsrs CLI called as a sidecar subprocess. The plugin root carries no pyproject.toml / pip_dependencies, so it enjoys the HERMES_HOME survival contract (hermes update leaves the directory alone). Note that the respire library itself is user-level — one library per person shared across all agents and Hermes profiles, by design, unlike Hermes' per-profile storage default. Hermes allows only one external memory provider at a time.

Install ​

Prerequisites: Python 3.9+ and Hermes 0.22.5 or later. The README lists Linux and Apple Silicon macOS; other platforms and versions need verification.

Use the CLI installed by Client 2, or install it separately only if needed. If the host cannot find it, see CLI access for plugins.

bash
# 1) Engine (skip if installed; verify with rsrs --version)
rsrs --version
# semantic recall (optional): rsrs model install && rsrs model activate m3

# 2) Plugin (either way)
git clone https://github.com/risense-ai/respire-hermes.git
cd respire-hermes
bash scripts/install.sh                 # copies into $HERMES_HOME/plugins/respire/
# or manually: cp -R this directory (minus .git/dist) to ~/.hermes/plugins/respire/

# 3) Activate
hermes memory setup                     # pick respire in the wizard (asks only for the rsrs path; empty = auto-detect)
# or set memory.provider: respire in config and restart Hermes

Verify with hermes respire status (the subcommand exists only while this provider is active).

Configuration ​

The wizard is minimal by design (rsrs_path only). Optional settings live in $HERMES_HOME/respire.json (see respire.config.example.json). The shared fields are documented in the overview; Hermes adds auto_recall (default true — false keeps only the tools). Environment variables: RESPIRE_BIN / RESPITE_RSRS (engine path), RESPITE_CONFIG (config file path), RESPITE_LOG (log path). Logs go to $HERMES_HOME/respire/plugin.log.

Import existing memory ​

Hermes' built-in memory and an external provider coexist: after switching to respire, MEMORY.md / USER.md are still injected into the system prompt, but respire's prefetch does not read them. Pick the path that matches where the old memory lives.

Built-in memory ​

MEMORY.md (agent notes) and USER.md (user profile) live in $HERMES_HOME/memories/, or $HERMES_HOME/profiles/<name>/memories/ for a named profile. Entries are separated by §; the two files are capped at 2,200 and 1,375 characters.

The recommended path is to let Hermes migrate them in a fresh session, so respire_remember handles dedup and causal attachment:

Read $HERMES_HOME/memories/MEMORY.md and USER.md, split each file into entries on §, and store each entry with respire_remember:

  • one factual "subject + action + result" title per entry, importance=important;
  • keep each fact intact; do not merge different facts into one entry;
  • on a pending result (similar candidates), decide first: attach with parent for the same fact, or force a new entry for a different fact;
  • finish by spot-checking 2-3 entries with respire_recall.

You can also write entries from the shell (note that rsrs remember defaults to trivial, so pass important explicitly):

bash
rsrs remember "<entry>" --title "<fact-sentence title>" --importance important

For larger sets, rsrs import <file.json> takes a JSON array (use rsrs export output as the format sample; run rsrs audit afterwards to check for duplicates). Keep the built-in entries for a while after importing: confirm respire recall is reliable before trimming them, or the two copies will drift apart.

Hermes session history ​

rsrs extract supports Hermes natively, but it extracts session records, not MEMORY.md:

bash
rsrs extract --targets                       # confirm the hermes source is detected
rsrs extract --id hermes --dry-run           # preview
rsrs extract --id hermes --since 90d --limit 50

Each session becomes one memory (title Hermes session <first request>, body in the 【cause】【action】【result】 form) and lands as a root; tidy afterwards with rsrs audit, rsrs candidates and rsrs tree-cure. --since / --limit bound the run, and repeated runs skip unchanged sessions by source fingerprint.

Other memory providers ​

Hermes has no cross-provider migration API: switching only deactivates the old provider, and its data stays on that service. Export from the old provider first (for example Honcho's conclusions / profile), turn it into the JSON array accepted by rsrs import, or have the agent read it in-session and call respire_remember per entry. rsrs share-import is only for rsrs subtree sharing, not a general importer.

Tools ​

ToolArgumentsNotes
respire_recallquery (required), limit (default 8, ≤20)Title-tier recall
respire_showid (first 8 characters of the short id)Full record plus upstream/downstream cause chain
respire_remembercontent (required), title, importance, parent, forceStore with judgment; pending = candidates awaiting decision

A read-only skill respire:respire (the full memory playbook) is also registered.

Known limits ​

  • Limited real-machine validation: the README records a provider-chain check on the Hermes 0.22.5 baseline. Stub tests do not establish behavior on other versions, platforms or concurrent sessions.
  • The desktop settings-panel file (config_schema.py) has no published format; configure by editing respire.json for now.
  • The optional on_memory_write hook is not implemented: entries added or changed through Hermes' built-in memory tool are not mirrored into rsrs automatically. Migrate them with Import existing memory; long-term automatic sync would require adding that hook.

Development and packaging live in the repository README.