Claude-Session: https://claude.ai/code/session_0112vdwZphiWzfCYfaXMes4C
34 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.6.0] - 2026-09-08
Adds a fifth conversation source, an off switch for automatic syncing, and two fixes for real-world resource problems.
Added
- Oh My Pi (OMP) conversations are now indexed and searchable, alongside Claude Code, Codex, Cursor, and opencode. Sessions in
~/.omp/agent/sessionsare picked up automatically; the parser follows the active branch of a session's message tree. Built to the format reported in the issue — if your OMP transcripts index oddly, please open an issue. Thanks to @rhlsthrm for the request and format details (#148). EPISODIC_MEMORY_DISABLE_AUTO_SYNC=1fully turns off the automatic background sync that runs on session start, for anyone who prefers to sync on a schedule (cron or a scheduled task) or pause indexing entirely. UnlikeEPISODIC_MEMORY_SKIP_SUMMARIES, this stops the copy and index work too. A manualsyncyou run yourself is unaffected. Thanks to @Nogalj (#163).- AWS Bedrock is a supported summarization backend. Set
CLAUDE_CODE_USE_BEDROCK=1with your AWS credentials and region in the plugin's environment and summaries route through Bedrock; the metered-billing warning correctly stays quiet since noANTHROPIC_API_KEYis involved. The credential passthrough is tested; the live Bedrock call depends on your AWS setup. Thanks to @daniel-butler (#44).
Fixed
- Syncing no longer re-embeds work it has already indexed. The background sync had its own indexing loop that re-embedded every message of every file it copied, on every run — so a long-lived session's transcript was re-processed in full each time, and the cost grew with the file. It now embeds only new messages, matching the incremental indexer. On large corpora this turns minutes of repeated work per sync into seconds. Thanks to @dkindlund (#152).
- A
DO NOT INDEXmarker is now honored even in very large transcripts. Files above the ~512 MB string limit were scanned only partially and, on the error path, indexed anyway — so the marker could be silently missed. The check now fails closed: if a large file can't be fully verified as marked, it is not indexed. Thanks to @dkindlund (#152). - Foreign summarizer payloads can no longer bloat the index. Some third-party tools embed an entire conversation transcript into a single prompt, which was then stored as one multi-megabyte "message" — in one report, 97% of a 3 GB index. Messages above a size cap (256 KB by default,
EPISODIC_MEMORY_MAX_MESSAGE_BYTESto change) are now skipped before embedding, with a count logged per run. Normal turns are thousands of times smaller and are unaffected. Thanks to @danielsimonjr (#139). - Failed dependency installs no longer pile up. When the MCP server wrapper had to run
npm installand the connection timed out, the install child was orphaned and kept running, and each retry started another — several could end up competing and starving each other so none finished. The wrapper now kills its install child when it exits and holds a single-install lock so retries can't stack. Thanks to @chernobylx (#161).
[1.5.0] - 2026-09-08
This release closes a summarizer security hole, adds two new coding tools to what you can search, makes search itself return the results it used to miss, and hardens install and summarization against a long list of real-world failures.
Security
- The background summarizer can no longer act inside your live session. It used to resume the session with your tools, your MCP servers, and your settings all loaded, so a summarize pass could execute pending work and, in at least one report, commit to a working repo. It now runs with no tools, no user MCP servers, and no user settings — it can only write a summary. If you saw a background agent modify files, launch extra MCP windows per conversation, or fire "task finished" notifications for old sessions, that is fixed (#108, #149, #106, #136).
Added
- Search now covers Cursor conversations. Live Cursor transcripts are indexed automatically, and a one-time
import-cursor-historycommand backfills your existing history from Cursor's local database (#113). - Search now covers opencode conversations, including AI summaries for them (#117).
- Work done inside subagents and
Workflowruns is searchable at last. These "sidechain" conversations were indexed but hidden from every search — in orchestration-heavy sessions that was most of the content. They now appear in results, ranked just below equally-relevant main-thread matches. Passinclude_sidechains: false(or--exclude-sidechains) to restore the old main-thread-only behavior (#128). - Three new environment switches:
EPISODIC_MEMORY_SKIP_SUMMARIES=1turns off the summarization pass while still indexing (#159);EPISODIC_MEMORY_SUMMARY_TIMEOUT_MScaps how long one summary may run before it is abandoned (#160);EPISODIC_MEMORY_ALLOW_METERED_API=1acknowledges and silences the new metered-billing warning below (#104).
Changed
- Sidechain conversations now surface in search by default (see Added). If you prefer the previous behavior, opt out per query.
Fixed
- Multi-word text searches return results again. A
text-mode query used to match only as one exact contiguous string, so almost any multi-word search came back empty. It now matches when every word appears, in any order (#144, #127). - Date-filtered searches no longer come back empty. A search narrowed with
after/beforein vector mode could return nothing even when matches existed, because the date filter was applied after the nearest-neighbor cutoff. It now over-fetches so the date window is honored (#126). - Summarization is far more robust. It now recovers instead of failing permanently when a conversation's original project is gone (#122), when the resume subprocess exits nonzero (#147), or when a conversation ends on an extended-thinking turn (#110); it reports the real error text and stops a whole batch fast on an expired login instead of burning ~32 minutes on doomed calls (#145, #138); and a single wedged summary can no longer stall every later sync, thanks to a timeout (#160).
- The summarizer warns before spending real money. If a global
ANTHROPIC_API_KEYis set, background summaries bill the metered API instead of your Claude subscription; it now prints a one-time warning so the cost is visible. SetEPISODIC_MEMORY_ALLOW_METERED_API=1to acknowledge it (#104). - Install fails loudly and clearly when the native database binding cannot load, instead of exiting clean and then crashing on first use with a confusing error (#150, #100).
- A host that cannot load the embedding backend no longer crashes at session start. Copying and summarization keep working; only semantic indexing is skipped, with a clear message (#135, #137).
- A single dangling symlink in your projects folder no longer crashes sync, index, verify, and rebuild (#142).
- A transcript that disappears mid-run no longer aborts the whole index; the run skips it and continues (#121).
- On Apple Silicon, embedding no longer pegs every CPU core during indexing; thread use is capped, with an env override, and no effect on other platforms (#124).
- Displayed conversation timestamps are pinned to a fixed format, so they no longer show a day-shifted or reordered date on non-US locales (#120, #130).
- Concurrent workers are safer: the index command now shares the single-instance lock with background sync, and a busy-timeout absorbs brief write overlaps (#156, #101).
- The bundled search agent's description was invalid YAML; it is now valid (#153).
- The test suite no longer writes into your real configuration directory (#119).
Internal
- Continuous integration builds and tests every pull request, including from forks, on Node 22 and 24 (#164). Added isolated MCP server integration tests (#157). The committed build output is now regenerated reproducibly from source.
[1.4.2] - 2026-05-21
Fixed
- Summarization no longer crashes for conversations archived from a different project than the one running sync. Before, every short (≤15 exchange) conversation whose recorded project cwd differed from sync's cwd would silently fail with
Cannot read properties of undefined (reading 'match'), and the failed file would re-queue forever. The summarizer now passes the recorded cwd through to the Claude Agent SDK and falls back to a non-resume summary when the project directory no longer exists on disk. Multi-project users were the most affected. Thanks to @minyek for the fix (#93). - Codex summarization works again for ChatGPT-subscription users. The summarizer used to forward whatever model id was baked into the historical exchange data, including pre-deprecation values like
gpt-5.2-codex. Codex'sapp-serverreturns a 400 for any-codexsuffix variant when authenticating via a ChatGPT account, so older Codex sessions silently fell through to the transcript-text fallback (hurting recall quality). The summarizer now lets Codex pick the default from~/.codex/config.toml#model. Operators who need a specific model id can setEPISODIC_MEMORY_CODEX_MODEL. Thanks to @monsterxz9 for the fix (#99). - Failed summaries no longer pin the head of the sync queue forever. Any transient summarization error (network blip, API rate limit, SDK shape change) used to leave no sentinel on disk, so the same file would re-attempt on every sync run indefinitely. Ten persistent failures at the head of the queue would block every conversation behind them from being summarized. Sync now writes a structured error sentinel and re-attempts after a configurable threshold (default 1 hour, via
EPISODIC_MEMORY_SUMMARY_ERROR_RETRY_HOURS); verify, stats, and the indexer all distinguish real summaries from error sentinels (#96). - Concurrent sync workers no longer race when multiple Claude Code sessions fire SessionStart at the same time. Multi-worktree setups previously spawned one background sync process per session, each trying to write to the same SQLite database (which crashes with
SQLITE_BUSYon macOS/Linux) and each spawning Claude subprocesses (which exhausts the desktop heap on Windows, crashing workers withSTATUS_DLL_INIT_FAILED). A single-instance file lock now serializes sync workers; competing workers printsync already running (pid X); skippingand exit cleanly (#97). - The MCP server wrapper detects partial
node_modulesextractions. An interrupted plugin install could leave a package as just an empty folder (no manifest, no library code), and the previous wrapper declared deps healthy becausenode_modules/itself existed. First launch then crashed with a confusingERR_MODULE_NOT_FOUND. The wrapper now probes each required package's manifest and rerunsnpm installif any are missing, logging which ones (#95 Bug 1). npm installexits 0 on Windows. The postinstall step previously used unix-only shell syntax (2>/dev/null || true) that fails on cmd.exe, sonpm installexited non-zero even when every package installed correctly. Now uses a cross-platform Node script. The reporter on #95 saw this and started troubleshooting what they assumed was a broken install — those follow-on diagnostics led to the misidentified Bug 2 (onnxruntime-common-not-hoisted), which on reproduction turns out to be a misread ofnpm ls's logical-tree output (the package is hoisted in practice).
[1.4.1] - 2026-05-17
Fixed
- Sync no longer gets stuck on conversations with no real content. Previously, files with only metadata or stub records re-queued for summarization on every run. Once ten of them piled up at the head of the queue, real conversations behind them stopped getting summarized at all. Now those files are marked as done the first time they're skipped, and the backlog drains. Thanks to @minyek for the fix.
[1.4.0] - 2026-05-13
Changed
- The
remembering-conversationsskill now triggers reliably for personal-fact lookups and other small questions that previously slipped past it. Tested against fresh sessions asking a personal-fact question, the previous description fired the skill 0/5 trials; the new description fires 3/5.
Removed
- The
/search-conversationsslash command. Reference past work in natural conversation instead — theremembering-conversationsskill dispatches thesearch-conversationsagent automatically when recall is needed.
[1.3.1] - 2026-05-13
Fixed
- Recall skills now trigger when an agent needs to remember anything learned from prior Claude Code or Codex conversations, including decisions, patterns, solutions, pitfalls, workflows, project context, and lessons from similar work.
- Search-agent and slash-command descriptions now describe broad recall situations instead of narrowing discovery to explicit user requests or personal facts.
[1.3.0] - 2026-05-13
Added
- Native Codex plugin support with
.codex-plugin/plugin.json, Codex MCP configuration, plugin hook packaging, and a local development marketplace entry. - Codex rollout transcript parsing, display, archiving, indexing, and cross-harness search across Claude Code and Codex conversations.
- Codex-native summarization through
codex app-serverephemeralthread/fork, with transcript-text fallback when Codex summarization is unavailable. episodic-memory doctor codexfor checking Codex version, plugin features, MCP registration, hook trust, transcript directory, database, and sync log paths.- Opt-in live Codex and Claude E2E scripts that verify archive, summary, index, and MCP recall behavior.
Changed
- Recall skill instructions and MCP tool documentation now describe Claude Code and Codex usage, including direct MCP search/read guidance in Codex.
- CLI help, README setup, and architecture documentation now describe Claude Code plus Codex support.
Fixed
- Codex hook trust diagnostics now report when the Episodic Memory hook is already trusted instead of always suggesting
/hooks. - Codex HTML transcript rendering now escapes raw HTML from transcript content before rendering.
- Codex
local_shell_call_outputitems are now paired with local shell tool calls during parsing and included in rendered transcript output.
[1.2.0] - 2026-05-03
Better search results
This release upgrades the embedding model used for semantic search. On a 17,000-exchange retrieval test built from real production data, the new model puts the right answer at rank 1 about 53% of the time, up from 47%. Top-10 accuracy improves from 68% to 75%.
The new model is bge-small-en-v1.5 (BAAI), replacing all-MiniLM-L6-v2. Both produce 384-dimensional embeddings, so storage is unchanged.
Automatic migration
Existing indexes upgrade themselves in the background. After you install 1.2.0, each episodic-memory sync re-embeds up to 500 stored exchanges with the new model. Claude Code triggers a sync at every session start, so most indexes finish migrating after roughly 60 sync runs — a few days of normal use.
During sync you'll see a line like this on stderr:
episodic-memory: re-embedding batch of 500 (29569 stale total)...
Search keeps working throughout. The index holds a mix of old and new embeddings until migration finishes; ranking is slightly noisier but never broken.
To finish faster, run a sync with a larger batch:
EPISODIC_MEMORY_MIGRATION_BATCH=5000 episodic-memory sync
That takes about a minute per call on a recent Mac.
If two syncs run at once, only one re-embeds; the other skips its migration step. A crash mid-batch leaves the unfinished rows tagged for migration, and the next sync picks up where the previous one stopped.
Other notes
- First sync after upgrade downloads a new 34 MB model file.
- Rollback to 1.1.x is safe. Search still works against a partially-migrated index.
- Resolves #82 (ONNX runtime crash on Node 23 and earlier) as a side effect of the underlying library upgrade.
[1.1.2] - 2026-05-03
Fixed
- Critical: recursive process explosion from auto-sync (#87, #88, thanks @kaankoken and @materemias for the diagnosis):
- The
persistSession: falsefix in 1.1.0 (#83) prevented the SDK-spawned Claude subprocess from saving its session JSONL, but did not stop the subprocess from firing the SessionStart hook. That re-ranepisodic-memory sync --background, which re-summarized, which spawned another Claude subprocess, which fired the hook again — fanning out hundreds of detached processes, saturating CPU, and burning API quota. - Added a reentrancy guard env var
EPISODIC_MEMORY_SUMMARIZER_GUARD, set when calling the SDK'squery()and inherited by the spawned subprocess. Thesync-clientry point checks the guard at startup and exits silently when it's set, breaking the recursive cascade at its only feasible point. - Coverage: unit tests for
getApiEnv()(always sets the guard) andshouldSkipReentrantSync(), plus an integration test that spawnsdist/sync-cli.jswith the guard env and asserts a clean exit without doing work. - Anyone affected by the cascade should update to 1.1.2 immediately. If 1.1.0 or 1.1.1 had been spawning processes, kill any lingering
episodic-memoryandclaude-agent-sdkchildren before restarting Claude Code.
- The
[1.1.1] - 2026-05-03
Fixed
- MCP server now reports the actual plugin version in its protocol handshake instead of the long-stale hardcoded
1.0.0. Inspector tools and any client logging the server identity will now see the real version.
Changed
- Single source of truth for version numbers.
package.jsonis the source;src/version.tsis generated from it at prebuild/pretest time and is referenced bymcp-server.ts. Source code can no longer drift from the declared package version. - Drift test for manifest files. A new
test/version-consistency.test.tsassertspackage.json,.claude-plugin/plugin.json, and.claude-plugin/marketplace.jsonall agree. CI fails if anyone bumps one without the others. scripts/bump-version.sh+.version-bump.jsonfor one-command version bumps with built-in audit (greps the repo for stale version strings in undeclared files). Run./scripts/bump-version.sh X.Y.Zto update all declared files;--checkreports current state,--auditscans for stragglers.
[1.1.0] - 2026-05-02
Added
- Search metadata filters (#63, thanks @jwk2601 for the design):
--project,--session-id, and--git-branchflags scope results by exact-match project name, session ID, or git branch. Available on the CLI and the MCPsearchtool. Filter values bind as positional SQL parameters; the existing--after/--beforetime filters were converted from string interpolation to bound parameters in the same change. - API configuration env vars for summarization (#37, thanks @techjoec):
EPISODIC_MEMORY_API_MODEL— override the summarizer model (default: haiku)EPISODIC_MEMORY_API_MODEL_FALLBACK— fallback model on errors (default: sonnet)EPISODIC_MEMORY_API_BASE_URL— custom Anthropic endpointEPISODIC_MEMORY_API_TOKEN— auth token for custom endpointEPISODIC_MEMORY_API_TIMEOUT_MS— request timeout
Changed
- Bumped
@anthropic-ai/claude-agent-sdkto 0.2.x (transitively requires zod 4). Required for thepersistSessionoption used by the #83 fix. tool_callsschema now usesON DELETE CASCADE(#81). Fresh databases create the table with cascade; existing databases get a one-time migration that recreatestool_callswith cascade and drops any orphaned rows. The migration is idempotent and runs only when the schema lacksON DELETE CASCADE.exclude.txtmatches nested directory names (#80, thanks @rohitgehe05 for the diagnosis): addingsubagentsnow also skips<project>/<session>/subagents/agent-*.jsonlinstead of only matching top-level project directories.
Fixed
- Indexer skipped appended exchanges (#84, thanks @jamster for the diagnosis and detection script): the
COUNT(*) > 0skip was replaced with aMAX(line_end)high-water mark, so transcripts that grow after their first index pass now pick up their tail. Resumed sessions and SessionStart syncs that race the still-running session no longer silently lose the trailing content. - Search similarity scores were wrong (#55, thanks @gmax111):
1 - row.distancewas treating L2 distance as cosine distance. For unit-normalized embeddings the correct conversion is1 - d²/2. Result ordering was already correct (the formula was monotonic in distance), so this is a display/aggregation correction, not a ranking change. - Summarizer session pollution (#83, thanks @benseeley for the detailed reproduction):
persistSession: falseis now passed to the SDK, so summarization no longer creates fake session JSONLs in~/.claude/projects/<cwd-slug>/. deleteExchangeFK crash (#81, thanks @rohitgehe05):index --repairno longer fails withSQLITE_CONSTRAINT_FOREIGNKEYon exchanges that have associated tool_calls.- Windows hook fails on home directories with spaces (#75, thanks @phantomsecurityandfire and @officialasishkumar): the SessionStart hook command now quotes
${CLAUDE_PLUGIN_ROOT}. - MCP install fails with
ETARGETon stale npm cache (#76, thanks @DarkbyteAT and @mvanhorn): removed--prefer-offlinefrom the wrapper'snpm installinvocation. - MCP protocol corruption from embedding model output (#48): the embedding model's stdout is now redirected to stderr.
- Orphaned MCP processes (#54): added SIGHUP handler and stdin-close detection to the wrapper.
exclude.txtignored at sync time (#38): now honored by sync and verify commands.- Bundled file-discovery and path fixes (#42, #50, #57, #62, #68, #70, #72): sidechain filtering in search, SessionStart
clearmatcher,CLAUDE_CONFIG_DIRsupport, recursive subagent file discovery, support for both~/.claude/projectsand~/.claude/transcripts, and explicit surfacing of summarization failures.
Documentation
- Fix npm install instructions to use the GitHub source (#71).
[1.0.15] - 2025-12-17
Changed
- Stop shipping package-lock.json: Removed from git tracking so npm generates platform-appropriate lockfile on install
- Remove file deletion from MCP wrapper: No longer deletes package-lock.json on first run (unnecessary without shipped lockfile)
[1.0.14] - 2025-12-16
Fixed
- Windows spawn ENOENT error: Add
shelloption for npx commands on Windows (#36, thanks @andrewcchoi!)- On Windows, npx is a .cmd file requiring
shell: truefor spawn() to work - Applied fix to
cli/episodic-memory.jsandcli/index-conversations.js - Resolves plugin initialization failures and silent SessionStart hook failures on Windows
- On Windows, npx is a .cmd file requiring
- Agent conversations polluting search index: Add exclusion marker to summarizer prompts (#15, thanks @one1zero1one!)
- Summarizer agent conversations are now properly excluded from indexing
- Extracted marker to shared constant (
SUMMARIZER_CONTEXT_MARKER) for maintainability
- Background sync silently failing: CLI now uses compiled JS instead of tsx at runtime (#25 root cause, thanks @stromseth for identifying!)
--backgroundflag on sync command now works correctly- Fixes SessionStart hook auto-sync that was silently failing
- Directory auto-creation: Config directories are now created automatically (inspired by #18, thanks @gingerbeardman!)
getSuperpowersDir(),getArchiveDir(),getIndexDir()now ensure directories exist- Prevents errors on fresh installs where directories don't exist yet
Changed
- CLI uses compiled JavaScript: Remove tsx from runtime path
- All CLI commands now route through
dist/*.jsinstead ofnpx tsx src/*.ts - Faster startup, lighter runtime dependencies
- tsx is now dev-only (for tests and development)
- Obsoletes PR #25 (background sync fix) by fixing root cause
- All CLI commands now route through
- CLI architecture cleanup: Replace bash scripts with Node.js wrappers
- All CLI entry points (
episodic-memory,index-conversations,search-conversations,mcp-server) are now Node.js scripts - Eliminates bash dependency entirely for full cross-platform support (Windows, NixOS, etc.)
- SessionStart hook now calls
node cli/episodic-memory.jsdirectly - Added
search-conversations.jsto complete Node.js CLI coverage - Obsoletes PRs #29 (pnpm workspace), #11 (env bash), and #17 (shebang fix)
- All CLI entry points (
[1.0.13] - 2025-11-22
Fixed
- MCP server startup error: Fix "Invalid or unexpected token" error when starting MCP server
- Changed plugin.json to use
cli/mcp-server-wrapper.jsinstead of bash scriptcli/mcp-server - MCP server configuration was pointing to bash script which was being executed with
nodecommand - Wrapper script properly handles Node.js execution and runs bundled
dist/mcp-server.js
- Changed plugin.json to use
[1.0.12] - 2025-11-22
Changed
- Skill triggering behavior: Improved episodic memory skill to trigger at appropriate times
- Changed from "ALWAYS USE THIS SKILL WHEN STARTING ANY KIND OF WORK" to contextual triggers
- Now triggers when user asks for approach/decision after exploring code
- Now triggers when stuck on complex problems after investigating
- Now triggers for unfamiliar workflows or explicit historical references
- Prevents premature memory searches before understanding current codebase
- Empirically tested with subagents: 5/5 scenarios passed vs 3/5 with previous description
[1.0.11] - 2025-11-20
Fixed
- Plugin Configuration: Fix duplicate hooks file error in Claude Code
- Remove duplicate
"hooks": "./hooks/hooks.json"reference from plugin.json - Claude Code automatically loads hooks/hooks.json, so manifest should only reference additional hook files
- Update MCP server reference from obsolete
mcp-server-wrapper.jsto directmcp-serverscript
- Remove duplicate
Changed
- Simplified plugin.json configuration for cleaner Claude Code integration
[1.0.10] - 2025-11-20
Fixed
- Search result formatting: Prevent Claude's Read tool 256KB limit failures
- Search results now include file metadata (size in KB, total line count)
- Changed from verbose 3-line format to clean 1-line: "Lines 10-25 in /path/file.jsonl (295.7KB, 1247 lines)"
- Removes prescriptive MCP tool instructions, trusting Claude to choose correct tool based on file size
- Eliminates issue where episodic memory search triggered built-in Read tool instead of specialized MCP read tool
Changed
- Enhanced
formatResults()andformatMultiConceptResults()with async file metadata collection - Added efficient streaming line counting and file size utilities
- Updated MCP server and CLI callers to handle async formatting functions
[1.0.9] - 2025-10-31
Removed
- Dead code cleanup: Removed obsolete bash script
cli/mcp-server-wrapper- Eliminates duplicate wrapper implementations
- Only Node.js cross-platform wrapper
mcp-server-wrapper.jsremains - Prevents confusion about which wrapper to use
- Cleaner codebase with single MCP server entry point
Changed
- Simplified MCP server architecture with single wrapper implementation
- Improved maintainability by removing redundant bash script
[1.0.8] - 2025-10-31
Fixed
- Issue #7: Fixed Windows support for MCP server provided in plugin
- Replaced bash script
mcp-server-wrapperwith cross-platform Node.js version - MCP server now works on Windows with Claude Code native install
- Resolves "No such file or directory" errors on Windows when using
/bin/bash
- Replaced bash script
Changed
- MCP server wrapper now uses
node cli/mcp-server-wrapper.jsinstead of bash script - Cross-platform dependency installation with proper Windows npm.cmd handling
- Improved signal forwarding and process management in wrapper
Added
- Cross-platform Node.js wrapper script for MCP server initialization
- Better error handling and messaging for missing dependencies
- Windows-compatible npm command detection (
npm.cmdvsnpm)
[1.0.7] - 2025-10-31
Fixed
- Issue #10: Fixed SessionStart hook configuration that prevented memory sync from running
- Removed invalid
argsproperty from hook configuration - Added
async: trueand--backgroundflag to prevent blocking Claude startup
- Removed invalid
- Issue #5: Fixed summary generation failure during sync command
- Resolved confusion between archived conversation IDs and active session IDs
- Sync now properly generates summaries for archived conversations
- Issue #9: Fixed better-sqlite3 Node.js version compatibility issues
- Added postinstall script to automatically rebuild native modules
- Resolves NODE_MODULE_VERSION mismatch errors on Node.js v25+
- Issue #8: Fixed version mismatch between git tags and marketplace.json
- Synchronized plugin version metadata with release tags
Added
- Background sync mode with
--backgroundflag for non-blocking operation - Automatic native module rebuilding for cross-Node.js version compatibility
- Enhanced CLI help documentation with background mode usage examples
Changed
- SessionStart hook now uses
episodic-memory sync --backgroundfor instant startup - Sync command forks to background process when
--backgroundflag is used - Improved hook configuration follows Claude Code hook specification exactly
- Updated marketplace.json versions in both embedded and superpowers-marketplace locations
Security
- Fixed potential process blocking during Claude Code startup
- Improved process detachment for background operations
[1.0.6] - 2025-10-27
Fixed
- Issue #1: Fixed Windows CLI execution failure by replacing bash scripts with cross-platform Node.js implementation
- Issue #4: Fixed sqlite-vec extension loading error on macOS ARM64 and Linux by adding
--external:sqlite-vecto esbuild configuration - Resolved "Loadable extension for sqlite-vec not found" error on affected platforms
Added
- Cross-platform CLI support using Node.js instead of bash scripts
- Enhanced error handling with clear error messages and troubleshooting guidance
- Automatic dependency validation (npx, tsx) in CLI tools
- Proper symlink resolution for npm link and global installations
Changed
- CLI entry points now use
.jsextension for universal compatibility - Replaced
shell: truespawn calls with direct spawn for improved security - Updated build configuration to externalize sqlite-vec native module
- Improved process execution without shell interpretation to prevent command injection
Security
- Removed shell dependencies from CLI execution
- Added input validation and protection against command injection vulnerabilities
- Safer process execution using direct spawn calls
[1.0.5] - 2025-10-25
Fixed
- MCP server wrapper now deletes package-lock.json before npm install to ensure platform-specific sqlite-vec packages are installed
- Resolves "Loadable extension for sqlite-vec not found" error on fresh plugin installs
Changed
- Add package-lock.json to .gitignore to prevent cross-platform optional dependency issues
- Improve wrapper script to handle npm's platform-specific optional dependency installation behavior
[1.0.4] - 2025-10-23
Changed
- Strengthen agent and MCP tool descriptions to emphasize memory restoration
- Use empowering "this restores it" framing instead of deficit-focused language
- Make it crystal clear the tool provides cross-session memory and should be used before every task
[1.0.3] - 2025-10-23
Fixed
- MCP server now automatically installs npm dependencies on first startup via wrapper script
- Resolves "Cannot find module" errors for @modelcontextprotocol/sdk and native dependencies
Added
- MCP server wrapper script (
cli/mcp-server-wrapper) that auto-installs dependencies before starting - esbuild bundling for MCP server to reduce dependency load time
Changed
- MCP server now uses wrapper script instead of direct node execution
- Removed SessionStart ensure-dependencies hook (no longer needed)
Removed
cli/ensure-dependenciesscript (replaced by MCP server wrapper)
[1.0.2] - 2025-10-23
Fixed
- Pre-build and commit dist/ directory to avoid MCP server startup errors
- Remove dist/ from .gitignore to ensure built files are available after plugin install
Changed
- Built JavaScript files now tracked in git for immediate plugin availability
[1.0.1] - 2025-10-23
Added
- Automatic dependency installation on plugin install via SessionStart hook
ensure-dependenciesscript that checks and installs npm dependencies when needed
Changed
- Plugin installation now automatically runs
npm installifnode_modulesis missing - Improved first-time plugin installation experience
Fixed
- Plugin dependencies not being installed automatically after plugin installation
[1.0.0] - 2025-10-14
Added
- Initial release of episodic-memory
- Semantic search for Claude Code conversations
- MCP server integration for Claude Code
- Automatic session-end indexing via plugin hooks
- Multi-concept AND search for finding conversations matching all terms
- Unified CLI with commands: sync, search, show, stats, index
- Support for excluding conversations from indexing via DO NOT INDEX marker
- Comprehensive metadata tracking (session ID, git branch, thinking level, etc.)
- Both vector (semantic) and text (exact match) search modes
- Conversation display with markdown and HTML output formats
- Database verification and repair tools
- Full test suite with 71 tests
Features
- Search Modes: Vector search, text search, or combined
- Automatic Indexing: SessionStart hook runs sync automatically
- Privacy: Exclude sensitive conversations from search index
- Offline: Uses local Transformers.js for embeddings (no API calls)
- Fast: SQLite with sqlite-vec for efficient similarity search
- Rich Metadata: Tracks project, date, git branch, Claude version, and more
Components
- Core TypeScript library for indexing and searching
- CLI tools for manual operations
- MCP server for Claude Code integration
- Automatic search agent that triggers on relevant queries
- SessionStart hook for dependency installation and sync