vibemon-app

Features

Characters

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.

States

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)

Working State Text

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

State Timeout

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.

Display Behavior

Animations

Window Mode

The Desktop App supports two window modes:

Mode Description
multi One window per project (max 5) - Default
single One window with project lock support

Multi-Window Mode (Default)

Single-Window Mode

Switching Modes

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"}'

Project Lock

Lock the monitor to a specific project to prevent display updates from other projects.

Note: Project lock is only available in single-window mode.

Lock Modes

Mode Description
first-project First incoming project is automatically locked
on-thinking Lock when entering thinking state (default)

CLI Commands

# 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

Desktop App Features

Always on Top Modes

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

Click to Focus Terminal (macOS)

When running Claude Code in multiple terminal tabs, clicking a VibeMon window automatically switches to the corresponding terminal tab.

Supported Terminals:

Requirements:

System Tray Menu

Build

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