Back to Mem0

CLI

docs/platform/cli.mdx

2.0.1516.0 KB
Original Source

The mem0 CLI lets you add, search, list, update, and delete memories directly from the terminal. It works with the Mem0 Platform API and is available as both an npm package and a Python package.

Both implementations provide identical behavior: same commands, same options, same output formats.

Running it inside an agent? Put --agent before any command to get clean JSON instead of human output. See Use with AI agents.

Installation

<CodeGroup> ```bash npm npm install -g @mem0/cli ```
bash
pip install mem0-cli
</CodeGroup> <Tip> **Looking for Agent Mode signup?** See [Sign up as an agent](/platform/agent-signup): install, signup, first memory in four commands. </Tip>

Authentication

Run the interactive setup wizard to configure your API key:

bash
mem0 init

This prompts for your API key and a default user ID, validates the connection, and saves the configuration locally.

For CI/CD or non-interactive environments, pass both values as flags:

bash
mem0 init --api-key m0-xxx --user-id alice

You can also set your API key via environment variable:

bash
export MEM0_API_KEY="m0-xxx"

Quick start

bash
# 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 prefer light mode now"

# Delete a memory
mem0 delete <memory-id>

Commands

mem0 init

Interactive setup wizard. Prompts for your API key and default user ID.

bash
mem0 init
mem0 init --api-key m0-xxx --user-id alice
mem0 init --email [email protected]

If an existing configuration is detected, the CLI will ask for confirmation before overwriting. Use --force to skip the prompt (useful in CI/CD pipelines).

bash
mem0 init --api-key m0-xxx --user-id alice --force
FlagDescription
--api-keyAPI key (skip prompt)
-u, --user-idDefault user ID (skip prompt)
--emailLogin via email verification code
--codeVerification code (use with --email for non-interactive login)
--agentCreate an Agent Mode account, with no email needed
--agent-callerName the agent running the command, such as claude-code
--forceOverwrite existing config without confirmation
<Note> AI agents should use `mem0 init --agent`: see [Sign up as an agent](/platform/agent-signup). </Note>

mem0 add

Add a memory from text, a JSON messages array, a file, or stdin.

bash
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
FlagDescription
-u, --user-idScope to a user
--agent-idScope to an agent
--app-idScope to an app
--run-idScope to a single run or session
--messagesConversation messages as JSON
-f, --fileRead messages from a JSON file
-m, --metadataCustom metadata as JSON
--categoriesCategories (JSON array or comma-separated)
--expiresExpiration date, after which the memory stops being returned
--immutableStore the memory so it can never be updated or overwritten
--no-inferStore the text exactly as given, skipping fact extraction
-o, --outputOutput format: text, json, quiet

Search memories using natural language.

bash
mem0 search "dietary restrictions" --user-id alice
mem0 search "preferred tools" --user-id alice --output json --top-k 5
FlagDescription
-u, --user-idFilter by user
--agent-idFilter by agent
--app-idFilter by app
--run-idFilter by run or session
-k, --top-kNumber of results (default: 10). --limit does the same thing
--thresholdMinimum similarity score (default: 0.3)
--rerankEnable reranking
--keywordUse keyword search instead of semantic
--filterAdvanced filter expression (JSON)
--fieldsReturn only the named fields
-o, --outputOutput format: text, json, table

mem0 list

List memories with optional filters and pagination.

bash
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
FlagDescription
-u, --user-idFilter by user
--agent-idFilter by agent
--app-idFilter by app
--run-idFilter by run or session
--pagePage number (default: 1)
--page-sizeResults per page (default: 100)
--categoryFilter by category
--afterCreated after date (YYYY-MM-DD)
--beforeCreated before date (YYYY-MM-DD)
-o, --outputOutput format: text, json, table

mem0 get

Retrieve a specific memory by ID.

bash
mem0 get 7b3c1a2e-4d5f-6789-abcd-ef0123456789
mem0 get 7b3c1a2e-4d5f-6789-abcd-ef0123456789 --output json
FlagDescription
-o, --outputOutput format: text, json

mem0 update

Update the text or metadata of an existing memory.

