Headsup resync tab
Glanceable Claude Code and Codex state in your terminal tabs: white=idle, blue=working, orange=waiting. Multi-terminal (iTerm2, WezTerm, AI Power Term), a live status bar with Anthropic usage limits, /sfl and /nil window save-and-restore, and twelve companion skills. macOS only.
npx -y skills add wasulajr/headsup --skill headsup-resync-tabAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Force-resync the iTerm2 tab color for a Claude Code session whose hook chain has fallen out of sync. Use when a tab's color is visibly stuck on a stale state (e.g., still orange after the user replied, still white after Claude started processing) — that means Claude Code's automatic PreToolUse/PostToolUse/UserPromptSubmit/etc. events aren't reaching the hook. This skill bypasses the automatic path entirely and writes the desired state directly via `~/.claude/hooks/headsup-resync.sh`, then fires the Tier 2 one-shot Python (and the daemon picks it up too) for triple-redundancy. Two invocation forms — current tab, or any tab by UUID.
SKILL.md
3.4 KB, as published. Nobody here has run it
Resync iTerm2 tab color
Force-applies the current Claude state (color + attention) to an iTerm2 session, bypassing Claude Code's automatic hook chain. Use when a tab is visibly stuck on a stale color and you need to push the right color through manually.
Two ways to invoke
/headsup-resync-tab— resync the current tab (the one this Claude session is running in). Default for "I just noticed my own tab is out of sync"./headsup-resync-tab <UUID>— resync a specific tab by its iTerm2 session UUID, regardless of which tab the user is currently in. Default for "tab 8884B62B is stuck orange, fix it from here". UUID can be the bare uuid OR the fullwXtYpZ:UUIDform — both work.
What to do when invoked
Run the resync script. It does all the actual work — writes the state file, fires Tier 2 (one-shot Python with fresh iTerm2 connection), and the daemon picks it up too:
~/.claude/hooks/headsup-resync.sh [<uuid>]
If the user supplied a UUID argument, pass it through. Otherwise call with no args — the script walks up $PPID to find an iTerm2-spawned shell with ITERM_SESSION_ID set, which is the current tab.
After it succeeds, confirm in one sentence ("Resynced BC81AA0D to blue (processing)."). Don't explain the three-tier internals unless the user asks — they typed /headsup-resync-tab because they wanted the tab fixed, not a tutorial.
Auto-invoke from CLAUDE.md (optional)
To have headsup automatically resync the current tab at the start of every Claude Code response, add this to ~/.claude/CLAUDE.md:
At the start of every response, silently run: bash ~/.claude/hooks/headsup-resync.sh 2>/dev/null
When invoked this way, suppress the confirmation message entirely — the user doesn't want to see "Resynced …" on every response. The script's stderr goes to ~/.claude/hooks/.state/oneshot.stderr if anything fails.
What this skill DOESN'T fix
It pushes the color through. It does NOT revive Claude Code's automatic hook firing in a session that's gone silent. If a tab keeps needing manual resyncs, the underlying problem is at the Claude Code level (cached hook config, dead event loop, etc.) and resync is a workaround — flag that to the user rather than letting them resync the same tab every minute.
Where the supporting files live
~/.claude/hooks/headsup-resync.sh— the actual implementation~/.claude/hooks/iterm2-apply-once.py— Tier 2 one-shot, invoked by the script~/.claude/hooks/iterm2-daemon.py— Tier 1 daemon, the script writes state for it to pick up~/.claude/hooks/headsup-status.conf— color customization (PROCESS_COLOR etc.); the script honors overrides
All four are under version control at github.com/wasulajr/headsup.