Memory Dreaming (Safe Edition)

Automation

Autonomous memory consolidation for OpenClaw agents — like REM sleep. Periodically gathers signal from daily logs, session transcripts, and learnings; consolidates into MEMORY.md; syncs structured knowledge to an Obsidian vault (or any markdown knowledge base); tracks plans; prunes stale entries. Use when: (1) setting up periodic memory maintenance, (2) manually triggering a dream cycle, (3) configuring Obsidian vault sync, (4) agent memory is getting noisy/contradictory and needs consolidation.

Install

openclaw skills install memory-dreaming-safe

Memory Dreaming

Autonomous memory consolidation ("dreaming") for OpenClaw agents. Runs as a cron job, consolidates scattered daily notes into curated long-term memory, and syncs structured knowledge to an Obsidian vault.

When to Use

Use this skill when the user asks OpenClaw to:

  • Reflect on stored memories and identify patterns
  • Summarize recurring themes from past interactions
  • Extract lessons from daily logs, errors, or learnings
  • Consolidate noisy or contradictory memory entries
  • Configure or set up periodic memory maintenance (cron)
  • Manually trigger a memory consolidation cycle
  • Sync structured knowledge to an Obsidian vault or markdown knowledge base

Do not use this skill for:

  • Direct editing, deletion, or rewriting of memory files unless explicitly requested
  • Processing sensitive personal data (credentials, secrets, medical/financial details) without explicit user consent
  • Running shell commands or accessing files outside the configured memory workspace

Core Principles

  • Read before Write: Always analyze and understand current state before proposing any changes.
  • Diff before Apply: Never modify files without presenting the proposed changes first.
  • Explicit Confirmation: The user must explicitly approve ("Ja", "OK", "Bestätigt") before any write operation.
  • Sensitive Data Protection: Automatically exclude credentials, secrets, and personal data unless explicitly authorized.
  • Interpretation, Not Fact: AI-generated summaries are labeled as interpretations, not authoritative facts.
  • Transparency: Log all actions and proposed changes so the user can audit what happened.

Quick Start

  1. Install: clawhub install oryanmoshe/memory-dreaming
  2. Configure your vault path (optional): edit dreaming-config.json in your workspace
  3. Set up the cron: run scripts/setup-cron.sh
  4. Done — the agent dreams automatically every 8 hours

⚠️ The dream cycle will only apply changes after presenting a diff and receiving your confirmation.

To trigger a dream manually, tell the agent: "Run a dream cycle now."

Workflow

Step 1: Orient

  • Read current memory state — MEMORY.md, recent daily logs, learnings, dreaming log
  • Build a map of what exists and when it was last touched
  • Safety: Only read, never modify in this phase

Step 2: Gather Signal

  • Search for high-value information added since the last dream
  • Sources: daily logs, learnings, session transcripts, plan files
  • Efficiency: Grep narrowly for high-signal patterns. Don't read full transcripts.

Step 3: Consolidate (Analysis)

  • Identify: duplicates, contradictions, stale entries, high-priority learnings
  • Proposal stage: Prepare proposed changes but DO NOT apply yet
  • Changes include: merge duplicates, convert relative dates, mark contradictions, promote learnings

Step 4: Present Diff (Confirmation Gate)

  • BEFORE writing anything: Present the proposed changes to the user
  • Show: what would be merged, deleted, promoted, or modified
  • Ask explicitly: "Soll ich diese Änderungen übernehmen?" / "Apply these changes?"
  • NEVER skip this step — this is the critical safety gate

Step 5: Apply (Only After Confirmation)

  • Update MEMORY.md with confirmed changes only
  • Delete contradicted facts only if explicitly approved
  • Remove stale entries only if explicitly approved
  • Promote learnings only if explicitly approved

Step 6: Sync (Only After Confirmation)

  • Push consolidated knowledge to external targets (Obsidian, etc.)
  • Safety: Create/update notes but never delete existing vault content without confirmation
  • Write dreaming log to document what changed

