cli/python/README.md
The official command-line interface for mem0 — the memory layer for AI agents. Python implementation.
Built for AI agents. Pass
--agent(or--json) as a global flag on any command to get structured JSON output optimized for programmatic consumption — sanitized fields, no colors or spinners, and errors as JSON too.
pipx install mem0-cli
pip install mem0-cli
Note: On macOS with Homebrew Python,
pip installoutside a virtual environment will fail with anexternally-managed-environmenterror (PEP 668). Usepipxinstead, or install inside a virtual environment.
# Interactive setup wizard
mem0 init
# Or login via email
mem0 init --email [email protected]
# 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
# Get a specific memory
mem0 get <memory-id>
# Update a memory
mem0 update <memory-id> "I switched to light mode"
# Delete a memory
mem0 delete <memory-id>
mem0 initInteractive setup wizard. Prompts for your API key and default user ID.
mem0 init
mem0 init --api-key m0-xxx --user-id alice
mem0 init --email [email protected]
If an existing configuration is detected, the CLI asks for confirmation before overwriting. Use --force to skip the prompt (useful in CI/CD).
mem0 init --api-key m0-xxx --user-id alice --force
| Flag | Description |
|---|---|
--api-key | API key (skip prompt) |
-u, --user-id | Default user ID (skip prompt) |
--email | Login via email verification code |
--code | Verification code (use with --email for non-interactive login) |
--force | Overwrite existing config without confirmation |
mem0 addAdd a memory from text, a JSON messages array, a file, or stdin.
mem0 add "I prefer dark mode" --user-id alice
mem0 add --file conversation.json --user-id alice
echo "Loves hiking on weekends" | mem0 add --user-id alice
| Flag | Description |
|---|---|
-u, --user-id | Scope to a user |
--agent-id | Scope to an agent |
--messages | Conversation messages as JSON |
-f, --file | Read messages from a JSON file |
-m, --metadata | Custom metadata as JSON |
--categories | Categories (JSON array or comma-separated) |
--graph / --no-graph | Enable or disable graph memory extraction |
-o, --output | Output format: text, json, quiet |
mem0 searchSearch memories using natural language.
mem0 search "dietary restrictions" --user-id alice
mem0 search "preferred tools" --user-id alice --output json --top-k 5
| Flag | Description |
|---|---|
-u, --user-id | Filter by user |
-k, --top-k | Number of results (default: 10) |
--threshold | Minimum similarity score (default: 0.3) |
--rerank | Enable reranking |
--keyword | Use keyword search instead of semantic |
--filter | Advanced filter expression (JSON) |
--graph / --no-graph | Enable or disable graph in search |
-o, --output | Output format: text, json, table |
mem0 listList memories with optional filters and pagination.
mem0 list --user-id alice
mem0 list --user-id alice --category preferences --output json
mem0 list --user-id alice --after 2024-01-01 --page-size 50
| Flag | Description |
|---|---|
-u, --user-id | Filter by user |
--page | Page number (default: 1) |
--page-size | Results per page (default: 100) |
--category | Filter by category |
--after | Created after date (YYYY-MM-DD) |
--before | Created before date (YYYY-MM-DD) |
-o, --output | Output format: text, json, table |
mem0 getRetrieve a specific memory by ID.
mem0 get 7b3c1a2e-4d5f-6789-abcd-ef0123456789
mem0 get 7b3c1a2e-4d5f-6789-abcd-ef0123456789 --output json
mem0 updateUpdate the text or metadata of an existing memory.
mem0 update <memory-id> "Updated preference text"
mem0 update <memory-id> --metadata '{"priority": "high"}'
echo "new text" | mem0 update <memory-id>
mem0 deleteDelete a single memory, all memories for a scope, or an entire entity.
# Delete a single memory
mem0 delete <memory-id>
# Delete all memories for a user
mem0 delete --all --user-id alice --force
# Delete all memories project-wide
mem0 delete --all --project --force
# Preview what would be deleted
mem0 delete --all --user-id alice --dry-run
| Flag | Description |
|---|---|
--all | Delete all memories matching scope filters |
--entity | Delete the entity and all its memories |
--project | With --all: delete all memories project-wide |
--dry-run | Preview without deleting |
--force | Skip confirmation prompt |
mem0 importBulk import memories from a JSON file.
mem0 import data.json --user-id alice
The file should be a JSON array where each item has a memory (or text or content) field and optional user_id, agent_id, and metadata fields.
mem0 configView or modify the local CLI configuration.
mem0 config show # Display current config (secrets redacted)
mem0 config get api_key # Get a specific value
mem0 config set user_id bob # Set a value
mem0 entityList or delete entities (users, agents, apps, runs).
mem0 entity list users
mem0 entity list agents --output json
mem0 entity delete --user-id alice --force
mem0 eventInspect background processing events created by async operations (e.g. bulk deletes, large add jobs).
# List recent events
mem0 event list
# Check the status of a specific event
mem0 event status <event-id>
| Flag | Description |
|---|---|
-o, --output | Output format: text, json |
mem0 statusVerify your API connection and display the current project.
mem0 status
mem0 versionPrint the CLI version.
mem0 version
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
mem0 --agent delete --all --user-id alice --force
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:
data: only the fields an agent needs (id, memory, score, etc.) — no internal API noise{"status": "error", "command": "...", "error": "..."} with a non-zero exit codeUse mem0 help --json to get the full command tree as JSON — useful for agents that need to self-discover available commands.
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) |
These flags are available on all commands:
| Flag | Description |
|---|---|
--json | Enable agent mode: structured JSON envelope output, no colors or spinners |
--agent | Alias for --json |
--api-key | Override the configured API key for this request |
--base-url | Override the configured API base URL for this request |
-o, --output | Set the output format |
| 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) |
Environment variables take precedence over values in the config file, which take precedence over defaults.
cd cli/python
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Run during development
python -m mem0_cli --help
mem0 add "test memory" --user-id alice
version in pyproject.tomlcli-v<version> (e.g. cli-v0.2.1)For a pre-release, use a beta version like 0.2.1b1 and check the pre-release checkbox.
Full documentation is available at docs.mem0.ai/platform/cli.
Apache-2.0