All notable changes to dig are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Canary release channel — every push to
mainpublishes bleeding-edge builds of all three artifacts: a rollingcanaryGitHub prerelease of the cross-compiled CLI (canary.yml;dig --versionreportsX.Y.Z-canary.<sha>),@vllnt/dig@canaryon npm (npm.yml), anddig-client.devNon PyPI (pypi.yml). npm and PyPI keep canary + release in one file each (OIDC trusted publishing, no tokens), gated onCANARY_ENABLED. Provenance/attestations are on now that the repo is public. Stable releases are tag-driven and gated behind maintainer approval — canary mode is the default (see.claude/rules/release.md). Runbook: docs/RELEASING.md. dig retain [file]— the agent-memory capture primitive: writes content (a file argument, stdin, or a rendered session via--transcript) into the KB at a dated, content-addressedmemory/path (--asto override,--datefor reproducible captures), then scans + indexes it as a reversible changeset, sodig find/dig recallsurface it. Path-escape guarded.- Session retention —
dig retain --transcript <session.jsonl>renders a Claude Code transcript to readable markdown (user + assistant turns, tool calls summarized; thinking, tool output, system reminders, and injected skill bodies dropped). A SessionEnd plugin hook (hooks/retain-session.sh) auto-captures finished sessions intomemory/sessions/— double opt-in (DIG_RETAIN_SESSIONS=1and a.digKB at the session's directory) and fail-open, so it can never block or break a session. dig recall <query>— the agent-memory recall primitive: a token-budgeted (--budget), provenance-tagged context pack ranked from the KB (text or--json), so an agent loads relevant memory without overflowing its context. Snippets land on the query-relevant window of each matched document (not its head), so recalling a long captured session returns the matching exchange.- Semantic + hybrid retrieval — opt-in vector index behind a
[retrieval]policy, embeddings via any OpenAI-compatible endpoint, stored in.dig/vectors.dbas a derived view with a blob-keyed cache.dig find --mode fts|vector|hybrid; hybrid fuses FTS and vector rankings with Reciprocal Rank Fusion. FTS stays the deterministic default. - Background semantic indexing — scans queue unseen blobs instantly;
dig embeddrains the backlog with per-file commits (interruptible, resumable) anddig watchdrains it per tick. An unreachable endpoint degrades gracefully and never blocks the deterministic spine. - Multilingual / cross-lingual recall — validated via config only (
model = "bge-m3"): a query in one language retrieves documents written in another. - Benchmark eval harness (
tools/eval) — LongMemEval, LoCoMo, and BEAM adapters scoring retrieval through the real pipeline (recall@k, hit@k, NDCG@10, MRR). Full LongMemEval-S: hybrid hit@5 98.0% vs the published 96.6% bar. Scoreboard indocs/evals.md. dig mcp— run dig as a Model Context Protocol server over stdio, exposing the CLI surface (find, recall, drift, log, export read-only; retain to capture into memory; org/reconcile preview-by-default with an apply flag; undo) as tools any MCP client can drive.dig_retain+dig_recallmake dig an agent's memory layer over MCP — capture a session, load a budgeted pack back, all reversible.dig serve— localhost HTTP+JSON daemon over the CLI contract (GET /find /recall /drift /log /export, POST /retain /org /reconcile /undo, apply-gated), so apps and SDKs embed dig without shelling out — including dig as a memory layer (/retaincaptures,/recallloads a budgeted pack). Binds loopback only — never public.@vllnt/digTypeScript SDK (clients/typescript) — dependency-free typed client over the daemon, incl.recall()/retain()memory methods (typedRecallPack); CI builds + tests it against a realdig serve. A singlenpm.ymlworkflow publishes both the canary (push) and the release (tag) via OIDC trusted publishing — no token.dig-clientPython SDK (clients/python) — stdlib-only client over the daemon, same surface incl.recall()/retain(); CI-tested against a realdig serve; a PyPI-publish workflow ships it on release (gated onPYPI_TOKEN).- Claude Code plugin (
.claude-plugin/) —/plugin marketplace add vllnt/digthen/plugin install dig@digbundles the dig skill + thedig mcpserver. - AI SDK tools (
@vllnt/dig/ai) —digTools(client)returns Vercel AI SDKtool()definitions for the dig surface, so an agent can search/organize a KB and use it as memory viadig_recall+dig_retain(write a decision, recall a budgeted pack later — mutations apply-gated, reversible).ai+zodare optional peer deps. - Configurable retrieval primitives —
[retrieval]policy gainsrrf_k,candidate_factor,chunk_size,chunk_overlaptuning knobs (0 = default, reproducing shipped behavior); changing chunk size/overlap re-embeds the KB. - Event sinks —
[[event_sink]]policy entries fire on every committed changeset:webhookPOSTs the event JSON;execruns a command (off unlessDIG_ALLOW_EXEC_SINKS=1). Sinks observe — a sink failure warns, never rolls back the commit. dig --version— build metadata (version, commit, date).- Release tooling — GoReleaser cross-compiles checksummed binaries for
linux/darwin/windows × amd64/arm64; a
vX.Y.Ztag publishes a GitHub release.
mainbranch protection hardened (enforce_admins, required CI checks) ahead of going public.