vesper-memory 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +8 -4
- package/CHANGELOG.md +129 -3
- package/LICENSE +59 -0
- package/README.md +422 -24
- package/config/migrations/001_add_skill_summary.sql +75 -0
- package/config/migrations/001_rollback_skill_summary.sql +60 -0
- package/config/sqlite-schema.sql +68 -4
- package/dist/benchmark/types.d.ts +4 -4
- package/dist/cli.js +204 -10
- package/dist/cli.js.map +1 -1
- package/dist/consolidation/pipeline.d.ts +6 -1
- package/dist/consolidation/pipeline.d.ts.map +1 -1
- package/dist/consolidation/pipeline.js +53 -35
- package/dist/consolidation/pipeline.js.map +1 -1
- package/dist/memory-layers/semantic-memory.d.ts +9 -19
- package/dist/memory-layers/semantic-memory.d.ts.map +1 -1
- package/dist/memory-layers/semantic-memory.js +31 -54
- package/dist/memory-layers/semantic-memory.js.map +1 -1
- package/dist/memory-layers/skill-lazy-loading.d.ts +160 -0
- package/dist/memory-layers/skill-lazy-loading.d.ts.map +1 -0
- package/dist/memory-layers/skill-lazy-loading.js +247 -0
- package/dist/memory-layers/skill-lazy-loading.js.map +1 -0
- package/dist/memory-layers/skill-library.d.ts +133 -4
- package/dist/memory-layers/skill-library.d.ts.map +1 -1
- package/dist/memory-layers/skill-library.js +427 -8
- package/dist/memory-layers/skill-library.js.map +1 -1
- package/dist/memory-layers/working-memory.d.ts +35 -14
- package/dist/memory-layers/working-memory.d.ts.map +1 -1
- package/dist/memory-layers/working-memory.js +114 -36
- package/dist/memory-layers/working-memory.js.map +1 -1
- package/dist/retrieval/hybrid-search.d.ts +2 -2
- package/dist/retrieval/hybrid-search.d.ts.map +1 -1
- package/dist/retrieval/hybrid-search.js +4 -3
- package/dist/retrieval/hybrid-search.js.map +1 -1
- package/dist/router/smart-router.d.ts +25 -0
- package/dist/router/smart-router.d.ts.map +1 -1
- package/dist/router/smart-router.js +90 -10
- package/dist/router/smart-router.js.map +1 -1
- package/dist/scheduler/consolidation-scheduler.d.ts +129 -0
- package/dist/scheduler/consolidation-scheduler.d.ts.map +1 -0
- package/dist/scheduler/consolidation-scheduler.js +179 -0
- package/dist/scheduler/consolidation-scheduler.js.map +1 -0
- package/dist/scheduler/index.d.ts +7 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +7 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/server-wrapper.js +0 -0
- package/dist/server.js +892 -30
- package/dist/server.js.map +1 -1
- package/dist/synthesis/conflict-detector.d.ts +4 -6
- package/dist/synthesis/conflict-detector.d.ts.map +1 -1
- package/dist/synthesis/conflict-detector.js +19 -21
- package/dist/synthesis/conflict-detector.js.map +1 -1
- package/dist/utils/paths.d.ts +72 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +160 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/validation.d.ts +123 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +146 -7
- package/dist/utils/validation.js.map +1 -1
- package/docker-compose.yml +11 -13
- package/embedding-service/README.md +8 -0
- package/package.json +6 -3
- package/scripts/FRESH_INSTALL.md +1 -1
- package/scripts/ensure-infrastructure.sh +86 -15
- package/scripts/health-check.sh +2 -1
- package/scripts/stop-infrastructure.sh +23 -0
- package/scripts/test-mcp-server.sh +2 -1
package/README.md
CHANGED
|
@@ -6,13 +6,40 @@
|
|
|
6
6
|
|
|
7
7
|
Simple, local memory system for Claude Code. No authentication, no complexity - just memory that works.
|
|
8
8
|
|
|
9
|
-
[](https://www.npmjs.com/package/vesper-memory)
|
|
10
|
+
[](https://www.npmjs.com/package/vesper-memory)
|
|
11
|
+
[](.)
|
|
11
12
|
[](.)
|
|
12
13
|
[](.)
|
|
13
14
|
|
|
14
15
|
---
|
|
15
16
|
|
|
17
|
+
## ✨ What's New in v0.5.0
|
|
18
|
+
|
|
19
|
+
**Multi-Agent Namespace Isolation**
|
|
20
|
+
- All memory operations support `namespace` parameter for multi-agent workflows
|
|
21
|
+
- Multiple specialist agents can share Vesper while maintaining isolation
|
|
22
|
+
- Fully backward compatible - existing single-agent usage unchanged
|
|
23
|
+
|
|
24
|
+
**Agent Attribution**
|
|
25
|
+
- Track which agent stored each memory with `agent_id`, `agent_role`, `task_id`
|
|
26
|
+
- Filter retrieval by agent or task, or exclude specific agents
|
|
27
|
+
|
|
28
|
+
**Decision Memory Type**
|
|
29
|
+
- New `memory_type: "decision"` with reduced temporal decay (4x slower)
|
|
30
|
+
- Supersedes mechanism for evolving decisions
|
|
31
|
+
- Automatic conflict detection against existing decisions
|
|
32
|
+
|
|
33
|
+
**4 New MCP Tools** (13 total)
|
|
34
|
+
- `share_context`: Copy memories between namespaces with handoff tracking
|
|
35
|
+
- `store_decision`: Store decisions with conflict detection
|
|
36
|
+
- `list_namespaces`: Discover all namespaces with counts
|
|
37
|
+
- `namespace_stats`: Per-namespace breakdown of memories, entities, agents
|
|
38
|
+
|
|
39
|
+
**909 tests passing** (up from 632 in v0.4.0)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
16
43
|
## 📊 Performance & Benchmarks
|
|
17
44
|
|
|
18
45
|
Vesper has been scientifically validated with comprehensive benchmarks measuring both **performance overhead** and **real-world value**.
|
|
@@ -22,7 +49,7 @@ Vesper has been scientifically validated with comprehensive benchmarks measuring
|
|
|
22
49
|
| Benchmark | Purpose | Key Metric | Result |
|
|
23
50
|
|-----------|---------|------------|--------|
|
|
24
51
|
| **Accuracy** | Measures VALUE (answer quality) | F1 Score | **98.5%** 🎯 |
|
|
25
|
-
| **Latency** | Measures COST (overhead) | P95 Latency | **
|
|
52
|
+
| **Latency** | Measures COST (overhead) | P95 Latency | **0.4ms** ⚡ |
|
|
26
53
|
|
|
27
54
|
### Accuracy Benchmark Results ⭐
|
|
28
55
|
|
|
@@ -50,14 +77,14 @@ Vesper has been scientifically validated with comprehensive benchmarks measuring
|
|
|
50
77
|
|
|
51
78
|
**What it measures:** Performance overhead of memory operations.
|
|
52
79
|
|
|
53
|
-
| Metric |
|
|
54
|
-
|
|
55
|
-
| **P50 Latency** | 4.
|
|
56
|
-
| **P95 Latency** |
|
|
57
|
-
| **P99 Latency** |
|
|
58
|
-
| **Memory Hit Rate** |
|
|
80
|
+
| Metric | Without Memory | With Vesper | Improvement |
|
|
81
|
+
|--------|---------------|-------------|-------------|
|
|
82
|
+
| **P50 Latency** | 4.5ms | 0.2ms | ✅ **95.6% faster** |
|
|
83
|
+
| **P95 Latency** | 7.0ms | 0.4ms | ✅ **94.3% faster** |
|
|
84
|
+
| **P99 Latency** | 7.5ms | 0.6ms | ✅ **92.0% faster** |
|
|
85
|
+
| **Memory Hit Rate** | 0% | 100% | ✅ **Perfect recall** |
|
|
59
86
|
|
|
60
|
-
**What this means:**
|
|
87
|
+
**What this means:** Vesper v0.4.0 provides perfect memory recall with exceptional performance. Lazy loading reduces token usage by 90%, while the LRU embedding cache eliminates redundant embedding generation. Working memory provides sub-millisecond fast path for recent queries. All latency targets exceeded: P95 of 0.4ms is **99.8% better** than the 200ms target.
|
|
61
88
|
|
|
62
89
|
### Benchmark Methodology
|
|
63
90
|
|
|
@@ -163,7 +190,7 @@ When you say "analyze this dataset," I wouldn't just recall facts about you - I'
|
|
|
163
190
|
The final design is:
|
|
164
191
|
|
|
165
192
|
**Three memory layers:**
|
|
166
|
-
1. **Working Memory** (Redis) - last 5 conversations, ~
|
|
193
|
+
1. **Working Memory** (Redis) - last 5 conversations, ~5ms retrieval
|
|
167
194
|
2. **Semantic Memory** (HippoRAG + Qdrant) - knowledge graph with multi-hop reasoning
|
|
168
195
|
3. **Procedural Memory** (SQLite) - learned skills and workflows
|
|
169
196
|
|
|
@@ -228,7 +255,7 @@ After installation:
|
|
|
228
255
|
|
|
229
256
|
```bash
|
|
230
257
|
# 1. Clone to ~/.vesper
|
|
231
|
-
git clone https://github.com/fitz2882/vesper.git ~/.vesper
|
|
258
|
+
git clone https://github.com/fitz2882/vesper-memory.git ~/.vesper
|
|
232
259
|
cd ~/.vesper
|
|
233
260
|
|
|
234
261
|
# 2. Install and build
|
|
@@ -248,6 +275,52 @@ claude mcp add vesper --transport stdio --scope user -- node ~/.vesper/dist/serv
|
|
|
248
275
|
# 6. Restart Claude Code
|
|
249
276
|
```
|
|
250
277
|
|
|
278
|
+
### Development Setup (For Vesper Contributors)
|
|
279
|
+
|
|
280
|
+
If you're developing Vesper itself, you need a different MCP configuration to use your local development build:
|
|
281
|
+
|
|
282
|
+
**Two MCP Instances**:
|
|
283
|
+
- **vesper-personal** (`~/.claude/mcp_config.json`): For using Vesper across all projects
|
|
284
|
+
- Uses: `vesper-server` command (globally installed)
|
|
285
|
+
- Update with: `npm run build:global`
|
|
286
|
+
|
|
287
|
+
- **vesper-dev** (`.claude/mcp_config.json`): For developing Vesper
|
|
288
|
+
- Uses: `node dist/server.js` (local development build)
|
|
289
|
+
- Update with: `npm run build`
|
|
290
|
+
|
|
291
|
+
**Local Development MCP Config** (`.claude/mcp_config.json`):
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"mcpServers": {
|
|
295
|
+
"vesper-dev": {
|
|
296
|
+
"command": "node",
|
|
297
|
+
"args": ["/path/to/vesper/dist/server.js"],
|
|
298
|
+
"env": {
|
|
299
|
+
"REDIS_PORT": "6380",
|
|
300
|
+
"QDRANT_URL": "http://localhost:6334",
|
|
301
|
+
"SQLITE_DB": "~/.vesper-dev/data/memory.db",
|
|
302
|
+
"EMBEDDING_SERVICE_URL": "http://localhost:8001",
|
|
303
|
+
"NODE_ENV": "development"
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**Development Workflow**:
|
|
311
|
+
1. Make code changes
|
|
312
|
+
2. Run `npm run build` to rebuild
|
|
313
|
+
3. Reconnect MCP server with `/mcp` in Claude Code
|
|
314
|
+
4. Test your changes with the local build
|
|
315
|
+
|
|
316
|
+
**Automatic Docker Management**:
|
|
317
|
+
- Opening Vesper project → Starts `vesper-dev` containers (ports 6380, 6334, 8001)
|
|
318
|
+
- Opening other projects → Starts `vesper-personal` containers (ports 6379, 6333, 8000)
|
|
319
|
+
- Closing Claude Code → Stops running containers
|
|
320
|
+
- Only one instance runs at a time
|
|
321
|
+
|
|
322
|
+
**⚠️ Important**: When Claude Code first starts, you may need to manually reconnect to the MCP server using `/mcp` → "Reconnect" because Docker containers start before the MCP connects, which can cause improper configuration until reconnection.
|
|
323
|
+
|
|
251
324
|
---
|
|
252
325
|
|
|
253
326
|
## 🏗️ Architecture
|
|
@@ -312,6 +385,10 @@ Entity Prefs KG HippoRAG TimeRange Skills
|
|
|
312
385
|
|
|
313
386
|
## 🔧 MCP Tools
|
|
314
387
|
|
|
388
|
+
Vesper provides 13 MCP tools for memory management. All tools accept an optional `namespace` parameter (default: `"default"`) for multi-agent isolation:
|
|
389
|
+
|
|
390
|
+
### Core Memory Tools
|
|
391
|
+
|
|
315
392
|
### `store_memory`
|
|
316
393
|
Store a memory with automatic embedding generation.
|
|
317
394
|
|
|
@@ -319,6 +396,7 @@ Store a memory with automatic embedding generation.
|
|
|
319
396
|
{
|
|
320
397
|
"content": "User prefers Python over JavaScript for backend development",
|
|
321
398
|
"memory_type": "preference",
|
|
399
|
+
"namespace": "architect-agent",
|
|
322
400
|
"metadata": {
|
|
323
401
|
"confidence": 0.95,
|
|
324
402
|
"source": "conversation",
|
|
@@ -327,10 +405,17 @@ Store a memory with automatic embedding generation.
|
|
|
327
405
|
}
|
|
328
406
|
```
|
|
329
407
|
|
|
408
|
+
**v0.5.0 Fields**:
|
|
409
|
+
- `namespace` (optional): Isolate memories by agent/context (default: `"default"`)
|
|
410
|
+
- `agent_id` (optional): Track which agent stored this memory
|
|
411
|
+
- `agent_role` (optional): Role of the storing agent (e.g., `"code-reviewer"`)
|
|
412
|
+
- `task_id` (optional): Associate memory with a specific task
|
|
413
|
+
|
|
330
414
|
**Features**:
|
|
331
415
|
- Automatic BGE-large embedding generation
|
|
332
416
|
- Dual storage (SQLite metadata + Qdrant vectors)
|
|
333
417
|
- Working memory cache (7-day TTL)
|
|
418
|
+
- Namespace-scoped storage for multi-agent isolation
|
|
334
419
|
|
|
335
420
|
### `retrieve_memory`
|
|
336
421
|
Query with smart routing and semantic search.
|
|
@@ -338,10 +423,17 @@ Query with smart routing and semantic search.
|
|
|
338
423
|
```json
|
|
339
424
|
{
|
|
340
425
|
"query": "What programming language does the user prefer for backend?",
|
|
426
|
+
"namespace": "architect-agent",
|
|
341
427
|
"max_results": 5
|
|
342
428
|
}
|
|
343
429
|
```
|
|
344
430
|
|
|
431
|
+
**v0.5.0 Filters**:
|
|
432
|
+
- `namespace` (optional): Search within a specific namespace (default: `"default"`)
|
|
433
|
+
- `agent_id` (optional): Filter to memories from a specific agent
|
|
434
|
+
- `task_id` (optional): Filter to memories from a specific task
|
|
435
|
+
- `exclude_agent` (optional): Exclude memories from a specific agent
|
|
436
|
+
|
|
345
437
|
**Routing Strategies**:
|
|
346
438
|
- `semantic`: BGE-large semantic search (default)
|
|
347
439
|
- `fast_path`: Working memory only (planned)
|
|
@@ -394,11 +486,198 @@ System metrics and health status.
|
|
|
394
486
|
"facts": 9012
|
|
395
487
|
},
|
|
396
488
|
"skills": { "total": 42, "avg_success_rate": 0.85 },
|
|
397
|
-
"performance": { "p50_ms":
|
|
489
|
+
"performance": { "p50_ms": 0.2, "p95_ms": 0.4, "p99_ms": 0.6 },
|
|
398
490
|
"health": "healthy"
|
|
399
491
|
}
|
|
400
492
|
```
|
|
401
493
|
|
|
494
|
+
### System Control Tools
|
|
495
|
+
|
|
496
|
+
### `vesper_enable` / `vesper_disable` / `vesper_status`
|
|
497
|
+
Control Vesper system state for A/B benchmarking.
|
|
498
|
+
|
|
499
|
+
```json
|
|
500
|
+
// Enable Vesper
|
|
501
|
+
{ "tool": "vesper_enable" }
|
|
502
|
+
|
|
503
|
+
// Check status
|
|
504
|
+
{ "tool": "vesper_status" }
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### Skill Management Tools
|
|
508
|
+
|
|
509
|
+
### `load_skill`
|
|
510
|
+
Load full skill description on-demand (lazy loading).
|
|
511
|
+
|
|
512
|
+
```json
|
|
513
|
+
{
|
|
514
|
+
"skill_id": "skill-12345"
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
**Response**:
|
|
519
|
+
```json
|
|
520
|
+
{
|
|
521
|
+
"success": true,
|
|
522
|
+
"skill": {
|
|
523
|
+
"id": "skill-12345",
|
|
524
|
+
"name": "analyzeDataForUser",
|
|
525
|
+
"summary": "Analyze datasets with Python/Plotly",
|
|
526
|
+
"description": "Full skill description with execution details...",
|
|
527
|
+
"code": "def analyze_data():\n # Implementation...",
|
|
528
|
+
"metadata": { "success_rate": 0.92, "last_used": "2026-02-05" }
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
### `record_skill_outcome`
|
|
534
|
+
Track skill execution success/failure for continuous learning.
|
|
535
|
+
|
|
536
|
+
```json
|
|
537
|
+
{
|
|
538
|
+
"skill_id": "skill-12345",
|
|
539
|
+
"outcome": "success",
|
|
540
|
+
"satisfaction": 0.95
|
|
541
|
+
}
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### Multi-Agent Tools (v0.5.0)
|
|
545
|
+
|
|
546
|
+
### `share_context`
|
|
547
|
+
Copy memories between namespaces with handoff tracking. Useful for passing context between specialist agents.
|
|
548
|
+
|
|
549
|
+
```json
|
|
550
|
+
{
|
|
551
|
+
"source_namespace": "researcher",
|
|
552
|
+
"target_namespace": "implementer",
|
|
553
|
+
"task_id": "task-456",
|
|
554
|
+
"summary": "Research findings on auth patterns",
|
|
555
|
+
"max_memories": 10
|
|
556
|
+
}
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
**Features**:
|
|
560
|
+
- Copies relevant memories (filtered by task_id or semantic search)
|
|
561
|
+
- Packages related entities and skills
|
|
562
|
+
- Stores a handoff event in the target namespace for traceability
|
|
563
|
+
|
|
564
|
+
### `store_decision`
|
|
565
|
+
Store architectural or project decisions with reduced temporal decay.
|
|
566
|
+
|
|
567
|
+
```json
|
|
568
|
+
{
|
|
569
|
+
"content": "Use PostgreSQL over MongoDB for transaction guarantees",
|
|
570
|
+
"namespace": "architect-agent",
|
|
571
|
+
"rationale": "Need ACID compliance for financial data",
|
|
572
|
+
"supersedes": "decision-old-123",
|
|
573
|
+
"metadata": {
|
|
574
|
+
"tags": ["database", "architecture"]
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
**Features**:
|
|
580
|
+
- Stored as `memory_type: "decision"` with `decay_factor: 0.25` (decisions persist 4x longer)
|
|
581
|
+
- Supersedes mechanism: new decisions can mark old ones as superseded
|
|
582
|
+
- Automatic conflict detection against existing decisions in the same namespace
|
|
583
|
+
|
|
584
|
+
### `list_namespaces`
|
|
585
|
+
Discover all namespaces with memory counts.
|
|
586
|
+
|
|
587
|
+
```json
|
|
588
|
+
{}
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
**Response**:
|
|
592
|
+
```json
|
|
593
|
+
{
|
|
594
|
+
"namespaces": [
|
|
595
|
+
{ "namespace": "default", "memory_count": 142 },
|
|
596
|
+
{ "namespace": "architect-agent", "memory_count": 38 },
|
|
597
|
+
{ "namespace": "code-reviewer", "memory_count": 25 }
|
|
598
|
+
],
|
|
599
|
+
"total_namespaces": 3
|
|
600
|
+
}
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### `namespace_stats`
|
|
604
|
+
Per-namespace breakdown of memories, entities, skills, and agents.
|
|
605
|
+
|
|
606
|
+
```json
|
|
607
|
+
{
|
|
608
|
+
"namespace": "architect-agent"
|
|
609
|
+
}
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
**Response**:
|
|
613
|
+
```json
|
|
614
|
+
{
|
|
615
|
+
"namespace": "architect-agent",
|
|
616
|
+
"memories": 38,
|
|
617
|
+
"decisions": 12,
|
|
618
|
+
"entities": 85,
|
|
619
|
+
"relationships": 134,
|
|
620
|
+
"skills": 5,
|
|
621
|
+
"agents": ["architect-v1", "architect-v2"],
|
|
622
|
+
"last_activity": "2026-02-06T10:30:00Z"
|
|
623
|
+
}
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
---
|
|
627
|
+
|
|
628
|
+
## 🎯 Personalizing Memory Storage
|
|
629
|
+
|
|
630
|
+
Vesper doesn't automatically store every detail - Claude Code decides when to use the `store_memory` tool based on conversation context and user instructions.
|
|
631
|
+
|
|
632
|
+
### Controlling When Memories Are Stored
|
|
633
|
+
|
|
634
|
+
You can customize when Vesper stores memories by creating rules in `~/.claude/rules/vesper.md`. This allows you to:
|
|
635
|
+
|
|
636
|
+
- Define what types of information to remember (preferences, decisions, learning moments)
|
|
637
|
+
- Set the proactivity level (conservative, balanced, aggressive)
|
|
638
|
+
- Provide examples of what to store vs. skip
|
|
639
|
+
- Guide Claude's judgment on what's memorable vs. noise
|
|
640
|
+
|
|
641
|
+
**Example rule file** (`~/.claude/rules/vesper.md`):
|
|
642
|
+
```markdown
|
|
643
|
+
# Vesper Memory Storage Guidelines
|
|
644
|
+
|
|
645
|
+
## When to Store Memories
|
|
646
|
+
|
|
647
|
+
Store meaningful information that would help in future conversations:
|
|
648
|
+
- User preferences and workflow choices
|
|
649
|
+
- Important project decisions and rationale
|
|
650
|
+
- Learning moments (bugs fixed, patterns discovered)
|
|
651
|
+
- Context about projects and goals
|
|
652
|
+
|
|
653
|
+
## When NOT to Store
|
|
654
|
+
|
|
655
|
+
Skip trivial details:
|
|
656
|
+
- Temporary session information
|
|
657
|
+
- Obvious programming knowledge
|
|
658
|
+
- Every minor code change
|
|
659
|
+
- Information likely to change frequently
|
|
660
|
+
|
|
661
|
+
Use judgment - quality over quantity.
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
### Manual Storage
|
|
665
|
+
|
|
666
|
+
You can always explicitly ask Claude to store memories:
|
|
667
|
+
```
|
|
668
|
+
"Remember that I prefer TypeScript over JavaScript"
|
|
669
|
+
"Store this decision: we chose PostgreSQL for transaction support"
|
|
670
|
+
"Save this learning: race conditions fixed with mutex pattern"
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
### Memory Types
|
|
674
|
+
|
|
675
|
+
- **`episodic`**: Specific events, conversations, problem-solving instances
|
|
676
|
+
- **`semantic`**: Facts, preferences, knowledge, decisions
|
|
677
|
+
- **`procedural`**: Skills, patterns, how-to knowledge
|
|
678
|
+
|
|
679
|
+
See the [example rules file](https://github.com/fitzypop/vesper/blob/main/.claude/rules/vesper.md) for detailed guidance.
|
|
680
|
+
|
|
402
681
|
---
|
|
403
682
|
|
|
404
683
|
## 📦 Infrastructure
|
|
@@ -436,7 +715,9 @@ vesper/
|
|
|
436
715
|
│ │ ├── semantic-memory.ts # SQLite + HippoRAG
|
|
437
716
|
│ │ └── skill-library.ts # Procedural memory
|
|
438
717
|
│ ├── consolidation/
|
|
439
|
-
│ │ └── pipeline.ts #
|
|
718
|
+
│ │ └── pipeline.ts # Startup consolidation
|
|
719
|
+
│ ├── scheduler/
|
|
720
|
+
│ │ └── consolidation-scheduler.ts # 3 AM backup scheduler
|
|
440
721
|
│ ├── synthesis/
|
|
441
722
|
│ │ └── conflict-detector.ts # Conflict detection
|
|
442
723
|
│ └── utils/
|
|
@@ -463,7 +744,7 @@ vesper/
|
|
|
463
744
|
|
|
464
745
|
## 🧪 Test Coverage
|
|
465
746
|
|
|
466
|
-
**Overall**:
|
|
747
|
+
**Overall**: 789/789 tests passing (100%)
|
|
467
748
|
|
|
468
749
|
| Category | Tests | Status |
|
|
469
750
|
|----------|-------|--------|
|
|
@@ -483,7 +764,11 @@ vesper/
|
|
|
483
764
|
| Report Generator | 26 | ✅ PASS |
|
|
484
765
|
| Server Toggle | 14 | ✅ PASS |
|
|
485
766
|
| Scientific Integration | 19 | ✅ PASS |
|
|
486
|
-
| **
|
|
767
|
+
| **v0.4.0 Features** | | |
|
|
768
|
+
| Lazy Loading | 42 | ✅ PASS |
|
|
769
|
+
| Relational Embeddings | 38 | ✅ PASS |
|
|
770
|
+
| Security Hardening | 27 | ✅ PASS |
|
|
771
|
+
| **Integration & Other** | 249 | ✅ PASS |
|
|
487
772
|
|
|
488
773
|
### Running Tests
|
|
489
774
|
|
|
@@ -532,6 +817,21 @@ LOG_LEVEL=info
|
|
|
532
817
|
|
|
533
818
|
## 🔧 Troubleshooting
|
|
534
819
|
|
|
820
|
+
### MCP Connection Issues After Startup
|
|
821
|
+
|
|
822
|
+
**Symptom**: Vesper tools don't work immediately after Claude Code starts, or you see connection errors.
|
|
823
|
+
|
|
824
|
+
**Cause**: Docker containers start before the MCP server connects, causing initialization timing issues.
|
|
825
|
+
|
|
826
|
+
**Solution**: Manually reconnect to the MCP server:
|
|
827
|
+
|
|
828
|
+
1. Run `/mcp` in Claude Code
|
|
829
|
+
2. Find the active Vesper instance (vesper-dev or vesper-personal)
|
|
830
|
+
3. Click "Reconnect" on the MCP server
|
|
831
|
+
4. Test with `get_stats` or `list_recent` tool
|
|
832
|
+
|
|
833
|
+
This ensures the MCP server properly connects to the Docker services that are already running.
|
|
834
|
+
|
|
535
835
|
### Vesper Not Showing Up in Claude Code
|
|
536
836
|
|
|
537
837
|
**Symptom**: After installation, Vesper tools don't appear in Claude Code.
|
|
@@ -599,17 +899,18 @@ curl http://localhost:6333/collections/memory-vectors
|
|
|
599
899
|
|
|
600
900
|
## 🎯 Design Philosophy
|
|
601
901
|
|
|
602
|
-
**
|
|
902
|
+
**v0.4.0 Pragmatic Approach**:
|
|
603
903
|
- ✅ Simple solutions over complex architectures
|
|
604
904
|
- ✅ Honest uncertainty over auto-resolved conflicts
|
|
605
|
-
- ✅ Fast local operation
|
|
606
|
-
- ✅ Comprehensive testing
|
|
905
|
+
- ✅ Fast local operation (<1ms P95 latency)
|
|
906
|
+
- ✅ Comprehensive testing (789 tests, 100% coverage)
|
|
607
907
|
|
|
608
908
|
**What makes this special**:
|
|
609
|
-
- Three-layer memory architecture
|
|
610
|
-
- Intelligent retrieval (semantic search + graph traversal)
|
|
611
|
-
-
|
|
612
|
-
-
|
|
909
|
+
- Three-layer memory architecture with lazy loading
|
|
910
|
+
- Intelligent retrieval (semantic search + graph traversal + relational embeddings)
|
|
911
|
+
- 90% token efficiency gain (50 tokens vs 500 per skill)
|
|
912
|
+
- Word2Vec-inspired analogical reasoning
|
|
913
|
+
- Sub-millisecond P95 latency (0.4ms)
|
|
613
914
|
- Simple local setup
|
|
614
915
|
|
|
615
916
|
**What we're NOT building**:
|
|
@@ -654,6 +955,103 @@ This was a collaborative exploration—David provided the vision and infrastruct
|
|
|
654
955
|
|
|
655
956
|
---
|
|
656
957
|
|
|
958
|
+
## 📚 Research & Credits
|
|
959
|
+
|
|
960
|
+
Vesper is built on foundational research in neuroscience, information retrieval, and natural language processing. We are deeply grateful to the researchers whose work made this project possible.
|
|
961
|
+
|
|
962
|
+
### Core Memory Architecture
|
|
963
|
+
|
|
964
|
+
**HippoRAG: Neurobiologically Inspired Long-Term Memory**
|
|
965
|
+
- [HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models](https://arxiv.org/abs/2405.14831) - NeurIPS 2024
|
|
966
|
+
- Authors: Bernal Jiménez Gutiérrez, Yiheng Shu, Yu Su (OSU-NLP-Group)
|
|
967
|
+
- Vesper's semantic memory layer uses HippoRAG's knowledge graph architecture with Personalized PageRank for multi-hop reasoning
|
|
968
|
+
- Performance: 20% improvement in multi-hop question answering vs. traditional RAG
|
|
969
|
+
- [GitHub Implementation](https://github.com/OSU-NLP-Group/HippoRAG)
|
|
970
|
+
|
|
971
|
+
**Hippocampal Indexing Theory**
|
|
972
|
+
- [The hippocampal indexing theory and episodic memory: updating the index](https://onlinelibrary.wiley.com/doi/10.1002/hipo.20350) - Hippocampus, 2007
|
|
973
|
+
- Authors: Lynn Nadel, Arthur Moscovitch, Morris Moscovitch
|
|
974
|
+
- Original theory: [The Hippocampal Memory Indexing Theory](https://pubmed.ncbi.nlm.nih.gov/3008780/) - Teyler & DiScenna, 1986
|
|
975
|
+
- Inspired Vesper's three-layer memory architecture (working, semantic, procedural) and consolidation pipeline
|
|
976
|
+
- Core concept: Hippocampus serves as an index to neocortical activity patterns for memory retrieval
|
|
977
|
+
|
|
978
|
+
### Embeddings & Semantic Search
|
|
979
|
+
|
|
980
|
+
**BGE Embeddings (BAAI General Embedding)**
|
|
981
|
+
- [BAAI/bge-large-en-v1.5](https://huggingface.co/BAAI/bge-large-en-v1.5) - Hugging Face Model Card
|
|
982
|
+
- Developed by: Beijing Academy of Artificial Intelligence (BAAI)
|
|
983
|
+
- [FlagEmbedding Repository](https://github.com/FlagOpen/FlagEmbedding)
|
|
984
|
+
- Vesper uses BGE-large-en-v1.5 for 1024-dimensional semantic embeddings
|
|
985
|
+
- Trained with contrastive learning on large-scale pairs data using RetroMAE
|
|
986
|
+
|
|
987
|
+
**Word2Vec and Analogical Reasoning**
|
|
988
|
+
- [Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/abs/1301.3781) - arXiv:1301.3781, 2013
|
|
989
|
+
- Authors: Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean (Google)
|
|
990
|
+
- Foundational work demonstrating vector space arithmetic for semantic relationships
|
|
991
|
+
- Inspired Vesper's embedding-based memory retrieval and relationship modeling
|
|
992
|
+
|
|
993
|
+
### Retrieval & Fusion
|
|
994
|
+
|
|
995
|
+
**Reciprocal Rank Fusion (RRF)**
|
|
996
|
+
- [Reciprocal rank fusion outperforms condorcet and individual rank learning methods](https://dl.acm.org/doi/10.1145/1571941.1572114) - SIGIR 2009
|
|
997
|
+
- Authors: Gordon V. Cormack, Charles L. A. Clarke, Stefan Buettcher (University of Waterloo)
|
|
998
|
+
- [Direct PDF](https://cormack.uwaterloo.ca/cormacksigir09-rrf.pdf)
|
|
999
|
+
- Vesper uses RRF to combine dense embeddings, sparse vectors, and BM25 results
|
|
1000
|
+
- Simple, effective fusion algorithm that consistently outperforms individual retrieval methods
|
|
1001
|
+
|
|
1002
|
+
### Skill Learning & Procedural Memory
|
|
1003
|
+
|
|
1004
|
+
**Voyager: Open-Ended Embodied Agent**
|
|
1005
|
+
- [Voyager: An Open-Ended Embodied Agent with Large Language Models](https://arxiv.org/abs/2305.16291) - arXiv:2305.16291, 2023
|
|
1006
|
+
- Authors: Guanzhi Wang, Yuqi Xie, Yunfan Jiang, et al. (NVIDIA, Caltech, UT Austin, Stanford)
|
|
1007
|
+
- [Project Website](https://voyager.minedojo.org/) | [GitHub](https://github.com/MineDojo/Voyager)
|
|
1008
|
+
- Vesper's Skill Library implements Voyager-style skill extraction and storage
|
|
1009
|
+
- Key insight: Store executable code patterns with success/failure tracking for continuous learning
|
|
1010
|
+
|
|
1011
|
+
### Memory Systems & Neuroscience
|
|
1012
|
+
|
|
1013
|
+
**Three-Layer Memory Architecture**
|
|
1014
|
+
- [From Human Memory to AI Memory: A Survey on Memory Mechanisms in the Era of LLMs](https://arxiv.org/abs/2504.15965) - arXiv:2504.15965
|
|
1015
|
+
- Comprehensive survey on memory mechanisms in LLM-based systems
|
|
1016
|
+
- Vesper's architecture maps to human memory systems: working memory (prefrontal cortex), semantic memory (neocortex), procedural memory (cerebellum)
|
|
1017
|
+
|
|
1018
|
+
**Temporal Decay and Memory Consolidation**
|
|
1019
|
+
- Exponential decay with 30-day half-life: `strength *= e^(-days/30)`
|
|
1020
|
+
- Inspired by neuroscience research on memory consolidation and forgetting curves
|
|
1021
|
+
- Memories are reinforced on access, mimicking human memory strengthening
|
|
1022
|
+
|
|
1023
|
+
### Infrastructure & Tools
|
|
1024
|
+
|
|
1025
|
+
**Qdrant Vector Database**
|
|
1026
|
+
- [Qdrant](https://qdrant.tech/) - High-performance vector similarity search engine
|
|
1027
|
+
- Used for storing and retrieving 1024-dimensional BGE embeddings
|
|
1028
|
+
- Supports hybrid search with dense and sparse vectors
|
|
1029
|
+
|
|
1030
|
+
**SQLite FTS5**
|
|
1031
|
+
- [SQLite Full-Text Search](https://www.sqlite.org/fts5.html)
|
|
1032
|
+
- Used for BM25 full-text search as fallback retrieval strategy
|
|
1033
|
+
- Knowledge graph storage with ACID guarantees
|
|
1034
|
+
|
|
1035
|
+
**Redis**
|
|
1036
|
+
- [Redis](https://redis.io/) - In-memory data structure store
|
|
1037
|
+
- Working memory cache with 7-day TTL
|
|
1038
|
+
- Sub-5ms retrieval for recent conversations
|
|
1039
|
+
|
|
1040
|
+
---
|
|
1041
|
+
|
|
1042
|
+
### Acknowledgments
|
|
1043
|
+
|
|
1044
|
+
This project stands on the shoulders of giants. We are grateful to:
|
|
1045
|
+
|
|
1046
|
+
- The **OSU NLP Group** for open-sourcing HippoRAG and demonstrating how neuroscience can inspire better AI systems
|
|
1047
|
+
- **BAAI (Beijing Academy of Artificial Intelligence)** for releasing world-class open-source embedding models
|
|
1048
|
+
- The neuroscience community for decades of research into human memory that guided our architecture
|
|
1049
|
+
- All the open-source contributors to Qdrant, Redis, SQLite, and the broader ML/NLP ecosystem
|
|
1050
|
+
|
|
1051
|
+
**Research Philosophy**: We believe in transparency and building on solid scientific foundations. Every design decision in Vesper traces back to peer-reviewed research or established best practices. Where we simplified (e.g., choosing exponential decay over FSRS scheduling), we documented why.
|
|
1052
|
+
|
|
1053
|
+
---
|
|
1054
|
+
|
|
657
1055
|
**Built with**: TypeScript, Redis, SQLite, Qdrant, BGE-large
|
|
658
1056
|
|
|
659
1057
|
**Status**: Simple, Local, Ready to Use
|
|
@@ -661,5 +1059,5 @@ This was a collaborative exploration—David provided the vision and infrastruct
|
|
|
661
1059
|
---
|
|
662
1060
|
|
|
663
1061
|
**Questions? Issues? Ideas?**
|
|
664
|
-
Open an issue: https://github.com/fitz2882/vesper/issues
|
|
1062
|
+
Open an issue: https://github.com/fitz2882/vesper-memory/issues
|
|
665
1063
|
We'd love to hear how you're using Vesper!
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
-- Migration: Add summary field to skills table for lazy loading
|
|
2
|
+
-- Purpose: Enable token-efficient skill context injection
|
|
3
|
+
--
|
|
4
|
+
-- Changes:
|
|
5
|
+
-- 1. Add 'summary' column for lightweight skill descriptions (~20 words)
|
|
6
|
+
-- 2. Add 'is_archived' column to support soft deletion
|
|
7
|
+
-- 3. Add 'last_used' timestamp for tracking recent skill usage
|
|
8
|
+
-- 4. Add 'created_at' and 'last_modified' timestamps if not exists
|
|
9
|
+
-- 5. Add 'version' for skill versioning
|
|
10
|
+
-- 6. Add 'code', 'code_type', 'prerequisites', 'uses_skills', 'used_by_skills', 'created_from', 'notes'
|
|
11
|
+
--
|
|
12
|
+
-- Rollback: Run 001_rollback_skill_summary.sql
|
|
13
|
+
|
|
14
|
+
-- Add new columns to skills table (SQLite doesn't support multiple columns in one ALTER)
|
|
15
|
+
-- Using IF NOT EXISTS pattern for idempotency
|
|
16
|
+
|
|
17
|
+
-- Add summary column (lightweight description for context injection)
|
|
18
|
+
ALTER TABLE skills ADD COLUMN summary TEXT;
|
|
19
|
+
|
|
20
|
+
-- Add archival flag (for soft deletion)
|
|
21
|
+
ALTER TABLE skills ADD COLUMN is_archived INTEGER DEFAULT 0;
|
|
22
|
+
|
|
23
|
+
-- Add timestamps
|
|
24
|
+
ALTER TABLE skills ADD COLUMN last_used TEXT;
|
|
25
|
+
ALTER TABLE skills ADD COLUMN created_at TEXT DEFAULT CURRENT_TIMESTAMP;
|
|
26
|
+
ALTER TABLE skills ADD COLUMN last_modified TEXT DEFAULT CURRENT_TIMESTAMP;
|
|
27
|
+
|
|
28
|
+
-- Add versioning
|
|
29
|
+
ALTER TABLE skills ADD COLUMN version INTEGER DEFAULT 1;
|
|
30
|
+
|
|
31
|
+
-- Add extended skill information
|
|
32
|
+
ALTER TABLE skills ADD COLUMN code TEXT;
|
|
33
|
+
ALTER TABLE skills ADD COLUMN code_type TEXT DEFAULT 'reference';
|
|
34
|
+
ALTER TABLE skills ADD COLUMN prerequisites TEXT; -- JSON array
|
|
35
|
+
ALTER TABLE skills ADD COLUMN uses_skills TEXT; -- JSON array of skill IDs
|
|
36
|
+
ALTER TABLE skills ADD COLUMN used_by_skills TEXT; -- JSON array of skill IDs
|
|
37
|
+
ALTER TABLE skills ADD COLUMN created_from TEXT; -- Conversation ID
|
|
38
|
+
ALTER TABLE skills ADD COLUMN notes TEXT;
|
|
39
|
+
|
|
40
|
+
-- Create index for lazy loading queries (archived flag + quality score)
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_skills_lazy_loading
|
|
42
|
+
ON skills(is_archived, avg_user_satisfaction DESC, success_count DESC);
|
|
43
|
+
|
|
44
|
+
-- Create index for last_used queries (finding recently used skills)
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_skills_last_used
|
|
46
|
+
ON skills(last_used DESC)
|
|
47
|
+
WHERE is_archived = 0 AND last_used IS NOT NULL;
|
|
48
|
+
|
|
49
|
+
-- Create index for category-based summaries
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_skills_category_quality
|
|
51
|
+
ON skills(category, avg_user_satisfaction DESC, success_count DESC)
|
|
52
|
+
WHERE is_archived = 0;
|
|
53
|
+
|
|
54
|
+
-- Update existing skills with auto-generated summaries
|
|
55
|
+
-- (Take first sentence of description, max 100 chars)
|
|
56
|
+
UPDATE skills
|
|
57
|
+
SET summary = CASE
|
|
58
|
+
WHEN length(description) <= 100 THEN description
|
|
59
|
+
ELSE substr(description, 1, 97) || '...'
|
|
60
|
+
END
|
|
61
|
+
WHERE summary IS NULL;
|
|
62
|
+
|
|
63
|
+
-- Set default timestamps for existing skills
|
|
64
|
+
UPDATE skills
|
|
65
|
+
SET created_at = CURRENT_TIMESTAMP
|
|
66
|
+
WHERE created_at IS NULL;
|
|
67
|
+
|
|
68
|
+
UPDATE skills
|
|
69
|
+
SET last_modified = CURRENT_TIMESTAMP
|
|
70
|
+
WHERE last_modified IS NULL;
|
|
71
|
+
|
|
72
|
+
-- Update is_archived flag (default to 0 for existing skills)
|
|
73
|
+
UPDATE skills
|
|
74
|
+
SET is_archived = 0
|
|
75
|
+
WHERE is_archived IS NULL;
|