{"id":46632903,"url":"https://github.com/pratikwayal01/kim","last_synced_at":"2026-04-04T23:07:27.073Z","repository":{"id":342101036,"uuid":"1166328189","full_name":"pratikwayal01/kim","owner":"pratikwayal01","description":"KIM — keep in mind 🧠","archived":false,"fork":false,"pushed_at":"2026-03-28T10:54:10.000Z","size":834,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T14:37:12.876Z","etag":null,"topics":["automation","cli-tool","daemon","devloper-tools","productivity","python","reminder","system-notifications"],"latest_commit_sha":null,"homepage":"https://pratikwayal01.github.io/kim/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pratikwayal01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-25T05:27:29.000Z","updated_at":"2026-03-28T10:53:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pratikwayal01/kim","commit_stats":null,"previous_names":["pratikwayal01/kim"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/pratikwayal01/kim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pratikwayal01%2Fkim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pratikwayal01%2Fkim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pratikwayal01%2Fkim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pratikwayal01%2Fkim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pratikwayal01","download_url":"https://codeload.github.com/pratikwayal01/kim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pratikwayal01%2Fkim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31418288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","cli-tool","daemon","devloper-tools","productivity","python","reminder","system-notifications"],"created_at":"2026-03-08T00:12:54.659Z","updated_at":"2026-04-04T23:07:27.065Z","avatar_url":"https://github.com/pratikwayal01.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kim — keep in mind 🧠\n\n\u003e Lightweight cross-platform reminder daemon for developers.  \n\u003e No UI. Config-driven. Runs in the background.\n\n**Documentation:** [https://pratikwayal01.github.io/kim/](https://pratikwayal01.github.io/kim/)\n\n![kim demo](assets/demo.gif)\n\n---\n\n## Install\n\n**Linux / macOS**\n```bash\ncurl -fsSL https://raw.githubusercontent.com/pratikwayal01/kim/main/install.sh | bash\n```\n\n**Windows** (PowerShell — installs, fixes PATH, sets up autostart)\n```powershell\npowershell -ExecutionPolicy Bypass -c \"irm https://raw.githubusercontent.com/pratikwayal01/kim/main/install.ps1 | iex\"\n```\n\n**pip** (all platforms — PATH must be configured manually on Windows, see below)\n```bash\npip install kim-reminder\n```\n[![PyPI](https://img.shields.io/pypi/v/kim-reminder)](https://pypi.org/project/kim-reminder/)\n\n\u003e **Windows + pip:** After `pip install`, run this once to add `kim` to your PATH:\n\u003e ```powershell\n\u003e $p = python -c \"import sysconfig; print(sysconfig.get_path('scripts','nt_user'))\"\n\u003e [Environment]::SetEnvironmentVariable(\"PATH\",$env:PATH+\";\"+$p,\"User\")\n\u003e $env:PATH += \";$p\"\n\u003e ```\n\u003e Then `kim --version` should work. Open a new terminal for the change to persist.\n\nThat's it. kim starts automatically on login.\n\n---\n\n## Usage\n\n```\nkim start          Start the daemon\nkim stop           Stop the daemon\nkim status         Show running reminders\nkim list           List all reminders from config\nkim logs           Tail the log file\nkim edit           Open config in $EDITOR\nkim add            Add a new reminder\nkim remove         Remove a reminder\nkim enable         Enable a reminder\nkim disable        Disable a reminder\nkim update         Update a reminder\nkim remind         Fire a one-shot reminder after a delay or at a time\nkim interactive    Enter interactive mode (-i)\nkim self-update    Check for and install updates\nkim uninstall      Uninstall kim completely\nkim export         Export reminders to file\nkim import         Import reminders from file\nkim validate       Validate config file\nkim slack          Slack notification settings\nkim completion     Generate shell completions\nkim sound                          # show current config + format notes\nkim sound --set ~/sounds/bell.mp3  # set custom file (validates on set)\nkim sound --clear                  # revert to system default\nkim sound --test                   # play it immediately\nkim sound --enable / --disable     # toggle sound on/off\n```\n\n### Interval reminders\n\n```bash\nkim add \"drink water\" -I 30m          # every 30 minutes\nkim add \"drink water\" --every 30m     # same — --every is an alias for -I\nkim add \"stretch\" --every 1h\n```\n\n### Daily at a fixed time\n\n```bash\nkim add standup --at 10:00                        # every day at 10:00 local time\nkim add standup --at 10:00 --tz Asia/Kolkata      # with explicit timezone\n```\n\n### One-shot reminders\n\n```bash\n# Relative\nkim remind \"standup call\" in 10m\nkim remind \"take a break\" in 1h\nkim remind \"check the oven\" in 25m\nkim remind \"deploy window opens\" in 2h 30m\n\n# Absolute — fire at a specific time\nkim remind \"standup\" at 10:00\nkim remind \"standup\" at tomorrow 9am\nkim remind \"call\" at friday 2pm\nkim remind \"deploy\" at 2026-04-07 14:30 --tz America/New_York\n```\n\nFires once, runs in the background, frees your terminal immediately.\n\n**Persistent** — one-shot reminders survive daemon restarts and system reboots. Stored in `~/.kim/oneshots.json` and loaded automatically when the daemon starts. Expired reminders are cleaned up on next startup.\n\n---\n\n## Config — `~/.kim/config.json`\n\n```json\n{\n  \"reminders\": [\n    {\n      \"name\": \"eye-break\",\n      \"interval\": \"30m\",\n      \"title\": \"👁️ Eye Break\",\n      \"message\": \"Look 20 feet away for 20 seconds. Blink slowly.\",\n      \"urgency\": \"critical\",\n      \"enabled\": true\n    },\n    {\n      \"name\": \"water\",\n      \"interval\": \"1h\",\n      \"title\": \"💧 Drink Water\",\n      \"message\": \"Stay hydrated.\",\n      \"urgency\": \"normal\",\n      \"enabled\": true\n    }\n  ],\n  \"sound\": true\n}\n```\n\n| Field | Values | Description |\n|---|---|---|\n| `name` | string | Unique identifier |\n| `interval` | number or string (`\"30m\"`, `\"1h\"`, `\"1d\"`) | How often to fire |\n| `title` | string | Notification heading |\n| `message` | string | Notification body |\n| `urgency` | `low` / `normal` / `critical` | Notification priority |\n| `enabled` | `true` / `false` | Toggle without deleting |\n| `sound` | `true` / `false` | (top-level) Play sound globally |\n| `slack` | object | (top-level) Slack settings |\n\n### Per-Reminder Overrides\n\nEach reminder can override global sound and Slack settings:\n\n```json\n{\n  \"reminders\": [\n    {\n      \"name\": \"standup\",\n      \"interval\": \"30m\",\n      \"sound_file\": \"~/sounds/urgent.wav\",\n      \"slack\": {\n        \"enabled\": true,\n        \"webhook_url\": \"https://hooks.slack.com/services/...\",\n        \"channel\": \"#standup-alerts\"\n      }\n    }\n  ],\n  \"sound\": true,\n  \"slack\": {\n    \"enabled\": true,\n    \"webhook_url\": \"https://hooks.slack.com/services/...\",\n    \"channel\": \"#general\"\n  }\n}\n```\n\nOr via CLI:\n```bash\nkim add standup -I 30m --sound-file ~/sounds/urgent.wav --slack-channel \"#standup\"\n```\n\n### Slack Integration\n\n```json\n{\n  \"reminders\": [...],\n  \"sound\": true,\n  \"slack\": {\n    \"enabled\": true,\n    \"webhook_url\": \"https://hooks.slack.com/services/your-webhook-id\",\n    \"bot_token\": \"xoxb-your-bot-token\",\n    \"channel\": \"#general\"\n  }\n}\n```\n\nUse a **Webhook** or a **Bot Token** — not both. Test with `kim slack --test`.\n\n---\n\n## How it works\n\n| Platform | Autostart | Notifications |\n|---|---|---|\n| Linux | systemd user service | `notify-send` |\n| macOS | launchd agent | `osascript` |\n| Windows | Task Scheduler | PowerShell toast |\n\n- **Pure Python stdlib** — no pip installs\n- **Zero config** — works out of the box, creates default config on first run\n- All reminders run on a single `heapq` scheduler thread — memory stays flat (~0.02 MB) regardless of how many reminders you have\n- Logs at `~/.kim/kim.log`, PID at `~/.kim/kim.pid`\n\n---\n\n## Why kim?\n\n| Tool | Pure stdlib | CLI-first | Zero config | One-shot | Recurring | Cross-platform | Slack | Config-driven | Interactive | Self-update | Export/Import |\n|------|-------------|-----------|-------------|----------|-----------|----------------|-------|---------------|-------------|-------------|---------------|\n| kim | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |\n| Remind | ❌ | ✅ | ✅ | ✅ | ✅ | ⚠️ | ❌ | ⚠️ | ❌ | ❌ | ❌ |\n| Cron | ✅ | ✅ | ❌ | ⚠️ | ✅ | ⚠️ | ❌ | ✅ | ❌ | ❌ | ⚠️ |\n| macOS Reminders | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Google Calendar | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ⚠️ |\n\n---\n\n## Uninstall\n\n```bash\nkim uninstall\n```\n\n---\n\n*Start small. Keep it in mind.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpratikwayal01%2Fkim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpratikwayal01%2Fkim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpratikwayal01%2Fkim/lists"}