Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "zomp",
"description": "Zomp's Claude Code plugins. Currently skills for Zomp.SyncMethodGenerator, the .NET source generator which writes the sync half of a sync/async method pair",
"description": "Zomp's Claude Code plugins: skills for Zomp.SyncMethodGenerator, the .NET source generator which writes the sync half of a sync/async method pair, and Windows Terminal tab status",
"owner": {
"name": "Zomp"
},
Expand All @@ -10,6 +10,12 @@
"source": "./plugins/sync-method-generator",
"description": "Generate the sync half of a C# sync/async method pair with Zomp.SyncMethodGenerator instead of hand-maintaining both",
"version": "0.1.0"
},
{
"name": "wt-tab-status",
"source": "./plugins/wt-tab-status",
"description": "Show which Windows Terminal tabs have Claude working (progress ring) and which finished while you were away (bell), even on renamed tabs and split panes",
"version": "0.1.0"
}
]
}
37 changes: 37 additions & 0 deletions plugins/wt-tab-status/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# wt-tab-status

Shows the state of every Claude Code session on its Windows Terminal tab, so you can tell at a glance which tabs need you.

| Tab icon | Meaning |
| ------------- | -------------------------------------------------------------------------------- |
| Spinning ring | Claude is working in at least one pane of the tab |
| Bell | Claude finished while you were looking elsewhere; cleared when you focus the tab |
| Normal icon | Nothing new |

It works on renamed tabs, where a renamed title hides the spinner Claude Code writes into the window title, and on tabs split into several panes, where Windows Terminal combines the progress of all of them.

## Install

```sh
claude plugin marketplace add zompinc/sync-method-generator --sparse .claude-plugin plugins
claude plugin install wt-tab-status@zomp
```

Sessions already running pick it up after a restart.

## How it works

Four hooks write terminal sequences through the hook output's `terminalSequence` field:

- `UserPromptSubmit` starts an indeterminate progress ring (`OSC 9;4;3`).
- `Stop` and `StopFailure` clear the ring (`OSC 9;4;0`) and ring the bell (`BEL`). Windows Terminal marks an unfocused tab with a bell icon until it is focused.
- `SessionEnd` clears the ring.

The hooks run through `bash`, which on Windows means Git Bash.

## Notes

- With Windows Terminal's default `bellStyle` the bell is also audible. For a silent marker, set `"bellStyle": "taskbar"` under `profiles.defaults`, which flashes the taskbar instead.
- The ring keeps spinning while Claude waits on a permission prompt.
- Claude Code's own progress sequences (`terminalProgressBarEnabled`) can clear the ring partway through a turn. Turn that setting off if the ring stops early.
- Other terminals may ignore the progress sequence; the bell then beeps or flashes as that terminal does.
52 changes: 52 additions & 0 deletions plugins/wt-tab-status/hooks/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "echo '{\"terminalSequence\": \"\\u001b]9;4;3;\\u0007\"}'",
"timeout": 5
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "echo '{\"terminalSequence\": \"\\u001b]9;4;0;\\u0007\\u0007\"}'",
"timeout": 5
}
]
}
],
"StopFailure": [
{
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "echo '{\"terminalSequence\": \"\\u001b]9;4;0;\\u0007\\u0007\"}'",
"timeout": 5
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"shell": "bash",
"command": "echo '{\"terminalSequence\": \"\\u001b]9;4;0;\\u0007\"}'",
"timeout": 5
}
]
}
]
}
}
12 changes: 12 additions & 0 deletions plugins/wt-tab-status/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "wt-tab-status",
"version": "0.1.0",
"description": "Show which Windows Terminal tabs have Claude working (progress ring) and which finished while you were away (bell), even on renamed tabs and split panes",
"author": {
"name": "Zomp"
},
"homepage": "https://github.com/zompinc/sync-method-generator",
"license": "MIT",
"keywords": ["windows-terminal", "terminal", "notifications", "hooks"],
"hooks": "./hooks/hooks.json"
}
Loading