Lightweight cross-platform reminder daemon for developers.
No UI. Config-driven. Runs in the background.
Linux / macOS
curl -fsSL https://raw.githubusercontent.com/pratikwayal01/kim/main/install.sh | bashWindows (PowerShell as Admin)
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/pratikwayal01/kim/main/install.ps1 | iex"That's it. kim starts automatically on login.
kim start Start the daemon
kim stop Stop the daemon
kim status Show running reminders
kim list List all reminders from config
kim logs Tail the log file
kim edit Open config in $EDITOR
kim add Add a new reminder
kim remove Remove a reminder
kim enable Enable a reminder
kim disable Disable a reminder
kim update Update a reminder
kim remind Fire a one-shot reminder after a delay
kim interactive Enter interactive mode (-i)
kim self-update Check for and install updates
kim uninstall Uninstall kim completely
kim export Export reminders to file
kim import Import reminders from file
kim validate Validate config file
kim slack Slack notification settings
kim completion Generate shell completions
kim sound # show current config + format notes
kim sound --set ~/sounds/bell.mp3 # set custom file (validates on set)
kim sound --clear # revert to system default
kim sound --test # play it immediately
kim sound --enable / --disable # toggle sound on/off
kim remind "standup call" in 10m
kim remind "take a break" in 1h
kim remind "check the oven" in 25m
kim remind "deploy window opens" in 2h 30mFires once, runs in the background, frees your terminal immediately.
{
"reminders": [
{
"name": "eye-break",
"interval_minutes": 30,
"title": "๐๏ธ Eye Break",
"message": "Look 20 feet away for 20 seconds. Blink slowly.",
"urgency": "critical",
"enabled": true
},
{
"name": "water",
"interval_minutes": 60,
"title": "๐ง Drink Water",
"message": "Stay hydrated.",
"urgency": "normal",
"enabled": true
}
],
"sound": true
}| Field | Values | Description |
|---|---|---|
name |
string | Unique identifier |
interval_minutes |
number or string ("30m", "1h", "1d") |
How often to fire |
title |
string | Notification heading |
message |
string | Notification body |
urgency |
low / normal / critical |
Notification priority |
enabled |
true / false |
Toggle without deleting |
sound |
true / false |
(top-level) Play sound globally |
slack |
object | (top-level) Slack settings |
{
"reminders": [...],
"sound": true,
"slack": {
"enabled": true,
"webhook_url": "https://hooks.slack.com/services/...",
"bot_token": "xoxb-...",
"channel": "#general"
}
}Use a Webhook or a Bot Token โ not both. Test with kim slack --test.
| Platform | Autostart | Notifications |
|---|---|---|
| Linux | systemd user service | notify-send |
| macOS | launchd agent | osascript |
| Windows | Task Scheduler | PowerShell toast |
- Pure Python stdlib โ no pip installs
- All reminders run on a single
heapqscheduler thread โ memory stays flat (~0.02 MB) regardless of how many reminders you have - Config changes are detected automatically โ no need to restart manually
- Logs at
~/.kim/kim.log, PID at~/.kim/kim.pid
kim uninstall- CLI reminder management (
kim add,kim remove, etc.) - Interactive mode
- Export / import
- Self-update
- Uninstall command
- Config validation
- Slack / webhook notifications
- One-shot reminders (
kim remind "standup" in 10m) - Per-reminder cron-style schedule
- Plugin system for custom notification channels
Start small. Keep it in mind.