Command Reference

Authentication

CommandDescription
ravi auth loginDevice-code login (RFC 8628) against https://api.ravi.app
ravi auth logoutClear stored credentials
ravi auth statusShow current authentication status
ravi auth status

Identity management

CommandDescription
ravi identity listList all Identities
ravi identity create --name "X"Create a new Identity
ravi identity use <uuid>Set this machine’s active identity
# Create an identity and set it as this machine's active identity
ravi identity create --name "research-agent"
ravi identity use <identity-uuid>

The CLI is one identity per machine. ravi identity use writes the shared ~/.ravi/config.json active identity. It is not how you run many agents. Multiple agents on one host must use the HTTP API with per-identity ravi_id_... keys (or the Cursor Connect plugin).

Identity info

CommandDescription
ravi get emailGet the active Identity’s email address
ravi get phoneGet the active Identity’s phone number
EMAIL=$(ravi get email | jq -r '.email')
PHONE=$(ravi get phone | jq -r '.phone_number')

Inbox (grouped)

Messages grouped by conversation (SMS) or thread (email).

CommandDescription
ravi inbox emailList email threads
ravi inbox email <thread-id>View a specific email thread
ravi inbox email --unreadEmail threads with unread messages
ravi inbox smsList SMS conversations
ravi inbox sms <conversation-id>View a specific SMS conversation
ravi inbox sms --unreadSMS conversations with unread messages
# Get unread SMS previews
ravi inbox sms --unread | jq -r '.[].preview'

# Read a specific email thread
ravi inbox email <thread_id> | jq -r '.messages[].text_content'

Messages (flat)

Individual messages without grouping.

CommandDescription
ravi message emailList all email messages
ravi message email <message-id>View a specific email message
ravi message email --unreadUnread email messages only
ravi message smsList all SMS messages
ravi message sms <message-id>View a specific SMS message
ravi message sms --unreadUnread SMS messages only

SMS sending

CommandDescription
ravi sms sendSend an SMS from the active Identity’s phone number

Send flags:

FlagRequiredDescription
--toYesRecipient phone number in E.164 format (e.g. +15551234567)
--bodyYesMessage text (plain text only, max 1600 characters)
# Send a one-time passcode via SMS
ravi sms send --to "+15551234567" --body "Your code is 482910"

# Notify a human approver from a setup script
ravi sms send \
  --to "${APPROVER_PHONE}" \
  --body "Agent workspace ${WORKSPACE_NAME} is ready at ${WORKSPACE_URL}"

:::note ravi sms send uses this machine’s active identity phone number. ravi identity use changes that single active identity. For multiple agents on one host, use the HTTP API with per-identity ravi_id_... keys (or the Cursor Connect plugin). :::

Calls

CommandDescription
ravi call --to <e164>Place an outbound call from the active Identity’s phone number
ravi call listList calls
ravi call transcript <call-id>Show a call’s transcript
ravi call hangup <call-id>Hang up an active call
# Place a call and capture the call id
CALL_ID=$(ravi call --to "+15551234567" | jq -r '.uuid')

# Fetch the transcript once the call ends
ravi call transcript "$CALL_ID"

Email sending

CommandDescription
ravi email composeCompose and send a new email
ravi email reply <message-id>Reply to sender only
ravi email reply-all <message-id>Reply to all recipients
ravi email forward <message-id>Forward an email

Compose flags:

FlagRequiredDescription
--toYesRecipient email address
--subjectYesEmail subject line
--bodyYesEmail body (HTML supported)
--ccNoCC recipients (comma-separated)
--bccNoBCC recipients (comma-separated)
--attachNoFile to attach (repeatable)
ravi email compose \
  --to "[email protected]" \
  --subject "Report" \
  --body "<p>See attached.</p>" \
  --attach report.pdf

Reply flags: --body (required), --cc, --bcc, --attach (optional)

Passwords

CommandDescription
ravi passwords listList all stored passwords
ravi passwords get <uuid>Show a password entry
ravi passwords create <domain>Create a new entry
ravi passwords update <uuid>Update a password entry
ravi passwords delete <uuid>Delete a password entry
ravi passwords generateGenerate a random password without storing

Create flags: --username, --password, --generate, --length (default: 16), --no-special, --no-digits, --exclude-chars, --notes

# Auto-generate a password for a domain
ravi passwords create github.com --username "[email protected]"

# Generate without storing
ravi passwords generate --length 32

Secrets

CommandDescription
ravi secrets set <key> <value>Store a secret (creates or updates)
ravi secrets get <key>Retrieve a secret by key
ravi secrets listList all secret keys
ravi secrets delete <uuid>Delete a secret by UUID
ravi secrets set OPENAI_API_KEY "sk-abc123..."
ravi secrets get OPENAI_API_KEY | jq -r '.value'
ravi secrets list | jq -r '.[].key'

Feedback

CommandDescription
ravi feedback "<message>"Send feedback to the Ravi team
ravi feedback "Love the CLI, but would like custom domains"

Global flags

FlagDescription
--humanOutput in human-readable format. JSON is the default.
--identity <uuid>Target one identity for a single command (messages, contacts, passwords, secrets, calls, events). When omitted, this machine’s active identity scopes the request. Not a multi-agent runtime.
--helpShow help for any command
--versionShow version information

The API key is an auth fence — it defines what you’re allowed to touch. The caller chooses the identity. A management key with --identity <uuid> targets one identity; an identity-scoped key is already fenced to its identity, and --identity must match it.