Skip to main content
anona is the command line for Anona Memory. It does three jobs:
  • Use memory from a shell. anona record, anona retrieve and anona reason are the same three calls as the API, with --json output and stable exit codes, so a script, a CI job or an agent without MCP can use memory directly.
  • Manage what is stored. Spaces, memories, uploaded documents, background jobs and per-space settings, each one command.
  • Connect an MCP client with no API key. anona login signs you in once in a browser, and anona mcp is the stdio server your client launches.

CLI, MCP or SDK

The CLI is a thin wrapper over the REST API: every data command is one API call (or a short sequence, such as polling a job), and a flag you do not give is left out of the request rather than sent as a default.

Install

The -U matters. pip install anona over an existing copy reports success and leaves the old version in place, so a machine that installed the CLI before a command existed keeps a binary without it, and the command then fails with invalid choice: '<command>', which reads like it was never real. anona --help lists what your copy actually has, and anona --version prints its version. If pip answers error: externally-managed-environment, it is refusing to write to a system Python, which Debian, Ubuntu and Homebrew all do by default. Use either of these instead:
pip also suggests --break-system-packages, and it does work (pip install -U --break-system-packages anona). It writes into the Python your OS maintains, so prefer either command above when you have the choice. If you have Node and no Python, the JavaScript package also installs a binary called anona, with no runtime dependencies:
Both packages install a binary called anona. With both installed you get whichever comes first on your PATH. That is harmless: they share ~/.anona/credentials.json (MCP) and ~/.anona/cli-credentials.json (the command line), and the same locks, so a profile started with one can be claimed with the other, and a Python and a Node anona mcp refreshing at the same instant take turns rather than both spending the refresh token. A client configured with anona mcp keeps working if you uninstall one package only if the other is still on PATH.

First run

anona on its own, with no arguments, prints where to start and exits 0: how to get a credential (anona start, anona login, anona status), the three memory commands, and anona guide as the full reference. It reads no credential and sends nothing. anona --help ends with the same pointer to anona guide.
Only the empty command line does this. A global option with no command after it, such as anona --quiet, is still a usage error (exit 2), since a script wrote it. Older copies answer a bare anona with the following arguments are required: command and exit 2.

What each package has

The pip package is the reference implementation. The npm package is being brought to parity with it; until then, check this table before you rely on a command from npx @anona-labs/memory. A version in the table is the first release of that package with the command. The command pages mark each command the same way. anona --help on your own copy is the final word.

Where things are stored

Everything the CLI keeps is under ~/.anona/ (or ~/.anona/profiles/NAME/ for a named profile): All three are mode 600. No command prints a whole key or token.

Next

Sign in & credentials

API key, anona login, temporary profiles, and which one wins.

Record, retrieve, reason

The three memory calls and every flag they take.

Scripting & automation

--json, exit codes, retries, waiting on jobs, batch files.

For AI agents

anona guide, the anona-cli skill, and when to use MCP instead.