
The memo binary has two personalities. Run it with no arguments (or with -p) on an interactive terminal and it opens the terminal REPL — see the Development Guide for that. Run it with one of the six verbs below as the first argument and it instead runs a single management command and exits — this is what makes a self-hosted install fully manageable over plain SSH, with no dashboard or raw curl against the REST API required.
memo <verb> <subcommand> [args] [flags]
Every command in remote/provider/agent/model accepts [--port N] (default 8090) and [--token T] to talk to a specific backend. If that backend was started with --lan, every request needs a credential — pass --token with a valid device/session token, or omit it and get prompted where the flow supports it (e.g. remote login).
memo config — Read/Write config.yamlmemo config get <key>
memo config set <key> <value>
memo config get llama.port
memo config set llama.port 8081
memo remote — Auth Mode & Device Managementmemo remote status
memo remote list-devices
memo remote add-device <name>
memo remote revoke-device <id>
memo remote rotate-token <id>
memo remote set-mode <none|token|password|token_password> [--username X] [--password Y]
memo remote login --username X [--password Y]
If --password is omitted from set-mode/login, it's prompted for interactively, hidden — never left visible in ps output or shell history. See Self-Hosting → Authentication Modes for what each mode means. rotate-token revokes a device and re-adds it under the same name in one step, for a token that may have leaked and needs to stop working immediately.
memo service — systemd --user Service (Linux only)memo service install [--port N] [--lan]
memo service uninstall
memo service status
memo service restart
These all wrap systemctl --user commands — no root/sudo needed. If you run systemctl by hand instead of through memo, include --user yourself, or you'll hit a different (system-wide, polkit) authorization path and see Unit memo.service not found.
memo provider — External LLM Providersmemo provider list
memo provider add --type T --name N [--model M] [--base-url URL] [--key K] [--priority N] [--enable=false] [--activate]
memo provider set-active <name>
memo provider active
If --key is omitted from add, it's prompted for interactively, hidden.
memo agent — Tool-Use Modememo agent status
memo agent enable
memo agent disable
memo agent auto-permission status|on|off
With auto-permission on, no tool call ever asks for approval — use carefully, since the agent can then act on the filesystem/shell with zero human review.
memo model — Local Model Search, Download & Startmemo model list
memo model status
memo model search <query>
memo model files <repo>
memo model download <repo> <filename> [--size N]
memo model start <path> [--ctx N] [--model-port N] [--gpu N]
memo model start-embedding <path> [--gpu N]
Example flow — set up a local embedding model on a headless box with no GUI at all:
memo model search nomic-embed-text
memo model files nomic-ai/nomic-embed-text-v1.5-GGUF
memo model download nomic-ai/nomic-embed-text-v1.5-GGUF nomic-embed-text-v1.5.Q4_K_M.gguf --size 84106624
memo model start-embedding ~/.memo/data/models/nomic-embed-text-v1.5.Q4_K_M.gguf
These print or do one thing and exit, without starting a session or touching the backend lifecycle: --kill, --help, --version, --status, --gui, --github, --bugreport, --docs.
Run any subcommand group with no arguments to see its own usage text. For everything Settings-equivalent that isn't yet a CLI command (starting/stopping a Tailscale or ngrok tunnel), see Self-Hosting → Known Limitations.