Vestige
<p align="center">
<img src="https://raw.githubusercontent.com/samvallad33/vestige/media/vestige-logo.png" alt="Vestige" width="620">
</p>
# Vestige
**Memory your AI can prove. A guard that stops it before it breaks things.**
Vestige gives AI agents a memory that gets sharper over time, and a guard that checks your agent's tool calls before they run. Every memory has a receipt. Every stop has a reason. Nothing is guessed.
[](https://github.com/samvallad33/vestige/releases/latest)
[](https://github.com/samvallad33/vestige/actions)
[](https://github.com/samvallad33/vestige/releases/latest)
[](LICENSE)
<a id="install"></a>
## Quick start
1. Install the binaries (macOS and Linux), or download them for your platform from [Releases](https://github.com/samvallad33/vestige/releases):
```bash
curl -fsSL https://raw.githubusercontent.com/samvallad33/vestige/main/scripts/install.sh | sh
```
2. Run `npx @vestige/init`, choose Memory or Memory plus guard, and confirm.
3. Restart your AI client, then say: *"Tell me something about a friend."* Ask about them later.
## It remembers what matters
Save *"Maya felt off after dinner at Bangkok Garden."* Later, save *"Maya has a peanut allergy."*
Vestige sees that both memories are about Maya and raises the older one. When your agent plans Maya's birthday dinner, that dinner comes up first.
This is **Retroactive Salience Backfill**: when something new makes an old memory matter, Vestige brings it back. It runs on every save, records every change it makes, and any change can be undone. [How Backfill works](docs/REFERENCE.md#retroactive-salience-backfill).
## It proves what it knows
Memory lives in **Strata**, an append-only log. Every write passes a gate and returns a receipt. A memory is found by its exact id or tag, never by a lookalike.
When something breaks, `causal_walk` follows the recorded links backward to the cause. Point `gather` at a GitHub issue and it walks back from there.
## It stops what you never approved
**Operator Lite** is a free guard for your agent's tool calls. It stops force pushes, dropped tables, recursive deletes and production deploys before they run, even when the command is disguised. 30 rules: 15 stop the call, 15 record it for you to review.
```bash
curl -fsSL https://raw.githubusercontent.com/samvallad33/vestige/main/operator-lite/operator-gate.py -o /tmp/operator-gate.py && python3 /tmp/operator-gate.py install
```
Install replays your last 30 days of agent history and shows what it would have stopped. Nothing in that history is run. [Windows, OpenClaw, and every claim checked on your machine](operator-lite/README.md).
## Vestige Operator
[](operator-lite/media/from-lite-to-operator.mp4)
The owner's version of the guard. Write your own laws, see a Board of today's stops, and get a weekly Letter of what your agents tried. $149 once, every future version included.
[Buy Vestige Operator](https://payhip.com/b/d4xvu)
## Works with
| | Memory | Guard |
|---|---|---|
| Claude Code | `npx @vestige/init` | [Install](operator-lite/README.md#install-one-command) |
| Codex | [Guide](docs/integrations/codex.md) | |
| Cursor | [Guide](docs/integrations/cursor.md) | [Port](operator-lite/ports/cursor/README.md) |
| VS Code + Copilot | [Guide](docs/integrations/vscode.md) | |
| OpenCode | [Guide](docs/integrations/opencode.md) | [Port](operator-lite/ports/opencode/README.md) |
| Windsurf | [Guide](docs/integrations/windsurf.md) | [Port](operator-lite/ports/windsurf/README.md) |
| Gemini CLI | `npx @vestige/init` | [Port](operator-lite/ports/gemini-cli/README.md) |
| Xcode | [Guide](docs/integrations/xcode.md) | |
| JetBrains / Junie | [Guide](docs/integrations/jetbrains.md) | |
| Anything else | [MCP setup](docs/AGENT-MEMORY-PROTOCOL.md) | [All ports](operator-lite/ports/README.md) |
## Docs
[What's new in v5](docs/REFERENCE.md#whats-new-in-v5) · [Installer guide](packages/vestige-init/README.md) · [Getting Started](docs/GETTING-STARTED.md) · [Tool contracts](docs/TOOL-CONTRACTS.md) · [Configuration](docs/CONFIGURATION.md) · [Storage](docs/STORAGE.md) · [Reference](docs/REFERENCE.md) · [Changelog](CHANGELOG.md)
<a id="vestige-pro"></a>
## License
AGPL-3.0-only.
TDQS
Scored across 34 tools
Most tools have distinct purposes: search, memory, codebase, intention, and various merge/explore steps are clearly separated. However, cross_reference is an explicit alias for deep_reference, creating redundancy, and the cluster of merge-related tools (find_duplicates, merge_candidates, plan_merge, apply_plan, merge_undo) could be confused despite having distinct stages.
Naming is mixed: many tools follow a verb_noun pattern (smart_ingest, find_duplicates, plan_merge, apply_plan, explore_connections, suppress), but others are noun_verb (memory_timeline, system_status, importance_score, merge_candidates, memory_health). A few are single-word nouns (search, memory, backup, export, gc, dream). This inconsistency in convention makes the set less predictable.
With 34 tools, this server far exceeds the 25-tool heavy threshold. While the domain is broad (memory management, codebase, intentions, ingestion, merging, health), many tools could be consolidated — e.g., five separate merge-related tools (find_duplicates, merge_candidates, plan_merge, apply_plan, merge_undo) and multiple health/status tools. The count feels bloated for agents to navigate efficiently.
The tool set covers the full memory lifecycle: creation (smart_ingest, memory set), retrieval (search, get, memory_timeline), update (edit, promote/demote), deletion (purge, gc, suppress), plus backup/export/restore and exploratory analysis. Minor gaps exist, such as a dedicated bulk delete (though gc covers it) and no explicit 'list all memories' without time constraints, but these are workable.