reply is the official command-line interface for
Reply.io. Sign in once and every request runs as you. Today it covers authentication and
identity, reply api gives you authenticated access to the full
v3 API — no HTTP client, no header wrangling — and
reply skills installs Reply’s agent skill packs into your AI assistants. Higher-level
commands for sequences, contacts, and the inbox are on the way.
Install
Authenticate
Log in through your browser — no key to copy, no key to rotate:Credential precedence
Resolved in strict order, first hit wins:--api-key <key>flagREPLY_API_KEYenvironment variable- the stored credential from
reply auth login
There is no
.env file lookup — export REPLY_API_KEY yourself, or store a credential with
reply auth login.Where credentials live
Credentials are stored as JSON in~/.config/reply (%APPDATA%\reply on Windows), written 0600
inside a 0700 directory — the same plaintext-file model as gh, aws, and az. OAuth tokens
refresh automatically; if a refresh fails the record is cleared and you’re asked to log in again.
Tokens and keys are redacted in every command’s output, --verbose included.
Profiles — more than one Reply.io user
A profile is a signed-in account. Profiles let you keep several Reply.io users authenticated at once and switch between them, each with its own stored credential. Most people never need one: the default profile is used until you create another. Name them however you like — account emails work well:--profile → REPLY_PROFILE → the profile set with
profile use → the built-in default.
Manage them after creation:
Teams
A profile can pin a team (workspace). The pinned team is sent as theX-TEAM-ID header, with
precedence --team-id → REPLY_TEAM_ID → the profile’s team. The team command reads and writes
the active profile’s team:
TEAM_REQUIRED
error listing your teams — run reply team use <id> to pin one, or pass --team-id <id> for a
single command.
Raw API access
reply api is a raw, authenticated passthrough to any v3 endpoint — the escape hatch for
everything the CLI has no dedicated command for yet.
Use the path exactly as it appears in the API reference, starting
with /v3; the query string goes in the path. A --body switches the method to POST (override
with --method), and it accepts inline JSON, @file, or - for stdin.
{ "code": <status>, "data": <body> } and exits non-zero on HTTP >= 400. See
Using the CLI from agents & scripts for the full machine contract.
Skills
Reply’s outbound expertise ships as three markdown skill packs in reply-skills.reply skills detects the AI assistants
on your machine and installs the packs into each one, resolving dependencies itself:
Naming no pack installs all three. Dependencies come along automatically, so
adapter pulls core:
SKILL.md hosts receive the skills as copied files. Add
--json for a machine-readable report and --dry-run to see the plan without changing anything.
“Not yet” means that assistant’s skills directory comes from its own documentation and has not
been confirmed by a verification run — the install works, but Reply cannot promise the assistant
reads from where the files were put. Those hosts are marked
(paths not yet verified) in the
report and carry "verified": false in --json.reply skills remove with no pack to remove everything.
Installing skills is not the same as connecting Reply:
reply-adapter needs a Reply.io credential
(reply auth login) to do anything. See Reply Skills.Command reference
Runreply <command> --help for the exact flags of any command — the installed help always matches
your version.
reply auth
reply profile
reply team
reply api
reply skills
Pack names accept aliases:
core, adapter, runtime. These flags apply to all four subcommands:
Global flags
Environment variables
Why a CLI when there’s REST and MCP?
- Authentication is the hard part, and it’s solved here. Browser login, token refresh, multiple
accounts, and the team header are handled for you —
reply apiis acurlthat is already authenticated as the right user in the right workspace. - Coding agents are exceptionally good at shell commands. They get composability — pipes,
jq, cron — without writing an HTTP client. See Using the CLI from agents. - Scriptable one-offs. Terminal and CI access to the API for work that doesn’t warrant a real integration.
What isn’t in the CLI yet
There are no dedicated commands for sequences, contacts, the inbox, or reporting yet — reach them throughreply api today, or use the interface that fits:
Versioning
reply-cli follows semantic versioning, with versions derived from
Conventional Commits.
Pre-1.0. While the version is
0.x the CLI is still stabilizing, so — per semver’s 0.x rule —
a minor release (0.x.0) may contain breaking changes. Pin an exact version if you need stability
before 1.0.0.1.0.0 onward, a major bump is required to remove or rename a command, flag, or argument;
change the meaning of an exit code; change the --json / --pretty output shape; change the config
format or a REPLY_* environment variable; or raise the minimum Node.js version. New commands, new
optional flags, and new fields in --json output are additive and ship in minor releases.
Links
- Package: npmjs.com/package/reply-cli
- Source and issues: github.com/reply-team/reply-cli
- Next: Using the CLI from agents & scripts