V0.2.0
Release Notes for v0.2.0
This release adds a pluggable on-prem backend (talk to a local Moorcheh server instead of the cloud), a new memanto analyze command suite for comparing Memanto against Mem0 / Letta / Supermemory, an official langgraph-memanto integration package, a separate detect-conflicts job entrypoint, plus large UI upgrades (Connect tab, memory-history timeline, daily summary view, file pagination).
New Features
-
On-prem Moorcheh backend (
memanto/app/clients/{backend,onprem,moorcheh}.py,
memanto/app/config.py,memanto/app/routes/{health,auth_deps}.py,
memanto/cli/commands/{core,config_cmd}.py)- New
MEMANTO_BACKENDsetting (cloud|on-prem) routes every call through
a backend-aware dispatcher that exposes the same
namespaces / documents / similarity_search / answer / files / vectors
shape regardless of target — service code never branches. - First-run wizard now asks
CloudvsOn-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(default
http://localhost:8080) andMOORCHEH_ONPREM_TIMEOUT(default300) rows
inmemanto config show. - Health check, startup validation, and the agent delete flow are all
backend-aware.
- New
-
Official LangGraph integration package (
integrations/langgraph/)- New
langgraph-memantoPyPI package:create_memanto_toolsreturns native
LangChain@toolwrappers (memanto_remember,memanto_recall,
memanto_answer);create_recall_node/create_remember_nodeare
pre-built graph nodes;MemantoStoreis a drop-inBaseStore
implementation for the official LangGraph Store API. - Lazy, exception-driven, thread-safe setup so agents are created only on
first tool call; auto-detects type via the parser; usesrecall_recent
when no query is provided.
- New
-
memanto detect-conflicts+ scheduled job split (memanto/cli/commands/memory.py,
memanto/cli/commands/schedule.py,memanto/app/services/daily_analysis_service.py,
memanto/app/routes/memory.py)- Conflict detection split out of
daily-summaryinto its own command,
POST /{agent_id}/conflicts/generateREST endpoint, and
DirectClient.generate_conflict_report()method. - New hidden
memanto schedule _runentrypoint executesdaily-summary+
detect-conflictsback-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.
- Conflict detection split out of
-
UI: Connect tab, memory timeline, daily summary, file pagination
(memanto/app/ui/static/index.html,memanto/app/ui/routes/ui_router.py)- Connect tab installs/removes Memanto skills into any registered agent
(Claude Code, Cursor, etc.) via the underlyinginstall_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 + file uploads now use cursor pagination through
documents.fetch_text_data(next_token/has_more) instead of being
capped at 100 items per namespace.
- Connect tab installs/removes Memanto skills into any registered agent
Improvements
-
Backend-aware
recall_*REST endpoints (memanto/app/routes/memory.py)recall_as_of,recall_changed_since,recall_recent, and 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-premstate.jsonon
on-prem, with the field omitted entirely when on-prem has no LLM
configured (server picks its own default).
-
Stale active-session handling (
memanto/app/services/session_service.py,
memanto/app/models/session.py)get_active_session()now clears the staleactivemarker and returns
Nonewhen the session has expired, instead of returning an expired
Session.- All datetimes flow through a single
utc_now()helper; Pydantic v1
Config.json_encodersblocks removed from session models.
-
Connect engine ↔ registry sync (
memanto/cli/connect/engine.py,
memanto/cli/config/manager.py)install_agent/remove_agentnow sync their results into
~/.memanto/connections.jsonso the UI's Connections page reflects what
the CLI did and vice versa.
-
CrewAI integration (
integrations/crewai/...)- Sessions are validated and refreshed on tool init so long-running CrewAI
runs don't fail on a silently-expired session.
- Sessions are validated and refreshed on tool init so long-running CrewAI
Tests
- New
tests/test_backend.pycovering cloud/on-prem dispatcher behavior and
get_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 new
detect-conflicts/schedule _runpaths.
Full Changelog
Full Changelog: v0.1.3...v0.2.0