Vestige

Local memory for AI agents, stored in a signed append-only log, with tools to trace failures back to a cause

By Sam Valladares (individual) Rust Local · stdio Knowledge and memoryDeveloper tools

44 popularity score ★ 660 ↓ 236/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
npm install -g vestige-mcp-server
Claude CodeTerminal
claude mcp add vestige -- vestige-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "vestige": {
      "command": "vestige-mcp",
      "args": []
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "vestige": {
      "command": "vestige-mcp",
      "args": []
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "vestige": {
      "type": "stdio",
      "command": "vestige-mcp",
      "args": []
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.vestige]
command = "vestige-mcp"
args = []
Gemini CLITerminal
gemini mcp add --scope user vestige vestige-mcp

Settings 12

VESTIGE_DATA_DIR Optional: Data directory. The Strata log lives in log/ inside it. The --data-dir flag overrides it.
RUST_LOG Optional: Log level filter, for example debug or warn.
VESTIGE_BACKFILL_AUTOFIRE Optional: Runs backfill on each new memory. Set 0, false, off or no to stop it. Default on.
VESTIGE_SYSTEM_PROMPT_MODE Optional: How much guidance is injected into each MCP session, minimal or full. Default minimal.
VESTIGE_TRACE Optional: Local trace recorder for tool calls. Set 0, false, off or no to turn it off. Default on.
Set together: http
VESTIGE_HTTP_ENABLED Optional: Turns on the Streamable HTTP transport next to stdio. Default false.
VESTIGE_HTTP_PORT Optional: Port for the HTTP transport. Default 3928.
VESTIGE_HTTP_BIND Optional: Address the HTTP transport binds to. Default 127.0.0.1.
VESTIGE_AUTH_TOKEN secret Optional: Bearer token for the HTTP transport. Without it a token is generated and kept in an auth_token file in the data directory.
VESTIGE_HTTP_ALLOWED_ORIGINS Optional: Comma-separated browser origins allowed to call the HTTP transport.
Set together: dashboard
VESTIGE_DASHBOARD_ENABLED Optional: Starts the web dashboard with the server. The vestige dashboard command can also start it later. Default false.
VESTIGE_DASHBOARD_PORT Optional: Port for the dashboard. Default 3927.

What it does

Vestige is agent memory that stays on your machine. Since 5.0.0 the store is Strata, an append-only and hash-chained log kept in the log/ folder of the data directory. The server is a Rust binary, and the npm package vestige-mcp-server is a thin Node wrapper that picks the right prebuilt binary for your platform. The agent saves notes with smart_ingest and memory, finds them again with recall, and can walk cause and effect links between them with causal_walk. Other tools map a code base, keep reminders through intention, and produce receipts for what was recalled. The 5.0 line added gather, which pulls a GitHub issue and its comments into a scope through the gh CLI, and precedent, which reads past decisions of the separate Operator guard. Then 5.0.1 brought backfill. It re-scores older memories that share exact entities with new ones. Calls that would rewrite history are held back. Many agents on one machine share a single writer: the first to start serves the store and the others attach to it.

What it needs

RuntimeNode.js 18+
Runs onmacOS, Linux, Windows
Also
  • The gh CLI on PATH, only for gather and ghostlink heal

Node.js 18 or newer for the npm wrapper, which fetches a prebuilt binary for macOS, Linux or Windows on x64 or arm64. The gather tool needs the GitHub gh CLI on the server's PATH. No account is needed for the memory itself.

Limits

  • Not covered On a Strata log the purge and delete_knowledge tools are withheld, and so are several actions inside memory, maintain, dedup, receipt and suppress.
  • Limit Free-text recall returns similarity_disabled, so lookups go by exact handles and ids.
  • Size cap smart_ingest takes at most 20 items per call, and project only reads a target file of 2 MiB or less.
  • Limit A suppress on a Strata log cannot be reversed, since suppress reverse is withheld there.
  • Platform The @vestige/init setup wizard has native test coverage only on macOS. Its Windows and Linux client runs need separate checking.
  • Limit TOOL-CONTRACTS at v5.0.1 still describes 18 tools and has no section for backfill.
  • Limit The README now describes the 6.2 code on GitHub: six verbs (session, remember, recall, causal_walk, curate, precedent) and a 102-rule --guard gate. npm still ships 5.0.1 with the 19 tools listed here.

The Strata log is append-only, so tools that would delete or rewrite records are held back. Search by free text is switched off, and calls work through exact ids or handles of 8 or more characters. The gather tool is not idempotent and reaches GitHub through gh.

Who it suits

People who run coding agents such as Claude Code or Codex and want one local memory that every agent on the machine can share. It fits teams who care about an auditable record of what an agent stored and recalled, and who are fine with a store that never forgets by deletion.

Tools 19

8 only read, 10 change things, 1 can delete or overwrite.

recall
Finds memories by an exact handle, either a full memory id or an exact tag. Free-text queries return similarity_disabled on a Strata log, and a lookup never changes a memory's strength.
receipt
Shows a saved receipt, or replays it by rebuilding state from the log and reporting any mismatch.
memory changes
Works on one memory: get one or a batch, read its state, promote or demote it, or edit it by adding a successor and retiring the old node. Purge and delete are held back on Strata.
codebase changes
Code memory for a repository. It records patterns and decisions, returns them for context, checks their anchors with verify, and can re-anchor them or ingest a repo.
project changes
Copies the lasting part of a scope, such as decisions and patterns, into a fenced block of CLAUDE.md or MEMORY.md. Preview is the default, and writing needs confirm=true.
intention changes
Sets, checks, updates and lists reminders. A trigger fires on a clock or when a handle in the check context matches exactly, and a graph mode evaluates plans.
smart_ingest changes
Saves one memory or up to 20 at once, each with a receipt. Content that looks like a secret key is refused unless allowSecrets is set.
memory_status
Reports on the store: health, retention, a timeline by day, a changelog of state changes, provenance, coverage, counts and the advertised tools.
maintain changes
Lifecycle jobs such as dream, dream_compile, backup and export. On Strata the consolidate and restore actions are withheld, and gc deletes nothing.
dedup changes
Scans for duplicate memories and handles exact tag upkeep like tag_rename and tag_merge. Merge planning and apply are withheld on Strata.
ghostlink changes
Finds memory pairs that were never linked, each backed by recorded edges. Weave and harden write links, and heal runs gh or a local test suite.
session_start
Returns start-of-session context in one call: open intentions, store status and code memories within one token budget.
suppress deletes
Takes a memory out of retrieval and speeds its decay without deleting it. Reversal is withheld on a Strata log, so the step is final there.
backfill changes
Added in 5.0.1. Re-scores older memories that share exact entities with a newer one, with preview, receipt and undo. By default it fires on each new memory.
causal_walk
Walks a failure backward from start points such as a failing test, stack frame, CI run or logged write. On Strata it follows recorded causal edges only.
gather changes
Pulls a GitHub issue and its comments through the gh CLI and stores them as event records in a scope, then proposes links and runs the causal walk. It is not idempotent.
selftest
Plants a known cause in a throwaway log and checks that the walk finds it again.
forgotten_lesson
Lists earlier memories on recorded causal edges from a failure, the least retrievable first.
precedent
Reads the stops and permits recorded by the separate Operator guard, by default for the last 24 hours, with secrets masked. It writes nothing.

Resources 11

memory://stats
Memory counts, average retention and log health.
memory://recent
The 10 most recently added memories.
memory://decaying
Memories whose retention has fallen below 0.5, lowest first.
memory://due
Memories due for review today. A Strata log returns an error.
codebase://structure
Stored project structure.
codebase://patterns
Stored code patterns and conventions.
codebase://decisions
Stored architecture and design decisions.
memory://insights
Insights from consolidation runs. A Strata log returns an error.
memory://consolidation-log
History of consolidation runs, which is empty on Strata.
memory://intentions
Open intentions waiting to fire.
memory://intentions/due
Intentions that have fired or are overdue.

Similar servers