VibeMon normalizes multiple agent ecosystems into one display model. The rendering layer is shared, but the integration path is not.
| Agent | Integration path | Best signal source | Observability quality | Important limitation |
|---|---|---|---|---|
| Claude Code | Native hooks | Session, turn, and tool hooks | High | None significant for basic monitoring |
| Codex | Native hooks and non-interactive JSON output | Interactive hooks for sessions, codex exec --json for automation |
Medium in interactive mode, high in automation | Interactive tool hooks are currently Bash-focused |
| Kiro | Native hooks | Prompt, tool, and stop hooks | High | Fewer lifecycle events than Claude Code |
| OpenClaw | Plugin bridge | Plugin SDK hooks | Medium to high | Internal hooks are not enough by themselves for full tool-loop visibility |
start, thinking, working, notification, packing, and done.PreToolUse, PermissionRequest, and PostToolUse. For CI or batch jobs, codex exec --json exposes a much richer event stream.preToolUse and postToolUse, plus namespaced MCP tool names.| Character | Color | Description | Auto-selected for |
|---|---|---|---|
clawd |
Orange | Default character | Claude Code |
codex |
Green | Terminal robot | Codex |
kiro |
White | Ghost character | Kiro |
claw |
Red | Antenna character | OpenClaw |
All characters use image-based rendering (128x128 PNG). Character is auto-selected by bridge, not by the core display runtime. 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) |
# Claude Code example: 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
For Codex or Kiro, use the equivalent bridge path:
python3 ~/.codex/hooks/vibemon.py --lock
python3 ~/.kiro/hooks/vibemon.py --lock
OpenClaw uses its plugin bridge instead of a Python hook CLI.
| 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