by samvallad33
Vestige gives AI agents sharp memory: a local-first Rust MCP server that reaches backward through time to find the quiet change, decision, or service that caused today’s failure, not the lookalike.
# Add to your Claude Code skills
git clone https://github.com/samvallad33/vestigeLast scanned: 5/14/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-14T06:47:15.043Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}vestige is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by samvallad33. Vestige gives AI agents sharp memory: a local-first Rust MCP server that reaches backward through time to find the quiet change, decision, or service that caused today’s failure, not the lookalike. It has 583 GitHub stars.
Yes. vestige passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/samvallad33/vestige" and add it to your Claude Code skills directory (see the Installation section above).
vestige is primarily written in Rust. It is open-source under samvallad33 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh vestige against similar tools.
No comments yet. Be the first to share your thoughts!
Vestige is a local-first memory for AI agents that reaches backward through time to find the quiet change that caused today's failure: the cause that looks nothing like the bug. One 23MB Rust binary. No cloud. Your data never leaves your machine.
⚡ Quick Start · 🧠 The Idea · 🔬 The Science · 🛠 13 Tools · 📊 Dashboard
Hi, I'm Sam. I built Vestige from a tiny apartment in Chicago because I kept losing days to the same thing, and I bet you have too.
Production breaks. You start hunting. And the cause is almost never near the error. It's some quiet change you made days ago that looks nothing like the crash it eventually caused. A flipped env var. A swapped service. A config tweak you'd already forgotten.
Here's the part that took me a while to see: every AI memory tool is built on vector search, and vector search hunts for what looks like your problem. But a root cause never looks like the bug it creates. So they all search the goal line, while the real failure was a quiet midfield turnover fifteen minutes earlier.
I wanted a memory that traces the match backward.
So that's what Vestige is. Everyone else built a memory that remembers. I tried to build the first one that realizes: it gates what's worth keeping, lets the noise fade like your own memory does, and when a failure hits, it reaches back through time to the change that actually caused it.
It's one Rust binary. It runs entirely on your machine. It never phones home. And there's a 60-second start right below.
🎙️ The 60-second version of this whole story, the one I give in person, lives in
demo/PITCH-v2-causebench.md. If you've got a minute, read that first. It's the clearest way to get why this matters.
Step 1 — install (one binary, no Docker, no API key, no signup):
npm install -g vestige-mcp-server@latest
Step 2 — connect it to your agent. Vestige speaks MCP, so it works with any AI agent. The universal config (works everywhere):
{ "mcpServers": { "vestige": { "command": "vestige-mcp" } } }
Drop that into your agent's MCP config file. Or use the one-line shortcut for your agent:
# Cursor / Windsurf / VS Code → add the JSON above to ~/.cursor/mcp.json (or the editor's MCP settings)
# Claude Code → claude mcp add vestige vestige-mcp -s user
# Codex → codex mcp add vestige -- vestige-mcp
# Cline / Continue / Zed / Goose → add the JSON above to that client's MCP config
Step 3 — confirm it's working:
vestige-mcp --version # prints the installed version
vestige stats # prints your memory count (0 on a fresh install)
That's the whole install. New here? The 30-minute first-run guide walks you from install to your first backward-reach: what gets saved (and what doesn't), how to inspect your own memory, and how to scope it per project. Per-agent guides (Cursor, VS Code, Windsurf, JetBrains, Xcode, OpenCode, Codex, Claude Desktop) are here ↓.
Now talk to your agent like it has a memory, because now it does:
You: "Remember: we always disable SimSIMD on release builds, it breaks old x86 CPUs."
...days later, fresh session, zero context...
You: "Should I enable SimSIMD for the release?"
AI: ⚠️ Hold on, this contradicts a decision you stored: you chose to DISABLE it
because it breaks old x86 CPUs.
That last line isn't me being cute. It's a real status the engine returns, called claim_contradicts_memory. Most memory tools would have happily handed you the wrong answer. Vestige tells you when you're about to walk back into a mistake you already learned from.
And the headline feature, the one nothing else does, is one command:
vestige backfill --contrast
When a failure is in your memory, this reaches backward through time and finds the quiet earlier change that caused it (the one a vector search ranks poorly because it shares no words with the error). It shows you, side by side, what similarity search returns versus the real cause. More on the backward reach ↓
(Works with Codex, Cursor, VS Code, Claude Desktop, Windsurf, JetBrains, Zed: anything that speaks MCP. Full setup is here ↓.)
RAG is a bucket: throw everything in, hope nearest-neighbor finds it later. Vestige behaves more like an actual memory: it decides what's worth keeping, forgets what isn't, and reasons across what's left.
| 🪣 RAG / Vector Store | 🧠 Vestige | |
|---|---|---|
| What it stores | Everything you hand it | Only what's surprising or new (the rest gets merged or skipped) |
| What it forgets | Nothing; it just bloats | Unused memories fade on a real forgetting curve, so your context stays lean |
| Finding a root cause | Can't, because the cause isn't similar to the bug | Reaches backward in time to the change that caused it (the whole point ↓) |
| Catching contradictions | Silent; serves the stale answer with a straight face | Tells you: "this contradicts what you decided" |
| Duplicates | You clean them up by hand | Self-heals: "likes dark mode" + "prefers dark themes" quietly become one |
| Forgetting on demand | DELETE and it's gone | suppress gently inhibits a memory (and its neighbors), reversible for 24h |
| Where it lives | Usually someone else's cloud | Your machine. One binary. No telemetry. |
This is the part I'm proudest of, and it's worth one honest paragraph.
A bug shows up today. The cause was a quiet decision from three weeks ago, like a changed env var or a swapped service. That cause shares no words with the error it created. A vector search will never connect them, because it only knows how to find things that look alike, and this is a case where the cause and the symptom look nothing alike. This isn't a tuning problem; in 2026 Google DeepMind published a proof (arXiv:2508.21038, ICLR 2026) that single-vector retrieval is mathematically incapable of bridging gaps like this.
So Vestige doesn't do it with similarity. Its Retroactive Salience Backfill (ported from Zaki/Cai et al., 2024, Nature 637:145–155 (DOI), on how the brain links a shock to the quiet memory that caused it) reaches backward through time and promotes the dormant memory that's causally upstream: it shares an entity (the same file, env var, or service), not the same words.
I also built a benchmark to keep myself honest about it. Every pure vector retriever scored 0% recall@1 on the causal-gap task; Vestige scored 60%. (To be precise: the impossibility is DeepMind's theorem; the 0%-vs-60% is my measurement. Two different claims, and I keep them separate.)
vestige backfill --contrast # show the root cause a vector search would have missed
The nice part: it compounds. Every failure your agent records makes the next session diagnose faster (run two is smarter than run one), and it happens automatically during consolidation, so you don't have to babysit it.
All of this shipped in v2.2.0, along with a 34→13 tool consolidation and a rebuilt retrieval engine. Full release notes →
I get skeptical when projects wave the word "neuroscience" around, so here's my receipt: every mechanism below is a real, cited paper, implemented in Rust, running locally on your machine. None of it phones a model in the cloud to sound smart.
| Mechanism | What it does for you | Grounded in |
|---|---|---|
| Prediction-Error Gating | Redundant info gets merged, contradictory gets superseded, only the novel gets stored | The hippocampal novelty signal |
| FSRS-6 Spaced Repetition | 21 parameters of the mathematics of forgetting, so used memories stay and unused ones fade | Modern spaced-repetition research |
| Retroactive Salience Backfill | Backward causal reach to the root cause of a failure | Zaki/Cai et al. 2024, Nature 637:145–155 |
| Synaptic Tagging | A memory that looked trivial this morning can be tagged critical tonight | Frey & Morris 1997 |
| Spreading Activation | Search "auth bug," surface last week's JWT update, because memory is a graph, not a list | Collins & Loftus 1975 |
| Dual-Strength Model | Storage strength vs. retrieval strength, so deeply stored ≠ instantly recalled, just like you | Bjork & Bjork 1992 |
| *Memory Dreaming |