VS Code Extensions
Claude Status in Window Title

Claude Status in Window Title

by trollfred

Adds a ${claudeStatus} variable for window.title showing what Claude Code is doing in this workspace.

Downloads

4

Rating

5.0 / 5 (1)

Version

0.1.4

Last updated

Jul 31, 2026

Shows what Claude Code is doing in this workspace, directly in the VS Code window title — so you can see from the Dock, window switcher, or a background window whether Claude is still working, done, or waiting for your input.

Adds a ${claudeStatus} variable for the window.title setting (plus an optional status bar item).

How it works

Claude Code ──claude-vscode-status plugin (hooks)──▶ ~/.claude/vscode-claude-status/<session_id>.json
                                        │
                       extension watches the directory,
                       matches sessions to this window by cwd
                                        │
                                        ▼
             setContext ─▶ ${claudeStatus} in window.title + status bar

The Claude Code side is handled by the companion claude-vscode-status plugin: its hooks (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Notification, Stop, SessionEnd) run a dependency-free POSIX shell script that writes one status file per Claude session; SessionEnd deletes the file. This extension watches that directory, picks the sessions whose cwd overlaps this window's workspace folders, and exposes the aggregated status through a window title variable (VS Code 1.93+).

Statuses: working (processing a prompt / running tools), attention (waiting for permission or input), idle (session open, turn finished).

Setup

  1. Install this extension (VS Code Marketplace, or grab the .vsix from Releases and use “Extensions: Install from VSIX…”).

  2. Install the Claude Code plugin. Inside a claude session:

    /plugin marketplace add trollfred/claude-plugins
    /plugin install claude-vscode-status@trollfred
    

    Installing at user scope enables it for all projects; nothing is written into any repo.

  3. Add the variable to your title in your user settings:

    "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${claudeStatus}"
    
  4. Start a new Claude Code session in a terminal inside the workspace — hooks are read at session start, so already-running sessions won't report.

Settings

Setting Default Description
claudeStatus.format long emoji → “✳”, short → “✳ working”, long → “✳ Claude working”
claudeStatus.emoji.working / .attention / .idle ✳ / ⚠︎ / ✓ Emoji per status
claudeStatus.text.working / .attention / .idle working / needs you / idle Status word per status (short/long formats)
claudeStatus.showStatusBarItem false Also show the status in the status bar
claudeStatus.staleHours 12 Delete session files older than this (crash cleanup)
claudeStatus.statusDir ~/.claude/vscode-claude-status Where the plugin's hooks write status files

Notes & limitations

  • Requires VS Code 1.93+ for the ${claudeStatus} title variable (registerWindowTitleVariable). On older versions/forks without it, only the status bar item works.
  • If several matching sessions exist, the highest-priority status wins (attention > working > idle), with a count suffix like (2) when several sessions share it. Hover the status bar item to see each session.
  • A session's cwd matches a window if either contains the other, so a Claude session at a monorepo root lights up windows opened on its packages.
  • If Claude crashes without SessionEnd, its file lingers until the staleHours sweep; the last written status is usually idle (from Stop), so this is rarely noticeable.
  • When ${claudeStatus} is empty (no sessions), any separator you placed before it stays in the title. If that bothers you, bake separators into the label settings instead.

Development

  • npm install, then F5 to launch an Extension Development Host (the “Run Extension (test project)” launch config opens a sandbox folder).
  • For a quick plugin test without installing it: claude --plugin-dir /path/to/claude-vscode-status.
  • npm run package builds the .vsix; pushing a v* tag builds a GitHub Release with the .vsix attached, and publishes to the Marketplace when the VSCE_PAT repo secret is set (Azure DevOps PAT, scope Marketplace → Manage).
  • Local publish alternative: npx vsce publish -p <PAT>.

Related extensions