Skip to main content

Database Architecture

Claude-Mem uses SQLite 3 with the bun:sqlite native module for persistent storage and FTS5 for full-text search.

Database Location

Path: ~/.claude-mem/claude-mem.db The database uses SQLite’s WAL (Write-Ahead Logging) mode for concurrent reads/writes.

Database Implementation

Primary Implementation: bun:sqlite (native SQLite module)
  • Used by: SessionStore and SessionSearch
  • Format: Synchronous API with better performance
  • Note: Database.ts (using bun:sqlite) is legacy code

Core Tables

1. sdk_sessions

Tracks active and completed sessions.
Indexes:
  • idx_sdk_sessions_claude_session on claude_session_id
  • idx_sdk_sessions_project on project
  • idx_sdk_sessions_status on status
  • idx_sdk_sessions_created_at on created_at_epoch DESC

2. observations

Individual tool executions with hierarchical structure.
Observation Types:
  • decision - Architectural or design decisions
  • bugfix - Bug fixes and corrections
  • feature - New features or capabilities
  • refactor - Code refactoring and cleanup
  • discovery - Learnings about the codebase
  • change - General changes and modifications
Indexes:
  • idx_observations_session on session_id
  • idx_observations_sdk_session on sdk_session_id
  • idx_observations_project on project
  • idx_observations_tool_name on tool_name
  • idx_observations_created_at on created_at_epoch DESC
  • idx_observations_type on type

3. session_summaries

AI-generated session summaries (multiple per session).
Indexes:
  • idx_session_summaries_sdk_session on sdk_session_id
  • idx_session_summaries_project on project
  • idx_session_summaries_created_at on created_at_epoch DESC

4. user_prompts

Raw user prompts with FTS5 search (as of v4.2.0).
Indexes:
  • idx_user_prompts_sdk_session on sdk_session_id
  • idx_user_prompts_project on project
  • idx_user_prompts_created_at on created_at_epoch DESC

Legacy Tables

  • sessions: Legacy session tracking (v3.x)
  • memories: Legacy compressed memory chunks (v3.x)
  • overviews: Legacy session summaries (v3.x)
SQLite FTS5 (Full-Text Search) virtual tables enable fast full-text search across observations, summaries, and user prompts.

FTS5 Virtual Tables

observations_fts

session_summaries_fts

user_prompts_fts

Automatic Synchronization

FTS5 tables stay in sync via triggers:

FTS5 Query Syntax

FTS5 supports rich query syntax:
  • Simple: "error handling"
  • AND: "error" AND "handling"
  • OR: "bug" OR "fix"
  • NOT: "bug" NOT "feature"
  • Phrase: "'exact phrase'"
  • Column: title:"authentication"

Security

As of v4.2.3, all FTS5 queries are properly escaped to prevent SQL injection:
  • Double quotes are escaped: query.replace(/"/g, '""')
  • Comprehensive test suite with 332 injection attack tests

Database Classes

SessionStore

CRUD operations for sessions, observations, summaries, and user prompts. Location: src/services/sqlite/SessionStore.ts Methods:
  • createSession()
  • getSession()
  • updateSession()
  • createObservation()
  • getObservations()
  • createSummary()
  • getSummaries()
  • createUserPrompt()

SessionSearch

FTS5 full-text search with 8 specialized search methods. Location: src/services/sqlite/SessionSearch.ts Methods:
  • searchObservations() - Full-text search across observations
  • searchSessions() - Full-text search across summaries
  • searchUserPrompts() - Full-text search across user prompts
  • findByConcept() - Find by concept tags
  • findByFile() - Find by file references
  • findByType() - Find by observation type
  • getRecentContext() - Get recent session context
  • advancedSearch() - Combined filters

Migrations

Database schema is managed via migrations in src/services/sqlite/migrations.ts. Migration History:
  • Migration 001: Initial schema (sessions, memories, overviews, diagnostics, transcript_events)
  • Migration 002: Hierarchical memory fields (title, subtitle, facts, concepts, files_touched)
  • Migration 003: SDK sessions and observations
  • Migration 004: Session summaries
  • Migration 005: Multi-prompt sessions (prompt_counter, prompt_number)
  • Migration 006: FTS5 virtual tables and triggers
  • Migration 007-010: Various improvements and user prompts table

Performance Considerations

  • Indexes: All foreign keys and frequently queried columns are indexed
  • FTS5: Full-text search is significantly faster than LIKE queries
  • Triggers: Automatic synchronization has minimal overhead
  • Connection Pooling: bun:sqlite reuses connections efficiently
  • Synchronous API: bun:sqlite uses synchronous API for better performance

Troubleshooting

See Troubleshooting - Database Issues for common problems and solutions.