Herdr Wsl Notify banner
tkmct tkmct

Herdr Wsl Notify

Development community

Description

A Herdr plugin that shows a Windows desktop toast when an agent (Claude Code, etc.) running under WSL2 becomes done (finished) or blocked (waiting for approval/input).

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

herdr-wsl-notify

A [Herdr](https://herdr.dev) plugin that shows a Windows desktop toast when an agent (Claude Code, etc.) running under WSL2 becomes **done** (finished) or **blocked** (waiting for approval/input).

  • Zero dependencies (Node.js 18+ only; no npm packages, no BurntToast install)
  • Calls the built-in Windows WinRT API directly via powershell.exe -EncodedCommand (~0.4 s measured)
  • Notifications for the same pane replace each other instead of stacking (Toast Tag = pane_id)
  • Debounce against status flapping, plus skipping of the currently focused pane

See [docs/DESIGN.md](docs/DESIGN.md) for the design and research notes.

Requirements

  • WSL2 with Windows interop enabled (i.e. powershell.exe can be launched from WSL)
  • Node.js 18+ (on the WSL side)
  • Herdr 0.7.0+

Installation

From GitHub:

herdr plugin install /herdr-wsl-notify

For local development/use:

git clone 
cd herdr-wsl-notify
herdr plugin link .

Verify it works:

herdr plugin action invoke test --plugin tkmct.wsl-notify

If a test toast appears in the bottom-right of your Windows desktop, you are set. From then on, the hook runs every time Herdr fires a `pane.agent_status_changed` event and notifies you about agents that become `done` / `blocked`.

What the notification shows

✅ Claude is done
Issue #3181 Async tag insert        ← what the session is working on (terminal title)
📁 crm (my-workspace)               ← working directory (workspace name)

The "what it's working on" line is the current-task summary the agent sets as the terminal title (tracked by Herdr as `terminal_title_stripped`), fetched at notification time via `herdr agent get `. The event payload itself does not include the title, so if it cannot be fetched (e.g. the pane has already closed) it falls back to the tab name, then the workspace name.

Configuration

CONFIG_DIR="$(herdr plugin config-dir tkmct.wsl-notify)"
cp .env.example "$