How to Auto-Format Files After Edits with a PostToolUse Hook
Run Prettier automatically every time Claude Code writes or edits a file using a PostToolUse hook.
A PostToolUse hook fires after a tool finishes. A common use is formatting: every time Claude Code edits or writes a file, run your formatter so the diff stays clean and you never have to ask. This guide wires Prettier to run automatically on each file write.
- Prettier installed in the project (npm install -D prettier)
- Claude Code with hooks enabled
- A jq install or willingness to parse JSON in a small script
Step 1: Read the edited file path from the payload
PostToolUse passes the tool result on stdin as JSON. For Edit and Write the file path lives at tool_input.file_path. A tiny wrapper script extracts it and runs Prettier on just that file.
#!/usr/bin/env bash
set -euo pipefail
file=$(jq -r '.tool_input.file_path // empty')
if [[ -n "$file" && "$file" =~ \.(ts|tsx|js|jsx|json|css|md)$ ]]; then
npx prettier --write "$file" >/dev/null 2>&1 || true
fiStep 2: Register it for Edit and Write
Use a matcher that targets the file-changing tools. The pipe in the matcher value lets one hook cover both Edit and Write.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write|MultiEdit",
"hooks": [
{
"type": "command",
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format.sh"
}
]
}
]
}
}Step 3: Watch it run
Ask Claude to make a change. After the edit completes, the hook runs Prettier on the touched file. The next time you look at the diff, the formatting is already correct.
Result: every file Claude Code edits is formatted automatically right after the write, keeping diffs clean without a single manual prettier run.
Watch related tutorials
5:42
1:42:18
28:14
41:09
9:47
8:23