AI 도서관 · Claude · 하네스 설정 · Hooks
응답을 마칠 때 테스트를 돌립니다. 실패하면 멈추지 않고 계속 고치게 만들 수 있습니다
⚠️ 흔한 실수 두 가지
① 테스트 결과를 파이프(| tail)로 넘기면 종료코드가 tail 것이 됩니다.
실패해도 성공으로 보입니다. 출력은 변수에 담고 종료코드를 따로 받으세요.
② Stop 이벤트에서 exit 2 는 '멈추지 말고 계속하라'는 뜻입니다.
테스트가 실패했을 때 Claude가 이어서 고치게 하려면 이걸 씁니다.
# .claude/settings.local.json
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "bash -c 'cd \"$CLAUDE_PROJECT_DIR\" || exit 0; if [ -f package.json ]; then out=$(npm test --silent 2>&1); rc=$?; elif [ -f pytest.ini ] || [ -f pyproject.toml ]; then out=$(pytest -q 2>&1); rc=$?; else exit 0; fi; if [ $rc -ne 0 ]; then printf \"%s\\n\" \"$out\" | tail -30 >&2; exit 2; fi'"
}
]
}
]
}
}
📌 핵심
• out=$(...) 로 출력을 담고 rc=$? 로 종료코드를 따로 받습니다
• 실패했을 때만 stderr로 요약을 보내고 exit 2
• 테스트가 없는 프로젝트면 exit 0 으로 조용히 넘어갑니다
• $CLAUDE_PROJECT_DIR 는 Claude Code가 넣어주는 환경변수입니다
🚧 주의 — 무한 반복 위험
exit 2 는 계속 작업하게 만듭니다. 테스트가 영영 통과하지 못하는 상태라면
같은 시도를 반복할 수 있습니다. 처음에는 exit 2 대신 exit 0 으로 두고
결과만 보다가, 동작을 확인한 뒤에 바꾸는 편이 안전합니다.
프로젝트 경로나 테스트 명령을 바꾸려면: {{INPUT}}
{{INPUT}} 자리에 내 내용을 넣어 쓰는 프롬프트입니다. 아래 버튼으로 열면 넣는 칸이 나옵니다.
도서관에서 열기 — 내 내용 넣고 복사하기