Engram changelog

Every release since 0.2.0. Generated from the project CHANGELOG at deploy time.

0.3.0 2026-09-12

Added

with the paper trail to prove it. Atomic deletes write a database

tombstone in the same transaction (schema v8); an access ledger

records every retrieval and export and is served at /audit/events

which memories a client touched since a timestamp, and which were

deleted since then (ids and hashes only, never content; schema v9).

Clients label their daemon traffic (X-Engram-Client) so the ledger

names the tool; deletes cascade through consolidation outputs (links

and embeddings); and deleted blobs are garbage-collected from the

sync relay (30-day retention). Removal is real, not "removed from

view."

(crates/engram-chat): capture into your local vault from chat with

four explicit triggers — /remember, @-mentions, emoji reactions

(Slack/Discord), and opt-in per-channel watch. Pull transports only

(Slack Socket Mode, Discord gateway with heartbeats, Telegram

getUpdates long polling with mention-entity detection and

/remember@Bot matching); tokens are env-only and keys never leave

your machine. Honest skips ("duplicate of …") reported back to the

user, daemon-down is logged and never retry-queued. Setup in

docs/engram-product/CHAT.md.

slack / discord / telegram (first-class daemon sources, schema

v7 via axiom-engram 0.1.5) instead of the generic chat, so

per-platform filters work without inspecting context.

(packages/engram-extension/) that captures the page you're on

(selection, title, or link) and searches the vault, straight to your

local daemon. Chrome, Edge, Brave & Firefox (121+); no build step.

Daemon verdicts rendered honestly. Docs in

docs/engram-product/EXTENSION.md.

the browser extension as shipped surfaces (the "coming soon" card is

gone).

a public changelog page (/changelog), a machine-readable version

endpoint (/version.json), and an RSS feed (/feed.xml) on the site

(all generated at deploy from this CHANGELOG), plus

engram update-check in the CLI and an update banner in the vault UI.

The installer is always the upgrade path — the checks only notify.

time (capture_tokens, dedup_tokens, context_tokens; one-time

backfill for old vaults), with the estimates labeled as estimates

(~4 chars/token, 0.4 g CO₂e per 1K tokens) and engram eco reading

the same counters. Keep-all mode (schedule.keep_all) gates daily

hygiene and weekly consolidation (scheduled and manual), and the

auto-decay switch is now actually wired.

0.2.0 2026-09-04

Added

vault: a Devices panel in Account & Sync (roster, rename, revoke),

engram devices list/rename/revoke in the CLI, and device labels that

survive daemon restarts. (b610919, e7aadbf, 656b112, c0f6e68)

member caps. (091477a)

phrase at signup (b18d7b7), and rotate it later from a modal in the

vault UI (871d324).

result now carries its source: `Engram · vault <id> · N of M

memories`, so you can always tell which facts came from Engram.

Search results keep their relevance scores end-to-end. (7417762)

memory count, QEM hit rate, sync state, vault id. engram mcp install

wires it in automatically and never clobbers an existing statusline.

(c680cce)

(lowercased, deduped, capped; generic tags like note dropped),

near-verbatim paraphrases are skipped with an honest report

(similar to <id> (cosine 0.97)), and engram_decay surfaces

near-duplicate pairs and stale working state for review — Engram

reports, the human decides. (882dd27)

name their source, alongside recall. (4c06136, 4ac880c, 839269b)

brief (vault id, memory count, last checkpoint, recent [mem <id>]

pointers) assembled from the daemon's health and search endpoints —

no LLM at brief time. engram mcp install merges Claude Code

SessionStart (engram brief --session) and PreCompact

(engram checkpoint) hooks into ~/.claude/settings.json without

clobbering existing settings, and skips commands already wired.

Daemon down → the brief prints nothing and exits 0.

(Session checkpoint: <cwd> — compacted at <time>, tag checkpoint,

source ai-session). No transcript content is stored — capture stays

explicit.

use a total order (score desc, then created_at desc, then id) in the

daemon and both MCP servers, so identical searches return identical

ordering — cache-stable retrieval between calls.

