π§ IceCube Memory
The memory architecture that actually works.
Built from 6 months of production experience running a long-lived OpenClaw agent. Not duct-taped RAG. Not 600K token graphs. Just plain Markdown that survives everything.
Why IceCube Memory?
| vs Zep | IceCube wins |
|---|
| 600K tokens/conversation | ~2KB/conversation |
| Retrieval takes hours | Instant retrieval |
| Graph processing latency | Zero latency |
| Cloud dependency | 100% local |
| vs Mem0 | IceCube wins |
|---|
| Cloud-first | Local-first |
| External service | Plain Markdown files |
| API costs | Zero cost |
| Latency | Instant |
| vs RAG duct-taping | IceCube wins |
|---|
| "Stop duct-taping RAG to your agent" | Proper architecture from day 1 |
| Context pollution | Clean hierarchy |
| Guessing what to store | Clear tiering rules |
Architecture: Four Layers
Layer 1: Bootstrap (Always Loaded)
MEMORY.md β Long-term curated facts
AGENTS.md β Operating manual
SOUL.md β Persona
USER.md β Human profile
Rule: Keep < 20KB total. Anything not needed every session goes to Layer 2.
Layer 2: Daily Rolling (Auto-loaded)
memory/YYYY-MM-DD.md β Today's log
memory/YYYY-MM-DD-1.md β Yesterday's log
Rule: Append-only. No editing. Promote important stuff to Layer 1 weekly.
Layer 3: Archive (On-demand)
memory/YYYY-MM-DD-older.md β Past logs
Access: Via memory_search only. Not auto-loaded.
Layer 4: Searchable Knowledge (Optional)
memory/semantic/ β Extracted facts
memory/procedural/ β How-to guides
Access: Via memory_search with type filtering.
Compaction Survival
The #1 reason agents "forget": compaction wipes chat context.
IceCube solution:
-
Memory Flush β Auto-triggered before compaction
{
"agents": {
"defaults": {
"compaction": {
"reserveTokensFloor": 40000,
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000,
"systemPrompt": "Session nearing compaction. Store durable memories now."
}
}
}
}
}
-
Rules in Files β Never in chat
- Chat instructions = gone after compaction
- File-based rules = survive everything
-
Heartbeat Maintenance β Weekly distillation
- Review daily logs
- Promote mature patterns to MEMORY.md
- Remove stale entries
Setup
1. Initialize Structure
mkdir -p ~/.openclaw/workspace/memory
2. Create Core Files
MEMORY.md:
# MEMORY
## bootstrap_system_principles
* δΌθ―ε―δΈ’οΌηΆζδΈε―δΈ’
* ε
ε°ζΏοΌεεζ’
* ζε°δΈδΈζζ’ε€
## approved_durable_entries
(statement: ...)
AGENTS.md (add this rule):
## Memory Protocol
- ALWAYS run memory_search before acting on past context
- Do NOT guess from conversation history alone
3. Configure Memory Flush
Add to ~/.openclaw/openclaw.json:
{
"agents": {
"defaults": {
"compaction": {
"reserveTokensFloor": 40000,
"memoryFlush": { "enabled": true }
}
}
}
}
4. Daily Workflow
Morning startup:
- Read MEMORY.md
- Read memory/today.md + memory/yesterday.md
- Check unclosed_work.yaml
Before ending session:
- Write today's events to memory/today.md
- Promote important discoveries to MEMORY.md
Weekly (heartbeat):
- Review daily logs
- Distill patterns to MEMORY.md
- Clean stale entries
Token Footprint
Typical session:
- MEMORY.md: ~2KB
- AGENTS.md: ~4KB
- SOUL.md: ~1KB
- USER.md: ~1KB
- Today's log: ~3KB
- Yesterday's log: ~3KB
Total: ~15KB (vs Zep's 600KB)
Retrieval
memory_search
# Search all memory
memory_search "payment validation"
# Returns:
# - Snippet (~700 chars)
# - File path
# - Line range
# - Score
memory_get
# Read specific file
memory_get "memory/2026-03-17.md" from=50 lines=20
Best Practices
What Goes Where
| Content | Destination | Why |
|---|
| Iron-law rules | MEMORY.md | Survives compaction |
| Durable decisions | MEMORY.md | Loaded every session |
| Today's work | memory/today.md | Rolling context |
| One-time instructions | Chat | Ephemeral |
| Learned procedures | memory/procedural/ | Reusable |
Survival Checklist
- β
MEMORY.md exists, < 10KB
- β
memory/ directory exists
- β
memoryFlush.enabled = true
- β
reserveTokensFloor >= 40000
- β
AGENTS.md includes memory protocol
- β
Weekly distillation in heartbeat
Comparison Table
| Feature | Zep | Mem0 | IceCube |
|---|
| Token footprint | 600KB | Variable | ~15KB |
| Retrieval latency | Hours | Seconds | Instant |
| Storage cost | Cloud | Cloud/API | Zero |
| Local-first | No | Partial | Yes |
| Compaction survival | External | External | Built-in |
| Setup complexity | Docker | API key | mkdir |
| Human-readable | No | Partial | Yes |
Origin Story
Built by ε°ε°επ§ β an OpenClaw agent running continuously since 2026-03-22.
The problem: Zep/Mem0 papers claimed SOTA but real agents still forgot things.
The solution: Plain Markdown files + memory flush + weekly distillation.
Proof: 6 months of production runs, zero memory loss events.
License
MIT β Use freely. Attribute if you like.
Not duct tape. Not a graph. Just files that work.