Fixed
- Rerank warmup folded into bootstrap. 0.2.3 installed the
extra + restarted the watcher, but the first real
--rerank query
then timed out at the CLI's 6 s HTTP cap while the fresh watcher process
downloaded the ~500 MB model — silently falling back to stdio (embedder
ordering, not reranked). Bootstrap now issues a throwaway rerank warmup
against /search after restart, absorbing the model download
into the already-explicit setup phase. HTTP timeout for rerank calls lifted
to 90 s for headroom.
Fixed
-
uv tool install syntax for the rerank extra. --from <path> metalmind-vault-rag[rerank] is not valid uv
syntax. Switched to the positional <path>[rerank] form when
extras are requested; the no-extras path stays on --from <path>
metalmind-vault-rag. Caught live on first bootstrap run.
Fixed
- Rerank bootstrap now handles stale Python packages. Older
watcher versions don't expose
/rerank/status; a 404 response
used to be misread as "watcher unreachable" and the bootstrap silently
skipped. 0.2.2 distinguishes 404 (package predates the endpoint — run the
[rerank] reinstall, which also upgrades the package) from
connection-refused (no watcher running — stay hands-off).
UX fix on top of 0.2.0: stop asking users to run a weird-looking
uv tool install by hand. First
metalmind tap copper --rerankmetalmind recall --rerank
now bootstraps itself.
Changed
- Reranker bootstrap is now auto-on-first-use. When you run
tap copper --rerankrecall --rerank,
the CLI probes a new
/rerank/status endpoint on the watcher. If
FlagEmbedding is missing, the CLI runs the
[rerank] extra install itself, restarts the watcher
(launchctl on macOS, systemctl on Linux), polls until
the new process is ready, then proceeds with the rerank call. One-time
~1.2 GB download; zero-friction from then on.
-
installVaultRag (internal) gains an extras option;
watcher restart extracted into watcher-restart.ts for reuse.
Minor-rev bump: new recall tier, new optional dep group, Linux-real CI coverage, and
a landing-page positioning split. Nothing removed; everything opt-in.
Added
- Reranker tier (
tap copper --rerankrecall --rerank). Cross-encoder
(BAAI/bge-reranker-v2-m3) overfetches 4× from Qdrant and re-scores
before returning top-k. Closes the hit@1=70% → hit@5=90% gap the
recall-v0 bench exposed. Opt-in; first call downloads ~500 MB. Graceful
fallback if the dep is absent; themed first-load message when
METALMIND_FLAVOR=scadrial. (0.2.0 required a manual uv
install — 0.2.1 bootstraps automatically. See 0.2.1 below.) -
bench/recall-v0/ --rerank. Same runner, rerank mode
bumps timeout to 180 s for first-call warmup and records mode in the meta block.
- Linux CI matrix.
.github/workflows/ci.yml runs tests
on macOS + Ubuntu for every PR and push. publish.yml stays pinned to
macOS — release pipeline is intentionally not gated on Linux CI.
-
/forge site page. Dedicated pitch for the cross-repo
code-graph story — tiers of confidence, three-tier route extraction, commands
table, anti-persona. Closes item #8 from the 2026-04-20 product analysis.
Fixed
- Forge cache: spec-mtime invalidation. Route + merged-graph caches
were fingerprinted only against
graphify-out/graph.json mtime.
Editing a spec via forge capture-spec silently returned stale edges.
Per-repo fingerprint is now max(graphMtime, shelfSpecMtime).
Changed
- Homepage slimmed to memory. Four forge-related feature cards
collapsed into one dashed sibling card linking to
/forge.
No features removed — only repositioned.
-
teardown() internal signature. claudeDir
and settingsPath now required (no silent fallback to real
~/.claude). Private API.
Fixed
- Vanishing stamped block bug.
teardown() defaulted
claudeDir to the real ~/.claude when tests forgot to pass
one, causing every pnpm test run to strip the metalmind managed block
from the user's ~/.claude/CLAUDE.md and delete the session-start hook.
claudeDir and settingsPath are now required options — any
future test that omits them fails at the type level, not at the data-loss level.
Added
-
bench/mcp-tax-v0/ — reproducible first-turn token-tax
bench vs mem0, metalmind's stdio MCP fallback, and Claude Code native
/memory. pnpm bench:mcp-tax prints a copy-paste markdown
table; runs via Anthropic count_tokens when
ANTHROPIC_API_KEY is set, falls back to char/4 approximation otherwise.
Headline: ~2.5× lower than mem0 as shipped, ~8.4× lower
on the apples-to-apples MCP comparison.
Changed
- README + site surface forge (three-tier route extraction), steel
(rename), zinc (team-debug), and scribe (vault CRUD) as first-class features alongside
copper. New anti-persona section explicitly lists who should not install
metalmind.
Fixed
- Warm-path orphan-cache prune.
pruneOrphanRouteCaches() was only wired into
buildMergedGraph — loadOrBuildMerged short-circuits on a
warm merged cache, so orphan entries at ~/.metalmind/forge/routes/*.json
persisted across runs even after the source repo was deleted. Moved the prune call
up into loadOrBuildMerged so it fires on every invocation.
Added
- Tier 3 URL-literal route extraction (opt-in via
--include-literals). Scans ~15 text extensions for path-shaped string
literals as a last-resort fallback when OpenAPI specs and Java caller parsers miss.
Every edge carries INFERRED_URL_LITERAL provenance. Noise filter drops
static asset extensions.
- CI Node 24 opt-in via
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true in the publish workflow.
Keeps the pipeline unblocked through 2026-09-16.
Fixed
- Orphan route-cache pruning. First pass:
pruneOrphanRouteCaches() now runs at the top of
buildMergedGraph, deleting cache entries whose source repo is missing.
One-time cleanup of 33 stale entries from the local shelf.
Added
-
metalmind release-check — pre-tag preflight. Working
tree clean, on main, version sync between CLI and global install, tests pass, build
passes, doctor clean, stamped block present in ~/.claude/CLAUDE.md.
--skip-tests --skip-build for speed during debugging.
-
metalmind scribe rename + backlink rewriting. Moves a
vault note to a new kind/slug and rewrites every
[[wikilink]] reference across the vault.
Added
- Forge Tier 1 — language-agnostic OpenAPI route extraction. Reads
specs from a metalmind-managed shelf at
~/.metalmind/specs/<repo>.{yaml,json} — never from
inside the target repo. Satisfies the "single-dev tool, zero repo pollution"
constraint. metalmind forge capture-spec <repo> <url-or-file>
seeds the shelf.
- Forge Tier 2 — Java caller extraction. Regex-based parser for
RestTemplate (getForObject/postForEntity/exchange),
WebClient fluent chains, and Feign clients
(@GetMapping inside @FeignClient). Cross-repo
INFERRED_ROUTE edges now link Java callers to handlers in any target
language.
-
metalmind scribe (alias: note) — vault
note CRUD. Full flow: create · update · patch · delete · archive · list · show.
Stamps frontmatter, picks the right folder from kind, auto-links the
project MOC, supports --dry-run on every verb, accepts
kind:slug shortcuts. Soft-delete by default.
Fixed
- graphify subcommand rename. graphify removed
analyze; metalmind was still calling it. Switched all call sites to
graphify update.
Changed
- Flat
~/Knowledge/Plans/ layout. Plans are no longer
nested by project subdirectory — all plan notes live flat in Plans/,
grouped by project: frontmatter and a per-project MOC in
Work/MOCs/<project>.md.
- MOC template scaffold —
metalmind init now seeds a
starter Map-of-Content template.
Added
- OIDC trusted-publisher release pipeline. Publishes to npm via OIDC
+ sigstore provenance on every
v*.*.* tag. No
NPM_TOKEN secret required.
Fixed
-
metalmind --version now reads from
package.json (was a hard-coded string). Prevents version-drift
between npm view metalmind version and local CLI output.
Added
-
bench/recall-v0/ — reproducible recall-quality bench.
Current: hit@5 = 90%, hit@3 = 85%, hit@1 = 70%; latency median 45 ms / p95 87 ms.
Initial public release.
- One themed CLI (Scadrial verbs + Classic aliases).
metalmind init drives the whole install;
metalmind uninstall reverses it — never touches your notes. - Loopback-HTTP recall at
127.0.0.1:17317 as the default transport;
stdio-MCP as always-available fallback. - SessionStart hook + stamped
CLAUDE.md block teach Claude Code when to
recall, without injecting MCP tool schemas. - Per-repo code graphs via graphify; cross-repo merge in the metalmind
forge with
INFERRED_NAME edges. - Serena LSP backs
burn iron (symbol navigation) and
burn steel (coordinated rename). burn zinc dispatches to the /team-debug skill with the
code graph pre-primed.