Add 'FinalStop' hook that fires only once after all processing is complete

Resolved 💬 3 comments Opened Jul 24, 2025 by ras434 Closed Oct 24, 2025

Description:

Currently, the Stop hook can fire multiple times during a single Claude response, presumably when there are multiple processing stages. This makes it difficult to trigger actions that should only run once after Claude has completely finished responding.

Current behavior:

  • The Stop hook fires "when the main Claude Code agent has finished responding"
  • In practice, this can trigger multiple times in a single response

Requested feature:
Add a new hook type (e.g., FinalStop or ResponseComplete) that:

  • Fires exactly once per Claude response
  • Only triggers after all processing is complete and Claude is waiting for the next user input
  • Does not fire on user interrupts (similar to current Stop hook behavior)

Use case:
This would be useful for:

  • Playing a notification sound once when Claude finishes
  • Running cleanup scripts after complex operations
  • Triggering external integrations that should only run once per response
  • Logging/analytics that need to capture complete responses

View original on GitHub ↗

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