Oleks daf1f1169f move hooks to .claude-plugin/hooks/hooks.json (canonical location)
Per Claude Code's plugin spec at https://code.claude.com/docs/en/plugins.md,
hooks must live at `.claude-plugin/hooks/hooks.json` — a `hooks/`
subdirectory inside `.claude-plugin/`. v1.0.0 had `hooks.json`
directly under `.claude-plugin/` (loaded 0 hooks); v1.0.1 inlined
into `plugin.json` (also not supported). v1.0.2 puts the file at
the documented path.

Schema is unchanged — three-level nesting (event → matcher list →
handler list), same as user settings.json. `${CLAUDE_PLUGIN_ROOT}`
substitution is supported here.
2026-05-10 22:03:15 +03:00
2026-05-10 15:35:30 +03:00
2026-05-10 15:35:30 +03:00
2026-05-10 15:35:30 +03:00
2026-05-10 15:35:30 +03:00

hyprpanel-state

Claude Code plugin that surfaces per-window claude state in the HyprPanel workspaces bar.

What it does

Wires Claude Code hooks (UserPromptSubmit / PreToolUse / PostToolUse / Notification / Stop / SessionEnd) to a shell script that walks the parent PID chain from itself up through claude → shell → kitty until it finds a PID owned by a Hyprland kitty client, then writes a state token to /tmp/hyprpanel-claude/<address>. The patched HyprPanel bar reads those tokens and tints each kitty's app icon by what claude is doing.

State Color (in bar) Pip indicator Triggered by
active blue UserPromptSubmit / PreToolUse / PostToolUse
waiting orange Notification (suppressed when state is done/scheduled)
done green Stop (no ScheduleWakeup in last assistant turn)
scheduled cyan Stop (last turn used ScheduleWakeup / CronCreate)
(cleared) default SessionEnd

A blink-decay opacity animation fires on (re-)assignment of waiting, scheduled, done — and on the agent-idle "remember me" Notification while already done. Sticky-done means the green check survives idle pings.

Sidecar files

  • /tmp/hyprpanel-claude/<addr> — current state token
  • /tmp/hyprpanel-claude/.<addr>.tools — tool-in-flight counter (incremented on PreToolUse, decremented on PostToolUse, flock-protected for parallel tool fan-outs)
  • /tmp/hyprpanel-claude/.<addr>.ping — touch-only sidecar; mtime advance triggers the bar's blink animation

Bar side

The visuals live in HyprPanel and are not owned by this plugin. Install / patch HyprPanel separately — see ~/projects/hyprpanel-dev/PROMPT.md for the workspaces module changes that read these state files.

Dependencies

  • hyprctl (Hyprland)
  • jq
  • flock

All standard on a NixOS desktop.

Install

claude plugin add https://claude-plugins.oleks.space/plugins/hyprpanel-state.git

Once enabled, the hook chain wires itself up — no ~/.claude/settings.json edits required. Claude sessions started after the install will fire hooks into the script; pre-existing sessions need to restart to pick them up.

License

MIT

S
Description
Claude Code plugin: surfaces per-window claude state in the HyprPanel workspaces bar via lifecycle hooks. Each kitty's icon is tinted by what claude is doing — active (blue), waiting (orange ●), done (green ✔), scheduled for /loop wakeup (cyan ⧗). Hooks-only; bar visuals live in the patched HyprPanel.
Readme
47 KiB
Languages
Shell 100%