Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 21:31
· 252 commits to main since this release

Fixed

  • portability(139): cloned projects recall their memory on Windows. Default git settings (autocrlf) rewrite the committed memory files' line endings on clone, which made every fact invisible to search until now — reads are line-ending tolerant and self-heal on the next write.

  • import(138): cmk import-anthropic-memory no longer breaks search. Imported bullets carried a non-standard provenance comment that failed the next index rebuild (search fell back to the stale index with a warning). Imports now write the canonical provenance shape.

  • memory(136): a long extraction can no longer write a corrupted fact. When a knowledge-dense turn produced more rich facts than the output budget, the last fact was silently truncated mid-word and stored as a stub. Clipped facts are now dropped (and counted in the diagnostic log) instead of written, and the budget is 4x larger so clipping is rare.

  • install(133): the memory-search skill is permission-allow-listed, so recall fires prompt-free (the skill shipped in this release without its allow entry — first invocation would have asked "Use skill?").

  • memory(132): organic auto-capture works again — the extractor no longer suppresses itself. Since v0.2.0, the fact extractor was shown the just-captured turn as "already saved" context (a write-then-read ordering bug), so it answered "nothing durable" for most organic conversation — explicit cmk remember captures and persona promotion were unaffected. The dedup snapshot is now taken before the turn is buffered. Found by the v0.3.0 release gate; if your context/MEMORY.md stayed suspiciously empty, this was why.

Removed

  • cmk view (a never-implemented stub). The command answered "not yet implemented" since v0.1.0 — removed rather than left promising vapor; a real memory viewer (for non-developer users) is parked as a designed v0.4 candidate. Read memory directly (context/MEMORY.md, context/memory/) or through cmk search.

Fixed

  • memory(124): cmk forget and fact merges keep INDEX.md current. Tombstoning or merging a granular fact now refreshes the markdown index in-band — previously the removed fact stayed listed (a dangling link) and cmk doctor's INDEX-accuracy check failed until a manual cmk reindex. Found by dogfooding the kit on its own repo.

Added

  • search(104.2 + 126): the session record is searchable — the last-resort recall tier. cmk search "<query>" --scope transcripts (and mk_search with scope) searches the session record — verbatim transcripts AND the compressed daily/weekly summaries — by keyword or meaning — the exact error message from three weeks ago, the command that fixed something, how a discussion actually went. Kept deliberately separate: normal searches never surface raw history; the memory-search skill reaches for it only when curated memory has no answer. Transcripts keep full history (unlike Claude Code's ~30-day session files), with growth bounded per turn at capture time.
  • transcripts(104.1): the kit's transcript now records what Claude DID, not just what it said. Each assistant turn's entry gains a compact Tools block — the commands run, files edited, searches made, with truncated results — extracted at capture time from Claude Code's live session record (which itself expires after ~30 days and never leaves your machine). Your committed context/transcripts/ becomes a durable, portable record of the actual work, ready to serve as the last-resort recall tier. Capped per turn so transcripts stay lean; privacy tags are honored everywhere.
  • hooks(75.2): a per-prompt "memory available" nudge keeps recall alive mid-session. Substantive prompts in a project with a memory archive now carry a one-line model-facing hint (via the existing UserPromptSubmit hook — no new hook, no extra process) reminding Claude that recorded memory exists beyond the session snapshot and naming the memory-search skill. Short prompts ("ok", "go") never pay it. With this, the recall trigger is complete: authority instruction at session start, an auto-invoked recall skill, and mid-session awareness.
  • skills(75.1): the memory-search recall skill — Claude now knows WHEN to search its memory. cmk install (and the plugin) ships a second skill alongside memory-write: an auto-invoked, read-only recall skill that fires on "what did we decide about X" / "have we seen this error before" / before re-deriving recorded project knowledge from code. It runs forked (raw archive expansions never bloat your conversation — only a curated, citation-backed summary returns) and teaches the filter-before-fetch ladder over the kit's existing search → timeline → get tools. The session-start snapshot is the hot index; this skill reaches everything behind it.
  • mcp(125): degraded recall is never silent. When a project's configured hybrid default can't run (embedder unavailable), mk_search now tells Claude the results are keyword-only and to suggest cmk install --with-semantic — so the degradation reaches the user instead of hiding. (The CLI already printed a stderr note; this brings the MCP surface to parity.)
  • install(46): one-flag semantic enablement — cmk install --with-semantic. Installs the local embedder, pre-warms the model (the one-time download happens during install, not on your first search), and flips the project's default search to hybrid — from then on, plain cmk search and Claude's mk_search recall by meaning with no flags. --no-semantic pins keyword-only; if the embedder is ever unavailable, a configured hybrid default degrades gracefully to keyword instead of failing.
  • search(65): semantic + hybrid recall are REAL — ask in your own words, get the right memory. cmk search --mode=semantic|hybrid (and the mk_search MCP tool Claude drives) now run an embedded vector backend: sqlite-vec inside the kit's existing index + a local ONNX embedder (Xenova/bge-base-en-v1.5), chosen by a measured bake-off — R@5 0.941, paraphrase recall 1.000 on the kit's recall benchmark (vs 0.176 for keyword-only). Paraphrase queries that keyword search structurally misses ("where do credentials go" → the 1Password fact) now hit. The embedder is optional (~260 MB once, model downloads on first use): without it, semantic/hybrid degrade to a clear install hint and keyword search is unchanged; CMK_DISABLE_SEMANTIC=1 opts out entirely. Zero API calls — everything runs locally.
  • inject(75.0): the session-start memory snapshot now opens with an authoritative-memory instruction. Every non-empty injected snapshot leads with a fixed preamble telling the agent the injected memory + cmk search are the ground truth for documented knowledge and prior decisions — "when injected memory contradicts your assumptions, injected memory wins; never treat a question as novel when the answer is already in your prompt" (adapted from memory-os Layer 07). Fixes the cold-open failure where the agent re-derives from code what its memory already answers. The scaffolded CLAUDE.md gains a matching one-line Authority rule. Existing installs pick the preamble up automatically on upgrade — it is generated by the hook, not scaffolded.