| Symbol | Meaning |
|---|---|
● | Session is running in this wsx process |
↻ | Resumable — a prior claude session exists for this worktree; attach to continue |
○ | No session ever started here |
✕ | Workspace state is Failed (worktree creation didn't succeed) |
[setup-failed] badge | Setup script exited non-zero; workspace is otherwise usable (? then o shows the log) |
Activity column for running sessions:
active— output within the last 2 secondsidle— output within the last 30 secondswaiting— no output for over 30 secondsoff— no current sessionresumable— prior session exists, not currently running
Multiple agents
A non-primary agent's colored cell in the dashboard's agent strip becomes a
spinner when its running session has produced terminal output within the last
2 seconds. It returns to a bar when quiet; exited peers leave the strip.
If peers overflow the strip, the + marker animates while any hidden peer is active.
This is terminal activity, not task status: typing or a resize repaint can
briefly animate a peer cell too. The workspace's task-status glyph, section,
age, details, and attention alerts are unchanged. Peer output does not move a
completed workspace into WORKING, and a primary question remains visible
alongside the peer indicator.
Activity sub-line
Below each workspace row, wsx shows the most recent event from claude's
session log (tailed from ~/.claude/projects/<encoded-cwd>/):
● fix-bug bakedbean/fix-bug ~3 ?1 active
└ ran `cargo test --workspace` (3s ago)
The sub-line updates on the 2-second poll tick. Workspaces with no claude session yet show no sub-line. Recognized events:
- User message →
user: <text> - Assistant text →
<text> - Assistant tool use (Bash) →
ran `<command>` - Assistant tool use (other) →
using <ToolName>
Lines longer than ~70 characters are truncated with an ellipsis.
Diff counts column
Compact summary of git status per workspace, refreshed every 2 seconds:
| Symbol (plain) | Symbol (nerd) | Meaning |
|---|---|---|
~N | N | Modified/staged/added/deleted tracked files |
?N | N | Untracked files |
↑N | N | Commits ahead of upstream |
↓N | N | Commits behind upstream |
Zero values omitted. Clean workspaces show nothing in this column.
Attention alerts
wsx watches each workspace for two distinct "user needs to act" signals:
- A
tool_useevent in the session log has been pending for ≥3 seconds — almost always means claude is showing a permission prompt for a tool. In this case the activity column readsawaitingand the sub-line shows└ ⚠ awaiting permission: <tool> (<age>). - The claude session has gone ≥30 seconds without producing PTY output
(state flips from
activeoridletowaiting).
On either transition wsx considers the workspace to need attention:
- A terminal bell (
\x07) is written to stdout. Your terminal config decides whether to beep, flash, or ignore. wsx also clears the terminal's bell urgency hint (private mode1042) while it runs, so on terminals that honour it (Alacritty, xterm) the bell does not ask the window manager for attention. That matters on Hyprland withmisc:focus_on_activate = true(Omarchy's default), where an urgency request switches the OS workspace to the terminal. On exit wsx puts the mode back only if the terminal reported it on at startup, so xterm (off by default) and a session that turned it off stay that way. Terminals without mode 1042 (kitty, foot, ghostty) keep their own bell-urgency setting; the sequence also does not cross a tmux boundary. - A
!marker appears at the start of the workspace's row on the dashboard.
The marker clears the moment you attach to the workspace (Enter on the row).
The first observation of any workspace establishes a baseline; no bell rings
for workspaces that are already in waiting or awaiting state when wsx
launches.
Turn off both via wsx config set notifications off.