Skip to content

Commit 7992f27

Browse files
committed
[Release] Bump version to 0.6.0
Update version across all manifests (version.rb, plugin.json, marketplace.json, CLAUDE.md marker). Add CHANGELOG entry covering sqlite-vec native vector storage, SessionStart context injection, compact/export commands, DualQueryTemplate recall fix, and SchemaValidator vec0 crash fix. Update README key features and CLAUDE.md with current tool/command counts and architecture notes.
1 parent 289c47f commit 7992f27

9 files changed

Lines changed: 86 additions & 22 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"plugins": [
88
{
99
"name": "claude-memory",
10-
"version": "0.5.1",
10+
"version": "0.6.0",
1111
"source": "./",
1212
"description": "Long-term self-managed memory for Claude Code with fact extraction, truth maintenance, and provenance tracking",
1313
"repository": "https://github.com/codenamev/claude_memory"

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "claude-memory",
3-
"version": "0.5.1",
3+
"version": "0.6.0",
44
"description": "Long-term self-managed memory for Claude Code with fact extraction, truth maintenance, and provenance tracking",
55
"author": {
66
"name": "Valentino Stoll",

.claude/CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- ClaudeMemory v0.5.1 -->
1+
<!-- ClaudeMemory v0.6.0 -->
22
# Project Memory
33

44
@.claude/rules/claude_memory.generated.md

.claude/settings.local.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
"Bash(qmd search:*)",
3636
"Skill(study-repo)",
3737
"WebFetch(domain:www.rubydoc.info)",
38-
"Bash(git status:*)"
38+
"Bash(git status:*)",
39+
"WebFetch(domain:github.com)"
3940
]
4041
},
4142
"enableAllProjectMcpServers": true

CHANGELOG.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,61 @@ All notable changes to this project will be documented in this file.
44

55
## [Unreleased]
66

7+
## [0.6.0] - 2026-03-06
8+
9+
### Added
10+
11+
**Native Vector Storage (sqlite-vec)**
12+
- Integrated [sqlite-vec](https://github.com/asg017/sqlite-vec) for native KNN vector search
13+
- `VectorIndex` class with vec0 virtual table for cosine similarity search
14+
- Dual-write: embeddings stored in both JSON column and vec0 index
15+
- `claude-memory index --vec` flag for backfilling existing embeddings into vec0
16+
- Fast path in `Recall` uses sqlite-vec KNN when available, falls back to JSON + Ruby
17+
- Sweeper cleans up vec0 entries for superseded/expired facts
18+
- Doctor and MCP status/stats report vec0 availability and coverage
19+
- Cross-platform support with platform-specific gem installation
20+
21+
**Database Maintenance**
22+
- `compact` command for database maintenance (VACUUM + integrity check)
23+
- `export` command for fact backup and migration to JSON
24+
25+
**Hook Enhancements**
26+
- SessionStart context injection via `hookSpecificOutput.additionalContext`
27+
- Injects recent facts and project context at session start
28+
- Tool-specific observation compression for reduced token usage
29+
- `--async` flag for non-blocking hook execution
30+
- Hook error classification for graceful degradation
31+
- Conversation exclusion markers for session-level opt-out
32+
33+
**MCP Discovery**
34+
- `memory.list_projects` MCP tool for discovering all project databases
35+
36+
**Developer Experience**
37+
- Dynamic MCP server instructions with progressive disclosure documentation
38+
- Comparative benchmark suite with QMD and grepai adapters
39+
- `bin/setup-competitors` for installing competitor tools
40+
- `bin/run-evals --comparative` for side-by-side benchmarks
41+
42+
### Fixed
43+
44+
- **Recall returned no results**: `DualQueryTemplate` accessed stores before initializing them,
45+
causing all recall queries to silently return empty results. Refactored to use existing
46+
`store_for_scope` method which handles initialization and access atomically.
47+
- **Doctor crashed on sqlite-vec tables**: `SchemaValidator` iterated all tables including vec0
48+
virtual tables, which require the sqlite-vec extension. Now skips `facts_vec*` tables using
49+
prefix match to handle future partition tables.
50+
- **Forward-migrated databases**: Older gem versions now gracefully handle databases migrated
51+
by newer versions instead of crashing.
52+
- **Hybrid retrieval ordering**: Preserved BM25 scores and RRF ordering in hybrid search results
53+
instead of re-sorting by source/time.
54+
- Fork-based concurrency tests skipped on Ruby 4.0+ (Extralite incompatibility)
55+
- Real eval tests now run in tmpdir with fixture database
56+
57+
### Internal
58+
- Refactored publish to avoid unnecessary rewrites from timestamp churn
59+
- Skip quality-review hook when running inside Claude Code session
60+
- Influence studies for claude-mem, episodic-memory, kbs repositories
61+
762
## [0.5.1] - 2026-02-04
863

964
### Fixed

CLAUDE.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,9 @@ Transcripts → Ingest → Index (FTS5)
170170
- **`Ingest`**: Transcript reading and delta-based ingestion (`ingest/`)
171171
- Tracks cursor position per session to avoid re-processing
172172

173-
- **`Index`**: Full-text search using SQLite FTS5 (`index/`)
173+
- **`Index`**: Full-text search and vector indexing (`index/`)
174+
- `LexicalFTS`: SQLite FTS5 full-text search
175+
- `VectorIndex`: sqlite-vec native KNN search with vec0 virtual tables
174176
- Optimized with batch queries to eliminate N+1 issues
175177

176178
- **`Distill`**: Fact extraction interface (`distill/`)
@@ -194,8 +196,8 @@ Transcripts → Ingest → Index (FTS5)
194196
- Modes: shared (repo), local (uncommitted), home (user directory)
195197

196198
- **`MCP`**: Model Context Protocol server and tools (`mcp/`)
197-
- Exposes memory tools to Claude Code
198-
- Tools: recall, explain, promote, status, conflicts, changes, sweep_now
199+
- Exposes memory tools to Claude Code (21 tools total)
200+
- Dual content/structuredContent responses with compact mode
199201

200202
- **`Hook`**: Hook entrypoint handlers (`hook/`)
201203
- Reads stdin JSON from Claude Code hooks
@@ -284,7 +286,7 @@ Single-value predicates (like "uses_database") supersede old values. Multi-value
284286

285287
- `lib/claude_memory.rb`: Main module, requires, database path helpers
286288
- `lib/claude_memory/cli.rb`: Thin command router (41 lines)
287-
- `lib/claude_memory/commands/`: Individual command classes (20 commands)
289+
- `lib/claude_memory/commands/`: Individual command classes (22 commands)
288290
- `lib/claude_memory/configuration.rb`: Centralized configuration and ENV access
289291
- `lib/claude_memory/domain/`: Domain models (Fact, Entity, Provenance, Conflict)
290292
- `lib/claude_memory/core/`: Value objects and null objects
@@ -299,31 +301,33 @@ Single-value predicates (like "uses_database") supersede old values. Multi-value
299301

300302
The gem includes an MCP server (`claude-memory serve-mcp`) that exposes memory operations as tools. Configuration should be in `.mcp.json` at project root.
301303

302-
Available MCP tools (18 total):
304+
Available MCP tools (21 total):
303305
- **Query & Recall**: `memory.recall`, `memory.recall_index`, `memory.recall_details`, `memory.recall_semantic`, `memory.search_concepts`
304-
- **Provenance**: `memory.explain`
306+
- **Provenance**: `memory.explain`, `memory.fact_graph`
305307
- **Shortcuts**: `memory.decisions`, `memory.conventions`, `memory.architecture`
306308
- **Context**: `memory.facts_by_tool`, `memory.facts_by_context`
307309
- **Management**: `memory.promote`, `memory.store_extraction`
308310
- **Monitoring**: `memory.status`, `memory.stats`, `memory.changes`, `memory.conflicts`
309311
- **Maintenance**: `memory.sweep_now`
310-
- **Setup**: `memory.check_setup`
312+
- **Discovery**: `memory.check_setup`, `memory.list_projects`
311313

312314
## Hook Integration
313315

314316
ClaudeMemory integrates with Claude Code via hooks in `.claude/settings.json`:
315317

316-
- **Ingest hook**: Triggers on Stop/SessionStart/PreCompact events
318+
- **Ingest hook**: Triggers on Stop/SessionStart/PreCompact/SessionEnd events
317319
- Calls `claude-memory hook ingest` with stdin JSON
318320
- Reads transcript delta and updates both global and project databases
319321

320-
- **Sweep hook**: Triggers on idle_prompt and safety events
321-
- Runs time-bounded maintenance on both databases
322+
- **Context hook**: Triggers on SessionStart
323+
- Calls `claude-memory hook context`
324+
- Injects recent facts via `hookSpecificOutput.additionalContext`
322325

323-
- **Publish hook**: Optional, on SessionEnd/PreCompact
324-
- Publishes curated snapshot to `.claude/rules/`
326+
- **Sweep hook**: Triggers on PreCompact/SessionEnd events
327+
- Runs time-bounded maintenance on both databases
328+
- Cleans up vec0 entries for superseded/expired facts
325329

326-
Hook commands read JSON payloads from stdin for robustness.
330+
Hook commands read JSON payloads from stdin for robustness. Supports `--async` flag for non-blocking execution.
327331

328332
## Code Style
329333

Gemfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
claude_memory (0.5.1)
4+
claude_memory (0.6.0)
55
extralite (~> 2.14)
66
sequel (~> 5.0)
77
sqlite-vec (~> 0.1)
@@ -137,7 +137,7 @@ DEPENDENCIES
137137
CHECKSUMS
138138
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
139139
bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7
140-
claude_memory (0.5.1)
140+
claude_memory (0.6.0)
141141
date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
142142
diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962
143143
erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,16 @@ Claude: "Based on my memory, you're using Rails with PostgreSQL..."
9595
## Key Features
9696

9797
- **Dual Scope**: Project-specific + global user preferences
98+
- **Hybrid Search**: FTS5 full-text + semantic vector search with Reciprocal Rank Fusion
99+
- **Native Vector Storage**: [sqlite-vec](https://github.com/asg017/sqlite-vec) for fast KNN search with local embeddings ([fastembed-rb](https://github.com/khasinski/fastembed-rb), no API key)
100+
- **Session Context**: Automatic context injection at session start with recent facts
98101
- **Privacy First**: `<private>` tags exclude sensitive data
99102
- **Progressive Disclosure**: Lightweight queries before full details
100103
- **Semantic Shortcuts**: Quick access to decisions, conventions, architecture
101104
- **Truth Maintenance**: Automatic conflict resolution
102105
- **Claude-Powered**: Uses Claude's intelligence to extract facts (no API key needed)
103106
- **Token Efficient**: 10x reduction in memory queries with progressive disclosure
107+
- **Database Maintenance**: Compact, export, and backup commands
104108

105109
## Privacy Control
106110

@@ -169,10 +173,10 @@ claude-memory doctor
169173
This checks:
170174
- Database existence and integrity
171175
- Schema version compatibility
176+
- sqlite-vec availability and index coverage
172177
- Hooks configuration
173178
- Snapshot status
174179
- Stuck operations
175-
- Orphaned hooks (hooks without MCP configuration)
176180

177181
### Uninstalling
178182

@@ -253,7 +257,7 @@ The benchmark dataset draws from real CLAUDE.md patterns and is designed specifi
253257

254258
- **Language:** Ruby 3.2+
255259
- **Storage:** SQLite3 (no external services)
256-
- **Testing:** 985 examples, 100% core coverage
260+
- **Testing:** 1316 examples, 100% core coverage
257261
- **Code Style:** Standard Ruby
258262

259263
```bash

lib/claude_memory/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module ClaudeMemory
4-
VERSION = "0.5.1"
4+
VERSION = "0.6.0"
55
end

0 commit comments

Comments
 (0)