이제 내 AI 에이전트는 작업이 실제로 실행되었음을 증명하는 서명된 영수증을 전달합니다
요약
AI 에이전트가 수행한 작업이 실제로 성공적으로 실행되었음을 ed25519 서명된 증명(attestation)으로 검증하는 BootProof를 소개합니다. 단순히 프로세스 시작 여부를 넘어, 서비스의 실제 응답성과 상태를 확인하여 신뢰할 수 있는 '영수증'을 생성합니다.
핵심 포인트
- AI 에이전트의 작업 완료 주장에 대한 객관적 증거 제공
- ed25519 서명을 통한 독립적이고 신뢰할 수 있는 검증 가능성
- 단순 명령 종료가 아닌 실제 서비스 상태(Health) 기반 검증
- 계정이나 플랫폼 없이도 로컬에서 검증 가능한 Living Receipt 기능
모든 사람과 마찬가지로, 저 또한 컴파일되고 자체 테스트는 통과하지만 실행은 되지 않는 AI 생성 코드를 검토해 왔습니다. 그래서 제가 원하던 것을 직접 만들었습니다. 에이전트(또는 사람)가 작업이 완료되었다고 주장할 때, 그 주장이 영수증(receipt) 형태로 전달됩니다. 앱이 실제로 부팅되었고, 감독되었으며, HTTP 응답을 수행하는 것이 관찰되었습니다. 그리고 이 증거는 npx bootproof verify를 통해 어떤 머신에서든 독립적으로 검증할 수 있는 ed25519 서명된 증명(attestation)으로 기록됩니다. 계정도, 플랫폼도, 대시보드도 필요 없습니다.
문제점
모든 개발자는 다음과 같은 루프를 알고 있습니다:
git clone some/repo
npm install
npm run dev
그다음 현실이 나타납니다. 잘못된 Node 버전. 잘못된 pnpm 버전. 누락된 Java. Docker는 실행 중이지만 서비스는 정상(healthy) 상태가 아닙니다. 앱은 시작되지만 아무것도 응답하지 않습니다. AI 에이전트는 프로세스가 시작되었다는 이유만으로 자신 있게 "완료되었습니다"라고 말합니다.
그것은 증거가 아닙니다.
README는 유용할 수 있지만, 증거는 아닙니다. 터미널 명령은 유용할 수 있지만, 증거는 아닙니다. 모델의 응답은 유용할 수 있지만, 증거는 아닙니다.
BootProof가 하는 일
BootProof는 활동(activity)과 증거(evidence)를 분리합니다.
약한 신호 (Weak signal)
대신 BootProof가 원하는 것
명령 종료 (command exited) -> 관찰된 상태 (observed) -> 상태 확인 (health)
프로세스 시작 (process started) -> 도달 가능한 엔드포인트 (reachable endpoint)
컨테이너 실행 중 (container running) -> 서비스가 실제로 응답함 (service actually responds)
README에 작동한다고 적힘 (README says it works) -> 저장소 증거 + 런타임 증명 (repo evidence + runtime proof)
AI가 완료되었다고 말함 (AI says it is done) -> 서명된 증명 (signed attestation)
실패한 실행이라도 진실을 말해준다면 여전히 유용합니다:
✗ 검증되지 않음 (NOT VERIFIED) — package_manager_version_mismatch
발생한 상황:
해당 저장소는 pnpm 10.24.0을 요구하지만, 이 환경에는 pnpm 9.15.4가 설치되어 있습니다.
BootProof가 거부한 이유:
잘못된 패키지 매니저 버전으로는 의존성 설치(dependency install)를 신뢰할 수 없습니다.
안전한 다음 단계:
corepack enable && corepack prepare pnpm@10.24.0 --activate를 실행한 다음, BootProof를 다시 실행하세요.
증거:
.bootproof/attestation.json
Living Receipt 시도하기
Living Receipt는 JSON 증명 (attestation)과 동일한 증거를 담고 있지만, 네트워크 호출 없이 브라우저 내에서 자체 ed25519 서명을 재검증하는 단일 독립형 HTML 파일로 렌더링됩니다.
파일을 다운로드하여 로컬에서 연 다음, 'Tamper with signature'를 클릭하여 판정 (verdict)이 무너지는 것을 확인해 보세요:
curl -sL https://github.com/bootproof/bootproof/raw/main/assets/living-receipt.html -o proof.bootproof.html
open proof.bootproof.html
서명된 메시지의 단 1바이트라도 변경되면, 서명과 함께 판정이 무너집니다. 이것이 핵심입니다. 조작을 견뎌내는 초록색 체크 표시는 이 모든 전제 조건을 무너뜨릴 것이기 때문입니다.
Receipt Gate: 실행되지 않은 AI PR 차단
Receipt Gate는 BootProof가 실제 부팅 (boot)을 관찰하지 않으면 PR 병합 (merge)을 차단하는 GitHub Action입니다. 증명이 없으면 병합도 없습니다.
- uses: bootproof/receipt-gate@v1 with: path: . require-health: 'true'
AI 에이전트를 직접 게이트 (gate) 하세요 — .claude/settings.json에서 에이전트가 완료되었다고 주장할 때마다 영수증 (receipt)을 제출하도록 설정할 수 있습니다:
json
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "npx -y bootproof@0.4.1 up . --provider local --unsafe-local --json --timeout 60000 > .bootproof-last.json; node -e "const r=require('./.bootproof-last.json'); console.log(r.booted && r.healthVerified ? '✅ RECEIPT: work boots and answers' : '❌ NO RECEIPT: ' + (r.failureClass||'boot not observed'));""
}]
}]
}
}
에이전트가 작업을 마치면, 당신이 코드 한 줄을 검토하기도 전에 영수증(또는 영수증의 부재)이 출력됩니다.
구성된 신뢰 스토리
런타임 증명 (runtime proofs)에 서명하는 도구 자체도 서명된 빌드 출처 (build provenance)와 함께 게시됩니다. Sigstore의 빌드 출처는 도구가 어떻게 빌드되었는지를 다루며, BootProof의 런타임 증명은 도구가 실제로 실행되는지를 다룹니다. 양 끝단을 모두 검증하세요.
npm view bootproof@0.4.1 dist.attestations
무엇을 주장하지 않는가
제가 가장 중요하게 생각하는 부분은 이 도구가 무엇을 주장하지 않는가 하는 점입니다. 관찰된 신호가 없다면 → 녹색 체크 표시(green check)도 없습니다. 로컬 영수증(local receipt)은 서명 시점 이후의 무결성(integrity-since-signing)을 증명할 뿐, 서명 기계 자체가 정직했다는 것을 증명하지는 않습니다. 이는 문서화된 신뢰 사다리(trust ladder: local_developer_signed → ci_oidc_signed → neutral_runner_signed → transparency_logged)를 업그레이드 경로로 하여 아티팩트(artifact) 자체에 명시되어 있습니다. 과도하게 주장하는 신뢰 도구는 도구가 없는 것보다 더 해롭기 때문에, 이 도구는 의도적으로 보수적으로 설계되었습니다.
이 프로젝트는 오픈 소스(Apache-2.0)이며, 이 커뮤니티의 분들에 의해 이 도구가 깨지는(broken) 경험을 진심으로 환영합니다.
링크:
GitHub: https://github.com/bootproof/bootproof
GitHub Actions Marketplace의 Receipt Gate: https://github.com/marketplace/actions/receipt-gate
npm: https://www.npmjs.com/package/bootproof
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기