Skip to content

Releases: Sumit1993/mage-memory

v0.0.12

Choose a tag to compare

@Sumit1993 Sumit1993 released this 02 Jul 17:47
d8a4ade

0.0.12 (2026-07-02)

Features

  • 0.0.12: Claude-Code capture adapter (inline-capture instruction + boundary nudge) (#27) (d11dc25)
  • 0.0.12: offer the npx skills install route alongside the plugin (init hint + README) (#34) (5a04601)
  • 0.0.12: one .mage/ state home + redact config in metadata.json (ADR-0025) (#31) (ca01271)
  • 0.0.12: organic grooming loop — portable core (mage stage/groom + .staging) (#25) (e1b3014)
  • adopt: mage adopt onboarding dispatcher + dream scan-scope fix (fbe6ea5)
  • autonomy: opt-in Operator/Approver/Overseer grooming autonomy ladder (ADR-0030) (#37) (5926e0e)
  • cc-adapter: commandeer CC auto-memory — Gate-0 capture + MEMORY.md recall (ADR-0032/0033) (552756e)
  • cc-adapter: Gate-0 PreToolUse capture hook + PostToolUse nudge (ADR-0032 Phase 3) (30d5cf5)
  • cc-adapter: groom ingest of the capture inbox (ADR-0032 Phase 6) (997d439)
  • cc-adapter: native CC memory -> mage note schema-map (ADR-0032 Phase 2) (0367c16)
  • cc-adapter: wire the commandeer tier into connect/disconnect (ADR-0032 Phase 4) (016ccf8)
  • digest->agent boundary capture (ADR-0029) — replace deterministic drafting (#36) (aad31f0)
  • doctor: add recall+skills readiness checks and a setup summary (4e5491c)
  • doctor: recall+skills readiness checks and a setup summary (81f179d)
  • flatten: normalize harness frontmatter at the durable boundary (ADR-0035) (b5bbf93)
  • flatten: Stop-hook working-tree sweep (ADR-0035 best-effort layer) (cad6545)
  • index: emit MEMORY.md, the Claude Code adapter index twin (ADR-0032/0033, Phase 1) (df4760c)
  • nudge: user-visible systemMessage + operator asks + weekly dream-health tick (5ce48d7)
  • nudge: user-visible systemMessage + operator asks + weekly dream-health tick (2649ac4)
  • nudge: warm, keeper-naming offer + agent-offered dream scan (44a25c9)
  • provenance: stamp provenance at note creation (ADR-0031 Phase 1) (5915664)
  • provenance: stamp provenance at note creation (ADR-0031 Phase 1) (#43) (1a526e5)

Bug Fixes

  • 0.0.12: one shared hub-scope enumerator + fan-out hint for bare hub distill/promote (#33) (3344bae)
  • cc-adapter: Gate-0 never falls through unscrubbed; POSIX-normalize paths (ADR-0032 review) (a9eae63)
  • cc-adapter: Gate-0 spike refinements + autoMemoryDirectory ownership (ADR-0032 Phase 5) (06d4a7a)
  • cc-adapter: harden inbox ingest — non-destructive cover, fail-soft, idempotent (ADR-0032 review) (c11ba34)
  • cc-adapter: key inbox-ingest idempotency on capture identity, not session id (f1a04b1)
  • doctor: skip the GitHub network probe under test (flaky 5s timeout) (0357e19)
  • doctor: skip the GitHub network probe under test (flaky 5s timeout) (deabf0e)
  • flatten: recover ALL mage fields from a CC-restamped note (no data loss) (6bcba13)
  • integration: close stdin for live claude runs; gate capture test on the scrub (f1639f9)
  • nudge: exempt compact from the backlog throttle (resume-then-compact) (cacb49c)
  • nudge: exempt compact from the backlog throttle (resume→compact) (c767563)
  • redact: clear Gate-2 false positives + add a non-bypass .redactignore allowlist (#26) (726b5bf)
  • scan: accept unquoted YAML dates for last_reviewed (333c897)
  • scan: accept unquoted YAML dates for last_reviewed (b2ea189)
  • symmetric commandeer reconciliation + doctor drift + clean --json (ADR-0032 review) (41a59e3)

v0.0.11

Choose a tag to compare

@Sumit1993 Sumit1993 released this 15 Jun 18:24
97f8d24

0.0.11 (2026-06-15)

Features

  • 0.0.11: signal quality + autonomous capture (#17) (434e3fb)

Bug Fixes

  • deps: clear all security advisories (drop gray-matter for yaml; pin esbuild) (#22) (9eb76bb)

v0.0.10 — coherence

Choose a tag to compare

@Sumit1993 Sumit1993 released this 14 Jun 08:28
2ccdd7b

A coherence release: one consistent vocabulary, a single grooming skill, a leaner command surface, and sturdier setup/repair. The roadmap is capped at 0.1.0.

Added

  • mage migrate — mage's first metadata migration (schema mage.v1 to mage.v2). Readers are now lenient: they read v1, normalize it in memory, and never throw; mage migrate and doctor --fix rewrite eagerly.
  • mage connect --all-projects — from a hub, wire every registered project's code repo in one pass (repo-local each; absent repos skipped).
  • Hub-aware health: mage doctor reports a per-project liveness rollup (registered, present, connected), and mage status <hub> expands to the member code repos. A bare parent directory sitting above connected repos now warns loudly instead of resolving to nothing.
  • mage doctor --fix repair-drift: refresh a drifted capture-hook block in place, detect a missing redaction pre-commit hook, and migrate a v1 schema — all fail-open, and it never wires a never-connected or disconnected repo.

Changed

  • mage:distill and mage:promote are merged into one two-phase mage:groom skill (first-sight, then recurrence). Kept skills: learn, groom, graduate, optimize, guide.
  • Grooming at a hub fans out to every project (per-root, via --dir).
  • init and link auto-connect capture hooks by default (--no-connect to opt out; best-effort — a connect failure warns, never fails the command). link refreshes a hybrid AGENTS.md and guards against a project name that diverges from the hub registry.
  • Vocabulary reconciled across docs and code: the knowledge base is the umbrella term; the three shapes are in-repo, hybrid, and external; "vault" and "specs" are retired; the --external flag is removed (use --hub).
  • Plumbing commands are hidden from --help (observe, index, ingest, distill, promote, redact); the human verbs stay visible.
  • Node 18 is no longer supported — the runtime floor is now Node 20 (Node 18 reached end-of-life 2025-04-30). Dependencies modernized: commander 15, ora 9, @inquirer/prompts 8, TypeScript 6.
  • ADR-0023 ratifies the hub layout: a hub owns its own notes plus flat projects/<name>/ directories — scope separation, not duplication.

Fixed

  • resolveDocsRoot now resolves a hub-owned project directory directly, so grooming a hub's projects via mage <engine> --dir <hub>/projects/<name>/ works even when the member code repo is absent on the machine. Caught by the pre-publish dogfood, where a hub-owned project's accumulated captures were otherwise unreachable by the grooming engine.

Removed

  • The spec-driven-development (SDD) skills.

v0.0.9 — readiness

Choose a tag to compare

@Sumit1993 Sumit1993 released this 10 Jun 13:06
72b107c

[0.0.9] - 2026-06-10

Readiness release — make the self-grooming loop observable and adoptable.

Added

  • mage dashboard generates a committable Dashboard.md and an Obsidian
    Knowledge.base so you can read your proposal queue, wings, notes, skills,
    durability ladder, and health from inside your vault.
  • mage dashboard --html builds a self-contained, offline dashboard.html
    cockpit — no server, gitignored, with an interactive force-directed knowledge
    graph (zoom/pan, type-colored nodes, click-to-open).
  • mage dashboard --open-with <file|obsidian|vscode> chooses what a node/row
    click opens. Default file is a relative link that opens the raw note from the
    page's own origin — works in any browser/OS (incl. WSL), no app required;
    obsidian and vscode emit the respective deep-links.
  • mage doctor --fix repairs .gitignore entries so capture sinks stay out of
    commits, and mage doctor --report produces a redacted, content-free support
    bundle you can paste into an issue.
  • mage doctor checks code-repo<->hub link integrity, and --fix heals a stale
    hub back-reference after a code repo is moved (the forward hub_path and the
    hub's code_repo_path drift independently on a move; mage connect never
    repaired them — only mage link did).
  • mage doctor now distinguishes a never-connected KB from one that WAS capturing
    and is now disconnected (capture history present but no hooks wired) — so a
    silently-dropped connection is reported instead of looking like a fresh KB.
  • Brand assets: the graph-"m" mark and a social card under assets/.

Changed

  • mage connect now self-heals .gitignore so capture sinks (.learnings/,
    .metrics/) can never be committed.
  • mage doctor grows from an env-only check into full KB and connection health:
    KB structure, a gitignore-leak guard, and hook-block and version-drift
    detection.
  • Reaffirmed: mage sends nothing off your machine. The only improvement signal
    is the local .metrics/ accept-reject ladder — no telemetry, fully offline.

Fixed

  • Capture now routes for external/hub knowledge bases. resolveDocsRoot
    (the resolver behind every capture, grooming, and dashboard run) read but
    never honored a code repo's mode: "external" metadata, so work in a
    member code repo never reached its hub and hub KBs silently produced no
    .learnings/. It now follows hub_path to <hub>/projects/<project>/.
    (A member repo must still be linked with mage link and connected with
    mage connect for its sessions to capture.)

v0.0.8 — self-grooming

Choose a tag to compare

@Sumit1993 Sumit1993 released this 08 Jun 19:40

mage 0.0.8 closes the self-grooming loop: observe -> distill -> promote -> graduate -> optimize, all human-committed.

Recurrence (promote)

  • mage promote --json folds the observed .learnings/ into a per-(wing+keywords) recurrence tally that counts DISTINCT sessions and survives the raw-event purge. It surfaces note-candidates (a pattern recurring across >= K sessions with no covering note) and graduation-candidates (a covered, procedural note recurring >= M sessions).
  • A sensitivity dial (low / normal / high, in metadata.json) scales the thresholds; every number lives in one seam.

The dream applier (the single writer)

  • mage dream --apply applies one confirmed Proposal -- graduate (note -> Procedure skill), demote (skill -> note, archived), merge, split, reword -- enforcing four hard ceilings: never auto-commit, never touch a bespoke (non-generated) skill, never hard-delete (archive only), never write past a Gate-2 secret block. mage dream --reject records a back-off.

Judgment skills

  • mage:promote (recurrence catch-net -> note / merge), mage:graduate (note -> skill), mage:optimize (reword or demote a skill on persistently-low context-match, bounded per pass).

Capture

  • A new assistant_msg observe event captures the agent's final reply per turn (redacted) so a user correction carries its antecedent. Re-run mage connect to install the new Stop hook.

Notes

  • 644 tests. Built in three verified stages via partitioned multi-agent workflows with adversarial review, which caught and fixed a never-hard-delete bypass, a reword YAML-injection, and a recurrence-fragmentation bug found in dogfood.
  • Scope: dream's note-health (stale / superseded / dangling / orphans) remains a read-only detector; auto-applying consolidate / prune / supersede is a later increment.
  • No npm change until published separately.

Governing decision: ADR-0019 (mage/decisions/0019-mage-promote-self-grooming.md).

v0.0.7 — distill

Choose a tag to compare

@Sumit1993 Sumit1993 released this 08 Jun 12:49

distill (ADR-0018): turn the captured .learnings/ scratch into durable notes.

Highlights

  • mage distill — a deterministic reader (--json) that groups un-distilled, CLOSED .learnings/ events into candidate clusters across four lenses (user corrections first-class, then error→fix, repeated workflow, tool preference), salience-filtered and chunked at compact/session boundaries, under a per-session offset watermark (.metrics/distill.json) advanced only by an explicit mage distill --seen.
  • mage:distill skill — drafts notes on first sight through the existing mage:learn capture pipeline (overlap-check → redaction → human-confirm → write). Recurrence and note→skill graduation remain deferred to a later release.
  • Redaction Gate 2 at the commit boundarymage redact --check --staged plus an opt-in, blocking pre-commit hook installed by mage connect (--no-git-hook to skip). Scoped to the knowledge base (the mage/ docs root), not the whole repo: application source — including a redaction tool's own secret-shaped test fixtures — is out of scope by design. Blocks a live secret, warns on PII, fails open when mage is absent.
  • Feeders cut — mage works on its own .learnings/ only; foreign memory stores are no longer harvested. mage:learn --from remains a generic doc importer. (Amends ADR-0005 / ADR-0013 §5.)

Notes

  • 474 tests; build + typecheck green; dogfooded across in-repo, hub, and external topologies.
  • No npm change until published separately.

Full design: mage/decisions/0018-mage-distill-observed-scratch-reader.md.

v0.0.6 — connect + read-only context-match metrics

Choose a tag to compare

@Sumit1993 Sumit1993 released this 07 Jun 18:15

mage 0.0.6 makes auto-capture opt-in and self-wiring, and lands the first read-only signal over captured sessions.

Added

  • mage connect / mage disconnect — wire (or remove) mage's capture hooks in Claude Code's .claude/settings.local.json (personal, gitignored; --user targets ~/.claude/settings.json). Each group is marked id:"mage:*"; the merge is idempotent read-modify-write, backs the file up to .bak, and refuses to touch malformed JSON. (ADR-0017)
  • mage skills --metrics — read-only context-match report (--json, --quiet) over a gitignored mage/.metrics/ rollup, folded incrementally each turn by the Stop hook. Advisory only: it flags reword-suggested / demote-suggested, it never acts. (ADR-0016)
  • A shared resolveInteractive dual-mode helper across init / link / unlink / connect / disconnect: non-TTY implies non-interactive (an explicit flag or a documented default, otherwise a clear error naming the flag — it never hangs).

Fixed

  • Redaction: added a dedicated anthropic-key detector. Realistic sk-ant-... keys were only partially scrubbed by the generic high-entropy detector (the -/_ in the key body split the run, leaking the sk-ant-... prefix). Surfaced by live dogfooding now that connect routes capture automatically.
  • Capture: keyword derivation at capture drops pure-numerics and ADR/frontmatter boilerplate, so a skill's context-match keyword predicate is usable.
  • Dev toolchain: vitest upgraded to 4.1.8 (clears GHSA-5xrq-8626-4rwp).

Notes

  • Capture stays strictly opt-in — hooks are not bundled with the skills plugin; mage connect is the consent gate.
  • Verified end to end: 383 unit tests, a command-level harness, and real hook-fired capture in this repo (a prompt, tool_use events including a real failure, and a skill_load). A single tool failure yields exactly one event (no PostToolUse/PostToolUseFailure double-fire).

Full changes: v0.0.5...v0.0.6

v0.0.5 — mage observe (hook-fired capture seam)

Choose a tag to compare

@Sumit1993 Sumit1993 released this 07 Jun 15:50

mage 0.0.5 — mage observe (hook-fired capture seam)

This release ships the keystone of the self-grooming loop: a deterministic, no-runtime mage observe command that host hooks invoke to capture work into a normalized, harness-neutral .learnings/*.jsonl schema. It implements ADR-0015 and is the foundation that connect / distill / promote / optimize all read.

Added — mage observe

A plumbing-tier command (invoked by host hooks, never typed by hand) that reads a Claude Code hook JSON on stdin, maps it to one event, scrubs free-text fields, and appends it — without ever blocking the host.

  • Six normalized event types: session_start, user_prompt, skill_load, tool_use, compact, session_end, behind a versioned, additive-only envelope (v, ts, session, type).
  • Salient-extract tool_use — structured path extraction (file tools) plus a bounded per-tool detail; no raw tool input/output is stored (capture insight, not copies).
  • skill_load via the Skill tool — recognized as a load event; mage-recognized skills snapshot match + trigger_hash at load time (what context-match will read in 0.0.6).
  • Tool failures are capturedPostToolUseFailure maps to tool_use with ok:false and the error summary; inline is_error is also honored.
  • .learnings/ hygiene is internal — size-cap rotation and age-purge, with skill_load retained longer than bulky tool_use via a per-session sidecar.

Security — Gate-1 redaction

  • Free-text fields (user_prompt.text, tool_use.detail/error_summary, skill_load.args) are scrubbed through the shared redact() engine before write.
  • Scrub-only, never-block; fail-closed on a redactor error (a sentinel, never the raw value) and fail-open on observe (any error exits 0, never breaks the host hook).
  • Input is bounded before scrubbing so a multi-megabyte field can't run the detector ruleset unbounded on the hot path.

Fixed

  • mage --version now reads the package version dynamically instead of reporting a stale hardcoded 0.0.2.

Quality

  • 290 tests; typecheck and build green.
  • Dogfooded against real Claude Code hook payloads: all six event types, zero secret leaks, fail-open on malformed/empty input, and tool-failure capture confirmed.
  • Establishes a "dogfood before publish" release discipline.

Notes

  • This release is git/GitHub v0.0.5. On npm, 0.0.4 was never published, so the next npm publish moves the package from 0.0.3 to 0.0.5.
  • Auto-capture wiring across host harnesses (mage connect) and the read-only context-match metrics land in 0.0.6. mage observe parses Claude Code payloads today; the .learnings/ schema is deliberately harness-neutral so other harnesses become additive input adapters.

v0.0.4 — mage ingest

Choose a tag to compare

@Sumit1993 Sumit1993 released this 05 Jun 20:07
c359cab

mage 0.0.4 — mage ingest (the engine behind mage:learn --from)

Adds mage ingest <dir>, a deterministic, read-only enumerator/classifier that the mage:learn --from skill calls to get a reliable manifest of ingestable sources, instead of globbing by hand. Distillation and adoption stay in the skill (ADR-0013); this tool never writes.

mage ingest <dir> [--json]

Classifies each source under a directory:

kind what it is
skill a SKILL.md (adopt-in-place candidate)
note a mage-shaped .md (has type / tags)
prose a plain doc / README / .txt / .markdown
transcript a .jsonl capture
feeder-ecc an ECC instinct YAML (lower-confidence feeder)
feeder-native MEMORY.md or a native-memory note (lower-confidence feeder)

--json emits the manifest for the skill to consume. The walk is recursive, skips .git/node_modules/dist/.obsidian, never follows symlinks, and never writes.

Quality

20 ingest tests (classification, priority invariants, skip-dirs, symlink guard, graceful degradation); 209 tests total. TDD plus a TypeScript review pass.

Full changelog: v0.0.3...v0.0.4

v0.0.3 — skills as a Claude Code plugin + mage redact

Choose a tag to compare

@Sumit1993 Sumit1993 released this 05 Jun 19:26

mage 0.0.3 — skills as a Claude Code plugin + mage redact

Skills ship as a Claude Code plugin

mage's hand-authored skills now install as a Claude Code plugin, so they group under a clean mage: namespace instead of carrying a mage- prefix on every name:

/plugin marketplace add Sumit1993/mage-memory
/plugin install mage@mage

You get mage:learn (capture a durable note), mage:guide (how to use the knowledge base), and the mage:specify · mage:clarify · mage:plan · mage:tasks · mage:implement · mage:analyze · mage:constitution spec-driven-development workflow. mage init prints these install lines for you — it never runs slash commands. Per-wing mage-wing-* skills are still generated into .claude/skills/ + .agents/skills/ by mage skills.

The mage: namespace is a Claude Code feature; agents that read .agents/skills/ directly see bare names.

mage redact — two-gate redaction (ADR-0014)

A deterministic, no-model/no-network secret & PII scanner — the commit-boundary gate before a note or skill is written:

mage redact <file>          # report secrets/PII (masked preview; never prints the raw value)
mage redact <file> --strip  # emit redacted text to stdout

15 detectors (AWS access/secret, GitHub classic + fine-grained PAT, GitLab, Stripe, OpenAI, Slack, Azure AccountKey, JWT, bearer, DB-URL credentials, key=value / "key": "value", SCREAMING_SNAKE env vars, high-entropy), all ReDoS-safe (~1 ms on 50 KB), masked previews that never leak the raw secret, idempotent redact(), and false-positive guards for git SHAs / UUIDs / prose. A live secret exits non-zero (block-by-default). Hardened across two adversarial security reviews.

Direction — toward 0.1.0

A design grill resequenced the roadmap toward a 0.1.0 horizon: the full self-grooming memory loop — capture, graduate proven notes into skills, optimize from real usage. Captured in ADR-0013 (procedure skills + the self-grooming loop) and ADR-0014 (two-gate redaction).

Install

npm i -g mage-memory        # the `mage` CLI
# then, in Claude Code:
/plugin marketplace add Sumit1993/mage-memory
/plugin install mage@mage

Full changelog: v0.0.2...v0.0.3