Feature Request: PostToolUse hooks should fire for Skill invocations

Resolved 💬 2 comments Opened Apr 4, 2026 by pypetey Closed Jun 7, 2026

Problem

PostToolUse hooks with "matcher": "Skill" never fire when a skill is invoked (e.g., via /plugin:skill-name or the Skill tool). This is because the Skill tool is handled as a prompt expansion internally and doesn't dispatch hook events through the normal tool execution pipeline.

Evidence:

  • A PostToolUse hook with no matcher (catchall) fires correctly — tracked 69+ tool calls in a single session
  • A PostToolUse hook with "matcher": "Skill" produces zero events in the same session, despite multiple skill invocations
  • The hook script works correctly when called manually with piped stdin (verified with mock Skill input)
  • SessionStart hooks fire correctly (confirmed by file creation)

Impact

This makes it impossible to build automatic observability for skill usage. Specifically:

  • Analytics: Cannot track which skills are invoked, how often, or by whom
  • Phase sync: Cannot trigger JIRA status updates after spec/dev skill invocations
  • Quality escalation: Cannot auto-escalate findings after review skills run

Workaround: Parse the transcript JSONL from a Stop hook to reconstruct skill invocations retroactively. This works but loses real-time granularity and per-invocation timing data.

Proposed Solution

One of:

  1. Fire PostToolUse for Skill invocations — dispatch the same hook event after the Skill tool expands and Claude begins processing. The hook input should include tool_name: "Skill" and tool_input: { skill: "plugin:skill-name", args: "..." }.
  1. New hook event type: PostSkillUse — a dedicated event that fires after a skill's SKILL.md is loaded into context. This could include richer metadata: skill name, plugin, file path, whether it was user-invoked or agent-dispatched.
  1. Fire PreToolUse for Skill invocations — at minimum, let PreToolUse hooks intercept skill calls before expansion, enabling logging and validation.

Option 2 (dedicated PostSkillUse) would be the most useful since it could carry skill-specific metadata that PostToolUse doesn't naturally have.

Environment

  • Claude Code CLI on Windows 11
  • Plugin hooks defined in hooks.json with "matcher": "Skill"
  • Hooks for other matchers (Edit|Write, Bash(gh pr create*), catchall) work correctly

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