Skip to content

Perseus Vault v2.13.0 — workspace isolation, retention semantics, /memories, dense prefilter

Choose a tag to compare

@tcconnally tcconnally released this 02 Jul 02:07
a3ddb46

The largest release since the Perseus Vault rename — 24 PRs spanning v2.9.0→v2.13.0, with three schema migrations (v4→v6), full multi-workspace isolation, a coherent retention policy, and two new integration surfaces.

Security & isolation

  • Workspace isolation, end to end. context/recall_when/prepare/gRPC now accept a workspace scope (#338); entity identity is (category, key, workspace_hash) with a migrated unique index, so share/federate copy instead of destructively moving the source row (#342); near-duplicate detection no longer swallows one workspace's writes into another's (#338); dashboard endpoints workspace-scoped (#346).
  • Prompt-injection hardening: untrusted entity bodies are neutralized before splicing into <memory-prep>/context blocks (#337); AAD delimiter collision fixed with rekey_aad migration (#329).

Retention & memory semantics

  • Documented forgetting policy — new docs/retention.md: the decay curve, the ~21-day auto-archive point, and every exemption.
  • Unified constants (#337): one archive threshold across decay_tick/cohere/autocohere; promotion at WORKING_THRESHOLD everywhere; verified facts floored, never auto-archived.
  • Persistent importance (#344): an explicit mimir_score now survives every decay recompute as a floor — fidelity beats recency.
  • Opt-in reinforcement (#343): reinforce: true on dense/hybrid recall makes used memories resist decay; the default stays byte-deterministic.
  • Local dreaming (#350): autocohere now consolidates the coldest overlapping memories into evidence-tracked observations and retires the merged sources (verified/importance-floored sources exempt) — compression instead of loss, running in the background.
  • Follow-rate efficacy scoring (#332): memories that get followed, not just recalled, resist decay; ignored rules fade.

New surfaces

  • mimir_memories (#345): Anthropic memory-tool directory convention (view/create/str_replace/insert/delete/rename under /memories) — clients built against Claude's native memory tool work against the vault unchanged, with FTS search, encryption at rest, and versioned edits for free. 49 tools total.
  • perseus-vault prepare (#336): pre-turn auto-injection — one CLI call returns the <memory-prep> block for a hook to splice into the system prompt, now workspace-scopable with --workspace.
  • perseus-vault connect (#333): one-command MCP client setup (Claude Code, Codex, Cursor, VS Code, Hermes).

Performance

  • Dense search signature prefilter (#347): sign-bit signatures (schema v6) Hamming-prefilter candidates above 2048 embedded rows — ~30× less scan I/O, exact-cosine re-rank, zero new dependencies, byte-identical below the cutover.
  • Graph arm batched (#340): graph_expand's N+1 point-queries → chunked batch hydration; consolidate's O(n²) trigram rebuilds → cached sets.
  • Hybrid recall gains a graph-expansion arm (#326): entities linked to a strong hit surface even when they rank poorly on keywords or embeddings alone.

Fixes worth knowing about

  • Revived entities (forget → remember) were silently unsearchable forever — FTS row now restored (#345).
  • mimir_remember/mimir_recall accept explicit JSON null on optional fields (#334).
  • as_of zero-width history window, stale serverInfo.name, DOCX self-closing-tag corruption, and a build-break from two textually-clean-but-semantically-conflicting merges (#331, #324, #349).

Migrations: schema v3→v6 apply automatically and irreversibly on first open (unique-index swap, importance, emb_sig + signature backfill). Back up the DB file before upgrading if you may need to roll back the binary.

🤖 Generated with Claude Code