[ RELEASES ]

Release notes.

v0.8.22026-04-28
  • Sensory retention — raw sensory memory content can now be summarized, tombstoned, or protected while durable recall text and dashboard totals remain intact.
  • Reflection surfaces — retention-aware reflection logs and a new dashboard reflection route make distilled memory state easier to inspect.
  • Universal installer — cloud, local, and self-hosted flows now cover OpenClaw, Claude, Codex, Factory Droid, generic MCP, and local backend targets with Codex hook support.
  • Provider-key separation — `GEMINI_API_KEY` and optional `OPENROUTER_API_KEY` are backend provider keys; `MEMORY_CRYSTAL_API_KEY` remains client bearer auth.
  • Local backend artifacts — installers default to release-versioned v0.8.2 backend packages and print the local Convex dashboard URL/admin key after setup.
  • Dashboard refresh — memory/message rendering, Organic pages, telemetry, admin, and the sharp flat visual hierarchy were updated together.
  • Backend-owned recall — legacy OpenClaw recall hooks now send query text to `/api/mcp/recall` so hosted/self-hosted backends own embedding and search.
  • Plugin version bump — OpenClaw plugin manifest/package metadata moved to v0.8.2 for this release.
v0.8.12026-04-27
  • Capture hygiene — leading recalled-context envelopes are stripped before user turns are written to STM across the OpenClaw plugin, shared hooks, web-served hook assets, and Convex backend.
  • Cleanup tooling — admins can dry-run or apply recalled-context STM cleanup with safe scope validation, malformed-row deletion, stale index reset, and exact-scope duplicate merge-delete handling.
  • Quota fix — MCP log writes skip wrapper-only synthetic user payloads before checking STM storage limits.
  • Dashboard readability — memory and message cards now render known pseudo-tag sections cleanly and keep a raw/full text disclosure for inspection.
  • Removed obsolete Morrow purge code — the unused Convex purge module and admin wrappers are gone.
v0.8.02026-04-25
  • Major local Convex developer backend — Docker-primary self-hosted Convex stack with pinned backend/dashboard images, local dashboard, health checks, reset/down/up lifecycle, and documented version pins.
  • One-switch local wiring — managed env overlays retarget the web app, MCP server, scripts, and OpenClaw plugin together while preserving production/cloud defaults.
  • Seeded local memory data — deterministic fixture memories, local-only seed functions, dry-run validation, and a gated vector-search canary make local recall testing repeatable.
  • Self-hosting prep — local auth JWT/JWKS provisioning, deployment-env stubs, dry-run email logging, and side-effect guards let contributors exercise actions/crons without sending real email or touching production credentials.
  • Docs — docs/LOCAL_DEV.md now covers local Convex setup, seeding, doctor checks, rollback to cloud defaults, troubleshooting, and version-pin updates.
  • Included 0.7.17 capture observability — capture-stall telemetry, /api/mcp/metric ingestion, doctor smoke callback dumps, and assistant-side duplicate suppression are part of this 0.8.0 release note set.
v0.7.182026-04-25
  • Capture telemetry hardening — `crystalTelemetry` rows now expire, cleanup removes old telemetry, and `/api/mcp/metric` validates metric names, payload size, and scope length before insert.
  • Organic contradiction flow — contradiction scans now wait for ensemble writes, recently resolved pairs suppress re-alerts for 30 days, and daily alert budget is checked before expensive LLM work.
  • MCP contradiction passthrough — stdio and hosted write tools preserve backend `contradiction` / `contradictionCheck` metadata through text and structured responses.
  • Brain dashboard loading now uses the full page skeleton, and the public mirror filter explicitly excludes the private `packages/` workspace.
  • Scoped deferral — this is a hardening release; the structural LTM extraction/content-hash backfill remains deferred to a follow-up release rather than being silently overclaimed.
v0.7.162026-04-21
  • Infrastructure — default Convex HTTP host updated to `https://convex.memorycrystal.ai`. OAuth consent, MCP endpoints, and the plugin's default `convexUrl` now use the Memory Crystal custom domain instead of the Convex-generated subdomain. Existing installs require no action — the old URL continues to work; plugins organically upgrade on next installer run.
  • Security — patched 10 Dependabot advisories (2 HIGH, 8 MEDIUM) via root npm overrides: vite 7.3.2, hono 4.12.14, @hono/node-server 1.19.13. Supply-chain hygiene only — call-graph trace confirmed no runtime exposure (vulnerable vite dev server, hono serveStatic/toSSG/ipRestriction/cookie helpers are not invoked by Memory Crystal). No backend redeploy required.
  • Convex trigger lookup now uses indexed trigger rows instead of broad memory scans, with resumable production backfill support.
  • Organic Pulse Engine intervals now clamp to one hour or longer; supported tiers are 1h, 2h, 4h, 8h, 12h, and 24h.
  • Each user can pause or resume their own Pulse Engine without affecting other tenants.
  • Maintenance read paths for duplicate checks, salience, consolidation, and decay now use targeted indexes and tighter budgets.
  • New crystal_update and crystal_supersede / crystal_supercede tools support in-place memory edits and atomic memory replacement with lineage.
v0.7.15April 19, 2026
  • Peer-first `guardChannel` fallback — recall, session KB listing, MCP filter-visible-memories, and both knowledge-base query paths no longer fall back to the management sentinel when a peer caller omits channel. Missing channel now fails-closed on KBs with a concrete peer scope instead of silently upgrading to management visibility.
  • `getKBMemoriesInternal` chunk-level peer scope filter — the internal KB-chunk reader now mirrors `runKnowledgeBaseQuery`'s admission rules so permissive shared KBs no longer leak cross-peer chunks on `by_knowledge_base` index reads.
  • Shared-mode agent writes now route to `scope:main-<agentId>` — two shared agents under the same scope stop bleeding captures into one bucket. Single-shared-agent installs stay on `scope:main` (backward compatible).
  • KB-scoped BM25 candidate pool — `runKnowledgeBaseQuery` forwards `knowledgeBaseId` into `searchMemoriesByText` so lexical candidates are filtered to the target KB instead of competing with the user's entire corpus.
  • MCP API-key paths forward `channel` filter — `crystal_why_did_we`, `crystal_who_owns`, `crystal_dependency_chain`, and `crystal_explain_connection` now respect the channel argument on the HTTP recall branch. Hosted MCP consumers previously saw unscoped, cross-channel results from these four tools.
  • Server-side error logs sanitized — `crystal_recall`, `crystal_trace`, and the HTTP listener run error messages through an inline redactor that scrubs Bearer tokens, `sk-*` keys, and query-string secrets before writing to stderr.
  • `stdio` is the default MCP mode — `CRYSTAL_MCP_MODE` defaults to stdio; operators who want the HTTP listener must set `CRYSTAL_MCP_MODE=http` explicitly.
  • Obsidian writer hardened — category is validated against the Convex enum and filenames include the memory id suffix to prevent same-millisecond collision.
  • Pressure-log Maps bounded — `pressureEventState` and `hostCompactState` evict via stale-first / oldest-first policy when they exceed 500 entries (2h staleness window). Closes a slow heap-growth path on long-lived gateway processes.
  • `/api/mcp-auth` proxy no longer forwards cookie / set-cookie — the proxy uses Authorization: Bearer only. Blanket cookie forwarding created a confused-deputy credential-relay risk.
  • Polar checkout `plan` param validated against an allowlist (free, pro, ultra, starter) before PRODUCT_IDS lookup. Invalid plans redirect without reflecting attacker-supplied value.
  • Login `redirectTo` guard — rejects any redirectTo that does not start with a single `/` (blocks `//`, `/\`, non-relative paths) and falls back to `/dashboard`.
  • `morrowPurge.scanCandidates` bounded — 10 unbounded `.collect()` calls now `.take(SCAN_ROW_CAP)` with `warn()` when the cap is hit.
  • `kbCounterReconcile` uses full composite-index predicate — `countKnowledgeBaseChunksPage` now scopes by `(knowledgeBaseId, userId, archived)` instead of scan-and-filter.
  • Small DX fixes — memory-formatter regex footgun removed, agent-scope policy Map memoized via WeakMap, `crystal_search_messages` forwards `agentId`, no-context Convex client cached in stdio mode.
v0.7.14April 16, 2026
  • One-key mixed agent scoping — OpenClaw/plugin installs can now combine peer-scoped agents and shared/open agents via `agentScopePolicies`, so coach-style agents stay private while dm-replies/content agents use shared `:main` memory under the same API key.
  • Installer/enabler now auto-upgrade to full context-engine mode when local SQLite is actually available, while preserving explicit user config if you already set `contextEngineMode`, `localStoreEnabled`, or `dbPath`.
  • Shared-main KB access from coach — training KBs moved to scopes like `morrow-team:main` with `peerScopePolicy: "permissive"` are now reachable through the MCP recall path even from peer-scoped coach sessions, while Client Notes stays private.
  • One-shot KB reassignment action — production-safe internal migration can retarget shared KBs and remove duplicate/dead KBs without manual per-KB patching.
  • Per-user isolation hardening for coach-style knowledge bases. If you use multi-tenant Telegram/Discord coaches, review our migration note.
  • New peerScopePolicy flag for explicit opt-in to cross-peer shared knowledge bases. Default is strict per-user isolation.
  • Observability metrics for KB peer-scoping enforcement — mc.metric.kb-peer-block and mc.metric.kb-chunk-drop track cross-peer access attempts and filtering events.
  • Kill-switch available via MC_KB_PEER_STRICT=false env var for rollback if needed without redeploy.
  • KB counter drift fixed — archiving a KB chunk now correctly decrements memoryCount and totalChars on the parent knowledge base. Historical drift on existing accounts repaired via the new kbCounterReconcile action.
  • KB vector recall scoped at the index — queries against a knowledge base now filter the vector search by knowledgeBaseId and archived=false up front, so small KBs aren't crowded out by the rest of the user's corpus.
  • crystal_trace reason wording — memories written via direct API (crystal_remember and similar) no longer falsely report as 'predates conversation tracking'; the handler distinguishes direct-API writes from genuinely pre-tracking memories.
v0.7.13April 15, 2026
  • Per-turn Convex recall now fires in reduced mode — assemble() previously gated recall on mode === 'full', which meant default installs (localStoreEnabled: false) silently dropped per-turn memory injection and answered from training-data inference instead. Only 'hook-only' mode skips recall now; 'reduced' and 'full' both fetch. Regression test locks the contract.
  • Hard assemble-path injection ceiling — the plugin caps per-turn injected context at 12k chars combined (system context + local messages), dropping oldest local messages first and then truncating the convex context. Prevents runaway prompt growth on hot long-lived sessions regardless of host compaction behavior.
  • Tier-aware per-memory cap with sentence-boundary slicing — recall content caps at 1200 chars for knowledge-base chunks (book/course/podcast excerpts) and 600 chars for auto-extracted notes, replacing the previous flat 350-char trim. Truncation prefers paragraph breaks and sentence terminators inside the cap window so KB definitions no longer end mid-sentence.
  • Transient-channel metadata — assemble() returns additive `contextUsage: { crystalInjectedChars, crystalInjectedMessageCount, ephemeral: true }` alongside the existing contract. Hosts that honor it can exclude Crystal injection from session persistence; no-op if the host ignores.
  • Rate-limited pressure telemetry — new one-line `crystal_pressure` log per session per minute when injection is trimmed or exceeds 60% of the ceiling. Attribution fields (`hostCompactInvoked`, `hostCompactTokensReclaimed`) let us tell whether the host compaction trigger fires at all.
  • Safer defaults for hot lanes — `localSummaryInjection` defaults to `false` (opt in per-agent when you want it) and `defaultRecallLimit` defaults to `4` instead of `8`. Existing installs that explicitly set either key keep their behavior.
  • KB ranking weight restored to 0.25 — the per-memory cap absorbs the byte-budget concern that prompted yesterday's temporary rollback, so the full 'half rap'-class ranking margin from 0.7.12 is back in place.
  • Installer + updater fixes — 0.7.13's two new plugin modules (pressure-log.js and memory-formatter.js) are now included in install.sh, the three parity-locked update.sh copies, and the /install-assets/plugin/ route allowlist. Earlier 0.7.13 installs crashed with 'Cannot find module ./pressure-log' until this landed; force-reinstall once to pick up the fix.
  • Post-install verification now checks the context-engine capability binding and the before_agent_start hook instead of grepping for tool names. OpenClaw's context-aware tool factory produces anonymous tool closures, so the old name-based verification always reported failure on 0.7.12+ installs even when the plugin was healthy.
  • Convex client bumped to ^1.35.1 across root, apps/web, and mcp-server workspaces.
v0.7.12April 14, 2026
  • OpenClaw tool-context compatibility — Memory Crystal now registers cloud-backed tools through OpenClaw’s context-aware tool factory so sessionKey and delivery context survive into tool execution even when the execute-time ctx is sparse. Stock OpenClaw main sessions like `agent:main:main` now retain enough identity for shared-lane recall without requiring a peer id or client-specific config override.
  • Shared-lane recall unblocked — read-path tools (crystal_recall, crystal_search_messages, crystal_what_do_i_know, crystal_why_did_we, crystal_debug_recall, crystal_preflight, crystal_recent, crystal_wake, memory_search) now accept session channels with `main`/`default`/`unknown` peer suffixes instead of hard-erroring on `Cannot resolve a safe channel scope for this session`. Captures remain strict so multi-peer content still cannot cross-pollinate a named scope.
  • Trusted shared-agent recall fallback — read-path recall/startup flows can reuse scoped :main/:default/:unknown channels for trusted agent:* sessions like agent:main:main without widening write-path inference.
  • Optional `channel` parameter added to the read-path tools so callers can pin a session-specific channel explicitly when the automatic resolver cannot infer one.
  • Backend persistence hardened — crystal-enable now treats explicit memory backend overrides as the deliberate migration lever, keeps persisted plugin config authoritative over generic CONVEX_URL drift, validates MCP routes before persisting, and rejects HTTP 404 targets by default.
  • Doctor backend provenance — crystal_doctor now reports backend source and classifies route validation failures more clearly.
  • Updater parity restored — plugin/update.sh, scripts/update.sh, and apps/web/public/update.sh now pull from the same public mirror source and stay byte-identical under test.
  • Dashboard Knowledge Base detail panel now renders an explicit `no longer available on the server` notice when the list row refers to a KB the backend doesn't return, instead of spinning in an infinite `Loading…` state.
  • Regression coverage expanded — tests now prove context-aware registration preserves shared-lane recall when execute-time ctx is empty.
v0.7.9April 13, 2026
  • Transport contract rewrite — legacy SSE MCP transport was removed; hosted Memory Crystal now standardizes on Streamable HTTP `/mcp`, while command-launched local MCP uses explicit `stdio` wiring
  • Knowledge Bases dashboard hardening — legacy or partially backfilled knowledge-base rows are now normalized server-side and rendered safely client-side, preventing the `toLocaleString` crash on the KB page
  • Auth and hosted parity fixes — API-key recall semantics were tightened, graph-style MCP tools no longer degrade API-key clients into hard errors, and MCP auth proxy header forwarding is more complete
  • Runtime/config hardening — doctor and generated OpenClaw/plugin configs now emit `stdio`/`http` intentionally instead of legacy `sse`, local live health checks are auth-aware, and hook-config dry runs redact secrets
  • Security and convergence fixes — device authorization now rate-limits brute-force attempts, impersonation targets are revalidated, purge/cleanup flows converge correctly, and email/template paths no longer leak placeholders or full-table scan admin logs
  • Installer verification pass — OpenClaw, Claude Code, Codex CLI, and Factory Droid install/uninstall flows were revalidated in temp-home simulations, including safe `--purge` behavior and Codex TOML repair
v0.7.8April 11, 2026
  • Claude Code, Codex, and Factory Droid hook integrations now install shared Memory Crystal auto-capture and auto-recall paths with browser-based device auth and scoped channel/session propagation
  • Peer-scoped coach memory reliability fixes — malformed scoped writes are normalized, same-peer message fallback is restored at session start, and cross-client leakage protections remain intact
  • Installer hardening — Codex/Claude/Droid hook installers now preserve unrelated hooks, repair invalid Codex hook layouts, and public hook assets are served directly from the web app
  • SessionStart noise reduction — startup hooks now emit a compact memory-active summary instead of dumping the full wake briefing and long-form instructions
  • Knowledge base imports now auto-chunk raw text while preserving explicit JSON chunk arrays and delimiter-based chunk boundaries
  • Gateway-safe local store mitigation — local SQLite compaction is now explicit via `localStoreEnabled`, defaults off for non-opted-in runtimes, and uses WAL/file-cache guardrails when enabled
  • HTTP auth and MCP test refresh — stale API-key mock paths were updated for the current auth contract so the full release audit suite runs green again
  • Docs/publishing workflow improvements — public docs pull now fails fast on dirty local docs, and main/stable/release alignment is ready for the `0.7.8` release lane
v0.7.6April 4, 2026
  • Gemini cost guardrails — cron throttling (~96% reduction in graph enrichment frequency), circuit breaker (3-failure abort), daily call cap via GEMINI_DAILY_CALL_CAP env var
  • Embedding error logging — embedText logs status code, model, and truncated error; batchEmbedTexts returns all-null on 429/5xx to prevent amplification
  • Peer-scoped recall isolation — replaced ad-hoc channel filter with isNonKnowledgeBaseMemoryVisibleInChannel for consistent behavior
  • Fix: bare-prefix memory leakage blocked — memories under agent: no longer leak into agent:user-1
  • Fix: agent-prefix memories now surface correctly in peer channel recalls
  • Fix: global memories excluded from peer-scoped recall results
  • Unified CRYSTAL_API_KEY env var — single API key for all Gemini access; GEMINI_API_KEY remains as fallback
  • Per-tier Gemini controls — Free=no managed Gemini, Pro=500 calls/day cap, Ultra=unlimited with BYOK support
v0.7.5April 3, 2026
  • Gemini-native embeddings — all embedding paths unified on Gemini; OpenAI embedding codepath hard-disabled
  • Stale-vector remediation — CLI-callable actions re-embed 1536-dim OpenAI vectors to 3072-dim Gemini vectors
  • Per-client memory isolation — hard channel filter and KB scope field enforce strict per-client boundaries
  • Fix: crystal_remember, crystal_checkpoint, crystal_forget now route through HTTP endpoints correctly (write-tool 404s resolved)
  • Fix: embedding dimension mismatches, hybrid search scoring, and channel visibility bugs resolved
v0.7.4April 3, 2026
  • Plugin memory leak fixes — intentCache TTL enforcement, sessionRecallCache stale eviction, conversationPulse fetch body disposal
  • Fix: migrate.sh was sending wrong field name (text instead of content) — every import was silently 400ing since launch
v0.7.3April 3, 2026
  • clearSessionState() consolidates all per-session Map cleanup into a single function — fixes unbounded Map growth in long-running gateways
  • session_end and dispose() now clear all 13 per-session caches atomically
v0.7.2April 3, 2026
  • Fix: OpenClaw 2026.3.31 compatibility — replaced removed command:new/command:reset hook names with session_start and before_reset
  • Auto-updater public mirror fallback — update.sh pulls from public repo when no GitHub auth token is present
v0.7.1April 2, 2026
  • Knowledge bases — first-class immutable reference collections for docs, policies, and imported source material
  • Bulk import — faster large-scale ingestion paths, including bulk insert for migrations without embedding on the request path
  • Tenant isolation — scoped knowledge bases keep private reference data partitioned by workspace, client, or agent lane
  • Procedural vs skills split — procedurals stay as quiet patterns while skills become curated, explicit artifacts
  • Self-scheduling backfill — embeddings and enrichment continue automatically after large imports
v0.7.0April 2, 2026
  • Context-aware recall pipeline — diversity filter, temporal hybrid retrieval, context budget gating, and reinforcement injection
  • Temporal hybrid retrieval — date-aware queries ('last Tuesday', 'March 14', '3 days ago') now inject time-range candidates alongside vector search
  • Diversity filter — greedy Jaccard-bigram deduplication removes near-identical recall results (0.85 threshold)
  • Context budget calculator — model-aware injection budgets for Opus, Sonnet, Haiku, GPT-5, 4o, Gemini, Codex families
  • Reinforcement injection — top recall results re-surface as lightweight blocks after 5+ conversation turns
  • BM25 full-text search — crystal_search_messages now uses Convex search indexes alongside vector search
  • Structured capture — turn-level metadata (turnId, turnMessageIndex) on message capture
  • Multi-signal recall reranker — vector, strength, freshness, access, salience, continuity, and text match signals
  • Fix: Streamable HTTP MCP auth — bearer token now enforced on /mcp endpoint
  • Fix: sanitize all memory/message content before system prompt injection
  • Fix: separate reinforcement counter from pulse counter (H-3)
  • Fix: session-scoped Map cleanup on session_end (H-4)
  • Fix: atomic swap-and-clear in buffer flush to prevent double-processing (H-5)
  • Fix: updateMemory title scanning (H-6)
  • Fix: mcpReflect no longer leaks raw error details (H-7)
  • Fix: recent-context block keeps newest messages, correct chronological order (M-6)
  • Fix: conversation pulse field alignment (sessionKey→channelKey) (M-7)
  • Fix: context-budget.js added to installer and crystal-doctor scripts (M-8)
v0.6.6April 1, 2026
  • Fix: MetaClaw audit — 3 critical, 6 high, 7 medium findings resolved across recall tuning, policy management, and replay evaluation
  • Wider tuner candidate pool — recall logs now persist top 30 candidates with raw signal values for offline re-scoring
  • Atomic policy tuning — claimPolicyTuneWindow mutation prevents concurrent tuning races
  • Policy lock toggle — setMyPolicyLock correctly uses caller-supplied locked state instead of hardcoded true
  • Composite score rebalance — grounding and coverage equally weighted (0.5/0.5), precision alias retained for backward compat
  • Superseded status — user-initiated policy demotions marked superseded instead of rejected
  • Activity window truncation signal — activityWindow returns isTruncated flag at 500-item cap
  • Rate limit on weight saves — 10-second cooldown on setMyPolicyWeights prevents rapid-fire mutations
  • Fix: getActivePolicyWeights inlined to avoid nested ctx.runQuery inside internalQuery
  • Fix: promotePolicy validates nominated policy exists before demoting active; preserves lock state
  • Fix: TrendArrow NaN guard and defensive null checks on all dashboard score renders
  • Fix: silent .catch() in recall and MCP paths now logs errors via console.error
  • Fix: classifyRecallOutcomes counts only zero-result queries as failures
  • Fix: dismissedAt only set when status is dismissed in skill suggestions
  • Fix: ESLint no-explicit-any errors in organic dashboard pages
v0.6.5March 31, 2026
  • Organic Ideas — Discovery Fiber synthesizes ensemble, contradiction, and resonance findings into actionable Ideas surfaced via plugin injection (max 3/turn) or email digest
  • Trace Prediction v2 — document embeddings replace query embeddings for matching, predict-calibrate skips well-covered topics, warm cache pre-stages context from conversation pulses
  • Recall Query Logging — every recall is logged to organicRecallLog for training signal; actual usage feeds back into trace generation and validation
  • Conversation-Reactive Pulses — plugin fires an Organic pulse every 5 user turns, triggering background inference on active conversations
  • Procedural Memory Auto-Extraction — Organic engine extracts skill-structured procedural memories with triggers, steps, pitfalls, and verification criteria
  • Skills Dashboard — new /organic/skills page with filterable skill cards showing structured metadata (triggers, steps, pitfalls)
  • Dashboard Sub-Navigation — Organic section split into Overview, Ideas, Traces, Ensembles, Skills, and Settings sub-routes with horizontal tab navigation
  • Content Security Scanner — regex-based scanning on all memory create and update paths blocks prompt injection, encoded payloads, and credential patterns
  • Admin Notification Emails — lifecycle emails for new signups, subscriptions, cancellations, and trial events via SendGrid
  • Idea Email Digests — hourly cron checks for pending ideas past configurable delay, sends digest with lease mechanism to prevent double-sends
  • MCP crystal_ideas + crystal_idea_action tools — list, star, dismiss, and mark ideas as read from any MCP client
  • Fix: trace dedup — duplicate predictions now boost existing trace confidence instead of creating new rows
  • Fix: prediction quality gate — blocks traces under 5 words plus 15-pattern generic blocklist
  • Fix: archiveMemoryById ownership check — cross-tenant access now properly blocked
  • Fix: Unicode normalization bypass in content scanner — NFKC normalization applied before scanning
  • Fix: title field scanning on create paths — content scanner now covers title in captureMemory, createMemory, and createMemoryInternal
  • Fix: permanent delete updates dashboard totals
  • Fix: NaN display guards with Number.isFinite() fallback in frontend
  • Fix: email opt-in by default — no emails sent until user explicitly enables in settings
v0.6.4March 30, 2026
  • Recall Confidence Scoring — recall results now include composite confidence scores with 7 ranking signal breakdown (vector, strength, freshness, salience, text match, continuity, access)
  • Confidence labels — memories tagged [HIGH CONFIDENCE] (>= 0.85) or [low confidence] (< 0.5) in both plugin injection and MCP server output
  • Mandatory Recall Acknowledgment — high-confidence memories trigger a directive requiring agents to reference them; prevents agents from ignoring recalled context
  • Intent-Triggered Deep Recall — plugin proactive recall now varies depth by classified intent: questions get 8 results, reflect gets 6, commands get 5 in decision mode, general gets 3
  • crystal_forget tool — archive or permanently delete memories via tool call; supports both soft archive (recoverable) and permanent deletion
  • MCP server parity — confidence labels, mandatory acknowledgment, and permanent delete ported to MCP server (v0.3.1) for Claude Code, Codex, and Factory Droid users
  • Expandable trace viewer — Organic dashboard traces now click-to-expand with full predicted query, context, source pattern, and timestamps
  • View All Predictions — lazy-loaded view showing up to 1,000 active prospective traces (raised from 200/500 cap)
  • Fix: pulse interval buttons no longer stuck disabled after first save
  • Fix: spend estimates re-price dynamically when model selection changes
  • Fix: sensory noise purge now scans all memories correctly with broadened pattern matching
  • Fix: full memory scan for telemetry stats with loading indicator
  • OpenRouter integration — organic model calls routed through OpenRouter for unified cost tracking across all providers
  • Standalone Knowledge Bases page with dedicated nav entry
v0.6.3March 29, 2026
  • Organic Memory Engine v2 — self-scheduling pulse engine replaces cron-based ticks for sub-minute intervals down to real-time (Live mode)
  • Multi-provider model selection — choose from 6 tiers across OpenAI, Google, and Anthropic: Potato (GPT-5 Nano), Low (Gemini 2.0 Flash-Lite), Medium (Gemini 2.5 Flash), High (GPT-4.1 Mini), Ultra (Gemini 3.1 Pro), Sonnet (Claude Sonnet 4.6)
  • Spend telemetry — estimated per-pulse cost in USD with daily/weekly/monthly projections on the Organic dashboard
  • Per-user pulse intervals — configurable from Live (0ms) through 60 minutes with clean tier selector UI
  • Knowledge Bases — first-class agent-scoped knowledge collections that are enrichable but never decay; replaces local training files with MC-backed queryable memory
  • Pulse terminology — renamed 'tick' to 'pulse' across UI and backend wrappers for cohesive product language
  • Inline help icons — tap-friendly metric explanations on all Organic dashboard cards (mobile-safe, no hover dependency)
  • Run history — recent pulse runs with duration, trace count, and cost visible on the dashboard
  • Open-sourced Organic Memory Engine, Knowledge Bases, crons, and schema — everything except the web app is now public
v0.6.2March 28, 2026
  • Organic Memory Engine — memory ensembles, contradiction detection, and resonance analysis run as background intelligence on your memory graph
  • Prospective traces — Memory Crystal now anticipates likely follow-up questions and pre-stages context before you ask
  • Parallel recall pipeline — organic traces serve alongside standard recall for richer, more anticipatory responses
  • Parallelized tick engine — ensemble clustering, contradiction scanning, and resonance detection now run concurrently per user
  • Safety caps on all background query paths — bounded collection prevents unbounded memory growth
  • Schema robustness — crystalSessions and crystalWakeState userId fields made optional for forward compatibility
  • joinedAt tracking on ensemble memberships — new/existing member classification now uses actual join time
v0.6.1March 27, 2026
  • Dynamic per-session channelScope override — agents can now switch channel scope at session start without changing plugin config
  • Per-call channel parameter on all MCP tools — pass channel on individual tool calls for fine-grained memory isolation
  • peekRateLimit utility and /api/mcp/rate-limit-check endpoint — check remaining rate limit budget before making calls
v0.6.0March 25, 2026
  • Lossless pre-compaction snapshots: full conversation is now saved before compaction runs — even if summarization loses nuance, the original is recoverable
  • crystal_trace tool: trace any memory back to the conversation snapshot that created it — drill from summary to raw messages
  • Prompt-aware context injection: local summaries are searched for relevance to the current prompt and injected before the LLM sees the context — surfaces buried but relevant memories
  • FTS5 with porter stemming: local summary search now uses proper full-text search with stemming, query sanitization, and bm25 ranking
  • Session-scoped search: local summary relevance search is now scoped to the active conversation — prevents cross-session context leakage
  • Snapshot validation: message arrays are validated (non-empty, valid roles, size cap), quota checks include incoming message count
  • Snapshot access control hardened: server-side userId enforcement, unauthorized access throws instead of returning null
  • Config flags wired: localSummaryInjection and localSummaryMaxTokens now actually control behavior (were declared but unused)
  • FTS backfill on upgrade: existing summaries are automatically indexed for search after plugin update
  • Fixed: install script 404 on openclaw-capture-plugin.js (removed in audit cleanup, reference not updated)
  • Test coverage: 85 plugin tests, 31 Convex tests (up from 54 and 14)
v0.5.4March 24, 2026
  • Recent message window: agents now get the last ~30 messages (7k char budget) injected chronologically on every turn, not just semantic matches — solves post-compaction amnesia for in-flight work
  • Media capture: images, audio, video, and PDFs are now automatically captured alongside conversation turns — plugin detects attachments and uploads them to cloud storage fire-and-forget
  • Dashboard docs rewritten: 7 tool references, install guide for OpenClaw/Claude Code/Codex, MCP config examples, and troubleshooting section
  • Email verification now sends a 6-digit OTP instead of a long random token — fixes spam filter hits and gives users a clean code to type
  • Install command generator — paste your API key on the install page to get a ready-to-run personalized command for your platform
  • API key lastUsedAt tracking — dashboard now shows when each key was last used
  • Hero section redesign: full-width H1, two-column layout below, fixed terminal height
  • ExplainerAnimation cards are now clickable — selecting a step pauses auto-play
  • Telemetry: recall and memory_get now correctly track access counts — memory ranking loop is live
  • Telemetry dashboard queries capped to 500 documents per scan — prevents Convex 8MB read-limit crashes on large stores
  • Fixed: before_tool hook renamed to before_tool_call to match OpenClaw's hook API — action triggers were silently broken on all previous versions
  • Fixed: API key regeneration now patches the existing row instead of inserting a duplicate
  • Fixed: Polar billing portal now uses dynamic customer sessions via Polar SDK instead of a broken static URL
  • Fixed: /crystal install route was redirecting to localhost:8080 on Railway (now uses Host header)
  • Security hardening: webhook handler refactored to use internal functions only (M10), five additional security fixes across auth and data access paths
  • Admin tooling: user lookup and cascading delete by email for support and testing workflows
  • MIT license — Memory Crystal plugin is now fully open source
  • Pricing update: Free / Pro $29/mo / Ultra $79/mo / Enterprise
  • 7-day free trial (updated from 14-day) with spam folder hint on verification step
v0.5.0March 19, 2026
  • Knowledge graph: graph enrichment enabled on Pro (gpt-4o) and Free (Gemini Flash)
  • Adaptive recall modes: all 6 modes (general, decision, lesson, rule, episodic, semantic) available on Pro+
  • Relationship graph tools: crystal_why_did_we, crystal_what_do_i_know, crystal_checkpoint tools added
  • Memory health dashboard: telemetry page with recall stats, store distribution, and memory strength
  • Reflection pipeline: background job distills raw episodic memories into semantic facts
  • Admin panel: user management, impersonation, and usage overrides for support
  • Dashboard redesign with sidebar nav, dark glass-card style, improved settings
  • Context engine architecture: two-layer model (in-session STM + persistent LTM) documented
v0.4.2March 18, 2026
  • Context engine ingest hook never fired — renamed ingestBatch to match OpenClaw's actual API. This is the root cause fix for context not accumulating in the local store.
  • tokenBudget field name — assemble and afterTurn now read payload.tokenBudget instead of payload.budget to match what OpenClaw actually sends.
  • Leaf compaction threshold lowered from 20,000 to 4,000 tokens — sessions were overflowing the context window before compaction ever triggered. Now fires after ~15-20 exchanges.
  • assemble tail-replacement — when local summaries exist, assemble now replaces older raw messages with summaries and keeps only the last 6 messages raw. Previously summaries were prepended but raw messages still all went through, so context size never actually dropped.
  • JSON schema fix — removed invalid required: false from channelScope field in openclaw.plugin.json (was crashing gateway config validator on update).
v0.4.1March 18, 2026
  • Install script updated to fetch all 14 v0.4.0 files including subdirectory structure (store/, compaction/, tools/, utils/) — was broken since v0.4.0, only fetched 7 flat files from the old layout.
  • Update script same fix, plus compaction/package.json added to file list.
  • Install-assets route renamed from [file] to [...file] catch-all to serve subdirectory paths; fixed path resolution from process.cwd() to import.meta.url anchor.
  • Non-ASCII box-drawing characters stripped from install.sh success banner.
  • channelScope config — set "channelScope": "myapp" (or any string) to namespace all captures and recalls as {channelScope}:{peerId}. Enables multi-tenant and per-client memory isolation.
  • migrate.sh --ingest-dir — bulk ingest arbitrary directories: --ingest-dir DIR (repeatable), --store, --category, --tags, --channel flags. When set, skips OpenClaw memory scan and processes specified paths only.
  • Dependencies: better-sqlite3 npm install step added to install.sh and update.sh with graceful fallback.
v0.2.5March 14, 2026
  • Streamable HTTP MCP server — connect Claude Code, Codex, Factory, and any MCP client via https://api.memorycrystal.ai/mcp
  • Cross-platform install: tabbed setup commands for OpenClaw, Claude Code, Codex, and Factory with platform badges
  • Browser-based device auth — installer opens your browser, you log in, API key is provisioned automatically
  • Memory migration tool — import existing OpenClaw markdown memories during install
  • Gemini-native backend — all embeddings and graph enrichment now run on Gemini (zero OpenAI dependency)
  • Graph enrichment uses Gemini 2.5 Flash (Pro/Ultra) and Gemini 2.0 Flash (Starter) for entity and relation extraction
  • Improved recall performance — indexed message queries replace full table scans
  • Homepage redesign — Factory-style hero with one-command install above the fold
  • About page with team info
  • Blog and eval dashboard color consistency — brand accent applied throughout
v0.2.4March 14, 2026
  • Improved recall accuracy — channel filter no longer blocks cross-session memory retrieval
  • OpenClaw v2026.3.12 compatibility — verified plugin loads under new security model
  • Install script cleans legacy hook entries for smoother upgrades
  • Product demo video and updated homepage visuals
  • Blog section launched with 10 articles covering use cases, guides, and best practices
  • First GitHub release published — install script now pulls versioned plugin tarballs
v0.2.3March 12, 2026
  • Gemini Embedding 2 support (3072-dimensional vectors) for richer semantic recall
  • Multimodal asset support: images, audio, video, PDF, and text can now be embedded and searched
  • New API endpoint: /api/mcp/asset for storing and embedding media with automatic background processing
  • Short-term message search: /api/mcp/search-messages and /api/mcp/recent-messages for conversation-level recall
  • crystal_search_messages tool — search exact past conversation turns, not just long-term memories
  • Wake briefing now injects relevant memories and recent message matches at session start
  • OpenClaw plugin upgraded to v0.2.3 — more reliable hook registration, better assistant text extraction
  • Installer is now idempotent — safe to re-run, skips restart if nothing changed
  • API key validation added to installer before any changes are made
  • Dashboard: split settings into API Keys and Billing tabs
  • Dashboard: new Get Started onboarding tab with install docs
  • Contact form for sales and enterprise inquiries
v0.1.0March 3, 2026
  • Memory Crystal beta launched
  • MCP HTTP API (capture, recall, checkpoint, wake, stats)
  • OpenClaw one-liner installer: curl -fsSL https://memorycrystal.ai/crystal | bash
  • Semantic search with vector embeddings
  • Per-API-key rate limiting (60 req/min)
  • Polar billing integration (Free / Pro plans + custom contact sales)
  • PWA support — installable on iOS and Android
Memory Crystal — Persistent Memory for Claude Code, Codex & AI Agents