Nothing on the wire said which Mem0 surface made a call. Both SDKs sent only an auth header, so the platform saw python-httpx and axios and attributed every plugin, wrapper and direct API user to one undifferentiated bucket. Version was unknowable, which is what gates every deprecation decision. Three headers, and the rules on them are the point: - X-Mem0-Source and X-Application are SET-ONCE. Whichever layer is outermost sets them; nothing below overwrites. A plugin wrapping the SDK keeps its own identity instead of being renamed by the transport underneath it. - X-Mem0-Client is APPEND-ONLY. A plugin calling the Python SDK produces `mem0-plugin/0.3.1, mem0-python/2.0.19`, so neither layer can erase the other. Deliberately not User-Agent: proxies rewrite it, and we have already met a WAF that 403s on it. The plugin core also hoists `source` out of metadata to the top level, which is where the backend actually reads it. It sat in metadata, which get_event_source never consults, so all six plugins arrived indistinguishable from a raw SDK call no matter what they set. The harness tag stays in metadata as hook provenance. pi-agent had PI_AGENT as a PostHog property only and never sent it on the wire. vercel-ai-sdk sent nothing at all from its raw fetch calls. Values must exist in the platform's EventSource enum or they bucket to OTHERS, so integrations/AGENTS.md now states the contract and the "adding an integration" checklist requires landing the platform value in the same week. Pairs with mem0ai/platform#3602, which recognizes these values. TypeScript changes are not typechecked locally — deps are not installed for those packages. CI covers them. Claude-Session: https://claude.ai/code/session_01C7tEmH86HAr7GoAAKCEHZb
mem0 CLI
The official command-line interface for mem0 — the memory layer for AI agents. Works with the Mem0 Platform API. Available in Python and Node.js.
For AI agents: pass
--agent(or--json) on any command for structured JSON output purpose-built for tool loops — sanitized fields, no colors or spinners, errors as JSON. See Agent mode below.
Installation
npm install -g @mem0/cli
pip install mem0-cli
Both packages install a mem0 binary with identical behavior.
Quick start
# Interactive setup wizard
mem0 init
# Or login via email (get a new API key)
mem0 init --email alice@company.com
# Or authenticate with an existing API key
mem0 init --api-key m0-xxx
# Add a memory
mem0 add "I prefer dark mode and use vim keybindings" --user-id alice
# Search memories
mem0 search "What are Alice's preferences?" --user-id alice
# List all memories for a user
mem0 list --user-id alice
# Update a memory
mem0 update <memory-id> "I switched to light mode"
# Delete a memory
mem0 delete <memory-id>
Commands
| Command | Description |
|---|---|
mem0 init |
Setup wizard — login via email or configure API key manually |
mem0 add |
Add a memory from text, JSON messages, a file, or stdin |
mem0 search |
Search memories using natural language |
mem0 list |
List memories with optional filters and pagination |
mem0 get |
Retrieve a specific memory by ID |
mem0 update |
Update the text or metadata of a memory |
mem0 delete |
Delete a memory, all memories for a scope, or an entity |
mem0 import |
Bulk import memories from a JSON file |
mem0 config |
View or modify CLI configuration |
mem0 entity |
List or delete entities (users, agents, apps, runs) |
mem0 event |
Inspect background processing events (bulk deletes, large add jobs) |
mem0 status |
Verify API connection and display current project |
Run mem0 <command> --help for detailed usage on any command, or mem0 --version to print the CLI version.
Agent mode
Pass --agent (or its alias --json) as a global flag on any command to get output designed for AI agent tool loops:
mem0 --agent search "user preferences" --user-id alice
mem0 --agent add "User prefers dark mode" --user-id alice
mem0 --agent list --user-id alice
Every command returns the same envelope shape:
{
"status": "success",
"command": "search",
"duration_ms": 134,
"scope": { "user_id": "alice" },
"count": 2,
"data": [
{ "id": "abc-123", "memory": "User prefers dark mode", "score": 0.97, "created_at": "2026-01-15", "categories": ["preferences"] }
]
}
What agent mode does differently from --output json:
- Sanitized
data: only the fields an agent needs (id, memory, score, etc.) — no internal API noise - No human output: spinners, colors, and banners are suppressed entirely
- Errors as JSON: errors go to stdout as
{"status": "error", "command": "...", "error": "..."}with a non-zero exit code
Use mem0 help --json to get the full command tree as JSON — useful for agents that need to self-discover available commands.
Output formats
Control how results are displayed with --output:
| Format | Description |
|---|---|
text |
Human-readable with colors and formatting (default) |
json |
Structured JSON for piping to jq (raw API response) |
table |
Tabular format (default for list) |
quiet |
Minimal — just IDs or status codes |
agent |
Structured JSON envelope with sanitized fields (set by --agent/--json) |
Environment variables
| Variable | Description |
|---|---|
MEM0_API_KEY |
API key (overrides config file) |
MEM0_BASE_URL |
API base URL |
MEM0_USER_ID |
Default user ID |
MEM0_AGENT_ID |
Default agent ID |
MEM0_APP_ID |
Default app ID |
MEM0_RUN_ID |
Default run ID |
MEM0_ENABLE_GRAPH |
Enable graph memory (true / false) |
Implementations
| Language | Directory | Package | Docs |
|---|---|---|---|
| TypeScript | node/ |
@mem0/cli |
README |
| Python | python/ |
mem0-cli |
README |
Documentation
Full documentation is available at docs.mem0.ai/platform/cli.
License
Apache-2.0