Claude CodeIntermediate

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.

7 minIntermediate

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.

.claude/hooks/format.sh
#!/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
fi
zsh - my-project
$chmod +x .claude/hooks/format.sh
$

Step 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.

.claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format.sh"
          }
        ]
      }
    ]
  }
}
Claude Code - /hooks
Hooks
PreToolUse (none)
PostToolUse 1 hook
Edit|Write|MultiEdit -> format.sh
Stop (none)
The /hooks panel confirms the formatter is registered on PostToolUse.
Fail open, not closed
Notice the script ends formatting commands with a fallback so a Prettier error never aborts Claude's work. A formatter hook should tidy quietly, never block the edit.

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.

Claude Code
You
Add a helper function to utils.ts.
Agent
Added formatPrice() to utils.ts. The PostToolUse hook ran Prettier on the file, so it is already formatted to your config.

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

Tags
#hooks#formatting#prettier#automation