
AutoHarness 논문 해설 — AI가 스스로 '규칙 위반 방지 코드'를 만든다
Gemini-2.5-Flash 체스 대회 패배의 78%가 '반칙'이었다. Google DeepMind의 AutoHarness 논문은 LLM이 스스로 규칙 검증 코드를 작성해 이 문제를 해결한다. 작은 모델이 큰 모델을 이기는 역전극의 비밀.

Gemini-2.5-Flash 체스 대회 패배의 78%가 '반칙'이었다. Google DeepMind의 AutoHarness 논문은 LLM이 스스로 규칙 검증 코드를 작성해 이 문제를 해결한다. 작은 모델이 큰 모델을 이기는 역전극의 비밀.

2025년, Kaggle에서 열린 GameArena 체스 대회에서 황당한 일이 벌어졌다. Google의 최신 모델 Gemini-2.5-Flash가 참가해 처참한 성적을 냈는데, 패배 원인을 분석해보니 78%가 전략 실패가 아니라 "반칙"이었다.
무슨 뜻이냐면 — AI가 체스 규칙을 몰라서 진 게 아니다. 규칙을 "알면서도" 비숍을 직선으로 움직이거나, 킹이 체크 상태인데 다른 수를 두거나, 이미 잡힌 말을 다시 움직이는 불법 수(illegal move)를 뒀다. 심판이 "반칙!"을 선언하면 그 즉시 패배 처리된다.

