claude-self-reflect
Persistent conversation memory for Claude Code. Semantic search across past sessions, session continuity detection, cross-project intelligen
Open source Repository Open in the app JSON README (API)
About
Persistent conversation memory for Claude Code. Semantic search across past sessions, session continuity detection, cross-project intelligence, and predictive context injection. Zero-dependency 45MB Rust binary with local embeddings - no API keys, no Docker, sub-millisecond search. 12 MCP tools + 6 hooks for automatic context enrichment.
Details
- Kind
- Plugins
- Topic
- AI, RAG & memory
- Publisher
- ramakay
- Origin
- marketplace
- Category
- ferramentas
- Stars
- 224
- Forks
- 29
- Open pull requests
- 10
- Last push
- 2026-08-25T14:03:11Z
- Repository state
- ativo
- Language
- Rust
- License
- MIT
- Added
- 2026-08-30 01:48:58
- Updated
- 2026-08-30 01:48:58
- Origin id
ramakay/claude-self-reflect/claude-self-reflect
README
# Claude Self-Reflect
<div align="center">
<img src="docs-site/public/favicon.svg" alt="Claude Self-Reflect" width="80" height="80" />
[](https://www.npmjs.com/package/claude-self-reflect) [](https://www.npmjs.com/package/claude-self-reflect) [](https://opensource.org/licenses/MIT) [](https://github.com/ramakay/claude-self-reflect/releases/latest) [](https://github.com/anthropics/claude-code) [](https://modelcontextprotocol.io/) [](https://github.com/ramakay/claude-self-reflect/tree/main/csr-engine) [](https://github.com/ramakay/claude-self-reflect) [](https://github.com/ramakay/claude-self-reflect/stargazers)
**Claude forgets everything. This fixes that.**
Single 44MB binary. No databases. No containers. No API keys required.
[Install](#install) | [How It Works](#how-it-works) | [MCP Tools](#mcp-tools) | [Paper](docs/plans/annaswamy-2026-similarity-drowns-intent.pdf) | [FAQ](https://ramakay.github.io/claude-self-reflect/#/docs/troubleshooting)
> **v9.4 — Multi-Source Memory**
> CSR now remembers more than transcripts: task outcomes, plan documents, and a cross-project session registry — each absorbed at the lifecycle stage it belongs to.
> Episodes carry real task state again (Claude Code's TodoWrite→TaskCreate rename had silently emptied them — found, fixed, and guarded with schema-miss telemetry).
> Sub-millisecond search, ~150ms cached startup, 720+ tests, zero external dependencies.
> [Release notes](https://github.com/ramakay/claude-self-reflect/releases/tag/v9.4.0)
<img src="docs-site/public/images/csr-demo.gif" alt="CSR Demo — Setup, Search, and Hooks" width="800" />
</div>
## Table of Contents
- [The Problem](#the-forgetting-problem) — Why Claude needs memory
- [The Architecture](#one-binary-44mb) — How CSR solves it
- [The Pipeline](#the-pipeline) — Progressive enrichment (9.3x improvement)
- [The Paper](#the-paper) — The research behind the retrieval design (preprint)
- [Install](#install) — One-command install, consent-first activation
- [What You'll Ask](#what-youll-ask) — Natural language, no syntax
- [Performance](#performance) | [MCP Tools](#mcp-tools) | [Hooks](#hooks) | [CLI](#cli-reference)
- [AI Narratives](#ai-narratives-optional) | [Upgrading](#upgrading-from-v7x) | [Troubleshooting](#troubleshooting)
---
## The Forgetting Problem
<a href="https://ramakay.github.io/claude-self-reflect/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs-site/public/images/card-01-hook-dark.png" />
<img align="right" src="docs-site/public/images/card-01-hook-light.png" alt="The Forgetting Problem" width="420" />
</picture>
</a>
Claude starts fresh every session. Solutions you found, architectures you designed, bugs you debugged — all gone.
Context retention drops below **20% after 10 sessions**. CSR fixes this with a single binary that gives Claude perfect memory.
No special syntax. No commands. Install once, and past context appears automatically when you need it.
<br clear="both" />
> **[Explore the full documentation →](https://ramakay.github.io/claude-self-reflect/)**
---
## One Binary. 44MB.
<a href="https://ramakay.github.io/claude-self-reflect/#/docs/architecture">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs-site/public/images/card-02-arch-dark.png" />
<img align="right" src="docs-site/public/images/card-02-arch-light.png" alt="Architecture — One Binary, 44MB" width="420" />
</picture>
</a>
Everything runs locally in a single process. No Docker, no database server, no API keys required.
- **SQLite** — storage for chunks, embeddings, enrichment state
- **HNSW** — sub-millisecond vector search (<1ms p95)
- **FastEmbed** — 384-dim local embeddings
- **AST** — code-aware search across 6 languages
**6 hooks** fire across the session lifecycle. **15 MCP tools** for explicit search — including `csr_code_graph`, linking code symbols to the conversations that shaped them.
<br clear="both" />
> **[Explore the full documentation →](https://ramakay.github.io/claude-self-reflect/#/docs/architecture)**
---
## The Pipeline
<a href="https://ramakay.github.io/claude-self-reflect/#/docs/enrichment">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs-site/public/images/card-03-pipeline-dark.png" />
<img align="right" src="docs-site/public/images/card-03-pipeline-light.png" alt="The Pipeline — 3 layers, 9.3x improvement" width="420" />
</picture>
</a>
Three layers progressively improve search quality from raw chunks to AI-enriched narratives — **9.3x improvement**.
Higher quality context. Better decisions. Fewer tokens.
<br clear="both" />
> **[Explore the full documentation →](https://ramakay.github.io/claude-self-reflect/#/docs/enrichment)**
---
## The Paper
<a href="docs/plans/annaswamy-2026-similarity-drowns-intent.pdf">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs-site/public/images/card-04-paper-dark.png" />
<img align="right" src="docs-site/public/images/card-04-paper-light.png" alt="Three-Trace Sagas — intent, deliberation, artifact" width="420" />
</picture>
</a>
CSR's retrieval design is documented in a research preprint, measured on the system's own development history:
> **Similarity Drowns Intent: Three-Trace Sagas and Reinstatement Recall for Provenance in Agentic Software Construction**
> 2026 — [PDF](docs/plans/annaswamy-2026-similarity-drowns-intent.pdf)
Ask a memory system "why did we drop Qdrant?" and cosine similarity returns a recording of you asking that question earlier, at 0.984 similarity. The decision itself scores lower than its own echoes. The paper measures this failure, the multi-hop walk built to counter it (+53% and +47% ground-truth session coverage over one-shot kNN on two corpora, pre-registered gates, blind cross-vendor judging), and a second finding that fell out of evaluation: a self-recording memory system ingests its own eval dialogue and drowns the answers it's being tested on. It also keeps its negative results — a pre-registered ratification-weighting hypothesis died at ρ≈0 and forbade an entire staleness design.
<br clear="both" />
---
## Install
```bash
curl -fsSL https://raw.githubusercontent.com/ramakay/claude-self-reflect/main/scripts/install.sh | sh
```
Downloads the binary (SHA256-verified), then asks before activating. Setup — which registers the MCP server, installs 6 hooks, and imports your conversations — only runs with your consent. Restart Claude Code after.
Non-interactive installs never activate on their own: set `CSR_AUTO_SETUP=1` to opt in, or run `csr-engine setup` yourself.
| Platform | Support |
|----------|---------|
| macOS (Apple Silicon) | Prebuilt binary |
| Linux x86_64 / WSL | Prebuilt binary |
| Linux ARM64 | Prebuilt binary |
| macOS (Intel) | Build from source |
<details>
<summary>Alternative: npm</summary>
```bash
npm install -g claude-self-reflect
csr-engine setup # activation is a separate, explicit step
```
By default `npm install` only downloads the checksummed binary — it does not touch `~/.claude` or index conversations. Activation happens when you run `csr-engine setup`, or set `CSR_AUTO_SETUP=1` during install to opt in.
</details>
<details>
<summary>Build from source</summary>
```bash
git clone https://github.com/ramakay/claude-self-reflect.git
cd claude-self-reflect/csr-engine
cargo build --release
cp target/release/csr-engine ~/.local/bin/
csr-engine setup
```
</details>
<details>
<summary><strong>What You'll Ask</strong> — after install, just ask Claude naturally</summary>
- *"How did we solve re-renders on this component?"*
- *"What did we tell Joe about that commit?"*
- *"What were our frustrations with this approach?"*
- *"Where did we put the auth middleware config?"*
No special syntax. No commands. CSR finds relevant past context and injects it automatically.
</details>
<details>
<summary><strong>Performance</strong> — sub-millisecond search, ~150ms cached startup</summary>
| Metric | Value |
|--------|-------|
| **Cached startup** | ~150ms (p50, 54K-chunk index) |
| **Search latency (p95)** | <1ms |
| **Binary size** | 44MB |
| **Import speed** | ~20 conversations/sec |
| **Embedding** | 0.73ms/text (batch) |
</details>
<details>
<summary><strong>MCP Tools</strong> — 15 annotated tools available to Claude</summary>
All tools include [MCP tool annotations](https://spec.modelcontextprotocol.io/specification/2025-11-05/server/tools/#annotations) so Claude Code understands their safety characteristics.
| Tool | Description | Safety |
|------|-------------|--------|
| `csr_reflect_on_past` | Semantic search across past conversations | read-only |
| `store_reflection` | Store insights for future retrieval | **writes** |
| `csr_quick_check` | Fast existence check (count + top match) | read-only |
| `search_by_recency` | Time-constrained search ("last week") | read-only |
| `get_recent_work` | "What did we work on?" with session grouping | read-only |
| `get_timeline` | Activity timeline with statistics | read-only |
| `csr_search_by_file` | Find conversations that touched a file | read-only |
| `csr_search_by_concept` | Theme-based search ("security", "testing") | read-only |
| `csr_search_insights` | Aggregated patterns from search results | read-only |
| `csr_get_more` | Paginate through additional results | read-only |
| `get_full_conversation` | Retrieve complete JSONL conversation | read-only |
| `get_session_learnings` | Iteration-level memory for Ralph loops | read-only |
| `csr_code_graph` | Which conversations shaped a function or file (AST anchors) | read-only |
| `csr_why` | Provenance chain — why does this code/decision exist | read-only |
| `csr_resolve` | Record verified verdicts (resolved/still_open/regressed) on chunks | **writes** |
</details>
<details>
<summary><strong>Hooks</strong> — 6 session lifecycle hooks</summary>
| Hook | What it does |
|------|-------------|
| **SessionStart** | Surfaces relevant past context at conversation start |
| **UserPromptSubmit** | Predicts and injects context before Claude responds |
| **PostToolUse** | Tracks file edits with session-scoped dedup |
| **Stop** | Stores iteration learnings, detects stuck patterns |
| **PreCompact** | Backs up state before context compaction |
| **SessionEnd** | Stores session narrative for future retrieval |
All hooks use catch-all error handling. They never block Claude Code.
</details>
<details>
<summary><strong>AI Narratives</strong> — optional 9.3x quality boost</summary>
Transform raw conversations into rich, searchable narratives. Requires an Anthropic API key.
```bash
csr-engine daemon
```
| Metric | Without | With AI Narratives |
|--------|---------|-------------------|
| Search quality | 0.074 | 0.691 (9.3x) |
| Token compression | 100% | 18% (82% reduction) |
| Cost per conversation | - | ~$0.012 (Batch API) |
> **Token transparency:** Optional AI narratives (session briefings + story extraction) run
> `claude -p` against your existing Claude subscription — smallest available model, capped
> prompts, debounced, and skipped entirely when nothing changed. Every call — including failures and timeouts — is counted:
> `csr-engine status` shows calls and tokens spent today; cache read/creation tokens (often
> the majority of real usage) are tracked separately in the status JSON (`cache_tokens_today` /
> `cache_tokens_total`). Disable anytime with
> `CSR_NO_AI_NARRATIVES=1`; pin a model with `CSR_NARRATIVE_MODEL=<model>`.
</details>
<details>
<summary><strong>CLI Reference</strong></summary>
```
csr-engine Start MCP server (default)
csr-engine setup One-shot setup: import + MCP + hooks
csr-engine status System status (JSON)
csr-engine status --compact One-line statusline output
csr-engine daemon Background enrichment daemon
csr-engine hook install --apply Install Claude Code hooks
csr-engine eval Quick eval (5 tests)
csr-engine eval --full Full eval (20 tests)
csr-engine quality <file> AST-based code quality analysis
```
</details>
<details>
<summary><strong>Upgrading from v7.x</strong></summary>
v8.0 replaces the Python/Docker stack with a single Rust binary.
```bash
docker compose down 2>/dev/null
curl -fsSL https://raw.githubusercontent.com/ramakay/claude-self-reflect/main/scripts/install.sh | sh
```
Your conversation data (`~/.claude/projects/`) is untouched. The new engine re-imports from the same JSONL files.
</details>
<details>
<summary><strong>Troubleshooting</strong></summary>
| Symptom | Fix |
|---------|-----|
| No search results | Run `csr-engine setup` |
| MCP tools not available | Run `csr-engine setup`, restart Claude Code |
| "spawn ENOENT" in MCP | Ensure `csr-engine` is in PATH |
| Slow first startup | Normal (~14s for index rebuild, subsequent: ~150ms) |
Full guide: [Documentation](https://ramakay.github.io/claude-self-reflect/#/docs/troubleshooting)
</details>
<details>
<summary><strong>Uninstall</strong></summary>
```bash
claude mcp remove claude-self-reflect
rm -rf ~/.claude-self-reflect/
rm ~/.local/bin/csr-engine
npm uninstall -g claude-self-reflect # if installed via npm
```
</details>
<details>
<summary><strong>Contributors (v1–v7)</strong></summary>
- **[@TheGordon](https://github.com/TheGordon)** - Fixed timestamp parsing (#10)
- **[@akamalov](https://github.com/akamalov)** - Ubuntu WSL insights
- **[@kylesnowschwartz](https://github.com/kylesnowschwartz)** - Security review (#6)
</details>
---
[Documentation](https://ramakay.github.io/claude-self-reflect/) | [npm](https://www.npmjs.com/package/claude-self-reflect) | [Issues](https://github.com/ramakay/claude-self-reflect/issues) | MIT License