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