이건 체스만의 문제가 아니다. 지뢰찾기에서 이미 열린 칸을 다시 클릭하고, 오셀로에서 뒤집을 수 없는 위치에 돌을 놓고, 스도쿠에서 같은 행에 중복 숫자를 넣는다. LLM 에이전트가 게임 규칙을 "이해"하고 있음에도 불구하고, 실제 행동에서는 규칙을 위반하는 기이한 현상이 반복되고 있었다.
2026년 2월, Google DeepMind와 Causal 팀의 연구자들이 이 문제에 대한 근본적인 해법을 제시했다. 바로 AutoHarness — AI가 스스로 자신의 행동을 검증하는 코드를 작성하게 하는 논문이다.
💡 핵심 아이디어: LLM에게 "규칙을 지켜라"고 말하는 대신, LLM이 직접 "규칙 검증 코드"를 작성하게 하면 어떨까?
결과는 놀라웠다. 작고 저렴한 Gemini-2.5-Flash가 자신이 만든 코드 안전장치를 장착하자, 크고 비싼 Gemini-2.5-Pro와 GPT-5.2를 능가했다. 145개 게임에서 불법 수 발생률 0%를 달성했다.
이 글은 그 논문을 완전 해부한다. AI 에이전트가 왜 규칙을 어기는지의 역사부터, AutoHarness의 작동 원리, 그리고 2026년 AI 에이전트 시대에 이 기술이 갖는 의미까지.
2022년부터 LLM은 코드 생성과 수학적 추론에서 인간 수준의 성능을 보여왔다. AlphaGeometry2는 국제수학올림피아드 기하학 문제를 풀었고, AlphaEvolve는 과학적 발견을 코드로 구현했다. "AI가 코딩과 수학을 잘한다"는 건 2026년 현재 상식이다.
하지만 이상한 점이 있다. 규칙이 명확한 환경에서의 행동 계획에서는 여전히 취약하다.
이 현상을 학계에서는 "action applicability problem"(행동 적용 가능성 문제)이라고 부른다. 2023년 ASU의 Valmeekam 등이 발표한 연구에서 처음 체계적으로 밝혀졌고, 2025년 ACPBench Hard 벤치마크에서 LLM들이 "이 상태에서 어떤 행동이 가능한가?"를 판단하는 능력이 현저히 낮다는 것이 입증됐다.
이유는 LLM의 근본적인 작동 방식에 있다. LLM은 "다음 토큰 예측" 기계다. 체스판의 현재 상태를 텍스트로 받으면, 훈련 데이터에서 가장 그럴듯한 다음 수를 "예측"한다. 하지만 이 예측에는 실제 게임 상태에 대한 시뮬레이션이 없다.
Tree of Thoughts(Yao et al., 2023)같은 방법론은 LLM의 내부 "세계 모델"을 이용해 탐색하지만, 이 세계 모델 자체가 환각(hallucination)에 취약하다. "이 수가 합법인가?"를 LLM에게 물어봐도 LLM은 자신감 있게 틀린 답을 준다.
기존 해결책은 세 가지였다:
| 방법 | 원리 | 문제점 |
|---|---|---|
| 파인튜닝 | 규칙 위반 사례를 추가 학습 | 느리고 비싸며, 다른 능력이 저하됨 |
| 수동 하네스 코딩 | 개발자가 규칙 검증 코드를 직접 작성 | 게임마다 새로 만들어야 함 (145게임 × N시간) |
| 프롬프트 엔지니어링 | "합법적인 수만 두세요"라고 지시 | 효과 불안정, 복잡한 규칙에서 실패 |
이 문제가 게임에만 해당한다고 생각하면 오산이다. 2026년 현재, AI 에이전트가 실제 업무에 투입되면서 같은 문제가 도처에서 나타나고 있다.
모든 AI 에이전트 시스템은 "이 행동이 지금 가능한가?"를 검증하는 메커니즘이 필요하다. AutoHarness가 주목받는 이유가 바로 이것이다.
AutoHarness를 이해하려면, "AI의 행동을 코드로 제어한다"는 아이디어의 역사를 알아야 한다.
2023년, Google Research의 Liang 등이 ICRA에서 발표한 "Code as Policies" 논문이 이 분야의 시작이었다. 핵심 아이디어는 간단했다: 로봇에게 "컵을 집어서 테이블 위에 놓아라"라고 말하면, LLM이 이를 Python 코드로 변환하여 로봇을 제어한다.
# "Code as Policies" 스타일의 로봇 제어
def pick_and_place():
cup = detect_object("cup")
gripper.move_to(cup.position)
gripper.close()
gripper.move_to(table.center + [0, 0, 0.1])
gripper.open()
자연어 지시를 직접 해석하는 것보다, 코드라는 명시적이고 검증 가능한 중간 표현을 거치면 정확도가 크게 높아졌다.
같은 해, Wang 등이 발표한 Voyager는 마인크래프트에서 작동하는 LLM 에이전트였다. Voyager의 혁신은 "스킬 라이브러리" — AI가 성공한 행동을 코드로 저장하고, 나중에 재사용하는 시스템이었다.
나무를 캐는 코드, 집을 짓는 코드, 몬스터를 피하는 코드 — 이런 스킬들이 축적되면서 Voyager는 점점 더 복잡한 과제를 수행할 수 있게 됐다.
NVIDIA의 Ma 등이 ICLR 2024에서 발표한 Eureka는 한 걸음 더 나갔다. 로봇의 보상 함수(reward function)를 LLM이 코드로 작성하고, 진화적 탐색으로 개선하는 시스템이었다. 인간 전문가가 설계한 보상 함수보다 83%의 태스크에서 더 나은 성능을 보였다.
NeurIPS 2023에서 발표된 Reflexion(Shinn et al.)은 LLM이 실패 경험을 자연어 메모로 저장하고 다음 시도에 활용하는 "언어적 강화학습" 시스템이었다. "지난번에 문을 열지 않고 방에 들어가려 해서 실패했다. 다음엔 먼저 문을 열자."
아이디어는 좋았지만 한계가 명확했다 — 자연어 반성은 모호하고, 정확한 규칙으로 전환되지 않는다. "문을 먼저 열자"라는 교훈이, 다음에 "창문으로 들어가려는" 실수를 막아주진 않는다.
AutoHarness는 이 모든 아이디어를 통합하면서, 결정적인 전환을 이뤘다:
| 접근법 | 코드의 역할 | AutoHarness의 차별점 |
|---|---|---|
| Code as Policies | 행동을 코드로 실행 | + 행동의 합법성을 코드로 검증 |
| Voyager | 성공 스킬을 코드로 축적 | + 실패 원인을 코드로 차단 |
| Eureka | 보상 함수를 코드로 진화 | + 규칙 검증 코드를 트리 탐색으로 진화 |
| Reflexion | 자연어 반성 | + 반성을 코드로 구체화 → 검증 가능 |
하네스(harness)는 원래 말이나 안전벨트를 고정하는 장치를 뜻한다. 소프트웨어 공학에서는 테스트 하네스 — 코드의 올바른 동작을 검증하는 자동 검사 장치를 의미한다.
AutoHarness에서 하네스는 LLM 에이전트의 안전벨트다. LLM이 행동을 제안하면, 코드 하네스가 "이 행동이 합법인가?"를 검증한다. 합법이면 통과, 불법이면 차단하고 다시 요청한다.

