Never lose track of a plate you're spinning.
- Status and summaries of each claude code session
- Sound notifications when one needs attention
- Optional tmux integration for window jumping
cargo install plate-spinnerOn Linux, you'll need ALSA development libraries for sound support:
sudo apt-get install libasound2-dev # Debian/UbuntuOr via installer script (includes pre-built binary, no build dependencies needed):
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/nishu-builder/plate-spinner/releases/latest/download/plate-spinner-installer.sh | shsp install # Prints hook config to add to ~/.claude/settings.json
sp auth set # Configure API key (optional, enables summaries)
sp # Open dashboard (terminal 1)
sp run # Start tracked plate (terminal 2)
sp run # Start another (terminal 3)| Icon | Status | Trigger |
|---|---|---|
. |
starting | Plate registered, no activity yet |
> |
running | Tool executing |
? |
awaiting_input | AskUserQuestion called |
! |
awaiting_approval | ExitPlanMode called |
- |
idle | Stop event received |
X |
error | Stop event with error |
x |
closed | Plate wrapper exited |
AI summaries appear when plates reach a waiting state (requires API key, see Authentication below).
sp Dashboard (auto-starts daemon)
sp run [args] Launch Claude with tracking
sp install Print settings.json hook config
sp kill Stop daemon
sp plates List plates as JSON
sp daemon Run daemon in foreground
sp auth Show authentication status
set Set API key (prompted)
unset Remove stored API key
path Print auth config path
sp config Manage configuration
path Print config file path
set <k> <v> Set a config value
export Export config to stdout
import <file> Import config from file
Claude Code
| hooks call `sp hook <type>`
v
sp hook session-start/pre-tool-use/post-tool-use/stop
| POST localhost:7890
v
sp daemon (SQLite + WebSocket) --> sp (TUI)
Config file: ~/.config/plate-spinner/config.toml
Plate-spinner has two modes of operation:
Default mode (tmux_mode = false):
spruns dashboard directly in your terminalsp runruns claude directly in your terminal- Each session runs in its own terminal window
- Dashboard is view-only (Enter does nothing on rows)
Tmux mode (tmux_mode = true):
spopens dashboard in a tmux windowsp runcreates a new tmux window for each claude session- All sessions share a tmux session with independent window views
- Press Enter on a dashboard row to jump to that session's window
- Navigate between windows with
ctrl-b wor dashboard
To enable tmux mode:
sp config set tmux_mode trueTmux mode requires tmux 3.2+.
Press s in the dashboard to open the settings menu:
- Theme:
default,light,monochrome - Mode:
minimal(compact) orexplicit(shows row numbers and status text) - Sounds: notification sounds when plates need attention
- Claude Code
- tmux 3.2+ (only if using tmux mode)
AI summaries require an Anthropic API key. Configure it with:
sp auth setThe key is stored in ~/.config/plate-spinner/auth.toml with restricted permissions (0600).
Alternatively, set the ANTHROPIC_API_KEY environment variable (takes precedence over the stored key).
cargo build
sp # daemon auto-restarts if binary changedThe daemon includes a build timestamp, so any sp command after rebuilding will detect the version mismatch and restart the daemon automatically. TUI changes require quitting (esc) and restarting sp.
cargo test # run tests
cargo fmt --all -- --check # check formatting
cargo clippy --all-targets --all-features -- -D warnings # run linterInstall pre-commit hooks to run formatting and linting checks before each commit:
./scripts/install-hooks.sh
