Releases: Goldentrii/AgentRecall-X
Release list
v3.4.40 — Naming at scale: classifier fix, hygiene trash scan, root MANIFEST, hot-path perf
[3.4.40] — 2026-07-27
Patch release: the naming-at-scale wave — slug/theme quality, hot-path performance, store self-description, and the hygiene "trash scan".
Fixed
- Theme/sig classifier over-matching:
autoClassifyTheme/autoClassifySigmatched vocabulary, not conditions —\bmcp\btreated the hyphen in "novada-mcp" as a word boundary, so any summary mentioning that project name classified asmcp-unavailable(measured: 29/32 = 90.6% of one project's journal filenames). Classifiers now require co-occurring condition signals in the same clause; misclassification drops to 1/31 with the survivor genuine. Two shadow epidemics (version-bump,agent-fix) that would have surfaced behind the first fix are fixed in the same pass. Enums unchanged — old filenames parse forever. alignmentKPI staleness: the session_start scan-dedup initially threaded a pre-write snapshot intogetCorrectionKPIs, makingalignmentnull exactly when a never-retrieved P0 was first surfaced. The KPI call site reads fresh after this call's own retrieved-outcome writes (caught by independent integration review, pinned as a regression test).
Added
ar hygiene— the trash scan: 8 detection-only store checks (junk/test project dirs, ambient-counter accumulation, theme epidemics, case-fold fork dirs, stale derived caches, root-level credential patterns, missingcorrections/_index.md, reserved-word slugs) with a baseline so repeat runs report only NEW findings. Detection-only by contract: it never deletes, renames, or quarantines; every finding carries anagent_instruction; secret findings report pattern name + line number, never the matched text. Fresh RED findings → exit 1 (cron-friendly). Not part of the MCP tool surface.- Store-root
MANIFEST.md(write-once, generated beside the per-projectMEMORY-PROTOCOL.md): makes a bare store directory self-describing for any agent with filesystem access — cold-agent read order, sync / never-sync / regenerable file classification (config.jsonexplicitly marked never-sync, do-not-read), and a condensed naming-grammar cheat-sheet. All paths store-root-relative; theMEMORY-PROTOCOL.mdtemplate's hardcoded~path is now root-relative too.
Performance
- session_start corrections scans: 4 → 2. One shared snapshot feeds P0 surfacing, prediction, and recognition; the KPI computation deliberately re-reads after this call's own outcome writes (see Fixed). At the measured 50k-file extreme this cuts ~2s from every session_start.
- Legacy journal index (
index.md/index.jsonl) is incremental: only files with mtime newer than the index are re-read; unchanged rows merge from the previousindex.jsonlby filename. It previously re-read every journal body TWICE perjournal_write/rollup/merge/archive (2.8s at 50k files; now pays only for what changed). Kept rather than removed because a live MCP resource (agent-recall://{project}/index) reads it verbatim.
v3.4.39 — Codex audit hardening + CJK slug-collision fix
[3.4.39] — 2026-07-27
Patch release: the 2026-07-25 Codex audit fixes (Release Trains A–D, all 8 findings reproduced-then-fixed) plus ambient-recall groundwork.
Fixed
- Silent correction loss on slug collision (found by a performance round-table during this release, reproduced before fixing): two distinct same-day corrections whose rules sanitize to the same slug were written to the same file — the second silently overwrote the first while both callers saw
written: true. Pure-CJK rules made this the common case (every Chinese-only rule collapsed to the bareunnamedfallback). Two-layer fix:sanitizeName's degenerate fallback is nowunnamed-<hash8>(content-hashed, deterministic), and brand-new correction writes disambiguate an occupied filename with an id-hash suffix inside the slug field (the--delimiter grammar is preserved). Same-rule merging is unchanged. This also stops distinct pure-CJK project names from collapsing into one sharedunnamedstore directory. Migration note: a store that already has a bareunnamed/project directory (only possible if a pre-3.4.39 session ran with a fully-degenerate project name) will see new sessions write to the correctly-hashed directory instead — the old commingled directory stays readable on disk but no longer accumulates writes. That directory was already a defect (every degenerate project name shared it); resuming writes into it would preserve the bug. - Concurrency:
recordOutcome/retractCorrection/ merge-consolidation read-modify-write cycles now run inside the per-project file lock — concurrent sessions can no longer drop outcome-ledger rows or regenerate a stale index (TOW2-321). - Retrieval fusion:
smart_recallcross-source fusion accumulates RRF scores on a canonical excerpt identity instead of object identity — the same fact found by 2–3 searchers now ranks above single-source hits, withalsoFoundInprovenance and true pre-fusiontotal_searchedcounts. Insight items carry a real fusion identity (title + excerpt), not severity + tags (TOW2-330, TOW2-331). - CJK matching: the check-action tokenizer is CJK-aware — Han runs segment via
Intl.Segmenterwith bigram fallback, and the token length floor is script-scoped — so Chinese P0 rules now match Chinese action descriptions (TOW2-325). Chinese absolute-prohibition markers (禁止 / 不得 / 不能 / 不要, with idiom guards for 不得不 / 不能不 and benign 不要-completions) join the durable-rule behavioral gate (TOW2-326).
Added
- Outcomes ledger rebuild:
ar outcomes rebuild --project <slug> [--apply] [--json]+ a store-doctor divergence check — counters are recomputable from the append-only ledger; malformed rows are quarantined, dry-run is the default, apply runs inside the same lock as normal writes (TOW2-322). - SDK modern composite API:
sessionStart/remember/recall/sessionEnd/checkon theAgentRecallclass — 1:1 with the MCP tools of the same names, additive alongside the existing low-level API (TOW2-323). - 3-tier host profiles: hooks (Tier A, Claude Code) / mcp-instructions (Tier B, Codex, Cursor, raw MCP) / manual (Tier C, SDK + CLI), with
AR_HOSToverride;lifecycleInstructions(tier)is the one canonical source both MCP server instructions and skill docs render from (TOW2-327). - Idempotent lifecycle + local telemetry:
session_startclaims are once-per-session-per-project,session_enddedupes by content fingerprint, and an append-only JSONL telemetry ledger (lifecycleStats()) records event counts by host tier — local-only, never leaves the machine (TOW2-328). - Pre-action P0 blocking in
check: passaction_descriptionand the defaultchecktool consults active P0 corrections before the action runs — no extra tool call on the 5-tool surface (TOW2-329). - Ambient topic profile (CLI): a rolling 8-turn topic state with distance decay powers ambient-recall precision tiers, so background conversation informs what gets recalled (TOW2-340).
CI
- Full test suite + typecheck wired into
ci.yml(SHA-pinned actions, failure-log artifact). The 2 tracked known gaps (SDK root isolation TOW2-324; standalone-prohibition capture design TOW2-326) aretodo-marked, so a red CI now means new breakage only (TOW2-318).
Security
- 10/12
npm auditfindings resolved via transitive bumps (TOW2-320). The remaining 2 are the documented Hono / MCP-SDK pair whose fix requires a transport-removing SDK downgrade — tracked, not silently accepted.
v3.4.38 — Naming System v2: the filename is the index
Naming System v2 — the filename is the index
Designed by a 5-seat round table (standards research · cold-start testing · retrieval engineering · robustness · taste), spec + arbitration record in docs/proposals/2026-07-20-naming-v2-spec.md.
A 10-question cold-start test scored the old naming at 55%, and proved filenames alone top out at ~75–80%. v2's answer is a two-audience split: the filename is the human/triage index (immutable-at-birth fields only — printed none--none nulls are gone), and a materialized _index.md per store is the machine fast-path (severity-sorted for corrections, regenerated atomically on every write). Names + ≤3 pinned index files ⇒ 90%+ cold-start orientation, honestly.
Highlights
- Per-store grammar: journal
{date}--{saveType}--[{sig}]--[{theme}]--{slug}.md(nulls omitted); corrections{date}--{rule-slug}.json— slug from the rule, not the trigger utterance (EN + CJK interjection stripping, full-width punctuation aware). - One sanitizer: lowercase + NFC + byte-capped;
agentrecall/AgentRecallcan no longer split your corpus on case-sensitive filesystems (existing-dir reuse, deterministic fork resolution). A source-level guard test makes raw project-path construction outsidepaths.tsunrecreatable. - Materialized indexes:
corrections/_index.md·journal/_index.md·rooms/_index.md— atomic, never fail the underlying write. - Race & fork fixes: same-day journal TOCTOU under per-project locks; rewrite paths reuse on-disk filenames (no orphan duplicates);
_index.mdcan't knock a project off the status board; FSRS reinforce no longer starves uppercase-slug legacy skills.
Migration
Zero-rename, new-writes-only. Existing files keep their names forever; all legacy naming generations keep parsing. Deferred to v2.1 (spec §7): room/topic-level case-fold, sig/theme vocabulary pruning.
Verified: 994/994 tests across 4 packages · tool-surface guard untouched (15/15) · 2 independent code reviews, all CRITICAL/HIGH closed.
Full Changelog: v3.4.37...v3.4.38
v3.4.37 — RD-1 cross-project recurrence detection + harness kit
RMR Wave 3 — Cross-project recurrence detection + reflection harness kit
Every recurrence the detector had ever recorded was within-project — a known pattern violated again in a different project was invisible by construction. v3.4.37 gives corrections a failure_class (stamped by a keyword classifier at capture, zero new deps) and adds a cross-project class join at session-end.
The eval on the live corpus cleared the workpacket's Phase-0 gate: the first cross-project detection the system has ever made — a model-dispatch violation linked to its 2-month-older ancestor in another project — with 0/53 false positives on stride negatives and all pinned baselines unshifted.
Highlights
- RD-1 —
failure_classat capture: 9-value enum (publish_gate,naming_violation,model_dispatch,skipped_verify,confidential_leak,framing_error,scope_violation,wrong_ref,other), stamped by a tokenize/overlap keyword classifier. Additive & optional — old records read asother, never rewritten. - Cross-project recurrence join at session-end — a rule violated again in a different project is now detectable.
- Experimental harness kit (
experimental/harness-kit/): the four memory verbs (/arstart·/arsave·/arrecall·/arreflect), a health scoreboard, an error-class taxonomy, and a periodic/arreflectloop that hunts phantom gradient steps — corrections whose rule was encoded yet whose error class recurred anyway.
Install / upgrade
claude mcp add --scope user agent-recall -- npx -y agent-recall-mcpnpm: agent-recall-mcp@3.4.37 · SDK agent-recall-sdk · CLI agent-recall-cli
中文 TL;DR — 复发检测过去只能看到「项目内」的重复;本版给纠正记录加 failure_class(捕获时关键词分类,零新依赖)+ session-end 跨项目类别 join。真实语料 eval 通过 Phase-0 门:史上第一次跨项目检出(一次 model-dispatch 违规连到另一项目中早它两个月的始祖),负样本 0/53 误报。随附实验性 harness 套件:四个记忆动词 + 健康记分牌 + 错误税则 + 定期 /arreflect 猎捕「幻影梯度步」(规则已编码、同类错误却照样复发)。
Full Changelog: v3.4.36...v3.4.37
v3.4.36
v3.4.34
v3.4.33
v3.4.32
What's Changed
- feat: war room install page, preview screenshot, README polish by @Goldentrii in #30
- docs: install.html screenshot + Quick Start visual guide callout by @Goldentrii in #31
- docs: replace install preview screenshot (client picker view) by @Goldentrii in #32
- docs: add Dreaming section to README by @Goldentrii in #33
- seo: comparison table vs Mem0/Zep/Letta + expand npm keywords by @Goldentrii in #34
- feat: add mcpName for MCP registry submission by @Goldentrii in #35
Full Changelog: v3.4.30...v3.4.32
What's Changed
- feat: war room install page, preview screenshot, README polish by @Goldentrii in #30
- docs: install.html screenshot + Quick Start visual guide callout by @Goldentrii in #31
- docs: replace install preview screenshot (client picker view) by @Goldentrii in #32
- docs: add Dreaming section to README by @Goldentrii in #33
- seo: comparison table vs Mem0/Zep/Letta + expand npm keywords by @Goldentrii in #34
- feat: add mcpName for MCP registry submission by @Goldentrii in #35
Full Changelog: v3.4.30...v3.4.32
v3.4.30
What's Changed
- fix: 要求显式配置 Supabase 后再读取仪表盘归档 by @leirt97 in #18
- release: v3.4.30 — onboarding & distribution (docs/packaging; publish held) by @Goldentrii in #29
New Contributors
- @leirt97 made their first contribution in #18
- @Goldentrii made their first contribution in #29
Full Changelog: v3.4.23...v3.4.30
v3.4.23 — Memory as Environment (V4 Sprints 0-2)
This release ships the V4 thesis: stop making memory something the agent uses — make it something the agent lives inside. Grounded in a corpus-measured performance check (PERF-CHECK-2026-06-12) and its core finding, the Automaticity Law: agents only use memory that arrives unasked — pull tools showed zero organic usage; push channels changed behavior for weeks.
Highlights
⚡ Recall latency: 10.5s → 2.5s → ms. The embedding fetch had no timeout; every recall paid a ~10.5s network round trip. Now: 2s abort + parallel local fallback + honest degraded field + per-process circuit breaker.
🎯 The learning loop is measurable. Outcome events (retrieved / heeded / recurred) are recorded fully automatically — no agent action required. session_start now opens with the north-star line: 🎯 Alignment: 86% corrections heeded (12/14). Absent until real data exists — no fake claims.
🔁 Insights compound. Near-duplicate insights now CONFIRM existing entries (containment ≥0.6) instead of piling up as new count-1 entries. Cap eviction protects confirmed insights. The funnel that was 99% dead now flows.
🧹 Correction hygiene. Write-time quality gate rejects acknowledgment fragments ("No, that's wrong") while preserving preference statements ("User wants beige/warm palette"). retractCorrection() + triage script; 64 legacy noise corrections retracted (reversible).
🧰 Default surface: 5 tools — session_start, session_end, remember, recall, check. Everything else behind --full. Two-verb model: inhale and exhale; the rest fires at moments via hooks (ar hook-pretool warns on publish/push/destructive commands; hook-ambient gains a precision floor — silence over noise).
📦 Portable memory. Every session_end auto-writes projects/<slug>/handoff.md — a ≤500-token cross-agent briefing (binding rules, blockers, top insights, trajectory) you can paste into any agent, MCP or not.
Install
claude mcp add --scope user agent-recall -- npx -y agent-recall-mcpExisting users: the default tool surface shrinks to 5; add --full to the args for the complete surface.
Traceback
UPDATE-LOG.md → Release v3.4.23 · V4-PLAN.md · Suites: consistency 10/10, funnel 18/18.