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.
If your terminal says zoran: command not found (common with the macOS
system Python, which installs scripts outside your PATH), this always works:
python3 -m zoran init
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.1
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.1.tar.gz | 37.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zoran-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 68.5 kB
Release files / zoran-0.2.1.tar.gz
| Download URL | zoran-0.2.1.tar.gz |
|---|---|
| Size | 37.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1527048b50063577835f2016773873767b04ce7f18d63afd3a0b1123cd400701
|
|
BLAKE2b-256 checksum How to use checksums |
9f5a8337079f4f12fbdca67f11ccec7d4b767171f1b04493f23c79b7b60534a6
|
| 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.1-py3-none-any.whl
| Download URL | zoran-0.2.1-py3-none-any.whl |
|---|---|
| Size | 30.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
61a73660ea6c1f8942518ee2607a88c64c09538d76c01ee639663b8c2b7d9f56
|
|
BLAKE2b-256 checksum How to use checksums |
a54509bd5355a5f3661cbb6c43a763945ea751831e6e98b0908d0af58563e1ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|