| Character | Color | Description | Auto-selected for |
|---|---|---|---|
apto |
Gray-Purple | Rounded character | Apto |
clawd |
Orange | Default character | Claude Code |
kiro |
White | Ghost character | Kiro |
claw |
Red | Antenna character | OpenClaw |
All characters use image-based rendering (128x128 PNG). Character is auto-detected based on the IDE hook events. You can also manually change it via the system tray menu.
| State | Background | Eyes | Text | Trigger |
|---|---|---|---|---|
start |
Cyan | ■ ■ + ✦ | Hello! | Session begins |
idle |
Green | ■ ■ | Ready | Waiting for input |
thinking |
Purple | ▀ ▀ + 💭 | Thinking | User submits prompt |
planning |
Teal | ▀ ▀ + 💭 | Planning | Plan mode active |
working |
Blue | 🕶️ (sunglasses) | (tool-based) | Tool executing |
packing |
Gray | ▀ ▀ + 💭 | Packing | Context compacting |
notification |
Yellow | ● ● + ? | Input? | User input needed |
done |
Green | > < | Done! | Tool completed |
sleep |
Navy | ─ ─ + Z | Zzz… | 5min inactivity |
alert |
Red | ■ ■ + ! | Alert | Critical error/failure (ESP32: triggers alert light if configured) |
The working state displays fixed text based on the active tool:
| Tool | Text |
|---|---|
| Bash | Running |
| Read | Reading |
| Edit | Editing |
| Write | Writing |
| Grep / WebSearch | Searching |
| Glob | Scanning |
| WebFetch | Fetching |
| Task | Tasking |
| Default | Working |
| From State | Timeout | To State |
|---|---|---|
start, done |
1 minute | idle |
planning, thinking, working, packing, notification, alert |
5 minutes | idle |
idle |
5 minutes | sleep |
Desktop only: After 10 minutes in sleep state, the window automatically closes.
start stateThe Desktop App supports two window modes:
| Mode | Description |
|---|---|
multi |
One window per project (max 5) - Default |
single |
One window with project lock support |
Use the system tray menu or API:
curl -X POST http://127.0.0.1:19280/window-mode \
-H "Content-Type: application/json" \
-d '{"mode":"single"}'
Lock the monitor to a specific project to prevent display updates from other projects.
Note: Project lock is only available in single-window mode.
| Mode | Description |
|---|---|
first-project |
First incoming project is automatically locked |
on-thinking |
Lock when entering thinking state (default) |
# Lock current project
python3 ~/.claude/hooks/vibemon.py --lock
# Lock specific project
python3 ~/.claude/hooks/vibemon.py --lock my-project
# Unlock
python3 ~/.claude/hooks/vibemon.py --unlock
# Get current status
python3 ~/.claude/hooks/vibemon.py --status
# Get/Set lock mode
python3 ~/.claude/hooks/vibemon.py --lock-mode
python3 ~/.claude/hooks/vibemon.py --lock-mode on-thinking
# Reboot ESP32 device
python3 ~/.claude/hooks/vibemon.py --reboot
| Mode | Description |
|---|---|
active-only |
Only active states (thinking, planning, working, packing, notification, alert) stay on top - Default |
all |
All windows stay on top regardless of state |
disabled |
No windows stay on top |
When active-only is selected:
Change via system tray menu: Always on Top → Select mode
When running Claude Code in multiple terminal tabs, clicking a VibeMon window automatically switches to the corresponding terminal tab.
Supported Terminals:
Requirements:
cd desktop
npm run build:mac # macOS (DMG, ZIP)
npm run build:win # Windows (NSIS, Portable)
npm run build:linux # Linux (AppImage, DEB)
npm run build:all # All platforms