Docs

plori CLI

Install the CLI, complete browser login, run an agent, attach to a live session from the terminal, use JSON output in scripts, and keep API-key auth for CI.

The plori CLI creates and runs your cloud agents from a terminal or a script. It shares the same account, agents, and files as the web app and the MCP server.

Install and sign in

curl -fsSL https://plori.ai/install.sh | sh
plori login

The installer puts one static binary in ~/.local/bin. It needs no sudo and no Node, and it checks the download against the sha512 the npm registry publishes for that build. Re-run it to upgrade. It leaves your shell config alone, so if ~/.local/bin is not on your PATH yet, run the line the script prints (on macOS zsh, echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc && exec zsh) before plori login. On Windows, irm https://plori.ai/install.ps1 | iex installs to %LOCALAPPDATA%\plori\bin and adds it to your user PATH for you; open a new terminal afterwards. If you would rather go through npm, npm i -g @plori/cli installs the same binary.

plori login opens the email-OTP page in your browser. A new email creates an account; an existing email signs back in. The CLI returns once the browser completes the sign-in.

The browser flow requests the openid offline_access mcp scopes and writes the credentials to ~/.config/plori/config.json (or $XDG_CONFIG_HOME/plori/config.json), file mode 0600. Stored fields: the public OAuth client id, a short-lived access token, a rotating refresh token, their expiry, and the granted scopes. The CLI refreshes the session automatically. plori logout clears the stored credentials.

For CI or headless environments, create an API key at Dashboard → Settings → API keys:

plori login --key plori_sk_…
# or, without writing a config file
export PLORI_API_KEY=plori_sk_…

First agent and first run

plori create mate
plori run mate "Research this topic and save the result to work/report.md"

create gets or creates by name, so running it again reuses mate instead of making a duplicate. run waits for the reply by default. For longer work:

plori run mate "Run the full test suite" --no-wait
plori result mate <run-id> --wait
plori run mate "Build it and stream progress" --follow

Attach to a live session

plori attach mate

attach opens the agent's current session in your terminal: recent history, a prompt, output streaming as it arrives, and approvals answered in place. It is the same session the web app shows, so a turn sent from the terminal appears in an open browser tab live.

The argument is an agent name, an agent id, or a session id, so a session id copied out of the web app works on its own. --session <id> picks a specific session of an agent, --history <n> replays a different number of turns (20 by default, 0 for none, all for everything one request can carry, which stops at the newest 20,000 stored events), --read-only tails without a prompt, and --verbose also prints reasoning and tool results.

While attached, a line of text sends a turn, or steers the turn already running. Ctrl-C cancels that turn and a second press within two seconds leaves. Ctrl-D on an empty line, or /exit, detaches without stopping anything: the run keeps going on the server and you can attach again later. The slash commands are /sessions (list this agent's sessions), /new (start one), /model <slug> (change the model), /web (print this session's web address), /exit, and /help.

Approvals are answered with a single key: y or n, or a to say yes and stop being asked for that tool when the request carries a consent tool. A request for a value takes a line.

Attaching gives the agent nothing from your machine. The shell, the disk, and the files are the agent's own cloud environment, so nothing local is uploaded and nothing the agent writes appears in the directory you ran the command from.

Secret requests are read without echo and answered over the same connection, so a secret you type never appears on screen or in your shell history. If the terminal cannot hide the typing, attach refuses the secret and prints the web address to answer it at instead.

Scripts and automation

Every command accepts --json. Piping stdout switches to JSON automatically, so plori agents | jq . works without the flag. Progress and errors stay on stderr.

plori attach is the exception. It is a live stream rather than one result, so it always writes plain text, and it needs a terminal on both ends to show a prompt: redirect stdin or stdout and it becomes the same read-only tail --read-only asks for. That is why plori attach mate | tee session.log records a clean transcript instead of a prompt nobody can answer.

plori agents --json
plori credits --json
plori workflows list --json

Use plori schedule for one future agent turn and plori workflows for standing automations. Run plori help for the complete command list.

Credits

plori credits shows the balance and prints a billing link when credits run low. Any command refused with HTTP 402 prints a billing link too. See pricing for plans and one-time credit packs.