Claude Terminal Title
Stop guessing which terminal is which.
Let Claude give them real names — automatically.
Install
One step. In Cursor / VS Code:
- Open the Extensions panel (
Cmd+Shift+X)
- Search "Claude Terminal Title"
- Click Install
That's it. No terminal commands. No config.
What happens after you click Install
🔍 The extension finds every terminal already running Claude and labels them Claude • <folder>. New ones get labeled the moment Claude starts.
✨ Claude renames its own tab once it understands what you're working on — usually after the first prompt or two. It picks short, meaningful titles like Auth Refactor or BUG-42 Login Fix.
🔒 Once renamed, the title sticks. No more flip-flopping every prompt. (Switch this in settings if you want continuous updates.)
🎯 Override anytime — /title <name> from inside Claude, or Cmd+Shift+P → Claude: Set Terminal Title.
Settings
Open settings → search "claude terminal title":
| Setting |
What it does |
updateMode |
firstOnly (default) — Claude renames once per terminal, then it's locked. always — Claude can rename whenever. |
skipClaudeIntegrationPrompt |
Mute the one-time install prompt. |
Commands
All under Cmd+Shift+P:
| Command |
When to use |
Claude: Set Terminal Title |
Manual rename. Also on the terminal right-click menu. |
Claude: Reset Terminal Title |
Undo the lock — let Claude rename again. |
Claude: Re-scan Terminals For Claude |
Found a Claude terminal that didn't get labeled? Run this. |
Claude: Install Claude Code Integration |
Re-runs the one-time skill setup if you skipped it. |
🔒 Privacy & safety
Short version: tiny, local, easy to read.
- No network calls. Ever. The extension is fully offline.
- No telemetry, no analytics, no error reporting. Nothing leaves your machine.
- Only touches
~/.claude/ and ~/.claude-terminal-title. That's the whole file-access scope.
- Asks before installing anything. The Claude Code integration is opt-in — you'll see a prompt with
Install / Not now / Don't ask again.
- Backs up
~/.claude/settings.json to settings.json.bak before changing it, and uses an atomic write (temp-file + rename) — a crash can't leave it half-written.
- Refuses malformed settings. If your
settings.json is broken JSON, the extension tells you and aborts — never silently overwrites.
- Refuses symlink redirection. The installer
lstats every destination and refuses to write through a planted symlink.
- No shell exec. Process detection uses
spawn with array arguments — no string interpolation, no injection surface.
- Strips control characters from titles so a hostile title can't corrupt your terminal UI.
- Open source, MIT. Read the source on GitHub.
How it works (one diagram)
Claude (or you) file watcher your tab
─────────────── ───────────── ─────────
writes a title ─► ~/.claude-terminal-title ─► renamed ✨
OSC \e]0;TITLE\a doesn't propagate reliably through Claude's Bash subshell. A file is dumb and reliable — anything that can write a file can rename your tab.
🤖 What gets installed in ~/.claude/?
When you accept the one-time prompt:
~/.claude/skills/terminal-title/SKILL.md — tells Claude when to rename
~/.claude/skills/terminal-title/scripts/set_title.sh — what Claude actually runs
~/.claude/commands/title.md — the /title <name> slash command
~/.claude/settings.json — gets a SessionStart hook that auto-titles new + resumed conversations to the current folder/branch
All of it removable from the extension's command palette.
📦 Distribute to your team
Tell them to install the extension from the Cursor/VS Code marketplace. That's it.
🔧 Build from source
git clone https://github.com/ranmedina/claude-terminal-title.git
cd claude-terminal-title/extension
npx @vscode/vsce package --no-dependencies
cursor --install-extension ./claude-terminal-title-*.vsix --force
🚀 Cut a new release (maintainers)
./publish.sh # patch bump
./publish.sh minor
./publish.sh major
export OVSX_PAT="<from https://open-vsx.org/user-settings/tokens>"
./publish-openvsx.sh
MIT · made because tabs that say node are an insult.