Your coding agent. Your personal assistant.
Your personal assistant on WhatsApp and Telegram, built on the coding agent CLI you already know and trust. It runs on your own machine, with your tools and your subscription, and adds no model of its own.
$ curl -fsSL https://useangelia.com/install | shIt checks the release's signature, then a wizard pairs your first chat. To keep Angelia running after you close the terminal: angelia service install. Read the script
Or with npm: npm install -g --ignore-scripts angelia-gateway, then angelia init.
Alpha · macOS, Node 22.23.4+, 24.22.1+ or 26.12.1+ · Chat through a Telegram bot, or a second WhatsApp number, not your own (why). How it compares.
src/date.ts. Apply it?npm testReply
yes 6b480a6f or no 6b480a6ffix/dst.See it
From one line to your first message.
The install line, the signature check, the setup wizard and the first reply. 48 seconds, sped up. Real setup text and a real Claude Code session.
Why
Two ways people use it.
Keep working away from the desk.
Ask why the build failed from the train. Approve the fix from the couch. Start at your desk, carry on from your phone: type /angelia-handoff in a terminal session to move it to the chat. Back at the desk, /status in the chat gives you the line that opens it there again.
Turn it into a personal assistant.
Give each part of your life its own chat and its own folder: family, money, a side project. Each one gets its own instructions, memory and permissions.
How it works
One chat, one folder.
Every chat gets its own folder and its own session. One YAML file says which is which, and the setup wizard writes it for you.
Install and pair.
Run the installer, pick your CLI, send the bot a message. That chat is now connected.
Point it at a folder.
The agent opens in that folder and uses what it finds there: instructions, settings, MCP servers. Exactly like in your terminal.
Talk to it.
Text, voice notes, photos, files. Before anything risky, the agent asks you in the chat.
# routing.yaml (example values) profiles: coding: { cwd: ~/.angelia/workspace/profiles/coding, shell: true } family: { cwd: ~/.angelia/workspace/profiles/family, sandbox: true } routes: - { platform: telegram, chat: "123456789", profile: coding } - { platform: whatsapp, chat: "120363000000000000@g.us", profile: family, owners: ["15551234567"] } # angelia init writes the first route. # With onboarding on, a new chat adds its own.
Security
Safe by default. Private by design.
Angelia runs on your machine, keeps no copy of your chats, and its agent works on your files, so it ships locked down. These guards are on from the first chat.
Your messages are not stored.
Angelia hands each message to your CLI and keeps no copy: no message history, no database, no Angelia server. Your conversations stay where they already are, in your CLI's own history on your machine. Angelia keeps only what routing needs, which chat goes to which session, and its log holds ids and counts, not the conversation. A file you send is saved in that chat's folder, so the agent can open it.
Strangers get nothing
Only chats you paired reach the agent. Anyone else gets no reply at all. In a group, only the people you name are heard.
Only owners approve
A risky command waits for an owner's
yeswith its one-time code. A group member's yes is refused. No answer means no.Secrets fenced off
Every profile is compiled with deny rules for your SSH keys, cloud logins, the bot token and the other profiles' folders.
A sandbox when you want one
Deny rules stop the agent's file tools; a sandbox also stops every program it runs. Codex and pi run every command in an OS sandbox. A Claude Code profile gets the same with one line:
sandbox: true.Tampering stops it
If a profile's rules are loosened, by the agent or by hand, it does not start until you compile it again. The chat says why.
Signed, local, quiet
Every release is signed and checked before it installs. No Angelia server, no account, no telemetry.
What it does today
Built for chat, not a terminal.
You approve risky steps
Before a risky command, the chat shows it with a code. Only an owner's yes plus that code runs it. No answer means no.
Quiet in groups
It answers only when mentioned, and only to people you allow. Strangers get nothing.
Every chat remembers
Each chat keeps its own session, even after a restart. /new starts fresh.
Keys stay out
API keys are kept out of the agent's environment, and in the default mode a session that would bill an API key is refused. You stay on your subscription.
Voice notes and files
Send a voice note, a photo or a PDF. Voice becomes text on your Mac (Whisper, optional). The agent can answer with a voice note too.
New group, new assistant
Turn onboarding on, then mention the bot in a new group, or just write there with onboard.mention: any. It sets up its own folder and asks what the group is for.
Scheduled check-ins
A morning summary, a weekly report. Your Mac runs the schedule (launchd); the answer lands in the chat.
Scriptable
angelia send posts to a chat from any script. angelia turn asks that chat's agent and waits for the answer.
By design
Not a new agent. A phone for the one you have.
Other chat bridges put every chat into one session. Angelia gives every chat its own session, folder and owners, comes back after a reboot, and works with the CLI you choose.
Remote Control, Claude Code channels, a WhatsApp plugin or Angelia? Four ways compared →
Guides: How to run Claude Code 24/7 on your own machine · How to control Claude Code from your phone · Claude Code notifications and approvals on your phone
- No second model.Angelia runs no LLM. Voice notes, if you want them, become text with Whisper, on your Mac.
- No middleman.Your machine, your chat app, your CLI's own provider. No Angelia server, and no copy of your messages.
- No new bill.Your CLI, your account, your subscription.
- Nothing to relearn.Skills, MCP servers and memory stay in your CLI.
- Plain files.One YAML file. The wizard only writes what you could write by hand.
- Open source.MIT license. Read every line.
Backends
Works with the CLI you use.
Every CLI plugs into the same interface, with one warm process per chat.
| CLI | Status | Safety |
|---|---|---|
Claude Codebackend: claude-code | today | Permission prompts in the chat; sandbox: true adds an OS sandbox. |
Grok Buildbackend: grok | today | Permission prompts in the chat. |
Codexbackend: codex | today | Every command inside Codex's own sandbox. |
pibackend: pi | today | Every command and file access inside macOS's sandbox. |
| OpenCode | coming soon |
You already have the brain. Give it a chat.
$ curl -fsSL https://useangelia.com/install | shEvery release is signed. Release key fingerprints:SHA256:74hZgwt/ABiUQz6C9A1r7hpHZtCRq1KfC1KvvCR1ys0SHA256:+9Y9DX+JEDqt5Kxkfr83lQ/cKdo1E2pPgQT10ssc5Lw (release workflow)
In Greek myth, Hermes carried the words of the gods. His daughter Angelia carried only the message: not the wisdom, not the decision. That is the whole job.