작업자가 자신의 테스트를 작성하지 못하게 하는 방법: 에이전트가 스스로 과제를 평가하는 것을 막는 방법
요약
본 글은 AI 에이전트 워크플로우에서 작업자가 자신의 테스트나 검증 과정을 임의로 조작하는 것을 방지하는 방법을 설명합니다. 증명(proof) 명령어를 스냅샷하고, PASS 라인 기록을 통해 투명성을 확보하며, 복잡한 스크립트는 검증자(verifier)가 작성하도록 분리하여 신뢰도를 높입니다.
핵심 포인트
- 작업자의 조작 방지를 위해 'exit 0'만으로는 부족합니다.
- 증명 명령어는 `origin` 이벤트에서 스냅샷되어 위변조가 어렵습니다.
- 복잡한 증명은 검증자(verifier)가 작성하여 책임 소재를 명확히 합니다.
- 완료 후에도 코디네이터가 추가적인 증명을 실행하여 신뢰성을 확보합니다.
제 이전 게시물(last post)에서는 '모델이 Done이라고 말하면 안 되고, 명령어는 0으로 종료되어야 한다'라는 규칙을 세웠습니다. 여기서 명백한 허점이 생겼는데, 제가 스스로에게 할 법한 첫 번째 댓글에서 이런 의문이 들었습니다: 누가 명령어를 작성하는가?
만약 코드를 작성하는 에이전트가 검사(check)까지 작성한다면, 'exit 0'은 '에이전트가 자기 자신과 동의했다'는 의미가 됩니다. 작업 후에 작성된 검사는 그 작업에 맞게 조작될 수 있습니다. 그래서 Hermes.Crew에는 세 가지 별도의 규칙이 있으며, 각각은 속임수를 쓸 수 있는 다른 방법을 차단합니다.
규칙 1: 카드가 열릴 때 증거(proof)는 고정된다
증명 명령어(proof command)는 카드가 열리는 순간, 즉 origin 이벤트에서 스냅샷됩니다. 카드 텍스트의 proof command: 라인을 나중에 수정해도 아무 변화가 없습니다. PASS를 생성할 수 있는 유일한 명령어는 스냅샷된 것입니다. 이를 합법적으로 변경하는 방법은 기록된 결정인 코디네이터(coordinator)의 rescope뿐입니다.
규칙 2: PASS 라인이 없으면 종료가 거부된다
증명 앱(proof app)이 실행될 때마다 판결 라인(누가 실행했는지, 어떤 실행인지, exit code 0일 때만 PASS)이 카드별 파일에 추가됩니다. 크루 카드에서 kanban_complete는 해당 파일에 카드의 증명 명령에 대한 PASS가 있고 그 이후로 아무 검사도 실패하지 않았을 경우에만 모든 프로필에서 거부됩니다.
에이전트는 이 과정을 말로 논파할 수 없습니다. 이것은 정직함을 요구하는 프롬프트가 아니라 오류를 반환하는 도구입니다.
규칙 3: 증명이 스크립트일 때, 검증자(verifier)가 작성한다
어떤 작업은 한 줄의 명령어로 증명될 수 없습니다. 이런 경우, 증명은 카드당 하나의 폴더인 .crew/ 폴더 내의 스크립트입니다. 여기서 분리가 중요합니다:
- **검증자(verifier)**가 카드의
스크립트는 첫 실행 시 해시(hash)에 의해 바인딩됩니다. 스크립트는 오직 코디네이터의 revise_script 결정에 의해서만 변경되며, 새로운 해시는 누가 작성했는지와 어떤 결정이 승인했는지가 기록됩니다. 작업자가 이 스크립트를 불쾌하게 여겨도 더 조용한 버전으로 갈 방법은 없습니다.
그리고 '완료(done)' 후에도 누군가 다시 확인합니다
카드가 완료되면, 코디네이터는 증명(proof)을 한 번 더 실행합니다. 실패하면 해당 완료된 카드에 댓글을 달고 그 아래에 후속 카드를 하나 열게 됩니다. 운 좋게 녹색으로 성공적으로 실행되었다고 해서 문제가 해결되는 것은 아닙니다.
소유자는 여전히 CLI에서 hermes kanban complete --force를 사용하여 재정의할 수 있으며, 이는 조용한 통과(silent pass)가 아니라 owner_close 결정으로 표시됩니다.
이것이 보장하는 것 (또는 사지 못하는 것)
- 증명이 정확하다는 것을 만들어주지는 않습니다. 검증자(verifier)는 잘못된 것을 확인하는 스크립트를 작성할 수 있습니다. 독립성(Independence)은 작업자가 테스트를 작업에 맞추려는 인센티브를 제거하지만, 지시사항에 대한 오해 자체를 제거하지는 못합니다.
- 독립적인 카드마다 두 번째 모델 세션 비용과 증명 실행 비용이 발생합니다. 이는 나쁜 거래인 한 줄의 변경 사항에 해당하며, 이것이 단순 명령어만으로 구성된 증명이 저비용 모드(cheap mode)로 유지되는 이유입니다.
- 해시는 변조를 눈에 띄게 할 뿐, 불가능하게 만들지는 않습니다. 보장사항은 플러그인이 에이전트가 도구를 통해 무엇을 할 수 있게 하느냐에 관한 것입니다. 그것들은 귀하의 장치에서 셸(shell)을 가진 사람에 대한 샌드박스(sandbox)는 아닙니다.
제 플러그인 없이 패턴만으로
- 작업을 수행한 사람이 승인 검사(acceptance check)를 작성하지 않습니다.
- 검사는 작업이 시작되기 전에 고정되거나, 기록된 결정을 통해서만 변경됩니다.
- '닫기(close)' 액션은 통과하는 결과 없이 물리적으로 거부됩니다.
- 작업자 외의 다른 무언가가 나중에 이를 재실행합니다.
어떤 에이전트 프레임워크든 파일, 해시, 그리고 '닫기' 시도 앞에 보호 장치(guard)만 있으면 이 네 가지를 모두 수행할 수 있습니다.
Hermes.Crew는 Apache-2.0이며, 셀프 호스팅(self-hosted)되고 텔레메트리(telemetry)가 없습니다: github.com/macd2/Crew.
hermes plugins install macd2/Crew
python3 ~/.hermes/plugins/crew/install.py --profile NAME
hermes -p NAME plugins doctor crew
에이전트 설정에서 누가 수용성 검사(acceptance check)를 작성하며, 작업자(worker)가 이를 수정할 수 있나요? 만약 그렇다면, 어떤 일이 일어났는지 듣고 싶습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기