Claudelike Bar app icon — three horizontal stripes (cyan, teal, pink) with status dots, in a rounded square

VS Code Extension v0.18.2

Live status tiles for every Claude Code terminal.

A sidebar that shows what every Claude is doing at a glance — animated dots, color-coded borders, drag-to-reorder, context-window tracking, and a passive-aggressive mode that guilt-trips you when you ignore it.

What the tile tells you

Four dots, seven colors, one number.

Every signal is small on purpose. The sidebar should read at a glance, not demand a tutorial.

Status dots

Waiting — amber blink, needs your input.
Ignored — red slow pulse + dashed border. Was waiting, you looked away.
Working — green pulse.
Done — cyan static. Parked at the bottom.
Idle — no dot.

Context badge

ctx 22% Blue — under 60%.
ctx 63% Amber — 60–79%, start thinking about compact.
ctx 84% Red — 80%+, compact or bail.

Theme (left border)

+ any hex, rgb, hsl, or CSS var

Right-click any tile New

Mark as done parks a session. It sinks to the bottom of auto-sort, the dot goes quiet, and background events won't re-surface it until you submit the next prompt.

Clone, set color, kill — all one click from the menu, no file editing.

Features over time

Sixteen days, fifteen versions.

First commit went up on April 4, 2026. This is where the bar has traveled since — from first push to now.

  1. 0.1–0.2

    First push Apr 4 · Day 1

    Initial sidebar dashboard for Claude Code terminals went up in the afternoon. Before the day was over, v0.2 landed: DOM diffing instead of full re-renders, context % in the statusline, sticky waiting tiles, thicker left borders. The live preview page went up the same evening.

  2. 0.3–0.5

    Named, configured, set up Apr 5–10 · Days 2–7

    • v0.3.1 — renamed from the generic "dashboard" to Claudelike Bar; ID-based identity; the first right-click menu.
    • v0.4.0 — real config file, per-terminal nicknames, auto-start, hooks shipped with the extension.
    • v0.5.1 — one-command setup script, JSONC config with comments, comprehensive docs. "Point Claude at it" became the first install option.
    • v0.5.2 — esbuild bundling fix for jsonc-parser.
  3. 0.7

    Drag, drop, done Apr 11–12 · Days 8–9

    The version where the interaction model clicked.

    • v0.7.1 — per-terminal command override, drag/drop reorder, mark as done, explicit sortMode auto/manual, state-machine fixes.
    • v0.7.2–.6 — post-review polish, ignored-state bug fix, debug-log docs, public-use rename sweep, Open VSX listing metadata.
    • Tests & CI — vitest suite and a 3-OS GitHub Actions matrix (Ubuntu / macOS / Windows).
  4. 0.8

    Ready for the Marketplace Apr 13–14 · Days 10–11

    • v0.8.0 — hook rewritten in Node.js with os.tmpdir() and 3-tier matching (terminal name → path → basename) so it works identically on Windows, macOS, and Linux.
    • v0.8.1 — marketplace-ready install flow: single VSIX, onboarding modal, explainer screen.
    • v0.8.2 — standalone statusline module so context % no longer depends on the full extension.
  5. 0.9

    Deeper state awareness, Windows parity Apr 14–16 · Days 11–13

    Hook coverage went from "a few events" to everything the Claude Code CLI emits, and the whole thing started working the same way on Windows.

    • v0.9.0 — multi-agent, error, and notification matchers.
    • v0.9.1 — SessionStart/End lifecycle, tool errors, compaction events.
    • v0.9.2 — Windows / PowerShell / git-bash parity via createTerminal({env}); standalone statusline with backup + restore.
    • v0.9.3–.5 — state-machine fixes across permission/subagent/session flows; cross-platform cwd option with automatic migration.
  6. 0.10

    Path identity, global config Apr 16 · Day 13

    Two evenings of refactoring that reshaped how projects are keyed and where config lives.

    • Path-based identity (v0.10.0) — projects keyed by absolute path, not basename. Two api folders in different trees get distinct collision-resistant slugs.
    • Global config at ~/.claude/ (v0.10.1) — one claudelike-bar.jsonc across every VS Code window, next to your hooks and settings. Workspace-local configs auto-migrate on first load.
  7. 0.11

    First-run experience Apr 16 · Day 13

    The extension stopped assuming you'd edit JSONC by hand.

    • Setup wizard (v0.11.0) — 5-step QuickPick: pick folders, confirm names, assign colors, choose startup command, review.
    • Sidebar +, walkthrough, hook path index (v0.11.1) — VS Code's native walkthrough API; one-click Register Project; ~/.claude/claudelike-bar-paths.json so manually-opened terminals resolve via cwd.
    • Upgrade notification + "Start fresh" (v0.11.2) — re-run the wizard cleanly after an update.
    • Custom CSS colors (v0.11.4) — any #hex, rgb(), hsl(), or var(--anything) per-terminal.
    • Instant-open Register Project (v0.11.5) — flow ends with Open terminal now / Register only. Build a 15-project registry without spawning 15 terminals.
  8. 0.12

    Audio alerts Apr 18 · Day 15

    Optional chime when Claude is waiting. Two slots — end-of-turn (Stop) and mid-job permission prompts (Notification) — so you can tell done apart from blocked on approval by ear. Off by default; BYO sound files to ~/.claude/sounds/, right-click to mute per-tile.

  9. 0.13

    Remote hosts, pinned tiles, launch on demand Apr 18 · Day 15

    Six patches in one afternoon. The bar now works on every host VS Code can reach, with tile zones for stability and a rocket for on-demand launches.

    • Launch Registered Project (v0.13.0) — rocket icon in the header, palette command, and tile right-click menu all QuickPick any registered project that isn't currently open.
    • Auto-sort toggle & cwd pre-flight (v0.13.1) — one-click flip back to auto after dragging; fs.existsSync skips missing auto-start paths with a single toast instead of stacking modals.
    • Custom color picker (v0.13.2) — rainbow <input type="color"> in the swatch row flows any hex through the same setColor handler.
    • Remote everywhere (v0.13.3) — extensionKind: ["workspace", "ui"] so WSL2, SSH, Dev Containers, and Codespaces all register hooks to the right ~/.claude/.
    • Pinned & offline tiles (v0.13.4) — pin a tile to a stable bottom zone; registered-but-not-open projects show as dim click-to-launch tiles.
    • Hotfix (v0.13.5) — webview.js parse error introduced by v0.13.4.
  10. 0.14

    New-user smoothness Apr 19 · Day 16

    A batch aimed at the first-run experience, plus a subagent-counter drift fix. Install from a fresh devcontainer and the bar just works — bundled chime, legacy-hook cleanup, self-diagnosing health check.

    • Bundled chimes & slot rename (v0.14.0) — audio.sounds.ready/permission → turnDone/midJobPrompt (read-side shim migrates on first save). Two chimes ship in media/sounds/ (Mixkit + Pixabay, CC0) so Toggle Audio works without sourcing a file.
    • Legacy hook cleanup & Diagnose command (v0.14.0) — one-shot toast offers to remove old notify.sh/notify-silent.sh hook registrations; Claudelike Bar: Diagnose runs five read-only health checks and toasts only when the fingerprint differs from last session.
    • Dev Containers install docs (v0.14.0) — new docs/install.md section with a self-healing postAttachCommand snippet. No-cache rebuilds no longer drop the extension silently.
    • Subagent counter drift fix (v0.14.1, #16) — tiles no longer wedge on "Working (N agents)". Root cause: the single-file status bus coalesces rapid SubagentStop writes under FileSystemWatcher's debounce, permanently inflating the derived pendingSubagents counter. Fix: zero the counter on every parent Stop, which is the authoritative end-of-turn signal.
  11. 0.15

    Marketplace first-publish Apr 19 · Day 16

    The bar is now live on the Visual Studio Marketplace alongside Open VSX — one install URL for every VS Code distribution. Two bug fixes rolled in.

    • False-offline suppression (#20) — a tile whose status file is freshly written by a running session no longer renders as the dim "registered/offline" tile just because the tracker hasn't associated a VS Code terminal with that slug. The status file is consulted as a liveness tiebreaker before synthesizing.
    • Clone terminals stay transient (#17) — Clone terminal from the right-click menu no longer writes a permanent config entry for the (copy)-suffixed clone. Close the clone and it's gone; no dead registered tile left behind.
    • Marketplace listing — marketplace.visualstudio.com/items?itemName=aes87.claudelike-bar.
    • Legacy hook detection on Windows (v0.15.1) — referencesLegacyScript accepts both path separators, so Windows users with notify.sh / notify-silent.sh entries now get the cleanup toast that POSIX users have had since v0.14. Plus a test-only fix (USERPROFILE alongside HOME) that turned Windows CI green for the first time since v0.14.
    • Marketplace icon (v0.15.2) — purpose-built logo: rounded square with three full-bleed status stripes (cyan / teal / magenta) and contrasting status dots aligned on the left, transparent background so it sits clean on light marketplace cards and dark VS Code chrome alike.
    • Activity-bar icon refresh (v0.15.3) — sidebar glyph now mirrors the new logo: rounded outline, three horizontal divisions, three dots on the left. Replaces the generic 2×2 dashboard placeholder for visual consistency between the marketplace card and the day-to-day sidebar icon.
    • Editorial-palette icon re-skin (v0.15.4) — marketplace icon and GH Pages identity now share a coherent editorial palette (deep purple, amber, teal) instead of the cyan/teal/pink first cut. Adds an icon to the hero, favicon + apple-touch-icon, and OG/Twitter meta image for social shares.
    • Subagent permission tiles float to the top (v0.15.5, #23) — when a subagent fires permission_prompt mid-job, the tile now projects to ready for render + sort: amber attention dot instead of green pulse, and floats above plain working tiles in auto sort. The state machine still tracks working internally so transitions and the subagent counter are unaffected.
  12. 0.16

    Plain shells in the bar Apr 26 · Day 23

    The bar now hosts non-Claude terminals alongside your Claude tiles, opt-in via a single config flag.

    • Plain shell tiles (#25) — set "type": "shell" on a terminal entry in ~/.claude/claudelike-bar.jsonc and the bar renders it as a gray pill with no state machine, no animated dot, no Claude-specific menu items. Click to focus. Status JSONs are ignored if they happen to match the slug — your config opt-out is authoritative. Auto-sort puts shell tiles between idle Claude tiles and offline ones; manual mode obeys order like everything else. Live config flips (claude ↔ shell) work without a reload.
    • Landing page moves to lab.mattharte.com/claudelike-bar/ (v0.16.1) — same page, new home under a unified personal-portfolio subdomain instead of aes87.github.io/claudelike-bar/. Cloudflare Worker + static assets; the old GitHub Pages URL stays alive as a meta-refresh stub so existing links keep working. No code changes.
    • Click-to-launch for shells (v0.16.2, #25) — when a shell-typed terminal isn't open, the bar now surfaces it as a click-to-launch tile (gray dot, dashed border, "Launch this shell" action) alongside the registered Claude tiles. Clicking spawns the configured terminal at its cwd and runs the per-terminal command if set. Shell entries don't inherit the global claudeCommand, so a registered shell with no per-terminal command opens an empty shell — no Claude-in-a-shell mishap.
    • Rename from tile context menu (v0.16.3, #11) — right-click any live tile → Rename… opens an InputBox prefilled with the current name. The new name persists as nickname (display) + projectName (status routing), so future hook events that arrive under the new name route to this tile. Empty input or matching the raw terminal name reverts to the underlying VS Code terminal name. Conflicting renames (would steal another tile's name) are rejected with an inline validation error.
    • Last-prompt recall (v0.16.4, #19) — flip "showLastPrompt": true in your config and the bar surfaces the last user prompt you sent in each terminal. Hover the tile for a tooltip preview (truncated to 80 chars); right-click → Show last prompt for the full text in a modal. The hook captures via UserPromptSubmit, truncates at 300 chars at the source, and only on parent-turn input — subagent fan-out is excluded. Off by default since prompts can contain sensitive content.
    • Hotkey bindings (v0.16.5, #18) — ten commands ready for binding in your own keybindings.json: focusSlot1…focusSlot9 jump to the Nth live tile in current sort, and focusByName takes a tile name via args for stable per-project bindings. Slot bindings follow the slot (auto-sort surfaces urgent tiles); forced bindings always land on the named tile.
    • Push notifications when work completes (v0.16.6, #5) — flip "pushNotifications": true and the bar fires a VS Code information notification (✓ <tile> — ready for input) when a non-focused tile hits ready. Includes an Open action that focuses the terminal. Skips when the tile is currently focused — no self-pinging. Independent of the audio alert path; both can run side by side.
    • Workspace-scoped auto-start (v0.16.7, #9) — auto-start now only spawns terminals whose path lives under one of the current workspace folders. A user with 15 projects across 3 windows used to get all 15 terminals on every activation; now each window starts only what belongs there. Entries with no path still auto-start (no scope to apply). Empty windows (no folders open) fall through to the legacy unfiltered behavior.

Always on

Five things that just work.

  • Drag to reorder — grab any tile, drop where you want. Saved to .claudelike-bar.jsonc, survives reloads.
  • Sort modes — "auto" floats waiting → ignored → ready → working → done → idle to the top; "manual" respects your drag order.
  • Passive-aggressive mode — guilt-trips you when you ignore waiting tiles. Optional. The patiently judging you status is from this mode.
  • Context tracking — mono ctx % badge on every tile, color-coded at 60% and 80%.
  • Debug log — flip "debug": true and the extension streams hook events, state transitions, and auto-start decisions to an output channel.

Configuration

Configure it by talking to Claude.

The config file is ~/.claude/claudelike-bar.jsonc — JSON with comments, auto-created. You can edit it by hand. Most days, it's easier to just describe what you want.

You
Switch to passive-aggressive mode and rename yeet-to-prod to "deploy".
Claude
Done. Two edits to .claudelike-bar.jsonc:
"mode": "chill", "mode": "passive-aggressive", "terminals": { "yeet-to-prod": { "color": "yellow", "nickname": null, "nickname": "deploy", "autoStart": true } }
The extension picked them up live — no reload needed.
You
Auto-start world-domination, print-go-brrr, brain-dump, and spore-drive. Each should open in its project directory and launch Claude.
Claude
Four terminals configured with path and autoStart:
"world-domination": { "path": "/home/you/projects/world-domination", "autoStart": true, "command": "claude" }, "print-go-brrr": { "path": "/home/you/projects/print-go-brrr", "autoStart": true, "command": "claude" }, ...
The path sets the working directory — no cd needed, cross-platform. Next VS Code launch, all four open automatically.
You
sourdough-ops needs different flags — it should run Claude with the MCP plugin.
Claude
Added a per-terminal command override:
"sourdough-ops": { "path": "/home/you/projects/sourdough-ops", "color": "green", "autoStart": true, "command": "claude --mcp-config mcp.json" }
You
Something's weird — print-go-brrr is stuck on "Working" forever. Can you figure out what's wrong?
Claude
Turning on debug logging:
"debug": false, "debug": true,
Open the Claudelike Bar output channel (Ctrl+Shift+U) and run a prompt in print-go-brrr — I'll watch for hook events and state transitions. If the hook never fires or the project name doesn't match the tile, we'll see it in the trace.

Everything above is plain JSONC in ~/.claude/claudelike-bar.jsonc. Comments, section headers, and defaults are preserved by the extension's round-trip save — feel free to hand-edit. Or run the setup wizard for a guided start.

Install

Put it on your sidebar.

Ships on the VS Code Marketplace and Open VSX. Free, open source, MIT licensed. Works in VS Code, Cursor, Windsurf, and anywhere else that speaks VSIX.