hermes - 💡(How to fix) Fix Memory silently ignored when MEMORY.md is raw markdown instead of §-delimited entries [3 pull requests]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

When MEMORY.md is written as raw markdown (headings, paragraphs, lists) instead of §-delimited entries, the memory system silently fails — the bot has zero knowledge of the file's contents. No errors logged, no warnings, just invisible.

Root Cause

tools/memory_tool.py _read_file() splits on ENTRY_DELIMITER = "\n§\n". Raw markdown has no § characters, so the entire file becomes a single entry. Then:

  1. The single entry exceeds memory_char_limit (default 2200)
  2. _detect_external_drift() flags it as externally written bulk content
  3. The entry gets blocked from the system prompt snapshot (replaced with [BLOCKED: ...] placeholder)
  4. The bot responds as if memory is empty

Fix Action

Fixed

Code Example

## Schedule
   - Daily: website check
   - Weekly: backup
   
   ## Projects
   FOAF network at /data/dossiers/
RAW_BUFFERClick to expand / collapse

Bug: Silent memory failure with wrong file format

Summary

When MEMORY.md is written as raw markdown (headings, paragraphs, lists) instead of §-delimited entries, the memory system silently fails — the bot has zero knowledge of the file's contents. No errors logged, no warnings, just invisible.

Root Cause

tools/memory_tool.py _read_file() splits on ENTRY_DELIMITER = "\n§\n". Raw markdown has no § characters, so the entire file becomes a single entry. Then:

  1. The single entry exceeds memory_char_limit (default 2200)
  2. _detect_external_drift() flags it as externally written bulk content
  3. The entry gets blocked from the system prompt snapshot (replaced with [BLOCKED: ...] placeholder)
  4. The bot responds as if memory is empty

Reproduction

  1. Write a MEMORY.md with standard markdown formatting (no § delimiters):
    ## Schedule
    - Daily: website check
    - Weekly: backup
    
    ## Projects
    FOAF network at /data/dossiers/
  2. Start a gateway session
  3. Ask the bot about anything in the memory file → "I don't know about that"
  4. Check logs → zero warnings about invalid memory format

Expected Behavior (pick one)

  1. Auto-detect and wrap: If no § delimiters found, treat the whole file as a single entry with a warning
  2. Log a warning: "MEMORY.md contains no § delimiters — entries may not parse correctly"
  3. Document the format: hermes memory --help or docs should explain the § delimiter requirement
  4. Accept both formats: Parse markdown sections as separate entries

Impact

This caused a complete migration failure from openclaw to Hermes — the bot ran for hours with empty memory, unable to answer basic questions about its own scheduled tasks or the FOAF contact system, while verification scripts (checking file existence/content) passed.

Environment

  • Hermes Agent: latest (installed May 2026)
  • Platform: Linux (Ubuntu 24.04)
  • Memory config: memory_enabled: true, no explicit provider (using built-in MemoryStore)
  • MEMORY.md: 15K chars raw markdown → silently blocked

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING