Memanto Changelog
Released August 18, 2026
Bug Fixes
resolve_conflict deleted the wrong memory after the first resolution
list_conflictsreturns only unresolved conflicts, whileresolve_conflictindexed into the full report — the two index spaces agreed only until the first resolution, then desynced. A caller resolving by filtered-list position could delete a memory it never selected, while the conflict the user actually chose stayed unresolved.list_conflictsnow tags each conflict with its stableindexinto the full report; the Web UI resolves by that stable index instead of on-screen position;resolve_conflictrejects an already-resolved index as defense in depth. See Resolve Conflict.
OKF export corrupted multi-tag memories
- Moorcheh stores
tagsas a comma-separated string, but the OKF renderer wrapped it inlist(tags), splitting the string character-by-character and emitting garbage one-character tags in the frontmatter — every multi-tag memory lost its real tags on export. Now splits-and-strips a string value and passes a list through unchanged. - Colliding OKF context filenames are preserved instead of silently overwritten, and markdown-link parsing is now linear-time (was worst-case quadratic).
Daily analysis dates misaligned with UTC storage
- API, CLI, and Web UI daily-analysis date defaults are now aligned to the same UTC boundary memories are stored under, fixing off-by-one-day results near midnight depending on local timezone. Reflected in
memanto daily-summaryand the conflict endpoints.
Conversation extraction dropped oversized messages
- A single message exceeding the extraction character budget was dropped entirely, sending an empty query and producing an API error or garbage results. The first message is now always included (truncated if necessary), separators count toward the budget, and the budget was raised to 120,000 characters — the old cap came from an embedding-search bottleneck that no longer applies now that extraction runs in raw-LLM mode.
CLI: --min-confidence recall filter restored
memanto recall --min-confidencehad regressed to a no-op; filtering is restored and positional recall arguments are preserved. It filters on the memory’s own stored confidence, distinct from--min-similarity, which filters on query match score. Seememanto recall.
Other fixes
- FastAPI header metadata leaking into backend API keys — an unresolved
Header(...)default object could be forwarded to the Moorcheh SDK as if it were a real API key when the dependency was called directly rather than injected; only a genuine string is accepted now. - LangGraph — fixed a key-collision case in
MemantoStoreand stale per-agent locks left behind after certain operations; legacy key tags are preserved for backward compatibility. - Mem0 export now targets Mem0’s v3 API, and pagination validates the
nextfield instead of terminating early on a malformed page. - Incomplete memory exports are rejected rather than silently accepted as complete, while still falling back to the last good export when a refresh genuinely fails.
- Deleting an agent now cleans up its per-agent lock instead of leaving a stale lock object behind.
Tests
- New
tests/test_conflict_index_desync.py, plus expandedtests/test_okf.py,tests/test_backend.py,tests/test_cli.py,tests/test_conversation_memory_extraction.py, andtests/test_export_resilience.pycovering every fix above.
Released August 11, 2026
New Features
Langfuse integration
- New
langfuse-memantopackage —attach(agent_id=...)wires into an existing Langfuse setup and turns failing or notable spans into durable Memanto memories live, so lessons from observability data don’t have to be re-learned on every run. Rule-based (no LLM calls), runs off the hot path, and never breaks the traced application if a memory write fails. See Langfuse Integration. memanto migrate langfuseadds Langfuse as a fourth migration source (alongside Mem0, Letta, Supermemory), with its own discovery step, configurable capture rules, and a sync ledger for incremental runs. Seememanto migrate.- New Langfuse tile in the Web UI’s Migrate surface, for discovering and syncing a Langfuse project without touching the CLI.
- Live capture and batch migration share the same ledger, so they write identical memories and never duplicate each other.
Bug Fixes
memanto-mcp broken on MCP SDK 2.0
- The published
memanto-mcp0.1.1 declared an unboundedmcp[cli]>=1.2.0dependency. MCP SDK 2.0 removedmcp.server.fastmcp, so a fresh install silently resolved to a version the server couldn’t import and failed to start. Themcpdependency is now pinned below 2.0, released asmemanto-mcp0.1.2.
Per-client write attribution in MCP
- MCP-written memories now default
sourceto the connected client’s identity (e.g.cursor,codex,claude-ai) instead of a single generic value, falling back tomcp-agentwhen the transport carries no client identity — reusing core’s own source validation so the advertised tool schema matches what the write path accepts. Builds on the opensourcelabel introduced inv0.2.13.
Other fixes
- Loopback client misused as a real API key — internal/loopback UI operations were forwarding an unresolved FastAPI
Header(...)default to the SDK as if it were a real API key, raising aTypeErrorinside httpx. Only a genuine string is treated as a supplied key now. - Version resolution for source-archive installs — added a
hatch-vcsfallback version so editable installs and installs from a source archive (e.g. a GitHub ZIP with no.gitmetadata) no longer fail version resolution at install time.
Tests
- New
tests/test_langfuse_{config,discover,export,rules,state,sync}.pyandintegrations/langfuse/tests/{test_handler,test_span_mapper}.pycovering the new integration end-to-end. - New
integrations/mcp/tests/test_packaging.pyguarding the SDK version pin; expandedintegrations/mcp/tests/{test_server,test_tools}.py.
Released August 4, 2026
New Features
Open source label for per-writer attribution
sourceis no longer restricted to a fixed enum — any writer (CLI, MCP, LangGraph, Hermes, CrewAI, conversation-extraction, migration) can now stamp its own identifying label, enabling proper per-writer attribution in recall output instead of everything collapsing into a few generic values. See Remember.
Bug Fixes
Multi-type recall returned nothing
- Requesting more than one memory type built a query like
"#memory_type:fact #memory_type:preference", which Moorcheh’s keyword syntax treats as an AND filter that no single document can satisfy — so multi-type recall silently returned zero results. Fixed to issue one query per type and union the results (now parallelized for latency).
Session storage hardening
- Session/secret files (which hold live bearer tokens) are now created with
0o700/0o600permissions, symlinks are skipped rather than followed, and writes go through an atomicO_EXCLtemp-file +os.replacepattern instead of writing in place. - Session lifecycle locks are now scoped per-agent (was a single global lock), renewal is serialized against termination, concurrent auto-renewal races are fixed, and external session-marker races are tolerated instead of raising.
- Windows-specific: non-blocking lock retry via
msvcrt, plus handling for additionalOSErrorcases during session loading with improved error logging. - Sessions are now preserved across interrupted writes instead of being left corrupted mid-write.
Temporal recall correctness
search_as_of(point-in-time recall) now correctly recalls memories that were valid at the queried time but have since expired — it previously delegated to a helper that always filtered by current wall-clock time.- As-of deduplication is now version-aware: a delete-and-recreate update that briefly exposes both the old and new document with the same id no longer causes the wrong version to win against
created_before. - Date-only
as_ofcutoffs (e.g."2026-06-01") are now detected by parsing instead of string shape, fixing rejection of valid ISO-8601 basic format dates; date-only end-of-day bounds now correctly keep the final sub-second of the day instead of dropping it. - “Yesterday” temporal recall is now bounded to that calendar day instead of a rolling 24h window.
expires_atvalues stored asdatetime(not just ISO strings) are now handled correctly in the as-of expiry path.
Multi-line memory title corruption
- A title containing a newline broke the
"[TYPE] title\n\ncontent"document round-trip — the reader’s prefix regex couldn’t cross the embedded newline, corrupting the parsed title/content split, and each subsequent update compounded another"[TYPE] "prefix onto the title until it exceeded the 100-character limit and update started failing permanently. Fixed with a partition-based parser that handles embedded newlines correctly, plus newline normalization at write time.
source_ref dropped from recall responses
source_refis now preserved end-to-end in recall API responses instead of being silently dropped.
MCP integration repairs
- Fixed
remember,list_agents,answer, andrecallMCP tools that had regressed; automatic agent creation is now restricted to avoid unexpected agent proliferation; each agent now gets an isolated session client initialized independently (was a shared/serial init path).
LangGraph store fixes
- Repeated
put()calls to the same key now correctly upsert (including under concurrent writers) instead of duplicating; removed a local lock-striping scheme and rate-limit fallback that masked real errors.
Config / metadata persistence made crash-safe
- Config writes and local agent-metadata writes are now atomic; a corrupt local agent metadata file is treated as absent instead of breaking agent listing, and surfaces as a warning in the list payload;
connectno longer duplicates global instruction paths; export caches are now isolated per backend (cloud vs on-prem) instead of bleeding into each other. memanto memory syncnow refreshes the export before syncing to a project (and reports the refreshed count) instead of syncing a stale cache.
Claude Code integration: turn anchoring and negation
- The
Stophook now distills only the current conversation turn instead of re-processing prior turns; turn anchoring and embedding-query bounds hardened, including bounding daily-summary embedding queries. - Negated preferences (e.g. “I don’t like Python”) are now classified as preferences instead of misfiled as instructions.
Other fixes
- The Web UI’s answer panel now calls the
answerfunction directly through the client rather than an intermediate path that had drifted out of sync. - VoltAgent
defaultLimitis now validated at tool-construction time instead of failing later at call time. - On-prem: adapted to the reorganized package layout shipped in
moorcheh-client0.1.5.
Tests
- New
tests/test_as_of_date_only_parsing.py,tests/test_as_of_expired_recall.py,tests/test_memory_read_multi_type.py,tests/test_session_summary_concurrency.py,tests/test_postcommit_summary_resilience.py,tests/test_title_newline_roundtrip.py,tests/test_moorcheh_user_config_compat.py,tests/test_daily_summary_query_length.py,tests/test_review_followups.py. - Large expansion of
tests/test_unit.py,tests/test_api.py, and MCP/LangGraph integration test suites covering every fix above.
Released July 29, 2026
A large batch of validation and correctness fixes across config management,
memanto connect/skill install, MCP session isolation, and the LangGraph/Hermes/CrewAI integrations. (v0.2.11 was superseded by this release and is skipped.)Improvements
Config validation hardening
- Server URLs are normalized and ports validated before being written to config; session/answer config edits are validated against their schema; config setters now guard against malformed config sections instead of crashing.
- Schedule times are validated (format + range) before a scheduled job is enabled, both via the CLI and the UI — invalid times now return
400instead of silently accepting garbage.
Moorcheh client cache invalidation
MoorchehClientSingletonnow tracks the config it was built from (backend, URL, timeout / API key) and rebuilds the cached client when that config changes, instead of serving a stale client after a backend or API-key switch.
Avoid storage writes during service initialization
SessionService/AgentServiceno longer eagerly create directories or generate a secret key at construction time; both are now lazy (created/generated on first actual use).
memanto connect / skill install correctness
- Fixed false-positive shared-skill detection that could report a skill as installed for one agent when it was actually another agent’s install.
connect --disconnectnow preserves unmanaged rule files (including non-UTF-8 ones) instead of deleting content Memanto didn’t add, and cleans up theSessionStarthook entry and any permissions Memanto added — not just the instruction file and skill. Seememanto connect remove.- Hook-cleanup matching (used when disconnecting) tightened to avoid removing unrelated hook entries.
Agent list namespace counts hardened
list agentsnow guards against malformed/missingitem_countornamespace_namefields in the Moorcheh namespaces response instead of raising.
MCP integration: per-agent session isolation
- Concurrent MCP tool calls for different agent IDs no longer share one
SdkClientsession — each agent gets its own isolated, cached client, with batch payload validation happening before any readiness side effects and newly created scoped clients only cached once activation actually succeeds. - MCP
batch_remembernow guards against and normalizes malformed item results instead of propagating a bad shape.
LangGraph integration fixes
- Non-string content values are stringified before being written to the store (previously could raise).
min_confidencesearch filtering fixed. Setup now retries after an activation failure instead of getting stuck. Input limits enforced onremember.
Hermes / CrewAI integration fixes
- Fixed agent-id truncation collisions in Hermes (two different agent IDs could truncate to the same internal id). Hermes memory-mirror writes on exit are now non-blocking. CrewAI
remembernow enforces the same input length limits as the core API.
Memory validation / parsing hardening
- Fixed the ambiguity guard being systemically bypassed by common auxiliary verbs (
is/are/was/were) matchingSTRONG_FACT_PATTERNS. - Memory type is now schema-validated on write instead of accepted as any string;
SourceTypevalidation is strict and rate-limiting now fails closed on error instead of open. - Tags and source labels are now length-bounded before storage (applies to both
rememberand memory edits). - Fail-fast on malformed storage responses in the core write path,
memanto migrate, and MCPbatch_remember.
Timestamp formatting fix
- Epoch-integer timestamps are now coerced to ISO strings during memory-read formatting instead of being returned as raw ints, which broke downstream date parsing.
Tests
- New
tests/test_connect_engine.py,tests/test_connect_detection.py,tests/test_config_manager_setters.py,tests/test_schedule_time_validation.py,integrations/mcp/tests/test_lifecycle.py. - Large expansion of
tests/test_api.py,tests/test_backend.py,tests/test_unit.py, and per-integration test suites covering every fix above.
Released July 23, 2026
Bug Fixes
Agent list crash on mixed timestamps
- Older agent JSON files stored
created_at/last_sessionwithout a timezone (e.g.2026-04-29T03:43:11.497100), while newer records use UTC-aware values (e.g.2026-07-23T12:47:43.431783Z). Sorting agents bycreated_atthen raisedcan't compare offset-naive and offset-aware datetimes, somemanto agent list— and List Agents — failed entirely once both kinds of record existed on disk. AgentInfonow normalizescreated_atandlast_sessionto UTC-aware via a Pydantic validator on load, and agent listing sorts using the normalized value, so legacy and new metadata coexist safely.
Released July 22, 2026
New Features
OKF in the Web UI
- The Migrate tab now supports importing an OKF bundle directly from the dashboard, alongside Mem0/Letta/Supermemory. See OKF Integration.
Bug Fixes
Content silently wiped by a false-positive “Tags:” match
- The wire-format parser split stored memory text on every blank-line-separated chunk and dropped any chunk starting with
"Tags: "— so content that legitimately began a paragraph with the literal text"Tags: "was silently deleted on read. Parsing now partitions strictly into title/content, and only strips a trailing tags block when the record actually has tags and the last blank-line-delimited segment starts with"Tags: ".
Temporal filter fail-open
- A silent-fail path in temporal filtering could fall through to returning unfiltered results instead of the intended filtered set; fixed to fail closed.
Phantom session summaries from failed writes
remember/batch-rememberlogged a memory to the local session Markdown summary regardless of whether the underlying Moorcheh write actually succeeded. A new sharedis_successful_write_result()helper gates summary logging (and batch per-item reporting) on a real success status (queued/success/ok), so a failed write no longer produces a phantom entry in the session log.- Batch upload status now fails closed on unrecognized values — previously any non-empty status from Moorcheh was treated as ambiguous; now only
queued/success/okcount as successful and anything else is explicitly marked"failed"with the returned status recorded as the error.
Timestamp / TTL invariant violations
created_at/updated_atare now normalized to UTC-aware, clamped to “now” if a caller-supplied value is in the future, andcreated_atis forced to never exceedupdated_at— closing cases where a bad/aware timestamp from an import or manual edit could produce a memory that looks “created after it was updated” or timestamped in the future.expires_atis now always serialized as an ISO string on the outgoing document instead of relying on the object’s defaultstr().- Pagination offset and aware-datetime comparison bugs in session listing fixed as part of the same batch.
Tags, metadata, and provenance preservation
- Consolidates four related fixes: Hermes agents no longer strip tags on read; the
memanto recallCLI display now shows tags/provenance correctly; LangGraph’sMemantoStorenormalizes tags consistently (including a fix for comma-containing tag keys and preserving wildcard tag filters); and a trailing-"Tags:"suffix leak in read formatting is fixed. - MCP
batch_remembertool now normalizes tags before sending.
Streaming uploads
- TypeScript SDK file uploads are now streamed via a multipart
Readablegenerator instead of buffering the whole file in memory. - The Claude Code integration’s transcript reader now streams the JSONL transcript line-by-line (bounded deque tail) instead of requiring
readlines()to materialize the entire file — matters for long-running Claude Code sessions with large transcripts. Read failures during transcript parsing are now logged instead of silently swallowed.
Export limit validation
limit_per_typeformemanto memory exportis now validated (integer,1–100) before querying every memory type, instead of failing deep inside the export loop on a bad value.
UI date formatting
- Fixed a date-format bug in the Memory Explorer.
Tests
- New
tests/test_memory_format.pycovering the tags/content parsing fixes. - New
tests/test_memory_read_confidence.pyadditions, plus expandedtests/test_api.py,tests/test_cli.py,tests/test_unit.pyfor timestamp/TTL invariants, export-limit validation, and write-status gating. - New/expanded test coverage in
integrations/{langgraph,mcp,hermes-agents,claudecode}/tests/.
Released July 17, 2026
New Features
OKF (Open Knowledge Format) export / migrate / sync
- New
--okfflag onmemanto memory export/memanto memory syncwrites an Open Knowledge Format v0.1 bundle instead of the default Markdown output — one file per memory (or a stacked file per type once a type exceeds a size threshold), YAML frontmatter, grouped by memory type. - Memanto-only fields (id, confidence, provenance, source, status) are preserved under a namespaced
x_memantofrontmatter block so Memanto → OKF → Memanto round-trips are lossless; other OKF consumers ignore the unknown keys. memanto migrategains an OKF source:memanto migrate <agent> --okf <path>imports an OKF bundle back into an agent, alongside the existing Mem0/Letta/Supermemory sources.
VoltAgent TypeScript SDK integration
- New
@moorcheh-ai/memanto/voltagentintegration, mirroring the existing Vercel AI SDK / Mastra / OpenAI integrations, with its own test suite and dependency wiring.
Improvements
Temporal recall correctness
- Tag filters are now actually applied on
recall,recall/as-of,recall/changed-since, andrecall/recent—tagswas accepted in the request body but silently dropped on the temporal endpoints. - Date-only
as-ofqueries (e.g.2026-06-01) now include the full day instead of being treated as midnight. - Malformed/unparseable timestamps are now skipped instead of raising during temporal filtering.
changed-sincesorting no longer breaks on memories with a nullupdated_at.- Delete-and-recreate updates that briefly expose both the old and new document under the same id now resolve to the newest version by timestamp (previously could return the stale duplicate).
- The candidate pool fetched from Moorcheh is widened when post-retrieval filters (tags, type, temporal bounds) are active, so filtering no longer starves the result set below the requested limit.
- Temporal recall limits are validated before hitting the backend and capped to sane defaults; boolean and non-positive limits are rejected; duplicate recall-limit validation logic was consolidated into one shared helper.
- Session expiry now handles timezone-aware expiry timestamps consistently, fixing spurious “session expired” states.
LangGraph integration
- Refined
recall/remembernode behavior with expanded test coverage.
Tests
- New
tests/test_okf.py,tests/test_memory_read_as_of.py,tests/test_memory_read_temporal_recall.py, plus expanded coverage acrosstests/test_temporal_helpers.py,tests/test_api.py,tests/test_cli.py, andtests/test_unit.pyfor every temporal-recall fix above and OKF round-tripping.
Released July 14, 2026
New Features
TypeScript SDK framework integrations
- Three new framework integrations ship as part of
@moorcheh-ai/memanto, each behind its own subpath import:@moorcheh-ai/memanto/ai-sdk(Vercel AI SDK),@moorcheh-ai/memanto/mastra(Mastra), and@moorcheh-ai/memanto/openai(OpenAI Node SDK). - Each exposes
recallMemory/rememberMemory/answerMemorytools backed by the sameMemantoclient, with a sharedMEMORY_TYPESexport so the model can only emit valid memory types. - Framework packages are optional peer dependencies (
ai,@mastra/core,openai, pluszod) — install only the ones you use. Node engine requirement bumped to>=20.
Security
Management auth required for agent-lifecycle endpoints
POST /agents,GET /agents,GET /agents/{agent_id},DELETE /agents/{agent_id},POST /agents/{agent_id}/activate,POST /agents/{agent_id}/deactivate, andGET /statuspreviously only checked that the server had a configuredMOORCHEH_API_KEY, not that the caller was authorized — with the defaultHOST=0.0.0.0bind, any network peer could create agents, activate sessions, and obtain session tokens.- These endpoints now require either a matching management credential (
Authorization: Bearer <key>orX-Api-Key) or a loopback client origin.
Recall filter-token injection guard
memory_type,tag,status, and metadata key/value filters passed to Moorcheh’s keyword query syntax are now validated against a strict token pattern before being interpolated, preventing query-syntax injection via crafted filter values.
Unique on-prem upload staging paths
- Uploaded files on the on-prem backend are now staged under a UUID-suffixed filename instead of the original name, preventing same-named concurrent uploads from colliding with each other’s staged file.
Improvements
On-prem restart and session-end no longer block the event loop
restart_onprem_backendpreviously ran blocking subprocess and HTTP calls directly inside anasync def, freezing the entire API for the whole restart window (up to several minutes). It’s now fully async, and the restart itself runs as a cancellation-safe background task so a client timeout can no longer interleave concurrent restarts against the same on-prem stack.
Batch upload status normalization
- Batch memory writes now count
"ok"(in addition to"queued"/"success") as a successful per-item status, and count"failed"case-insensitively — on-prem batch uploads were previously miscounted as failed despite succeeding.
On-prem answer model omission
- Conversation extraction now omits
ai_modelwhen no on-prem LLM is configured, letting the server pick its own default instead of erroring — matching the existinganswerendpoint behavior.
memanto export / memanto memory sync no longer overwrite a good cache on backend outage
memanto memory exportpreviously swallowed every per-type recall failure into an empty list and wrote it unconditionally — during a full backend outage this silently wiped the cached export (and, viamemanto memory sync, the project’sMEMORY.md) even though nothing was actually forgotten. It now fails loudly instead when every memory type fails to recall (a genuine “no memories of this type” still exports fine).memanto memory syncfalls back to the previous export when a refresh fails and a prior export exists, instead of wipingMEMORY.md.
Memory-update metadata handling
memanto editnow preserves extra metadata fields from the existing record (e.g. on-premoriginal_id) that aren’t part of the standard memory schema — but explicitly excludes the trust fields removed on 2026-06-29 (superseded_by,supersedes,validated_at,validation_count,contradiction_detected) so old on-prem records don’t resurrect dead schema on update.
Tests
- New
tests/test_memory_read_filter_sanitization.pyandtests/test_export_resilience.py, plus expandedtests/test_backend.py,tests/test_unit.py, andtests/test_api.pycovering the filter-injection guard, stale-cache export fallback, batch upload status normalization, and trust-field exclusion on update. - New
sdks/typescript/test/integrations/*.test.tsfor the three new SDK integrations.
Released July 9, 2026
Security
Session cookie hardening
- Browser UI sessions now use an
HttpOnly,SameSite=Strictcookie (memanto_session_token) instead of JS-readable token storage, via newset_session_cookie()/clear_session_cookie()helpers. - The cookie’s
Secureflag is now set dynamically from the actual request scheme (Secureonly over HTTPS) rather than hardcoded — Memanto defaults to plain HTTP (0.0.0.0, no built-in TLS), so a hardcodedSecure=Truewould have silently stopped browsers from ever sending the cookie back in that default deployment. See Cookie-Based Authentication. - Session renewal now correctly updates the cookie with the new token on the response — previously a renewed session invalidated the old token without refreshing the cookie, breaking the very next request.
Streaming file uploads
upload_filepreviously buffered the entire file in memory before writing to disk; for the documented 5 GB max, concurrent large uploads could trivially exhaust server RAM. Uploads are now streamed to disk in 1 MB chunks with the 5 GB cap enforced during the stream (413if exceeded), not after full buffering.- The chunk write itself is now dispatched via
asyncio.to_threadso large uploads no longer block the event loop on synchronous disk I/O.
Blank/invalid input rejected across API and CLI
answer/recallqueries, conversation-extraction messages, and CLI batch memory content now reject blank/whitespace-only strings via Pydantic validators instead of silently accepting empty input.rememberprovenance values andrecallmemory-type filters are now validated against the allowed enum values instead of passed through unchecked.
Session cleared when deleting the active agent
- Deleting an agent now also deletes its persisted session state, so a saved session token for a deleted agent can no longer be replayed via
X-Session-Token.
TypeScript SDK: URL-encode agent/memory IDs
- All REST paths built from
agentId/memoryIdnow run throughencodeURIComponent(), preventing malformed requests or path injection when an ID contains special characters.
Improvements
Timestamp normalization for imports
- Imported memory timestamps (e.g. from
memanto migrate) are now preserved as source chronology while being normalized to UTC-naive values for downstream confidence calculations, via a sharedas_utc_naive()helper (deduplicated out ofmemory_write_serviceintotemporal_helpers). - Session-listing sort and session comparisons now normalize datetimes consistently before comparing, avoiding naive/aware
datetimecomparison errors.
Error handling
map_error_to_http_exceptionnow passes an existingHTTPExceptionthrough unchanged instead of re-wrapping it (e.g. avoids turning a413upload-too-large into a generic500).
TypeScript SDK fixes
- Fixed
status()session bootstrap so a session established outside the constructor is recognized correctly. - Fixed a file-size fallback bug in the upload path.
Tests
- Large expansion of
tests/test_api.py,tests/test_cli.py, andtests/test_unit.pycovering session-cookie renewal (including the HTTP-vs-HTTPSSecureflag behavior), streaming upload limits, blank-input validators, provenance/type validation, session deletion on agent removal, and timestamp normalization. - Expanded
sdks/typescript/test/memanto.test.tsfor agent-ID encoding and session bootstrap behavior.
Released July 6, 2026
Security
Path traversal via agent_id / session_id / dates
- Unsanitized
agent_id/session_idvalues were concatenated directly intopathlib.Pathexpressions (e.g.sessions_dir / f"{agent_id}.json"), letting a caller escape the storage directory with input like"../../etc/passwd". All filesystem call-sites now run throughvalidate_safe_id(). - Extended the same guard to
memory_export_service,daily_analysis_service(including the date parameter used in glob patterns and JSON output paths), and the--output-pathCLI flag (anchored to a base dir viarelative_to()containment checks).
CORS reflected-origin credential exposure
- Default
ALLOWED_ORIGINS=["*"]combined withallow_credentials=Truecaused Starlette to mirror any requestOriginback inAccess-Control-Allow-Originwhile also sendingAccess-Control-Allow-Credentials: true— letting any website make credentialed cross-origin requests to the Memanto API. - Fixed to stop mirroring arbitrary origins when credentials are allowed.
Sensitive Web UI endpoints gated to localhost-only
POST /api/ui/shutdown,GET /api/ui/browse,PATCH /api/ui/config,PUT /api/ui/api-key,POST /api/ui/onprem/restart, plus the connections and migrate endpoints, were reachable from any network host with no authentication (remote DoS, arbitrary file listing, config/API-key overwrite).- Added a
_require_local()dependency that returns 403 for any caller that isn’t127.0.0.1/::1(including IPv4-mapped IPv6 loopback), and blocked glob-pattern injection in the browse endpoint.
Unpredictable session secret
- Removed the hardcoded default JWT signing secret (
"memanto-default-secret-change-in-production"). - When
MEMANTO_SECRET_KEYisn’t set, a per-instance random secret is now generated (secrets.token_hex(32)) and persisted locally instead of falling back to a publicly-known constant.
Session token lifecycle hardening
- Deactivated/terminated session tokens are now rejected outright (401) instead of continuing to authorize writes.
- Cross-agent session/agent mismatches now consistently raise
AuthorizationError→ HTTP 403 (was a generic 500) across all session-scoped endpoints. - CLI clients now validate cached sessions before reuse instead of trusting a stale cached token.
- TypeScript SDK resets its local session state after
deleteAgent().
Improvements
Legacy scope model collapsed to agent_id
- Removed the
scope_type/scope_idpair (and the underlyingMemoryScope/ namespace-parsing machinery) in favor of a singleagent_idfield; namespaces are now built by one free function (agent_namespace(agent_id)). - Dead code from this and prior cleanups moved to
memanto/app/legacy/(excluded from CI lint/type-check). - Removed orphaned “trust” fields that were never populated by any live write/read path (
superseded_by,validation_count,contradiction_detected, etc.) and the unusedValidationPolicyclass.
Confidence filtering bug fix
- Numeric
min_confidencefiltering in memory search previously relied on Moorcheh keyword syntax that never matched; it’s now applied as a post-filter on the numericconfidencefield, fixing a zero-threshold edge case that silently returned nothing.
Manual conflict resolution validation
ConflictResolveRequestnow requires non-emptymanual_contentwhenaction == "manual", both on the API and in the UI (blank submissions show a warning toast and refocus the textarea).
Timestamp normalization
- Parsed ISO timestamps are now consistently normalized to UTC, whether the input has an explicit offset or is naive.
CLI: honor custom title for short memories
memanto rememberno longer overrides an explicit--titlewith an auto-truncated content snippet when the memory content is short.
Memory deletion response handling
- Tightened success/failure detection for memory deletion and update-then-delete flows so partial or malformed backend responses aren’t reported as success.
TypeScript SDK & CI
- Updated dependencies, CI workflow permissions, regenerated
openapi.json, and added an npm publishing workflow (.github/workflows/publish.yml).
Tests
- New
tests/test_cors_fix.py,tests/test_output_path_traversal.py,tests/test_ui_auth.py,tests/test_remaining_ui_auth.pycovering the CORS, path-traversal, and localhost-gating fixes. - New
tests/test_memory_read_confidence.pyandtests/test_temporal_helpers.py. - Expanded
tests/test_api.py,tests/test_cli.py,tests/test_unit.pyfor session-secret generation, inactive-token rejection, and deletion handling.
Released June 26, 2026
New Features
TypeScript SDK (sdks/typescript/)
- New
@moorcheh-ai/memantonpm package — a fully-typed client generated from the API’s OpenAPI spec (openapi-ts), covering agents, sessions, remember, recall, answer, upload, and the extract/edit endpoints. - Lifecycle helpers (
src/lifecycle.ts) for session start/stop memory flows, plus adoctorcommand (src/doctor.ts) for config/connectivity checks. - All recently-added API features exposed as first-class SDK methods.
- CI workflow
.github/workflows/sdk-typescript.ymlbuilds, tests (Vitest), and publishes the package; full test suite (memanto.test.ts,lifecycle.test.ts,doctor.test.ts). - See the TypeScript SDK reference for the full method list.
memanto edit command and PATCH endpoint
- New
PATCH /{agent_id}/memories/{memory_id}endpoint withMemoryEditRequestfor partial in-place updates. - CLI
memanto edit <memory_id>with--title,--content,--type,--confidence,--tags,--sourceoptions (at least one required). - Field validation on both the API and direct-client paths: non-empty content with length limits, confidence range 0.0–1.0, and valid memory-type membership — matching the create-endpoint contract.
- See
memanto editand Edit Memory.
v2 memory route response models
- Explicit Pydantic
response_modelschemas added to the v2 memory routes, giving typed/validated responses and accurate OpenAPI documentation (which in turn feeds the TypeScript SDK codegen).
Improvements
Local metadata logging
- Session service now logs memory metadata locally alongside the memory write, keeping the local session summary in sync with stored memories.
Security
Cross-agent authorization returns 403
- All 12 agent-scoped endpoints now return HTTP 403 (not 500) when a session’s
agent_iddoesn’t match the URL’sagent_id, correctly signaling an authorization failure instead of a server error.
Upload path-traversal fixed (CWE-22)
- Uploaded filenames are stripped to their basename (
Path.name) with a defense-in-depth realpath check, preventing a crafted filename (e.g.../../../etc/cron.d/backdoor.txt) from escaping the temp directory.
Secrets removed from UI config endpoint
GET /api/ui/configno longer returns the plaintext Moorcheh API key or session JWT; only safe metadata (api_key_configured,api_key_preview) remains, closing an unauthenticated secret-disclosure path.
Tests
- Expanded
tests/test_api.pyandtests/test_cli.pyfor the edit endpoint, v2 response models, the 403 scope guard, and filename sanitization. - New TypeScript test suites under
sdks/typescript/test/.
Released June 22, 2026
New Features
Conversation memory extraction
- New
POST /{agent_id}/remember/extractendpoint that distills chat-style conversation turns into typed memory candidates, using the same Moorcheh answer-generation path as the RAGanswerendpoint. - Candidates are auto-classified into valid memory types, de-duplicated, confidence-scored, and tagged
conversation-extract; secrets, API keys, and tokens are explicitly excluded by the extraction prompt. dry_runreturns candidates without persisting; otherwise they’re written through the standardbatch_rememberpath and logged to the session summary.- New
ExtractMemoriesRequest/ConversationMessagemodels with bounded limits (≤200 messages, ≤100 memories, 12k-char cap). - CLI
memanto remember --from-conversation <path|->reads a JSON message array from a file or stdin, with--dry-run,--max-memories, and--ai-modelflags, and renders each extracted candidate as a panel. - SDK and direct clients gain
extract_memories_from_conversation().
Improvements
Provenance metadata in recall
recalloutput now displaysSource,Ref, andProvenancefor each memory (in addition to tags), unifying file-upload source names and origin (user / agent / tool) into one consistent block.- MCP
MemoryHitmodel extended withstatus,source,source_ref, andprovenancefields so MCP clients receive full memory metadata. - Web UI memory cards surface the same source / provenance metadata.
Tests
- New
tests/test_conversation_memory_extraction.pycovering extraction, JSON parsing / normalization, validation limits, and dry-run behavior. - Expanded
tests/test_api.pyandtests/test_cli.pyfor the extract endpoint and--from-conversationCLI flow.
Released June 16, 2026
New Features
memanto migrate command suite
- Replaces the old
analyzecommand with a full migration workflow: export a provider’s data (Mem0, Letta, Supermemory), map each source row onto Memanto memory types (auto-classified via the rule-based parser), bulk-write viabatch_remember(100 items/request), and optionally generate a storage/token/latency savings report — all in one command. - Provider metadata (scope IDs, confidence scores, hashes) is preserved in a bounded
[Supporting data]footer so nothing is lost; originalcreated_at/source/source_refmap naturally onto the schema. --dry-runpreviews the mapping (types, confidence, tags) without writing.--reportgenerates the Markdown comparison on real runs. Outputs live in~/.memanto/migrate/<provider>/<timestamp>/(separate from legacyanalyze/artifacts).- Works on both cloud and on-prem backends; on-prem
batch_rememberrespects the same chunking.
memanto forget command and REST endpoint
- New
DELETE /{agent_id}/memories/{memory_id}endpoint for single-memory deletion. Checks session scope (the session must own the agent) and removes the memory from Moorcheh. - CLI
memanto forget <memory_id>for quick terminal deletion. - UI Delete button on each memory card in the Memory Explorer.
Improvements
On-prem backend enhancements
- Session namespace creation now reuses an existing namespace on-prem instead of erroring when the namespace already exists (idempotent namespace setup).
- On-prem
forgeterror messages are now clear and actionable (differentiate “memory not found” from “namespace issue”). - On-prem threshold boundary checks fixed (no off-by-one on min-similarity validation).
Mapper robustness
- Mappers now extract all available info from source exports, including less-common fields like interaction hashes, scope IDs, and custom metadata, preserving them in the
[Supporting data]footer for compliance and audit trails.
Migrate + on-prem API key handling
- The migrate command correctly propagates the API key dependency for the on-prem backend (no double-init of the backend client).
Tests
- New
tests/test_cli.pycoverage for themigrateandforgetcommands (dry-run, report generation, single-memory delete flow). - New
tests/test_unit.pycoverage for mappers (all three providers) and session namespace idempotency. - Integration tests expanded across CrewAI and LangGraph tooling.
Released June 10, 2026
New Features
On-prem Moorcheh backend
- New
MEMANTO_BACKENDsetting (cloud|on-prem) routes every call through a backend-aware dispatcher that exposes the samenamespaces/documents/similarity_search/answer/files/vectorsshape regardless of target — service code never branches. - First-run wizard now asks Cloud vs On-Prem; on-prem path installs
moorcheh-client>=0.1.3, prompts for embedding + LLM provider (ollama/openai/cohere), persists choices to~/.memanto/on-prem/state.json, writes the full LLM block to~/.moorcheh/config.jsonbeforemoorcheh up, then pulls Ollama models into the container. - On-prem data lives under
~/.memanto/on-prem/(sessions, agents, summaries) so cloud and on-prem never share local state; switching backends clears the active session. - New
memanto config backend [cloud|on-prem]CLI command for runtime switching, plusBackend,MOORCHEH_ONPREM_URL(defaulthttp://localhost:8080) andMOORCHEH_ONPREM_TIMEOUT(default300) rows inmemanto config show. - Health check, startup validation, and the agent delete flow are all backend-aware.
memanto detect-conflicts + scheduled job split
- Conflict detection split out of daily-summary into its own command,
POST /{agent_id}/conflicts/generateREST endpoint, andDirectClient.generate_conflict_report()method. - New hidden
memanto schedule _runentrypoint executes daily-summary + detect-conflicts back-to-back; OS scheduler now points at it. On-prem backend short-circuits with a clear error (scheduled job depends on cloud-only LLM Answer). daily_summary_service.pyrenamed →daily_analysis_service.py.
UI: Connect tab, memory timeline, daily summary, file pagination
- Connect tab installs/removes Memanto skills into any registered agent (Claude Code, Cursor, etc.) via the underlying
install_agent/remove_agentengine, with aconnections.jsonregistry tracking project-local vs global installs. - Memory History page with a vertical timeline of every change (created, updated, conflict resolved) per memory.
- Daily summary + Unreviewed conflicts widget surfaced on the dashboard (Daily Summary tab renders the generated MD and shows days with pending conflict review).
- Answer panel is backend-aware — on-prem shows provider/model/api-key only (no cloud-only knobs) and writes to
~/.moorcheh/config.jsonwithout polluting the shared cloud yaml. - Memory Explorer now use cursor pagination through
documents.fetch_text_data(next_token/has_more) instead of being capped at 100 items per namespace.
Improvements
Backend-aware recall_* REST endpoints
recall_as_of,recall_changed_since,recall_recentand the underlyingMemoryReadServicemethods now treatlimit=Noneas “fetch all” — theCostGuard.validate_k_limitcap is only applied when a limit is explicitly set.answer.generatecalls route throughget_active_llm_model()so the LLM identifier comes from cloud settings on cloud,on-prem state.jsonon on-prem, with the field omitted entirely when on-prem has no LLM configured (server picks its own default).
Stale active-session handling
get_active_session()now clears the stale active marker and returnsNonewhen the session has expired, instead of returning an expiredSession.- All datetimes flow through a single
utc_now()helper; Pydantic v1Config.json_encodersblocks removed from session models.
Connect engine ↔ registry sync
install_agent/remove_agentnow sync their results into~/.memanto/connections.jsonso the UI’s Connections page reflects what the CLI did and vice versa.
Tests
- New
tests/test_backend.pycovering cloud/on-prem dispatcher behavior andget_active_llm_modelfallbacks. - New
tests/test_analyze.pycovering the Mem0/Letta/Supermemory export + compare + report flow end-to-end with mocked provider responses. tests/test_cli.pyandtests/test_unit.pyexpanded to cover the newdetect-conflicts/schedule _runpaths.
Released June 1, 2026
New Features
Recall similarity threshold
- New
recall.min_similaritysetting (0.0–1.0) in CLI config with validation; default0.0. - REST
POST /memories/recalland SDK/Directrecall()resolvemin_similarityfrom the request, then fall back to the config value, then to unset. - CLI flag renamed
--min-confidence→--min-similarityonmemanto recall. memanto config showsurfaces the newMin Similarityrow.
Agents page in the Web UI
- New sidebar entry listing every registered agent with status, pattern, memory and session counts; activate/deactivate from the table.
GET /api/v2/agentsandGET /api/v2/agents/{agent_id}now populatememory_countfrom the live Moorcheh namespace document count instead of the stale local metadata value.
File upload in the Playground
- New
Upload Filetab accepts.pdf,.docx,.xlsx,.json,.txt,.csv,.md(max 5 GB) and ingests into the active agent’s namespace, with client-side size/extension validation.
Fuzzy fallback for auto memory-type parsing
- When deterministic rules abstain, a
rapidfuzz-backed pass scans tokens against a curated list of long, distinctive keywords per type and picks the best match aboveFUZZY_SCORE_CUTOFF = 88.0— recovering obvious misspellings like “decded” →decision, “crahsed” / “tracebck” →error. - New runtime dependency:
rapidfuzz>=3.0.0.
Smart-parse config switch
- New
memanto.cli.smart_parsesetting inconfig.yamlpropagates to theAUTO_PARSE_ENABLEDenv var on startup, letting users toggle auto-parsing without editing code.
Improvements
CrewAI tool schema
MemantoRecallToolnow exposesmin_similarity(0.0–1.0) to the LLM, raises the defaultlimitfrom5to10, and enforcesge=1, le=100via Pydantic instead of a hardcodedmin(limit, 20)clamp.
UI timestamps & filters
fmtDateappendsZto naive UTC timestamps so the browser converts them to the user’s locale instead of treating them as local time.- Memory Explorer gains an
All Sourcesfilter dropdown; navigation helpergoToPage()added; favicon shipped.
memanto connect agent templates rewritten
- Reframed as an “active memory companion” with five non-negotiable rules (read
MEMORY.md, search before guessing, store proactively, always pass--type/--confidence/--provenance/--source, never keep mental scratchpads). - Adds an operations table (
recallvsanswervsremember), workedmemanto rememberexamples per type, full memory-type/provenance/confidence references, and the new temporal flags (--recent,--as-of,--changed-since). - Cursor MDC rules file mirrors the same content under
alwaysApply: true.
Tests
- New fuzzy-fallback cases in
tests/test_memory_parsing.py(typo’ddecision/errordetection; confirms no false-fire on unrelated text). tests/conftest.pyresetssettings.AUTO_PARSE_ENABLED = Truebefore every test so localsmart_parseconfig can’t leak into the suite.
Released May 25, 2026
New Features
Configurable rule-based memory parsing
MemoryParsingService(memory_parsing_service.py) auto-detects a memory’s type at ingestion using score-based classification with priority tie-breaking across all 13 supported types — no more blind default tofact.MemoryRecord.typeis now optional (None); the parser assigns the type when the caller omits it.- New
AUTO_PARSE_ENABLEDsetting (defaultTrue). rememberandbatch-rememberrun the parser whentypeis omitted and return the resolvedtypein the response.- CLI —
memanto rememberno longer forces--type fact; it displays the parsed type instead.
MCP server integration
- The MCP server integration is now available — it exposes Memanto memory operations to any MCP client. Install it with:
- See the Integrations section for setup details.
Hermes Agents integration
- The Hermes Agents integration is now available — a
hermes_memantoprovider for Hermes Agents. Install it with: - See the Integrations section for setup details.
Improvements
Unified content-length cap across layers
- SDK/Direct clients now use
InputLimits.MAX_TEXT_LENGTHinstead of a hardcoded500, aligning the cap with the REST/Pydantic models (10,000 chars). - Removed the unused
MAX_MEMORY_SIZE/MAX_TITLE_SIZEsettings.
Chronological recall --recent
- New
recall_recent()onSdkClientandDirectClientreturns the most recently stored memories (newest first). - New
memanto recall --recentflag — lists recent memories directly, no search query required (mutually exclusive with--as-of/--changed-since).
Unified kiosk_mode and threshold defaults
kiosk_modeandthresholddefaults now resolve fromconfig.yaml.thresholdis only applied whenkiosk_modeis on; the kiosk-mode fallback threshold is unified to0.15across REST and config defaults.
CrewAI integration
- Install the CrewAI integration with:
- LLM tool schemas now enumerate all 13 memory types with definitions to guide classification.
- See the Integrations section for setup details.
Docker
- The Docker image can now be pulled directly:
Released May 12, 2026
Breaking Changes
Temporal endpoints no longer accept a query
Temporal endpoints now list every memory that falls inside the requested time window instead of running a similarity-matched subset.- API —
POST /{agent_id}/recall/as-ofandPOST /{agent_id}/recall/changed-sincerequest bodies dropped thequeryfield; response bodies dropped the echoedqueryfield. - CLI —
memanto recall --as-of …/--changed-since …now errors if aQUERYargument is also supplied. Remove the query to list all memories for that window. - Python clients —
recall_as_of()onDirectClientandSdkClientno longer take aqueryargument.
Improvements
Temporal retrieval switched to documents.fetch_text_data
- New
_fetch_all_memories()helper (memory_read_service.py) paginates through Moorcheh’sfetch_text_dataendpoint across all matched namespaces, applies optionaltype/tagsfilters in-process, deduplicates by ID, and strips summary chunks. - Fewer round trips —
search_as_ofandrecall_changed_sinceuse the fetch path instead of iteratingsimilarity_search.query()per memory type, returning complete result sets within Moorcheh’s 100-item-per-namespace fetch limit.
CrewAI integration as a publishable package
- New
memanto-crewaipackage (v0.1.0) inintegrations/crewai/withpyproject.toml,hatchlingbuild backend, MIT license, Python>=3.10. - Public exports —
MemantoSetup,MemantoRememberTool,MemantoRecallTool,MemantoAnswerTool,create_memanto_toolsfrommemanto_crewai.
Released May 11, 2026
Breaking Changes
Memory endpoints migrated to POST
recall,answer,recall/as-of,recall/changed-since— now accept JSON request bodies instead of query parameters.memory_typesrenamed totype— accepts a list of strings across all recall endpoints and CLI recall commands.
Session and auth changes
/session/currentrenamed to/status— requires no session token; reads active session from local state./session/extendremoved — session extension is no longer supported./sessionslist endpoint removed.Authorizationheader dropped for API key —MOORCHEH_API_KEYis read from server config only;Bearerheader auth is removed.X-Session-Tokenis the only auth mechanism for per-request memory operations.
Legacy routes removed
/api/v1/namespaces,/api/v1/memory,/api/v2/context— moved tomemanto/app/legacy/.
New Features
Recall and conflict endpoints
POST /{agent_id}/recall/recent— retrieves most recent memories without a query string; replaces/recall/current.GET /{agent_id}/conflicts— lists detected memory contradictions.POST /{agent_id}/conflicts/resolve— resolves a flagged contradiction.DELETE /agents/{agent_id}?delete-backup-too=true— optionally wipes the agent’s remote Moorcheh namespace on deletion.
Startup validation
- Fail-fast API key check — server validates
MOORCHEH_API_KEYon startup and refuses to start if missing or authentication fails.
Improvements
Structured request body models
- Pydantic models (
RecallRequest,RecallAsOfRequest,RecallChangedSinceRequest,RecallRecentRequest) with full field validation and bounds checking. - Smart date defaults — date-only
as_ofdefaults to end-of-day;sincedefaults to start-of-day, so full ISO datetimes are not required for daily windows.
Auth and session service
get_moorcheh_api_key()reads from server config only — no per-request header parsing.verify_moorcheh_api_key()validates once at startup instead of on every request.extend_session()removed;moorcheh_api_keyparameter removed fromcreate_session(),validate_session(), andrenew_session().
Health check
/healthno longer requires client dependency injection.- Status reports
"unhealthy"(was"degraded") when Moorcheh is unreachable.
CLI
memanto session extendremoved.- “Activation” terminology replaces “session” across
agent create,agent activate,agent deactivate, andmemanto status. memanto statuspanel renamed to Active Agent (was “Active Session”).
UI Fixes
UI shutdown fix
- Server stability — fixed an issue where the API server would unexpectedly shut down when refreshing or closing the browser tab. The server now stays alive unless explicitly stopped or running in specific UI-only modes.
Tests
- Added
tests/test_e2e.pywith end-to-end API coverage.
Released May 5, 2026
Improvements
API input validation
- Content fields —
remember,recall,answer,recall/as-of,recall/current, andrecall/changed-sinceenforcemin_length=1on query/content fields andmax_length=500ontitle. - Numeric bounds —
confidence,min_similarity,threshold, andtemperaturebounded[0.0, 1.0];limitenforcedge=1. - CostGuard validators (
validate_text_length,validate_query_length,validate_k_limit) applied across all memory read/write endpoints.
Session extension guard
- API — extending a session with
additional_hours <= 0now returns HTTP 422. - CLI —
memanto session extendrejects non-positive--hoursvalues before sending the request.
Daily summary custom output path
output_pathparameter added togenerate_summary()andgenerate_daily_summary().- When provided, the summary Markdown file is written to the specified path; parent directories are created automatically.
Agent pattern options
memanto agent create --patternhelp text updated to list only available patterns:project,support,tool(removes unavailablechat,research,custom).
Dependencies
moorcheh-sdkminimum version bumped from>=0.1.0to>=1.3.5.
Released April 30, 2026
Bug Fixes
UI dashboard authentication
- Root cause — the masked API key was being used for backend authentication, causing all dashboard data to fail loading after login.
- Fix — restored transmission of the full API key in the configuration response so the dashboard can authenticate backend requests properly.
- Display —
api_key_previewremains masked (........XXXXXX) in the settings tab; only the backend communication is affected.
Result: The Web UI dashboard now correctly initializes session state upon login, resolving the “no data” issue introduced in v0.0.6.
Tests
- Full test suite: 54 passed. UI connectivity verified.
Released April 30, 2026
Improvements
API key verification
- First-run setup —
memantonow actively verifies the key against Moorcheh before saving; invalid keys are rejected immediately; transient network issues surface as a warning rather than blocking setup. - Lighter auth ping — verification switched from
client.namespaces.list()toclient.documents.get(...)against a sentinel namespace.NamespaceNotFoundis treated as success (key authenticated; namespace simply doesn’t exist). - Clearer error codes — auth dependency returns 401 on
AuthenticationErrorand 500 on unexpected errors.
Server health check
/healthuses the same documents-based ping, so health reflects real authentication state.
Configurable summary model
SUMMARY_MODELsetting (defaultanthropic.claude-sonnet-4-6) used for daily summary and conflict reports.~/.memanto/config.yamlnow supportsmemanto.summary.model,memanto.answer.model,temperature, andanswer_limit— loaded at startup so models can be swapped without code changes.
UI security
/api/ui/configand the API-key update endpoint now return a masked preview (••••••••<last6>) instead of the raw key — plaintext key is no longer sent to the browser.
Tests
- Full test suite: 54 passed.
Released April 28, 2026
Bug Fixes
Web UI authentication after CLI activation
- Dashboard, Memory Explorer, recall, and analytics views now load correctly after
memanto agent activate. - “Session may be expired” and “Activate an agent via CLI to explore memories” error states are resolved.
Existing
api_key_preview and has_active_session fields are retained for backward compatibility with older UI surfaces.Improvements
Simplified first-run setup
- Single-step onboarding —
memantosetup now prompts only for the Moorcheh API key. - Removed the schedule time (
HH:MM) prompt, related validation, and automaticScheduleManager().enable(...)call from onboarding.
Released April 27, 2026
Improvements
Onboarding and documentation
- README quick start de-emphasizes
memanto serveas a prerequisite — users can runmemanto, create an agent, and try memories without keeping a local API process running. memanto servedocumented as optional, for HTTP/REST use only.- Agent integration guide shortens quick start to create → remember → recall, and updates Python examples.
- Session architecture doc notes that
memanto agent createauto-activates in the CLI.
CLI output polish
memanto status/memanto serveuse Local REST API wording; healthy API shows online.- Success messages drop the
OKprefix across agent create, remember, upload, and daily summary flows. - Welcome Quick Start lists
memanto ui, reorders commands, and describesmemanto serveas starting the local REST API.
memanto connect list
- Column renamed to Agent Name; rows show agent
nameinstead ofdisplay_name.
Behavioral Changes
memanto agent createalready auto-started a session; docs and Quick Start now consistently reflect this so separatememanto agent activateis not shown as a required step.- Default session/extension examples reference 6 hours where updated.
Tests
- Full test suite: 54 passed.
Released April 24, 2026
Improvements
CLI onboarding flow
- Quick start now shows
memanto servefirst and guides users to open a new terminal for agent commands. memanto serveprints a clear “next step” hint after startup.memanto agent create <agent-id>now starts a session automatically.
Documentation
- Updated
README.md,docs/CLI_USER_GUIDE.md,docs/CLI_INSTALLATION.md,docs/AGENT_INTEGRATION_GUIDE.md.
Behavioral Changes
memanto agent createauto-activates a session — separatememanto agent activateis usually not required in the quick start flow.
Tests
- Updated CLI tests for auto-session behavior. Full test suite: 54 passed.
Released April 22, 2026
Released April 22, 2026
New Features
Semantic memory engine
- Agents — persistent identity with isolated memory namespaces (e.g.
customer-support-bot,dev-assistant). - Sessions — 6-hour active windows; memories persist forever and remain accessible across all future sessions.
- 13 memory types —
fact,preference,decision,goal,instruction,event, and more, each stored with a confidence score. - Zero-indexing semantic search — memories are available for retrieval the exact millisecond they are written; no indexing delay.
- State-of-the-art accuracy — 89.8% on LongMemEval, 87.1% on LoCoMo.
Memanto CLI
pip install memanto— fullmemantocommand-line interface with organized command groups:agent,memory,session,schedule,config,connect, and core utilities.- Quickstart workflow:
REST API
- Full v2 HTTP API for agent lifecycle, session management, memory read/write, recall, and generative answers.
- Dual authentication —
Authorization: Bearer <moorcheh-api-key>for all requests;X-Session-Token: <jwt>for memory operations.
Developer integrations
- 13+ AI coding assistants and IDEs — Claude Code, Cursor, Cline, Windsurf, Continue, GitHub Copilot, OpenCode, Goose, Roo, Antigravity, Augment, Gemini CLI, Codex.
- Connect via
memanto connect <tool>with project-local or--globalscope.
MemantoClaw
- Open-source reference stack combining OpenClaw, NVIDIA OpenShell, and Memanto memory.
- One-command provisioning —
memantoclaw onboardconfigures inference routing, credentials, and memory bridge automatically. - Enhanced security — stricter seccomp/Landlock policies, credential filtering, immutable gateway config, host-bridge memory architecture.