- Published on
Claude Code ํ (Hooks) ๊ณ ๋ํ โ ์คํ ์๊ฐ ์ธก์ ยท๋ ธ๋ ฅ ๊ฐ์งยทCI ์๋ ๋ฆฌ๋ทฐ๊น์ง
ํ (Hook)์ Claude Code์์ ๊ฐ์ฅ ์กฐ์ฉํ๊ฒ, ํ์ง๋ง ๊ฐ์ฅ ๊ฐ๋ ฅํ๊ฒ ์ฑ์ฅํ๊ณ ์๋ ๊ธฐ๋ฅ์ด๋ค.
ํ ์ Claude Code๊ฐ ์ด๋ค ๋๊ตฌ๋ฅผ ์คํํ๊ธฐ ์ /ํ์ ์ฌ์ฉ์๊ฐ ์ ์ํ ์ ๋ช ๋ น์ด๋ฅผ ์๋์ผ๋ก ์คํํ๋ ๊ตฌ์กฐ๋ค. ์ฝ๋๋ฅผ ์ ์ฅํ ๋๋ง๋ค ์๋์ผ๋ก ๋ฆฐํฐ๋ฅผ ๋๋ฆฌ๊ฑฐ๋, ํ์ผ์ ์์ ํ ๋ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๊ฑฐ๋, ํน์ ์กฐ๊ฑด์์ ์๋ฆผ์ ๋ณด๋ด๋ ๊ฒ์ด ๋ชจ๋ ํ ์ผ๋ก ๊ฐ๋ฅํ๋ค.
2026๋ 5์ Claude Code๊ฐ ์ ๋ฐ์ดํธํ๋ฉด์ ์ด ํ ์์คํ ์ ์ธ ๊ฐ์ง ์ค์ํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ค.
ํ ์ด๋ ๋ฌด์์ธ๊ฐ โ 30์ด ์ดํด
| ํ ํ์ | ์คํ ์์ |
|---|---|
| PreToolUse | ๋๊ตฌ ์คํ ์ง์ |
| PostToolUse | ๋๊ตฌ ์คํ ์งํ (์ฑ๊ณต ์) |
| PostToolUseFailure | ๋๊ตฌ ์คํ ์งํ (์คํจ ์) |
| Stop | Claude๊ฐ ์๋ต์ ๋ง์น ๋ค |
PostToolUse ์ถ๋ ฅ ๊ต์ฒด โ ์ด๋ค ๋๊ตฌ๋ ๊ฐ๋ก์ฑ ์ ์๋ค
์ด์ ์๋ MCP ๋๊ตฌ์ ํํด์๋ง hookSpecificOutput.updatedToolOutput์ ํตํด ๋๊ตฌ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ
์ด ๊ต์ฒดํ ์ ์์๋ค. ์ด๋ฒ ์
๋ฐ์ดํธ๋ก ๋ชจ๋ ๋๊ตฌ์์ ๊ฐ๋ฅํด์ก๋ค.
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 sanitize_output.py",
"hookSpecificOutput": {
"updatedToolOutput": true
}
}
]
}
]
}
}
๋ฏผ๊ฐํ ์ ๋ณด(API ํค, ๋น๋ฐ๋ฒํธ)๋ฅผ ์๋์ผ๋ก ๋ง์คํนํ๊ฑฐ๋, ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฌ๋์ด ์ฝ๊ธฐ ์ข์ ํํ๋ก ๋ณํํ๋ ๋ฐ ์ธ ์ ์๋ค.
effort.level โ ๋ ธ๋ ฅ ๋ ๋ฒจ์ ํ ์ด ์ฝ๋๋ค
ํ ๋ด๋ถ์์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ์ฌ ๋ ธ๋ ฅ ๋ ๋ฒจ์ ์ฝ์ ์ ์๋ค.
- ํ
์
๋ ฅ JSON:
effort.levelํ๋ - ํ๊ฒฝ ๋ณ์:
$CLAUDE_EFFORT
#!/bin/bash
if [ "$CLAUDE_EFFORT" = "high" ] || [ "$CLAUDE_EFFORT" = "xhigh" ]; then
npm run test:full
else
npm run test:smoke
fi
duration_ms โ ๋๊ตฌ ์คํ ์๊ฐ ์ธก์
PostToolUse์ PostToolUseFailure ํ
์
๋ ฅ์ duration_ms ํ๋๊ฐ ์ถ๊ฐ๋๋ค. ์์ํ ๋๊ตฌ ์คํ ์๊ฐ(๋ฐ๋ฆฌ์ด)๋ง ์ธก์ ๋๋ค.
#!/bin/bash
DURATION=$1
if [ "$DURATION" -gt 5000 ]; then
echo "[SLOW] $(date): ${DURATION}ms - $TOOL_NAME" >> slow-tools.log
fi
claude ultrareview โ CI์์ ์ฝ๋ ๋ฆฌ๋ทฐ ์๋ํ
๊ธฐ์กด์ /ultrareview๋ ๋ํ์์ผ๋ก๋ง ์คํํ ์ ์์๋ค. ์ด์ ๋ ๋น๋ํํ ๋ฐฉ์์ผ๋ก CI/CD ํ์ดํ๋ผ์ธ์์ ์ง์ ํธ์ถํ ์ ์๋ค.
claude ultrareview src/
claude ultrareview src/ --json
claude ultrareview --diff origin/main...HEAD
์ข
๋ฃ ์ฝ๋: 0 (์๋ฃ) / 1 (์คํจ)
auto mode ํ๋ ๊ฑฐ๋ถ ๊ท์น
ํ๋ ๊ฑฐ๋ถ ๊ท์น์ผ๋ก ์ง์ ํ ๋์์ allow ์์ธ์ ๊ด๊ณ์์ด ๋ฌด์กฐ๊ฑด ์ฐจ๋จ๋๋ค.
ํ์ฉ ํ
1. duration_ms๋ก ๋๋ฆฐ ์์ ๋ถํฐ ํ์ ํ๋ผ 2. effort.level์ ํ์ฉํด ๋ฆฌ์์ค๋ฅผ ์๊ปด๋ผ 3. PostToolUse ์ถ๋ ฅ ๊ต์ฒด๋ ๋ณด์ ๋ ์ด์ด๋ก ์ฐ๋ผ 4. claude ultrareview๋ฅผ PR ์ฒดํฌ๋ฆฌ์คํธ ์ฒซ ๋ฒ์งธ๋ก
์ถ์ฒ (Sources)
- Anthropic, "Claude Code Changelog โ May 2026": https://code.claude.com/docs/en/changelog
- Releasebot, "Claude Code Updates by Anthropic โ May 2026": https://releasebot.io/updates/anthropic/claude-code
- Simon Willison, "Live blog: Code w/ Claude 2026": https://simonwillison.net/2026/May/6/code-w-claude-2026/
- ClaudeFast, "Claude Code Changelog: All Release Notes (2026)": https://claudefa.st/blog/guide/changelog