Open source · MIT · Runs on your machine

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 | sh

It 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.

side-projectTelegram · you and your assistant
Why did last night's build fail?
The date parser test fails on the day the clocks change. The fix is one line in src/date.ts. Apply it?
Yes, and run the tests
Needs your approval🔐 Bash: npm test
Reply yes 6b480a6f or no 6b480a6f
yes 6b480a6f
38 tests green. Pushed to fix/dst.
It runs only after an owner answers yes with the one-time code. Anyone else's yes is refused, and no answer means no.

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.

01

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.

02

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.

1

Install and pair.

Run the installer, pick your CLI, send the bot a message. That chat is now connected.

2

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.

3

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 yes with 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 →

  • 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.

CLIStatusSafety
Claude Code
backend: claude-code
todayPermission prompts in the chat; sandbox: true adds an OS sandbox.
Grok Build
backend: grok
todayPermission prompts in the chat.
Codex
backend: codex
todayEvery command inside Codex's own sandbox.
pi
backend: pi
todayEvery command and file access inside macOS's sandbox.
OpenCodecoming soon

You already have the brain. Give it a chat.

$ curl -fsSL https://useangelia.com/install | sh

Every release is signed. Release key fingerprints:
SHA256:74hZgwt/ABiUQz6C9A1r7hpHZtCRq1KfC1KvvCR1ys0
SHA256:+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.