bash
mem0 update <memory-id> "Updated preference text"
mem0 update <memory-id> --metadata '{"priority": "high"}'
echo "new text" | mem0 update <memory-id>
FlagDescription
-m, --metadataReplace the memory's metadata with this JSON
-o, --outputOutput format: text, json, quiet

mem0 delete

Delete a single memory, all memories for a scope, or an entire entity.

bash
# 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
FlagDescription
-u, --user-idScope the deletion to a user
--agent-idScope the deletion to an agent
--app-idScope the deletion to an app
--run-idScope the deletion to a run or session
--allDelete all memories matching scope filters
--entityDelete the entity and all its memories
--projectWith --all: delete all memories project-wide
--dry-runPreview without deleting
--forceSkip confirmation prompt

mem0 import

Bulk import memories from a JSON file.

bash
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.

FlagDescription
-u, --user-idDefault user for items that do not set their own
--agent-idDefault agent for items that do not set their own
-o, --outputOutput format: text, json

mem0 config

View or modify the local CLI configuration.

bash
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 entity

List or delete entities (users, agents, apps, runs).

bash
mem0 entity list users
mem0 entity list agents --output json
mem0 entity delete --user-id alice --force

Deleting an entity removes it and every memory belonging to it. Preview first with --dry-run.

FlagDescription
-u, --user-idThe user to delete
--agent-idThe agent to delete
--app-idThe app to delete
--run-idThe run or session to delete
--dry-runShow what would be deleted, without deleting it
--forceSkip confirmation prompt
-o, --outputOutput format: text, json

mem0 event

Inspect background processing events created by async operations (e.g. bulk deletes, large add jobs).

bash
# List recent events
mem0 event list

# Check the status of a specific event
mem0 event status <event-id>
FlagDescription
-o, --outputOutput format: text, json

mem0 status

Verify your API connection and display the current project.

bash
mem0 status

mem0 whoami

Print the identity the CLI is currently using. After mem0 init --agent, the server issues an identifier (default_user_id, for example user_a1b2c3d4e5f6) and the CLI stores it in ~/.mem0/config.json. That value is the agent's stable identity across runs, and it is the row key on the AGENTRUSH leaderboard.

Use this instead of parsing the config file by hand:

bash
mem0 whoami
# Your AGENTRUSH identifier:  user_a1b2c3d4e5f6
# Find your row at https://mem0.ai/agentrush

No network call. The command exits with code 1 if no default_user_id is configured yet. In that case, run mem0 init --agent first.

mem0 identify

Attach an agent name to an account created with mem0 init --agent, if you did not pass --agent-caller at the time. It keeps the same API key and only fills in the name, so it is safe to run more than once. See Sign up as an agent.

mem0 help

Print the command tree. Adding --json returns the whole tree as structured data, so an agent can discover the available commands and options for itself.

Output formats

Most commands take -o, --output to control how results are displayed. Not every command accepts every format:

FormatDescriptionAccepted by
textHuman-readable output with colors and formatting. The default everywhere except listevery command
jsonStructured JSON, suitable for piping to jqevery command
tableTabular format, and the default for listsearch, list
quietMinimal output: just IDs or status codesadd, update, delete

Passing a format a command does not accept is an error, so check the command's own flag table above.

There is no agent value for --output. Agent mode is turned on by the global --json/--agent flag placed before the command name, and it overrides --output. See Use with AI agents.

The exact JSON shape depends on the command. search returns a bare array of memories, while list returns an envelope object with the memories under data:

bash
# search: results are the top-level array
mem0 search "user preferences" --user-id alice --output json | jq '.[].memory'

# list: results are nested under .data
mem0 list --user-id alice --output json | jq '.data[].memory'

Agent mode always returns the envelope, whichever command you run, so .data[] works everywhere:

bash
mem0 --agent search "user preferences" --user-id alice | jq '.data[].memory'

Use with AI agents

