A Zellij status bar plugin that replaces the default tab bar with Claude Code activity awareness.
- Full tab bar — shows all Zellij tabs (not just Claude sessions), replacing the native tab bar
- Session & mode display — shows the Zellij session name and current input mode (NORMAL, LOCKED, PANE, etc.) with color-coded indicators
- Live activity indicators — see what every Claude Code session is doing at a glance; non-Claude tabs shown dimly
- Clickable tabs — click any tab to switch to it
- Smart pane focus — clicking a waiting (⚠) session focuses the exact pane so you can respond to the permission prompt immediately
- Permission flash — sessions pulse bright yellow for 2 seconds when a permission request arrives
- Desktop notifications — macOS notification on permission requests (rate-limited to once per 10s per tab), with click-to-focus support via terminal-notifier
- Elapsed time — shows how long a session has been in its current state (after 30s), making it easy to spot stuck sessions
- Multi-instance sync — all Zellij tabs show a unified view of all sessions
| Symbol | Meaning |
|---|---|
| Session starting | |
| Thinking | |
| Running Bash | |
| Reading / searching files | |
| Editing / writing files | |
| Spawning subagent | |
| Web search / fetch | |
| Other tool | |
| Waiting for user prompt | |
| Waiting for permission | |
| Done | |
| Idle |
Click the Zellaude prefix on the left side of the bar to open the settings menu. Click it again (or the × button) to close. Settings are persisted to ~/.config/zellij/plugins/zellaude.json.
| Setting | Options | Default | Description |
|---|---|---|---|
| Notifications | Always / Unfocused / Off | Always | Desktop notifications on permission requests. "Unfocused" only notifies when the requesting pane is on a different tab. |
| Flash | Persist / Brief / Off | Brief | Yellow flash on permission requests. "Persist" keeps flashing until resolved, "Brief" flashes for 2 seconds. |
| Elapsed time | On / Off | On | Show time since last activity (appears after 30s). |
Add the plugin to your Zellij layout — that's it:
default_tab_template {
pane size=1 borderless=true {
plugin location="https://github.com/ishefi/zellaude/releases/latest/download/zellaude.wasm"
}
children
}On first load, the plugin automatically installs the hook script and registers it with Claude Code. No cloning, no install scripts.
Prerequisites: Rust (in addition to the above)
git clone https://github.com/ishefi/zellaude.git
cd zellaude
./install.shThis builds the WASM plugin and copies it to ~/.config/zellij/plugins/. Hook registration happens automatically when the plugin loads.
Then add the plugin to your Zellij layout (replaces the default tab bar):
default_tab_template {
pane size=1 borderless=true {
plugin location="file:~/.config/zellij/plugins/zellaude.wasm"
}
children
}Or try the included layout directly:
zellij --layout layout.kdlFor desktop notifications that focus the right pane when clicked, install terminal-notifier:
brew install terminal-notifierWithout it, notifications still appear via osascript but clicking them won't focus the pane.
./install.sh --uninstallTwo components:
- WASM plugin — runs inside Zellij, receives events, maintains state in memory, renders the status bar, sends desktop notifications. On first load, writes the hook script to
~/.config/zellij/plugins/zellaude-hook.shand registers it in~/.claude/settings.json. - Hook script — a thin bash bridge that forwards Claude Code hook events to the plugin via
zellij pipe
Claude Code hook → zellaude-hook.sh → zellij pipe → plugin → render
The hook script and registration are version-tagged and updated automatically when the plugin version changes.
All state lives in WASM memory. No temp files, no race conditions. Multiple plugin instances (one per tab) sync state automatically via inter-plugin messaging. Sessions are cleaned up automatically when tabs are closed.
MIT