lifecarelog
개발일지

헤드리스 codex exec가 훅을 건너뛰는 false-green 막기

헤드리스 codex exec가 대화형 훅을 조용히 건너뛰어 생기는 false-green을, 게이트를 실행 경로에 배선해 막은 1인 개발 기록이에요.

4분 읽기

혼자 파이프라인을 자동화하다 보면 초록불이 제일 무서울 때가 있어요. status=success인데 정작 지켜야 할 검사가 하나도 안 돌았다면요.

이번에 겪은 게 딱 그거였어요. 대화형 세션에서 잘 돌던 훅이, 헤드리스로 돌리자마자 조용히 사라졌거든요.

대화형에선 되던 게 헤드리스에선 안 돼요

원래 실행기를 claude -p로 쓰다가, 토큰을 아끼려고 일부 단계를 codex exec로 바꿨어요. 코드도 똑같고 명령도 똑같은데, 결과가 success로 떠서 잘 넘어간 줄 알았죠.

그런데 로그를 10분쯤 뒤져보고 나서야 알았어요. TDD 가드·타입체크·린트, 이렇게 훅 3개가 아예 실행 자체를 안 했더라고요. 헤드리스 실행기는 대화형 .claude/hooks를 자동으로 건너뛰거든요. 실패한 게 아니라, 검사를 안 하고 통과한 false-green이었어요.

claude -p (훅 실행됨)codex exec로 교체훅 스킵status는 success지만 검사 0

AGENTS.md에 적어두면 될까요? 안 돼요

처음엔 AGENTS.md에 "이 훅들 꼭 돌려라"라고 적어두면 되겠거니 했어요. 그런데 이건 지침이지 강제가 아니에요. 헤드리스 실행기는 그 문장을 읽고도 안 지킬 수 있어요.

이것저것 붙여 봤더니 결론은 하나였어요. 게이트는 문서가 아니라 실행 경로 안에 배선돼야 강제된다는 거요.

게이트를 실행기 안으로 옮겼어요

그래서 검사 명령을 ~/.codex/config.toml의 훅이나, 실행기 스크립트 자체에 직접 넣었어요. 이 2군데 중 하나에만 박아두면 어떤 방식으로 실행하든 검사가 빠질 수 없어요.

  • 지침 아닌 배선
  • config나 스크립트에 내장
  • success는 검사 통과가 아님

테스트해 보면 간단하게 확인돼요. 일부러 타입 에러 한 줄을 심고 헤드리스로 돌려서, 초록불이 뜨는지 빨간불이 뜨는지만 보면 되거든요. 게이트가 살아 있으면 여기서 반드시 막혀요.

혼자 여러 자동화를 굴리다 보면 이런 조용한 구멍이 제일 아파요. 라이프케어로그에서 플랜비(plan-b) 같은 걸 만들면서도, 자동화가 "돌았다"고 말하는 것과 "제대로 검사했다"는 건 다른 얘기라는 걸 매번 다시 배워요.

status=success는 상태일 뿐, 통과의 증거가 아니에요. 초록불을 믿기 전에, 그 초록불이 뭘 검사하고 왔는지 한 번만 더 확인해 보세요.

#codex#헤드리스 자동화#false-green

라이프케어로그 서비스가 궁금하신가요?

AI 기반 건강·일정·재활 관리 앱을 직접 써보세요.

서비스 살펴보기

관련 글

댓글

아직 댓글이 없어요. 첫 댓글을 남겨주세요.