터미널 에이전트가 자기 실패에서 복구하도록 훈련하는 ReTerm
ReTerm: Recovery Training for Self-Improving Terminal Agents
무엇인가
터미널 에이전트는 복잡한 코딩 작업에서 강한 성능을 보이지만, 장시간 실행 중 명령 오류나 잘못된 구현 같은 문제를 만나면 이를 복구하지 못하고 결국 작업 전체를 실패로 끝내는 경우가 많다. 기존 연구들은 실행 가능한 대규모 태스크를 모아 SFT나 검증기 기반 RL로 실행 능력을 끌어올리는 데 집중했지만, 오류에서 빠져나오는 능력 자체는 별도로 다루지 않았다. 오류 복구를 다룬 선행 연구 TermiGen은 사람이 손으로 만든 오류를 궤적에 주입해 복구 샘플을 만들었는데, 저자들은 이런 인위적 오류가 에이전트가 실제로 내는 오류의 분포와 어긋나며 SFT에만 의존한다는 한계를 지적한다. ReTerm은 에이전트가 자기 실행에서 만들어낸 실패를 학습 재료로 삼는다는 점에서 이 접근과 갈라진다.
어떻게 동작하나
첫 번째 구성 요소는 복구 시연 데이터셋 ReTerm-10K다. TMax-15K에서 뽑은 태스크에 대해 베이스 모델(Qwen3.5-9B)로 여러 번 시도하고, 가상 머신 안의 태스크 컨테이너에서 추론 내용·명령·관측값을 포함한 전체 상호작용 이력을 기록한다. 시도가 끝나면 VM을 일시정지해 실행 상태 스냅샷을 뜨고, 재개해 검증기를 돌린 뒤 실패한 시도의 스냅샷과 이력만 남긴다. 다음 단계에서 이 스냅샷을 복원하고, 더 강한 교사 모델인 DeepSeek-V4-Pro가 원래 지시문과 학생의 실패 이력을 조건으로 복구를 이어간다. 교사는 이전 시도가 실패했다는 사실만 들을 뿐 숨겨진 테스트의 상세 피드백은 받지 못하므로, 실행 이력과 복원된 환경에서 미해결 문제를 스스로 추론해야 한다. 이후 검증기 통과 여부, 메시지·도구 호출 형식, 태스크 제약 위반, 의미 없는 명령 반복 같은 비효율을 네 단계로 걸러 약 1만 개의 고품질 복구 궤적을 얻는다. SFT에서는 태스크 지시문, 학생의 실패 이력, 최소한의 복구 프롬프트를 입력으로 주고 교사가 생성한 토큰에만 손실을 계산해, 깨끗한 환경에서 문제를 푸는 방식이 아니라 결함이 있는 상태에서 무엇이 잘못됐는지 진단하고 남은 문제를 수리하는 행동을 가르친다.
무엇과 다른가
두 번째 구성 요소는 ReTerm-GRPO다. SFT 데이터는 고정된 베이스 모델의 실패에서 나온 것이라 정책이 학습하며 변하면 실패 분포가 어긋난다는 문제의식에서 출발한다. 각 원본 태스크에 대해 정책이 G개의 롤아웃을 생성하고 검증기 보상을 받는데, 실패 롤아웃이 하나라도 있는 그룹에서 실패 하나를 골라 그 상호작용 이력과 최종 환경 상태를 보존해 복구 태스크를 만든다. 이 복구 태스크는 별도의 큐에 저장되며, 새로 만든 태스크를 큐 앞쪽에 넣어 먼저 샘플링하고 용량을 넘으면 가장 오래된 것을 버린다. 한 배치에서 실패가 거의 나오지 않아도 복구 학습을 계속할 수 있게 하면서, 최근 정책의 실패 분포에 가까운 태스크를 우선 쓰기 위한 설계다. 복구 태스크에서는 같은 실패 상태에서 G개의 독립적인 복구 시도를 생성하고, 원본 태스크 그룹과 복구 태스크 그룹 각각에서 그룹 상대 어드밴티지를 계산해 두 목적함수를 합쳐 정책을 함께 최적화한다. 즉 실패를 버리지 않고 분기점으로 삼아, 자기 복구 능력이 문제 해결 능력과 같이 진화하도록 만든다.
어떻게 쓰나
실험은 16장의 NVIDIA A100 80GB에서 진행했고, ReTerm-10K를 SFT용 6K 궤적과 RL용 4K 태스크로 나눴다. SFT는 AdamW, 전역 배치 16, 학습률 5e-6으로 전 파라미터를 학습하고, 그 체크포인트에서 ReTerm-GRPO를 초기화한다. 업데이트마다 원본 태스크 그룹 8개와 복구 태스크 그룹 2개를 샘플링하고 그룹당 롤아웃 16개로 전역 배치 160, 학습률 5e-7, 최대 생성 길이 8,192토큰, 65k 컨텍스트, 최대 32턴을 쓴다. 결과로 ReTerm-9B는 OpenThoughts-TBLite에서 60.6%, Terminal-Bench 2.0에서 34.8%, SWE-bench Verified에서 58.4% Pass@1을 기록해 베이스 Qwen3.5-9B 대비 각각 16.4점, 14.6점, 13.2점을 올렸다. 같은 규모의 TMax-9B를 세 벤치마크 모두에서 앞서고, SWE-bench Verified에서는 Qwen3.5-9B 기반 자기진화 에이전트 Socratic-SWE도 넘어선다. 더 큰 32B 전문 에이전트인 Terminal-World-32B(Terminal-Bench 2.0)와 OpenThinkerAgent-32B(SWE-bench Verified)보다도 높고, 합성 오류 수정 궤적으로 학습한 TermiGen-32B도 터미널 벤치마크에서 크게 앞선다.
전제와 한계
일반화 실험도 눈에 띈다. Terminal-Bench 2.0 태스크를 고정한 채 학습에 쓴 ReAct 하네스와 Terminus-2, mini-SWE-agent, OpenHands 네 가지 하네스로 평가했을 때, 학습 하네스에서는 14.6점이 오르고 나머지 세 하네스에서도 6.7~12.4점의 향상이 유지됐다. 도메인 밖 태스크에서도 AIME 2025 +20.0점, SpreadsheetBench Verified +11.0점이 올랐고 AIME 2024와 Aider Polyglot에서도 양의 변화가 있었다. 절제 실험에서는 베이스, SFT만 적용, 표준 GRPO, ReTerm-GRPO 순으로 성능이 올라 ReTerm-GRPO가 가장 강했다. 오류 분석에서는 계획 오류, 도구 사용 오류, 구현 오류, 검증 오류, 자원 관리 오류 다섯 범주 모두에서 ReTerm-GRPO가 베이스와 표준 GRPO보다 높은 복구율을 보였다.
실무 관점에서 이 논문이 주는 핵심은 실패 궤적을 버리지 말고 스냅샷과 함께 자산화하라는 것이다. 에이전트 실행 환경을 VM 단위로 스냅샷 뜨고 검증을 별도로 돌리는 구조, 실패 지점에서 여러 복구 시도를 분기시켜 검증기 보상으로 그룹 상대 어드밴티지를 만드는 절차, 그리고 최근 실패를 우선 소비하는 큐 설계는 자체 코딩 에이전트를 학습시킬 때 그대로 참고할 수 있는 패턴이다. 다만 평가 프로토콜이 자체 ReAct 하네스(Bash 인터페이스, 태스크당 256k 토큰 예산, 최대 생성 16k 토큰, temperature 1.0, top-p 1.0, 시드 0)에 묶여 있고, 다른 모델 수치는 원 논문·공식 릴리스 값을 인용한 것이므로 자사 환경과의 직접 비교에는 주의가 필요하다.
저자들이 밝힌 한계도 분명하다. 오류 범주별 복구율이 모두 개선됐지만 도구 사용 오류를 제외하면 ReTerm-GRPO의 복구율이 32% 이하에 머물러, 터미널 에이전트가 마주친 대부분의 오류에서는 여전히 복구에 실패한다고 인정한다. 또한 SFT용 복구 시연은 고정된 베이스 모델의 실패에서 만들어졌기 때문에 정책이 진화하면 실패 분포가 어긋날 수 있다는 전제가 ReTerm-GRPO 도입의 배경이며, 복구 태스크 큐의 용량 K 값은 제시된 본문 범위에서 구체적 수치가 확인되지 않는다.