302df34f09
Hooks-only Claude Code plugin that surfaces per-window claude state in the patched HyprPanel workspaces bar. Wires UserPromptSubmit / PreToolUse / PostToolUse / Notification / Stop / SessionEnd to a shell script that walks the parent-PID chain to find the kitty client whose claude this script lives in, then writes a state token to /tmp/hyprpanel-claude/<address>. Bar visuals are owned separately by the workspaces patch in projects/hyprpanel-dev. The contract between the two is the /tmp/hyprpanel-claude/ directory layout (state file, .tools counter, .ping sidecar for blink-decay animations).
1.8 KiB
1.8 KiB
CLAUDE.md
Guidance for Claude Code when working in this repository.
What This Is
A Claude Code plugin (no skill — this one is hooks-only) that bridges Claude Code lifecycle events to a state file the HyprPanel workspaces bar reads, so each kitty's icon reflects what claude is doing in that terminal.
Structure
.claude-plugin/plugin.json # Plugin manifest
.claude-plugin/hooks.json # Hook event → script mapping
hooks/hyprpanel-state.sh # The script: PPid walk + state file writes
README.md # User-facing docs
Bar Side
This plugin does NOT own the visual — that lives in ~/projects/hyprpanel-dev
(the patched HyprPanel). The contract between the two is the
/tmp/hyprpanel-claude/ directory layout (state files, tools counter,
ping sidecar). Changes to the protocol must update both sides.
Editing Guidelines
- Bump
versioninplugin.jsonfor any change Claude Code should pick up (it caches by version). - Hook script path uses
${CLAUDE_PLUGIN_ROOT}so it works wherever the plugin gets installed. - Keep the script idempotent: hooks may fire concurrently for parallel
tool calls; the
.toolscounter is flock-protected. - The PPid-walk address resolution depends on a chain of
script → claude → shell → kitty. Don't break that by spawning the script through extra wrappers.
Why a Plugin (Not Dotfile-Managed)
- Reproducible: install via
claude plugin add, no manual scp / nixos rebuild loop for the script itself. - Versioned: bumping
plugin.json.versionlets Claude Code re-cache cleanly across hosts. - Decoupled from emmett's NixOS config: the bar visuals are baked in via patch (since they're hyprpanel internals), but the hook side is the user's claude config and benefits from plugin lifecycle.