Memory System with Salience Decay
- SQLite-backed memory with two sectors: semantic (long-term facts) and episodic (conversation context)
- FTS5 full-text search for relevant memory retrieval per message
- Salience scoring: frequently accessed memories get reinforced (+0.1), unused ones decay daily (×0.98)
- Auto-delete when salience drops below 0.1 — system self-cleans
- Semantic signals detected via patterns (“my”, “I am”, “I prefer”, “remember”, “always”, “never”)
- Memory context injected above each user message before sending to Claude
- Different from vault-based memory: this is runtime memory for conversational AI, not document storage
Implementation Details
SQLite Schema
memories table: chat_id, topic_key, content, sector (semantic/episodic), salience (default 1.0), created_at, accessed_at
- FTS5 virtual table
memories_fts mirroring content, with INSERT/UPDATE/DELETE triggers to stay in sync
- WAL mode for concurrent access
Memory Retrieval (buildMemoryContext)
- FTS5 search on user message → top 3 results
- Recent fetch by accessed_at → top 5
- Deduplicate by id
- Touch accessed memories: salience += 0.1 (capped at 5.0), update accessed_at
- Return as
[Memory context]\n- {content} ({sector})\n...
Memory Storage (saveConversationTurn)
- Skip if message ≤20 chars or starts with
/
- Detect semantic signals: words like “my”, “I am”, “I’m”, “I prefer”, “remember”, “always”, “never” (case-insensitive)
- Semantic match → sector: semantic, otherwise → sector: episodic
- Initial salience: 1.0
Decay Sweep (runDecaySweep)
- Daily:
salience *= 0.98 for memories older than 24h
- Auto-delete:
DELETE WHERE salience < 0.1
- Run on startup + every 24h interval
Simple Memory Alternative
- Store last N conversation turns in a
turns table (role, content, created_at)
- Prepend as conversation history, no decay logic
- Prune beyond 50 turns
Reference
- ClaudeClaw Rebuild Prompt — full implementation spec including SQLite schema, FTS5 triggers, decay sweep logic, and dual-sector classification
- See
vault/00_system/external/Internet/REBUILD_PROMPT.md for detailed specs
When to build
- Relevant when Opus has a messaging interface (FR-027, FR-028)
- Could also enhance session-to-session continuity within Claude Code itself
Open Questions
References