원문 캡처 · github.com
원문 캡처 · github.com

책 《The Second Time Is a Bug: A field workbook for engineering with AI coding agents》의 동반 저장소는 AI 코딩 에이전트의 실수를 재현하고 가드가 이를 잡아내는 훈련을 제공한다. 26개 드릴은 임시 사본에서 실수를 만들어 검사하며, 모델이나 API 키, 네트워크 연결 없이 실행할 수 있다.

저장소에는 프리랜서를 위한 소규모 청구 앱과 복잡하게 얽힌 2014년 청구 내보내기 도구, 가드 스크립트와 실행 게이트, 두어 줄짜리 에이전트 루프를 포함한 예제 등이 들어 있다. 템플릿을 자체 저장소에 복사할 수 있으며, 하네스의 효과를 측정하는 실험 도구와 제작자의 실행 기록도 제공한다. 코드는 TypeScript와 Node 기반이며 런타임 의존성과 빌드 단계가 없다.

실행하려면 Node.js 22.18 이상과 git이 필요하다. 브라우저 드릴 D13·D14와 npm run e2e에는 Playwright용 Chromium을 설치해야 한다. Chromium 없이 npm run drills를 실행하면 해당 드릴 두 개는 건너뛰고 종료 코드 1을 반환한다. 저장소는 이를 전체 실행으로 간주하지 않는다.

text
npm install # dev tools only: typescript, @types/node, @playwright/test, axe-core
npm test # unit tests and the legacy golden master
npm run typecheck # tsc --noEmit
npm run gate # every guard, fast ones first; refuses on any failure
npm run drill D06 # one drill: the float-money guard catches a parseFloat
npx playwright install chromium # once, for drills D13 and D14
npm run drills # all 26 drills and a summary table (a few minutes)
npm run e2e # browser and accessibility tests
npm start -- --seed-demo # Invoicer on http://127.0.0.1:3000 with a demo client

npm run gate는 작업 트리와 HEAD를 비교한다. git 저장소 밖에서는 차이 비교에 기반한 가드가 추측하지 않고 ‘건너뜀’으로 표시한다. CI에서 브랜치 전체를 검사하려면 GUARD_BASE=origin/main을 설정하며, 저장소의 .github/workflows/gate.yml도 이를 사용한다. 설치 후에는 선택 사항인 node guards/package-check.ts --online이 npm 레지스트리에 접속하는 경우를 제외하면 네트워크가 필요하지 않다.

각 드릴은 npm run drill DNN으로 개별 실행할 수 있다. 드릴별 안내에는 재현하는 실수와 나타나는 결과, 실제 에이전트로 같은 실수를 시도하는 방법이 담겨 있다. 가드는 문제 위치와 내용, 다음 조치를 출력하며 종료 코드 0은 통과, 1은 실패를 뜻한다. destructive-command.ts는 에이전트 훅에서 흔히 쓰는 방식대로 차단할 때 2를 반환한다. 가드가 작동할 때마다 .harness/guard-log.jsonl에 기록을 추가하고, guards/guard-audit.ts가 이를 읽어 종료할 준비가 된 가드를 찾는다.

코드는 MIT 라이선스이며 책 본문은 저장소에 포함되지 않는다. 저장소와 실행 안내와 책 웹사이트에서 자세한 정보를 볼 수 있다.