to cite retrieved memories as [mem <id>], prefer pointers to

quotes, and retrieve only what the task needs; the local server

documents the task:<name> reuse pattern and its engram_search

forwards a tags filter to the daemon.

session cost ($x.xx) and total tokens when Claude Code supplies

them (total_cost_usd, total_tokens); still one line, still exits

0 offline.

the fixes below as one comparable four-condition pass: recall stayed

100% (40/40) through Engram while answer output fell from the

2026-08-21 baseline's 1290.1 to 608.6 mean out-tokens per question

(two clean runs bracket 451–609), shrinking the output premium over

wholesale CLAUDE.md injection from 5.7× to 2.9×; in-tokens (7644) now

roughly match injection (7451) at k=100. Engram sessions still cost

the most in total tokens — "Engram reduces total tokens" remains not

established; see bench/runs/f3-v01/report.md.

Changed

writes a memory row per compaction. Boundaries now append one JSON line

to a vault-local session_boundaries.jsonl sidecar (never searched,

never in the feed, never synced), and the session brief reads the newest

line from there. Legacy checkpoint rows are migrated out of the memories

table into the sidecar on daemon start.

public repository, El-AI-Intelligence/engram-format (Apache-2.0, with

a normative FORMAT.md spec). This repository is now the proprietary

product. The private crates depend on the public crate as a git

dependency.

(856c014)

Fixed

memories with the daemon's [mem] attribution marks. (7417762)

instead of a misleading Stripe 400/502. (5724faf)

recovery-phrase warning now comes before the reset link. (e282e3c,

547816a)

embedded, so the similarity gate couldn't fire from it. Semantic

captures are now embedded before the write, exactly like the daemon

route. (7275908)

cannot carry the Authorization header the SPA uses for its fetches,

and the browser's auth cache is never primed (the basic-auth challenge

is deliberately stripped), so every handshake was refused. The SPA now

mints a single-use 60-second ticket (POST /ws/ticket, an ordinary

authenticated fetch) and attaches it to the upgrade; the daemon

redeems tickets itself, and the box proxy no longer basic-auths

/ws/events. (ee9168d)

stored): the upgrade was built from the page's host while the ticket

was minted against the loopback daemon, so the box rejected a foreign

ticket with 403 every retry. The WebSocket url now derives from the

same daemon base as the mint, so ticket and redeem always hit the

same daemon. (b20b5da)

from reaching loopback behind a Local Network Access permission (154

extends it to WebSockets), matching Chrome/Edge/Brave 142+ — the

#/connect guide explains the permission so "not detected" users can

allow it, and the daemon CSP plus repo Caddyfile gained the ws://

loopback entries to stay in sync with the deployed policy.

BERT's forward arguments in the wrong order, and the swapped

all-zeros "mask" drove every attention logit to f32::MIN

uniform attention over the whole sequence, so unrelated texts

compared at cosine ~0.9+. It went unnoticed because hybrid FTS

carried search recall until the 08-28 similarity gate made the

degeneracy visible. The argument order is fixed, hidden dropout is

zeroed (candle applies it unconditionally), and an ignored-offline

real-model test asserts embeddings discriminate. Note: vaults that

stored semantic blobs before this fix hold garbage vectors — a

re-embed sweep of existing blobs is a follow-up.

multiplied the whole scored map by 0.4, so when FTS matched nothing,

semantic hits landed at 0.6 × 0.4 = 0.24 of their cosine. The FTS

weight is now applied to FTS results at insert; vector-only entries

are untouched.

hook could resolve to an older installed copy lacking the new

subcommands and block session start or compaction. Hooks now carry

the absolute path of the binary that ran the install, and re-install

recognizes a bare engram brief/engram checkpoint as the same

command instead of stacking a duplicate.

Docs

memory, and how to tell which served an answer. (1684b70)

0.1.3 2026-08-26

Added

and search your synced memories from any MCP client over the relay, no

local daemon or signing required. Read-only by design; the relay never

sees plaintext. (321e8b0)

key with zero out-of-band transfer: request in the vault UI or via

