2026-01-25 19:49:36 -06:00
# Vestige
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
**Memory that fades like yours does.**
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
The only MCP memory server built on cognitive science. FSRS-6 spaced repetition, spreading activation, synaptic tagging—all running 100% local.
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
[](https://github.com/samvallad33/vestige)
[](LICENSE)
[](https://modelcontextprotocol.io)
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
---
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
## Why Vestige?
| Problem | How Vestige Solves It |
|---------|----------------------|
| AI forgets everything between sessions | Persistent memory with intelligent retrieval |
| RAG dumps irrelevant context | **Prediction Error Gating** auto-decides CREATE/UPDATE/SUPERSEDE |
| Memory bloat eats your token budget | **FSRS-6 decay** naturally fades unused memories |
| No idea what AI "knows" | `recall` , `semantic_search` , `hybrid_search` let you query |
| Context pollution confuses the model | **29 atomic tools** > 1 overloaded tool with 15 parameters |
2026-01-25 01:31:03 -06:00
---
2026-01-25 19:49:36 -06:00
## Quick Start
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
### 1. Install
2026-01-25 01:31:03 -06:00
```bash
git clone https://github.com/samvallad33/vestige
cd vestige
2026-01-25 13:31:37 -06:00
cargo build --release
2026-01-25 19:49:36 -06:00
```
Add to your PATH:
```bash
# macOS/Linux
2026-01-25 13:31:37 -06:00
sudo cp target/release/vestige-mcp /usr/local/bin/
2026-01-25 19:49:36 -06:00
# Or add to ~/.bashrc / ~/.zshrc
export PATH="$PATH:/path/to/vestige/target/release"
2026-01-25 01:31:03 -06:00
```
2026-01-25 19:49:36 -06:00
### 2. Configure Claude
**Option A: One-liner (Recommended)**
```bash
claude mcp add vestige vestige-mcp
```
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
**Option B: Manual Config**
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
< details >
< summary > Claude Code (~/.claude/settings.json)< / summary >
2026-01-25 01:31:03 -06:00
2026-01-25 13:31:37 -06:00
```json
{
"mcpServers": {
"vestige": {
"command": "vestige-mcp"
}
}
}
2026-01-25 01:31:03 -06:00
```
2026-01-25 19:49:36 -06:00
< / details >
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
< details >
< summary > Claude Desktop (macOS)< / summary >
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` :
```json
{
"mcpServers": {
"vestige": {
"command": "vestige-mcp"
}
}
}
```
< / details >
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
< details >
< summary > Claude Desktop (Windows)< / summary >
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
Add to `%APPDATA%\Claude\claude_desktop_config.json` :
2026-01-25 01:31:03 -06:00
```json
{
"mcpServers": {
"vestige": {
2026-01-25 19:49:36 -06:00
"command": "vestige-mcp"
2026-01-25 01:31:03 -06:00
}
}
}
```
2026-01-25 19:49:36 -06:00
< / details >
### 3. Restart Claude
Restart Claude Code or Desktop. You should see **29 Vestige tools** available.
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
### 4. Test It
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
Ask Claude:
> "Remember that I prefer TypeScript over JavaScript"
Then in a new session:
> "What are my coding preferences?"
It remembers.
2026-01-25 01:31:03 -06:00
---
2026-01-25 19:49:36 -06:00
## Important Notes
### First-Run Network Requirement
Vestige downloads the **Nomic Embed Text v1.5** model (~130MB) from Hugging Face on first use for semantic search.
**All subsequent runs are fully offline.**
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
Model cache location:
- macOS/Linux: `~/.cache/huggingface/`
- Windows: `%USERPROFILE%\.cache\huggingface\`
### Data Storage & Backup
2026-01-25 20:00:51 -06:00
All memories are stored in a **single local SQLite file** :
2026-01-25 19:49:36 -06:00
| Platform | Database Location |
|----------|------------------|
| macOS | `~/Library/Application Support/com.vestige.core/vestige.db` |
| Linux | `~/.local/share/vestige/core/vestige.db` |
| Windows | `%APPDATA%\vestige\core\vestige.db` |
2026-01-25 20:00:51 -06:00
**⚠️ There is no cloud sync, no redundancy, and no automatic backup.**
2026-01-25 19:49:36 -06:00
2026-01-25 20:00:51 -06:00
If that file gets:
- Accidentally deleted
- Corrupted (disk failure, power loss mid-write)
- Lost (laptop stolen, hard drive dies)
...the memories are **gone** .
---
**For AI memory = Totally Fine**
If you lose your Claude memories, you just start over. Annoying but not catastrophic.
**For critical data = Not Fine**
Don't store medical records, financial transactions, or legal documents in Vestige.
---
**Backup Options:**
*Manual (one-time):*
2026-01-25 19:49:36 -06:00
```bash
# macOS
cp ~/Library/Application\ Support/com.vestige.core/vestige.db ~/vestige-backup.db
# Linux
cp ~/.local/share/vestige/core/vestige.db ~/vestige-backup.db
```
2026-01-25 20:00:51 -06:00
*Automated (cron job):*
```bash
# Add to crontab - backs up every hour
0 * * * * cp ~/Library/Application\ Support/com.vestige.core/vestige.db ~/.vestige-backups/vestige-$(date +\%Y\%m\%d-\%H\%M).db
```
*Or just use **Time Machine** (macOS) / **Windows Backup** / **rsync** — they'll catch the file automatically.*
> For personal use with Claude? Don't overthink it. The memories aren't that precious.
2026-01-25 01:31:03 -06:00
---
2026-01-25 13:31:37 -06:00
## All 29 Tools
2026-01-25 19:49:36 -06:00
### Core Memory
2026-01-25 13:31:37 -06:00
| Tool | Description |
|------|-------------|
2026-01-25 19:49:36 -06:00
| `ingest` | Add new knowledge to memory |
| `smart_ingest` | **Intelligent ingestion** with Prediction Error Gating—auto-decides CREATE/UPDATE/SUPERSEDE |
| `recall` | Search by keywords, ranked by retention strength |
| `semantic_search` | Find conceptually related content via embeddings |
| `hybrid_search` | Combined keyword + semantic with RRF fusion |
| `get_knowledge` | Retrieve specific memory by ID |
2026-01-25 13:31:37 -06:00
| `delete_knowledge` | Remove a memory |
2026-01-25 19:49:36 -06:00
| `mark_reviewed` | FSRS review with rating (1=Again, 2=Hard, 3=Good, 4=Easy) |
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
### Feedback System
2026-01-25 13:31:37 -06:00
| Tool | Description |
|------|-------------|
2026-01-25 19:49:36 -06:00
| `promote_memory` | Thumbs up—memory led to good outcome |
| `demote_memory` | Thumbs down—memory was wrong or unhelpful |
| `request_feedback` | Ask user if a memory was helpful |
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
### Stats & Maintenance
2026-01-25 13:31:37 -06:00
| Tool | Description |
|------|-------------|
2026-01-25 19:49:36 -06:00
| `get_stats` | Memory system statistics |
2026-01-25 13:31:37 -06:00
| `health_check` | System health status |
2026-01-25 19:49:36 -06:00
| `run_consolidation` | Trigger decay cycle, generate embeddings |
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
### Codebase Memory
2026-01-25 13:31:37 -06:00
| Tool | Description |
|------|-------------|
2026-01-25 19:49:36 -06:00
| `remember_pattern` | Save code patterns/conventions |
| `remember_decision` | Save architectural decisions with rationale |
| `get_codebase_context` | Retrieve patterns/decisions for current project |
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
### Prospective Memory (Intentions)
2026-01-25 13:31:37 -06:00
| Tool | Description |
|------|-------------|
2026-01-25 19:49:36 -06:00
| `set_intention` | "Remind me to X when Y" |
| `check_intentions` | Check triggered intentions for current context |
| `complete_intention` | Mark intention as fulfilled |
2026-01-25 13:31:37 -06:00
| `snooze_intention` | Delay an intention |
2026-01-25 19:49:36 -06:00
| `list_intentions` | View all intentions |
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
### Neuroscience Layer
2026-01-25 13:31:37 -06:00
| Tool | Description |
|------|-------------|
2026-01-25 19:49:36 -06:00
| `get_memory_state` | Check if memory is Active/Dormant/Silent/Unavailable |
| `list_by_state` | List memories grouped by cognitive state |
| `state_stats` | Distribution of memory states |
2026-01-25 13:31:37 -06:00
| `trigger_importance` | Retroactively strengthen recent memories (Synaptic Tagging) |
2026-01-25 19:49:36 -06:00
| `find_tagged` | Find high-retention memories |
2026-01-25 13:31:37 -06:00
| `tagging_stats` | Synaptic tagging statistics |
2026-01-25 19:49:36 -06:00
| `match_context` | Context-dependent retrieval (Encoding Specificity) |
2026-01-25 01:31:03 -06:00
2026-01-25 13:31:37 -06:00
---
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
## How It Works
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
### Prediction Error Gating
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
When you call `smart_ingest` , Vestige compares new content against existing memories:
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
| Similarity | Action | Why |
|------------|--------|-----|
| > 0.92 | **REINFORCE** existing | Almost identical—just strengthen |
| > 0.75 | **UPDATE** existing | Related—merge the information |
| < 0.75 | **CREATE** new | Novel — add as new memory |
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
This prevents duplicate memories and keeps your knowledge base clean.
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
### FSRS-6 Spaced Repetition
2026-01-25 01:31:03 -06:00
2026-01-25 20:29:37 -06:00
Memories decay over time following a **power law forgetting curve** (not exponential):
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
```
2026-01-25 20:29:37 -06:00
R(t, S) = (1 + factor × t / S)^(-w₂₀)
where factor = 0.9^(-1/w₂₀) - 1
2026-01-25 01:31:03 -06:00
```
2026-01-25 20:29:37 -06:00
- `R` = retrievability (probability of recall)
- `t` = time since last review
- `S` = stability (time for R to drop to 90%)
- `w₂₀` = personalized decay parameter (0.1-0.8)
2026-01-25 13:31:37 -06:00
2026-01-25 20:29:37 -06:00
FSRS-6 uses 21 parameters optimized on 700M+ Anki reviews—[30% more efficient than SM-2 ](https://github.com/open-spaced-repetition/srs-benchmark ).
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
### Memory States
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
Based on accessibility, memories exist in four states:
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
| State | Description |
|-------|-------------|
| **Active** | High retention, immediately retrievable |
| **Dormant** | Medium retention, retrievable with effort |
| **Silent** | Low retention, rarely surfaces |
| **Unavailable** | Below threshold, effectively forgotten |
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
---
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
## The Science
2026-01-25 13:31:37 -06:00
2026-01-25 20:29:37 -06:00
Vestige is **inspired by** memory research. Here's what's actually implemented:
2026-01-25 13:31:37 -06:00
2026-01-25 20:29:37 -06:00
| Feature | Research Basis | Implementation |
|---------|----------------|----------------|
| **Spaced repetition** | [FSRS-6 ](https://github.com/open-spaced-repetition/fsrs4anki ) | ✅ Fully implemented (21-parameter power law model) |
| **Context-dependent retrieval** | [Tulving & Thomson, 1973 ](https://psycnet.apa.org/record/1973-31800-001 ) | ✅ Fully implemented (temporal, topical, emotional context matching) |
| **Dual-strength model** | [Bjork & Bjork, 1992 ](https://bjorklab.psych.ucla.edu/wp-content/uploads/sites/13/2016/07/RBjork_EBjork_1992.pdf ) | ⚡ Simplified (storage + retrieval strength tracked separately) |
| **Retroactive importance** | [Frey & Morris, 1997 ](https://www.nature.com/articles/385533a0 ) | ⚡ Inspired (temporal window capture, not actual synaptic biochemistry) |
| **Memory states** | Multi-store memory models | ⚡ Heuristic (accessibility-based state machine) |
2026-01-25 13:31:37 -06:00
2026-01-25 20:29:37 -06:00
> **Transparency**: The ✅ features closely follow published algorithms. The ⚡ features are engineering heuristics *inspired by* the research—useful approximations, not literal neuroscience. We believe in honest marketing.
2026-01-25 01:31:03 -06:00
---
2026-01-25 13:31:37 -06:00
## Configuration
2026-01-25 19:49:36 -06:00
Environment variables:
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
| Variable | Default | Description |
|----------|---------|-------------|
| `VESTIGE_DATA_DIR` | Platform default | Custom database location |
| `VESTIGE_LOG_LEVEL` | `info` | Logging verbosity |
| `RUST_LOG` | - | Detailed tracing output |
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
Command-line options:
```bash
vestige-mcp --data-dir /custom/path
vestige-mcp --help
```
2026-01-25 01:31:03 -06:00
---
2026-01-25 19:49:36 -06:00
## Troubleshooting
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
### "Command not found" after installation
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
Make sure `vestige-mcp` is in your PATH:
```bash
which vestige-mcp
# Should output: /usr/local/bin/vestige-mcp
```
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
If not found:
2026-01-25 01:31:03 -06:00
```bash
2026-01-25 19:49:36 -06:00
# Use full path in Claude config
claude mcp add vestige /full/path/to/vestige-mcp
2026-01-25 01:31:03 -06:00
```
2026-01-25 19:49:36 -06:00
### Model download fails
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
First run requires internet to download the embedding model. If behind a proxy:
2026-01-25 01:31:03 -06:00
```bash
2026-01-25 19:49:36 -06:00
export HTTPS_PROXY=your-proxy:port
2026-01-25 01:31:03 -06:00
```
2026-01-25 19:49:36 -06:00
### "Tools not showing" in Claude
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
1. Check config file syntax (valid JSON)
2. Restart Claude completely (not just reload)
3. Check logs: `tail -f ~/.claude/logs/mcp.log`
### Database locked errors
Vestige uses SQLite with WAL mode. If you see lock errors:
2026-01-25 13:31:37 -06:00
```bash
2026-01-25 19:49:36 -06:00
# Only one instance should run at a time
pkill vestige-mcp
2026-01-25 13:31:37 -06:00
```
---
2026-01-25 19:49:36 -06:00
## Development
2026-01-25 13:31:37 -06:00
```bash
2026-01-25 19:49:36 -06:00
# Run tests
cargo test --all-features
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
# Run with logging
RUST_LOG=debug cargo run --release
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
# Build optimized binary
cargo build --release --all-features
```
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
---
2026-01-25 13:31:37 -06:00
2026-01-25 19:49:36 -06:00
## Updating
2026-01-25 13:31:37 -06:00
```bash
2026-01-25 19:49:36 -06:00
cd vestige
git pull
cargo build --release
2026-01-25 13:31:37 -06:00
sudo cp target/release/vestige-mcp /usr/local/bin/
```
2026-01-25 19:49:36 -06:00
Then restart Claude.
2026-01-25 13:31:37 -06:00
2026-01-25 01:31:03 -06:00
---
2026-01-25 19:49:36 -06:00
## License
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
MIT OR Apache-2.0 (dual-licensed)
2026-01-25 01:31:03 -06:00
---
2026-01-25 19:49:36 -06:00
## Contributing
2026-01-25 01:31:03 -06:00
2026-01-25 19:49:36 -06:00
Issues and PRs welcome! See [CONTRIBUTING.md ](CONTRIBUTING.md ).
2026-01-25 01:31:03 -06:00
---
< p align = "center" >
2026-01-25 19:49:36 -06:00
< i > Built by < a href = "https://github.com/samvallad33" > @samvallad33 </ a ></ i >
2026-01-25 01:31:03 -06:00
< / p >