v12.0.0
thedotmack/claude-memv12.0.0Apr 7, 2026by thedotmack
AI Summary
A major release delivering intelligent file-read gating that blocks redundant reads using observation timeline injection, expanded smart-explore to 24 programming languages via tree-sitter AST parsing, and full platform source isolation between Claude and Codex sessions. Includes 40+ bug fixes across Windows, Linux, and macOS plus OpenClaw and Codex plugin support.
Key Highlights
- File-Read Decision Gate — intelligently blocks redundant file reads with observation timeline injection, saving tokens and keeping context focused
- Smart-Explore now supports 24 programming languages via tree-sitter AST parsing including TypeScript, Python, Rust, Go, Java, and more
- Platform Source Isolation — Claude and Codex sessions fully isolated with dedicated namespaces preventing cross-contamination
- OpenClaw and Codex Support — added workerHost config for Docker deployments and plugin manifest for marketplace discoverability
- 40+ bug fixes across all platforms addressing worker startup, data integrity, security, Windows compatibility, and parser issues
Breaking Changes
- Database migration v25 required for `platform_source` column on `sdk_sessions` table
- Default model updated from `claude-sonnet-4-5` to `claude-sonnet-4-6`
- Removed dead `USER_MESSAGE_ONLY` exit code that previously caused SessionStart hook errors
New Features
- File-read decision gate with permissionDecision deny and rich timeline payload
- 24-language smart-explore with AST-based code exploration
- Platform source isolation with session namespacing
- CLAUDE.local.md support via `CLAUDE_MEM_FOLDER_USE_LOCAL_MD` setting
- OpenClaw workerHost config for Docker deployments
- Codex plugin manifest for marketplace discoverability
- File-size threshold to skip gating for small files
- Observation deduplication to prevent duplicate timeline entries
- Migration for `generated_by_model` and `relevance_count` columns
- Null-byte delimiter in observation content hash to prevent collisions
Full Release Notes
# claude-mem v12.0.0 A major release delivering intelligent file-read gating, expanded language support for smart-explore, platform source isolation, and 40+ bug fixes across Windows, Linux, and macOS. ## Highlights ### File-Read Decision Gate Claude Code now intelligently gates redundant file reads. When a file has prior observations in the timeline, the PreToolUse hook injects the observation history and blocks the read — saving tokens and keeping context focused. The gate supports both `Read` and `Edit` tools, uses `permissionDecision` deny with a rich timeline payload, and includes file-size thresholds and observation deduplication. ### Smart-Explore: 24 Language Support The `smart-explore` skill now supports **24 programming languages** via tree-sitter AST parsing: TypeScript, JavaScript, Python, Rust, Go, Java, C, C++, C#, Ruby, PHP, Swift, Kotlin, Scala, Bash, CSS, SCSS, HTML, Lua, Haskell, Elixir, Zig, TOML, and YAML. User-installable grammars with `--legacy-peer-deps` support for tree-sitter version conflicts. ### Platform Source Isolation Claude and Codex sessions are now fully isolated with `platform_source` column on `sdk_sessions`. Each platform gets its own session namespace, preventing cross-contamination between different AI coding tools. Normalized at route boundaries for consistent behavior. ### Codex & OpenClaw Support - Codex plugin manifest added for marketplace discoverability - OpenClaw: `workerHost` config for Docker deployments - OpenClaw: handle stale `plugins.allow` and non-interactive TTY in installer ## New Features - **File-read decision gate** — blocks redundant file reads with observation timeline injection (#1564, #1629, #1641) - **24-language smart-explore** — AST-based code exploration across all major languages - **Platform source isolation** — Claude/Codex session namespacing with DB migration - **CLAUDE.local.md support** — `CLAUDE_MEM_FOLDER_USE_LOCAL_MD` setting for writing to local-only config - **OpenClaw workerHost** — Docker deployment support for OpenClaw plugin - **Codex plugin manifest** — discoverability in Codex marketplace - **File-size threshold** — skip file-read gating for small files - **Observation deduplication** — prevent duplicate observations in timeline gate ## Bug Fixes ### Worker & Startup - Fix worker startup crash with missing observation columns (#1641) - Fix SessionStart hooks failing on cold start due to worker race condition - Fix worker daemon being killed by its own hooks (#1490) - Fail worker-start hook if worker never becomes healthy - Fix readiness timeout logging on reused-worker path (#1491) - Remove dead `USER_MESSAGE_ONLY` exit code that caused SessionStart hook errors - Decouple MCP health from loopback self-check ### Data Integrity - Fix migration version conflict: `addSessionPlatformSourceColumn` now correctly uses v25 - Add migration for `generated_by_model` and `relevance_count` columns - Wire `generated_by_model` into observation write path - Use null-byte delimiter in observation content hash to prevent collisions - Persist session completion to database in `completeByDbId` (#1532) - Handle bare path strings in `files_modified`/`files_read` columns (#1359) - Guard `json_each()` calls against legacy bare-path rows - Deduplicate session init to prevent multiple prompt records ### Security - Prevent shell injection in summary workflow (#1285) - Sanitize observation titles in file-context deny reason (strip newlines, collapse whitespace) - Normalize `platformSource` at route boundary to prevent filter inconsistencies - Escape `filePath` in recovery hints to prevent malformed output - Address path safety, SQL injection, and gate scoping in file-read hook ### Windows - Fix `isMainModule` CJS branch failure on Bun — add `CLAUDE_MEM_MANAGED` fallback - Use `cmd /c` to execute `bun.cmd` on Windows - Prefer `bun.cmd` over bun shell script on Windows - Add `shell: true` on Windows to spawn bun from npm ### Cross-Platform - Replace GNU `sort -V` with POSIX-portable version sort - Resolve `node not found` on nvm/homebrew installations - Resolve hook failures when `CLAUDE_PLUGIN_ROOT` is not injected (#1533) - Fix bun-runner signal exit handling — scope to `start` subcommand only - Guard `/stream` SSE endpoint with 503 before DB initialization - Provide empty JSON fallback when stdin is not piped (#1560) ### Parser & Content - Strip `<persisted-output>` tags from memory - Strip `<system-reminder>` tags from persisted memory and DRY up regex - Skip `parseSummary` false positives with no sub-tags (#1360) - Handle bare filenames in `regenerate-claude-md.ts` (#1514) - Handle bare filenames in `path-utils.ts isDirectChild` - Handle single-quoted paths and dangling var edge case - Strip hardcoded `__dirname`/`__filename` from bundled CJS output - Add PHP grammar support to smart-file-read parser (#1617) ### Installer & Config - Make post-install allowlist write guaranteed - Harden plugin manifest sync script - Fix `expand ~` to home directory before project resolution - Update default model from `claude-sonnet-4-5` to `claude-sonnet-4-6` (#1390) - Fix Gemini conversation history truncation to prevent O(N²) token cost growth ## Refactoring - Rename formatters to `AgentFormatter`/`HumanFormatter` for semantic clarity --- **Full Changelog**: https://github.com/thedotmack/claude-mem/compare/v11.0.1...v12.0.0