그런데 핵심은 — 이 하네스 코드를 사람이 아니라 LLM 스스로 작성한다는 것이다.
AutoHarness가 만드는 코드의 핵심은 딱 두 개의 Python 함수다:
이 두 함수가 전부다. 체스든 지뢰찾기든 오셀로든, 모든 게임에 대해 이 인터페이스로 통일된다. LLM이 해야 할 일은 각 게임의 규칙에 맞는 이 두 함수의 구현체를 작성하는 것이다.
AutoHarness는 이 함수들을 세 가지 방식으로 활용한다:
레스토랑에 비유하면, 코드가 먼저 "주문 가능한 메뉴판"을 만들고, LLM이 그 메뉴에서 고른다. propose_action()을 여러 번 호출해서 합법적인 수 목록을 만들고, LLM이 Chain-of-Thought 추론으로 최선의 수를 선택한다.
LLM이 자유롭게 수를 제안하되, is_legal_action()이 거부권을 행사한다. 불법이면 "이 수는 반칙이야, 다시 해봐"라는 메시지와 함께 재시도한다. 거부 샘플링(rejection sampling)과 유사한 방식이다.
가장 급진적인 모드다. 코드가 직접 최적의 수를 계산한다. 순수 Python + NumPy만으로, LLM을 전혀 호출하지 않는다. 추론 비용이 사실상 $0이다.
AutoHarness의 핵심 혁신은 코드를 어떻게 개선하는가에 있다. 단순히 "에러 메시지를 보고 고치기"가 아니라, 트리 구조의 체계적 탐색을 사용한다.
여기서 톰슨 샘플링(Thompson Sampling)이 핵심이다. 각 코드 버전(트리 노드)의 합법 수 정확도를 추적하고, 탐색(exploration)과 활용(exploitation)의 균형을 잡는다. "이 코드 버전이 유망하지만 아직 충분히 테스트 안 됐으니 한번 더 시도해보자" vs "이미 잘 작동하는 코드를 더 다듬자"의 트레이드오프를 자동으로 조절한다.
코드 개선 과정에서 중요한 세부사항이 하나 있다:
이런 세밀한 에러 라우팅 덕분에 불필요한 수정을 피하고, 실제 문제가 있는 부분만 정확히 고칠 수 있다.
논문의 실험 결과, 평균 14.5번의 트리 탐색 반복만으로 완벽한 하네스 코드가 완성됐다. 32개 게임 중 19개는 10번 미만의 반복으로 충분했다.
체스가 가장 어려웠다는 게 재미있다. 캐슬링, 앙파상, 프로모션, 체크/체크메이트 같은 특수 규칙이 많기 때문이다. 하지만 64번의 반복이면 — 사람이 체스 엔진을 처음부터 코딩하는 것에 비하면 아주 효율적이다.
실험은 TextArena 플랫폼에서 진행됐다. TextArena는 100개 이상의 텍스트 기반 게임을 제공하는 LLM 에이전트 벤치마크로, OpenAI Gym 스타일 인터페이스를 사용한다.
논문팀은 의도적으로 "Available Moves" 힌트를 제거했다. 원래 TextArena는 매 턴 "가능한 수 목록"을 보여주는데, 이를 숨겨서 에이전트가 스스로 합법 수를 추론해야 하는 더 어려운 환경을 만들었다.
145개 전체 게임에서 불법 수 발생률 0%. 각 게임당 1,000스텝 × 10개 랜덤 시드로 테스트했다. 체스, 오셀로, 지뢰찾기, 스도쿠 등 규칙 복잡도가 극단적으로 다른 게임들에서 모두 완벽한 합법성을 달성했다.
16개 2인용 게임에서 Gemini-2.5-Flash+AutoHarness가 Gemini-2.5-Pro와 대결했다.
가장 작고 저렴한 모델이, 하네스를 장착하는 것만으로 가장 크고 비싼 모델을 이겼다. Flash+AutoHarness는 바닐라 Flash 대비 16개 중 12개 게임에서 승리했다 (승률 64.8%).
16개 1인용 게임에서의 평균 보상값:
| 모델 | 평균 보상 | Pro 대비 우위 게임 수 |
|---|---|---|
| Flash + AutoHarness | 0.745 | 8/16 우위, 5/16 동률 |
| Gemini-2.5-Pro | 0.707 | — |
| Flash (바닐라) | 0.673 | — |
가장 급진적인 "Code as Policy" 모드의 결과가 논문에서 가장 놀라운 부분이다. LLM을 전혀 호출하지 않는, 순수 Python 코드만으로 게임을 플레이한 결과:
Gemini-2.5-Flash가 만든 순수 코드가 GPT-5.2-High를 이겼다.
16개 게임 중 3개에서 Code as Policy가 이기고, 5개에서 GPT-5.2-High가 이기고, 8개는 동률이었다. 전체 평균에서는 코드가 앞섰다.
그런데 더 충격적인 건 비용이다:
물론 하네스 코드를 만드는 과정에서는 LLM 호출이 필요하다 (평균 89.4번의 반복). 하지만 한번 만들어진 코드는 영원히 무료로 재사용된다.
논문 부록에는 AutoHarness가 생성한 실제 코드가 공개되어 있다. 지뢰찾기 하네스는 세 단계 전략을 구사한다:
이것은 LLM이 "지뢰찾기를 어떻게 풀어야 하는지" 완벽하게 이해하고, 그 지식을 실행 가능한 알고리즘으로 변환한 것이다. 사람이 코딩하는 것과 비슷한 수준의 전략 구현이다.
체스 하네스는 AutoHarness가 만든 코드 중 가장 복잡하다. 64번의 반복 끝에 완성된 이 코드는:
# AutoHarness가 자동 생성한 체스 공격 판정 (간략화)
def is_attacked_by(board, square, color):
# 나이트 공격 체크
for dr, dc in [(-2,-1),(-2,1),(-1,-2),(-1,2),
(1,-2),(1,2),(2,-1),(2,1)]:
r, c = square[0]+dr, square[1]+dc
if in_bounds(r, c) and board[r][c] == knight(color):
return True
# 레이캐스팅으로 룩/비숍/퀸 공격 체크
for direction in ROOK_DIRS + BISHOP_DIRS:
piece = cast_ray(board, square, direction)
if piece and piece.color == color:
if piece.type in valid_attackers(direction):
return True
return False
이 코드는 사람이 처음부터 짠 체스 엔진의 합법 수 검증과 거의 동일한 구조다. LLM이 "체스 프로그래밍"이라는 전문 분야의 지식을 코드로 결정화(crystallize)한 셈이다.
2026년은 AI 에이전트의 해다. Claude Code, Devin, OpenAI Codex, Google Jules — AI가 독립적으로 코딩하고, 브라우저를 조작하고, API를 호출하는 시대가 왔다. 하지만 이 모든 에이전트들이 공유하는 취약점이 바로 "불법 행동" 문제다.
AutoHarness의 아이디어 — "에이전트가 자신의 행동을 검증하는 코드를 스스로 만들게 하자" — 는 이 모든 문제에 적용 가능하다.
지금까지 AI 업계의 주류 해법은 모델을 키우는 것이었다. 규칙을 어기면? 더 큰 모델을 써라. 환각이 생기면? 더 많은 데이터로 훈련시켜라.
AutoHarness는 정반대를 제안한다: 작은 모델이 스스로 안전장치를 만들면, 큰 모델보다 낫다.
이 결과가 시사하는 바는 크다:
AutoHarness 팀은 세 가지 미래 방향을 제시한다:
재귀적 자기 개선(Recursive Self-Improvement): 하네스 코드에서 학습한 도메인 지식을 다시 LLM에 파인튜닝하면? 더 나은 LLM이 더 나은 하네스를 만들고, 그것이 다시 LLM을 개선하는 선순환.
재사용 가능한 하네스 라이브러리: 한번 만든 체스 하네스, 오셀로 하네스를 라이브러리화하면 — 새로운 에이전트가 즉시 사용 가능.
멀티모달 확장: 텍스트 게임을 넘어서, 이미지 입력이 필요한 게임(Craftax, Terra Nova)에도 같은 원리를 적용.
AutoHarness가 증명한 것은 단순하지만 심오하다:
AI에게 "규칙을 지켜라"고 말하지 말고, "규칙을 검증하는 코드를 짜라"고 하면 된다.
| 항목 | 수치 |
|---|---|
| 테스트 게임 수 | 145개 (1인용 + 2인용) |
| 불법 수 발생률 | 0% (전 게임) |
| 평균 수렴 반복 횟수 | 14.5회 |
| Flash+Harness vs Pro 승률 | 56.3% vs 38.2% |
| Code as Policy 평균 보상 | 0.870 (GPT-5.2-High: 0.844) |
| Code as Policy 추론 비용 | ~$0 |
LLM의 강점(코드 생성)으로 약점(행동 검증)을 보완하라. AI가 코드를 잘 쓴다면, 그 능력을 자기 자신의 안전장치를 만드는 데 쓰게 하라.
규모가 아니라 구조가 답이다. 작은 모델 + 영리한 구조(코드 하네스) > 큰 모델 + 무방비. 비용 효율성에서도 압도적이다.
"자연어 반성"에서 "코드 검증"으로. Reflexion의 "말로 하는 반성"은 모호하다. AutoHarness의 "코드로 하는 검증"은 명확하고, 실행 가능하며, 재사용 가능하다.
환경 피드백이 최고의 교사다. LLM의 내부 시뮬레이션은 환각에 취약하지만, 실제 환경의 에러 메시지는 거짓말하지 않는다. 이 신뢰할 수 있는 신호를 코드 개선에 활용하는 것이 핵심이다.

2026년, 우리는 AI 에이전트가 일상 업무에 투입되는 시대를 살고 있다. 코드를 짜고, 이메일을 보내고, 데이터를 분석하고, API를 호출한다. 하지만 이 에이전트들은 종종 "할 수 없는 일"을 시도한다.
AutoHarness의 메시지는 명확하다: AI에게 안전벨트를 채워주되, 그 안전벨트를 AI가 직접 만들게 하라. 가장 효과적인 안전장치는 외부에서 강제하는 것이 아니라, 시스템이 스스로 생성하는 것이다.
Gemini-2.5-Flash가 자신만의 코드 하네스를 만들어 GPT-5.2-High를 이긴 것처럼 — 자기 자신의 한계를 코드로 극복하는 AI의 시대가 열리고 있다.
이 글은 Google DeepMind와 Causal의 Xinghua Lou, Miguel Lázaro-Gredilla, Antoine Dedieu, Carter Wendelken, Wolfgang Lehrach, Kevin P. Murphy가 2026년 2월 발표한 논문 "AutoHarness: improving LLM agents by automatically synthesizing a code harness"를 바탕으로 작성되었습니다.