Step 7: Verify

  • Confirm all changes were applied correctly
  • Log completion and token usage

How It Works

The dream cycle has 4 phases, inspired by biological REM sleep and Claude Code's AutoDream:

Phase 1: Orient

Read current memory state — MEMORY.md, recent daily logs, learnings, dreaming log. Build a map of what exists and when it was last touched.

Phase 2: Gather Signal

Search for high-value information added since the last dream:

  • Daily logs (memory/YYYY-MM-DD.md) since last dream
  • Learnings (.learnings/*.md) — pending corrections, errors, best practices
  • Session transcripts — grep for corrections ("actually...", "no that's wrong"), decisions ("let's do X"), proper nouns, preferences
  • Plan files — scan workspace for task_plan.md files

Key: grep narrowly for high-signal patterns. Don't read full transcripts — that burns tokens for marginal value.

Phase 3: Consolidate

Update MEMORY.md with gathered signal:

  • Merge duplicate entries (same fact from 3 sessions → one entry)
  • Absolute dates — convert "yesterday" → "2026-03-25"
  • Delete contradicted facts (if preference changed, remove old one)
  • Remove stale entries (references to deleted files, completed tasks)
  • Promote high-priority learnings from .learnings/ to MEMORY.md

Phase 4: Sync

Push consolidated knowledge to external targets:

  • Obsidian vault (opt-in) — create/update notes with tags, wikilinks, full depth
  • Plan tracking — ensure every task_plan.md has a corresponding Plans/<name>.md in the vault
  • Dreaming log — write what changed, tokens used, duration

Gate

The cron fires on schedule but the dream cycle only executes if ≥6 hours have passed since the last dream (checked via dreaming-log.md timestamp). This prevents wasted runs when nothing has changed.

Even when the gate passes, the skill still requires user confirmation before modifying any files (see Workflow Step 4).

Configuration

Create dreaming-config.json in your workspace root to customize. All fields are optional — sensible defaults are used.

See assets/dreaming-config.json for the full schema with defaults.

Key options:

  • schedule — cron expression (default: "0 */8 * * *")
  • model — which model runs the dream (default: "anthropic/claude-sonnet-4-6")
  • gate.minHours — minimum hours between dreams (default: 6)
  • obsidian.enabled — enable vault sync (default: false)
  • obsidian.vaultPath — absolute path to Obsidian vault
  • delivery.mode"none" or "announce" changes to a channel
  • safety.requireConfirmation — require user confirmation before applying changes (default: true) ⚠️ NEVER set this to false in production. The confirmation gate is the primary safety mechanism.

Obsidian Sync Details

When enabled, the sync phase:

  1. Compares MEMORY.md sections against existing vault notes
  2. Creates new notes in configured subfolders (People/, Projects/, Plans/, Tools/)
  3. Updates existing notes with new information (appends, doesn't overwrite)
  4. Follows formatting rules: tags on first line, [[wikilinks]] throughout, full depth content
  5. Tracks plans: scans for task_plan.md files → creates/updates Plans/<name>.md

For detailed sync behavior, see references/obsidian-sync.md.

Manual Dream

Tell the agent any of these:

  • "Run a dream cycle"
  • "Consolidate memory"
  • "Dream now"
  • "Sync to obsidian"

The agent reads this skill and executes the 4-phase cycle immediately, ignoring the gate. The confirmation gate (Workflow Step 4) still applies.

Setup Script

# Creates the cron job in OpenClaw
bash scripts/setup-cron.sh

The script reads dreaming-config.json (or uses defaults) and creates an isolated agentTurn cron job. See scripts/setup-cron.sh for details.

Architecture

For the detailed 4-phase architecture, design decisions, and how this compares to Claude Code AutoDream, see references/architecture.md.

Safety & Boundaries

NEVER

  • Never write files without explicit user confirmation
  • Never execute commands without explicit user confirmation
  • Invent memories or treat inferred patterns as facts
  • Delete, overwrite, or rewrite memory files without explicit user confirmation
  • Store sensitive personal data (credentials, secrets, medical/financial details, private third-party information) unless the user explicitly requests it and it is appropriate
  • Run shell commands or access files outside the configured memory workspace unless explicitly requested
  • Auto-execute the dream cycle without the 6-hour gate check (cron only)
  • Treat AI-generated summaries as authoritative facts without labeling them as interpretations

ALWAYS

  • Confirm before write: Always present proposed changes and ask for explicit user confirmation before applying
  • Confirm before execute: Never run commands or scripts without user approval
  • Present proposed changes as a diff or structured list before applying
  • Ask for explicit confirmation: "Soll ich diese Änderungen übernehmen?"
  • Label AI-generated content clearly ("Zusammenfassung", "Interpretation", "Vorschlag")
  • Respect the 6-hour gate between automatic dream cycles
  • Backup MEMORY.md before making changes (if possible)
  • Log all changes in dreaming-log.md with timestamp and rationale

WHEN IN DOUBT

  • Prefer read-only analysis over automatic modification
  • Ask the user before proceeding with uncertain changes
  • Document uncertainty in the dreaming log

Boundaries

This skill MAY:

  • Summarize, cluster, and suggest improvements to memory content
  • Identify contradictions or stale entries
  • Propose structural improvements (better tagging, linking, organization)
  • Sync structured knowledge to external vaults (after confirmation)

This skill MUST NOT:

  • Autonomously modify long-term memory without user confirmation
  • Create behavioral rules that override user intent or system/developer instructions
  • Delete source files (daily logs, session transcripts)
  • Modify source code or project files
  • Access files outside the configured memory workspace
  • Store or process sensitive data without explicit user consent

Examples

Example 1: Pattern Recognition (Read-Only)

User: "Review my memories and tell me what patterns you notice."

Skill:

  1. Reads relevant memory notes (Phase 1-2)
  2. Analyzes recurring themes, preferences, unresolved tasks
  3. Labels each finding: Fact / Pattern / Suggestion
  4. Presents summary without modifying anything
  5. "Ich habe folgende Muster erkannt: [...] Soll ich diese als zusammenfassende Notiz speichern?"

Safety: This is read-only until the user explicitly asks to save.

Example 2: Manual Consolidation (Write After Confirmation)

User: "Run a dream cycle now."

Skill:

  1. Executes Phase 1-3: Orient, Gather, Consolidate (analysis only)
  2. Phase 4 (Confirmation Gate): Presents proposed changes:
    • Merge 3 duplicate entries about GPU-Transkription
    • Update "Andreas bevorzugt Azure TTS" (alte Info, jetzt Coqui auch installiert)
    • Promote "Ansible auf macmini103 blockiert" aus Learnings
  3. Asks: "Ich schlage folgende Änderungen vor: [...] Soll ich MEMORY.md aktualisieren?"
  4. On "Ja": Applies changes (Phase 5-7)
  5. On "Nein": Aborts, logs user rejection, suggests alternative

Example 3: Sensitive Data Encountered

User: "Review everything from last week."

Skill:

  1. Scans logs and finds: reference to ansible_ssh_cred.xml, password discussion
  2. Stops: "Ich habe Hinweise auf Zugangsdaten in den Logs gefunden. Aus Sicherheitsgründen überspringe ich diese Abschnitte. Soll ich nur die nicht-sensiblen Teile zusammenfassen?"
  3. Proceeds only after user confirmation with explicit scope

Safety: Sensitive data detection triggers automatic exclusion + user confirmation.

What This Skill Does NOT Do

  • Does not replace QMD indexing (QMD handles search, this handles consolidation)
  • Does not delete source files (daily logs are never removed, only consolidated from)
  • Does not modify source code or project files
  • Does not run without explicit setup (cron must be created via setup script)