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](https://github.com/korengast/angelia/blob/v0.3.24/install.sh)

Or with npm: `npm install -g --ignore-scripts angelia-gateway`, then `angelia init`.

[Quick start](https://github.com/korengast/angelia#quick-start) [View on GitHub](https://github.com/korengast/angelia)

- [Owner approval](https://useangelia.com/#security)
- [Secrets fenced off](https://useangelia.com/#security)
- [Signed releases](https://useangelia.com/#security)
- [Stores no messages](https://useangelia.com/#security)
- [No telemetry](https://useangelia.com/#security)

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](https://useangelia.com/guides/claude-code-whatsapp-telegram/#angelia)). [How it compares](https://useangelia.com/guides/claude-code-whatsapp-telegram/).

**side-project** Telegram · you and your assistant

> **You:** Why did last night's build fail?

> **Angelia:** The date parser test fails on the day the clocks change. The fix is one line in `src/date.ts`. Apply it?

> **You:** Yes, and run the tests

> **Angelia:** Needs your approval🔐 Bash: `npm test`
Reply `yes 6b480a6f` or `no 6b480a6f`

> **You:** yes 6b480a6f

> **Angelia:** 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.*

[Installing Angelia: from the install line to the first message](https://useangelia.com/angelia-demo-muted.mp4)

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.

```yaml
# 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.

[Read the security model](https://useangelia.com/docs/security/) [Report a hole privately](https://github.com/korengast/angelia/blob/main/SECURITY.md)

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 →](https://useangelia.com/guides/claude-code-whatsapp-telegram/)

Guides: [How to run Claude Code 24/7 on your own machine](https://useangelia.com/guides/claude-code-24-7/) · [How to control Claude Code from your phone](https://useangelia.com/guides/claude-code-from-phone/) · [Claude Code notifications and approvals on your phone](https://useangelia.com/guides/claude-code-phone-notifications/)

- **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 Code** `backend: claude-code` | today | Permission prompts in the chat; `sandbox: true` adds an OS sandbox. |
| **Grok Build** `backend: grok` | today | Permission prompts in the chat. |
| **Codex** `backend: codex` | today | Every command inside Codex's own sandbox. |
| **pi** `backend: 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 | 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.

Ἀγγελία · message, tidings [Docs](https://useangelia.com/docs/) · [Tools](https://useangelia.com/tools/) · [Claude Code](https://useangelia.com/claude-code/) · [Codex](https://useangelia.com/codex/) · [Grok Build](https://useangelia.com/grok/) · [pi](https://useangelia.com/pi/) · [WhatsApp](https://useangelia.com/whatsapp/) · [Telegram](https://useangelia.com/telegram/) · [Alternatives](https://useangelia.com/alternatives/) [info@useangelia.com](mailto:info@useangelia.com) · [GitHub](https://github.com/korengast/angelia) · [MIT license](https://github.com/korengast/angelia/blob/main/LICENSE)
