vesper-memory 0.4.0 → 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/CHANGELOG.md +57 -3
- package/LICENSE +59 -0
- package/README.md +420 -23
- 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 +0 -0
- 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 +879 -28
- 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/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 +6 -6
- package/embedding-service/README.md +8 -0
- package/package.json +4 -2
- package/scripts/FRESH_INSTALL.md +1 -1
- package/scripts/ensure-infrastructure.sh +86 -26
- 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
|
@@ -8,12 +8,38 @@ Simple, local memory system for Claude Code. No authentication, no complexity -
|
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/vesper-memory)
|
|
10
10
|
[](https://www.npmjs.com/package/vesper-memory)
|
|
11
|
-
[](.)
|
|
12
12
|
[](.)
|
|
13
13
|
[](.)
|
|
14
14
|
|
|
15
15
|
---
|
|
16
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
|
+
|
|
17
43
|
## 📊 Performance & Benchmarks
|
|
18
44
|
|
|
19
45
|
Vesper has been scientifically validated with comprehensive benchmarks measuring both **performance overhead** and **real-world value**.
|
|
@@ -23,7 +49,7 @@ Vesper has been scientifically validated with comprehensive benchmarks measuring
|
|
|
23
49
|
| Benchmark | Purpose | Key Metric | Result |
|
|
24
50
|
|-----------|---------|------------|--------|
|
|
25
51
|
| **Accuracy** | Measures VALUE (answer quality) | F1 Score | **98.5%** 🎯 |
|
|
26
|
-
| **Latency** | Measures COST (overhead) | P95 Latency | **
|
|
52
|
+
| **Latency** | Measures COST (overhead) | P95 Latency | **0.4ms** ⚡ |
|
|
27
53
|
|
|
28
54
|
### Accuracy Benchmark Results ⭐
|
|
29
55
|
|
|
@@ -51,14 +77,14 @@ Vesper has been scientifically validated with comprehensive benchmarks measuring
|
|
|
51
77
|
|
|
52
78
|
**What it measures:** Performance overhead of memory operations.
|
|
53
79
|
|
|
54
|
-
| Metric |
|
|
55
|
-
|
|
56
|
-
| **P50 Latency** | 4.
|
|
57
|
-
| **P95 Latency** |
|
|
58
|
-
| **P99 Latency** |
|
|
59
|
-
| **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** |
|
|
60
86
|
|
|
61
|
-
**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.
|
|
62
88
|
|
|
63
89
|
### Benchmark Methodology
|
|
64
90
|
|
|
@@ -164,7 +190,7 @@ When you say "analyze this dataset," I wouldn't just recall facts about you - I'
|
|
|
164
190
|
The final design is:
|
|
165
191
|
|
|
166
192
|
**Three memory layers:**
|
|
167
|
-
1. **Working Memory** (Redis) - last 5 conversations, ~
|
|
193
|
+
1. **Working Memory** (Redis) - last 5 conversations, ~5ms retrieval
|
|
168
194
|
2. **Semantic Memory** (HippoRAG + Qdrant) - knowledge graph with multi-hop reasoning
|
|
169
195
|
3. **Procedural Memory** (SQLite) - learned skills and workflows
|
|
170
196
|
|
|
@@ -229,7 +255,7 @@ After installation:
|
|
|
229
255
|
|
|
230
256
|
```bash
|
|
231
257
|
# 1. Clone to ~/.vesper
|
|
232
|
-
git clone https://github.com/fitz2882/vesper.git ~/.vesper
|
|
258
|
+
git clone https://github.com/fitz2882/vesper-memory.git ~/.vesper
|
|
233
259
|
cd ~/.vesper
|
|
234
260
|
|
|
235
261
|
# 2. Install and build
|
|
@@ -249,6 +275,52 @@ claude mcp add vesper --transport stdio --scope user -- node ~/.vesper/dist/serv
|
|
|
249
275
|
# 6. Restart Claude Code
|
|
250
276
|
```
|
|
251
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
|
+
|
|
252
324
|
---
|
|
253
325
|
|
|
254
326
|
## 🏗️ Architecture
|
|
@@ -313,6 +385,10 @@ Entity Prefs KG HippoRAG TimeRange Skills
|
|
|
313
385
|
|
|
314
386
|
## 🔧 MCP Tools
|
|
315
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
|
+
|
|
316
392
|
### `store_memory`
|
|
317
393
|
Store a memory with automatic embedding generation.
|
|
318
394
|
|
|
@@ -320,6 +396,7 @@ Store a memory with automatic embedding generation.
|
|
|
320
396
|
{
|
|
321
397
|
"content": "User prefers Python over JavaScript for backend development",
|
|
322
398
|
"memory_type": "preference",
|
|
399
|
+
"namespace": "architect-agent",
|
|
323
400
|
"metadata": {
|
|
324
401
|
"confidence": 0.95,
|
|
325
402
|
"source": "conversation",
|
|
@@ -328,10 +405,17 @@ Store a memory with automatic embedding generation.
|
|
|
328
405
|
}
|
|
329
406
|
```
|
|
330
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
|
+
|
|
331
414
|
**Features**:
|
|
332
415
|
- Automatic BGE-large embedding generation
|
|
333
416
|
- Dual storage (SQLite metadata + Qdrant vectors)
|
|
334
417
|
- Working memory cache (7-day TTL)
|
|
418
|
+
- Namespace-scoped storage for multi-agent isolation
|
|
335
419
|
|
|
336
420
|
### `retrieve_memory`
|
|
337
421
|
Query with smart routing and semantic search.
|
|
@@ -339,10 +423,17 @@ Query with smart routing and semantic search.
|
|
|
339
423
|
```json
|
|
340
424
|
{
|
|
341
425
|
"query": "What programming language does the user prefer for backend?",
|
|
426
|
+
"namespace": "architect-agent",
|
|
342
427
|
"max_results": 5
|
|
343
428
|
}
|
|
344
429
|
```
|
|
345
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
|
+
|
|
346
437
|
**Routing Strategies**:
|
|
347
438
|
- `semantic`: BGE-large semantic search (default)
|
|
348
439
|
- `fast_path`: Working memory only (planned)
|
|
@@ -395,11 +486,198 @@ System metrics and health status.
|
|
|
395
486
|
"facts": 9012
|
|
396
487
|
},
|
|
397
488
|
"skills": { "total": 42, "avg_success_rate": 0.85 },
|
|
398
|
-
"performance": { "p50_ms":
|
|
489
|
+
"performance": { "p50_ms": 0.2, "p95_ms": 0.4, "p99_ms": 0.6 },
|
|
399
490
|
"health": "healthy"
|
|
400
491
|
}
|
|
401
492
|
```
|
|
402
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
|
+
|
|
403
681
|
---
|
|
404
682
|
|
|
405
683
|
## 📦 Infrastructure
|
|
@@ -437,7 +715,9 @@ vesper/
|
|
|
437
715
|
│ │ ├── semantic-memory.ts # SQLite + HippoRAG
|
|
438
716
|
│ │ └── skill-library.ts # Procedural memory
|
|
439
717
|
│ ├── consolidation/
|
|
440
|
-
│ │ └── pipeline.ts #
|
|
718
|
+
│ │ └── pipeline.ts # Startup consolidation
|
|
719
|
+
│ ├── scheduler/
|
|
720
|
+
│ │ └── consolidation-scheduler.ts # 3 AM backup scheduler
|
|
441
721
|
│ ├── synthesis/
|
|
442
722
|
│ │ └── conflict-detector.ts # Conflict detection
|
|
443
723
|
│ └── utils/
|
|
@@ -464,7 +744,7 @@ vesper/
|
|
|
464
744
|
|
|
465
745
|
## 🧪 Test Coverage
|
|
466
746
|
|
|
467
|
-
**Overall**:
|
|
747
|
+
**Overall**: 789/789 tests passing (100%)
|
|
468
748
|
|
|
469
749
|
| Category | Tests | Status |
|
|
470
750
|
|----------|-------|--------|
|
|
@@ -484,7 +764,11 @@ vesper/
|
|
|
484
764
|
| Report Generator | 26 | ✅ PASS |
|
|
485
765
|
| Server Toggle | 14 | ✅ PASS |
|
|
486
766
|
| Scientific Integration | 19 | ✅ PASS |
|
|
487
|
-
| **
|
|
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 |
|
|
488
772
|
|
|
489
773
|
### Running Tests
|
|
490
774
|
|
|
@@ -533,6 +817,21 @@ LOG_LEVEL=info
|
|
|
533
817
|
|
|
534
818
|
## 🔧 Troubleshooting
|
|
535
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
|
+
|
|
536
835
|
### Vesper Not Showing Up in Claude Code
|
|
537
836
|
|
|
538
837
|
**Symptom**: After installation, Vesper tools don't appear in Claude Code.
|
|
@@ -600,17 +899,18 @@ curl http://localhost:6333/collections/memory-vectors
|
|
|
600
899
|
|
|
601
900
|
## 🎯 Design Philosophy
|
|
602
901
|
|
|
603
|
-
**
|
|
902
|
+
**v0.4.0 Pragmatic Approach**:
|
|
604
903
|
- ✅ Simple solutions over complex architectures
|
|
605
904
|
- ✅ Honest uncertainty over auto-resolved conflicts
|
|
606
|
-
- ✅ Fast local operation
|
|
607
|
-
- ✅ Comprehensive testing
|
|
905
|
+
- ✅ Fast local operation (<1ms P95 latency)
|
|
906
|
+
- ✅ Comprehensive testing (789 tests, 100% coverage)
|
|
608
907
|
|
|
609
908
|
**What makes this special**:
|
|
610
|
-
- Three-layer memory architecture
|
|
611
|
-
- Intelligent retrieval (semantic search + graph traversal)
|
|
612
|
-
-
|
|
613
|
-
-
|
|
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)
|
|
614
914
|
- Simple local setup
|
|
615
915
|
|
|
616
916
|
**What we're NOT building**:
|
|
@@ -655,6 +955,103 @@ This was a collaborative exploration—David provided the vision and infrastruct
|
|
|
655
955
|
|
|
656
956
|
---
|
|
657
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
|
+
|
|
658
1055
|
**Built with**: TypeScript, Redis, SQLite, Qdrant, BGE-large
|
|
659
1056
|
|
|
660
1057
|
**Status**: Simple, Local, Ready to Use
|
|
@@ -662,5 +1059,5 @@ This was a collaborative exploration—David provided the vision and infrastruct
|
|
|
662
1059
|
---
|
|
663
1060
|
|
|
664
1061
|
**Questions? Issues? Ideas?**
|
|
665
|
-
Open an issue: https://github.com/fitz2882/vesper/issues
|
|
1062
|
+
Open an issue: https://github.com/fitz2882/vesper-memory/issues
|
|
666
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;
|