Skip to content

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 07 Jun 18:43
· 365 commits to main since this release

Added

  • Automatic memory now writes rich Why/How fact files, not just one-line bullets (Task 103). The per-turn auto-extract pass — the one that runs in the background on every assistant turn and is immune to which memory tool the model happens to reach for — now synthesizes structured fact files (a titled record with a breakdown body + Why + How to apply) for durable project knowledge: your setup/config, project conventions, completed workflows, and tool quirks. Lighter signals (corrections, preferences) still land as terse MEMORY.md bullets. Before this, only the explicit cmk remember --why/--how produced rich files — so if the model saved to Claude Code's built-in memory instead, you lost the rich tier. Now rich capture rides the automatic path, at trust: medium (a later explicit cmk remember still supersedes), screened by the same secret-guard + home-path sanitization as every other write, and searchable via cmk search.

Fixed

  • The scaffolded CLAUDE.md reads clean — no stale version or dead links (Task 107). A fresh cmk install was dropping a CLAUDE.md block that still said "v0.1.0 is under active development", undercounted the health checks ("HC-1..HC-8" — there are 9), and carried relative links to docs/adr/ and specs/… that resolve inside your repo (where they don't exist). It now reads as a clean runtime contract with external doc links. Also: the managed .gitignore block's version marker tracked the install version instead of a hardcoded v0.1.0, and a stray internal Task 92 reference was removed from the gitignore comment.
  • A session-buffer rollup can no longer drop a turn it races with (Task 106). When the kit compresses your live session buffer (now.md) it takes ~5–10s (a background Haiku call) and then clears the buffer. If your session wrote a new turn during that window, the old behavior could clear it away with the rest. The kit now claims the buffer with an atomic file-rename before compressing, so anything written meanwhile lands on a fresh buffer and is never touched. (This mattered more after Task 105 started rolling at session start, when a new session is actively writing.) Verified with a concurrent-write test + a live end-to-end run.
  • Session memory self-heals at the start of a new session, not only on a clean exit (Task 105). The kit compresses your live session buffer (now.md) into a dated daily file at session end — but Claude Code only fires the session-end hook when you cleanly close the window, not when you start a new chat in the same window. So if you live in one long-running window, now.md could grow without bound and the rolling daily/weekly summaries never built. Now, at session start, the kit notices a now.md left over from a prior session and rolls it forward in the background (detached, so it never slows your session start). The compression no longer depends on a clean exit. (Both paths run and are idempotent.)
  • Hook bins no longer hang when run manually without piped input (Task 101). v0.2.0 fixed this for the SessionEnd bin (cmk-compress-session, Task 100), but every other lifecycle hook bin — cmk-capture-prompt, cmk-capture-turn, cmk-inject-context, cmk-observe-edit, and the plugin's cmk-version-check — shared the same blocking stdin drain: run one by hand (e.g. to debug) without redirecting input and it would hang forever waiting for an end-of-input the terminal never sends. They now detect an interactive terminal and skip the blocking read, so a manual run finishes instead of stalling. No change as a real hook — Claude Code still pipes the payload exactly as before.