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 608 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!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Local-first long-term memory for AI agents, delivered over MCP. Vestige remembers your decisions, catches contradictions before they cost you, and traces a failure back to the older memory that actually caused it. One 25MB Rust binary. No cloud. Your data never leaves your machine.
What it is · Install · First interaction · vs RAG · Backward reach · Benchmark · Science · Tools · Receipts · Dashboard · Integrations · Pro · Docs
Hi, I'm Sam. I built Vestige because my agents kept re-learning the same lessons. They would recommend a change I had already tested and rejected, re-derive a fix that was already written down, and treat every session as if the last one never happened.
Vestige is the memory layer that fixes that. It runs locally as an MCP server, so any MCP-capable agent (Claude Code, Claude Desktop, Codex, Cursor, and others) can write memories during a session and retrieve them later. Your data lives in a SQLite file on your own machine. After a one-time model download it works fully offline, with no API keys and no telemetry.
The part that makes it more than a note store: Vestige models memory on real cognitive science. It merges what is redundant, supersedes what is contradicted, keeps what you actually use, and lets unused memories fade. Most importantly, when a failure hits it can reach backward to the earlier decision that caused it, even when the cause and the symptom share no vocabulary. The cause never looks like the bug.
Three steps. You need Node.js installed (for the npm command) and nothing else.
No Docker, no API key, no signup.
npm install -g vestige-mcp-server@latest
This installs the vestige-mcp command. Prebuilt binaries ship for macOS (Apple Silicon and Intel), Linux x86_64, and Windows x86_64, so there is no compile step.
If a global pnpm install skipped its postinstall hook, the command launcher retries the local binary installation on its first invocation. It reports that recovery on stderr, preserving MCP stdout for protocol messages.
Vestige speaks MCP, so it works with any MCP-capable agent. Every MCP client understands this config. Add it to your client's MCP settings:
{
"mcpServers": {
"vestige": {
"command": "vestige-mcp"
}
}
}
If you prefer the CLI, use the one-line shortcut for your agent:
| Agent | Setup |
|---|---|
| Claude Code | claude mcp add vestige vestige-mcp -s user |
| Codex | codex mcp add vestige -- vestige-mcp |
| Cursor / VS Code / Windsurf | add the JSON above to the editor's MCP settings, or see docs/integrations/ |
| Cline / Continue / Zed / Goose | add the JSON above to that client's MCP config |
| Claude Desktop | docs/CONFIGURATION.md#claude-desktop-macos |
On first run, Vestige downloads its embedding model once (about 130MB). After that it never needs the network again. To confirm the server is healthy, open the dashboard:
vestige dashboard
Then visit http://localhost:3927/dashboard. If you see the graph, you are connected. For a fuller walkthrough see docs/GETTING-STARTED.md.
Memories go in as you work. The interesting behavior shows up when a new claim conflicts with something you already stored.
Say your agent recorded this earlier:
We use Postgres for the primary datastore. Decided against MySQL for the JSONB support.
Later, someone tells the agent the opposite:
Our primary datastore is MySQL.
When the agent tries to store that, Vestige does not silently append it. The engine returns a claim_contradicts_memory status and surfaces the older, conflicting memory, so the agent can resolve the conflict instead of quietly holding two incompatible facts.
After a successful tool call, Vestige persists a retrieval receipt when that call has one, then records any Memory PR review evidence. That evidence is a post-commit record of the completed call; it is not a pre-execution block on the tool.
The other command you will reach for is backfill. When something breaks, run:
vestige backfill --contrast
This walks backward from the failure to the earlier memory that most plausibly caused it, and shows you the contrast between what you believed then and what went wrong now. That backward reach is the feature the rest of this README builds up to.
RAG retrieves text that resembles your query. That is the right tool when the answer looks like the question. It is the wrong tool when the cause of a problem looks nothing like the symptom.
| Plain RAG / vector search | Vestige | |
|---|---|---|
| Retrieval basis | Text similarity to the query | Causal and temporal links, plus similarity |
| Finding a root cause | Cannot, because the cause does not resemble the bug | Reaches backward to the root-cause memory |
| Contradictions | Stored side by side, both returned | Detected and flagged (claim_contradicts_memory) |
| Redundant writes | Accumulate as duplicates | Merged on write via prediction-error gating |
| Unused memories | Persist at full weight | Fade over time (FSRS-6 spaced repetition) |
| Where it runs | Usually a cloud service | Local single binary, offline after setup |
| Your data | Leaves your machine | Never leaves your machine |
The distinction is not marketing. DeepMind proved that single-vector retrieval is mathematically incapable of representing certain relevance patterns (arXiv:2508.21038, ICLR 2026). That theorem is about the limits of the vector-only approach. The measured gap on the task below is my own.
Most memory systems only look forward: you ask a question, they return similar text. Vestige also looks backward.
When a failure lands, the useful memory is rarely the one that resembles the error message. It is an older decision, made in different words, that set the failure up. A config choice from three weeks ago. A library pin. An assumption nobody wrote down as risky at the time.
Vestige implements Retroactive Salience Backfill (Zaki, Cai et al., Nature 2024, 637:145-155, DOI 10.1038/s41586-024-08168-4). When a memory turns out to matter, the system reaches backward and raises the salience of the earlier memories that led to it, so the causal chain becomes retrievable even though the surface text never matched.
In practice you run vestige backfill --contrast. Vestige returns the earlier memory that most plausibly caused the current failure, alongside the contradiction between then and now. It finds the cause you would not have thought to search for.
The claim above is testable, and the test ships with every transcript it produced.
Silent Rotation lives at benchmarks/silent-rotation/. Three coding agents fix one failing end-to-end test in a TypeScript monorepo. The fix needs the currently live signing key id, which is randomized per trial from a 50-key keyring and appears in no file the agents can read. It exists only in the memory layer.
Reproduce the central result in two seconds. Python standard library only, no API keys, no network:
git clone -b benchmark/silent-rotation --depth 1 https://github.com/samvallad33/vestige.git
cd vestige/benchmarks/silent-rotation
python3 tests/bm25_baseline.py results/runA-trial-1/corpus-export.json --no-dense
What it measures. A fleet either converges on the correct key, converges on a planted decoy, or splits and fails to merge. The second outcome is the dangerous one: tests pass, the merge is clean, and production breaks.
The numbers. 6 models, 25 trials, 246 published agent transcripts.
| Arm | Converged correct | Converged wrong | Split |
|---|---|---|---|
| No memory | 0/25 | 21/25 | 4/25 |
| Dense cosine RAG | 4/23 | 12/23 | 7/23 |
| Vestige | 20/23 | 0/23 | 3/23 |
Two separate claims, kept separate on purpose:
The caveats are published alongside the results, including the trials where a plain cosine baseline ties Vestige and the trial Vestige loses.
Every mechanism below is a cited result, implemented in Rust, running locally. None of it calls a cloud model to sound smart. Full write-up in docs/SCIENCE.md.
| Mechanism | What it does | Source |
|---|---|---|
| Prediction-Error Gating | Stores only what |