npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

tabby-claude-status

v1.2.1

Published

Visual tab indicators (color, emoji, progress, taskbar flash) and multi-backend TTS for Claude Code status inside Tabby terminal

Readme

tabby-claude-status

Visual status indicators and TTS announcements for Claude Code activity inside the Tabby terminal.

Claude Code fires hook events → a tiny hook.js script writes the current event to %TEMP%\tabby-claude-status.json → this plugin watches the file and updates one or more visual surfaces on the matching terminal tab, plus (optionally) speaks a short phrase.

Status mapping

| State | Fired on | |---|---| | working | PreToolUse / PostToolUse / UserPromptSubmit | | question | Notification / PermissionRequest | | done | Stop | | error | PostToolUseFailure | | idle | SessionStart / SessionEnd |

Tab matching is done by Windows PID ancestry: the hook walks up to 6 levels of parents; the plugin intersects those PIDs with its terminalPids map.

Display surfaces

Every surface is individually toggleable in Settings → Claude Status → Display surfaces. Defaults preserve the classic behaviour (bottom colour border only).

| Surface | Default | Notes | |---|---|---| | Tab bottom border colour | on | Uses the colours defined in the Tab Colors section | | Tab title emoji prefix | off | Per-status emoji configurable; defaults ⚡ ❓ ✅ ❌ | | Indeterminate progress bar | off | Pulses during working | | Activity marker dot | off | The same dot Tabby uses for background activity; shown on question / error | | Taskbar flash | off | Only when Tabby is unfocused | | Taskbar icon overlay | off | 16×16 coloured PNGs from assets/overlay-*.png |

Session restore (opt-in)

Enable Settings → Claude Status → Session restore → Enable session tracking to persist each Claude Code session's { sessionId, cwd, title, lastSeen } to %APPDATA%\tabby\tabby-claude-status-sessions.json. Nothing is written until the toggle is on.

Once enabled:

  • Every hook event updates the matching session entry (cwd follows cds inside the Claude session).
  • Sessions older than Retention (days) are pruned automatically.
  • The settings tab lists saved sessions with per-row Resume / ✕ Forget buttons.
  • Resume all now opens a new local tab per session at the recorded cwd and types claude --resume <sessionId> once the pty is ready.
  • Turn on Auto-resume all saved sessions on Tabby launch to have the plugin do that automatically ~1.5s after Tabby boots.
  • Extra args are appended to every resume command (e.g. --model opus).

Under the hood this uses tabby-local's TerminalService.openTab(undefined, cwd) + BaseTerminalTabComponent.sendInput().

TTS backends

The voice dropdown previously exposed only SAPI 5 voices (David/Mark/Zira) because that's all Chromium's Web Speech API surfaces on Windows. v1.2 introduces a backend picker with four options; Web Speech remains the always-available fallback when the chosen backend fails.

| Backend | Quality | Offline | Notes | |---|---|---|---| | Web Speech (SAPI) | low | ✓ | default; SAPI 5 only | | Edge TTS (msedge-tts) | neural | ✗ | uses the free Azure Read Aloud endpoint; no API key | | Windows OneCore | good | ✓ | shells out to PowerShell Windows.Media.SpeechSynthesis; surfaces Natural Voices installed via Settings → Time & Language → Speech | | Piper | neural | ✓ | set piperExePath and piperModelPath to use a local Piper install |

Each backend remembers its own voice selection (voicesByBackend), so switching backends doesn't wipe your Edge voice when you flip back to Web Speech.

Develop

npm install
npm run watch          # rebuild on change
npm run build          # one-shot production build
npm run install-plugin # build + copy into %APPDATA%\tabby\plugins\node_modules\tabby-claude-status

After install-plugin, restart Tabby. The plugin loads via its module entry (dist/index.js).

Installing via Tabby's plugin manager

Once published to npm, users can install this plugin by name from Tabby → Settings → Plugins → search tabby-claude-status.

Layout

src/
  claudeStatusModule.ts                  NgModule wiring
  index.ts                               public exports
  components/
    claudeStatusSettingsTab.component.ts Settings UI
  decorator/
    claudeStatusDecorator.ts             Watches status file, drives display surfaces
  interfaces/
    types.ts                             Config interfaces + defaults
  providers/
    configProvider.ts                    Default config provider
    settingsTabProvider.ts               Registers settings page
  services/
    audioService.ts                      Dispatches to selected TTS backend
    configService.ts                     Plugin config accessor
    statusParserService.ts               OSC escape-sequence parser
    tts/
      tts.interface.ts                   TtsBackend interface
      webSpeechBackend.ts                Web Speech / SAPI 5
      edgeTtsBackend.ts                  Microsoft Edge Read Aloud
      winRtBackend.ts                    Windows OneCore via PowerShell
      piperBackend.ts                    Local Piper TTS
assets/
  overlay-working.png  overlay-question.png  overlay-done.png  overlay-error.png
hook.js                                   Cross-platform Claude Code hook script
rspack.config.js                          Build (UMD, node target, tabby externals); SWC handles TS via builtin:swc-loader
tsconfig.json
scripts/install-plugin.js                 Copies build output into Tabby's plugin dir

Claude Code hook wiring

The hook script is invoked by Claude Code for each event. Point all 9 events at the same command in %USERPROFILE%\.claude\settings.json:

{
  "hooks": {
    "PreToolUse":         [{ "hooks": [{ "type": "command", "command": "\"C:\\Program Files\\nodejs\\node.exe\" \"C:\\Users\\<you>\\AppData\\Roaming\\tabby\\plugins\\node_modules\\tabby-claude-status\\hook.js\"" }] }]
    // ... same for PostToolUse, PostToolUseFailure, Notification, Stop,
    //     UserPromptSubmit, PermissionRequest, SessionStart, SessionEnd
  }
}

The Settings tab has a Setup Claude Hooks button that writes this for you.

WSL

From inside WSL, invoke Windows node.exe via interop so PIDs and %TEMP% resolve to the Windows side (the plugin can't match Linux PIDs):

"/mnt/c/Program Files/nodejs/node.exe" "C:\Users\<you>\AppData\Roaming\tabby\plugins\node_modules\tabby-claude-status\hook.js"

See tabby-claude-status-plugin-2026.md in the personal notes repo for a full new-machine setup walkthrough and troubleshooting.

Upstream

Forked from [email protected] (MIT, author graphix). The original repo is on a private GitLab (git.gsat.us/GSE/tabby-claude-status) and isn't publicly browsable — the only public artifact of the upstream is the npm tarball under tabby-claude-status-gse. This fork is published as tabby-claude-status on npm and developed openly in this repo. Significant divergence from upstream: multi-backend TTS (Edge / Windows OneCore / Piper), display-surface toggles (emoji prefix, progress bar, taskbar flash & overlay), Haiku-narrated dynamic phrases, session restore, mic/Zoom-aware muting, sound-effect mode, activity log.