codex-bell
Get a beep when OpenAI Codex finishes a task or needs your input.
The problem
Codex runs tasks in the background and goes silent for minutes at a time. You end up tab-switching constantly just to check whether it's done — or you miss the moment it asks for input and the whole session stalls.
codex-bell watches your Codex session logs and fires a system beep the instant something needs your attention.
Install
pip install codex-bell
Then just run:
codex-bell
On first run, codex-bell looks for ~/.codex/sessions (the default path used by the Codex CLI on all platforms). If it can't find it, it will ask you where your sessions are and save the answer so you never have to type it again.
Usage
codex-bell [--path PATH] [--interval SECONDS] [--reconfigure] [--verbose]
| Flag | Description |
|---|---|
--path PATH |
One-off override for the sessions directory |
--interval N |
Polling interval in seconds (default: 2) |
--reconfigure |
Forget saved path and prompt again |
--verbose, -v |
Print every event seen in logs (useful for finding undetected prompt types) |
How it works
- Tails
.jsonlfiles under your Codex sessions directory by tracking byte offsets — only new content is read on each poll. - Detects five events:
task_complete,request_user_input,require_escalated,apply_patch_approval, andexec_approval_request. - Fires a beep using the best available method for your OS (see table below).
Compatibility
| OS | Beep method |
|---|---|
| Windows | winsound.Beep (built-in) |
| macOS | afplay /System/Library/Sounds/Glass.aiff |
| Linux | paplay → aplay → ANSI terminal bell (fallback chain) |
| Other | ANSI terminal bell (\a) |
No external dependencies. Pure Python standard library + subprocess.
Why I built it
I was running long Codex sessions and kept missing the moment they finished — or the moment Codex stopped and waited for me. A proper notification felt like too much; I just wanted a beep. Spent an afternoon turning a quick winsound hack into something cross-platform and pip-installable.
Design note: polling vs. filesystem events
codex-bell polls every 2 seconds instead of using filesystem event APIs (like inotify on Linux or FSEvents on macOS). This was intentional:
- Zero dependencies — no C extensions, no
watchdog, no install pain. - Dead simple — one timer loop, easy to reason about.
- Good enough — 2-second latency is imperceptible for "your agent finished a multi-minute task."
If you need sub-second reaction time, swap the loop in watcher.py for watchdog. For the use case this tool was built for, polling is the right call.
License
MIT © Kevin Defalco
Metadata
Release files for codex-bell 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| codex_bell-0.1.3.tar.gz | 8.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| codex_bell-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.2 kB
Release files / codex_bell-0.1.3.tar.gz
| Download URL | codex_bell-0.1.3.tar.gz |
|---|---|
| Size | 8.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3ba3779971fa1073e08f0c751113775d2889c865f7c0a4809ed4737f10cff856
|
|
BLAKE2b-256 checksum How to use checksums |
49db3623982c4a6a8b7ca821d58e77a39422baebbe4ea491439eac290245c0e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Release files / codex_bell-0.1.3-py3-none-any.whl
| Download URL | codex_bell-0.1.3-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e26c7bf11c8afc28307092dce035e4eb235d6fd05af2fe2f54623ee47e8bad53
|
|
BLAKE2b-256 checksum How to use checksums |
8090404d168086cb0c1615e50330bea9d91613a98caf5303f7f524a2897de8d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|