wez-sidebar
WezTerm sidebar / dock for monitoring Claude Code sessions, usage limits, and tasks.
| Sidebar (MacBook) | Dock (external monitor) |
|---|---|
![]() |
![]() |
| Mode select | Overlay |
|---|---|
![]() |
![]() |
Features
- Session monitoring - Track active Claude Code sessions with status (running / waiting input / stopped), uptime, and task progress
- Yolo mode detection - Automatically detects
--dangerously-skip-permissionssessions via process tree inspection - Usage limits - Anthropic API usage (5-hour and weekly limits) with color-coded indicators, updated via hook with 10-min cooldown
- Task management - Built-in CLI (
wez-sidebar task add/done/list) and optional JSON file for external integrations - Built-in hook handler - Manages
sessions.jsonautonomously; no external dependencies required - Two display modes - Sidebar (right bar for MacBook) or Dock (bottom bar for external monitors)
- Pane integration - Switch to any session's WezTerm pane with Enter or number keys
- Desktop notifications - macOS notification on permission prompts (via
terminal-notifier)
Requirements
- WezTerm
- Claude Code
- Rust toolchain (for building)
Install
Binary (no Rust required)
# macOS (Apple Silicon)
&&
# macOS (Intel)
&&
# Linux (x86_64)
&&
Cargo
From source
Quick Start
Run the setup wizard:
This will:
- Register Claude Code hooks in
~/.claude/settings.json - Guide you through task management setup (optional)
- Show WezTerm keybinding examples
Manual setup
1. Register hooks
Add the following to ~/.claude/settings.json:
2. Configure WezTerm
Add a keybinding to open the sidebar:
That's it. No config file needed — it works out of the box.
Session Markers
| Marker | Meaning |
|---|---|
| 🟢 | Current pane |
| 🔵 | Other pane |
| 🤖 | Yolo mode (--dangerously-skip-permissions) |
| âš« | Disconnected |
| Status | Meaning |
|---|---|
| â–¶ | Running |
| ? | Waiting for input (permission prompt) |
| â– | Stopped |
Task Management (Optional)
wez-sidebar includes a built-in task CLI. Tasks are stored in ~/.config/wez-sidebar/tasks.json.
# Add a task
# List tasks
# Complete a task
To show tasks in the TUI panel, set tasks_file in your config:
# ~/.config/wez-sidebar/config.toml
= "~/.config/wez-sidebar/tasks.json"
The TUI watches the file for changes and updates in real-time.
You can also write the same JSON format from external tools (Asana sync scripts, GitHub Actions, etc.):
Configuration
All settings are optional. Create ~/.config/wez-sidebar/config.toml only if you need to customize.
| Key | Default | Description |
|---|---|---|
wezterm_path |
auto-detect | Full path to WezTerm binary |
stale_threshold_mins |
30 |
Minutes before a session is considered stale |
data_dir |
~/.config/wez-sidebar |
Directory for sessions.json and usage-cache.json |
tasks_file |
(none) | Path to tasks JSON file (enables TUI task panel) |
hook_command |
(built-in) | External command to delegate hook handling |
api_url |
(none) | REST API base URL for remote task fetching |
See config.example.toml for details.
Hook Delegation
By default, wez-sidebar hook handles everything internally. To delegate to an external tool (while keeping built-in session management):
= "my-custom-tool hook"
The external command receives the hook payload on stdin after wez-sidebar updates sessions.json.
Display Modes
Sidebar (default)
Dock (horizontal bottom bar)
Keybindings
| Key | Sidebar | Dock |
|---|---|---|
j/k |
Move up/down | Move up/down |
Enter |
Switch to pane | Switch to pane |
t |
Tasks mode | - |
Tab/h/l |
- | Switch column |
p |
Toggle preview | - |
f |
Toggle stale sessions | Toggle stale sessions |
d |
Delete session | Delete session |
r |
Refresh all | Refresh all |
? |
Help | Help |
q/Esc |
Quit | Quit |
Architecture
Claude Code ──hook──→ wez-sidebar hook <event>
│
sessions.json (session state)
usage-cache.json (API usage, 10-min cooldown)
│
file watcher
│
wez-sidebar TUI
License
MIT



