memory-curator
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:
python scripts/daily_log.py \ --workspace ~/.openclaw/workspace \ --entry "Fixed race condition in payment processing - added mutex lock" -
Add structured entries for important work:
## 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:
# 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:
# 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:
python 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:
python scripts/search_memory.py --workspace ~/.openclaw/workspace --query "decision keyword" -
Search MEMORY.md:
grep -i "keyword" ~/.openclaw/workspace/MEMORY.md -
Search session logs:
rg "keyword" ~/.openclaw/agents/<id>/sessions/*.jsonl
Memory files getting too large
-
Archive old daily logs (>90 days):
mkdir -p memory/archive/2025-Q1 mv memory/2025-01-*.md memory/archive/2025-Q1/ -
Split MEMORY.md by domain if >1000 lines:
memory/domains/ ├── react.md ├── graphql.md └── database.md -
Link from main MEMORY.md:
## 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"