Claude Code has a hooks system that lets you run scripts after every file edit. The killer use case: run your linter automatically and force Claude to fix issues before moving on. No more "can you run rubocop" after every change — it just happens.
The catch? Getting Claude to actually act on hook output requires a specific JSON format that isn't obvious from the docs. Here's what works.


