2026-02-10 14:37:49 -06:00
|
|
|
# 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":
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 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 storage
|
|
|
|
|
- `search_memories.py` — Search stored memories
|
|
|
|
|
- `hybrid_search.py` — Search both files and vectors
|
|
|
|
|
- `init_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:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 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 transcription
|
|
|
|
|
- `kimi-tts-custom` — Custom voice filenames, voice-only mode
|
|
|
|
|
- `qdrant-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
|
|
|
|
|
- **Mode:** Automatic — stores/retrieves without user prompting
|
|
|
|
|
- **Scripts available:**
|
|
|
|
|
- `store_memory.py` — Store memory with embedding
|
|
|
|
|
- `search_memories.py` — Semantic search
|
|
|
|
|
- `hybrid_search.py` — Search both files and vectors
|
|
|
|
|
- `init_collection.py` — Initialize Qdrant collection
|
|
|
|
|
- `auto_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_memories` collection (1024 dims, snowflake-arctic-embed2) for personal memories
|
|
|
|
|
- ✅ Created `kimi_kb` collection (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
|
|
|
|
|
- ✅ 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 `path` instead of `file_path` for `read`
|
|
|
|
|
- Used `newText`/`oldText` instead of `new_string`/`old_string` for `edit`
|
|
|
|
|
- Failed to check ACTIVE.md before using tools
|
|
|
|
|
- Wasted tokens and time on avoidable errors
|
|
|
|
|
|
|
|
|
|
**Enforcement Protocol:**
|
|
|
|
|
1. Identify the tool needed
|
|
|
|
|
2. **Read ACTIVE.md section for that tool**
|
|
|
|
|
3. Check "My Common Mistakes Reference" table
|
|
|
|
|
4. Verify parameter names
|
|
|
|
|
5. 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.10022026` for February 10, 2026
|
|
|
|
|
|
|
|
|
|
**Command:**
|
|
|
|
|
```bash
|
|
|
|
|
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 14:40:31 -06:00
|
|
|
### 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_0` at 10.0.0.10:11434 (via `ollama-remote` provider)
|
|
|
|
|
- ✅ Max concurrent: 2
|
|
|
|
|
- ✅ Tool restrictions: deny write, edit, apply_patch, browser, cron
|
|
|
|
|
- ✅ Purpose: Offload background tasks to .10 GPU
|
|
|
|
|
|
2026-02-10 14:37:49 -06:00
|
|
|
---
|
|
|
|
|
|
2026-02-10 14:40:31 -06:00
|
|
|
*Last updated: 2026-02-10
|