훅 및 자동화
SessionStart 훅을 연결하여 컨텍스트를 자동으로 로드합니다. PreToolUse를 사용하여 위험한 명령을 차단합니다. 승인 게이트를 사용하여 크론에서 Claude를 실행합니다.
훅은 Claude Code가 특정 수명 주기 이벤트에서 실행하는 명령입니다. ~/.claude/settings.json에 한 번 구성하면 자동으로 실행됩니다. 훅은 STATE.md를 모든 세션에 로드하거나, 커밋하기 전에 스테이징된 .env 파일을 확인하는 등 잊어버릴 수 있는 규율을 강제합니다. 설정 비용은 10분입니다. 보상은 영구적입니다.
SessionStart는 세션이 열리는 순간 실행됩니다. 인쇄되는 모든 내용은 첫 번째 메시지 전에 컨텍스트가 됩니다.
{
"hooks": {
"SessionStart": [
{
"command": "cat ~/notes/STATE.md ~/notes/MEMORY.md 2>/dev/null || true"
}
]
}
}|| true는 중요합니다. 파일이 없어도 세션 시작이 중단되지 않도록 합니다. 훅을 50ms 미만으로 유지하고 세션 시작 시 네트워크 호출을 하지 마십시오. 최신 API 데이터가 필요합니까? 로컬 파일을 작성하는 크론을 실행하고, 훅에서 파일을 로드하십시오.
네 가지 추가 훅 이벤트:
Stop: 세션이 끝날 때 실행됩니다. 알림에 사용: "닫기 전에: STATE.md를 업데이트하십시오."
PreToolUse: Claude가 도구를 호출하기 전에 실행됩니다. 보안 적용 계층: 위험한 명령을 차단하고, 감사 추적을 위해 호출을 로깅합니다. 종료 코드 0은 호출을 허용하고, 종료 코드 2는 호출을 차단합니다.
PostToolUse: 도구가 반환된 후 실행됩니다. 파일 쓰기 후 린터를 실행하고, SQL 마이그레이션 후 RLS 정책을 확인합니다.
UserPromptSubmit: 엔터를 누를 때 실행됩니다. 외부 콘텐츠에 대한 컨텍스트를 주입하거나 프롬프트 주입 방어를 적용합니다.
rm -rf를 포함하는 모든 Bash 호출을 차단하는 PreToolUse 훅:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -q 'rm -rf'; then echo 'BLOCKED: rm -rf not allowed' >&2; exit 2; fi"
}
]
}
}matcher 필드는 특정 도구를 대상으로 합니다. 이 필드가 없으면 훅은 모든 도구 호출에서 실행됩니다. 훅을 빠르고 대상으로 지정하기 위해 매처를 사용하십시오.
훅이 실행되지 않을 때 순서대로 확인하십시오.
구문: 유효한 JSON입니까? cat ~/.claude/settings.json | python3 -m json.tool을 실행하십시오.
파일 경로: 터미널에서 훅 명령을 수동으로 테스트하십시오.
종료 코드: || true가 누락되었습니까?
속도: 3초 이상입니까? 느린 부분을 크론으로 옮기십시오.
두 가지 프로덕션 함정. 모든 훅에 명시적인 timeout 필드를 설정하여 동작이 예측 가능하도록 유지하십시오. 그리고 훅은 전체 셸이 아닌 스트립된 환경에서 실행됩니다. 훅에 환경 변수(예: Slack 토큰)가 필요한 경우 훅 명령에서 .env를 명시적으로 소싱하십시오. 이것은 터미널에서는 작동하지만 Claude Code에서는 조용히 실패하는 훅의 가장 흔한 원인입니다.
크론 기반 Claude Code. 동일한 에이전트가 claude --headless를 통해 일정에 따라 실행될 수 있습니다. 오전 7시에 Slack에 게시되는 아침 브리핑, 4시간마다 소셜 미디어 모니터링, 30분마다 배포 상태 확인.
핵심 패턴: 승인 게이트. 크론은 초안을 작성하고, 당신은 검토하고, 시스템은 보냅니다. 검토 없이 아웃바운드 메시지를 보내는 자율 에이전트는 결국 잘못된 것을 보낼 것입니다. 잘못된 템플릿, 잘못된 대상, 잘못된 타이밍. 아키텍처: 에이전트는 발견하고 초안을 작성하고, 사람은 검토하고 릴리스합니다. 구현: 에이전트는 초안을 Slack 채널에 작성합니다. 사람이 승인할 때까지 아무것도 아웃바운드로 나가지 않습니다. 이것은 어떤 에이전트도 제멋대로 행동하지 않고 수십 개의 에이전트로 확장됩니다.
훅 시스템을 단계별로 구축하십시오.
1단계 (1-2주), 로드 훅: SessionStart는 STATE.md 및 MEMORY.md를 로드합니다. Stop은 업데이트를 상기시킵니다.
2단계 (3-4주), 보호 훅: PreToolUse는 되돌릴 수 없는 명령(메인으로 강제 푸시, DROP TABLE, rm -rf)을 하드 블록합니다.
3단계 (2개월 이상), 감사 훅: PostToolUse는 실제로 작성된 내용을 확인합니다. RLS 정책이 누락된 SQL 마이그레이션, 속도 제한이 누락된 새 API 경로, 작성된 파일의 비밀.
PostToolUse는 감사를 위해 PreToolUse보다 강력합니다. Claude가 의도한 것만이 아니라 작성된 파일 내용, 즉 실제 사실을 읽기 때문입니다. 실제 실패 모드 주변에 훅을 구축하십시오. 실제 문제를 해결하는 두 개의 훅이 10개의 이론적인 훅보다 낫습니다.
SessionStart는 컨텍스트를 로드하고, Stop은 상기시키고, PreToolUse는 위험한 명령을 차단하고(종료 코드 2), PostToolUse는 작성된 내용을 감사하며, 크론과 승인 게이트는 Claude를 전송 버튼에 사람이 있는 예약된 시스템으로 전환합니다. 하나의 훅으로 시작하십시오: SessionStart에 cat ~/notes/STATE.md 2>/dev/null || true. 매달 다음 단계를 추가하십시오.