Skip to main content
NullClaw features a hybrid memory system combining vector embeddings, keyword search (FTS5), and traditional storage backends - all with zero external dependencies.

Overview

NullClaw’s memory architecture:

Vector Search

Cosine similarity search on embeddings stored as BLOB

Keyword Search

FTS5 virtual tables with BM25 scoring

Hybrid Merge

Weighted combination of vector + keyword results

Memory Backends

SQLite (Default)

Full-featured backend with vector + FTS5 search:
config.json
Features:
  • Vector embeddings as BLOB
  • FTS5 full-text search
  • Automatic archival & purge
  • Snapshot export/import
  • Transaction safety
Storage location: ~/.nullclaw/memory.db

Markdown (Simple)

Plain-text append-only storage:
config.json
Layout:
  • workspace/MEMORY.md - Curated long-term memory
  • workspace/memory/YYYY-MM-DD.md - Daily logs
Features:
  • Human-readable
  • Git-friendly
  • Append-only (forget() is no-op)
  • No search indexing
Use cases:
  • Audit trails
  • Simple deployments
  • Text-first workflows

Vector Search Configuration

Embedding Providers

config.json

Embedding Models

Vector Store Options

Stores embeddings as BLOB in SQLite.
Combine vector and keyword search:
config.json

Merge Strategies

Combines rankings from vector + keyword search. Best for balanced results.
Linear combination of normalized scores.
Semantic search only (ignores keyword results).
BM25 full-text search only (ignores embeddings).

Advanced Query Options

config.json
MMR (Maximal Marginal Relevance):
  • Diversifies results to reduce redundancy
  • lambda: 0.0 = max diversity, 1.0 = max relevance
Temporal Decay:
  • Boosts recent memories
  • half_life_days: Days until score halves

Chunking

Split long memories into smaller chunks:
config.json
  • max_tokens: Maximum tokens per chunk
  • overlap: Overlapping tokens between chunks

Memory Lifecycle

Automatic Hygiene

config.json
1

Archive

After archive_after_days, memories are marked archived (not returned in searches).
2

Purge

After purge_after_days, archived memories are permanently deleted.
3

Conversation Retention

Full conversation logs retained for this many days.

Snapshots

Export/import full memory state:
config.json
Export snapshot:
Import snapshot:

Performance Tuning

Response Caching

config.json
Caches search results for identical queries.

Embedding Sync

config.json
Modes:
  • best_effort: Continue even if embedding fails
  • strict: Fail if embedding fails
  • async: Background embedding (non-blocking)

Query Optimization

config.json
  • max_results: Final results returned
  • candidate_multiplier: Fetch max_results * multiplier before reranking
  • Cache frequently-accessed embeddings

Migration

From OpenClaw

Migrates:
  • Memory entries
  • Embeddings
  • Config structure
  • Session history

Between Backends

1

Export from Old Backend

2

Change Backend in Config

3

Import to New Backend

External Memory Engines

NullClaw supports pluggable memory backends:

Redis

config.json

PostgreSQL

config.json
Requires PostgreSQL 12+ with pgvector extension for vector search.

API Backend

config.json
Connect to external memory service.

Troubleshooting

Embedding Failures

SQLite Locked

Poor Search Quality

Tune hybrid weights:
Enable MMR for diversity:

High Memory Usage

Reduce cache size:
Enable aggressive hygiene:

Next Steps

Sandboxing

Configure security isolation

Hardware Integration

Connect Arduino, RPi, STM32