Install
openclaw skills install memory-syncScrape and analyze OpenClaw JSONL session logs to reconstruct and backfill agent memory files. Use when: (1) Memory appears incomplete after model switches, (2) Verifying memory coverage, (3) Reconstructing lost memory, (4) Automated daily memory sync via cron/heartbeat. Supports simple extraction and LLM-based narrative summaries with automatic secret sanitization.
openclaw skills install memory-syncTool for maintaining agent memory continuity across model switches with automatic secret sanitization.
Requires Python 3.11+ and click:
pip install click
# Optional: for direct API summarization (only if not using OpenClaw backend)
pip install openai
# Run directly from skill directory
python ~/.openclaw/skills/memory-sync/memory_sync.py compare
# Or create an alias for convenience
alias memory-sync="python ~/.openclaw/skills/memory-sync/memory_sync.py"
# Check for gaps
memory-sync compare
# Backfill today's memory (simple extraction - fast, no LLM)
memory-sync backfill --today
# Backfill with LLM narrative (uses OpenClaw's native model - no API key needed)
memory-sync backfill --today --summarize
# Backfill all missing
memory-sync backfill --all
| Command | Description |
|---|---|
compare | Find gaps between session logs and memory files |
backfill --today | Generate memory for current day |
backfill --since YYYY-MM-DD | Backfill from date to present |
backfill --all | Backfill all missing dates |
backfill --incremental | Backfill only changed dates since last run |
extract | Extract conversations matching criteria |
summarize --date YYYY-MM-DD | Generate LLM summary for a single day |
transitions | List model transitions |
validate | Check memory files for consistency issues |
stats | Show coverage statistics |
The backfill command supports two modes:
Simple Extraction (default, without --summarize):
--preserve: Hand-written content is appended to the end of the new fileLLM Summarization (with --summarize) - Recommended:
--preserve: Existing content is passed to the LLM with instructions to incorporate it into the new summary, maintaining temporal order and thematic structureRecommended for regular use:
# Best quality: LLM summary that incorporates any existing notes
memory-sync backfill --today --summarize --preserve
Both modes automatically sanitize secrets before writing.
# Check what's missing
memory-sync compare
# Backfill everything (may take time)
memory-sync backfill --all
# Best: LLM summary that incorporates any existing notes
memory-sync backfill --today --summarize --preserve
# Smart: Process only days changed since last run
memory-sync backfill --incremental --summarize --preserve
# Or use a specific backend if preferred
memory-sync backfill --today --summarize --preserve --summarize-backend anthropic
# Backfill from last week to present
memory-sync backfill --since 2026-01-28 --summarize
# Keep hand-written notes when regenerating
memory-sync backfill --date 2026-02-05 --force --preserve --summarize
All content is automatically sanitized to prevent secret leakage:
Secrets are replaced with [REDACTED-TYPE] placeholders.
See SECRET_PATTERNS.md for complete pattern list.
The --summarize flag supports multiple backends via --summarize-backend:
| Backend | Description | API Key Required |
|---|---|---|
openclaw (default) | Uses OpenClaw's sessions spawn with your configured model | No |
anthropic | Direct Anthropic API via openai package | ANTHROPIC_API_KEY |
openai | Direct OpenAI API via openai package | OPENAI_API_KEY |
# Default: use OpenClaw's native model (no API key needed)
memory-sync backfill --today --summarize
# Explicit backend selection
memory-sync backfill --today --summarize --summarize-backend openclaw
memory-sync backfill --today --summarize --summarize-backend anthropic
memory-sync backfill --today --summarize --summarize-backend openai
# Override model for any backend
memory-sync backfill --today --summarize --model claude-sonnet-4-20250514
memory-sync backfill --today --summarize --summarize-backend openai --model gpt-4o
The openclaw backend is recommended as it:
Process today with LLM summary, preserving any existing notes:
0 3 * * * cd ~/.openclaw/skills/memory-sync && python memory_sync.py backfill --today --summarize --preserve >> ~/.memory-sync/cron.log 2>&1
Automatically detects changes since last run:
# Initial backfill (run once, simple extraction for speed)
python memory_sync.py backfill --all
# Then set up nightly incremental with LLM summaries
0 3 * * * cd ~/.openclaw/skills/memory-sync && python memory_sync.py backfill --incremental --summarize --preserve >> ~/.memory-sync/cron.log 2>&1
State is tracked in ~/.memory-sync/state.json.
Default paths:
~/.openclaw/agents/main/sessions/*.jsonl~/.openclaw/workspace/memory/Override with CLI flags:
--sessions-dir /path/to/sessions--memory-dir /path/to/memoryEnvironment variables (only for direct API backends):
ANTHROPIC_API_KEY - Required for --summarize-backend anthropicOPENAI_API_KEY - Required for --summarize-backend openaiThe default openclaw backend requires no API keys - it uses your OpenClaw configuration.
# Only needed if using direct API backends
export ANTHROPIC_API_KEY=sk-ant-...
export OPENAI_API_KEY=sk-...
The --preserve flag behavior depends on whether --summarize is used:
Without --summarize (simple extraction):
With --summarize (LLM mode):
Example:
# Regenerate with LLM, incorporating existing notes into the summary
memory-sync backfill --date 2026-02-05 --force --preserve --summarize
Auto-generated markers:
*Auto-generated from N session messages**Review and edit this draft to capture what's actually important.*Content after the footer marker is considered hand-written and will be preserved.
Date selection (choose one):
--date YYYY-MM-DD - Single specific date--today - Current date only (for nightly automation)--since YYYY-MM-DD - From date to present (for catch-up)--all - All missing dates (for initial setup)--incremental - Only dates changed since last run (smart automation)Additional flags:
--dry-run - Show what would be created without creating files--force - Overwrite existing files (required for regeneration)--preserve - Keep hand-written content when regenerating--summarize - Use LLM for narrative summaries--summarize-backend BACKEND - Backend for summarization: openclaw (default), anthropic, openai--model MODEL - Model override for summarization (default varies by backend)| Mode | Time per Day | Best For |
|---|---|---|
--all | 5-10 min × N days | Initial setup only |
--since | 5-10 min × N days | Recovery after gaps |
--today | 30-60 sec | Nightly automation |
--incremental | 30-60 sec × changed days | Smart automation |