hermes-observational-memory
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Fail
- Hardcoded secret — Potential hardcoded credential in tests/test_observational_memory_plugin.py
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Observational Memory as a standalone Hermes memory-provider plugin for Hermes Agent
Hermes Observational Memory
Observational Memory as a standalone Hermes memory-provider plugin.
It gives Hermes access to the same local-first memory store used by Claude Code, Codex, Grok, Cowork, and other OM-connected agents. Hermes can load compact startup context, search prior observations and reflections, store explicit notes, and optionally write Hermes turns back into Observational Memory.
Why Observational Memory
Observational Memory is a local-first memory backend. Memory stays in readable markdown files, with optional OM Cluster sync for sharing trusted records across machines. That makes it a good fit when you want cross-agent continuity without turning memory into an opaque hosted service.
Compared with hosted memory providers, this plugin is more inspectable and easier to audit. Compared with graph or hierarchy-first providers, it is focused on stable session continuity: an observer writes durable observations, a reflector condenses them into compact startup memory, and Hermes can recall more detail on demand.
Requirements
- Hermes with user-installed memory provider discovery. This is present in Hermes
v2026.4.16and newer; current upstream Hermes still routes standalone memory providers through the sameMemoryProviderABC,memory.provider, and$HERMES_HOME/plugins/<name>discovery path. observational-memory>=0.6.7,<0.7.- Optional: an initialized OM Cluster if you want Hermes to share memory across machines.
Install
Install the plugin from GitHub:
hermes plugins install intertwine/hermes-observational-memory --no-enable
Memory providers are kind: exclusive plugins. They are activated through memory.provider, not through plugins.enabled, so --no-enable is intentional.
Then configure Hermes:
hermes memory setup
Select observational_memory.
Hermes will install the declared Python dependency during setup when it is missing. If you need to install it manually in the Hermes runtime, run:
uv pip install "observational-memory>=0.6.7,<0.7"
If you also want Claude Code, Codex, Grok, or Cowork to use the same OM store, run:
om install --all --non-interactive
What It Adds
Tools:
om_context: load compact startup context, with optional query-specific recall.om_search: search OM observations and reflections.om_remember: store an explicit observation immediately.
Memory integration:
- shared startup context from
profile.mdandactive.md; - optional Hermes session writeback with
incremental,session_end, oroff; - best-effort OM Cluster pull-before-context when OM Cluster is enabled and
sync_before_contextis true; - cluster-aware
om_remember, so explicit Hermes notes become signed OM Cluster observation records instead of editing generated markdown directly. - OM 0.6.6 scoped startup payloads, so Hermes context generation passes
cwd, the current task/query, andagent="hermes"into OM's freshness, de-duplication, and scope routing. - budget-aware writeback, so OM hard caps skip the blocked observe/reflect write without crashing a Hermes turn or session-end flush.
OM Cluster
OM Cluster stays opt-in. The plugin only syncs when the local OM install is already initialized, enabled, and configured for startup pull.
To verify cluster state:
om cluster status
om cluster sync
To have Hermes pull shared records before reading startup memory, set sync_before_context = true in OM's cluster config or use:
OM_CLUSTER_SYNC_BEFORE_CONTEXT=1 hermes
The pull is best-effort and deadline-bound by OM's startup_pull_deadline_ms, so disabled, absent, or temporarily unreachable cluster transports do not block normal Hermes startup.
Config
Plugin config file:
$HERMES_HOME/observational_memory.json
| Key | Default | Description |
|---|---|---|
llm_provider |
inherit-existing |
Hermes-side writeback provider: inherit-existing, anthropic, or openai. |
llm_model |
"" |
Optional observer/reflector model override. |
memory_dir |
~/.local/share/observational-memory |
Shared OM memory directory. |
env_file |
~/.config/observational-memory/env |
OM env file path. |
search_backend |
bm25 |
Search backend: bm25, qmd, qmd-hybrid, or none. |
writeback_mode |
incremental |
incremental, session_end, or off. |
usage_tracking |
true |
Record OM usage ledger rows for Hermes writeback. |
budget_mode |
hard |
Default OM budget mode for configured caps: hard or soft. |
budget_soft_threshold |
0.8 |
Warn when spend reaches this fraction of a configured cap. |
codex_observer_reasoning_effort |
"" |
Optional Codex/ChatGPT observer reasoning-effort override. |
codex_reflector_reasoning_effort |
"" |
Optional Codex/ChatGPT reflector reasoning-effort override. |
Optional secret written to Hermes .env:
| Env var | Purpose |
|---|---|
OM_HERMES_API_KEY |
API key for a selected direct writeback provider. |
Validation
Local plugin tests:
uv run --with pytest pytest tests -q
Runtime smoke path:
hermes memory status
om doctor --validate-key
om cluster status
In a Hermes session, ask Hermes to use:
om_contextfor startup context;om_searchfor a known memory query;om_rememberfor a test note, then confirm it appears throughom search.- a temporary hard budget cap to confirm observe/writeback is skipped cleanly rather than breaking the session.
Notes
- The installed plugin name is
observational_memory, even though the GitHub repo is namedhermes-observational-memory. - Supported Hermes versions discover this plugin from
$HERMES_HOME/plugins/observational_memory; no source-tree symlink is required. - Older Hermes builds that only scan
plugins/memory/are not supported by this release path. Upgrade Hermes instead of adding the old symlink workaround. - OpenAI Batch reflection is intentionally not used by the interactive Hermes plugin path. Batch jobs are API-key OpenAI only and can complete later; Hermes session-end writeback stays synchronous and best-effort.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found