Introduction
What is Ravi?
Ravi is an identity provider for AI agents. One API call creates an Identity — a coherent online persona an agent can use to communicate, store credentials, and authenticate with services.
:::caution[The problem Ravi solves] Without Ravi, your agents run as you. Same email address, same phone number, same credentials. That creates three concrete problems:
- Security exposure — your agent has access to every email you’ve ever received, every service you’re logged into
- Broken isolation — you can’t tell which action came from you vs. the agent; audit logs are meaningless
- Blocked verification flows — services send OTPs and verification emails to a real inbox; agents can’t intercept them from your Gmail without granting full account access
Ravi gives each agent its own email, its own phone number, and its own credential vault — completely separate from yours. :::
Where do you want to go?
| Goal | Start here |
|---|---|
| Get a working agent in 5 minutes | Quick Start |
| Run multiple agents in parallel | Multi-Agent Setup |
| Use Ravi without a GUI (headless / CI / Docker) | Authentication → CI setup |
| Understand what an Identity actually is | Core Concepts → Identities |
| Find a specific CLI command | CLI Reference |
| Add Ravi to an existing orchestrator or framework | Build an Integration |
| Integrate with a named tool | Integrations |
What you get
Each Identity bundles everything an agent needs:
| Capability | How it works |
|---|---|
| Auto-generated address per Identity — send, receive, and thread conversations | |
| Phone & SMS | Dedicated phone number for receiving verification codes and SMS |
| Credential vault | E2E-encrypted password storage per Identity (zero-knowledge) |
| Secret vault | E2E-encrypted key-value store for API keys and environment variables |
| TOTP | Built-in 2FA code generation for services that support authenticator apps |
The core abstraction
An Identity is not an Agent. An agent is the software; an Identity is the persona it wears. One agent can have multiple identities. One identity can be handed between agents. They’re separate concepts.
Think of it like a SIM card: the agent is the phone, and the Identity is the SIM. You can move a SIM between phones. Multiple phones can share the same account but each gets its own SIM with its own number, inbox, and stored contacts. If you burn the phone (delete the agent), the SIM (Identity) and everything on it can survive.
For developers with an AWS background: same idea as IAM roles vs. the applications that assume them — the Identity is the role, the agent is the application.
Identity
├── Email address (auto-generated, receives real email)
├── Phone number (receives SMS, OTPs)
├── Credential vault (E2E-encrypted username/password/notes per service)
├── Secret vault (E2E-encrypted key-value secrets)
└── TOTP secrets (generates 2FA codes for enrolled services)
Integrating into an existing agent framework?
If you’re adding Ravi to an existing orchestrator, harness, or framework (rather than building from scratch), the fastest path is the machine-readable spec:
curl https://docs.ravi.app/llms.txt
/llms.txt covers every CLI command, API endpoint, environment variable, parallel-agent pattern, and common error in a single flat file — readable by both humans and AI coding agents. The Build an Integration guide walks through the four steps: provision an identity, use it in a workflow, retrieve credentials, and handle failures.
Framework integrations don’t require the CLI at all — see TypeScript REST API, Python & Production Patterns, and the MCP server for tool-call-based access.
Why not existing tools?
| Approach | Problem |
|---|---|
| Share your personal accounts | Security risk — agent sees all your email, credentials exposed |
| 1Password for agents | Requires desktop app, biometric gates, tmux hacks — architecturally broken for autonomous operation |
| Plain text credentials | Insecure — credentials stored on disk in the clear |
| Email-only services | No credential storage, no 2FA — only solves part of the problem |
Ravi is API-native. Two environment variables, no desktop app, no human-in-the-loop. Your agent runs autonomously.
See it in action
Create an Identity in one command:
ravi identity create --name "my-agent" --json
{
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "my-agent",
"inbox": "my-agent@in.ravi.app",
"phone": "+15559876543"
}
Your agent now has a real email address and phone number. Use them to sign up for services, receive OTP codes, and send email — all from an isolated Identity that doesn’t touch your personal accounts.
# Retrieve credentials at runtime
EMAIL=$(ravi get email --json | jq -r '.email')
PHONE=$(ravi get phone --json | jq -r '.phone_number')
Works anywhere — including headless. Ravi is designed for autonomous operation: no desktop app, no browser required at runtime. Login uses a device-code flow you complete once; after that, all CLI commands run without user interaction. This makes Ravi safe to use in CI pipelines, Docker containers, background agent processes, and remote servers.
Next steps
- Install the CLI and create your first Identity
- Quick Start — sign up for a service in under 5 minutes
- Build an Integration — framework integration in 4 steps
- Core Concepts — understand Identities, email, phone, and the credential vault
/llms.txt— machine-readable spec for AI coding agents