터미널 에이전트가 검증된 궤적을 스스로 다시 써서 정책을 개선한다
Terminal-RSI: Recursive Self-Improving Terminal Agents via Recursive Self-Rewrite and Policy-Refine
무엇인가
터미널 에이전트는 응답이 그럴듯한지가 아니라 실행 환경에 남긴 지속적 변화로 평가된다. SWE-bench나 Terminal-Bench 같은 벤치마크는 저장소 점검, 의존성 복구, 오류 복원을 거쳐 보호된 검증기를 통과하는 최종 상태에 도달할 것을 요구하고, Long-Horizon-Terminal-Bench(LHTB)는 이를 긴 의존성 사슬로 확장한다. 이때 상당한 지역적 진전이 완전한 해결로 이어지지 않을 수 있다. 논문은 이 루프를 닫는 것을 막는 세 가지 장애를 지목한다. 첫째는 시간 팽창으로, 토큰 생성 시계와 환경 변화 시계가 달라 표준 GAE가 텍스트 길이에 따라 먼 크레딧을 감쇠시킨다. 관측 토큰을 정책 손실에서 마스킹해도 재귀 노드 자체는 남아, 같은 결정과 결과를 낸 두 실행이 로그가 더 장황하다는 이유만으로 다른 크레딧을 받는다. 둘째는 재귀적 감독 사이의 가치 표류다. 궤적 재작성은 액터가 선호하는 행동을 바꾸고, 따라서 크리틱이 마주치는 히스토리도 바꾼다. 크리틱을 초기화하면 학습된 결과 구조를 버리게 되고, 보정 없이 이전하면 체계적 예측 오차가 남는다. 셋째는 보상 정렬로, 과제 계열마다 의미 검사의 개수가 달라 단일 전역 스케일은 검증기가 큰 계열을 과대평가하고 순수 비례 진척 보상은 정책이 엄격한 성공을 낼 수 있게 된 뒤에도 미완성 행동을 선호하게 만든다. 논문은 4,352개 궤적 감사에서 기존 보상 하에 실패 궤적이 전체 보상 질량의 50.09%를 가져가고, 158개 실패가 1 이상을 받으며, 48개는 실행된 모든 시나리오 검사를 통과하고도 최종 게이트에서 떨어진다는 점을 근거로 든다.
어떻게 동작하나
제안 방법 Terminal-RSI는 액터만 갱신하는 Recursive Self-Rewrite(RSR)와 크리틱을 승계하는 Recursive Policy-Refine(RPR)을 교대시킨다. 학습 순서는 Qwen3.8-27B 베이스에서 RSR-1, RPR-1, RSR-2, RPR-2로 이어지는 5단계이며, 각 단계의 유지된 파라미터가 다음 단계를 초기화한다. RSR에서는 유지된 액터가 하네스 H 아래에서 생성한 궤적 중 검증기 V_x(τ)=1을 통과한 것만 남긴다. 플래너는 공개 지시문과 하네스 제어 메시지를 제거한 궤적을 받아 런북을 만들고, 공개 과제와 런북만 본 리뷰어가 스키마·산출물·호환성 게이트 q(x,b)를 통과시킨 뒤, 대상 하네스에서의 신규 실행과 누출 심사를 거친 것만 감독 데이터로 쓴다. 이 감독 손실은 생성된 결정 토큰에만 걸리고 크리틱 가중치는 고정된다. RPR은 RSR-1 액터를 동결한 상태에서 한 에폭을 돌려 Warm-up Critic Model을 준비하고, 이후 각 RPR 단계에서 액터를 고정한 채 크리틱을 4회 보정한 다음 결합 PPO 업데이트에 들어간다. RPR-1은 액터 학습률 5×10⁻⁷, 크리틱 1.5×10⁻⁵를 쓰고, RSR-2를 거친 RPR-2는 액터 학습률을 5분의 1인 1×10⁻⁷로 낮추되 크리틱 학습률은 유지한다.
무엇과 다른가
크레딧 할당과 보상은 두 축으로 재설계된다. Turn-Boundary Skip-Observation GAE(TB-GAE)는 관측 노드를 재귀에서 제외하고, 같은 턴 안에서는 감쇠 계수를 (1,1)로, 턴 경계를 넘을 때만 (γ_turn, λ_turn)으로 바꾸는 시계를 도입한다. 이렇게 하면 B개의 턴 경계를 넘을 때 감쇠가 (γ_turn·λ_turn)^B로, 관측 길이나 턴 내부 토큰 수와 무관하게 결정된다. 보상 쪽에서 Family Dense Reward(FDR)는 계열별 비위생 검사 총수의 90백분위수(폴백 82)로 진척을 정규화하고, Success-Prioritized Reward(SPR)는 S + P/(P+D'_f) 형태로 엄격 성공과 유계 부분 크레딧을 분리한다. SPR에서 모든 실패는 1 미만, 모든 성공은 1 이상이며 상한은 2 미만이다. 같은 4,352개 궤적에 결과 라벨을 고정한 채 재채점하면 평균 성공/실패 보상이 FDR의 1.01/0.41에서 SPR의 1.50/0.24로 바뀌고, 실패의 보상 질량 비중은 50.09%에서 28.72%로, 1 이상을 받는 실패는 158개에서 0개로 줄어든다. 다만 계열 평균 표준편차는 0.34에서 0.47로, 궤적 수준 표준편차는 0.50에서 0.59로 오히려 커진다.
어떻게 쓰나
학습 인프라는 T1의 slime 조정, Megatron 최적화, SGLang 샘플링, Harbor 기반 실행 위에 구축되며 컨텍스트 용량은 262,144 토큰이다. 학습 데이터는 의미 검증기 과제 2,400개와 보조 터미널 과제 600개를 합친 3,000개 풀이고, 전역 배치는 256에 롱테일 지연을 줄이기 위해 288 요청까지 오버샘플링한다. Megatron 3D 병렬화에 컨텍스트 병렬도 4를 결합하고 GPU당 토큰 예산 8,192, 로그확률 청크 1,024를 쓴다. PPO는 비대칭 클리핑 [0.30, 5.00], 액터 그래디언트 클리핑 1.00, KL 페널티 0을 유지한다. 결과로 Terminal-RSI-27B는 Terminal-Bench 4.0에서 19.84%, 2.1에서 86.52%, 3.0에서 16.95%, Hard에서 79.00%를 기록했고, 4개 스위트 평균 성공률은 50.58%로 베이스 대비 29.90%포인트, RSR-1 대비 16.33%포인트 높다. 단계별로 RPR-1은 RSR-1보다 Terminal-Bench 2.1, 3.0, 4.0, Hard에서 각각 7.43, 7.49, 10.57, 15.50%포인트 개선하고, RSR-2가 여기에 8.99, 0.71, 0.79, 6.50%포인트를 더한다. 참조 모델 비교에서 4.0의 19.84%는 Gemini 3.8 Flash의 19.70%, DeepSeek V4 Pro의 14.60%보다 높지만 GPT-6 Sol은 4.0에서 더 높고, 2.1의 86.52%는 GPT-6 Sol의 85.40%, Kimi K3의 85.00%를 넘지만 Gemini 3.8 Flash가 2.1에서 더 높다. 저자들은 외부 점수가 참조값이며 1차 출처와 프로토콜 대조가 완료되지 않았다고 밝힌다.
전제와 한계
장기 지평 결과는 진척과 완결이 분리됨을 보여준다. LHTB의 과정 보상은 베이스 0.21에서 0.29, 0.30, 0.31, 0.37로 올라 76.19% 상대 개선을 보였고, 엄격 완료는 0/46, 0/46, 2/46, 4/46, 5/46으로 늘었다. RSR-1은 부분 진척만 올리고 엄격 완료는 0을 유지한 반면, RPR-2는 과정 보상 0.06과 완료 1건을 동시에 더한다. SWR100 성공률은 3.00%, 5.00%, 6.00%, 6.00%, 6.00%로 베이스 대비 두 배가 되지만 RPR-1 이후 평평해져 2차 사이클의 추가 이득은 없다. 난이도 층화에서는 4개 스위트 322개 과제쌍 기준으로 Medium이 23.58%에서 58.96%, Hard가 14.91%에서 49.12%, Easy가 31.78%에서 72.88%로 오르지만 Extreme은 RPR-1의 10.98%에서 RSR-2의 6.10%로 떨어졌다가 10.98%로 회복하는 비단조 곡선을 그린다. 크리틱 보정 품질(설명 분산)은 Warm-Up이 -1.15에서 0.01로 오르고, RPR-1은 0.03에서 0.33까지 peak 후 0.27로 마무리하며, RPR-2의 16개 관측치는 모두 0.01~0.52 범위에서 양수를 유지한다. 학습-추론 로그확률 격차는 4.66×10⁻³에서 4.98×10⁻³ 사이로 0이 아니다.
과제 수준 사례는 검증기 커버리지의 구멍을 드러낸다. 11개 의미 단언이 있는 임베딩 드리프트 모니터링과 두 개의 최종 게이트가 있는 Rust–C 표현식 평가기에서 RSR-2와 Terminal-RSI-27B 모두 검사기 완료율 100%에 도달한다. 그러나 최종 모델의 첫 시도는 C 인터페이스를 링크 스모크 테스트에만 쓰고 표현식 평가는 수치 포맷을 보존하기 위해 파이썬에 위임했다. 퍼즈 테스트 통과는 테스트된 출력 동등성을 뜻할 뿐 네이티브 Rust–C AST 실행 경로를 뜻하지 않는다.
실무 관점에서 이 논문이 주는 것은 두 가지다. 하나는 검증기 결과를 정책 업데이트로 바꾸는 파이프라인 설계로, 검증 통과 궤적만 재작성·재실행·누출 심사를 거쳐 감독 데이터로 쓰고 크리틱은 단계마다 승계하되 액터를 고정한 상태에서 먼저 보정한다는 절차다. 다른 하나는 보상 설계로, 계열별 검사 개수 차이를 90백분위수로 정규화하고 성공을 부분 진척보다 우선시키는 형태는 터미널·저장소 자동화처럼 검사 개수가 계열마다 크게 다른 환경에 바로 참고할 만하다. 다만 TB-GAE는 문서화된 첫 단계에서 실제로는 γ=λ=1인 표준 GAE가 쓰였고, 단위 시계 동등성만으로 TB-GAE 배포나 온라인 이득이 입증되지는 않는다는 점을 논문 스스로 명시한다.
저자가 밝힌 한계는 분명하다. 인과 귀속을 위해 연산량을 맞춘 교대 실험, TB-GAE 단독 분리, 온라인 보상 매칭, 크리틱 승계 대 초기화 대조가 아직 필요하며, 단계별 학습률·보상·초기화가 함께 바뀌기 때문에 추정기 동일성이나 오프라인 재채점만으로 학습 효과를 분리할 수 없다. 3회 평가는 독립 학습 시드를 대체하지 못하고 통계적 우위를 세우지 못하며, 체크포인트 선택은 최종 벤치마크 적응이 아니라 보호된 검증셋을 요구한다. 검증은 강제된 요구사항만 인증하므로 Rust–C 사례처럼 네이티브 아키텍처 격차가 남고, 보상 보정이 지름길을 유지하거나 재생 필터가 유용한 행동을 버릴 수 있다. SWR100은 학습과 분리돼 있지만 더 넓은 저장소·사전학습 중복은 완전히 감사되지 않았고, 단일 27B 백본의 5단계는 스케일링 법칙이나 보편적 단조성 어느 것도 세우지 못한다.