-
프롬프트는 규칙이 아니고, exit 1이 규칙이었다AI Agent 2026. 8. 5. 09:00728x90반응형

처음엔 문장을 세게 쓰면 될 줄 알았습니다.
“절대 완료라고 말하지 마라.”
“반드시 검증하고 넘어가라.”
“실패하면 멈춰라.”
이렇게 적어두면 에이전트도, 저도, 파이프라인도 조금 더 조심해질 거라고 생각했습니다.
근데 실제 작업에서는 그 문장들이 생각보다 약했습니다.
화면에는 PASS가 떴고, 채팅에는 “완료했습니다”가 남았고, 다음 단계는 시작됐는데 정작 확인해야 할 파일은 비어 있었습니다.그날 배운 건 단순했습니다.
규칙은 읽히는 문장이 아니라, 실패할 수 있는 프로그램이어야 합니다.완료했다는 말이 너무 쉽게 나왔습니다
제가 처음 믿은 건 체크리스트였습니다.
목표를 만들고, 단계별 완료 기준을 적고, 마지막에 “검증 후 진행”이라고 붙였습니다.
사람이 읽기엔 충분히 엄격해 보였습니다.
문제는 그 엄격함이 어디에서도 실행되지 않았다는 점입니다.예를 들어 이런 식이었습니다.
Phase 0: 자료 조사 완료 Phase 1: 초안 작성 Phase 2: 검증겉으로는 멀쩡합니다.
그런데 “자료 조사 완료”를 누가 판단하나요.
조사 파일이 실제로 생겼는지, 빈 파일은 아닌지, 필요한 항목이 들어 있는지, 이전 실행의 낡은 산출물을 다시 보고 있는 건 아닌지.
그걸 아무도 기계적으로 확인하지 않으면 Phase 0은 그냥 문장입니다.처음엔 검증자 프롬프트를 더 길게 만들었습니다.
“반드시 증거를 요구하라”, “모호하면 HOLD하라” 같은 문장을 더했습니다.효과는 있었습니다.
잠깐만.
검증자가 실수하면 다시 똑같았습니다.
그래서 문장을 스크립트로 바꿨습니다
제가 지금 쓰는 최소 게이트는 거창하지 않습니다.
완료 기준을 파일로 쓰고, 검증 보고서를 정해진 형식으로 받습니다.
그다음 작은 스크립트가 보고서를 읽습니다.
필요한 키가 없으면 실패합니다.
PASS가 아니면 실패합니다.
산출물 경로가 없으면 실패합니다.중요한 건 스크립트가 똑똑할 필요가 없다는 점입니다.
오히려 멍청해야 합니다.PASS가 있는가 증거 파일이 있는가 검증한 commit 또는 산출물 시간이 적혀 있는가 필수 항목이 비어 있지 않은가이 정도만 봐도 많은 가짜 완료가 걸립니다.
한 번은 보고서가 꽤 그럴듯했습니다.
설명도 길고, 위험도도 정리돼 있었습니다.
그런데verified_commit_sha가 비어 있었습니다.
사람이 읽으면 그냥 넘어갈 수 있는 빈칸입니다.
스크립트는 exit 1을 냈습니다.그때 좀 짜증났습니다.
거의 다 된 것 같았거든요.근데 그 빈칸 하나 때문에 다시 확인했고, 보고서가 이전 커밋 기준이라는 걸 알았습니다.
게이트는 똑똑한 리뷰어가 아니라 문지기였습니다
제가 착각했던 건 “검증을 잘하는 시스템”을 만들려 했다는 점입니다.
처음부터 완벽한 판단기를 만들 필요는 없었습니다.
필요한 건 다음 단계로 넘어가도 되는 최소 조건을 막는 문지기였습니다.
그리고 문지기는 설명을 잘할 필요가 없습니다.
문이 열리거나 닫히면 됩니다.지금은 작업을 나눌 때 이렇게 생각합니다.
질문 문장으로 충분한가 스크립트가 필요한가 방향을 정하는가 예 아니오 산출물이 존재해야 하는가 아니오 예 다음 단계가 이 결과를 믿고 진행하는가 아니오 예 틀렸을 때 비용이 큰가 아니오 예 작은 글 수정이나 명확한 오타에는 이런 게 필요 없습니다.
게이트를 남발하면 일보다 절차가 커집니다.
근데 다음 단계가 앞 단계의 결과를 신뢰해야 한다면, 채팅 선언은 너무 약합니다.지금은 완료 보고를 이렇게 봅니다
요즘 저는 “완료했습니다”라는 말을 들으면 바로 믿지 않습니다.
대신 세 가지를 봅니다.첫째, 증거가 실제 파일이나 명령 결과로 남았는지.
둘째, 그 증거가 지금 버전의 산출물인지.
셋째, 실패하면 다음 단계가 정말 멈추는지.
셋 중 하나라도 없으면 아직 완료가 아닙니다.
진행 중입니다.이 기준을 세우고 나서 작업 속도가 바로 빨라진 건 아닙니다.
오히려 처음엔 느려졌습니다.
PASS처럼 보이는 것들이 HOLD로 바뀌었으니까요.하지만 그 뒤에 생긴 차이가 있었습니다.
한 번 닫힌 단계는 다시 덜 열렸습니다.
“아까 된 줄 알았는데요”라는 말을 덜 하게 됐습니다.다음엔 이 게이트를 더 똑똑하게 만들 생각은 없습니다.
일단은 빈칸을 보면 멈추는 정도면 충분합니다.
728x90반응형'AI Agent' 카테고리의 다른 글
트랜잭션 경계는 같이 성공하거나 같이 실패해야 하는 범위입니다 (0) 2026.08.05 캐시 무효화는 빠른 값을 저장하는 문제가 아니라 낡은 값을 버리는 문제입니다 (1) 2026.08.05 백프레셔는 빠른 생산자에게 천천히 보내라고 말하는 구조입니다 (0) 2026.08.04 레이스 컨디션은 코드 순서가 아니라 실행 순서가 바뀌는 버그입니다 (0) 2026.08.04 멱등성은 같은 요청을 두 번 보내도 결과가 망가지지 않는 성질입니다 (0) 2026.08.04