본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 15. 06:10

AI 코딩 에이전트가 이미 실패한 해결책을 계속 반복하나요? 의존성 없는 해결책을 만들었습니다.

요약

AI 코딩 에이전트가 실패한 해결책을 반복하는 문제를 해결하기 위해 개발된 RegressionLedger를 소개합니다. 이 도구는 에이전트의 수정 사항을 지문화하고 테스트 결과와 연결하여, 컨텍스트가 압축되더라도 이미 실패한 시도를 재차 반복하지 않도록 강제 차단합니다.

핵심 포인트

  • AI 에이전트의 컨텍스트 압축 시 발생하는 실패 루프 문제 해결
  • 수정 사항을 정규화된 토큰 스트림으로 지문화하여 영구 저장
  • 다양한 툴체인과 연동하여 테스트 결과 및 에러 시그니처 파싱
  • 단순 권고가 아닌 도구 계층에서의 강력한 재시도 차단 메커니즘
  • 재현 가능한 벤치마크를 통한 도구의 신뢰성 검증

AI 에이전트와 함께 코딩하는 사람이라면 누구나 뼈저리게 느끼는 특정한 루프가 있습니다.

에이전트가 해결책을 시도합니다. 테스트가 실패합니다. 다른 것을 시도합니다. 또 실패합니다. 그러다 몇 번의 프롬프트가 지나거나, 혹은 컨텍스트 윈도우 (context window)가 압축된 후 — 에이전트는 이미 실패했던 바로 그 첫 번째 해결책을 자신 있게 다시 적용합니다.

실패의 기억은 지워졌지만, 그 자신감은 지워지지 않았습니다.

저는 Claude Code가 한 세션 동안 이 과정을 네 번 반복하는 것을 지켜보았습니다. 매번 똑같이 망가진 패치 (patch)를 새로운 아이디어인 양 제시하더군요. 루프가 반복될 때마다 토큰 (tokens), 시간, 그리고 제 영혼의 일부가 타들어 갔습니다. 그래서 저는 RegressionLedger를 만들었습니다.

핵심 아이디어: 판결(verdicts)은 컨텍스트 윈도우보다 오래 지속되어야 합니다

에이전트의 컨텍스트 (context)는 일시적입니다. 압축 (compaction), 새로운 세션, /clear 명령은 모두 컨텍스트를 지워버립니다. 하지만 _무엇을 시도했고 결과가 어떠했는지_는 컨텍스트와 함께 사라져서는 안 될 바로 그 지식입니다.

RegressionLedger는 다음과 같은 기능을 제공하는 Claude Code 훅 (hook) + CLI입니다:

  1. 에이전트가 수행하는 모든 수정을 지문화 (Fingerprints) 합니다 — 공백, 주석, 문자열/숫자 리터럴을 추상화한 정규화된 토큰 스트림 (normalized token stream)을 사용합니다 (단, truefalse와 같이 반대되는 동작은 절대 충돌해서는 안 됩니다).
  2. 각 수정 사항을 다음 테스트/빌드 결과와 연결합니다 — 12개 이상의 툴체인 (toolchains) (jest, vitest, pytest, go, cargo, tsc, eslint, gradle…)을 인식하며, 통과/실패 여부와 에러 시그니처 (error signature)를 파싱합니다.
  3. 모든 것을 로컬 JSON 장부 (ledger)에 영구 저장합니다 — 이는 재시작이나 컨텍스트 압축 후에도 유지됩니다.
  4. 이미 실패한 해결책의 재적용을 강력하게 차단합니다 — 원래의 에러를 첨부하여 PreToolUse 거부 (deny)를 수행합니다:
RegressionLedger: 당신은 이미 2시간 전에 src/auth.js에 대해 동일한 해결책을 시도했습니다.
실패 원인: AssertionError: expected 200, got 401
이를 다시 적용하면 동일한 실패가 재현될 것입니다. 대신 전략을 변경하세요.

핵심 설계 결정: 권고가 아닌 강제 (enforced, not advisory). 단순히 _제안_만 하는 메모리 시스템은 에이전트가 가장 확신에 차 있을 때, 즉 실수를 반복하기 직전의 순간에 무시됩니다. 차단(block)은 도구 계층(tool layer)에서 이루어지므로, 에이전트는 이를 논리로 우회할 수 없습니다.

어디에서도 본 적 없는 부분들

에이전트는 자신의 막다른 길(dead ends)을 인지한 상태로 깨어납니다. SessionStart 훅(hook)은 세션이 시작될 때마다

  • 재현 가능한 벤치마크 (Reproducible benchmark): npm run bench는 결정론적(deterministic) 310개 케이스 코퍼스를 실행합니다 — 미적으로 위장된 반복 수정 사항 중 120/120개가 포착되었고, 완전히 다른 수정 사항에 대한 오탐지 블록은 0/190개입니다.
  • **rl doctor**는 설치가 엔드투엔드로 작동함을 증명합니다: 실제 훅 프로세스를 통해 합성 이벤트(synthetic events)를 발생시킵니다 — 첫 번째 편집은 통과해야 하고, 시드된 반복 실패는 거부되어야 합니다.
  • warn 모드 + 히트 감사 (hit auditing): 일주일 동안 자문(advisory-only) 전용으로 실행해 보고, 하드 블록을 활성화하기 전에 rl stats를 확인하여 코드베이스에서 정확히 무엇이 차단되었을지 확인하세요.
  • rl unblock <file>: 컨텍스트가 실제로 변경된 경우(postgres → aurora)에 사용합니다 — 의도적으로 _인간_의 결정이며, 에이전트가

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0