Skip to content

Releases: rtk-ai/icm

icm 0.10.49

11 May 08:06
2f37ec4

Choose a tag to compare

What's new

feat(hooks): structured telemetry table + icm hook-log / icm hook-stats (#222)

Adds a hook_events table that captures every icm hook <event> invocation (start | end | pre | post | prompt | compact) with timestamp, duration, exit code, and an optional error note.

Two new CLI commands:

  • icm hook-log [--limit N] [--event NAME] [--prune-older-than RFC3339] — recent rows
  • icm hook-stats [--since-hours N] — per-event count, error rate, avg/p50/p99 latency

Why

Claude Code does not log SessionEnd attachments to its session JSONL, so confirming that icm hook end actually fired previously required catching the detached worker mid-run via ps. This table makes every hook fire observable from inside ICM itself.

Example

$ icm hook-stats --since-hours 24
event      count  errors    avg ms    p50 ms    p99 ms
end           42       0      11.3         9        38
post         756       0      14.1        13        27
start          8       0      35.0        36        83

Install

cargo install icm-cli --version 0.10.49

Or grab the prebuilt binary from the release assets below.

icm-dev-v0.10.50-rc.53

14 May 12:01
92bd851

Choose a tag to compare

Pre-release

What's Changed

Full Changelog: icm-v0.10.48...icm-dev-v0.10.50-rc.53

icm-dev-v0.10.50-rc.52

14 May 08:53
92bd851

Choose a tag to compare

Pre-release

What's Changed

Full Changelog: icm-v0.10.48...icm-dev-v0.10.50-rc.52

icm-dev-v0.10.50-rc.51

14 May 08:32
92bd851

Choose a tag to compare

Pre-release

What's Changed

Full Changelog: icm-v0.10.48...icm-dev-v0.10.50-rc.51

icm 0.10.48

10 May 22:06
69959f8

Choose a tag to compare

Features

Async LLM-CLI extraction path (#219)

Adds an opt-in fast path that removes the ~3.7s fastembed model-load tax on PostToolUse + SessionEnd hooks. When configured, hooks enqueue raw output in ~10ms and a worker drains the queue via the user's existing LLM CLI (claude/codex/gemini/ollama).

```toml

~/.config/icm/config.toml

[extraction.summarizer]
provider = "auto" # auto | none | claude | codex | gemini | ollama
model = "claude-haiku-4-5"
max_tokens = 400
timeout_secs = 30
```

Mode Hook latency Quality Cost
`provider = "none"` (default) 3.7s OK (anchor) $0
`provider = "auto"` (new) ~10ms Excellent (LLM) $0 (user subscription)

The default `none` keeps the inline fastembed path untouched — zero regression for existing users.

What's new

  • `[extraction.summarizer]` config block
  • `pending_extractions` queue table (idempotent migration)
  • `icm extract-pending [--limit N --provider X --model M --dry-run]` worker command
  • SessionEnd hook forks the worker via `setsid` on Unix when provider is configured — no more "Hook cancelled" timeouts from Claude Code

Live verification

```
Hook fire latency: 10ms (was 3700ms inline)
SessionEnd: no "Hook cancelled" anymore
Worker: claude CLI extracted clean bullet, stored as Memory
441 tests pass on Linux/macOS/Windows
```

🤖 Generated with Claude Code

icm 0.10.47

10 May 16:04
702da80

Choose a tag to compare

Bug Fixes

CRITICAL follow-up (completes 0.10.46)

  • hook: extract output from per-tool `tool_response` shapes (Bash/Read/Write) (#216)

    0.10.46 fixed the top-level `tool_response.output` reader but Claude Code 2.1.138 doesn't actually emit that field. Each built-in tool nests its content under a tool-specific key:

    Tool Path
    Bash `tool_response.stdout`
    Read `tool_response.file.content`
    Write `tool_response.content`
    Edit `tool_response.content`

    Net effect of 0.10.46 alone: extraction still produced zero memories on Read/Write/Edit and only matched Bash on clients that emitted `output` instead of `stdout`. 0.10.47 is the release that actually delivers what 0.10.46 promised.

Verified

  • 11 regression tests on `extract_tool_output` covering 6 payload shapes
  • 3 byte-for-byte fixtures captured via tap script during a real `claude -p` smoke test
  • Live end-to-end: `Newest` advanced 17:13 → 17:27 after a single Bash hook fire on the patched binary; unpatched 0.10.46 produced no extraction on identical input
  • 441+ tests pass on Linux / macOS / Windows
  • `cargo clippy --all-targets -- -D warnings` clean

Upgrade urgency

If you're running Claude Code 2.x and you upgraded to 0.10.46: upgrade to 0.10.47 now. The 0.10.46 release closed the silent-extraction-failure issue but, as live testing revealed afterward, only partially — Read/Write/Edit hook fires still produced nothing. 0.10.47 closes the remaining gap.

🤖 Generated with Claude Code

icm 0.10.46

10 May 15:06
9a972e4

Choose a tag to compare

Bug Fixes

CRITICAL

  • hook: read Claude Code 2.x `tool_response.output` payload (#212) — closes silent auto-extraction failure on every Claude Code 2.x install. The hook fired, the counter incremented, but the legacy `tool_output` field was empty in the new payload shape, so zero memories were stored despite hours of activity.

    Now accepts three payload shapes (legacy, Claude Code 2.x, Codex variants) with 8 regression tests + 3 byte-for-byte fixtures pinned in `tests/fixtures/hook_payloads/` so the next upstream change breaks at PR review instead of silently in production.

Stability

  • init: turn 7 init unwrap panics into proper error returns (#213) — `icm init` no longer hard-panics on malformed user MCP / hook config files. Errors now point at the exact key + path that's wrong.

Verification

  • 438+ tests pass on Linux / macOS / Windows
  • 8 regression tests + 3 fixture files for hook payload parsing
  • Smoke-tested on dev box: 5 hook fires with Claude Code 2.x payload yielded 2 memories at +4min where the unpatched binary produced none on identical input

Upgrade urgency

If you run Claude Code 2.x with ICM hooks installed, upgrade now — auto-extraction has been silently broken since you upgraded Claude Code. Existing memories in your store are unaffected; only new ones since the Claude Code upgrade are missing.

Binary assets are built by the post-release workflow and will appear shortly.

🤖 Generated with Claude Code

icm 0.10.45

10 May 10:24
b8d1c9c

Choose a tag to compare

Bug Fixes

  • import: truncate at UTF-8 char boundary to avoid panic on multibyte chars (#201) — closes #199
  • store: clear drifted embedding BLOBs on every open + atomic dim migration (#202) — closes #200
  • consolidate, health: warn that provider=none is a lexical join, not a summary (#203) — closes #186
  • doctor: walk every platform icm init configures, not just Gemini (#204) — closes #174
  • display: respect TZ env on every CLI/MCP timestamp render (#205) — closes #119
  • init, doctor: forward-slash bin path on Windows + match icm.exe in detect (#206) — closes #180
  • opencode: inject recalled context via system.transform hook (#207) — closes #169
  • tui: drop crossterm key Release events on Windows to stop double-fire (#208) — closes #181
  • hook: emit Cursor-shaped JSON when invoked from Cursor (#209) — closes #120

Verification

  • 9 PRs, ~30 new regression tests, 427+ tests pass on Linux / macOS / Windows
  • All security-checked: 0 new `unsafe` blocks, 0 new `Command::new`/`spawn`, 0 new fs writes, parameterized SQL only

Binary assets are built by the post-release workflow and will appear shortly.

🤖 Generated with Claude Code

icm-dev-v0.10.49-rc.48

11 May 07:56
69959f8

Choose a tag to compare

Pre-release

What's Changed

  • feat(extract): async LLM-CLI extraction path (50ms hooks via pending queue) by @pszymkowiak in #219
  • Release prep: merge develop → main for v0.10.48 (async LLM extraction) by @pszymkowiak in #220
  • chore(main): release icm 0.10.48 by @pszymkowiak in #221

Full Changelog: icm-v0.10.47...icm-dev-v0.10.49-rc.48

icm-dev-v0.10.48-rc.45

10 May 19:21
702da80

Choose a tag to compare

Pre-release

What's Changed

  • fix(hook): extract output from per-tool tool_response shapes (Bash/Read/Write) — CRITICAL follow-up by @pszymkowiak in #216
  • Release prep: merge develop → main for v0.10.47 (CRITICAL hook follow-up) by @pszymkowiak in #217
  • chore(main): release icm 0.10.47 by @pszymkowiak in #218

Full Changelog: icm-dev-v0.10.47-rc.42...icm-dev-v0.10.48-rc.45