Skip to content

Releases

@staix/agent-mem v0.25.0

Choose a tag to compare

@github-actions github-actions released this 12 Nov 11:47
a981a2d
  • Add the person-owned preference note kind (amem note add --kind preference, amem_remember with kind: "preference"): a standing instruction that is long-term, project or shared scope, superseded and forgotten like any note, and never inferred or merged by amem consolidate. Briefs show it by its own slot instead of path- or intent-ranked rows: amem_brief reserves at most half its budget for up to five current preferences (this project's plus every shared one, newest first) and emits whole lines of at most 240 bytes, dropping one that does not fit and reporting truncated rather than clipping a rule in half; the SessionStart hook carries the same slot from its own prebuilt sidecar brief-preferences.json, written beside brief-curated.json under the same profile binding, 24-hour freshness and 32 KiB cap, at most 480 bytes, before the curated rows. A preference never takes a curated row, so one is never shown twice. Refs #370.

  • Compatibility with N-1 (0.24.0), measured: a preference row is not additive for an older reader. The published 0.24.0 reading a home whose own segment holds one lists 0 rows and returns syncMemory { ok: false, pushed: false, entries: 0 } with "this machine's long-term segment is not readable as complete valid rows, so it was not screened; inspect the local input and reopen the store before retrying". So the write fails closed: note add, importNote and accepting a preference candidate are refused until the memory home records {"surface":"curated","minReader":"0.25.0","since":"<date>"} in formats.json, and at that floor 0.24.0 refuses the home at store open with code: "format_floor" instead of breaking its sync, as measured on the same home. Reads, briefs and amem_remember queueing need no floor; a queued candidate cannot be accepted until the floor is raised, and the refusal leaves it pending. amem never writes formats.json.

  • Compatibility with N-1 (0.24.0), indexes and brief cache: INDEX_VERSION 4 names its own curated index file (index-v4.db, and index-v2-i4.db for the v2 public-prune view), so each release keeps its own warm index on one home and neither drops the other's; an older index skips preference rows, so sharing one file would be wrong. The cost is one refresh for a reader whose own file this release no longer advances: 0.24.0 rebuilds from the log and answers, and a reader that predates the vault generation meets the same refusal it already had for an op it does not know. The preference sidecar uses a new file name and metadata key, so 0.24.0 neither parses nor invalidates it, and the curated section it does read now excludes preference rows. Existing rows, hashes, schemas and paths are unchanged.

  • Extract canonical capture-only Records from positively completed main-session Codex, Pi and Kimi messages through the existing staging, receipt and replay path. Respect records: false, existing forward cursors, privacy, anchor and brief caps; add numeric JSON counts. Qwen and Jcode stage no Records without a native finality witness and report finality-unavailable; their ordinary capture remains unchanged. Refs #369.

  • Compatibility with N-1 (0.24.0), capture spool: non-Claude Records use the additive format-4 hook-v4- prefix, which 0.24.0 leaves pending while draining unchanged format-2/3 rows. The new reader drains all three formats with the same receipts and dedupe. Existing Claude publication bytes, curated schemas and floors are unchanged.

  • Select the hosted macOS StopBurst RSS regression baseline by CPU hardware class: keep 93.58 MB for M1 and unknown CPUs, and use the qualified M2 Pro cohort median of 103.19 MB. Retain the strict +10% gate and 150 MB ceiling; receipts name the class and applied baseline. Other groups and runners are unchanged. Refs #365.

  • Propose curated candidates from capture Record rows in amem consolidate: the newest 32 main-session Records of the project, grouped by kind and anchor set (by kind and text when the Record carries - anchors), one candidate citing up to 8 rows, with decision/contract/finding keeping their own note kind, fix becoming a finding titled fix: and fail filling symptom and retry-when from the two recorded groups. Additive only: the candidate input gains optional about (the anchors as path: and symbol: edges) and optional record (group key, anchors, and each cited row's session hash, time and line hash), the report gains a records block (found, queued, grouped, alreadyQueued, alreadyReviewed, excluded, refused, truncated), and acceptance point-reads the cited turns, so a candidate that outlives the 32-row window still proves its rows instead of reading them as pruned. canonical() drops undefined, so every existing candidate id, payload and hash is unchanged, and no index version, capture format or format floor moves; a host that passes no records callback consolidates exactly as before. Refs #368.

  • Compatibility with N-1 (0.24.0), candidates: the candidate store schema and every existing candidate id are unchanged. By code reading, 0.24.0 has no cited-row check and builds an accepted note's edges from its target alone, so accept Record-derived candidates with 0.25.0, which proves the cited rows and keeps the Record's path: and symbol: edges.

  • Compatibility with N-1 (0.24.0), root exports: the root now re-exports src/memory/record-candidates.ts (Record proposal constants, types and helpers); this is additive and existing export names remain. Hosts must pin 0.25.0 before calling them.

@staix/agent-mem v0.24.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 05:36
f606b0b
  • On hosted Linux, report transcript summaries not durable within 64 follow-ups as advisory only for StopBurst runs with explicit spool-full stops, an incomplete cursor prefix, all scanned summaries retained, valid telemetry and zero R1 survivors. All other Linux gates and macOS behavior stay unchanged; warning receipts retain the evidence, and the group reports its incomplete-run count. Retire this ceiling after a product fix yields 10 consecutive strict-green hosted Ubuntu runs, or a later person ruling. Refs #357.

  • Correct timeout probe coverage: require a blocking-command cleanup control for each native sample and distinguish positively evidenced pre-admission and pre-command timeouts under the unchanged real deadline. Keep fail-open, exactly-once durable intake, valid telemetry and zero-survivor checks strict, with per-invocation branch diagnostics and no new advisory. Refs #362.

  • Give only the two expected-success cadence calls in the person-activation e2e a 60-second test-context deadline, with 90-second child envelopes and a 240-second test envelope. This exceeds twice the measured 28.6-second hosted macOS full sync; production keeps its 30-second default and unchanged stop, retained-attempt and fail-closed semantics. Refs #345.

  • Temporarily report hook wall-p95, wall-max and timing-only SessionStart omitted-work misses as #348 advisories on exact hosted GitHub Linux/macOS markers. RSS, telemetry, R1 and correctness remain strict; local and remote runs stay strict. Retire only after #348 is resolved and the person approves. Refs #348, #302.

  • Key reader lease lifetimes by the physical memory home, so parent-symlink and macOS path spellings share one reference count and closing one handle cannot drop another reader's lease. Admission, ownership, migration/prune blocking, lease filenames and schema remain unchanged. Refs #353.

  • At SessionEnd, stage the bounded transcript tail before ordinary publication replay, so a slow replay does not prevent a following Recap/Compact from reaching the durable spool. A later hook from another session in the same cwd can drain it without duplicate tail captures. Stop/StopBurst, backpressure and final replay, native budgets, data formats and R2 limits/baselines are unchanged; unscanned tails remain subject to the documented ceiling. Refs #344, #327.

  • Prepare curated brief snapshots after note/operation writes, imports and sync, reusing the private #337 transport. Migration and profile publication invalidate only, preserving legacy SQLite sidecars and live reader leases; a later ordinary off-hook trigger prepares the cache. Quiet projects require an unmarked person amem brief or the explicit off-hook write export prepareCuratedBriefCache(base, project); without one and without curated writes, native curated stays unavailable. MCP, agent-marked CLI reads and library sessionStartBrief() never build the cache. The person must raise the home or curated floor to 0.24.0 to enable the native curated section. Native readers require that explicit floor, re-screen source and display before work, and emit whole curated lines after work in the unchanged pool. Binding, expiry and 24-hour freshness checks fail closed with curated cache missing or curated cache stale; hooks never refresh. Existing logs, hashes, indexes, instruction placement, header reservations and R2 limits stay unchanged. Refs #322.

  • Add read-only CaptureStore.countOutsideRecent({ event, since }) for hosts that mine one event, such as Record, from a bounded brief (#331, consumer STAIxBWLB/vault-mem#163). It counts main-session Record rows below the retained recent window's oldest row within the host's since bound, returns { rows, capped, available } with the count capped at the store's own maxReadRows, and is answered only by a bounded seek on the existing rows_brief_records_v1 index: a full table scan, an unbounded index walk, a plan that is not that bounded seek, an event without a derived index or a store without that index report available: false with nothing counted and no throw. It reads no excerpt, path or id and returns none. Existing reads, the recent window, the derived index set and capture storage formats are unchanged; the API and its CaptureOutsideCount type are additive root exports through the existing capture re-export, so hosts must pin a supporting release before calling it.

  • Keep incomplete Record transcript scans out of exact experiment turn-share observations and retain their numeric coverage flag. Capacity maintenance trims the 4 MiB variant journal to 3 MiB so subsequent hooks append without repeated rewrites. Refs #325.

  • Native and library briefs preload and screen capture before work, reserving only the newest permitted main-session Recap/Compact line; work consumes the remaining pool, then up to five whole canonical Records are allocated at the existing capture position, followed by the reserved summary and a second summary if bytes remain. A non-fitting whole line is skipped and marks capture partial. Record and summary commits refresh the private per-project cache, which excludes raw tool captures and reports capture cache missing without rebuilding when unavailable. Native Records now appear under the real 140 ms handler deadline. The library uses the same newest-summary reservation. Total context caps, HANDLER_MS and R2 baselines are unchanged. Refs #337, #201, #322.

  • Add an opt-in purpose-framed Record instruction B with basis and uncertainty hints, plus person-written record-instruction.json selection (a, b, alternate) for the #313 live week (#325). A remains the default; both reserve the existing 332 bytes, with 332/331 actual emitted bytes including the separator. Alternate uses the persisted session hash parity without changing its encoding, and either home/repository records: false still disables emission and extraction. The canonical Record grammar and the instruction's position before untrusted data are unchanged. Add body-free per-variant hook metrics and a read-only report with explicit session, Stop-turn, Record and brief-byte denominators. Retain numeric Record observations separately in record-variants.jsonl for eight days with a 4 MiB cap and explicit cap-trim coverage, leaving the general metrics file unchanged. AC3 strict no-loss failed on S/M (rank-only; one M top-10 recall loss); shipped opt-in by owner decision 2026-11-10; default A.

  • Cache console Recap, Review and Work snapshots by authoritative source and privacy revisions, returning only changed: false and a numeric cursor for matching polls. Coalesce identical reads, invalidate on actions and external writes, honor note expiry. Capacity and Timeline remain uncached because resource/time readings and referenced-file stale probes have no complete cheap revision. Skip only already-correct database chmods and identical consolidation-receipt updates, preserving 0600 hardening and every real update so reads do not manufacture revisions. Project-scoped candidate day boundaries expire cached Recap text even when another project masks the home-wide summary. Unavailable revision probes and input changes during a read disable reuse without hiding fresh data; an overlapping action triggers one post-action read. Warm the initial Review selection at provider open; no persistent cache, watcher or runtime dependency is added. Refs #359.

  • Compatibility with N-1 (0.23.1), configuration: The config schema is unchanged and records remains boolean-only. Older readers ignore the separate person-written selection file; existing 0.23.x readers continue A. Missing/invalid selection falls back to A with a numeric invalid-file flag; core never writes it.

  • Compatibility with N-1 (0.23.1), curated storage and cache: authoritative rows, hashes, paths and derived index versions are unchanged; older readers ignore the prebuilt file. The root export is additive and explicitly writes a derived cache. Native curated admission stays deferred until the person raises the applicable 0.24.0 floor, which intentionally excludes older writers and readers for that surface.

  • Compatibility with N-1 (0.23.1), capture and derived indexes: row encodings, capture paths and derived index names are unchanged. CaptureStore.countOutsideRecent({ event, since }) and the root-exported CaptureOutsideCount type are additive (#331). The read-only bounded count reuses rows_brief_records_v1 and reports available: false when the event/index/plan cannot answer safely; it reads no content or ids. Existing recent reads and writable stores retain their behavior. Hosts must pin a release containing the API before calling it; no format-floor change is needed for this count.

  • Compatibility with N-1 (0.23.1), hooks and private sidecars: transcript cursors, capture replay/dedupe formats and the general metrics file remain compatible. SessionEnd staging changes replay order without rewriting captured data. The new record-variants.jsonl numeric journal is separate and older releases ignore it; the Record grammar, session hash encoding and instruction position are unchanged.

  • Compatibility with N-1 (0.23.1), sync and reader leases: shared-v1, generation and shard sync formats, activation/renewal journals, writer attestation and reader-lease filenames are unchanged. Physical-home lease accounting is in-process only. No code raises a format floor; native curated-cache admission still requires the person's explicit 0.24.0 home/curated floor after all participating writers are upgraded.

  • Compatibility with N-1 (0.23.1), root exports: prepareCuratedBriefCache, the Record instruction selection constants/helpers, captureSessionKey and readRecordInstruction are additive. Existing export names remain. CaptureStore and its additive outside-window count type remain available through the existing root capture re-export; older host pins do not acquire the new method.

  • **Compatib...

Read more

@staix/agent-mem v0.23.1

Choose a tag to compare

@github-actions github-actions released this 09 Nov 00:34
6b26a52
  • Export recordsEnabled(base, cwd?) for hosts to check the effective home/repository Record policy before instruction emission or capture (#332, consumer agent-hub#1320). SessionStart and Stop transcript capture share the accessor; absent values stay enabled, either false disables Records, and malformed configuration still throws. Existing exports and storage formats are unchanged.

@staix/agent-mem v0.23.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 20:42
a5756b4
  • Add createPlacementAttestation(home) for installed host library writers (#317, #319), sharing the CLI's fresh floor, effective-inventory, receipt and pin checks. The lazy callback derives its executing package root without an override and leaves legacy sync, person-only activation and placement state unchanged; safe typed refusals include the person-run remedy.

  • Keep well-formed public doi: and arxiv: identifier nodes when promoting a note to repo scope; host-local nodes such as run: and malformed identifiers are dropped and listed as before. Hashed entries and both log schemas are unchanged. docs/contracts.md names the reserved node prefixes and the host rule (#185, #315).

  • Add native Claude assistant Record extraction and a bounded, package-owned SessionStart instruction (#313, #314). Export parseRecordLines and RECORD_INSTRUCTION; home/repository records: false disables instruction emission and new extraction, with false winning. Records reuse the existing transcript summary staging/dedupe/replay path and native row timestamps, remain capture-only, screen source-row privacy metadata, refuse partial Record normalization at replay, and retain the accepted crash-before-cursor duplicate window. Replay opportunities follow whole-row staging to avoid deadline starvation. Instruction cost is 332 emitted bytes including its separator and approximately 83 tokens, within the unchanged context budget. No capture-row schema or Record-to-candidate conversion is added; existing R2/R3 limits are unchanged. AC6 remains a person-run live check.

  • Prioritize up to five screened, project-bound main-session Records ahead of summaries and raw captures in the same brief budget (#313, #321). A separate derived partial index follows the existing 128-row hook-build ceiling and off-hook large-store preparation. Record search weighting is 1.5 versus 1.25 for conversational events; existing slot allocation and session grouping stay unchanged. All-project CLI search preserves the complete canonical line and anchors.

  • Capture jcode session titles and compaction summaries on turn_end (#216, #320). amem hook jcode reads a bounded window of the session journal's meta forward from a per-session cursor (at most 256 KiB and a cooperative 40 ms parsing/publication budget, fail open, rows whose metadata resolves to this physical cwd or has no working directory) and stages one Title row per title change and one Compact row per compaction as jcode rows in spool format 3. They carry the same conversational weight and brief preference as Claude's, with no new weight or index. Symlinked and hardlinked journals, deny paths and secrets are refused, an oversized line is skipped and counted, and a replaced journal resumes without repeats. The first Title from a large existing journal waits until the bounded scan reaches its end. The journal-enabled hook workload has its own measured RSS baseline; existing limits are unchanged.

  • CI eviction-after-shrink measurements use 20 samples, retain the same limits, re-measure a hosted wall miss once and report eviction phase timing (#302, #318). Release workflows reuse successful identical-tree checks with both OS gates while retaining the version, ancestry, CHANGELOG, manifest, typecheck, boundary and pack gates; manual release dispatch remains proof-only (#302, #307).

  • Compatibility with N-1 (0.22.1), curated storage: log schemas, entry hashes, index filename and INDEX_VERSION are unchanged. Public DOI/arxiv repo identifiers are retained without rewriting past entries; host-local nodes remain filtered.

  • Compatibility with N-1 (0.22.1), capture and derived indexes: existing row encodings and table schema are unchanged. rows_brief_records_v1 is an additive derived capture index, separate from the released summary index; ordinary SQLite writers maintain it. Older readers keep their previous Record ranking and display behavior.

  • Compatibility with N-1 (0.22.1), hook-spool and configuration: 0.22.1 drains silently discard Record format-3 entries without counted loss, and its config parser refuses the records key, including false. Upgrade every amem sharing the home before relying on Records or setting that key. A person can append the existing home floor at 0.23.0 to exclude old participants; code never writes formats.json. Existing native event encodings are unchanged. Jcode Title/Compact use existing format 3; N-1 either drains each once or leaves it pending for the current reader.

  • Compatibility with N-1 (0.22.1), private sync placement: activation, initial locator, writer revision and journal formats, sticky holds and historical receipts are unchanged. Shared-v1 and generation/v1/v2 sync retain their behavior. The additive host callback supplies fresh expected-inventory proof; activation/renewal and root declaration remain person-only, and upgrading an inventoried install still requires explicit same-epoch renewal.

  • Compatibility with N-1 (0.22.1), private transcript cursors and metrics: the jcode session cursor has its own filename under hook-transcripts/, ignored by the old transcript scanner. Record adds refusal categories and emitted-instruction metrics; older readers do not gain their reporting. No captured or curated history is rewritten.

  • Compatibility with N-1 (0.22.1), root exports: parseRecordLines, RECORD_INSTRUCTION, createPlacementAttestation, PlacementWriterContextError and their public types are additive. Existing runtime export names remain; hosts must pin a supporting release before importing the new API.

  • Compatibility with N-1 (0.22.1), console/setup: console provider api 1 code and setup receipt formats are unchanged; package and Claude plugin version metadata advance together. Existing console registration remains valid at the same install root; after moving roots, rerun amem setup console --apply.

@staix/agent-mem v0.22.1

Choose a tag to compare

@github-actions github-actions released this 06 Nov 14:34
307cfdd
  • Name the interrupted person-migration family when a retained stale profile lock blocks a read, with its exact person-run resume or supported abandon command (#290). Keep lock admission, waits, ownership proof and reclaim behavior unchanged.
  • Handle optional Bun.TOML.stringify results explicitly: retain the validated inline fallback and refuse unsupported appended tables before returning configuration. Add a strict host source-typecheck regression pinned to Bun types 1.4.2, including the published 0.22.0 failure control (#297). Defined serialization results are unchanged.

@staix/agent-mem v0.22.0

Choose a tag to compare

@github-actions github-actions released this 06 Nov 12:21
a8ab2a0
  • Add person-only, home-wide amem migrate --sync-placement --dry-run|--apply|--resume|--abandon (#281). A person declares every local amem install that writes the home with repeatable --writer-root; the running CLI and every applied setup-receipt root are mandatory, and each install is measured afresh (package version and runtime-file pin) at every authority and sync boundary. Activation is crash-safe, forward-only, and leaves an immutable root locator so plain and cadence amem sync need no extra flags. An interrupted activation can be abandoned only while both markers still hold their original v2 bytes. Agent-marked sessions are refused before any home access. Activation never runs a migration, changes policy or writes formats.json.
  • Add same-epoch writer renewal through the same command on an already-active home (#282). After an amem upgrade or a host pin change, a person reviews the inventory diff and applies a new bounded revision; old holds, journal records, publication receipts, the initial locator and the active fence stay unchanged, and no new epoch is started. Renewal requires 0.22.0-or-later installs and a person-authored home floor at 0.22.0. It refuses while an append, publication, reservation or source-recovery intent is outstanding, and names the restore, sync and renew order. Interrupted renewals resume or, before the first commit-log byte, can be abandoned. The chain is capped at 64 revisions inside the epoch's 256-object budget; dry-run reports the remaining headroom, and checkpointing is tracked in #288.
  • CI runs bun test in two time-balanced shards per OS and moves the measurement and compatibility steps into their own job; the check (ubuntu-latest) and check (macos-latest) names remain the required gates and fail when any shard or measurement job fails (#283). The release workflow publishes only after every shard and the pre-publish gate pass. The recorded macOS acceptance run had a 13m25s critical path, versus the previous 31-37 minute jobs.
  • Compatibility with N-1 (0.21.0): curated, capture, hook-spool, candidates, work-list and setup receipt formats are unchanged, and no code raises a format floor. Indexes: INDEX_VERSION and the index file name are unchanged. Sync: shared-v1, generation and v1/v2 shard sync are unchanged, and inactive homes behave as before. Placement activation and renewal are opt-in person commands. On an activated home, the person should append the home floor at 0.22.0 at activation and must do so before the first renewal: with it, 0.21.0 refuses read, write and sync with Upgrade amem to 0.22.0 or later. before any effect. Without that floor, 0.21.0 can still read an activated but unrenewed v3 home. Its CLI supplies no writer attestation, so CLI v3 sync refuses. If renewal history is present, its closed journal reader also refuses that history and placement publication before effects. Tests cover both cases against the published 0.21.0. Activation adds the pending sync-placement-activation.json intent and immutable sync-placement-writer-roots.json locator at home level. Renewal adds writer-revision-NNNNN.json and writer-revisions.jsonl inside the existing epoch, plus the pending home-level sync-placement-writer-renewal.json intent and its owned .pending-<hash> companion. Root exports are additive only (313 to 320 runtime exports against 0.21.0, none removed). The console plugin module is unchanged, so an existing amem setup console registration stays valid at the same install root; after moving roots, rerun amem setup console --apply to update its pinned module path.

@staix/agent-mem v0.21.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 23:39
a614384
  • Verify #261 placement stages together through fake-home/local-Git publication, inspection, second-machine import and later forget/prune, with N-1 refusal and legacy interoperability coverage. Clarify source-local dispositions and conservative offline inspection. Real-home activation, the marker writer and release remain separate.
  • Add bounded IDs-only inspectSyncPlacement for activated v3 homes (#261 stage 4): source placement, unchanged outbound decisions, separate intrinsic-local metadata, safe categories and event/receipt/history-verified exposure. Reuse the publication planner and journal projection; the complete-set fingerprint covers both lists and incomplete inputs have none. Inspection performs no mutation, recovery or network operation. Activation and release remain separate.
  • Use unique owned private hook-spool temporaries so a killed write cannot block the next deterministic publication. Bound stale private cleanup to four entries per maintenance call after one hour, outside SessionStart; published names, bytes and formats stay unchanged. Refs #226.
  • Add #261 stage 3 placement-filtered shard publication: sealed bounded plans, operation-aware dependency holds, exact multi-ref publication, truthful exposure recovery and monotone v3 prune-view maintenance. Keep original payloads and all limits, and preserve v1/v2 behavior. Real-home activation and release remain separate.
  • Bound console inbox snapshots to 50 compact items with a more count, reuse one background computation across concurrent requests, and invalidate cached data on source or policy changes (#268). Keep expensive catalog/capacity work off the request loop; validate against console 0.1.3.
  • Add the private bounded placement/publication journal and journal-only rebuild for #261 stage 2, with fresh source proofs and explicit policy-screened person release. Transport and activation remain disabled. Preserve legacy profile diagnostics on ordinary store opens.
  • Document the accepted transcript-summary timing ceiling under contention/slow runners: capture can be deferred without losing its transcript source; limits, R1, fail-closed RSS, durability and the hosted-macOS advisory are unchanged (#226).
  • Add stage 1 closed placement-aware v3 format/activation-plan validation (#261): exact commitments, monotone upgrade checks, person/writer-attestation ports and fail-closed runtime guards. Validation is data-only (activated: false); no transport, journal effects or real-home activation are enabled.
  • Screen contentful settle.target and goal_link.by task keys in outbound sync and inspection for every profile (#263). Preserve validated ID/enum/UTC metadata exclusions and unknown content fields. Restore specific byte/row-bound, changed-input and unavailable-input sync refusal causes.
  • Add bounded, read-only outbound policy inspection at the package root (#260): full declined IDs, safe categories/counts and a complete-set fingerprint for shared-v1, generation and opened shard/user-overlay targets. Share canonical screening with sync and expose its content projection for host write-time checks. Incomplete inputs never produce a complete empty set. No storage format, publication or per-row placement change.
  • Complete the acon plugin's published api 1 integration (#158): pin the development contract and conformance suite to @staix/agent-console 0.1.0, use the host button kit, and show stored target-note quotes with explicit candidate-provenance limitations. Existing review, screened search/timeline/work reads, goals, capacity, inbox and manifest setup remain in process with zero runtime dependencies.
  • Refuse an unavailable explicitly selected Memory project instead of returning another project's data. Verify manifest hash refusal and refresh against the published console loader.
  • CI resolves N-1 by minor line (#249). Compatibility checks select the latest published plain patch from the preceding minor of the same major, with the preceding major as the fallback at minor 0. Patch releases now test the same previous minor as their minor release, instead of the current or preceding patch.
  • Compatibility with N-1 (0.20.3): curated, capture, hook-spool, candidates, work-list and setup receipt v1/v2 formats are unchanged, and no code raises a format floor. Hook-spool temporaries now carry a unique suffix inside the private .writing directory, which 0.20.3 already skips; published records keep their names and bytes. Sync: shared-v1, generation and v1/v2 shard sync are unchanged. Tests cover 0.20.3 reading, appending and syncing to local Git on v1/v2 shard homes migrated by this release, and this release reading the result. The v3 placement publication profile is opt-in and cannot be activated with this release: the library ships placement preparation and activation-plan validation only, with no CLI command, and no activation writer ships. 0.20.3 refuses an activated v3 home before any read, write or sync effect. Before activating placement, the person raises the home format floor to 0.21.0 so 0.20.3 reports Upgrade amem to 0.21.0 or later.; without that floor 0.20.3 still refuses, with no active curated shard migration. Indexes: INDEX_VERSION and the index file name are unchanged. Root exports are additive only (263 to 313 runtime exports against 0.20.3, none removed). The private placement journal is new, applies only to v3 homes, and ordinary use in this release never creates it. Both versions use console api 1 and the same plugin manifest format; the console development dependency is not a runtime dependency. The console plugin module changed (#255, #268), so acon refuses the old registration as stale until you run amem setup console --apply again after upgrading.

@staix/agent-mem v0.20.3

Choose a tag to compare

@github-actions github-actions released this 03 Nov 14:10
236a007
  • Setup retires the pre-#145 capture command on a root change (#246, Refs #241). Replacing the install root also removes the prior root's ingest codex|kimi|qwen command written without --json, beside the current form, so an upgraded Qwen, Codex or Kimi no longer keeps a second SessionEnd ingest.
  • A stale setup receipt refuses by name and is adopted explicitly (#246, Refs #241). A receipt is stale when it cannot restore, no spelling of its runtime's entry remains in its files (raw text or any decoded JSON/TOML string) and the live MCP entry launches another install root: the wiring was moved outside setup. Apply then refuses with cause setup_receipt_stale and writes nothing. amem setup <target> --apply --adopt-current keeps the receipt as <target>.json.stale-<UTC time> in the setup directory and applies through the receipt-less path, so --undo restores the adopted wiring. A receipt that still has any trace of its runtime stays authoritative. This replaces the manual receipt rename used on 2026-11-03.
  • Compatibility with N-1 (0.20.2), #246: receipt format v1/v2 and undo semantics are unchanged, so 0.20.2 reads every receipt this release writes; it ignores *.json.stale-* files and has no --adopt-current. No memory format or floor changes.

@staix/agent-mem v0.20.2

Choose a tag to compare

@github-actions github-actions released this 03 Nov 12:11
22e3e57
  • Orca Claude setup writes the MCP entry to the personal ~/.claude.json (#243, Refs #242). Orca syncs the personal file over each profile's mcpServers, so an entry written only to the profile copy reverted to the old install root. Setup now redirects the MCP file alongside the existing personal hooks redirect; preview and doctor use the same paths and the profile copies stay untouched. Receipts from the earlier mixed layout migrate through the existing ownership checks and keep byte-exact personal undo; an edited historical managed MCP entry is refused. Outside Orca, a receipt written from an Orca profile refuses apply with cause setup_receipt_orca_profile and the next step to rerun from that profile. A fixture covers the live 2026-11-03 layout (#244).
  • Compatibility with N-1 (0.20.1), #243: the receipt format is unchanged. A 0.20.2 Claude receipt written in Orca records ~/.claude.json, which 0.20.1 refuses with setup receipt target mismatch before writing; run undo with the release that wrote it. No memory format or floor changes.

@staix/agent-mem v0.20.1

Choose a tag to compare

@github-actions github-actions released this 03 Nov 06:10
2db750e
  • Setup replaces hooks when its install root changes (#237). Claude, Codex, Kimi, Qwen, Pi and Jcode retire exact prior MCP-bound commands instead of appending a second root, including adopted and receipt-less wiring. Undo restores original commands and their order while preserving unrelated later settings. Customized controls on adopted prior hooks refuse rather than being discarded. Marked setup apply failures report a data-free cause and next step; unmarked native errors remain unchanged.
  • Compatibility with N-1 (0.20.0), #237: root/runtime replacements that remove an adopted original hook write setup receipt v2; this release and doctor read v1 and v2. 0.20.0 refuses apply/undo of a v2 receipt before publishing configuration; run undo with the release that wrote it. First registrations and added-only receipt-owned root replacements retain v1. No memory format or floor changes.