Blocks/Memory Loss Recovery
🧠

Memory Loss Recovery

recoveryintermediate

Add to your AGENTS.md:

Read https://moltsec.com/blocks/memory-loss-recovery
Memory Loss Recovery

Overview

Every AI agent has a context window. When it fills up, conversations get **compacted** — old messages are summarized or dropped entirely. Your agent loses access to recent context, asks you to repeat yourself, and redoes work you already finished. This block detects compaction and injects a recovery protocol, forcing your agent to read its memory files before responding.

How It Works

  1. 1Monitors for recent backup files (created when context hits 80%+)
  2. 2If a backup exists within 10 minutes → compaction just happened
  3. 3Injects a RECOVERY.md instruction at the TOP of the system prompt
  4. 4Agent sees recovery instruction before user message → can't skip it
  5. 5Agent reads memory files, queries semantic memory, THEN responds

Code

javascript
// hooks/compaction-recovery/handler.js

import fs from "node:fs/promises";

async function checkForCompaction() {
  const backupDir = "/path/to/memory/backups";
  const maxAgeMinutes = 10;
  
  const files = await fs.readdir(backupDir);
  const today = new Date().toISOString().split("T")[0];
  const backupFiles = files.filter(f => 
    f.startsWith(today) && f.includes("context-backup")
  );
  
  for (const file of backupFiles) {
    const stat = await fs.stat(`${backupDir}/${file}`);
    const ageMinutes = (Date.now() - stat.mtimeMs) / 1000 / 60;
    
    if (ageMinutes <= maxAgeMinutes) {
      return true; // Recent backup = just compacted
    }
  }
  return false;
}

const handler = async (event) => {
  if (event.type !== "agent" || event.action !== "bootstrap") return;
  
  const wasCompacted = await checkForCompaction();
  if (!wasCompacted) return;
  
  const today = new Date().toISOString().split("T")[0];
  const yesterday = new Date(Date.now() - 86400000).toISOString().split("T")[0];
  
  const recoveryContent = `# ⚠️ COMPACTION RECOVERY REQUIRED

**Your memory was compacted. Recent context was summarized.**

## STOP — Before responding:

1. Read \`memory/${today}.md\`
2. Read \`memory/${yesterday}.md\`
3. Run \`memory_recall("<topic>")\`
4. Check \`memory/backups/\`

**DO NOT** ask the user for info in your memory files.
`;

  event.context.bootstrapFiles.unshift({
    name: "RECOVERY.md",
    content: recoveryContent,
  });
};

export default handler;

Installation

  1. 1Create `hooks/compaction-recovery/` directory in your workspace
  2. 2Copy handler.js to that directory
  3. 3Create `hooks/compaction-recovery/HOOK.md` with metadata
  4. 4Enable in config: `hooks.internal.entries.compaction-recovery.enabled: true`
  5. 5Ensure you have a `memory/backups/` directory
  6. 6Your backup system should create files when context hits 80%+

🤖 Agent Format

Machine-readable version for agent consumption:

yaml
---
block: memory-loss-recovery
version: 1.0.0
category: recovery
difficulty: intermediate
requires:
  - memory files (daily logs)
  - backup system (80%+ trigger)
  - hooks support
---

# Memory Loss Recovery Block

## Installation
1. Create hooks/compaction-recovery/handler.js
2. Enable hook in config
3. Ensure backups directory exists

## Behavior
- Triggers on agent:bootstrap event
- Checks for recent backup files (10 min window)
- Injects recovery protocol if compaction detected
- Forces memory file reading before response

## Files to Create
- hooks/compaction-recovery/handler.js (main logic)
- hooks/compaction-recovery/HOOK.md (metadata)
- memory/backups/ (directory for context snapshots)

Related Blocks