Memory Curator
Systematic memory management for agents through daily logging, session preservation, and knowledge extraction.
Quick Start
Log Today's Work
# Append to today's log python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --entry "Implemented user authentication with JWT" \ --category "Key Activities" # Show today's log python scripts/daily_log.py --workspace ~/.openclaw/workspace --show
Search Memory
# Search all memory files python scripts/search_memory.py \ --workspace ~/.openclaw/workspace \ --query "GraphQL" # Search recent logs only (last 7 days) python scripts/search_memory.py \ --workspace ~/.openclaw/workspace \ --query "authentication" \ --days 7 # Show recent logs python scripts/search_memory.py \ --workspace ~/.openclaw/workspace \ --recent 5
Extract Session Summary
# Generate summary from current session python scripts/extract_session.py \ --session ~/.openclaw/agents/<agent-id>/sessions/<session-id>.jsonl \ --output session-summary.md
Core Workflows
End of Day: Log Activities
When: Before ending work session or switching contexts
Steps:
- •
Review what was accomplished:
- •Features implemented
- •Bugs fixed
- •Decisions made
- •Learnings discovered
- •
Append to daily log:
bashpython scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --entry "Fixed race condition in payment processing - added mutex lock"
- •
Add structured entries for important work:
markdown## Key Activities - [14:30] Implemented user profile dashboard with GraphQL - [16:00] Fixed infinite re-render in UserContext - memoized provider value ## Decisions Made - Chose Apollo Client over React Query - better caching + type generation - Decided to use JWT in httpOnly cookies instead of localStorage ## Learnings - Apollo requires `__typename` field for cache normalization - React.memo doesn't prevent re-renders from context changes
See: patterns.md for what to log in different scenarios
Before Context Switch: Preserve Session
When: Before running /new, /reset, or ending conversation
Steps:
- •
Extract session summary:
bash# Get current session ID from system prompt or openclaw status python scripts/extract_session.py \ --session ~/.openclaw/agents/<agent-id>/sessions/<session-id>.jsonl \ --output ~/session-summary.md
- •
Review summary and edit Key Learnings section
- •
Save to daily log:
bash# Append key points to today's log cat ~/session-summary.md >> ~/.openclaw/workspace/memory/$(date +%Y-%m-%d).md
- •
Extract critical context to MEMORY.md if needed:
- •Non-obvious solutions
- •Important decisions
- •Patterns worth remembering
Weekly Review: Extract Knowledge
When: End of week (Friday/Sunday) or monthly
Steps:
- •
Search for patterns in recent logs:
bashpython scripts/search_memory.py \ --workspace ~/.openclaw/workspace \ --recent 7
- •
Look for extraction signals:
- •Repeated issues (3+ occurrences)
- •High-cost learnings (>1 hour to solve)
- •Non-obvious solutions
- •Successful patterns worth reusing
- •
Extract to MEMORY.md:
- •Add new sections or update existing ones
- •Use problem-solution format
- •Include code examples
- •Add context for when to use
- •
Clean up MEMORY.md:
- •Remove outdated information
- •Consolidate duplicate entries
- •Update code examples
- •Improve organization if needed
See: extraction.md for detailed extraction patterns
Daily: Quick Logging
For rapid context capture during work:
# Quick note python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --entry "TIL: DataLoader batches requests into single query" # Decision python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --entry "Using Zustand for client state - simpler than Redux" \ --category "Decisions Made" # Problem solved python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --entry "CORS + cookies: Enable credentials on client + server, Allow-Origin can't be *"
Memory Structure
Daily Logs (memory/YYYY-MM-DD.md)
Purpose: Chronological activity tracking
Content:
- •What was done (timestamped)
- •Decisions made
- •Problems solved
- •Learnings discovered
Retention: Keep recent logs accessible, optionally archive logs >90 days
When to use:
- •"What did I do on [date]?"
- •"When did I implement X?"
- •Session history
- •Activity tracking
MEMORY.md
Purpose: Curated long-term knowledge
Content:
- •Patterns and best practices
- •Common solutions
- •Mistakes to avoid
- •Useful references
Organization: Topic-based, not chronological
When to use:
- •"How do I solve X?"
- •"What's the pattern for Y?"
- •Best practices
- •Reusable solutions
See: organization.md for structure patterns
Memory Logging Patterns
What to Log
Always log:
- •Key implementation decisions (why approach X over Y)
- •Non-obvious solutions
- •Root causes of bugs
- •Architecture decisions with rationale
- •Patterns discovered
- •Mistakes and how they were fixed
Don't log:
- •Every file changed (git has this)
- •Obvious implementation details
- •Routine commits
- •Project-specific hacks
See: patterns.md for comprehensive logging guidance
When to Log
During work:
- •Quick notes with
daily_log.py --entry - •Capture decisions as made
- •Log problems when solved
End of day:
- •Review what was accomplished
- •Structure important entries
- •Add context for tomorrow
End of week:
- •Extract patterns to MEMORY.md
- •Consolidate learnings
- •Clean up outdated info
Knowledge Extraction
Extraction Criteria
Extract to MEMORY.md when:
- •Pattern appears 3+ times
- •Solution took >1 hour to find
- •Solution is non-obvious
- •Will save significant time in future
- •Applies across multiple projects
- •Mistake was costly to debug
Don't extract:
- •One-off fixes
- •Project-specific hacks
- •Obvious solutions
- •Rapidly changing APIs
Extraction Format
Problem-Solution Structure:
## [Technology/Domain] ### [Problem Title] **Problem:** [Clear description] **Cause:** [Root cause] **Solution:** [How to fix] **Code:** ```js // Example implementation
Prevention: [How to avoid] Context: [When this applies]
**See:** [extraction.md](references/extraction.md) for detailed extraction workflow ## Scripts Reference ### daily_log.py Create or append to today's daily log. ```bash # Append entry python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --entry "Your log entry" \ [--category "Section Name"] # Create from template python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --template # Show today's log python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --show
extract_session.py
Extract summary from session JSONL.
python scripts/extract_session.py \ --session ~/.openclaw/agents/<id>/sessions/<session>.jsonl \ [--output summary.md]
Outputs:
- •User requests summary
- •Tools used
- •Files touched
- •Template for key learnings
search_memory.py
Search across all memory files.
# Search with query python scripts/search_memory.py \ --workspace ~/.openclaw/workspace \ --query "search term" \ [--days 30] # Show recent logs python scripts/search_memory.py \ --workspace ~/.openclaw/workspace \ --recent 5
Best Practices
Daily Discipline
- •Start of day: Review yesterday's log, plan today
- •During work: Quick notes for decisions and learnings
- •End of day: Structure important entries, add context
- •End of week: Extract patterns, clean up MEMORY.md
Context Preservation
Before /new or /reset:
- •Extract session summary
- •Add to daily log
- •Preserve critical context in MEMORY.md
After major work:
- •Document what was accomplished
- •Note key learnings
- •Record next steps
Knowledge Organization
- •Topic-based structure - Group by domain, not date
- •Problem-first titles - Lead with the problem being solved
- •Searchable language - Use specific, findable terms
- •Flat hierarchy - Maximum 2 levels deep
- •Code examples - Include working examples
See: organization.md for detailed structure guidance
Troubleshooting
Can't find past decision
- •
Search daily logs first:
bashpython scripts/search_memory.py --workspace ~/.openclaw/workspace --query "decision keyword"
- •
Search MEMORY.md:
bashgrep -i "keyword" ~/.openclaw/workspace/MEMORY.md
- •
Search session logs:
bashrg "keyword" ~/.openclaw/agents/<id>/sessions/*.jsonl
Memory files getting too large
- •
Archive old daily logs (>90 days):
bashmkdir -p memory/archive/2025-Q1 mv memory/2025-01-*.md memory/archive/2025-Q1/
- •
Split MEMORY.md by domain if >1000 lines:
codememory/domains/ ├── react.md ├── graphql.md └── database.md
- •
Link from main MEMORY.md:
markdown## Domain Knowledge - [React Patterns](memory/domains/react.md) - [GraphQL Patterns](memory/domains/graphql.md)
Not sure what to log
See: patterns.md for comprehensive logging patterns
Quick rule: If you spent >15 minutes on it or learned something non-obvious, log it.
Templates
Daily Log Template
Located at: assets/templates/daily-log.md
Structure:
- •Key Activities
- •Decisions Made
- •Learnings
- •Challenges & Solutions
- •Context for Tomorrow
- •References
MEMORY.md Template
Located at: assets/templates/MEMORY-template.md
Structure:
- •Patterns & Best Practices
- •Common Solutions
- •Learnings
- •Mistakes to Avoid
- •Useful References
Tips
- •Be consistent - Log every day, extract every week
- •Be concise - Future you needs facts, not stories
- •Be specific - "Apollo cache normalization" > "cache issue"
- •Use code - Examples > explanations
- •Search first - Before asking, search your memory
- •Extract ruthlessly - If it repeats 3x, extract it
- •Clean regularly - Remove outdated info monthly
- •Version control - Git commit MEMORY.md changes
Integration with OpenClaw
Auto-logging with Hooks
Create a hook to auto-log major events:
// ~/.openclaw/hooks/memory-logger/index.js
export default {
name: 'memory-logger',
async onToolCall({ tool, agent }) {
if (tool === 'write' || tool === 'edit') {
// Log file modifications
await exec(`python scripts/daily_log.py --workspace ${agent.workspace} --entry "Modified ${tool.input.file_path}"`)
}
}
}
Session Preservation
Add to AGENTS.md:
## Before /new or /reset Always preserve context: 1. Extract session summary 2. Add to daily log 3. Save critical decisions to MEMORY.md
Weekly Review Cron
openclaw cron add \ --name "weekly-memory-review" \ --at "Sunday 18:00" \ --system-event "Time for weekly memory review and knowledge extraction"