Summary
- Total hooks registered: 32 (11 user-settings + 21 plugin-registered)
- Duplicates found: 2
- Redundant pairs: 1
- Unused scripts: 5
- Dead hooks: 0 (worker hooks gated with
[ -f ... ] are conditional, not dead)
Sources scanned
| File |
Hooks registered |
~/.claude/settings.json |
7 |
~/PKA/.claude/settings.json |
2 |
~/PKA/.claude/settings.local.json |
0 (no hooks block) |
~/.claude/settings-worker.json |
7 (Luci-style, gated) |
Plugin: context-mode (hooks/hooks.json) |
11 |
Plugin: caveman (.claude-plugin/plugin.json) |
2 |
Plugin: warp (hooks/hooks.json) |
6 |
Plugin: hookify |
not enabled — not loaded |
Duplicates
| Event |
Matcher |
Command |
Files |
Recommendation |
SessionStart |
"" |
bash ~/.claude/hooks/session-start.sh |
~/.claude/settings.json line 28 AND ~/.claude/settings-worker.json line 38 |
Worker-settings duplicate is intentional (workers don't inherit). Keep both. |
SessionEnd |
"" |
bash ~/.claude/hooks/session-end.sh |
~/.claude/settings.json line 47 AND ~/.claude/settings-worker.json line 49 |
Same — intentional worker-inheritance gap. Keep. |
True duplicate count: 0. Both pairs are by design (user-settings vs worker-settings isolation).
Redundant pairs
| Hook A |
Hook B |
Why redundant |
Keep which |
PreToolUse: Glob\|Grep in ~/.claude/settings.json line 67 ("graphify graph exists in cwd. Read graphify-out/GRAPH_REPORT.md before searching raw files; consider graphify query…") |
PreToolUse: Glob\|Grep in ~/PKA/.claude/settings.json line 39 ("graphify: Knowledge graph exists. Read graphify-out/GRAPH_REPORT.md for god nodes…") |
Both inject near-identical additionalContext about reading GRAPH_REPORT.md. Both fire in PKA cwd → context shown twice on every Glob/Grep. |
Keep PKA-level one (more specific wording). Delete global. |
Unused scripts
| Path |
Referenced anywhere? |
Recommendation |
~/.claude/hooks/auto-skill-evolver.sh |
No (only self-references in own log line) |
Delete or re-wire. Comment says "Tier-A Hermes Reflective-Phase backport" — orphan. |
~/.claude/hooks/graph-sync.sh |
No |
Delete. |
~/.claude/hooks/luci_autopush.sh |
No (Luci runs its own copy in workspace) |
Delete from Mac ~/.claude/hooks/ — Luci-only script. |
~/PKA/hooks/agent_event.py |
No |
Delete or wire into PreToolUse if needed. |
~/PKA/hooks/hook.sh |
No |
Delete. 305-byte stub. |
session-memory-extractor.py (PKA/hooks) — NOT unused. Called by session-start.sh.
Dead hooks
| Event |
Command |
Issue |
| (none) |
— |
All referenced binaries exist: rtk at /opt/homebrew/bin/rtk, context-mode at /opt/homebrew/bin/context-mode, jq, python3. Worker-only hooks pointing at /home/lucienne/workspace/scripts/* are file-gated ([ -f … ] && …) so they no-op silently on Mac — by design, not dead. |
Recommended actions
- Delete redundant graphify hook —
~/.claude/settings.json lines 67-74 (the PreToolUse Glob\|Grep block). PKA project-level hook covers the same case with better wording.
- Delete unused script —
rm ~/.claude/hooks/auto-skill-evolver.sh
- Delete unused script —
rm ~/.claude/hooks/graph-sync.sh
- Delete unused script —
rm ~/.claude/hooks/luci_autopush.sh (Luci has its own copy at ~/workspace/)
- Delete unused script —
rm ~/PKA/hooks/agent_event.py
- Delete unused script —
rm ~/PKA/hooks/hook.sh
After deletions: 6 fewer hook scripts on disk, one redundant PreToolUse hook removed, zero functional change.