← 전체 기능

검증·리뷰v0.3.0에서 사용 가능

게이트

게이트는 “끝났다”를 증거가 남는 검사로 바꾼다. 확인할 수 있는 결과 하나, 그것을 증명하는 명령, 그 명령이 내야 하는 출력으로 이뤄진다. oah gates check는 사용자가 승인한 뒤 unlazy로 CHECK 줄을 실행하고, 통과한 게이트에 증거와 함께 체크 표시를 붙여 입력에 묶는다. oah finish는 충족하지 못한 게이트를 거절한다.

필요한 상황

에이전트가 “끝났다”고 말해도 아무것도 증명되지 않는다. 기록된 검사가 없으면 무엇이 통과했는지 알 수 없고, 나중의 변경이 한때 되던 결과를 조용히 깨뜨릴 수 있다.

동작 방식

  1. oah gates new <task>가 템플릿으로 .oah/tasks/<task>/GATES.md를 만들고, oah gates lint <task>가 각 게이트가 실패할 수 있는지 판단한다.
  2. oah gates check <task>는 처음 실행할 때 CHECK 명령을 보여 주고 사용자의 승인(--approve)을 기다린다.
  3. oah가 검증한 커밋의 unlazy가 검사를 실행한다. 통과한 게이트에는 증거와 함께 체크 표시가 붙고 입력에 묶이므로, 나중에 입력이 바뀌면 게이트를 다시 돌린다.
  4. gates check가 쓰는 GATES.summary.md가 경로 없이 커밋되는 기록이다. 원장 자체는 git에 들어가지 않는다.
  5. oah finish는 충족하지 못한 게이트를 거절한다(OAH_GATES_UNMET). 정말 불가능한 게이트는 ABANDON: G<n> <이유>로 적어 사용자에게 넘기고 지우지 않는다.

예제

원장에 적힌 게이트 하나(개념 문서).

- [ ] G1: `python hello.py Ada` prints `Hello, Ada!`
  CHECK: python hello.py Ada
  EXPECT: Hello, Ada!
  EVIDENCE: pending

요구 사항

  • 게이트 검사기 unlazy. oah init --with-unlazy로 설치하며 Node.js 16 이상이 필요하다.
  • CHECK 줄은 cmd.exe와 sh에서 똑같이 돌아야 한다. grep이나 파이프 대신 python, node, oah check(예: oah check contains FILE TEXT)를 쓴다.

한계와 복구

  • 게이트의 입력은 추적 중인 파일, 무시되지 않은 미추적 파일, 실행 환경이다. 외부 서비스나 무시된 미추적 파일이 바뀌어도 게이트를 다시 돌리지 않으므로 따로 확인해야 한다.
  • unlazy가 없으면 게이트 명령이 거절된다(OAH_UNLAZY_MISSING). oah finish --allow-structural은 체크 표시만으로 끝내며 미검증으로 기록된다.
  • 선택형 Stop 훅은 게이트를 충족하지 못한 Claude Code 세션이 끝나지 못하게 한다. [gates] stop_agents로 범위를 좁히면 검사가 oah finish로 옮겨질 뿐 사라지지 않는다.
  • 요약이 기록과 맞지 않으면 OAH_GATES_SUMMARY_STALE이다. oah gates check <task>를 실행하고 다시 쓴 요약을 커밋한다.

원문 문서

관련 기능