The CLI is purpose-built for use inside AI agent tool loops. Pass --agent or --json as a global flag on any command to activate agent mode:

  • Every command outputs a consistent JSON envelope: {"status", "command", "duration_ms", "scope", "count", "data"}
  • The data field contains only the fields that matter: IDs, memory text, scores, categories. Noisy API fields are stripped.
  • All human-readable output is suppressed: no spinners, no colors, no banners.
  • Errors are returned as JSON to stdout with a non-zero exit code, so your agent can catch them the same way as successes.
bash
# Drop --agent on any command and get clean, parseable JSON
mem0 --agent search "response preferences" --user-id user-42
mem0 --agent add "User prefers concise responses" --user-id user-42
mem0 --agent list --user-id user-42
mem0 --agent delete --all --user-id user-42 --force
<CodeGroup> ```json Output: mem0 --agent search "dark mode" --user-id alice { "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"] }, { "id": "def-456", "memory": "User uses vim keybindings", "score": 0.81, "created_at": "2026-01-10", "categories": ["tools"] } ] } ```
json
{
  "status": "success",
  "command": "add",
  "duration_ms": 210,
  "data": [
    { "id": "ghi-789", "memory": "Likes concise answers", "event": "ADD" }
  ]
}
</CodeGroup>

Two other agent-friendly features:

  • --output json returns structured data without sanitization, useful when you want the full raw API response
  • mem0 help --json returns the complete command tree as JSON, so agents can self-discover available commands and options

For non-interactive environments (CI, agent runtimes), set credentials via mem0 init --api-key m0-xxx --user-id alice --force or the MEM0_API_KEY environment variable.

Errors and exit codes

Every command exits 0 when it succeeds and 1 when it fails, so if mem0 ...; then works as you would expect in a script. In agent mode (--json or --agent), failures still print a JSON envelope to stdout alongside the non-zero exit, so you can parse successes and failures the same way.

Errors you are most likely to hit:

MessageCauseFix
Authentication failedThe API key is missing, wrong, or revokedRun mem0 init again, or get a new key from the dashboard
No content provided. Pass text, --messages, --file, or pipe via stdin.mem0 add was called with nothing to storeGive it text, a file, or piped input
Invalid JSON in --messages / --metadata / --filterThe JSON value would not parseCheck the quoting, especially inside shell single quotes
Invalid date format for --expires. Use YYYY-MM-DD--expires got something other than a dateUse YYYY-MM-DD, and make sure the date is in the future
--threshold must be between 0.0 and 1.0.Score threshold out of rangePass a value between 0.0 and 1.0

Run mem0 status to check whether the CLI can reach the API and which project the key belongs to. It reports the connection state, the API URL, and any error.

Environment variables

VariableDescription
MEM0_API_KEYAPI key (overrides config file)
MEM0_BASE_URLAPI base URL
MEM0_USER_IDDefault user ID
MEM0_AGENT_IDDefault agent ID
MEM0_APP_IDDefault app ID
MEM0_RUN_IDDefault run ID
MEM0_TELEMETRYSet to false to turn off usage telemetry. On by default

Environment variables take precedence over values in the config file, which take precedence over defaults.

Global flags

These two flags belong to mem0 itself, so they go before the command name:

FlagDescription
--jsonEnable agent mode: structured JSON envelope output, no colors or spinners
--agentAlias for --json
--versionPrint the CLI version and exit
<Warning> On `init` only, `--agent` means something different. `mem0 init --agent` creates an Agent Mode account (see [Sign up as an agent](/platform/agent-signup)); it does not switch the output to JSON. To get JSON from `init`, put the flag first: `mem0 --json init`. </Warning>

The following flags are accepted by most commands, but they belong to the command, so they go after the command name:

FlagDescription
--api-keyOverride the configured API key for this request
--base-urlOverride the configured API base URL for this request
-o, --outputSet the output format

What's next

<CardGroup cols={3}> <Card title="Quickstart" icon="bolt" href="/platform/quickstart"> Store your first memory in under five minutes using the SDK or CLI </Card> <Card title="Memory operations" icon="database" href="/core-concepts/memory-operations/add"> Learn about add, search, update, and delete operations in depth </Card> <Card title="API reference" icon="code" href="/api-reference/memory/add-memories"> See the complete REST API documentation </Card> </CardGroup>