Tabs get confusing when several Claude Code sessions are open. This plugin makes every tab lead with a short per-project name, followed by live status:
| Tab title | Meaning |
|---|---|
shea ● fix the failing xUnit te… |
Working (shows your latest prompt, truncated) |
shea ✓ |
Done — waiting for your next prompt |
shea ⚠ |
Needs your input (permission prompt or idle) |
The name is the directory basename by default; set a custom short name once
per project with /nametag.
/plugin marketplace add jfgreco/nametag
/plugin install nametag@greco-plugins
Requires a recent Claude Code (2026+) — the plugin relies on the
terminalSequence hook output field. Requires Node.js on PATH (Claude Code
already requires this). If tab titles never change after installing, update
Claude Code (run claude update) — older releases ignore the
terminalSequence hook output field.
/nametag shea— set the tab name for the current project/nametag— show the current name and where it comes from/nametag --clear— revert to the directory-name fallback
Names are stored in ~/.claude/nametags.json (plain JSON, hand-editable).
Run the test suite from the repo root:
node --test
Lifecycle hooks (SessionStart, UserPromptSubmit, Notification,
PostToolUse, Stop, SessionEnd) run a small dependency-free Node script
that emits an OSC 0 title sequence via the hook terminalSequence output.
Claude Code has no setting to disable its own AI-generated titles, so the
plugin simply re-asserts its title on every event — including after every
tool call — to stay the last writer.
- Windows Terminal: works out of the box. Do NOT enable
suppressApplicationTitlein your profile — it blocks this plugin's titles too. - macOS Terminal.app: works; some zsh setups append their own title text.
- tmux: needs
set -g set-titles on. - VS Code integrated terminal: include
${sequence}in theterminal.integrated.tabs.titlesetting.