Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0121
ADR-0121: The deployed Hermes subagent keeps persistent curated memory across runs; the user profile stays off
| field | value |
|---|---|
| Status | Accepted — Accepted (ruling, Mohamed, 2026-10-20) |
| Date | 2026-10-20 |
| Register | factory (docs/adr, 4-digit ids) |
| Source | docs/adr/0121-hermes-subagent-keeps-persistent-curated-memory-user-profile-off.md — permalink at c435b7b6e (unchanged on master since that commit) |
| Wiki register entry | ADR-0121 (wiki status: Accepted) |
The record
Status: Accepted (ruling, Mohamed, 2026-10-20) · Date: 2026-10-20
Context
The Hermes subagent deployment (/opt/hermes, source repo ~/workspace/hermes, release fe6abf5 at
ruling time) was deliberately stateless — its config comment read "A subagent keeps no personal state:
no memory, no user profile", with memory_enabled: false and user_profile_enabled: false. The agent
ships a memory mechanism that the flag gates off: a memory tool managing a bounded MEMORY.md
(2,200 chars) and USER.md (1,375 chars) in $HERMES_HOME/memories/, injected into the system prompt
as a frozen snapshot at session start and self-managed by the agent across runs. The coordinator
measured all of this and reported it; Mohamed ruled.
Decision (Mohamed, 2026-10-20, verbatim)
"you must allow hermes memory"
Implemented as: memory_enabled: true in the deployment's home config
(deploy/home/config.yaml, rendered per release). The subagent keeps MEMORY.md at
$HERMES_HOME/memories/ — bounded, self-managed via the memory tool, injected at session start.
user_profile_enabled stays false (the ruling names memory only). The change ships through the
deployment pipeline — repo commit → deploy/install.sh → a new immutable release → hermes-task verify — never by editing the deployed release or home in place.
Alternatives rejected
- Keep the subagent stateless — rejected by the ruling.
- Enable the user profile too — the ruling names memory only;
USER.mdstays off until a separate ruling asks for it. - Edit
/opt/hermes/home/config.yamlin place — rejected:hermes-task verifyrefuses on home-vs-release drift andinstall.shtreats releases as immutable; the repo → release → home pipeline is the only path that stays green.
Consequences
- The deployed subagent accumulates curated memory across dispatched runs; memory supplements but never replaces the brief as the task's source of truth — every dispatch still carries its full brief.
- The agent's two-writers warning applies to the shared deployed home: only dispatched runs use it, and concurrent runs writing memory can compound entries; the coordinator serializes dispatches on it.
- The deployment contract (
verify+--live) stays intact; the config comment now states the policy with the ruling citation.
Provenance
Mohamed, in-session, 2026-10-20, session 272: "you must allow hermes memory" (verbatim). Change:
~/workspace/hermes commit 3b5dbcb; new release installed to /opt/hermes in the same turn.
Related ADRs
No other ADR is named in this record.
Rulings cited
None.
Specs cited
None (or no spec page exists for the ones named).