MemOS is four memory products with different operating costs
MemOS puts one name on four entry points. The Cloud API stores application memory on the vendor's service. The self-hosted API runs the memory service on your infrastructure. A cloud plugin connects supported agents to the hosted service, while a local plugin stores data in SQLite on the user's machine. All four aim to recall useful context before a task and save new experience afterward, but their privacy and maintenance profiles are different.
The source tree shows that breadth. Our commit de80694 checkout contained 2,014 files, about 436,507 source lines, and 31.1 MB before dependencies. It includes Python service code and a TypeScript local-plugin application. A buyer should choose one entry point before evaluating the feature list, because a 233-package Python service backed by two databases is a different commitment from adding a Node package to an existing agent.
The self-hosted service trades simplicity for editable graph memory
The main service models memories as inspectable objects rather than leaving everything inside opaque embedding vectors. Its API can add, retrieve, edit, and delete entries. Memory cubes separate or combine knowledge for users, projects, and agents. Text, images, tool traces, and personas can participate in retrieval, while feedback can correct stored information over time. Those controls suit an agent whose remembered claims need review and repair.
Self-hosting starts MemOS alongside Neo4j and Qdrant, with provider and storage settings supplied through an environment file. The alternative uvicorn path still expects both services to be running. Our 6,217 MB installed environment arrived before database data, model caches, images, or backups. For an application that only needs nearest-neighbor retrieval over short notes, that footprint and two-service topology are hard to justify. Graph relationships and editable memory cubes need to be central requirements.
What happened when we ran it
In our fresh unprivileged Debian sandbox with 3 CPUs and 8 GB of RAM, installation succeeded in 96 seconds. It added 233 Python packages and consumed 6,217 MB. The build then passed in 2 seconds. The repository had 12 CI workflow files, a Dockerfile, and a tests directory, so the failed suite did not come from an obviously absent test setup in the checkout.
Pytest stopped with exit code 1 after 90 seconds. It reported 936 passed and 6 failed out of 942 test outcomes, with 4 more skipped and 43 warnings. Four failures in test_mcp_serve.py said async functions are not natively supported. Two failures in test_kv.py raised AttributeError because DynamicCache had no key_cache attribute. The log identifies those symptoms; it does not prove which dependency or configuration change should fix them.
Pip-audit reported 29 known vulnerabilities in the installed packages. The supplied result does not give us license to invent severity, reachability, or exploitability, so each advisory needs triage against the deployed path. Still, 29 is too high to wave through on a service that holds user histories and provider credentials. The combination of a successful 2-second build and 936 passing tests shows substantial working code, while the six failures and audit result keep this commit below a clean production bar.
Local plugins avoid Neo4j and Qdrant, with narrower boundaries
The local plugin targets OpenClaw, Hermes Agent, and DeepSeek Harness. It keeps its data in SQLite and combines full-text and vector retrieval, with a Memory Viewer for inspection. This route removes the hosted data path and the service pair required by the full API. It does require Node.js plus one of those supported agent runtimes, so it is an integration choice rather than a general Python memory server.
Network access can still matter after choosing local storage. Issue 2345 reports that the default local embedder downloads its model from Hugging Face and offers no configuration for a mirror or preloaded offline path. When that download fails, the report says new traces lose vectors and later memory stages stall. For restricted networks, reproduce the embedding setup before trusting the local label. The 6,217 MB Python result does not apply to this separate Node plugin path, which should be measured on its own.
Memory lifecycle also differs by adapter. Issue 2354 says the Hermes plugin exposes tools to add, search, and retrieve a profile, yet provides no delete tool for the agent. Users can accumulate stale or incorrect entries without an agent-facing removal action. The core cloud API documents deletion, so this is an adapter gap rather than a claim that MemOS never deletes memory. It matters whenever an assistant is expected to repair its own long-term record.
Active releases do not cancel the checkout findings
Release v2.0.33 arrived on September 3, 2026, with fixes around preference memory, skill extraction, and local-plugin packaging. GitHub recorded a push on September 16, along with 11,374 stars and 69 combined issues and pull requests. Current work covers graph search, plugin imports, log redaction, memory scoring, and database providers. The queue indicates active maintenance across both the Python core and TypeScript plugin.
That pace makes MemOS worth following, but adoption should start with a narrow path. A supported-agent user can trial the SQLite plugin without taking on the 233-package service environment. A platform team can run the graph-backed API when memory inspection, correction, and cube isolation pay for Neo4j and Qdrant. Whichever path you choose, rerun the suite, inventory the 29 audit findings, and verify deletion and offline embedding behavior before the system stores irreplaceable user context.
