Claude State Bar
Claude Code context usage + Claude.ai plan usage (5-hour session & weekly) in your VS Code status bar — with a live Workflow/Agent viewer panel, sound alerts, Remote‑SSH support, Telegram reset alerts, and a bilingual settings panel.
🇰🇷 한국어 문서: README.ko.md
Two layers in one status bar
Claude State Bar shows two complementary things, merged into a single hover tooltip with clearly separated sections:
🧠 claudeContext — Claude Code context monitor
Reads Claude Code's local session logs (~/.claude/projects/*.jsonl) and shows, per active session:
- Live context usage % (tokens used vs. the model's limit)
- Per‑session monitoring — each Claude Code session gets its own status‑bar item
- Model‑aware limits — Opus 4.x / models with
1m in their ID → 1,000,000 tokens; others → 200,000 (configurable)
- Model + effort + speed — e.g.
Opus 4.7 · xHigh⁺ · ⚡fast (see Effort display)
- Color‑coded warnings — normal / warning (≥50%) / danger (≥75%) backgrounds
- Two‑tier idle — sessions dim after
idleTimeout (default 180s) and fully hide after hideAfter
- Ghost‑session detection — hides stale sessions after
/clear or tab close; auto‑unhides on new activity
- Compact mode & custom short names —
my-cool-project → MCP, typescript → Tscript
- Live activity indicator — shows elapsed seconds while Claude is thinking (🤔) or responding
📊 claudeState — Claude.ai plan usage
Fetches your account‑wide plan usage directly from claude.ai (no SDK, no extra service):
- 5‑hour session limit % with reset countdown (merged into the first session item)
- Weekly usage %, plus per‑model Sonnet / Opus breakdown in the tooltip
- Session‑reset detection → optional Telegram notification when your 5‑hour window resets
- Credentials (Session Key, Bot Token) are stored encrypted via VS Code SecretStorage
🌐 Remote‑SSH support
Working over Remote‑SSH? Claude State Bar runs as a UI (local) extension so it can do both jobs at once:
- Plan usage is fetched from your local machine via Electron's network stack — this passes Cloudflare's bot challenge. (Plain Node
https from a remote/headless host gets a Cloudflare 403, and cloud/datacenter IPs such as AWS EC2 are blocked regardless of TLS fingerprint.)
- Token counts are read from the remote host's
~/.claude/projects through vscode.workspace.fs, which VS Code transparently routes over the SSH connection. The remote home is auto‑detected (/root, else /home/*).
Install once locally — all your Remote‑SSH windows update automatically. Because this is a ui-kind extension, you never need to reinstall it on each server.
In a Remote‑SSH window you see remote session token usage and your plan usage together, in one place. If a host genuinely can't reach claude.ai, the bar shows an honest "plan usage unavailable here" notice instead of a misleading "expired" error.
🎬 Workflow & Task Agent viewer panel
Open the Workflow Viewer from the session QuickPick menu to see a live WebView panel of every active Claude Code workflow and Task (Agent tool) sub‑agent:
- Workflow progress — each workflow appears as a card with its phases, running/done agents, per‑agent summary, elapsed time, and live activity
- Full result expand — long final reports fold into a
▶ summary toggle so you can read the full output without clutter
- Role labels — each agent's role is auto‑extracted from its prompt header, so you see "Lens A: Bug Detection" instead of "agent-1"
- Task (Agent tool) sub‑agents — sub‑agents spawned via Claude Code's Agent tool are shown separately, grouped into batches by start time (5‑minute gap = new batch)
- Per‑batch 🗑 cleanup — delete finished task‑agent logs for a specific batch while keeping any still‑running agents untouched
- Details-open persistence — expanded
<details> panels stay open across live re‑renders
- Font size control —
A− / A+ buttons adjust the panel text size
- Bilingual UI — full EN / 한국어 toggle, same as the settings panel
🎚️ Effort level display
The status bar and tooltip show Claude Code's current effort level:
effortLevel value |
Status bar |
Meaning |
xhigh |
xHigh⁺ |
xhigh persisted to disk. If ultracode (/ultracode) was active, its dynamic‑workflows component is runtime‑only and indistinguishable from plain xhigh — the ⁺ marks this approximation. |
ultracode / ultra |
🚀 Ultra |
Shown when the session‑scoped ultracode flag is detected at runtime. |
high / medium / low / max |
displayed as‑is |
Standard effort levels |
Additional speed indicators:
- ⚡ —
/fast mode is active
- 💭 — the most recent response contained a
thinking block (extended thinking)
🔔 Sound alerts
Claude State Bar plays configurable WAV sounds for key events:
| Event |
Default sound |
Setting |
| Context reaches warning threshold |
Ring01.wav |
soundWarning / soundWarningGain |
| Context reaches danger threshold |
Ring02.wav |
soundDanger / soundDangerGain |
Claude finishes a response (end_turn) |
tada.wav |
soundCompletion / soundCompletionGain |
| Claude pauses to ask a question |
Speech On.wav |
soundQuestion / soundQuestionGain |
| All workflow / task‑agent sub‑agents complete |
Ring06.wav |
soundWorkflow / soundWorkflowGain / workflowCompleteBeep |
All sound paths can be overridden with your own WAV file. Gain is adjustable from 50% to 5000% (values above ~300% may distort). Use Claude State Bar: Test Beep Sound from the Command Palette to preview.
Workflow‑complete beep gate — the beep fires only when the extension watches a workflow transition from running → done in the current session. Stale workflows already done when VS Code starts are baselined silently.
Hovering any session item shows one tooltip split into two clearly labelled, colour‑divided sections:
my-project (a1b2c3d4)
──────── claudeState ────────
📊 Session: 30% — 5:40 PM (in 3h 27m)
📅 Weekly: 20% — 3:00 PM (Sat)
Sonnet: 4% Opus: —%
──────── claudeContext ────────
🤖 Model: claude-opus-4-7
🎚️ Effort: xHigh⁺
📊 Context Usage: 4%
| Cache Read | 8K | | Cache Creation | 28K | | Total | 37K / 1.0M |
🕐 Last updated: 2:10:58 PM
Click for menu (hide / restore / settings)
⚙️ Settings panel (webview, EN/KO)
Open Claude State Bar: Open Settings Panel from the Command Palette for a single panel with a runtime English / 한국어 toggle. It collects Org ID, Session Key, refresh interval, Telegram Bot Token (auto‑detects your Chat ID), sound settings (with preview), and context‑monitor options. Sensitive values go to encrypted SecretStorage; everything else syncs with VS Code settings.
How to get your credentials
- Org ID — claude.ai → DevTools → Network → any
/api/organizations/{UUID}/… request
- Session Key — claude.ai → DevTools → Application → Cookies →
sessionKey
🔔 Telegram session‑reset alerts (optional)
Add a Telegram Bot Token in settings, send your bot any message, click "Link my Telegram" (Chat ID auto‑detected), and you'll get a notification every time your Claude 5‑hour session window resets.
🧹 Zombie status‑bar cleanup
When VS Code updates the extension while a window is open, the old instance's status‑bar items can remain as unresponsive "zombie" pixels. Claude State Bar handles this two ways:
- Version‑change detection — on activation, if the version changed since last run, a one‑time "Reload window to clear stale items?" notice appears.
- QuickPick cleanup — the session menu always contains a 🗑 Clean up stale/zombie items (Reload Window) option.
Configuration
All keys are prefixed claudeContextBar.* or claudeState.*.
Core display
| Setting |
Default |
Description |
claudeContextBar.autoColor |
true |
Assign a unique pastel colour per project |
claudeContextBar.baseColor |
White |
Base colour when auto‑colour is off |
claudeContextBar.contextLimitDefault |
200000 |
Context limit for standard models |
claudeContextBar.contextLimitOpus |
1000000 |
Context limit for 1M‑context models (Opus 4.x) |
claudeContextBar.warningThreshold |
50 |
% for yellow warning background |
claudeContextBar.dangerThreshold |
75 |
% for red danger background |
claudeContextBar.refreshInterval |
30 |
Refresh interval (seconds) |
claudeContextBar.idleTimeout |
180 |
Seconds before a session is dimmed |
claudeContextBar.hideAfter |
86400 |
Seconds before a session is hidden (≥ idleTimeout) |
claudeContextBar.scope |
workspace |
workspace (current folders only) or all |
claudeContextBar.showModel |
true |
Show model name next to the percentage |
claudeContextBar.compactMode |
false |
Shorten project names |
claudeContextBar.shortNames |
{} |
Custom short names, e.g. {"my-project":"MP"} |
claudeContextBar.autoCleanupOldVersions |
true |
Auto‑delete older installed versions on activate |
Sound alerts
| Setting |
Default |
Description |
claudeContextBar.soundWarning |
"" |
WAV path for warning threshold alert (empty = built‑in) |
claudeContextBar.soundWarningGain |
100 |
Warning sound gain % (50–5000) |
claudeContextBar.soundDanger |
"" |
WAV path for danger threshold alert |
claudeContextBar.soundDangerGain |
100 |
Danger sound gain % |
claudeContextBar.soundCompletion |
"" |
WAV path for response‑complete (end_turn) beep |
claudeContextBar.soundCompletionGain |
100 |
Completion sound gain % |
claudeContextBar.completionBeepSettleMs |
3000 |
Settle window (ms) before firing completion beep |
claudeContextBar.soundQuestion |
"" |
WAV path for question‑pause beep |
claudeContextBar.soundQuestionGain |
100 |
Question sound gain % |
claudeContextBar.soundWorkflow |
"" |
WAV path for workflow/all‑agents‑complete beep |
claudeContextBar.soundWorkflowGain |
100 |
Workflow complete sound gain % |
claudeContextBar.workflowCompleteBeep |
true |
Fire beep when all workflow/task‑agents complete |
claudeContextBar.detectStuckToolUse |
false |
Heuristic: beep if a tool_use has no follow‑up for stuckToolUseThresholdSec |
claudeContextBar.stuckToolUseThresholdSec |
90 |
Seconds of tool_use silence before stuck‑tool heuristic fires |
Plan usage
| Setting |
Default |
Description |
claudeState.orgId |
"" |
claude.ai Organization ID |
claudeState.language |
en |
Settings‑panel language (en / ko) |
claudeState.refreshIntervalSec |
300 |
Plan‑usage poll interval (seconds) |
(Session Key, Bot Token and Chat ID are stored in SecretStorage, not in settings.json.)
Requirements
- VS Code 1.74.0+
- Claude Code running and writing session logs to
~/.claude/projects/
- For plan usage: a claude.ai account (Org ID + Session Key)
How it works
No network calls except the optional claude.ai plan‑usage fetch and Telegram. Context monitoring is pure disk reads of Claude Code's JSONL logs via vscode.workspace.fs (local or remote). Plan usage calls the claude.ai usage endpoint using Electron's Chromium network stack (to pass Cloudflare) with a plain‑https fallback. The workflow viewer reads ~/.claude/projects/<slug>/<uuid>/subagents/ directly from disk.
Credits
Original context‑monitoring core by Ed Zisk (@ezoosk). This extension builds on that foundation, adding Claude.ai plan usage, Remote‑SSH support, Telegram notifications, a webview settings panel, workflow/agent viewer, sound alerts, and more — maintained by Blueming.
License
MIT © 2026 Blueming. Original core © 2025 Ed Zisk.