Your terminal's gentle nudge. Get native notifications when commands finish.
Project description
Rundone
Your terminal's gentle nudge.
Get a native notification when any command finishes — whether you're in a terminal, Colab, Kaggle, or Jupyter.
Install
pip install rundone
Terminal usage
Prefix any command with rundone:
rundone python train.py --epochs 100
rundone pip install torch
rundone make build
rundone pytest tests/ -v
Switch to another app — when it's done, a notification slides in:
✓ train.py finished — 20m 34s
Options
--quiet, -q Suppress rundone's terminal output (notification still fires)
--title, -t Custom notification title (default: "Rundone")
--min-time, -m Only notify if command took longer than N seconds
# Only notify for long commands
rundone --min-time 30 python train.py
# Custom title
rundone --title "Model Training" python train.py
# Silent mode
rundone --quiet make build
Colab / Kaggle / Jupyter usage
Three ways to use Rundone in notebooks:
1. One-liner at the end of a cell
import rundone
# Your long-running code
model.fit(X_train, y_train, epochs=100)
# This line sends a browser notification
rundone.notify("Training complete!")
2. Cell magic (wrap an entire cell)
import rundone
rundone.load_magic()
Then in any cell:
%%rundone
model.fit(X_train, y_train, epochs=100)
# Notification fires automatically when the cell finishes
3. Decorator (wrap a function)
import rundone
@rundone.timer_notify
def train_model():
model.fit(X_train, y_train, epochs=100)
train_model() # notification fires when function returns
Enable browser notifications
The first time you use Rundone in a notebook, your browser will ask for notification permission. You can also run this to trigger the prompt:
rundone.enable_notifications()
Cross-platform support
| Environment | Notification method | Extra dependencies |
|---|---|---|
| macOS terminal | osascript (native) | None |
| Linux terminal | notify-send (libnotify) | None* |
| Windows terminal | win10toast / PowerShell | Auto-installed |
| Colab / Kaggle | Browser notification | None |
| Jupyter | Browser notification | None |
*Most Linux desktops include notify-send. If not: sudo apt install libnotify-bin
How it works
Terminal: Rundone wraps your command, streams all output normally, and fires a native OS notification when it exits. Your command runs exactly as it would without Rundone — zero overhead.
Notebooks: Rundone uses the browser's Notification API to send a popup even when you're in another tab. It also shows an inline banner in the cell output.
Exit codes
Rundone preserves your command's exit code. If your script exits with code 1, rundone exits with code 1 too. Works seamlessly in shell scripts and CI.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rundone-1.1.0.tar.gz.
File metadata
- Download URL: rundone-1.1.0.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf1c5f487a5531d802c3985ce921a43d874d361f71042bcca64fd245b4299a0d
|
|
| MD5 |
91ac284118e4dee3b8e8135e35d200c3
|
|
| BLAKE2b-256 |
60486a7dcc529d769b53c1ac474ad056eee7db3c329cbd27f5413d7ab04997e0
|
File details
Details for the file rundone-1.1.0-py3-none-any.whl.
File metadata
- Download URL: rundone-1.1.0-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9af0377472a89115be7bdd92fae36d1f0a76a8f2cf87dc1020abe95866b83e31
|
|
| MD5 |
8c6f5ec10ba8d857e94ba5ffab742930
|
|
| BLAKE2b-256 |
7d9c90aaf724947c22eb26ce7cc3939cc7a3794cb72cf67f34d0ed1d00212d49
|