Claude Code가 파일을 수정한 뒤 prettier 포맷이 어긋나 있다면, PostToolUse 훅으로 해결할 수 있습니다. 저장 단축키도, CLAUDE.md 지시사항도 필요 없습니다.
PostToolUse 훅이란
PostToolUse는 Claude Code가 도구를 실행한 직후 셸 명령을 실행하는 훅입니다. matcher 필드에 정규식을 지정해 특정 도구에만 반응하게 할 수 있습니다.
파일을 수정하는 Write(전체 작성)와 Edit(일부 수정) 도구에 모두 반응하도록 matcher를 지정합니다. 훅이 실행될 때 도구의 입출력 정보가 JSON으로 stdin에 전달됩니다. tool_input.file_path에 수정된 파일 경로가 있습니다.
CLAUDE.md 방식과 비교
훅을 처음 접하면 CLAUDE.md에 지시사항을 넣는 방법을 먼저 떠올리기 쉽습니다.
파일 수정 후 반드시 prettier를 실행하세요: `npx prettier --write <파일경로>`
동작은 하지만 비용이 따릅니다. CLAUDE.md는 매 세션마다 컨텍스트에 통째로 로드됩니다. prettier를 실행하든 안 하든 이 지시사항은 항상 토큰을 소비합니다. Claude가 실제로 prettier를 실행할 때는 Bash 도구 호출과 실행 결과까지 추가로 토큰이 발생합니다.
PostToolUse 훅은 Claude 컨텍스트 밖에서 셸 명령으로 실행됩니다. 토큰 소비가 없습니다.
설정
프로젝트 루트의 .claude/settings.local.json 또는 .claude/settings.json에 추가합니다. 팀 전체가 같은 설정을 쓴다면 .claude/settings.json을 커밋하면 됩니다. 글로벌 설정(~/.claude/settings.json)에 넣으면 prettier를 사용하지 않는 프로젝트에서도 훅이 실행되므로, 프로젝트별로 두는 게 낫습니다.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
}
]
}
]
}
}
명령을 순서대로 보면:
jq -r '.tool_input.file_path'— stdin에서 파일 경로를 추출합니다.xargs npx prettier --write— 추출한 경로를 prettier에 넘깁니다.npx는 로컬node_modules에 있는 버전을 우선 사용합니다.
jq가 없다면 먼저 설치합니다.
brew install jq