v0.7.0
Performance, benchmark honesty, and the native-memory bridge.
Performance
- Embeddings stored as packed float32 blobs (~3.9× smaller than JSON text) with an
in-process cache of unit-normalized vectors — dense search/dedup no longer
json.loadsevery scoped embedding per query; cosine is a dot of two cached unit
vectors. Measured A/B vs the previous engine: densesearch()10–29× faster and
the speedup grows with store size (at 6k memories, 8.1 s/query → 0.28 s). Still
zero-dependency (stdlibarray, no numpy). - Lexical search pushes
ORDER BY bm25 LIMITinto SQLite instead of Python-scoring
every term match. - Batched reindex via Ollama
/api/embed(32/req, per-item fallback) and startup
warmup/reindex moved off the bind path (no lazy-spawn port race). - MCP tool calls run in-process instead of a
python ygg.pysubprocess per call,
with stdout/stderr separated so--jsonstays parseable. - Index on
(user_id, namespace, created_at)for the session-start hook'sget_all.
Changed
- Embedding model is versioned per row. Switching
YGG_EMBED_MODELmarks old vectors
stale and reindexes them, instead of comparing vectors across models.ygg doctor
counts model-mismatched rows. - Benchmark reporting is credibility-first.
eval/ygg_eval.py --reportleads with
holdout recall@1 (weights tuned on dev only): 0.93 within a project, 0.80 full-corpus,
recall@3 = 1.00 in both. Discloses candidate pool sizes (min 2 / median 6 / max 35) and
95% bootstrap CIs. README badge → holdout 0.93; BENCHMARKS.md + all 6 translations
rewritten to the honest two-view framing.
Added
ygg export-native --project P— the native-memory bridge: writes a curated,
type-grouped digest of a project's memory into a managed block inAGENTS.md/MEMORY.md
(idempotent; preserves hand-written content). Pairs withygg seed(which imports from
the native memory) so Yggdrasil is the layer above Claude Code's and Codex's own memory,
feeding them both ways.ygg review [--apply]— work the governance queue from the CLI: consolidate exact/
near duplicates (keep the oldest, archive the rest) and surface stale/conflict markers.
Interactive on a TTY;--apply --yesauto-consolidates duplicates and flags stale markers
for manual review. Everything is archived (reversible), never hard-deleted.- Ranking parity — a pinned or frequently-recalled memory retrieved only by vector now
gets its pin/usage boost, via the same channel lexical hits use.
Security
- Engine-side secret guard — a raw
POST /addbypassing the CLI now also refuses obvious
credentials (AWS keys, JWTs, GitHub/GitLab PATs, private keys, connection-string passwords).
High-confidence structured tokens only, so memories that merely mention "password"/"secret"
are unaffected.
Fixed
- Cross-platform
hw()— Linux/proc/meminfo+/proc/cpuinfo(+ nvidia-smi), Windows
PowerShell CIM; the model recommender no longer sizes off 0 GB off-macOS. - First-hour polish — actionable port-conflict hint instead of a traceback; non-interactive
install announces the lexical-only fallback.