copper · recall · savetap copper · store copper

The headline. The thing the rest of the library compounds back into.

Save once. Recall stays sub-620 ms p95 at 50,000 notes. Zero standing tool-schema tax. Your notes stay plain markdown in your own folder (Obsidian-compatible - open them in any editor, in any tool, on any device) - Claude reads them verbatim, not as LLM-extracted summaries.

01

Save once

savestore copper deposits a decision into your local markdown vault (Obsidian-compatible). metalmind proposes the path, wikilinks, and frontmatter; you approve; it writes.

02

Recall, no MCP tax

recalltap copper is a Bash call, not an MCP tool. Zero schema bloat per session. A loopback HTTP server inside the watcher handles calls in sub-100 ms; stdio MCP is the always-on fallback.

03

Session-start awareness

A SessionStart hook plus a stamped block in ~/.claude/CLAUDE.md teach Claude when to recall - no "did you check memory?" prompting, ever.

04

Vault writes without drift

notescribe is the CRUD interface agents use instead of raw Write. Nine verbs - create, update, patch, supersede, delete, archive, rename, list, show. It stamps frontmatter, picks the right folder, auto-links the project MOC, and rewrites [[wikilinks]] across the vault on rename.

05

Decisions that supersede, not vanish

note supersedescribe supersede <old> <new> marks a decision replaced by its successor. Recall drops the old note to 0.4x and every hit from it carries superseded_by, so an agent lands on current truth without the history being deleted.

06

Claims checked against the code

A note can carry code: ["repo#symbol"] refs. --verify-code and doctor flag refs whose symbol no longer exists in your forge-registered repos - the decision outlives the code, but you find out when it does.

07

Native memory as a feeder

metalmind ingest auto-memory imports Claude Code's own auto-memory topic files into the vault as Memory/ notes - hash-guarded and idempotent, and it reports a conflict rather than clobbering a note you edited.

08

Fusion that reads the query

Exact-match tokens (UUIDs, ticket IDs, hostnames) raise the keyword leg automatically. Fused scores are folder-weighted - Archive/ 0.4x, Inbox/ 0.7x - so stale notes re-rank below in-flight work instead of being excluded.

§ Recall benchmarks

Quality holds at scale.

Hybrid retrieval (semantic + BM25 fused via RRF, with optional cross-encoder rerank). Two benches: a hand-authored fixture for precision, and a 50,000-note corpus for scale.

vault sizehybrid hit@1hybrid hit@5+rerank hit@1+rerank hit@5
12 notes90%95%90%95%
100 notes85%95%90%95%
500 notes85%90%90%95%
1,000 notes85%85%90%95%

And on a corpus of 50,000 Hacker News comments, hybrid, no rerank - the run that decided whether the in-process backend could stand alone:

vault sizehit@1hit@3hit@5indexp95
1,000 notes100%100%100%35 s37 ms
10,000 notes100%100%100%7.5 min160 ms
50,000 notes95%100%100%68 min617 ms

Zero misses at k=5 at every scale. 50× the corpus costs ~15× the query latency, with no server and no daemon. Reproduce with node bench/recall-at-scale/run.mjs.

Claude never meets you cold again.