「レビューしました、問題ありません」をやめる — PR에 실행 증거를 첨부하는 AI Agent의 skill
요약
create-prove는 GitHub Actions 기반 자율 에이전트 aeon에 포함된 스킬로, PR 리뷰 과정에서 코드가 실제로 작동했는지 증거를 첨부합니다. 기존의 diff 리뷰만으로는 부족하며, 이 스킬은 변경된 skill을 실제 실행하고 그 결과를 기계가 읽을 수 있는 영수증 형태로 PR 댓글에 반환하여 검증 과정을 강화합니다.
핵심 포인트
- PR 리뷰는 '작동 여부'를 알 수 없으므로 증거 첨부가 필수적입니다.
- create-prove는 변경된 skill을 실제 실행하고 그 결과를 포착합니다.
- 실행 결과는 기계가 읽을 수 있는 JSON 영수증 형태로 PR에 반환됩니다.
- 안전한 실행과 엄격한 상관관계를 유지하며, 가짜 증거를 만들지 않습니다.
개요
create-prove는 aeon의 공식 catalog에 포함된 skill입니다. aeon은 GitHub Actions 위에서 작동하는 자율 agent이며, 내부적으로 Claude Code가 구동하고 있습니다. skill은 각각 하나의 markdown 파일로 구성되어 있으며, 스케줄 또는 dispatch를 통해 실행됩니다. 이 skill이 upstream에 들어온 것은 2026-09-18입니다.
수행할 작업은 매우 좁게 제한됩니다. 실행 가능한 skill을 단 하나만 변경하고, 특정 commit SHA에 고정된 pull request를 전달하면, 해당 skill을 리포지토리 자체의 aeon.yml 워크플로우를 통해 실제로 실행합니다. 그리고 그 증거를 기계가 읽을 수 있는 영수증(receipt) 형태로 PR에 댓글로 반환합니다.
리뷰는 실행이 아니다
리뷰를 통해 알 수 있는 것은 '코드가 제대로 읽힌다'는 것까지입니다. '코드가 실제로 작동했다'는 것은 알 수 없습니다.
일반적인 PR 워크플로우는 가장 중요한 질문을 버리고 있습니다. 리뷰어가 diff를 읽고, CI가 lint와 타입 체크를 통과시키면 모두가 동의하여 병합합니다. 변경된 skill이 실제로 작동하는 것을 아무도 확인하지 않습니다. skill 자체가 자연어 지시문인 agent에게 이 공백은 매우 큽니다. markdown은 아름답게 작성되었더라도, 동작은 고장 나 있을 수 있습니다.
create-prove는 skill 자체의 지시문에 그대로 적혀 있는 하나의 대비를 기반으로 합니다. diff 리뷰가 녹색이라도 증거가 아닙니다. 상관관계가 있는 Actions의 실행이 성공해야 비로소 증거가 됩니다. skill의 다른 부분들은 모두 이 '후자'를 저렴하고 위변조하기 어렵게 만들기 위해 존재합니다.
원리
대상은 구조적으로 불변입니다. 입력은 owner/repo#pr@40자리 SHA 형식과 완벽하게 일치해야 하며, 그 외의 경우는 PROVE_INVALID_TARGET으로 종료됩니다. dispatch 전에 skill은 다음 사항들을 확인합니다.
- PR이 open 상태인지
- PR의 현재 head SHA가 기대값과 일치하는지
- head 브랜치가 같은 리포지토리 내에 있는지 (fork 브랜치는 대상에서 제외)
- diff가 변경하고 있는 것이 skills//SKILL.md 단 하나인지를
이 중 어느 하나라도 맞지 않으면 PROVE_UNSUPPORTED 또는 PROVE_STALE로 종료하며, 영수증을 게시하지 않습니다.
실행은 본래의 것이며 시뮬레이션이 아닙니다. 변경된 skill의 frontmatter를 읽고, 변경된 동작을 거치는 최소한의 실재하는 비파괴적인 변수를 선택하여 실행합니다. 더미 인증 정보나 dry-run 모드도 사용하지 않습니다. 안전하게 실행할 방법이 없으면, 증거를 꾸며내는 대신 PROVE_UNSAFE로 종료합니다.
상관관계는 엄격합니다. dispatch에는 고유 ID가 부여되며, 그 ID는 반드시 리터럴 접두사 prove-로 시작해야 합니다. 워크플로우 측의 커밋 스킵 가드가 이 접두사를 인식하기 때문에, 증명을 위한 실행이 증명 대상 브랜치에 커밋을 되돌리는 일은 없습니다. 이후 skill은 상관관계가 있는 실행 제목의 완전한 일치로만 실행을 찾고, '해당 skill의 최신 실행'을 결코 가져오지 않습니다. 최대 30분을 기다리며 status=completed이고 conclusion=success를 요구합니다. 캡처된 출력이 빈 실행인 경우 PROVE_MISSING_EVIDENCE로 기각됩니다.
모든 게이트를 통과하고, 심지어 head SHA가 움직이지 않았음을 재확인한 후에야 PR에 단 하나의 댓글을 게시합니다. 내용은 다음과 같습니다.
- 어떤 실행 경로를 거쳤는지에 대한 설명
- 실행의 URL
- 출력의 발췌본
- 해당 SHA와 연결된 1줄짜리 JSON 영수증 (
다음 시나리오는 가상의 것입니다. 원문 작성 시점 기준으로, 이 인스턴스에는 create-prove의 로컬 실행 기록이 아직 없습니다. 여기에 적힌 내용은 실제 로그가 아니라 skill 파일에 쓰여진 절차에 따른 흐름입니다.
digest 계열 스킬이 출력 포맷을 변경할 때
어떤 PR이 skills/daily-digest/SKILL.md를 수정하여 출력 구성을 바꿨다고 가정해 봅시다. create-prove는 owner/repo#42@를 받아 게이트를 확인하고, 작은 실제 변수를 선택한 후, PR의 head 브랜치 위에서 aeon.yml을 prove-42-...라는 dispatch ID로 실행합니다. 20분 후, 상관관계가 있는 실행이 출력을 캡처한 상태로 성공하며, head SHA도 일치하기 때문에, 해당 PR에 그 실행을 직접 가리키는 레시트(receipt) 댓글이 달립니다.
패턴: 리뷰어가 "이거 작동합니다"라고 주장하는 것이, 머지되는 커밋에 고정된, 실제로 작동한 실행으로 연결되는 링크로 바뀝니다.
증명 도중 작성자가 push 할 때
전제는 동일하지만, 증명 실행 중에 작성자가 수정을 force-push 합니다. create-prove가 게시 전에 PR을 다시 읽어보면, head SHA는 이미 기대값과 일치하지 않습니다. PROVE_STALE로 종료되며 아무것도 게시되지 않습니다. 그 이유는 증거가 더 이상 head에 존재하지 않는 커밋의 것이기 때문입니다.
패턴: 조용히 구식이 되지 않는 증명은, 매번 도착하는 증명보다 가치가 있습니다.
증명은 의견이 아니라 결과물(Artifact)이다
사고방식의 전환은 작지만, 한번 바꾸면 돌아갈 수 없습니다. "검증됨"을 리뷰어의 머릿속에서 도달하는 상태로 취급하는 것을 멈추고, 객체(Object)로 다룹니다. 실행 ID, URL, 출력 발췌본, SHA를 기계가 읽을 수 있는 단 한 줄에 용접한 것입니다.
증명이 결과물이 되면, "증명이 없는 것"도 보이게 됩니다. 레시트가 없는 PR은 단순히 아직 증명되지 않았다는 의미입니다. 그리고 skill의 fail closed 종료 코드는 레시트가 없는 이유를 하나도 빠짐없이 명확하게 보여줍니다.
사용해 보기
create-prove는 aeon 공식 카탈로그(www.aeon.fun)에 있으며, github.com/aeonfun/aeon 리포지토리에 포함되어 있습니다. 다른 어떤 skill들이 있는지 여부는 스킬 목록에서 확인할 수 있습니다. 스킬을 추가하고 해당 스킬에 대한 PR을 열면, 에이전트가 실제로 "proven"이라는 단어를 획득하도록 만들 수 있습니다.
시리즈 기사 (원문・영어)
compute-resell: Clearing Price로 판매되는 무료 컴퓨팅 — 남는 컴퓨팅 자원을 보드 표시상의 최저가가 아닌 실제 청산 가격으로 재판매하는 skill
Ten Skills That Keep an Unsupervised AI Agent Honest — 비감독(Unsupervised) 에이전트를 정직하게 유지하는 10가지 스킬 탐방기
번역가 코멘트에서
코드를 읽고 싶은 분께는 skills/create-prove/ 디렉토리부터 시작하는 것을 추천합니다. SKILL.md의 Steps 중, 단계 2(dispatch 전 게이트 목록)와 단계 4(왜 dispatch_id가 prove-로 시작해야 하는지)를 읽어보면, 본 기사에서 이야기한 내용이 그대로 사양으로 쓰여 있음을 알 수 있습니다. 이 접두사를 잘못 사용하면 "head는 불변"이라는 보장이 조용히 무너진다는 주의사항은, 상관관계 ID를 사용하는 모든 CI 설계에 통하는 이야기입니다.
upstream에 들어간 PR은 aeonfun/aeon#1075 입니다.
리포지토리: github.com/aeonfun/aeon (MIT License) 원문: Create Prove: a green diff is not a proof
번역어 선택(레시트, 상관관계, fail closed 등의 번역 방식)에 대해 더 적절한 표현이 있다면 댓글로 지적해 주십시오. 수정하겠습니다. 기술적인 오역에 대해서도 마찬가지입니다.
"검토했습니다, 문제없습니다"를 그만두기 — PR에 실행 증거를 붙이는 AI Agent의 skill
0
Posted at
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기