Your phone, for your AI agents.
Give Claude, Hermes, Codex, Cursor or any MCP client your phone's SMS, contacts and call log, and let them text on your behalf, through a relay that only ever sees ciphertext.
MIT licensed · self-hosted on Cloudflare's free tier · no account, no root, no open ports
Screens are synthetic renderings of the real app with invented names, fictional numbers and made-up messages.
Angaros was the royal courier of the Achaemenid Persians. The Greeks borrowed the word as angelos, messenger, the root of angel. “Neither snow nor rain nor heat nor gloom of night stays these couriers,” wrote Herodotus. This one carries your messages, and cannot read them.
What your agent gets
Every message, searchable
Full SMS history in a local SQLite with full-text search that normalises Persian, Arabic and English.
One-time codes
otp_wait blocks until a new code arrives. No more reading digits off the lock screen.
Accountable sending
Dry runs, idempotency keys, and a hash-chained log of every SMS sent, on both devices.
Contacts and calls
Names resolved everywhere, missed calls, per-person history.
Automations
YAML rules on SMS, calls, sends or a schedule: webhooks, notes, replies, LLM digests.
Four ways in
22 MCP tools, a JSON CLI, a Python SDK and a local REST + SSE API.
Quick start
Deploy your relay
pip install "git+https://github.com/Mahdi-mortazavi/angaros#subdirectory=pc"
git clone https://github.com/Mahdi-mortazavi/angaros && cd angaros/worker
npx wrangler@4 login
npx wrangler@4 d1 create angaros # paste database_id into wrangler.toml
npx wrangler@4 d1 migrations apply angaros --remote
angaros master | npx wrangler@4 secret put PAIR_MASTER
npx wrangler@4 deployInstall the app and pair
angaros pair --worker https://angaros.<you>.workers.dev # shows a QR code
Install the APK from the latest release, grant the permissions, allow background use, scan the code.
Connect your agent
claude mcp add phone --scope user -- angaros-mcp # Claude Code
hermes mcp add phone --command angaros-mcp # Hermes
Codex, Cursor, Gemini CLI, OpenCode and HTTP clients: docs/AGENTS.md.
How it works
1 · Sealed on the phone
AES-256-GCM with a key that exists only on your phone and your computer, bound to device and direction.
2 · A blind mailbox
Your Cloudflare Worker stores ciphertext for at most 7 days. About 100 lines; it cannot decrypt.
3 · Opened on your computer
Decrypted into a local database your agents query. Both ends poll outward: no open ports.
Security, plainly
| The relay sees | a device id, encrypted blobs, their sizes and times, IP addresses |
|---|---|
| The relay never sees | message text, numbers, names, contacts, which command was sent |
| Prompt injection | SMS text is marked untrusted, never pasted into shell commands or LLM prompts; agent-added rules cannot run programs or send SMS unless you allow it |
| Sharp edges | the key is not hardware-backed; phone.db is plaintext on your disk; tested on one phone so far |
Full threat model: SECURITY.md · measured performance: docs/performance.md