engram team-handoff, an owner/admin seals it, and the relay carries it

in a zero-knowledge P-256 ECDH mailbox (ciphertext erased on delivery).

(922281c, 6ddaaf7)

connect-this-machine guide. (b24ed38, 06fc9e5)

Changed

Functional Source License with a 4-year conversion to MIT. Free to use,

modify, and self-host forever; the one restriction is offering Engram as

a competing hosted service. (b9382fe)

auto-captures. The policy is carried into every MCP session via the

instructions field, tool descriptions, health output, CLI

install/status, and both SPA capture surfaces. (a997528, 5e2581e)

(engram.ellmstack.dev), and passkey manager labels are the account

email. (8231b87, 79d404d)

devices) — upgrade your plan (Account & Sync → Billing, personal

$10/mo). (903995f`)

Fixed

new cwd-relative vault while the daemon used the configured one;

resolution now escalates exactly like the daemon. (ddc65c4)

(2708206)

Removed

is available; Linux/macOS artifacts ship as before. (707aa51)

0.1.2 2026-08-21

Per-vault pairing codes and cross-platform installer work.

Added

picker, flag-free redeem in the CLI. (af160a8, 103740a)

Changed

init-era text); install.ps1 is ASCII-only for PowerShell 5.1. (b8e23c6,

84d845a)

0.1.1 2026-08-21

Third-party QC security review remediation (2026-08-20) and a product

rename: the product is now presented as Engram by EL AI Intelligence

across the CLI, vault UI, landing page, installers, MCP tool descriptions,

and documentation (binary and package names are unchanged). Full scope:

daemon trust model, UI XSS, relay tenant isolation, KDF hardening, and

misc hardening — all findings reproduced against HEAD before fixing.

Security

the daemon's admin credential (ENGRAMD_API_KEY, or a daemon-generated

token persisted 0600 to {vault}/.handoff-token when the env var is

unset). Browser redeem stays token-only. (090e997)

the CORS layer no longer echoes arbitrary localhost:* ports; exact

origins only, ENGRAM_CORS_ORIGINS for development. (b6e9e81)

(incl. '), hrefs are encodeURIComponent-encoded, and a CSP

(csp_headers middleware + meta tag) plus X-Content-Type-Options and

X-Frame-Options: DENY are set on daemon responses. (17943b9)

bounded content/project lengths) and rejected items are reported in the

response. (17943b9)

unscoped ("account-wide") keys minted before this release are

policy-denied with a 403 that asks the device to re-link. Pair/link

mints carry a client-derived vault_id; key mints are refused for

vaults the account doesn't own. (e88a630)

start are rate-limited; login-passkey lookups are filtered and capped

per account. (e88a630)

Tls::Wrapper (opportunistic downgrade removed). (e88a630)

the account password; the SPA prompts when needed. (e88a630)

domain salt and higher Argon2id cost (96 MiB); unpinned devices probe

the relay and converge on whichever derivation (v2 or legacy v1) already

EXISTS, creating fresh vaults under v2. Pinned ids are untouched; a

rejected api_key aborts sync (daemon stays up). (247ca39)

overrides the passphrase-derived vault id and pins it into

config.json, so devices can join teams whose vault id was named by

hand (engram join) — passphrase convergence can never reach those. (9b70f31)

status and reports rejection bodies (401/403) instead of a false

"captured successfully". (8cdb5d1)

string (which previously matched the whole vault via lexical SQL

comparison) is rejected with 400 before anything is deleted. (8cdb5d1)

Fixed

configured) — no account enumeration via reset. (e88a630)

instead of placeholders. (8cdb5d1)

Docs

v2 convergence behavior, ENGRAM_CORS_ORIGINS usage. (this release)

0.1.0 2026-08-19

First public release. Passphrase-encrypted local vault, end-to-end

encrypted multi-device sync (dumb relay), passkey accounts + one-click

device linking/pairing, weekly digest, MCP server, browser vault UI,

Windows/macOS daemons, Docker image, Homebrew formula, apt/deb packaging.