0.9.23 — 2026-05-28
Bug-fix + integration wave. GitHub Copilot CLI joins the supported agent matrix with plugin + hooks + MCP coverage. Three silent DX bugs fixed end-to-end: graph extraction never fired on session end, agentmemory status reported zero memories, consolidation defaulted off even with an LLM provider configured. Five additional adapters and a clearer local-LLM story for Ollama / LM Studio users. agentmemory connect now points users at npx skills add for the native-skills install path (50+ agents).
Added
- GitHub Copilot CLI (PR #534). Full first-class support:
plugin/plugin.jsonmanifest,hooks.copilot.jsonlifecycle hooks for all 11 Copilot events with camelCase payload normalization,agentmemory connect copilot-cliMCP path, first-run onboarding default-select viaCOPILOT_CLI/COPILOT_AGENT_SESSION_IDenv detection, Windows-safecmd.exe /d /s /c npxwrapper. Standalone MCP transport now speaks LSP-styleContent-Lengthframed JSON-RPC alongside the existing newline-delimited form so Copilot's stdio init handshake works. - Five new MCP adapters (PR #677). Warp, Cline, Continue, Zed, and Droid.
createJsonMcpAdapterextended withwrapperKey(Zed usescontext_serversinstead ofmcpServers) andextraEntryFields(Droid requirestype: "stdio").ADAPTERScount: 11 → 17. /agentmemory/graph/buildendpoint (PR #698). Backfills the knowledge graph from existing compressed observations across every session in configurable batches. Wires up the viewer's "Build Graph" button that previously returned 404.- 11 README translations + language picker (PR #675). zh-CN, zh-TW, ja-JP, ko-KR, es-ES, pt-BR, fr-FR, de-DE, ru-RU, tr-TR, hi-IN.
npx skills addhint in connect output (PR #709). After a successfulagentmemory connect <agent>, the CLI now prints the matchingnpx skills add rohitg00/agentmemory -ycommand so users get the native-skills install alongside MCP wiring. TheskillsCLI covers 50+ agents including the 5 added in PR #677. README "Other agents" section gains a dedicated subsection explaining the two-step pattern (connectwrites MCP config,skills addinstalls the 8 SKILL.md files into the agent's native skill directory).
Changed
- Consolidation auto-enables when an LLM provider is configured (PR #696, closes #612).
CONSOLIDATION_ENABLEDdefaulted tofalse, so users with a working provider got compression + summarization but zero graph nodes / crystals / lessons. Now defaultstruewhenever any ofANTHROPIC_API_KEY/OPENAI_API_KEY/OPENROUTER_API_KEY/GEMINI_API_KEY/GOOGLE_API_KEY/MINIMAX_API_KEY/OPENAI_BASE_URLis set, orAGENTMEMORY_PROVIDER=agent-sdk. Explicit=false/AGENTMEMORY_PROVIDER=noopstill opt out.OPENAI_API_KEY_FOR_LLM=falsehonored (key scoped to embeddings). - Fire-and-forget telemetry hooks (PR #688, closes #573). Nine telemetry-only hooks (notification, post-tool-failure, post-tool-use, prompt-submit, stop, session-end, subagent-start, subagent-stop, task-completed) switched to unawaited
fetch(...).catch(() => {})paired withsetTimeout(() => process.exit(0), 500).unref()(1500ms for the multi-fetchstop+session-endhooks). No longer blocks Claude Code's next-prompt boundary on every assistant turn. - Observability defaults tamed (PR #686, closes #519).
iii-config.yamldefaults:sampling_ratio: 0.1,logs_console_output: false.findIiiConfig()precedence reversed soAGENTMEMORY_III_CONFIGenv > cwd >~/.agentmemory/iii-config.yaml> bundled.
Fixed
- Graph extraction never fires automatically (PR #698, closes #666).
event::session::stoppedlistens onagentmemory.session.stoppedbut nothing in the codebase ever published that topic.api::session::endnow directly callssdk.triggerVoid("event::session::stopped", { sessionId })(try/catch guarded so a fan-out error doesn't fail the HTTP response). Knowledge graphs now materialize automatically when sessions end. agentmemory statusshows Memories/Observations = 0 (PR #698, closes #666). CLI fetched/agentmemory/exportfor counts but that endpoint times out (>5s) on iii-engine's file-based KV under concurrentkv.list(). Switched to/memories?count=true(count-only, constant-time) + sum ofsessions[].observationCount.- Hooks send full filesystem path as
projectinstead of repo basename (PR #687, closes #474). Native sessions, replay-import, andmemory_lesson_saveall use repo basename — the path/basename mismatch silently filtered out the bulk of relevant lessons from auto-injected context. NewresolveProject(cwd?)helper:AGENTMEMORY_PROJECT_NAMEenv >git rev-parse --show-toplevelbasename >basename(cwd). Applied to 9 hooks. - Cross-project memory leakage (PR #662). Memories created in one project leaking into recall on another. Wildcard guard pattern
(!project || !m.project || m.project === project)preserves backward-compat for legacy unscoped memories while scoping new ones strictly. - Graph parser tolerates reordered XML attributes (PR #685, closes #635). Order-dependent regex replaced with order-independent
parseAttrshelper. Self-closing trailing-/handling preserved. - Defensive null guards on
Memory.sessionIds(PR #684). Older exports + hand-edited dumps can omit this field; now treated as empty array on read. - Vector index Buffer slice metadata round-trip (PR #683, closes #587, #584).
byteOffset+byteLengthpreserved onBuffer.fromandFloat32Arrayconstruction so base64 round-trips don't corrupt vectors stored as slices. - Slots HTTP triggers return 503 not 500 (PR #682, closes #678). Feature-flag-disabled responses now use the documented 503 shape with
enableHow+docsHref..envpropagation fixed (now reads viagetEnvVar()not rawprocess.env). agentmemory doctorpoints to correct iii install URL (PR #681).- Separate
OPENAI_EMBEDDING_BASE_URL+OPENAI_EMBEDDING_API_KEY(PR #503). Lets users route embeddings and LLM calls to different OpenAI-compatible endpoints (e.g. cloud OpenAI for embeddings + local LM Studio for LLM, or vice versa). - Viewer Memories tab sorts newest first (PR #701, closes #674). Memories list rendered in KV-insertion order, hiding just-saved entries at the bottom of long lists.
loadMemories()now sorts oncreatedAtdesc (fallbackupdatedAt) before items reach state — matches thelocaleComparepattern Sessions / Metrics tabs already use.
Docs
- Local-LLM section in README (PR #697, closes #671). Dedicated "Local models (Ollama / LM Studio / vLLM)" subsection with copy-paste configs, model-pick table (qwen2.5-coder:7b, llama3.2:3b, mistral:7b-instruct, deepseek-r1:7b), and reasoning-model empty-content callout. Existing OpenAI-compatible support was buried in a one-line env comment.
- Three pipeline layers, not three primitives (PR #690). Website + README copy: the three primitives are worker / function / trigger (iii). HOOKS / RECALL / CONSOLIDATE are pipeline layers. Section anchor renamed
#primitives→#stackto match the nav label.
Infrastructure
- Hook scripts now bundle per-entry instead of sharing chunks, so
plugin/scripts/_project-*.mjshashed artifacts no longer churn the diff on every build. AGENTS.md"Hook Scripts" section documents the two patterns (context-injecting vs telemetry-only) and the 500ms / 1500ms exit-delay rule for single vs multi-fetch hooks.- Test suite: 1271 → 1291 (+20 new tests covering project basename resolver, fire-and-forget wiring, consolidation default behavior, session-end → graph extraction, the graph-build endpoint, and the viewer memories sort).