name: true-recall-out description: | Smart memory curation system for OpenClaw. Stages all conversations in Redis, then uses AI to evaluate and only persist "things of note" to Qdrant long-term memory.
Use when: User wants intelligent memory filtering, not indiscriminate storage. Trigger phrases: "smart memory", "curate memories", "filter what to remember", "true recall", "tr-out", "review today's memories". metadata: openclaw: os: ["linux"]
True-Recall-Out: Smart Memory Curation
Philosophy
Don't remember everything. Remember what matters.
Instead of dumping every exchange into permanent storage, this system:
- Stages everything in Redis (24-48 hour buffer)
- Curates using AI judgment — only "things of note" graduate to Qdrant
- Preserves full context for what does matter
Architecture
Conversation Flow:
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ Rob asks │────▶│ Redis Buffer │────▶│ AI Curation Job │
│ AI_NAME replies│ │ (24-48hrs) │ │ (Daily/On-demand)│
└─────────────┘ └──────────────┘ └─────────────────┘
│
┌─────────────────┐ │
│ Qdrant Long-term │◀─────────┘
│ Memory │
│ (Things of Note) │
└─────────────────┘
Curation Criteria
The AI curator evaluates each conversation against these criteria:
STORE (High Value):
- Decisions made or conclusions reached
- Technical solutions that worked
- Preferences stated ("I like...", "I prefer...", "Always...")
- Project plans, architecture decisions
- Important context about people, relationships
- Rules or constraints established
- Things you explicitly said to remember
DISCARD (Low Value):
- Casual banter, greetings, goodbyes
- Debugging back-and-forth that didn't resolve
- Repetitive questions with same answers
- Transient status checks ("what's in redis?")
- Test messages, experiments
- "Thanks", "Got it", "Cool" exchanges
Scripts
1. stage_to_redis.py — Automatic Staging
Stages every conversation turn to Redis buffer.
# Auto-called after each exchange
python3 scripts/stage_to_redis.py \
--user-id "USER_ID" \
--user-msg "What about the server?" \
--ai-response "The server is at localhost" \
--turn 1
2. curate_memories.py — AI Curation
Reviews staged conversations and promotes "things of note" to Qdrant.
# Review last 24 hours
python3 scripts/curate_memories.py --user-id "USER_ID" --hours 24
# Dry run (see what would be stored without storing)
python3 scripts/curate_memories.py --user-id "USER_ID" --hours 24 --dry-run
# Review specific date range
python3 scripts/curate_memories.py --user-id "USER_ID" --date 2026-02-21
3. search_memories.py — Retrieval
Search curated memories (replaces generic qdrant-memory search).
# Quick search
python3 scripts/search_memories.py "server IP"
# With context
python3 scripts/search_memories.py "server" --with-context
# Filter by importance
python3 scripts/search_memories.py "project" --importance high
Usage Flow
Daily Workflow
1. Chat normally throughout the day
↓ (auto-stage to Redis)
2. End of day / Morning review
"curate my memories" or cron runs
↓ (AI reviews, judges, stores "things of note")
3. Qdrant now has only valuable memories
↓
4. Future conversations retrieve quality context
Manual Commands
| What you want | What to say |
|---|---|
| Stage current exchange | "stage this" (or auto-stages) |
| Review and curate now | "curate my memories" / "review today" |
| See what would be stored | "curate dry run" |
| Search curated memories | "search memories for X" |
| Check Redis buffer | "what's in my buffer?" |
| Flush Redis to Qdrant | "curate and store" |
Configuration
Edit config.yaml:
curation:
# Model for judging importance
model: "qwen3:4b-instruct"
ollama_url: "http://localhost:11434"
# Criteria weights
weights:
decision_made: 1.0
technical_solution: 0.9
preference_stated: 0.9
project_plan: 0.8
personal_context: 0.7
rule_established: 0.9
explicit_remember: 1.0
# Threshold for storage
store_threshold: 0.6
# Auto-curation schedule
auto_curation:
enabled: true
cron: "0 3 * * *" # 3 AM daily
redis:
host: "localhost"
port: 6379
buffer_key: "tr-out:buffer:{user_id}"
retention_hours: 48
qdrant:
url: "http://localhost:6333"
collection: "AI_NAME_memories"
Integration with OpenClaw
Option 1: Auto-stage all exchanges (Recommended)
Add to OpenClaw config to auto-call stage_to_redis.py after each exchange:
{
"memory": {
"mode": "true-recall-out",
"stage_script": "/path/to/true-recall/tr-out/true-recall-out/scripts/stage_to_redis.py",
"auto_stage": true
}
}
Option 2: Manual staging
Don't auto-stage. User says "stage this" when they want something buffered.
Option 3: Hybrid (Smart Auto)
Auto-stage, but use lightweight classifier to skip obvious low-value exchanges (greetings, "thanks", etc.) before hitting Redis.
Comparison: Old vs True-Recall-Out
| Aspect | Old (auto_store.py) | True-Recall-Out |
|---|---|---|
| Storage trigger | Manual "save q" | Auto-stage to Redis |
| What gets stored | Everything verbatim | AI-curated "things of note" |
| Storage location | Direct to Qdrant | Redis buffer → Qdrant |
| Judgment | None (keyword-based importance) | AI evaluates value |
| Memory quality | High volume, mixed quality | Lower volume, high quality |
| Retrieval | May hit irrelevant banter | Retrieves meaningful context |
Status
- ✅ Concept & architecture
- ✅ SKILL.md
- ✅ Config spec
- ⏳ Scripts (stage_to_redis.py, curate_memories.py, search_memories.py)
- ⏳ Testing
- ⏳ OpenClaw integration
Created: 2026-02-21 Purpose: Remember what matters, forget the noise.