Exercise reminder overlay for Claude Code thinking time
Project description
vibe-wellness
Exercise reminder overlay for macOS. Pops up during Claude Code sessions to remind you to move.
What it does
A floating overlay window appears every 15 minutes when you're using Claude Code:
- 3-second countdown with exercise name
- Animated stick figure GIF showing the exercise
- Auto-dismisses after 30 seconds (or click to dismiss)
Default exercises (desk-friendly):
- Kegels / 提肛
- Drink Water / 喝水
- Squats / 深蹲
- Wall Push-ups / 靠墙俯卧撑
- Neck Rolls / 颈椎运动
Install
Requires uv and Python 3.12+.
uvx --from git+https://github.com/odysa/vibe-wellness vibe-wellness
The interactive installer will:
- Ask your preferred language and reminder interval
- Clone to
~/.vibe-wellness/ - Install dependencies via
uv sync - Add a
UserPromptSubmithook to~/.claude/settings.json
Usage
The overlay triggers automatically via Claude Code hooks. You can also test manually:
make test
Configuration
Edit ~/.config/vibe-wellness/config.json:
{
"lang": "zh",
"interval": 900
}
| Key | Default | Description |
|---|---|---|
lang |
"auto" |
Language: "en", "zh", or "auto" (detect system) |
interval |
900 |
Seconds between reminders |
duration |
30 |
Overlay display time in seconds |
opacity |
0.92 |
Window opacity (0.0 - 1.0) |
exercises |
(built-in) | Custom exercise list (see below) |
Custom exercises
Add exercises in your config. They merge with defaults by key:
{
"exercises": [
{ "key": "stretching", "name": { "en": "Stretch", "zh": "拉伸" } }
]
}
Custom GIFs
Drop a {key}.gif in ~/.config/vibe-wellness/gifs/ to use your own animation for any exercise.
Uninstall
Remove the vibe-wellness hook entry from ~/.claude/settings.json, then:
rm -rf ~/.vibe-wellness ~/.config/vibe-wellness
Project structure
vibe_wellness/ # Python package
config.py # Config loading, i18n, language detection
ui.py # Overlay window (tkinter)
config.json # Default config + exercises
gifs/ # Bundled exercise GIFs
scripts/
show.sh # Launch overlay (interval + single-instance guard)
hide.sh # Kill overlay
install.sh # One-step installer
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 vibe_wellness-0.1.1.tar.gz.
File metadata
- Download URL: vibe_wellness-0.1.1.tar.gz
- Upload date:
- Size: 178.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56b49b61aa182588d515e9afa283c156053317cc7bc852f2a26c802edc6ec9e5
|
|
| MD5 |
0cafedfac9400fd8031fc58d8af05961
|
|
| BLAKE2b-256 |
4d9ead772ffbe88b24950894b42e9f0cb5a43f33379a5283e41c692fafb24fa8
|
File details
Details for the file vibe_wellness-0.1.1-py3-none-any.whl.
File metadata
- Download URL: vibe_wellness-0.1.1-py3-none-any.whl
- Upload date:
- Size: 179.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07ec7dba984a13100de16080eda6e84faaef31372e9254a00bd1aa0a1bd390ad
|
|
| MD5 |
8f68ddb60a5f44b5af318e2b569a6dd3
|
|
| BLAKE2b-256 |
2d778e2e287b75a031fab17a12b9eb934b8afc9de360f0750ff32fc6b24801a1
|