12 KiB
MEMORY.md — Long-Term Memory
Curated memories. The distilled essence, not raw logs.
Identity & Names
- My name: Kimi 🎙️
- Human's name: Rob
- Other agent: Max 🤖 (formerly Jarvis)
- Relationship: Direct 1:1, private and trusted
Core Preferences
Infrastructure Philosophy
- Privacy first — Always prioritize privacy in all decisions
- Free > Paid — Primary requirement for all tools
- Local > Cloud — Self-hosted over SaaS when possible
- Private > Public — Keep data local, avoid external APIs
- Accuracy — Best quality, no compromises
- Performance — Optimize for speed
Research Policy
- Always search web before installing — Research docs, best practices
- Local docs exception — If docs are local (OpenClaw, ClawHub), use those first
Communication Rules
- Voice in → Voice out — Reply with voice-only when voice received
- Text in → Text out — Reply with text when voice received
- Never both — Don't send voice + text for same reply
- No transcripts to Telegram — Transcribe internally only, don't share text
Voice Settings
- TTS: Local Kokoro @
10.0.0.228:8880 - Voice:
af_bella(American Female) - Filename:
Kimi-YYYYMMDD-HHMMSS.ogg - STT: Faster-Whisper (CPU, base model)
Memory System — Manual Mode (2026-02-10)
Overview
Qdrant memory is now MANUAL ONLY.
Memories are stored to Qdrant ONLY when explicitly requested by the user.
- Daily file logs (
memory/YYYY-MM-DD.md) continue automatically - Qdrant vector storage — Manual only when user says "store this"
- No automatic storage — Disabled per user request
- No proactive retrieval — Disabled
- No auto-consolidation — Disabled
Storage Layers
Session Memory (this conversation) - Normal operation
↓
Daily Logs (memory/YYYY-MM-DD.md) - Automatic file-based
↓
Manual Qdrant Storage - ONLY when user explicitly requests
Manual Qdrant Usage
When user says "remember this" or "store this in Qdrant":
# Store with metadata
python3 store_memory.py "Memory text" \
--importance high \
--confidence high \
--verified \
--tags "preference,setup"
# Search stored memories
python3 search_memories.py "query" --limit 5
# Hybrid search (files + vectors)
python3 hybrid_search.py "query" --file-limit 3 --vector-limit 3
Available Metadata
When manually storing:
- text — Content
- date — Created
- tags — Topics
- importance — low/medium/high
- confidence — high/medium/low (accuracy)
- source_type — user/inferred/external
- verified — bool
- expires_at — For temporary memories
- related_memories — Linked concepts
- access_count — Usage tracking
- last_accessed — Recency
Scripts Location
/skills/qdrant-memory/scripts/:
store_memory.py— Manual storagesearch_memories.py— Search stored memorieshybrid_search.py— Search both files and vectorsinit_collection.py— Initialize Qdrant collection
DISABLED (Per User Request)
❌ Auto-storage triggers
❌ Proactive retrieval
❌ Automatic consolidation
❌ Memory decay cleanup
❌ auto_memory.py pipeline
Agent Messaging — Manual Mode (2026-02-10)
Overview
Redis agent messaging is now MANUAL ONLY.
All messaging with Max (other agent) is done ONLY when explicitly requested.
- No automatic heartbeat checks — Disabled per user request
- No auto-notification queue — Disabled
- Manual connections only — When user says "check messages" or "send to Max"
Manual Redis Usage
When user requests agent communication:
# Check for messages from Max
cd /root/.openclaw/workspace/skills/qdrant-memory/scripts && python3 notify_check.py
# Send message to Max (manual only)
redis-cli -h 10.0.0.36 XADD agent-messages * type user_message agent Kimi message "text"
# Check delayed notification queue
redis-cli -h 10.0.0.36 LRANGE delayed:notifications 0 0
DISABLED (Per User Request)
❌ Auto-checking Redis streams on heartbeat ❌ Auto-sending notifications from queue ❌ Auto-logging heartbeat timestamps to Redis
Setup Milestones
2026-02-04 — Initial Bootstrap
- ✅ Established identity (Kimi) and user (Rob)
- ✅ Configured SearXNG web search (local)
- ✅ Set up bidirectional voice:
- Outbound: Kokoro TTS with custom filenames
- Inbound: Faster-Whisper for transcription
- ✅ Created skills:
local-whisper-stt— CPU-based voice transcriptionkimi-tts-custom— Custom voice filenames, voice-only modeqdrant-memory— Vector memory augmentation (Option 2: Augment)
- ✅ Documented installation policy (Skill → TOOLS.md → Other)
2026-02-04 — Qdrant Memory System v1
- Location: Local Proxmox LXC @
10.0.0.40:6333 - Collection:
openclaw_memories - Vector size: 768 (nomic-embed-text)
- Distance: Cosine similarity
- Architecture: Hybrid (Option 2 - Augment)
- Daily logs:
memory/YYYY-MM-DD.md(file-based) - Qdrant: Vector embeddings for semantic search
- Both systems work together for redundancy + better retrieval
- Daily logs:
- Mode: Automatic — stores/retrieves without user prompting
- Scripts available:
store_memory.py— Store memory with embeddingsearch_memories.py— Semantic searchhybrid_search.py— Search both files and vectorsinit_collection.py— Initialize Qdrant collectionauto_memory.py— Automatic memory management
2026-02-04 — Memory System v2.0 Enhancement
- ✅ Enhanced metadata (confidence, source, verification, expiration)
- ✅ Auto-tagging based on content
- ✅ Proactive context retrieval
- ✅ Memory consolidation (weekly/monthly)
- ✅ Memory decay and cleanup
- ✅ Cross-referencing between memories
- ✅ Access tracking (count, last accessed)
2026-02-05 — ACTIVE.md Enforcement Rule
- ✅ MANDATORY: Read ACTIVE.md BEFORE every tool use
- ✅ Added enforcement to AGENTS.md, TOOLS.md, and MEMORY.md
- ✅ Stored in Qdrant memory (ID:
bb5b784f-49ad-4b50-b905-841aeb2c2360) - ✅ Violations result in failed tool calls and loss of trust
2026-02-06 — Agent Name Change
- ✅ Changed other agent name from "Jarvis" to "Max"
- ✅ Updated all files: HEARTBEAT.md, activity_log.py, agent_chat.py, log_activity.py, memory/2026-02-05.md
- ✅ Max uses minimax-m2.1:cloud model
- ✅ Shared Redis stream for agent messaging:
agent-messages
2026-02-10 — Memory System Manual Mode + New Collections
- ✅ Disabled automatic Qdrant storage
- ✅ Disabled proactive retrieval
- ✅ Disabled auto-consolidation
- ✅ Created
kimi_memoriescollection (1024 dims, snowflake-arctic-embed2) for personal memories - ✅ Created
kimi_kbcollection (1024 dims, snowflake-arctic-embed2) for knowledge base (web, docs, data) - ✅ Qdrant now manual-only when user requests
- ✅ Daily file logs continue normally
- ✅ Updated SKILL.md, TOOLS.md, MEMORY.md
- Command mapping:
- "remember this..." or "note" → File-based daily logs (automatic)
- "q remember", "q recall", "q save" →
kimi_memories(personal, manual) - "add to KB", "store doc" →
kimi_kb(knowledge base, manual)
2026-02-10 — Agent Messaging Changed to Manual Mode
- ✅ Disabled automatic Redis heartbeat checks
- ✅ Disabled auto-notification queue
- ✅ Redis messaging now manual-only when user requests
- ✅ Updated HEARTBEAT.md and MEMORY.md
2026-02-10 — Perplexity API + Unified Search Setup
- ✅ Perplexity API configured at
/skills/perplexity/- Key:
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 - Endpoint:
https://api.perplexity.ai/chat/completions - Models: sonar, sonar-pro, sonar-reasoning, sonar-deep-research
- Format: OpenAI-compatible, ~$0.005 per query
- Key:
- ✅ Unified search script created:
skills/perplexity/scripts/search.py- Primary: Perplexity (AI-curated answers, citations)
- Fallback: SearXNG (local, raw results)
- Usage:
search "query"(default),search p "query"(Perplexity only),search local "query"(SearXNG only) - Rob pays for Perplexity, so use it as primary
- ✅ SearXNG remains available for: privacy-sensitive searches, simple lookups, rate limit fallback
Personality Notes
How to Be Helpful
- Actions > words — skip the fluff, just help
- Have opinions — not a search engine with extra steps
- Resourceful first — try to figure it out before asking
- Competence earns trust — careful with external actions
Boundaries
- Private stays private
- Ask before sending emails/tweets/public posts
- Not Rob's voice in group chats — I'm a participant, not his proxy
Things to Remember
(Add here as they come up)
Lessons Learned
Tool Usage Patterns
✅ Read tool: Use file_path, never path
✅ Edit tool: Always provide old_string AND new_string
✅ Search: searx_search not enabled - check available tools first
⚠️ CRITICAL: ACTIVE.md Enforcement (2026-02-05)
MANDATORY RULE: Must read ACTIVE.md section BEFORE every tool use.
Why it exists: Prevent failed tool calls from wrong parameter names.
What I did wrong:
- Used
pathinstead offile_pathforread - Used
newText/oldTextinstead ofnew_string/old_stringforedit - Failed to check ACTIVE.md before using tools
- Wasted tokens and time on avoidable errors
Enforcement Protocol:
- Identify the tool needed
- Read ACTIVE.md section for that tool
- Check "My Common Mistakes Reference" table
- Verify parameter names
- Only then execute
Recovery: After 2 failed edit attempts, switch to write tool.
Voice Skill Paths
- Whisper:
/skills/local-whisper-stt/scripts/transcribe.py - TTS:
/skills/kimi-tts-custom/scripts/voice_reply.py <chat_id> "text"
Memory System Mode (2026-02-10)
- Qdrant: Manual only when user requests
- File logs: Continue automatically
- No auto-storage, no proactive retrieval
Agent Messaging Mode (2026-02-10)
- Redis: Manual only when user requests
- No auto-check on heartbeat
- No auto-notification queue
⚠️ CRITICAL: Config Backup Rule (2026-02-10)
MANDATORY RULE: Before making any changes to openclaw.json, create a backup first.
Naming convention: openclaw.json.bak.DDMMYYYY (day month year)
- Example:
openclaw.json.bak.10022026for February 10, 2026
Command:
DATE=$(date +%d%m%Y); cp /root/.openclaw/openclaw.json /root/.openclaw/openclaw.json.bak.${DATE}
Why it matters: Prevents configuration corruption, allows rollback if changes break something. MANDATORY RULE: When hitting a blocking error during an active task, report immediately — don't wait for user to ask.
What I did wrong:
- Started a task ("q save ALL memories") and said "let me know when it's complete"
- Discovered Qdrant was unreachable (host down, 100% packet loss)
- Stayed silent instead of immediately reporting the failure
- User had to ask "let me know when it's complete" to discover I was blocked
Correct behavior:
- Hit blocking error → immediately report: "Stopped — [reason]. Cannot proceed."
- Do not wait for user to check in
- Do not imply progress is happening when it's not
Applies to:
- Service outages (Qdrant, Redis, Ollama down)
- Permission errors
- Resource exhaustion
- Any error that prevents task completion
Active Projects
(What Rob is working on — add as discovered)
2026-02-10 — Git Repository Initialized
- ✅ Git repo initialized at
/root/.openclaw/workspace - ✅ Initial commit:
d1357c5— "Initial commit: workspace setup with skills, memory, config" - ✅ 77 files, 10,822 insertions committed
- ✅ Status: clean working tree
- Qdrant stored: Git setup details (ID:
1d35af8e-76ec-4ea0-952d-6e2c3555ebf7)
2026-02-10 — Sub-Agent Setup (Option B)
- ✅ Configured sub-agent defaults in
openclaw.json - ✅ Model:
qwen3:30b-a3b-instruct-2507-q8_0at 10.0.0.10:11434 (viaollama-remoteprovider) - ✅ Max concurrent: 2
- ✅ Tool restrictions: deny write, edit, apply_patch, browser, cron
- ✅ Purpose: Offload background tasks to .10 GPU
*Last updated: 2026-02-10