Revert "Add developer launch kit for Vestige v2.1.23"

This reverts commit 00511948ff.
This commit is contained in:
Sam Valladares 2026-06-02 12:40:48 -05:00
parent 6a37586c5f
commit a355da99a6
34 changed files with 42 additions and 1303 deletions

View file

@ -1,46 +0,0 @@
name: Deploy GitHub Pages
on:
push:
branches: [main]
paths:
- 'docs/website/**'
- 'docs/marketing/assets/**'
- '.github/workflows/pages.yml'
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: false
jobs:
deploy:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@v4
- name: Prepare site root
run: |
mkdir -p _site
cp -r docs/website/* _site/
mkdir -p _site/assets
cp -r docs/marketing/assets/* _site/assets/ 2>/dev/null || true
# Fix asset paths for Pages (no parent ../)
sed -i 's|../marketing/assets/|assets/|g' _site/index.html || true
- uses: actions/configure-pages@v5
- uses: actions/upload-pages-artifact@v3
with:
path: _site
- id: deployment
uses: actions/deploy-pages@v4

View file

@ -18,8 +18,7 @@ dashboard embedded into the release binary. The core product promise is:
## Working Rules
- Prefer source evidence over memory. Use `rg`, tests, and nearby code before
making claims about behavior. This public repo guidance does not override
private user-level memory protocols loaded outside the repository.
making claims about behavior.
- Keep release changes scoped. Do not rewrite unrelated modules during a
version/tag cleanup unless the release gate requires it.
- Preserve local-first behavior. Heavy models, Sanhedrin-style verifier hooks,

View file

@ -2,7 +2,7 @@
# Vestige
### Local memory and receipts for MCP-compatible AI agents.
### Local cognitive memory for MCP-compatible AI agents.
[![GitHub stars](https://img.shields.io/github/stars/samvallad33/vestige?style=social)](https://github.com/samvallad33/vestige)
[![Release](https://img.shields.io/github/v/release/samvallad33/vestige)](https://github.com/samvallad33/vestige/releases/latest)
@ -10,23 +10,11 @@
[![License](https://img.shields.io/badge/license-AGPL--3.0-blue)](LICENSE)
[![MCP Compatible](https://img.shields.io/badge/MCP-compatible-green)](https://modelcontextprotocol.io)
**Your coding agent forgets yesterday and can lie about today.** Vestige gives it a local brain — FSRS-6 memory that learns and forgets — plus **Receipt Lock** that blocks "tests passed" unless a real command receipt exists.
**Your agent forgets project decisions between sessions. Vestige gives it local, inspectable memory.**
```bash
npm install -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
```
Built on proven memory and retrieval ideas — FSRS-6 spaced repetition, prediction error gating, synaptic tagging, spreading activation, and memory consolidation — all running in a single Rust binary with a local dashboard. 100% local. Zero cloud.
| | |
|---|---|
| **Receipt Lock** — optional hook layer; vetoes unverified "green build" claims | **3D dashboard**`vestige dashboard``localhost:3927` |
| ![Receipt Lock demo](docs/marketing/assets/receipt-lock.gif) · [capture guide](docs/marketing/assets/CAPTURE.md) | ![Memory dashboard](docs/marketing/assets/dashboard-placeholder.svg) |
*Replace placeholders with GIFs from [`CAPTURE.md`](docs/marketing/assets/CAPTURE.md) before Wave B launch.*
**v2.1.23** · ~86K LOC Rust · **25** MCP tools · **30** cognitive modules · **1,200+** tests · **22MB** binary · 100% local · AGPL-3.0
[Quick Start](#quick-start) | [Receipt Lock](#receipt-lock) | [Dashboard](#-3d-memory-dashboard) | [Compare vs RAG](docs/comparison.md) | [Launch stats](docs/LAUNCH_STATS.md) | [Docs](docs/)
[Quick Start](#quick-start) | [Dashboard](#-3d-memory-dashboard) | [How It Works](#-the-cognitive-science-stack) | [Tools](#-25-mcp-tools) | [Docs](docs/)
</div>
@ -67,43 +55,6 @@ codex mcp add vestige -- vestige-mcp
# → "You prefer TypeScript over JavaScript."
```
## Receipt Lock
Coding agents often finish with confident summaries like "tests passed" or
"the build is green." Receipt Lock checks those operational claims against
structured command receipts from the current transcript before they become part
of the final answer.
If the agent claims verification happened but no matching successful command
receipt exists, Vestige can block the claim and write an inspectable local
receipt instead of letting the agent invent a clean ending.
Receipt Lock is optional and works through the Claude Code Cognitive Sandwich
hook layer:
```bash
# Install the local memory server first
npm install -g vestige-mcp-server@latest
# Add normal MCP memory
claude mcp add vestige vestige-mcp -s user
# Optional: enable Receipt Lock / Sanhedrin hooks
vestige sandwich install --enable-sanhedrin
# Optional: point Sanhedrin at any OpenAI-compatible endpoint
vestige sandwich install \
--enable-sanhedrin \
--sanhedrin-endpoint=http://127.0.0.1:11434/v1/chat/completions \
--sanhedrin-model=qwen2.5:14b
```
Receipts are local:
- Latest JSON: `~/.vestige/sanhedrin/latest.json`
- Latest HTML: `~/.vestige/sanhedrin/latest.html`
- Command ledger: `~/.vestige/sanhedrin/command-receipts.jsonl`
<details>
<summary>Other platforms & install methods</summary>
@ -471,8 +422,6 @@ vestige dashboard # Open 3D dashboard in browser
| [CLAUDE.md Setup](docs/CLAUDE-SETUP.md) | Templates for proactive memory |
| [Configuration](docs/CONFIGURATION.md) | CLI commands, environment variables |
| [Integrations](docs/integrations/) | Codex, Xcode, Cursor, VS Code, JetBrains, Windsurf |
| [Comparison vs RAG/Mem0](docs/comparison.md) | When to use Vestige |
| [Marketing kit](docs/marketing/README.md) | Launch waves, growth engine, metrics |
| [Changelog](CHANGELOG.md) | Version history |
---

View file

@ -1,88 +0,0 @@
# Vestige Launch Stats (Single Source of Truth)
**Last verified:** 2026-06-02
**Use this file** when updating README, launch posts, npm README, and landing page. Do not invent numbers elsewhere.
## Release
| Field | Value |
|-------|-------|
| Version | **v2.1.23** ("Receipt Lock Hardening") |
| npm package | `vestige-mcp-server@latest` |
| Install | `npm install -g vestige-mcp-server@latest` |
| MCP connect (Claude Code) | `claude mcp add vestige vestige-mcp -s user` |
| Optional Receipt Lock | `vestige sandwich install --enable-sanhedrin` |
| License | AGPL-3.0-only |
| Repo | https://github.com/samvallad33/vestige |
| Homepage (marketing) | https://samvallad33.github.io/vestige/ (GitHub Pages) |
## Author
| Field | Value |
|-------|-------|
| Name | Sam Valladares |
| Age | **22** (solo developer) |
| GitHub stars (2026-06-02) | **542** |
| Forks | **55** |
## Codebase (run to refresh)
```bash
# Rust LOC (crates + tests)
find crates tests -name '*.rs' | xargs wc -l | tail -1
# MCP tool count (must match server assertion)
rg 'name: "' crates/vestige-mcp/src/server.rs | wc -l
# Tests
cargo test --workspace --no-fail-fast 2>&1 | tail -3
```
| Metric | Current value | Notes |
|--------|---------------|-------|
| Rust LOC | **~86,000** | `crates/` + `tests/` `.rs` files |
| MCP tools | **25** | Verified in `server.rs` (`tools.len() == 25`) |
| Cognitive modules | **30** | Per README architecture |
| Rust tests | **1,200+** | CHANGELOG v2.1.0: 1,229 passing; re-run before major launch |
| Dashboard tests | **171** | Vitest in `apps/dashboard` |
| Release binary | **~22MB** | Single binary, embedded SvelteKit dashboard |
| Embedding model | Nomic Embed Text v1.5 (~130MB first-run download) |
## Install (canonical — no `sudo mv`)
The npm package registers global bins via `postinstall`. **Do not** tell users to `sudo mv vestige-mcp` unless manual binary install failed.
```bash
npm install -g vestige-mcp-server@latest
vestige health
claude mcp add vestige vestige-mcp -s user
```
If `vestige-mcp` is not on PATH after install:
```bash
npm prefix -g # e.g. /usr/local or ~/.npm-global
# Ensure that path/bin is in your shell PATH
```
Manual binary placement (optional):
```bash
vestige update --install-dir /usr/local/bin
```
## Messaging guardrails
- Lead Wave A with **Receipt Lock** (agents overclaim "tests passed").
- Close Wave B with **cognitive memory** (FSRS-6, dreaming, 3D dashboard).
- Never: "revolutionary", "game-changer", "AI-powered", competitor bashing.
- Always: honest neuroscience (faithful implementations vs engineering heuristics).
## North-star metrics
Track weekly (see `docs/marketing/metrics-tracker.md`):
1. **npm downloads** (`npm view vestige-mcp-server` / npmjs.com stats)
2. **GitHub stars delta**
3. **Inbound issues/DMs** mentioning install
4. **Referral source** (HN, Reddit, X, registry)

View file

@ -1,82 +0,0 @@
# Vestige vs Mem0 vs RAG vs Native AI Memory
Canonical comparison for launch posts and arguments. Grounded in [SCIENCE.md](SCIENCE.md) and [LAUNCH_STATS.md](LAUNCH_STATS.md).
## One-line thesis
**RAG is retrieval. Native memory is a black box. Mem0 is a strong cloud memory API. Vestige is a local cognitive system that forgets, strengthens, dreams, and can block unverified agent claims.**
## Comparison table
| Capability | RAG / vector DB | Native AI memory (Claude, ChatGPT) | Mem0 | Vestige |
|------------|-----------------|-------------------------------------|------|---------|
| **Runs local** | Often cloud embeddings | Cloud only | Cloud API (local option limited) | **100% local** default |
| **You own the data** | Your infra | Vendor | Vendor / API | **SQLite on your disk** |
| **Forgetting curve** | None — equal weight forever | Opaque | Categories + metadata | **FSRS-6** power-law decay |
| **Duplicate handling** | Manual | Opaque | Some dedup | **Prediction Error Gating** on ingest |
| **Retrieval strengthens memory** | No | Unknown | Partial | **Testing Effect** on every search |
| **Offline consolidation** | No | No | No | **`dream`** — replay + connect |
| **Contradiction awareness** | Returns both chunks | No | Some products | **`deep_reference` / `contradictions`** |
| **Active suppression** | Delete only | No | Delete | **`suppress`** — inhibited, not erased |
| **Agent overclaim guard** | No | No | No | **Receipt Lock** (optional Sanhedrin hooks) |
| **Visualization** | None | None | Dashboard (cloud) | **3D graph** + WebSocket events |
| **Protocol** | Custom | Proprietary | API + MCP | **MCP** (25 tools) |
| **License** | Varies | Proprietary | Apache / commercial | **AGPL-3.0** (local use = free) |
## When to use what
### Use RAG when
- You have a fixed document corpus (PDFs, wiki, codebase index).
- You need one-shot Q&A over static content.
- You do not need memory lifecycle or session continuity.
### Use Mem0 when
- You want a hosted memory API with minimal setup.
- Team sync and cloud dashboards are acceptable.
- You do not need FSRS decay or local-only air-gapped deploy.
### Use native Claude/ChatGPT memory when
- Casual personal context is enough.
- You do not need inspectable storage, decay curves, or contradiction tooling.
### Use Vestige when
- You run **Claude Code, Cursor, Codex, or any MCP client** daily.
- Context bloat from "remember everything" hurts retrieval quality.
- **Contradicting memories** have burned you (config changed, lib upgraded).
- You want **Receipt Lock** so agents cannot fake "tests passed."
- **Privacy / air-gapped** matters — embeddings run locally via ONNX.
## Honest limitations (Vestige)
- **AGPL-3.0**: hosting as a service without source disclosure is not allowed.
- **First-run download**: ~130MB embedding model (then offline).
- **Receipt Lock** requires optional Claude Code Cognitive Sandwich hooks + a verifier endpoint for Sanhedrin.
- **Neuroscience modules** mix faithful implementations and engineering heuristics — see [SCIENCE.md](SCIENCE.md) for citations vs approximations.
- **Solo project**: no enterprise SLA; GitHub issues are the support channel.
## Receipt Lock (Vestige-only)
Coding agents often end sessions with:
> "All tests passed. Build is green. Ready to merge."
Receipt Lock checks those **operational claims** against structured command receipts from the transcript. No matching successful receipt → claim blocked, local veto receipt written under `~/.vestige/sanhedrin/`.
```bash
vestige sandwich install --enable-sanhedrin
```
Details: [README Receipt Lock section](../README.md#receipt-lock).
## Install
```bash
npm install -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
```
Full stats: [LAUNCH_STATS.md](LAUNCH_STATS.md) · Repo: https://github.com/samvallad33/vestige

View file

@ -6,7 +6,7 @@ Every conversation starts from zero. You explain your project structure, your pr
Vestige is an open-source Rust MCP server that gives AI agents persistent memory modeled on real neuroscience. Not metaphorical neuroscience. Actual published algorithms from Ebbinghaus (1885), Collins & Loftus (1975), Bjork & Bjork (1992), Frey & Morris (1997), and the FSRS-6 spaced repetition scheduler trained on 700 million Anki reviews.
~86,000 lines of Rust. 30 cognitive modules. 1,200+ tests. v2.1.23 adds Receipt Lock for unverified agent claims. Single 22MB binary with embedded SvelteKit dashboard. AGPL-3.0 licensed. Stats: [LAUNCH_STATS.md](../LAUNCH_STATS.md).
77,840+ lines of Rust. 29 cognitive modules. 734 tests. Single binary deployment with an embedded SvelteKit dashboard. AGPL-3.0 licensed.
Here is how we built it.

View file

@ -1,6 +1,4 @@
# Vestige v2.1.23 — Demo Script (Conference + Launch Video)
> Stats: [LAUNCH_STATS.md](../LAUNCH_STATS.md) · Wave A hook: [receipt-lock.md](receipt-lock.md)
# Vestige v2.0 "Cognitive Leap" — MCP Dev Summit NYC Demo Script
**Event:** MCP Dev Summit NYC, April 1-3, 2026
**Presenter:** Sam Valladares
@ -17,7 +15,7 @@
- [ ] Phone hotspot configured as backup (embedding model already cached = no network needed)
### Software
- [ ] Vestige binary installed: `vestige-mcp --version` shows `2.1.23` (or latest)
- [ ] Vestige v2.0 binary installed: `vestige-mcp --version` shows `2.0.0`
- [ ] Claude Code installed and authenticated
- [ ] Terminal font size: 18pt minimum (audience readability)
- [ ] Browser zoom: 150% for dashboard views
@ -207,7 +205,7 @@ claude mcp add vestige vestige-mcp -s user
### [2:50-3:00] Close
> Vestige v2.1.23. Open source, AGPL-3.0. The repo is `samvallad33/vestige`. Come talk to me if you want to see the neuroscience under the hood.
> Vestige v2.0, "Cognitive Leap." Open source, AGPL-3.0. The repo is `samvallad33/vestige`. Come talk to me if you want to see the neuroscience under the hood.
---
@ -393,9 +391,9 @@ vestige-mcp --version
# One command to install
```
> This is what I've been building. I'm one person, I'm twenty-two years old, and I believe this is how AI memory should work — grounded in real science, running locally, open source.
> This is what I've been building for the past three months. I'm one person, I'm twenty-one years old, and I believe this is how AI memory should work — grounded in real science, running locally, open source.
>
> Vestige v2.1.23. The repo is `github.com/samvallad33/vestige`. The dashboard is running at `localhost:3927`. I'll be around all three days — come find me if you want to talk about FSRS, or synaptic tagging, or why I think every AI assistant on the planet should have a forgetting curve.
> Vestige v2.0, "Cognitive Leap." The repo is `github.com/samvallad33/vestige`. The dashboard is running at `localhost:3927`. I'll be around all three days — come find me if you want to talk about FSRS, or synaptic tagging, or why I think every AI assistant on the planet should have a forgetting curve.
>
> Thank you.

View file

@ -1,167 +0,0 @@
# Wave A Launch — Receipt Lock (v2.1.23)
Primary viral hook. Post **before** the memory/science Show HN wave. Stats: [LAUNCH_STATS.md](../LAUNCH_STATS.md).
---
## Hacker News — Show HN
### Title (≤80 chars)
```
Show HN: Vestige blocks coding agents from claiming "tests passed" without receipts
```
### First comment (body)
```
Hi HN,
Your coding agent probably ends sessions with something like "all tests passed" or
"the build is green." I kept trusting that — until it wasn't true.
I built Receipt Lock in Vestige (an MCP memory server I maintain). Before operational
claims become part of the final answer, Vestige checks them against structured
command receipts from the current transcript. No matching successful receipt → the
claim can be blocked and a local veto receipt is written (JSON + HTML under
~/.vestige/sanhedrin/).
**What it is:** Optional Claude Code Cognitive Sandwich hooks + local MCP server.
Not cloud. Not "trust me bro" logging — inspectable receipts on disk.
**Install (memory server — required base):**
npm install -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
**Enable Receipt Lock (optional):**
vestige sandwich install --enable-sanhedrin
Sanhedrin verifier can point at any OpenAI-compatible endpoint (Ollama, MLX, hosted API).
**And it also does real memory:** FSRS-6 spaced repetition, prediction error gating,
memory dreaming, 3D dashboard at localhost:3927. ~86K LOC Rust, 25 MCP tools, 1,200+
tests, 22MB binary. 100% local after first embedding download.
I'm 22, solo, AGPL-3.0. Repo: https://github.com/samvallad33/vestige
Comparison: https://github.com/samvallad33/vestige/blob/main/docs/comparison.md
Happy to discuss false positive tuning, Sanhedrin presets, or why receipts beat vibes.
```
---
## r/ExperiencedDevs
### Title
```
My coding agent kept saying "tests passed" when they hadn't. I added a receipt check before the summary ships.
```
### Body
```markdown
**TL;DR:** Vestige Receipt Lock checks operational claims ("tests passed", "build green", "lint clean") against structured command receipts from the transcript. No receipt → block + local veto artifact.
**The failure mode:** Agent runs partial checks, or hallucinates a green ending. You merge. CI breaks. You've seen this.
**The fix:** Optional hooks (`vestige sandwich install --enable-sanhedrin`) + MCP memory server. When the model tries to assert verification without evidence, Vestige can veto and write `~/.vestige/sanhedrin/latest.html` so you can inspect what happened.
**Not a replacement for CI.** It's a last-mile guard on *agent-authored* summaries in Claude Code.
**Stack:** Rust, local, MCP. Same project also does FSRS-6 cognitive memory (decay, dreaming, contradiction tools) — I'll post that angle separately if people want the science side.
```bash
npm install -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
vestige sandwich install --enable-sanhedrin
```
GitHub: https://github.com/samvallad33/vestige
What false positives are you seeing with agent verification claims? Curious if this matches your workflow.
```
---
## r/programming
### Title
```
Open-source guard: coding agents can't claim "tests passed" without command receipts (local MCP, Rust)
```
### Body — use r/ExperiencedDevs body; add:
```markdown
License: AGPL-3.0. v2.1.23. Stats: ~86K LOC, 25 tools, 22MB binary.
```
---
## X / Twitter thread (8 posts)
1. Your coding agent ends with "tests passed." Did it run tests? Or did it summarize hope?
2. I ship Receipt Lock in Vestige — checks operational claims against command receipts from the transcript.
3. No matching successful receipt → claim blocked. Local veto receipt: `~/.vestige/sanhedrin/latest.html`
4. Optional hooks. Local MCP server. Not cloud analytics.
5. ```bash
npm i -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
vestige sandwich install --enable-sanhedrin
```
6. Same binary also does FSRS-6 memory — decay, dreaming, 3D brain viz. Thread on that tomorrow.
7. 22yo solo dev. AGPL. https://github.com/samvallad33/vestige
8. What's the worst "green build" lie your agent told you? Reply — building the FAQ from real stories.
---
## Lobste.rs
### Title
```
Vestige Receipt Lock: local MCP guard against unverified "tests passed" agent claims
```
### Tags
`rust` `programming` `security`
### Body
Use HN first comment (shorter). Link comparison.md.
---
## Engagement playbook (Wave A)
| Window | Action |
|--------|--------|
| 03h | Reply every comment within 30 min |
| Tone | Technical, humble, no "revolutionary" |
| Competitors | Acknowledge Mem0/Cursor memory; don't bash |
| CTA | Install + link comparison.md |
| Next | Schedule Wave B 48h after Wave A peaks |
### DO NOT
- "Game-changer" / "AI-powered" / "paradigm shift"
- Disparage Mem0 or Claude native memory
- Promise Receipt Lock replaces CI
---
## Timing
- **HN / Lobsters:** Tuesday or Wednesday, 810 AM US Eastern
- **Reddit:** Same day, +12h after HN
- **X:** Pin thread during HN peak

View file

@ -1,6 +1,4 @@
# Reddit Launch Posts — cross_reference / deep_reference (v2.1.23)
> Canonical install: [LAUNCH_STATS.md](../LAUNCH_STATS.md) — **no `sudo mv`**; use `npm install -g vestige-mcp-server@latest`
# Reddit Launch Posts — cross_reference Tool
## Post 1: r/ClaudeAI (Primary)
@ -80,8 +78,8 @@ Memory systems need to be SMARTER, not just bigger. That's what Vestige does —
- **cross_reference** — the new tool that catches contradictions before they become wrong answers
### Stats:
- 25 MCP tools
- 1,200+ tests
- 22 MCP tools
- 746 tests, 0 failures
- Zero `unsafe` code
- Clean security audit (0 findings — AgentAudit verified)
- Single 22MB Rust binary — no Docker, no PostgreSQL, no cloud
@ -89,8 +87,9 @@ Memory systems need to be SMARTER, not just bigger. That's what Vestige does —
### Install (30 seconds):
```bash
npm install -g vestige-mcp-server@latest
vestige health
# macOS Apple Silicon
npm install -g vestige-mcp-server
sudo mv vestige-mcp /usr/local/bin/
claude mcp add vestige vestige-mcp -s user
```
@ -163,12 +162,12 @@ The AI sees the conflict. Picks the right one. Every time.
**100% local. Your data never leaves your machine.**
```bash
npm install -g vestige-mcp-server@latest
vestige health
npm install -g vestige-mcp-server
sudo mv vestige-mcp /usr/local/bin/
claude mcp add vestige vestige-mcp -s user
```
1,200+ tests. Zero unsafe code. AGPL-3.0.
746 tests. Zero unsafe code. Clean security audit. AGPL-3.0.
GitHub: https://github.com/samvallad33/vestige
@ -176,7 +175,7 @@ GitHub: https://github.com/samvallad33/vestige
## Post 3: r/rust (Optional, technical audience)
**Title:** `I built a 22MB Rust binary that gives AI agents a brain — FSRS-6, 30 cognitive modules, Receipt Lock, 25 MCP tools. ~86K LOC, zero unsafe.`
**Title:** `I built a 22MB Rust binary that gives AI agents a brain — FSRS-6, 29 cognitive modules, 3D dashboard, and a new contradiction detection tool. 746 tests, zero unsafe.`
---
@ -189,7 +188,7 @@ The latest addition: `cross_reference` — pairwise contradiction detection acro
- No runtime, no GC pauses during real-time search
- `tokio::sync::Mutex` for the cognitive engine, `std::sync::Mutex` for SQLite reader/writer split
- Zero `unsafe` blocks in the entire codebase
- `cargo test` runs 1,200+ tests across the workspace
- `cargo test` runs 746 tests in 11 seconds
**Architecture:**
```
@ -214,7 +213,7 @@ SQLite WAL + FTS5 + USearch HNSW
Clean security audit. Parameterized SQL everywhere. CSP headers on the dashboard. Constant-time auth comparison (`subtle::ConstantTimeEq`). File permissions 0o600/0o700.
GitHub: https://github.com/samvallad33/vestige
AGPL-3.0 | 1,200+ tests | ~86K LOC
AGPL-3.0 | 746 tests | 79K+ LOC
---

View file

@ -1,7 +1,4 @@
# Vestige v2.1.23 Launch — Show HN + Cross-Posts (Wave B: Memory)
> **Wave A (Receipt Lock)** posts live in [receipt-lock.md](receipt-lock.md). Run Wave A first.
> Stats: [LAUNCH_STATS.md](../LAUNCH_STATS.md)
# Vestige v2.0 Launch — Show HN + Cross-Posts
---
@ -10,7 +7,7 @@
### Title (76 chars)
```
Show HN: Vestige v2.1.23 FSRS-6 memory for AI agents + local Receipt Lock
Show HN: Vestige FSRS-6 spaced repetition as long-term memory for AI agents
```
### Body (first comment)
@ -60,7 +57,7 @@ retrieval. Written in Rust, 100% local, single 22MB binary.
discover hidden connections and synthesize insights. Inspired by hippocampal
replay during sleep.
**Dashboard (since v2.0, still core):**
**v2.0 adds:**
- 3D neural visualization dashboard (SvelteKit + Three.js) — watch memories
pulse when accessed, burst particles on creation, golden flash lines when
@ -77,10 +74,7 @@ retrieval. Written in Rust, 100% local, single 22MB binary.
embedded via Rust's `include_dir!` macro. No Docker, no Node runtime, no
external services.
**v2.1.23 adds Receipt Lock:** optional hooks that block operational claims like
"tests passed" unless matching command receipts exist in the transcript.
**Numbers:** ~86,000 lines of Rust, 1,200+ tests, 30 cognitive modules, 25 MCP
**Numbers:** 77,840 lines of Rust, 734 tests, 29 cognitive modules, 21 MCP
tools, search under 50ms for 1000 memories (SQLite FTS5 + USearch HNSW).
**What it is NOT:** This is not RAG. RAG treats memory as a static database —
@ -93,7 +87,7 @@ The embedding model (Nomic Embed Text v1.5) runs locally via ONNX. After the
first-run model download (~130MB), there are zero network requests. No
telemetry, no analytics, no phoning home.
I've been using this daily and the experience is genuinely different.
I've been using this daily for 2 months and the experience is genuinely different.
Claude remembers my coding patterns, my architectural decisions, my preferences.
New sessions start with context instead of a blank slate.
@ -281,12 +275,12 @@ surprising and useful.
### r/rust
**Title:** `Vestige v2.1.23 — ~86K LOC Rust memory system with FSRS-6, Receipt Lock, and a 22MB binary`
**Title:** `Vestige v2.0 — 77K LOC Rust memory system with FSRS-6, HNSW, Axum WebSockets, and an embedded SvelteKit dashboard in a 22MB binary`
**Body:**
```markdown
I've been building Vestige and just shipped v2.1.23. It's
I've been building Vestige for the past few months and just shipped v2.0. It's
a cognitive memory system for AI agents that implements neuroscience-backed
memory algorithms in pure Rust.
@ -320,7 +314,7 @@ memory algorithms in pure Rust.
- **Release profile**: `lto = true`, `codegen-units = 1`, `opt-level = "z"`,
`strip = true` gets the binary down to 22MB including embedded assets.
- **1,200+ tests** across workspace. Zero warnings on release gates.
- **734 tests**: 352 core + 378 mcp + 4 doctests. Zero warnings.
**Architecture:**
@ -363,7 +357,7 @@ Happy to discuss any of the Rust architecture decisions.
### r/ClaudeAI
**Title:** `Vestige v2.1.23 — give Claude real long-term memory (FSRS-6) + optional Receipt Lock for fake "tests passed" claims`
**Title:** `Vestige v2.0 "Cognitive Leap" — give Claude real long-term memory with neuroscience-backed forgetting, a 3D dashboard, and 21 MCP tools`
**Body:**
@ -391,7 +385,7 @@ locally on your machine.
strength model, testing effect, synaptic tagging, spreading activation,
context-dependent retrieval, memory dreaming.
**Highlights:**
**v2.0 new features:**
- **3D Memory Dashboard** at localhost:3927/dashboard — watch Claude's mind in
real-time. Memories pulse when accessed, burst particles on creation, golden
@ -407,8 +401,7 @@ locally on your machine.
**Setup (2 minutes):**
```bash
npm install -g vestige-mcp-server@latest
vestige health
npm install -g vestige-mcp-server
claude mcp add vestige vestige-mcp -s user
```
@ -424,7 +417,7 @@ on Project X ended with a tricky race condition in the WebSocket handler.
It's the difference between talking to someone with amnesia vs. someone who
actually knows you.
25 MCP tools. ~86,000 lines of Rust. 1,200+ tests. Works with Claude Code, Claude
21 MCP tools. 77,840 lines of Rust. 734 tests. Works with Claude Code, Claude
Desktop, Cursor, VS Code Copilot, JetBrains, Windsurf, and Xcode.
Source: https://github.com/samvallad33/vestige
@ -436,7 +429,7 @@ Happy to answer questions or help with setup.
### r/LocalLLaMA
**Title:** `Vestige v2.1.23 — local-first AI memory with FSRS-6, Receipt Lock, zero cloud (~86K LOC Rust, 22MB binary)`
**Title:** `Vestige v2.0 — local-first AI memory server with FSRS-6 spaced repetition, ONNX embeddings, and zero cloud dependency (77K LOC Rust, 22MB binary)`
**Body:**
@ -489,7 +482,7 @@ algorithms:
- 3D force-directed memory graph with real-time WebSocket events
- HyDE query expansion (template-based hypothetical document embeddings)
- FSRS decay visualization with retention curves
- 1,200+ tests, 30 cognitive modules, 25 tools
- 734 tests, 29 cognitive modules, 21 tools
- fastembed 5.11 with feature flags for Nomic v2 MoE + Qwen3 reranker
**Performance:**
@ -542,7 +535,8 @@ This is a solo project — feedback, issues, and contributions are very welcome.
implementations, some are engineering heuristics inspired by research)
3. 100% local, zero cloud — this is a feature, not a limitation
4. The 3D dashboard is a genuine exploration tool, not just eye candy
5. FSRS-6 + Receipt Lock — spaced repetition memory and optional agent claim verification
5. FSRS-6 is the differentiator — no other AI memory system uses real spaced
repetition
### What NOT to Say

View file

@ -1,35 +0,0 @@
# LAUNCH NOW — Wave A (Receipt Lock)
**Date started:** 2026-06-02
**Copy-paste from:** [ready-to-post/](ready-to-post/)
## 5-minute sequence
1. Run preflight:
```bash
./scripts/marketing/preflight.sh
```
2. **Hacker News** → https://news.ycombinator.com/submit
- URL: `https://github.com/samvallad33/vestige`
- Title: paste `ready-to-post/hn-title.txt`
- Post link, then immediately paste `ready-to-post/hn-first-comment.txt` as first comment
3. **X** — paste `ready-to-post/x-thread.txt` (one tweet per numbered block)
4. **r/ExperiencedDevs** — title from `reddit-experienceddevs-title.txt`, body from `reddit-experienceddevs.md`
5. **r/programming** — same body + line: `License: AGPL-3.0. v2.1.23. ~86K LOC, 25 tools, 22MB binary.`
6. Log URLs in [metrics-tracker.md](metrics-tracker.md)
## After posting (30 min SLA on comments)
```bash
vestige ingest "Wave A posted YYYY-MM-DD on HN Reddit X. Hook: agent fake tests passed. Log URLs in metrics-tracker." \
--data-dir ~/.vestige-marketing --tags marketing,wave-a,vestige-launch
```
## 48h later → Wave B
[wave-b-launch.md](wave-b-launch.md) + [show-hn.md](../launch/show-hn.md) memory angle

View file

@ -1,33 +0,0 @@
# Vestige Marketing Kit
Everything needed to run the dual-wave launch and weekly growth loop.
## Start here
**Posting today?** → [LAUNCH_NOW.md](LAUNCH_NOW.md) (copy-paste from [ready-to-post/](ready-to-post/))
1. [LAUNCH_STATS.md](../LAUNCH_STATS.md) — canonical version, stats, install
2. [comparison.md](../comparison.md) — vs Mem0 / RAG / native memory
3. [launch/receipt-lock.md](../launch/receipt-lock.md) — **Wave A** copy (post first)
4. [launch/show-hn.md](../launch/show-hn.md) — **Wave B** copy
5. [wave-a-launch.md](wave-a-launch.md) / [wave-b-launch.md](wave-b-launch.md) — execution checklists
## Assets
| Path | Purpose |
|------|---------|
| [website/index.html](../website/index.html) | GitHub Pages landing |
| [assets/CAPTURE.md](assets/CAPTURE.md) | GIF/video capture |
| [demo-video-storyboard.md](demo-video-storyboard.md) | 6090s video beats |
## Ongoing
| Path | Purpose |
|------|---------|
| [growth-engine/](growth-engine/) | Vestige-powered marketing agent setup |
| [metrics-tracker.md](metrics-tracker.md) | Weekly npm / stars / hooks |
| [mcp-registries.md](mcp-registries.md) | Directory submission packet |
## Deploy landing page
Push to `main` → GitHub Actions workflow `.github/workflows/pages.yml` publishes `docs/website/` to **https://samvallad33.github.io/vestige/** (enable Pages: Settings → Pages → GitHub Actions).

View file

@ -1,40 +0,0 @@
# Demo GIF / Video Capture Guide
Record these on a machine with Vestige v2.1.23 installed and ~20 pre-loaded memories (see `docs/launch/demo-script.md` pre-load section).
## Prerequisites
```bash
npm install -g vestige-mcp-server@latest
vestige health
claude mcp add vestige vestige-mcp -s user
open http://localhost:3927/dashboard
```
## Assets to produce
| File | Duration | What to show |
|------|----------|----------------|
| `receipt-lock.gif` | 812s loop | Agent claims "tests passed" → Sanhedrin veto → `~/.vestige/sanhedrin/latest.html` receipt |
| `dashboard-dream.gif` | 1015s loop | Graph view → trigger dream in Claude → purple dream mode, golden connection lines |
| `memory-born.gif` | 58s | Feed tab: `MemoryCreated` WebSocket event + new node burst on graph |
| `demo-full.mp4` | 6090s | Full script: `docs/launch/demo-script.md` Version 2 (3-minute cut to 90s) |
## macOS capture (recommended)
```bash
# Screen recording → convert to GIF (install: brew install ffmpeg)
ffmpeg -f avfoundation -i "1" -t 12 -vf "fps=10,scale=1280:-1" -y /tmp/vestige-rec.mov
ffmpeg -i /tmp/vestige-rec.mov -vf "fps=8,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 docs/marketing/assets/dashboard-dream.gif
```
## Static fallback
If GIFs are not ready for launch, export one PNG from the dashboard graph view:
```bash
# Browser screenshot → save as:
docs/marketing/assets/dashboard-static.png
```
Commit GIFs when ready; README and landing page reference these paths.

View file

@ -1,10 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="960" height="540" viewBox="0 0 960 540">
<rect width="960" height="540" fill="#0a0a12"/>
<text x="480" y="250" fill="#8b9cf7" font-family="system-ui,sans-serif" font-size="28" text-anchor="middle">Vestige 3D Memory Dashboard</text>
<text x="480" y="290" fill="#6b7280" font-family="system-ui,sans-serif" font-size="16" text-anchor="middle">Run vestige dashboard  capture GIF per docs/marketing/assets/CAPTURE.md</text>
<circle cx="320" cy="380" r="12" fill="#6366f1" opacity="0.9"/>
<circle cx="480" cy="360" r="16" fill="#a78bfa" opacity="0.95"/>
<circle cx="640" cy="390" r="10" fill="#6366f1" opacity="0.7"/>
<line x1="320" y1="380" x2="480" y2="360" stroke="#fbbf24" stroke-width="2" opacity="0.6"/>
<line x1="480" y1="360" x2="640" y2="390" stroke="#fbbf24" stroke-width="2" opacity="0.6"/>
</svg>

View file

@ -1,32 +0,0 @@
# Demo Video Storyboard (6090s)
For `docs/marketing/assets/demo-full.mp4` and GIF exports. Full script: [demo-script.md](../../launch/demo-script.md) Version 2.
## Beat sheet
| Time | Visual | Audio / text overlay |
|------|--------|----------------------|
| 0:000:08 | 3D dashboard graph, nodes pulsing | "Your AI forgets everything between sessions." |
| 0:080:18 | Claude Code: "Remember I prefer TypeScript" → Feed: MemoryCreated | "Vestige stores it with prediction error gating — not a dumb bucket." |
| 0:180:30 | New session: "What are my language preferences?" → correct answer | "New session. Same brain." |
| 0:300:45 | Search → graph nodes pulse blue (spreading activation) | "Search runs a 7-stage cognitive pipeline." |
| 0:450:58 | Dream mode: purple wash, golden edges | "Dream consolidation finds connections you never typed." |
| 0:581:15 | Terminal: agent says "tests passed" → veto / sanhedrin HTML | "Receipt Lock: no receipt, no claim." |
| 1:151:25 | Terminal: install commands | `npm install -g vestige-mcp-server@latest` |
| 1:251:30 | Logo / github.com/samvallad33/vestige | "v2.1.23 · local · AGPL" |
## Export targets
| Asset | Path |
|-------|------|
| Full video | `docs/marketing/assets/demo-full.mp4` |
| Dashboard loop | `docs/marketing/assets/dashboard-dream.gif` |
| Receipt Lock loop | `docs/marketing/assets/receipt-lock.gif` |
| Memory create | `docs/marketing/assets/memory-born.gif` |
Capture commands: [assets/CAPTURE.md](assets/CAPTURE.md)
## Wave usage
- **Wave A:** Ship `receipt-lock.gif` + beats 0:581:15 first
- **Wave B:** Ship `dashboard-dream.gif` + full `demo-full.mp4`

View file

@ -1,69 +0,0 @@
# Vestige Marketing Agent Protocol
You are the marketing operator for **Vestige** (v2.1.23). You have access to a **dedicated** Vestige MCP instance (`vestige-marketing` / `VESTIGE_DATA_DIR=~/.vestige-marketing`). Never confuse this with the user's dev memory.
## Product facts (do not invent stats)
Read [docs/LAUNCH_STATS.md](../../LAUNCH_STATS.md) before drafting. Current anchors:
- ~86K LOC Rust, 25 MCP tools, 30 cognitive modules, 1,200+ tests, 22MB binary
- Install: `npm install -g vestige-mcp-server@latest` + `claude mcp add vestige vestige-mcp -s user`
- Wave A hook: **Receipt Lock** — blocks "tests passed" without command receipts
- Wave B product: **FSRS-6 cognitive memory**, dreaming, 3D dashboard
- Comparison: [docs/comparison.md](../../comparison.md)
- Author: Sam Valladares, 22, solo, AGPL-3.0
## Session start
1. `session_context` with query: `vestige marketing launch hooks objections`
2. `deep_reference` if drafting factual claims about features or competitors
3. `contradictions` if messaging might conflict with prior brand guidelines
## Voice
- Technical, humble, specific — never "revolutionary", "game-changer", "AI-powered"
- Lead with **pain** (agent amnesia, fake green builds, contradicting memories)
- Reveal **tool** second
- Acknowledge Mem0, native Claude memory, RAG honestly — do not bash
- Neuroscience: cite real papers; admit heuristics where approximate
## On user feedback
- Winning hook / post → `memory` promote on that memory
- Flopped angle → `suppress` (not delete)
- New objection → `smart_ingest` with tags `marketing, objection`
- User correction → `smart_ingest` + demote wrong memory if needed
## Weekly deliverables
When asked for "weekly content":
1. **One long-form** (8001200 words): expand top objection OR one cognitive module OR Receipt Lock story
2. **35 short posts** (X/LinkedIn): each ≤280 chars or ≤2 short paragraphs
3. **One Reddit draft** (technical, humble title — pain first)
4. **Metrics summary** paragraph for ingest after user fills tracker
## Channels (user posts manually)
You draft only. User sends all posts and DMs to avoid bans and keep authenticity.
| Channel | Style |
|---------|-------|
| HN | Show HN title ≤80 chars; first comment = full body; science-first |
| Reddit | Personal story + JSON output + install block; no "introducing my startup" |
| X | 812 tweet thread; hook tweet must stand alone |
| LinkedIn | Professional, link comparison.md |
## End of week
```
dream with focus on marketing memories tagged vestige-launch from the last 7 days.
Return: top 3 hooks to promote, top 2 to suppress, one recommended post for next week.
```
## Hard rules
- Do not claim Vestige replaces CI/CD or enterprise memory suites
- Do not fabricate download numbers — use metrics-tracker.md only
- Do not tell users `sudo mv` for install unless manual binary path failed
- Always include GitHub link: https://github.com/samvallad33/vestige

View file

@ -1,84 +0,0 @@
# Vestige Marketing Growth Engine
Repeatable weekly loop: Vestige remembers what worked, Claude Code drafts whats next, you approve and post manually.
## One-time setup
### 1. Dedicated marketing memory store
```bash
mkdir -p ~/.vestige-marketing
```
Add a **second** MCP server entry (do not mix with dev memory):
```bash
claude mcp add vestige-marketing vestige-mcp -s user \
--env VESTIGE_DATA_DIR=$HOME/.vestige-marketing
```
If your client does not support env on `mcp add`, use a wrapper script:
```bash
# ~/bin/vestige-mcp-marketing
#!/bin/bash
export VESTIGE_DATA_DIR="$HOME/.vestige-marketing"
exec vestige-mcp "$@"
```
### 2. Copy marketing agent instructions
```bash
cp docs/marketing/growth-engine/MARKETING-CLAUDE.md ~/vestige-marketing-CLAUDE.md
```
In Claude Code for marketing sessions, include that file (or paste into project instructions).
### 3. Seed baseline memories
Open Claude Code with `vestige-marketing` connected and run:
```
Read docs/LAUNCH_STATS.md, docs/comparison.md, and docs/marketing/metrics-tracker.md.
smart_ingest each as separate marketing baseline memories with tags: marketing, baseline, vestige-launch.
```
## Weekly loop (≈2 hours)
| Step | Who | Action |
|------|-----|--------|
| Mon AM | You | Fill `metrics-tracker.md` row |
| Mon | Agent | `session_context` with query "vestige marketing launch" |
| Mon | Agent | Draft 1 long-form + 35 shorts from last week's `promote`d hooks |
| Mon | You | Edit and post manually (HN/Reddit/X/LinkedIn) |
| Fri | You | Log engagement URLs + numbers |
| Fri | Agent | `smart_ingest` weekly metrics + objections |
| Fri | Agent | `dream` on tag `vestige-launch` for next week's angles |
## Tool cheat sheet
| Goal | Tool |
|------|------|
| Load brand voice + past wins | `session_context` |
| Save post results | `smart_ingest` |
| Recall winning hooks | `search` / `deep_reference` |
| Retire dead angles | `suppress` |
| Boost viral hook | `memory` action=promote |
| Weekly strategy | `dream` |
## Dogfood story (meta-content)
> "I use Vestige to market Vestige — marketing memories live in a separate data dir, FSRS promotes hooks that converted, suppress kills angles that flopped."
Post this on X after Week 2 if metrics show engagement.
## Files
| File | Purpose |
|------|---------|
| [MARKETING-CLAUDE.md](MARKETING-CLAUDE.md) | Agent protocol |
| [../metrics-tracker.md](../metrics-tracker.md) | Weekly numbers |
| [../wave-a-launch.md](../wave-a-launch.md) | Receipt Lock execution |
| [../wave-b-launch.md](../wave-b-launch.md) | Memory wave execution |
| [../../launch/receipt-lock.md](../../launch/receipt-lock.md) | Wave A copy |
| [../../comparison.md](../../comparison.md) | Argument anchor |

View file

@ -1,57 +0,0 @@
# MCP Registry & Directory Submissions
Passive install channel — update listings whenever v2.1.x ships. Check off as you submit.
## Submission packet (reuse everywhere)
| Field | Value |
|-------|-------|
| Name | Vestige |
| Slug | `io.github.samvallad33/vestige` (npm `mcpName`) |
| Description | Local cognitive memory for MCP agents — FSRS-6 spaced repetition, prediction error gating, memory dreaming, 3D dashboard, optional Receipt Lock for agent verification claims. |
| Install | `npm install -g vestige-mcp-server@latest` then `claude mcp add vestige vestige-mcp -s user` |
| Repo | https://github.com/samvallad33/vestige |
| Homepage | https://samvallad33.github.io/vestige/ |
| License | AGPL-3.0-only |
| Transport | stdio (default); HTTP opt-in |
| Version | 2.1.23 |
| Tags | memory, mcp, claude, cursor, local-first, fsrs, neuroscience, rust |
## Registries
| Directory | URL | Status | Notes |
|-----------|-----|--------|-------|
| Glama | https://glama.ai/mcp/servers | [ ] Submit / refresh | Ownership metadata in repo (`cd496e5`) |
| mcp.so | https://mcp.so | [ ] Submit | Use submission packet |
| Smithery | https://smithery.ai | [ ] Submit | npm package + stdio command |
| PulseMCP | https://www.pulsemcp.com | [ ] Submit | |
| Awesome MCP Servers | https://github.com/punkpeye/awesome-mcp-servers | [ ] PR | Add under Memory / Knowledge |
| modelcontextprotocol/servers | https://github.com/modelcontextprotocol/servers | [ ] PR if accepted | Follow their CONTRIBUTING |
| Cursor directory | docs/integrations/cursor.md | [x] Doc exists | Link from Cursor forum / Discord |
| VS Code marketplace | N/A for MCP stdio | [ ] N/A | Use integrations/vscode.md in posts |
## Awesome-MCP PR snippet
```markdown
### Vestige
- **Description:** Local cognitive memory — FSRS-6 decay, dreaming, contradiction tools, optional Receipt Lock
- **Install:** `npm install -g vestige-mcp-server@latest`
- **Command:** `vestige-mcp`
- **Repo:** https://github.com/samvallad33/vestige
```
## After each listing goes live
```bash
# Ingest into marketing Vestige
smart_ingest: "Listed Vestige on [REGISTRY] at [URL]. Version 2.1.23."
tags: marketing, registry, vestige-launch
```
## Editor-specific posts (optional)
| Community | Action |
|-----------|--------|
| Cursor Discord #showcase | Link comparison.md + 30s dashboard GIF |
| Claude Code GitHub discussions | Receipt Lock angle + install |
| r/mcp | Neutral "new server" post after Wave B |

View file

@ -1,66 +0,0 @@
# Vestige Growth Metrics Tracker
**North star:** weekly `vestige-mcp-server` npm installs + evidence of active MCP connections (issues, "it works" posts).
Update every **Monday**. Feed summary into marketing Vestige via `smart_ingest`.
## How to fetch numbers
```bash
# npm weekly downloads (approximate)
npm view vestige-mcp-server
# GitHub stars
gh api repos/samvallad33/vestige --jq .stargazers_count
# Optional: npm download chart
# https://www.npmjs.com/package/vestige-mcp-server
```
## Weekly log template
Copy a row per week:
| Week ending | npm downloads (total) | Stars | Stars Δ | Top channel | Top hook | Installs anecdote | Notes |
|-------------|----------------------|-------|---------|-------------|----------|-------------------|-------|
| 2026-06-02 | TBD | 542 | 0 | pre-launch | Receipt Lock / fake tests passed | setup complete | marketing instance seeded, ready for Wave A |
| 2026-06-09 | | | | | | | post Wave A week 1 |
## Per-post log template
| Date | Wave | Channel | Post URL | Engagement | Stars Δ (48h) | Objections | Action |
|------|------|---------|----------|------------|---------------|------------|--------|
| | A | HN | | | | | |
## Objection → content flywheel
When the same objection appears 3+ times, promote to permanent doc:
| Objection | Response doc |
|-----------|----------------|
| "Isn't this just RAG?" | [comparison.md](../comparison.md) |
| "Claude has memory now" | comparison.md + Receipt Lock section |
| "AGPL?" | README + HN FAQ in show-hn.md |
| "77K LOC over-engineered" | show-hn.md FAQ |
| "FSRS gimmick?" | [SCIENCE.md](../SCIENCE.md) |
## Agent ingest prompt (weekly)
```
smart_ingest: Vestige marketing week ending YYYY-MM-DD.
npm: X total (ΔY). Stars: N (ΔZ).
Best channel: [HN/Reddit/X].
Best hook: [phrase].
Top objection: [text].
Next week: [one action].
tags: marketing, metrics, vestige-launch
```
## Goals (first 8 weeks)
| Milestone | Target |
|-----------|--------|
| Wave A HN front page | 100+ points |
| Stars | 542 → 800+ |
| npm weekly downloads | 2× baseline |
| Registry listings | 5+ MCP directories |

View file

@ -1,32 +0,0 @@
Hi HN,
Your coding agent probably ends sessions with something like "all tests passed" or
"the build is green." I kept trusting that — until it wasn't true.
I built Receipt Lock in Vestige (an MCP memory server I maintain). Before operational
claims become part of the final answer, Vestige checks them against structured
command receipts from the current transcript. No matching successful receipt → the
claim can be blocked and a local veto receipt is written (JSON + HTML under
~/.vestige/sanhedrin/).
**What it is:** Optional Claude Code Cognitive Sandwich hooks + local MCP server.
Not cloud. Not "trust me bro" logging — inspectable receipts on disk.
**Install (memory server — required base):**
npm install -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
**Enable Receipt Lock (optional):**
vestige sandwich install --enable-sanhedrin
Sanhedrin verifier can point at any OpenAI-compatible endpoint (Ollama, MLX, hosted API).
**And it also does real memory:** FSRS-6 spaced repetition, prediction error gating,
memory dreaming, 3D dashboard at localhost:3927. ~86K LOC Rust, 25 MCP tools, 1,200+
tests, 22MB binary. 100% local after first embedding download.
I'm 22, solo, AGPL-3.0. Repo: https://github.com/samvallad33/vestige
Comparison: https://github.com/samvallad33/vestige/blob/main/docs/comparison.md
Landing: https://samvallad33.github.io/vestige/
Happy to discuss false positive tuning, Sanhedrin presets, or why receipts beat vibes.

View file

@ -1 +0,0 @@
Show HN: Vestige blocks coding agents from claiming "tests passed" without receipts

View file

@ -1 +0,0 @@
My coding agent kept saying "tests passed" when they hadn't. I added a receipt check before the summary ships.

View file

@ -1,19 +0,0 @@
**TL;DR:** Vestige Receipt Lock checks operational claims ("tests passed", "build green", "lint clean") against structured command receipts from the transcript. No receipt → block + local veto artifact.
**The failure mode:** Agent runs partial checks, or hallucinates a green ending. You merge. CI breaks. You've seen this.
**The fix:** Optional hooks (`vestige sandwich install --enable-sanhedrin`) + MCP memory server. When the model tries to assert verification without evidence, Vestige can veto and write `~/.vestige/sanhedrin/latest.html` so you can inspect what happened.
**Not a replacement for CI.** It's a last-mile guard on *agent-authored* summaries in Claude Code.
**Stack:** Rust, local, MCP. Same project also does FSRS-6 cognitive memory (decay, dreaming, contradiction tools) — I'll post that angle separately if people want the science side.
```bash
npm install -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
vestige sandwich install --enable-sanhedrin
```
GitHub: https://github.com/samvallad33/vestige
What false positives are you seeing with agent verification claims? Curious if this matches your workflow.

View file

@ -1,18 +0,0 @@
1/8 Your coding agent ends with "tests passed." Did it run tests? Or did it summarize hope?
2/8 I ship Receipt Lock in Vestige — checks operational claims against command receipts from the transcript.
3/8 No matching successful receipt → claim blocked. Local veto receipt: ~/.vestige/sanhedrin/latest.html
4/8 Optional hooks. Local MCP server. Not cloud analytics.
5/8
npm i -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user
vestige sandwich install --enable-sanhedrin
6/8 Same binary also does FSRS-6 memory — decay, dreaming, 3D brain viz. Thread on that tomorrow.
7/8 22yo solo dev. AGPL. https://github.com/samvallad33/vestige
8/8 What's the worst "green build" lie your agent told you? Reply — building the FAQ from real stories.

View file

@ -1,47 +0,0 @@
# Wave A — Execution Checklist
Copy-paste from [docs/launch/receipt-lock.md](../launch/receipt-lock.md). **You post manually.**
## Pre-flight
- [x] `docs/LAUNCH_STATS.md` numbers match README
- [x] `vestige health` passes on your machine
- [ ] GitHub Pages live: https://samvallad33.github.io/vestige/ (after `git push` + Pages enabled)
- [x] GIFs captured OR placeholder SVG acceptable for Wave A
- [x] Marketing Vestige seeded: `./scripts/marketing/setup-marketing-instance.sh`
- [ ] Ingest Wave A URLs after posting (see LAUNCH_NOW.md)
## Day 1 — HN + Lobsters
| Time (ET) | Channel | Artifact |
|-----------|---------|----------|
| 8:00 AM Tue/Wed | Hacker News Show HN | Title + first comment from `receipt-lock.md` |
| +30 min | Lobste.rs | Shorter HN body |
| 8:0011:00 AM | HN comments | 30-min reply SLA |
## Day 12 — Reddit + X
| Time | Channel | Artifact |
|------|---------|----------|
| +1h | r/ExperiencedDevs | Full post in `receipt-lock.md` |
| +2h | r/programming | Same + stats line |
| +0h (parallel) | X thread | 8 tweets in `receipt-lock.md` |
| Pin | X profile | Thread link during HN peak |
## Metrics to log (→ `metrics-tracker.md`)
| Field | Value |
|-------|-------|
| Date | |
| Channel | |
| URL | |
| Upvotes / points | |
| Comments | |
| npm downloads (week delta) | |
| Stars delta (48h) | |
| Top objection | |
| Winning hook phrase | |
## After Wave A
Wait **48h** from HN peak, then run [wave-b-launch.md](wave-b-launch.md).

View file

@ -1,45 +0,0 @@
# Wave B — Execution Checklist
Memory / neuroscience product wave. Cross-link Wave A HN thread if it performed.
Sources: [show-hn.md](../launch/show-hn.md) (refresh before posting), [demo-script.md](../launch/demo-script.md), [comparison.md](../comparison.md).
## Pre-flight
- [ ] Dashboard GIF live (`docs/marketing/assets/dashboard-dream.gif`)
- [ ] 20 pre-loaded memories per demo-script pre-demo checklist
- [ ] Wave A metrics logged in `metrics-tracker.md`
## Day 3 — Show HN (memory angle) OR skip if Wave A HN was same week
If Wave A used Show HN title for Receipt Lock, **do not** second Show HN same week. Use Reddit + X only for Wave B.
| Channel | Focus |
|---------|-------|
| r/ClaudeAI | MCP memory, FSRS-6, dashboard, 2-min install |
| r/LocalLLaMA | Local-first, zero cloud, ONNX embeddings |
| r/rust | Architecture, 86K LOC, 25 tools, zero unsafe |
## Day 45 — Content
| Channel | Artifact |
|---------|----------|
| X | 10-tweet thread: "RAG is not memory" + FSRS + dream GIF |
| LinkedIn | Link to comparison.md + dashboard GIF |
| Blog | Optional: publish refreshed `docs/launch/blog-post.md` on dev.to / personal site |
## r/ClaudeAI title (v2.1.23)
```
Vestige v2.1.23 — FSRS-6 memory for Claude Code + optional Receipt Lock when agents fake "tests passed"
```
Body: Use r/ClaudeAI section from refreshed `show-hn.md` + install block from LAUNCH_STATS.
## Cross-link line (if Wave A performed)
> Earlier this week I posted about Receipt Lock (agents claiming tests passed without receipts). Same project — the memory engine underneath: [link]
## Metrics
Same table as wave-a-launch.md. Tag `wave=B` in marketing Vestige ingest.

View file

@ -1,82 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Vestige — Local memory and receipts for AI agents</title>
<meta name="description" content="FSRS-6 cognitive memory + Receipt Lock for MCP agents. 22MB Rust binary. 100% local." />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;600;700&family=IBM+Plex+Mono&display=swap" rel="stylesheet" />
<style>
:root { --bg: #07070f; --fg: #e8e8f0; --muted: #9ca3af; --accent: #818cf8; --gold: #fbbf24; --card: #12121c; }
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'IBM Plex Sans', system-ui, sans-serif; background: var(--bg); color: var(--fg); line-height: 1.6; }
a { color: var(--accent); }
.wrap { max-width: 880px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
h1 { font-size: clamp(1.75rem, 5vw, 2.5rem); font-weight: 700; line-height: 1.2; margin-bottom: 1rem; }
h2 { font-size: 1.35rem; margin: 2.5rem 0 1rem; color: var(--accent); }
p.lead { font-size: 1.15rem; color: var(--muted); margin-bottom: 1.5rem; }
.badge { display: inline-block; font-size: 0.75rem; font-family: 'IBM Plex Mono', monospace; background: var(--card); padding: 0.25rem 0.6rem; border-radius: 4px; margin-right: 0.5rem; margin-bottom: 0.5rem; }
pre { background: var(--card); padding: 1rem; border-radius: 8px; overflow-x: auto; font-family: 'IBM Plex Mono', monospace; font-size: 0.9rem; margin: 1rem 0; border: 1px solid #1f1f2e; }
.hero-img { width: 100%; border-radius: 12px; border: 1px solid #1f1f2e; margin: 1.5rem 0; }
table { width: 100%; border-collapse: collapse; font-size: 0.9rem; margin: 1rem 0; }
th, td { border: 1px solid #1f1f2e; padding: 0.6rem 0.75rem; text-align: left; }
th { background: var(--card); }
.cta { display: inline-block; background: var(--accent); color: #fff; font-weight: 600; padding: 0.75rem 1.25rem; border-radius: 8px; text-decoration: none; margin-top: 0.5rem; }
.cta:hover { filter: brightness(1.1); }
footer { margin-top: 3rem; font-size: 0.85rem; color: var(--muted); }
.hook { border-left: 3px solid var(--gold); padding-left: 1rem; margin: 1.5rem 0; font-style: italic; color: #d1d5db; }
</style>
</head>
<body>
<div class="wrap">
<p>
<span class="badge">v2.1.23</span>
<span class="badge">25 MCP tools</span>
<span class="badge">~86K LOC Rust</span>
<span class="badge">AGPL-3.0</span>
</p>
<h1>Your agent forgets yesterday.<br />It can lie about today.</h1>
<p class="lead">Vestige is a local MCP memory server: real FSRS-6 forgetting and consolidation, plus optional <strong>Receipt Lock</strong> that blocks &ldquo;tests passed&rdquo; without command receipts.</p>
<pre>npm install -g vestige-mcp-server@latest
claude mcp add vestige vestige-mcp -s user</pre>
<a class="cta" href="https://github.com/samvallad33/vestige">GitHub →</a>
<h2>Wave A: Receipt Lock</h2>
<div class="hook">Coding agents finish with confident summaries. Vestige checks operational claims against structured command receipts before they become your final answer.</div>
<p>If the agent claims verification happened but no matching successful receipt exists, the claim can be blocked and an inspectable local veto is written to <code>~/.vestige/sanhedrin/</code>.</p>
<pre>vestige sandwich install --enable-sanhedrin</pre>
<p><a href="https://github.com/samvallad33/vestige#receipt-lock">Receipt Lock docs</a></p>
<h2>Wave B: A brain, not a bucket</h2>
<img class="hero-img" src="../marketing/assets/dashboard-placeholder.svg" alt="Vestige 3D memory dashboard" width="960" height="540" />
<p>Memories decay on FSRS-6 curves. Search strengthens them (Testing Effect). <code>dream</code> consolidates offline. The 3D dashboard shows pulses, connections, and dream replay in real time.</p>
<p><code>vestige dashboard</code><a href="http://localhost:3927/dashboard">localhost:3927/dashboard</a></p>
<h2>Vestige vs the rest</h2>
<table>
<thead><tr><th></th><th>RAG</th><th>Native AI memory</th><th>Vestige</th></tr></thead>
<tbody>
<tr><td>Forgetting</td><td>None</td><td>Opaque</td><td><strong>FSRS-6</strong></td></tr>
<tr><td>Local / private</td><td>Varies</td><td>Cloud</td><td><strong>100% local</strong></td></tr>
<tr><td>Contradictions</td><td>Both chunks</td><td>No</td><td><strong>deep_reference</strong></td></tr>
<tr><td>Fake &ldquo;tests passed&rdquo;</td><td>N/A</td><td>N/A</td><td><strong>Receipt Lock</strong></td></tr>
<tr><td>Visualization</td><td>None</td><td>None</td><td><strong>3D graph</strong></td></tr>
</tbody>
</table>
<p><a href="https://github.com/samvallad33/vestige/blob/main/docs/comparison.md">Full comparison (Mem0, RAG, native)</a></p>
<h2>Install</h2>
<pre>npm install -g vestige-mcp-server@latest
vestige health
claude mcp add vestige vestige-mcp -s user</pre>
<p>Also works with Codex, Cursor, VS Code Copilot, JetBrains, Windsurf, Xcode. See <a href="https://github.com/samvallad33/vestige/tree/main/docs/integrations">integration guides</a>.</p>
<footer>
Built by Sam Valladares (22, solo). Stats: <a href="../LAUNCH_STATS.md">LAUNCH_STATS.md</a> · Science: <a href="../SCIENCE.md">SCIENCE.md</a>
</footer>
</div>
</body>
</html>

View file

@ -7,8 +7,7 @@
"license": "AGPL-3.0-only",
"repository": {
"type": "git",
"url": "https://github.com/samvallad33/vestige",
"homepage": "https://samvallad33.github.io/vestige/"
"url": "https://github.com/samvallad33/vestige"
},
"scripts": {
"build:mcp": "cargo build --release --package vestige-mcp",

View file

@ -1,12 +1,8 @@
# vestige-mcp-server
**v2.1.23** — Vestige MCP Server: local cognitive memory and optional Receipt Lock for MCP-compatible AI agents.
Vestige MCP Server - A synthetic hippocampus for AI assistants.
- **Memory:** FSRS-6 spaced repetition, prediction error gating, dreaming, 3D dashboard
- **Receipt Lock:** blocks "tests passed" / "build green" without command receipts (optional hooks)
- **Stats:** ~86K LOC Rust · 25 tools · 1,200+ tests · 22MB binary · 100% local
Homepage: https://samvallad33.github.io/vestige/ · Repo: https://github.com/samvallad33/vestige
Built on 130 years of cognitive science research, Vestige provides biologically-inspired memory that decays, strengthens, and consolidates like the human mind.
## Installation
@ -58,25 +54,6 @@ codex mcp add vestige -- vestige-mcp
Then restart your MCP client.
## Optional Receipt Lock for Claude Code
Receipt Lock is part of Vestige's optional Cognitive Sandwich hook layer. Normal
MCP memory stays lightweight and local. If you want claim checking for summaries
like "tests passed" or "lint is clean," enable Sanhedrin and point it at any
OpenAI-compatible chat endpoint:
```bash
vestige sandwich install --enable-sanhedrin
vestige sandwich install \
--enable-sanhedrin \
--sanhedrin-endpoint=http://127.0.0.1:11434/v1/chat/completions \
--sanhedrin-model=qwen2.5:14b
```
If a claim is missing command evidence, Vestige writes local receipts under
`~/.vestige/sanhedrin/` so the veto is inspectable instead of opaque.
## Usage with Claude Desktop
Add to your Claude Desktop configuration:
@ -109,7 +86,6 @@ vestige sandwich install # Manage optional Claude Code hook files
## Features
- **FSRS-6 Algorithm**: State-of-the-art spaced repetition for optimal memory retention
- **Receipt Lock**: Optional command-receipt checking for test/build/lint/typecheck claims
- **Dual-Strength Memory**: Bjork & Bjork (1992) - Storage + Retrieval strength model
- **Synaptic Tagging**: Memories become important retroactively (Frey & Morris 1997)
- **Semantic Search**: Local embeddings via nomic-embed-text-v1.5 (768 dimensions)

View file

@ -29,7 +29,6 @@
"type": "git",
"url": "git+https://github.com/samvallad33/vestige.git"
},
"homepage": "https://samvallad33.github.io/vestige/",
"engines": {
"node": ">=18"
},

View file

@ -1,47 +0,0 @@
#!/usr/bin/env bash
# Pre-launch checks before Wave A posts.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
cd "${ROOT}"
FAIL=0
pass() { echo "OK $1"; }
fail() { echo "FAIL $1"; FAIL=1; }
echo "=== Vestige Launch Preflight ==="
command -v vestige-mcp >/dev/null && pass "vestige-mcp on PATH" || fail "vestige-mcp not found"
command -v npm >/dev/null && pass "npm available" || fail "npm missing"
VER="$(vestige-mcp --version 2>/dev/null || true)"
[[ "${VER}" == *"2.1."* ]] && pass "version ${VER}" || fail "unexpected version: ${VER}"
vestige health >/dev/null 2>&1 && pass "vestige health" || fail "vestige health failed"
[[ -f docs/LAUNCH_STATS.md ]] && pass "LAUNCH_STATS.md" || fail "missing LAUNCH_STATS.md"
[[ -f docs/launch/receipt-lock.md ]] && pass "receipt-lock.md" || fail "missing receipt-lock.md"
[[ -f docs/website/index.html ]] && pass "landing page source" || fail "missing website"
[[ -f .github/workflows/pages.yml ]] && pass "pages workflow" || fail "missing pages workflow"
if curl -sf --max-time 5 "https://samvallad33.github.io/vestige/" >/dev/null 2>&1; then
pass "GitHub Pages live"
else
echo "WARN GitHub Pages not live yet — push main and enable Pages → GitHub Actions"
fi
MARKETING_DIR="${HOME}/.vestige-marketing"
if [[ -d "${MARKETING_DIR}" ]]; then
pass "marketing data dir exists"
else
echo "WARN run scripts/marketing/setup-marketing-instance.sh"
fi
echo ""
if [[ "${FAIL}" -eq 0 ]]; then
echo "Preflight PASSED — ready for Wave A"
exit 0
else
echo "Preflight FAILED — fix items above"
exit 1
fi

View file

@ -1,29 +0,0 @@
#!/usr/bin/env bash
# Seed marketing Vestige with launch facts (separate from dev memory).
set -euo pipefail
MARKETING_DIR="${VESTIGE_MARKETING_DIR:-$HOME/.vestige-marketing}"
TAGS="marketing,baseline,vestige-launch"
ingest() {
vestige ingest "$1" --data-dir "${MARKETING_DIR}" --tags "${TAGS}" --node-type note
}
echo "Seeding into ${MARKETING_DIR}..."
ingest "Vestige v2.1.23 launch stats: ~86K LOC Rust, 25 MCP tools, 30 cognitive modules, 1200+ tests, 22MB binary, AGPL-3.0, npm vestige-mcp-server@latest, homepage samvallad33.github.io/vestige"
ingest "Wave A hook Receipt Lock: block operational claims like tests passed or build green unless matching command receipts exist. Optional vestige sandwich install --enable-sanhedrin. Veto receipts at ~/.vestige/sanhedrin/"
ingest "Wave B product: FSRS-6 spaced repetition memory, prediction error gating, memory dreaming, 3D dashboard localhost:3927, deep_reference contradictions, 100 percent local after embedding download"
ingest "Canonical install: npm install -g vestige-mcp-server@latest && vestige health && claude mcp add vestige vestige-mcp -s user. Do NOT tell users sudo mv unless manual binary install failed."
ingest "Messaging guardrails: no revolutionary game-changer AI-powered. Acknowledge Mem0 RAG native Claude memory honestly. Lead pain first tool second. Author Sam Valladares age 22 solo."
ingest "North star metric: weekly npm installs vestige-mcp-server and active MCP connections not stars alone. Track in docs/marketing/metrics-tracker.md"
ingest "Comparison anchor docs/comparison.md: RAG is retrieval, Vestige is cognitive lifecycle with forgetting consolidation Receipt Lock. Mem0 is cloud API Vestige is local AGPL."
vestige stats --data-dir "${MARKETING_DIR}" 2>/dev/null || true
echo "Baseline seed complete."

View file

@ -1,44 +0,0 @@
#!/usr/bin/env bash
# One-time setup: dedicated Vestige store + Claude Code MCP entry for marketing.
set -euo pipefail
MARKETING_DIR="${VESTIGE_MARKETING_DIR:-$HOME/.vestige-marketing}"
BIN_DIR="${HOME}/.local/bin"
WRAPPER="${BIN_DIR}/vestige-mcp-marketing"
echo "==> Marketing data dir: ${MARKETING_DIR}"
mkdir -p "${MARKETING_DIR}"
if ! command -v vestige-mcp >/dev/null 2>&1; then
echo "Install Vestige first: npm install -g vestige-mcp-server@latest"
exit 1
fi
mkdir -p "${BIN_DIR}"
cat > "${WRAPPER}" <<EOF
#!/usr/bin/env bash
export VESTIGE_DATA_DIR="${MARKETING_DIR}"
exec vestige-mcp "\$@"
EOF
chmod +x "${WRAPPER}"
echo "==> Wrapper: ${WRAPPER}"
if command -v claude >/dev/null 2>&1; then
if claude mcp list 2>/dev/null | grep -q vestige-marketing; then
echo "==> claude mcp: vestige-marketing already registered"
else
claude mcp add vestige-marketing "${WRAPPER}" -s user
echo "==> Added: claude mcp add vestige-marketing ${WRAPPER} -s user"
fi
else
echo "==> Claude Code not found — register manually:"
echo " claude mcp add vestige-marketing ${WRAPPER} -s user"
fi
echo "==> Seeding baseline memories..."
"$(dirname "$0")/seed-baseline-memories.sh"
echo ""
echo "Done. Open Claude Code with MARKETING-CLAUDE.md:"
echo " cp docs/marketing/growth-engine/MARKETING-CLAUDE.md ~/vestige-marketing-CLAUDE.md"
echo " vestige health --data-dir ${MARKETING_DIR}"