Zoran
Your agents know how to reach you.
Zoran watches your local Claude Code and Cursor sessions. When a session needs a human — a permission to grant, a deploy waiting, a question only you can answer — your real phone rings. Press 1 to allow, 2 to deny. Hang up, go back to your life.
No screen, no notifications to miss. A phone call.
Install
pip install zoran # or: pipx install zoran
zoran init
zoran init does everything: registers your device, installs the hooks into
Claude Code (~/.claude/settings.json) and Cursor (~/.cursor/hooks.json)
without touching your existing hooks, starts the daemon as a background service
(launchd on macOS, systemd on Linux), and opens your dashboard to set your
phone number. Nothing to keep running in a terminal.
What it feels like
- An agent asks for a risky permission → your phone rings, you press 1 or 2.
- A task finishes and the agent is waiting on your word → your phone rings.
- You're away and curious → call back. A voice tells you what's moving, what broke, what's waiting on you.
- An agent is going off the rails → say "freeze". It stops.
- Missed the call? You get an SMS, and YES/NO by text works too.
Your code stays home
The daemon runs on 127.0.0.1 only. Transcripts are read locally, on demand,
and never stored or synced. What leaves your machine: session metadata and an
80-character tool preview, redacted before it leaves. The cloud exists so your
phone can ring — it never sees your source. Details: zoran.run/privacy.
If the cloud is unreachable, hooks fail open: your agents keep working as if Zoran wasn't there.
Commands
| Command | What it does |
|---|---|
zoran init |
register, install hooks, start the service, open the dashboard |
zoran status |
is the daemon alive, which sessions it sees |
zoran test-call |
ring your phone right now, to make sure it works |
zoran start / zoran stop |
start / stop the background service |
zoran uninstall-hooks |
remove Zoran's hooks, leave everything else |
Local dashboard: http://127.0.0.1:4090 · Cloud dashboard: zoran.run/app
Zoran is a product of Polymerix Labs Ltd, London. Support: support@polymerix.io
Metadata
Release files for zoran 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 | |
|---|---|---|---|
| zoran-0.2.0.tar.gz | 36.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zoran-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.6 kB
Release files / zoran-0.2.0.tar.gz
| Download URL | zoran-0.2.0.tar.gz |
|---|---|
| Size | 36.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
55f3c5b8ceccf66f5b0959785e50d910164b803d16d07a76b3ce8da6f7afc1f0
|
|
BLAKE2b-256 checksum How to use checksums |
71c0c32ea344feb81d5b6e7c48ba303cc0549949a2466de116038183d0438e58
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / zoran-0.2.0-py3-none-any.whl
| Download URL | zoran-0.2.0-py3-none-any.whl |
|---|---|
| Size | 29.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db9469fe56c774e0783b0b764f99b7b5617728a0ba51668cdf1640d61c85c39b
|
|
BLAKE2b-256 checksum How to use checksums |
586d35ab3f272ada6f2e96ffb3b75dac0a3e17d25a53b1d209f5691914cbf7eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|