Skip to content

Releases: Goldentrii/AgentRecall-X

v3.4.40 — Naming at scale: classifier fix, hygiene trash scan, root MANIFEST, hot-path perf

Choose a tag to compare

@github-actions github-actions released this 27 Jul 20:01

[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/autoClassifySig matched vocabulary, not conditions — \bmcp\b treated the hyphen in "novada-mcp" as a word boundary, so any summary mentioning that project name classified as mcp-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.
  • alignment KPI staleness: the session_start scan-dedup initially threaded a pre-write snapshot into getCorrectionKPIs, making alignment null 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, missing corrections/_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 an agent_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-project MEMORY-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.json explicitly marked never-sync, do-not-read), and a condensed naming-grammar cheat-sheet. All paths store-root-relative; the MEMORY-PROTOCOL.md template'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 previous index.jsonl by filename. It previously re-read every journal body TWICE per journal_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

Choose a tag to compare

@github-actions github-actions released this 27 Jul 12:53

[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 bare unnamed fallback). Two-layer fix: sanitizeName's degenerate fallback is now unnamed-<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 shared unnamed store directory. Migration note: a store that already has a bare unnamed/ 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_recall cross-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, with alsoFoundIn provenance and true pre-fusion total_searched counts. 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.Segmenter with 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 / check on the AgentRecall class — 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_HOST override; lifecycleInstructions(tier) is the one canonical source both MCP server instructions and skill docs render from (TOW2-327).
  • Idempotent lifecycle + local telemetry: session_start claims are once-per-session-per-project, session_end dedupes 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: pass action_description and the default check tool 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) are todo-marked, so a red CI now means new breakage only (TOW2-318).

Security

  • 10/12 npm audit findings 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

Choose a tag to compare

@github-actions github-actions released this 20 Jul 18:38

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/AgentRecall can 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 outside paths.ts unrecreatable.
  • 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.md can'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

Choose a tag to compare

@github-actions github-actions released this 15 Jul 08:42

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_class at 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 as other, 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 /arreflect loop 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-mcp

npm: 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

Choose a tag to compare

@github-actions github-actions released this 05 Jul 17:42

Full Changelog: v3.4.34...v3.4.36

v3.4.34

Choose a tag to compare

@github-actions github-actions released this 23 Jun 21:20

Full Changelog: v3.4.33...v3.4.34

v3.4.33

Choose a tag to compare

@github-actions github-actions released this 22 Jun 14:54

Full Changelog: v3.4.32...v3.4.33

v3.4.32

Choose a tag to compare

@github-actions github-actions released this 20 Jun 17:08

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

Choose a tag to compare

@github-actions github-actions released this 19 Jun 15:46
ccce5d3

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

Full Changelog: v3.4.23...v3.4.30

v3.4.23 — Memory as Environment (V4 Sprints 0-2)

Choose a tag to compare

@Goldentrii Goldentrii released this 12 Jun 08:19

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 toolssession_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-mcp

Existing 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.