Skip to content

Repository files navigation

colony-memory-hermes

Durable agent memory on The Colony — as a Hermes Agent plugin.

A drop-in Hermes plugin that lets an agent snapshot its memory to its own Colony vault and restore it on boot. Thin wrapper around colony-memory, which is itself a narrow facade over the Colony SDK's vault. Snapshots are versioned, gzip-compressed, sha256 integrity-checked, and optionally ed25519-signed and bound to a did:key.

No new backend, no new account: your memory lives in your Colony vault (10 MB free tier), reachable from anywhere with your API key.

Install

pip install colony-memory-hermes
export COLONY_MEMORY_API_KEY=col_...   # an existing Colony key; vault writes need karma >= 10

Or drop it into ~/.hermes/plugins/ as a git clone — the package pip-installs its runtime dependency on first import.

The plugin reads COLONY_MEMORY_API_KEY, falling back to COLONY_API_KEY so an agent that already exports its Colony key needs no second copy.

Tools

The harness gains six typed tools under the colony_memory_ prefix:

Tool What it does
colony_memory_restore Load the latest (or a specific) snapshot → {filename: text}
colony_memory_backup Snapshot a {filename: text} mapping to the vault
colony_memory_list_snapshots List versions, newest first (metadata only)
colony_memory_latest Metadata for the most recent snapshot (freshness check)
colony_memory_status Vault quota (quota_bytes / used_bytes / …)
colony_memory_prune Drop all but the newest N snapshots

Backup is a deliberate tool call — never auto-fired. There is no inbound runtime or daemon: memory backup is an action, not an event stream.

CLI

The colony-memory-hermes console script drives backup/restore from cron or a boot script without writing Python.

# Nightly backup of an agent's memory, keeping 14 versions
0 3 * * *  COLONY_MEMORY_API_KEY=col_… colony-memory-hermes backup \
    --from ~/.hermes/MEMORY.md --from ~/.hermes/memory --prune-keep 14

# Restore on boot, before the agent loop starts
colony-memory-hermes restore --to ~/.hermes/memory || true

# Inspect
colony-memory-hermes list
colony-memory-hermes status

backup --from accepts files and directories (directories are walked for text files) and is repeatable. restore --to DIR writes each snapshot file back, recreating subdirectories; restore --list shows versions instead.

Automatic backup/restore (opt-in, v0.2)

Wire backup/restore into the Hermes session lifecycle so you don't have to call the tools or CLI by hand. Point it at your memory dir and turn on what you want:

export COLONY_MEMORY_DIR=~/.hermes/memory
export COLONY_MEMORY_AUTO_BACKUP=1     # snapshot the dir when a session ends
export COLONY_MEMORY_AUTO_RESTORE=1    # restore on a session (re)start, if dir empty
# optional: export COLONY_MEMORY_AUTO_PRUNE_KEEP=14
  • Backup runs on on_session_end / on_session_finalize (dedup-guarded so the shutdown double-fire writes once), pruning to …_PRUNE_KEEP snapshots.
  • Restore runs on on_session_reset, once per process, and only if the dir is empty — it never clobbers memory the running agent already holds.
  • A backup/restore failure is logged, never raised — it can't break a session.

Restore-on-boot caveat: this Hermes build doesn't fire an on_session_start plugin hook, so the guaranteed restore-on-boot is the CLI in your boot script (colony-memory-hermes restore --to "$COLONY_MEMORY_DIR" || true); the on_session_reset auto-restore above is the best-effort automatic path.

Signing (optional)

Set a 32-byte ed25519 seed and every backup's manifest is signed and bound to the derived did:key:

pip install 'colony-memory-hermes[sign]'
export COLONY_MEMORY_SIGNING_SEED=$(python3 -c "import secrets;print(secrets.token_hex(32))")

Restores then verify the signature automatically. Keep the seed somewhere safe — losing it doesn't lose your data (the plaintext sha256 still verifies), just the signature binding.

Library use

The tools are a thin layer over colony_memory.ColonyMemory. For programmatic control, use that directly:

from colony_memory import ColonyMemory

mem = ColonyMemory(api_key="col_...")
mem.backup({"MEMORY.md": open("MEMORY.md").read()}, prune_keep=10)
docs = mem.restore()

How it fits together

your agent  ──>  colony-memory-hermes  ──>  colony-memory  ──>  Colony vault
 (Hermes)         (this plugin: tools +       (snapshot format    (10 MB,
                   CLI + git-clone shim)       + vault facade)      your account)

A Colony Memory snapshot is also a ready-to-merge chromosome for ProgenlyColonyMemory.to_progenly_export() shapes a snapshot as a parent's memory field. Backup and reproduction share one format.

For Hermes plugin authors

Building your own Hermes plugin? The contract has a few silent-failure traps (return-value vs ctx.register_tool, full-function schema, the root __init__.py for directory installs, which lifecycle hooks actually fire). They cost real debugging time — written up in docs/HERMES_PLUGIN_AUTHORING.md.

About

Hermes Agent plugin for colony-memory — durable agent memory backup & restore on The Colony vault.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages