Keryx
A personal voice agent that keeps working after you hang up.
Start hours of work from a short phone call: you can ask your assistant on the line to research a question, change code, or run an experiment. The work then continues on your machine, even after you hang up. You can check in or add instructions in a later call, and Keryx can call you back or text you the report when it's done. You can call from a phone, or from a watch that can place calls.
Keryx triggers a callback after a task completed. I've named my voice companion Lyra, but this is configurable.
Example requests
"In the imaging project, run a learning-rate sweep on the microscopy images. Call me if you need a decision, and again when training finishes with a quick summary of the results."
"Find the papers my group emailed this week, turn them into a reading-group presentation with polished animations and some discussion questions, and send it to me on Slack."
"Add a voice command that checks whether my home server is up. Build it in the Keryx project and run the tests."
"One more thing: include GPU memory use in that sweep comparison."
Features
Keryx turns the Realtime API into a voice agent that you can use across many calls. This is how it compares with the Realtime API alone and with ChatGPT Voice, as of September 2026:
| Feature | Realtime API | ChatGPT Voice | Keryx |
|---|---|---|---|
| Live voice conversation and tools | ✅ | ✅ | ✅ |
| Phone calls, including from calling watches | 🟡 SIP setup | 🟡 1-800-CHATGPT, US/CA | ✅ |
| Email, calendar, and Slack by voice | 🟡 via MCP | ✅ | ✅ |
| Tasks that continue after you hang up | — | ✅ in Work | ✅ |
| Status and follow-ups in a later call | — | 🟡 in the app | ✅ |
| SMS links to written reports | — | — | ✅ |
| Call-backs when you ask for one | — | — | ✅ |
| Calls you when a task needs your input | — | — | ✅ |
| Add a feature to Keryx during a call | — | — | ✅ |
| Report a bug in Keryx by voice, filed as a GitHub issue | — | — | ✅ |
| Answer Claude Code prompts on your screen by phone | — | — | ✅ |
System overview
Keryx (κῆρυξ) is Ancient Greek for a herald: a messenger who carries word back and forth.
That's the job here. Keryx answers the phone, hands your request to a coding agent on your
machine, and calls you back with the result. The messenger you talk to on the line is
called Lyra by default, and you can rename it with keryx config set ASSISTANT_NAME ….
The conversation runs on the OpenAI Realtime API. Lyra answers small questions itself. Anything larger becomes a task for a coding agent and is handed to Keryx, which keeps running after you hang up.
In this example, one task spans three calls. Keryx calls back once so that Lyra can ask you a question, and again with the training results.
Coding agents: Claude Code or Codex
Tasks run on Claude Code or
Codex, signed in with a subscription or an API key.
Keryx is most extensively tested with Claude Code on a subscription. Codex is supported,
but it may not have every feature. keryx setup asks which agent to use by default. If you
enable both, you can say "have Codex do it" on a call.
docs/agents.md compares the two.
Quickstart
Requirements
- Linux or macOS, on a machine that stays on, such as a desktop or home server where your projects live. Keryx can't answer calls, keep working, or call you back while it sleeps.
- An OpenAI API key with Realtime access.
- A Claude or ChatGPT plan, or an API key, for the coding agent. Claude Code and Codex both come with Keryx.
- A Twilio phone number.
- A tunnel that gives Twilio a public address: Cloudflare Tunnel on Linux, ngrok on macOS.
Install and set up
-
Install Keryx:
curl -fsSL https://raw.githubusercontent.com/wak31415/keryx/main/install.sh | sh
It installs the
keryxcommand and startskeryx setup, a wizard that asks only for what's still missing and ends by installing the background service. Runkeryx setupagain at any time. -
Call your Twilio number.
keryx upgrade updates Keryx and restarts the service onto the new version. You can also
ask for an upgrade on a call.
If a coding agent is setting Keryx up for you, point it at
keryx setup --agent-instructions, or, in a clone, give Claude Code the skills/keryx-setup
skill. The Setup guide on the wiki covers
each step in detail.
Developer install
Clone Keryx instead of installing it, and the service runs your checkout. That adds what an installed copy can't do:
- Changes to Keryx's own code by phone. Ask on a call, for example "make the call-back name the project", and the task edits the checkout, restarts Keryx onto the change, and calls you back to say whether it came up.
- Better bug reports. With issue reports turned on in
keryx setup, the task reads Keryx's code and logs before it files the issue. - The test suite, and branches of your own.
It needs uv, and every command runs as uv run keryx from the
checkout:
git clone https://github.com/wak31415/keryx.git && cd keryx
uv sync
uv run keryx setup
To update, pull and then run uv run keryx restart. CONTRIBUTING.md has
the rest.
Documentation
- Setup guide: the phone, Google, the PIN, where files live, and costs
- Configuration reference: every setting
- Coding agents: signing in, installing only one, and what each can do
- Voice tools: what the voice model can do, and how to add a tool
- Approval bridge: answer Claude Code prompts on your screen by phone
- Security policy and threat model: read it before you put the phone line online
- Wiki: troubleshooting, the command-line reference, and writing your own tools
- Changelog
Getting help
- Run
keryx doctor. It checks the whole setup and says what's missing. - Read Troubleshooting on the wiki.
- If that doesn't solve it, open an issue.
Report a security problem privately, as SECURITY.md describes, never in a public issue.
Roadmap
v0.3.0 plans to add local models for the voice and the agents. v0.4.0 plans to let you talk to the assistant at a Mac, without a phone. A move to OpenAI's GPT-Live is being considered but isn't scheduled. docs/roadmap.md has the checklist for each.
Contributing and license
Bug reports, corrections to the docs, and code are all welcome. See CONTRIBUTING.md. Keryx is licensed under Apache 2.0.
Metadata
Release files for keryx-voice 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| keryx_voice-0.2.0.tar.gz | 1.0 MB | Without provenance | Details for keryx_voice-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| keryx_voice-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for keryx_voice-0.2.0-py3-none-any.whl |
Total release size: 1.5 MB
Release files / keryx_voice-0.2.0.tar.gz
| Download URL | keryx_voice-0.2.0.tar.gz |
|---|---|
| Size | 1.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b3ad8a5cb9a8d1f94c14655fe463ab4160b9d13045b6ab460cb5ccac2b55e41
|
|
BLAKE2b-256 checksum How to use checksums |
d16a2ac96bca94bf76b724b8eed9d857b82d50b2c263ae3faa117c42259949a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / keryx_voice-0.2.0-py3-none-any.whl
| Download URL | keryx_voice-0.2.0-py3-none-any.whl |
|---|---|
| Size | 472.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8dd34447215dd4738227412f4289d1f2999249e23ea541eca454d8128fe17894
|
|
BLAKE2b-256 checksum How to use checksums |
fb3e0d0869a71d3fcef90b6617a745527e169a7ac933d8031019f7847d582a59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for keryx-voice 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.