Hermes Continuity Memory stores durable memory locally. That makes it useful, but it also means operators should understand what can be stored, where it lives, and how to inspect or delete it.
Continuity may store:
- explicit records added with
continuity_add; - compact records mirrored from Hermes built-in memory writes;
- marker-extracted records from phrases such as
Remember:,Lesson learned:, andDecision:; - sanitized per-turn observations if enabled;
- imported corpus-derived records and source references;
- retrieval event logs for diagnostics;
- optional vector rows derived from record text;
- association graph edges between related records.
Records can include user preferences, project state, decisions, environment facts, source references, and debugging lessons.
Runtime data is stored in SQLite under:
${HERMES_HOME:-$HOME/.hermes}/continuity/continuity.db
Plugin code is installed separately under:
${HERMES_HOME:-$HOME/.hermes}/plugins/continuity/
Deleting plugin code does not delete the runtime database.
For each turn, Hermes can ask the provider for relevant context. The provider may inject a compact memory block containing selected record summaries and optional source refs/scores.
Prompt injection is bounded by:
max_records;max_chars;- lifecycle filtering;
- retrieval gates;
- optional pinned Tier 0 limits.
Continuity records are rendered as background facts, not as new instructions. A model can still be influenced by recalled text, so store compact, trustworthy records.
Continuity is not:
- encrypted storage;
- comprehensive DLP;
- a multi-user access-control boundary;
- a secret manager;
- a legal/compliance system;
- a guarantee that stale or incorrect facts will never be retrieved.
Anyone who can read the SQLite database file can inspect stored continuity data.
Supported write paths redact or reject some obvious secret patterns and prompt-injection-like content. This is a safety net, not a guarantee.
Do not intentionally store:
- API keys;
- passwords;
- private keys;
- session cookies;
- access tokens;
- regulated personal data;
- confidential raw logs;
- private source text you do not want summarized into prompts.
If a secret might have been stored, delete the affected record or wipe the database. Also rotate the secret outside this plugin.
Use:
continuity_search(query="term", include_stale=true)
continuity_get(id="record_id")
continuity_debug_retrieval(query="exact query")
Use include_stale=true when auditing archived, retracted, or expired records.
Archive ordinary stale records:
continuity_archive(id="record_id", reason="no longer current")
Restore if needed:
continuity_restore(id="record_id")
Hard delete sensitive or invalid records:
continuity_delete(id="record_id")
Warning: this removes the local continuity memory database.
rm -rf "${HERMES_HOME:-$HOME/.hermes}/continuity"This does not remove plugin code or edit Hermes config.
Database backups contain the same private data as the live database. Store backups with the same care.
cp "${HERMES_HOME:-$HOME/.hermes}/continuity/continuity.db" continuity.db.backupDo not commit backups to git.
Corpus ingestion is review-first and does not mutate the live database until explicit import.
Safe default flow:
- Run ingestion into a temporary output directory.
- Review
candidate-records.jsonl,pending-records.jsonl,rejected-candidates.jsonl, andreview.md. - Validate import into a temporary DB.
- Import only approved records with
--apply.
Do not ingest private documents unless you are comfortable with distilled records and source references being stored in the continuity database.
LLM extraction is explicit opt-in. If you use an LLM extractor, source text and model output should be treated as untrusted data and reviewed before import.
The repository ships synthetic JSONL demo records rather than a real memory DB. This is intentional:
- JSONL is auditable in diffs;
- no private runtime database is published;
- fixtures can be scanned by secret scanners;
- demo behavior is reproducible after checkout.
Keep future public examples synthetic.
Before publishing a repo or opening a PR:
git status --short --branch
git ls-files | grep -E 'continuity\.db|\.sqlite|\.env|id_rsa|dist/|\.venv/' || true
gitleaks detect --no-git --redact --verbose .
gitleaks detect --redact --verbose --source .Also search tracked files for local/private markers that are not secrets but still should not be public, such as local absolute paths or real user/project names in fixtures.