5,000억 토큰을 쓰고 나서: AI 에이전트에게 1인칭 슈팅 게임 디컴파일 맡기기

3 hours ago 3

약 3개월간 AI 에이전트로 게임을 C++로 재구성한 결과, 전체 함수의 99%를 복원하고 83%에서 원본과 바이트 단위 일치를 달성함 첫 달에는 게임 실행과 맵 로딩까지 가능했지만, 읽기 좋은 코드 뒤에 잘못된 함수 시그니처, 타입, 구조체 레이아웃과 임의 변경된 로직이 숨어 있었음 원본과 재컴파일 결과를 비교해 PASS/FAIL을 반환하는 검증 하네스를 도입하면서, 모호한 목표와 검토 에이전트에 의존하던 작업을 기계적으로 검증 가능한 작업으로 바꿈 엄격한 합격 기준과 정확한 피드백 덕분에 저렴한 모델도 활용 가능해졌으며, 마지막 몇 주에는 Luna 14개와 Opus 5.5 2개 에이전트를 주로 운용함 최종 게임은 눈에 띄는 버그 없이 원본의 모든 기능을 갖췄지만, 일부 함수는 바이트 일치로 검증하지 못함. 팀은 이 함수들도 의미적으로 정확하며 추가 토큰 소비 대비 개선 효과가 작다고 판단해 작업을 마무리함 목표와 초기 작업 환경 목표는 단순한 개념 검증이 아니라, 정확하고 안정적이며 기능이 완전한 C++ 게임 재구성이었음 의미적으로 정확하면서도 읽기 쉽고 컴파일 가능한 소스를 원했음 오래된 게임의 보안 문제와 버그 수정, Linux/macOS/브라우저 이식도 고려했지만, 이후 현대화와 이식성을 미루고 원본 동작 복원에 집중함 프로젝트 전체를 관통하는 목표는 수개월 동안 자율 AI 에이전트를 효과적으로 오케스트레이션하는 방법을 배우는 것이었음 Claude Max(20x) 로 시작해 Codex Pro를 추가하고 두 구독을 함께 사용함 초기에는 Sonnet 5를 주로 사용했으며 Opus 5.5, Luna, Sol, Terra도 많이 활용함 Claude는 Claude Code CLI, Codex는 Codex CLI에서 실행함 다른 에이전트 하네스도 시험했지만 선택에 따른 차이가 거의 없어 기본 도구를 유지함 진행 상황은 GitHub 이슈로 관리함 번역 단위인 .cpp 파일마다 이슈 하나를 만들고, GitHub CLI로 에이전트가 직접 관리함 레이블로 작업을 묶고 우선순위를 정함 에이전트 간 통신과 사람의 개입에는 Discord 공용 채널을 사용함 모든 에이전트가 메시지를 읽고 쓸 수 있었으며, 참여자는 머신 접근 권한 없이도 에이전트와 대화할 수 있었음 GitHub 웹훅이 CI 실패 알림을 같은 채널에 전달함 디스어셈블과 디컴파일에는 거의 전 기간 Hex-Rays의 공식 ida-mcp를 사용함 이 프로젝트에서는 안...

Read Entire Article