ECHO 공개, stderr에서 시작된 코딩 에이전트의 세계 모델
Microsoft Research의 ECHO는 터미널 출력 자체를 학습 신호로 삼아 코딩 에이전트가 실패 로그에서도 배우게 만듭니다.
- 무슨 일: Microsoft Research AI Frontiers가 터미널 에이전트 학습 방법 ECHO와 구현 저장소를 공개했습니다.
- ECHO는 GRPO 위에
environment prediction loss를 더해 stdout, stderr, 로그, 파일 내용을 예측 대상으로 씁니다.
- ECHO는 GRPO 위에
- 핵심 수치: 논문은 TerminalBench-2.0 pass@1이 Qwen3-14B 기준
5.17%에서10.79%로 올랐다고 보고합니다. - 의미: 코딩 에이전트 경쟁이 더 큰 모델이나 더 많은 도구 연결만이 아니라 실패 rollout을 학습하는 방식으로 넓어집니다.
- 주의점: 결과는 터미널/Docker 과제 중심입니다. 브라우저, SaaS, 배포 환경까지 바로 일반화됐다고 보기는 어렵습니다.
Microsoft Research AI Frontiers가 공개한 ECHO는 겉으로 보면 작은 학습 objective입니다. 공식 저장소 이름은 microsoft/echo-rl이고, 논문 제목은 "ECHO: Terminal Agents Learn World Models for Free"입니다. 핵심 아이디어도 짧습니다. 코딩 에이전트가 터미널에서 명령을 실행하면 stdout, stderr, 파일 내용, 로그, 스택 트레이스가 돌아옵니다. 지금까지 많은 agent RL 학습은 이 결과를 다음 행동의 문맥으로는 쓰지만, 손실 함수의 직접 학습 대상으로는 거의 쓰지 않았습니다. ECHO는 이 부분을 바꿉니다.
이 뉴스가 흥미로운 이유는 "또 하나의 코딩 에이전트"가 아니기 때문입니다. 최근 에이전트 제품 경쟁은 IDE 통합, 모바일 승인, MCP 연결, cloud agent, 조직 감사 API처럼 실행 표면을 넓히는 방향으로 빠르게 움직였습니다. ECHO는 다른 층을 찌릅니다. 이미 에이전트가 보고 있는 터미널 출력을 왜 학습 신호로 버리느냐는 질문입니다. 더 많은 도구를 붙이는 대신, 도구가 돌려준 실패 로그를 더 잘 먹이는 접근입니다.
ECHO가 바꾼 지점
일반적인 터미널 에이전트 rollout은 단순한 채팅 기록이 아닙니다. 사용자 과제가 있고, 에이전트가 명령을 만들고, 터미널이 실행 결과를 돌려주고, 에이전트가 그 결과를 읽고 다음 명령을 고릅니다. 예를 들어 pytest를 실행했는데 import error가 나오거나, ls를 했더니 예상 파일이 없거나, grep 결과로 config 키가 드러나는 식입니다. 사람 개발자에게는 이 모든 출력이 추론 재료입니다.
하지만 표준 GRPO류 학습에서는 보통 최종 verifier가 성공했는지 실패했는지가 희소 보상으로 들어갑니다. action token에는 정책 손실이 걸리지만, 터미널이 돌려준 observation token은 문맥에 남을 뿐 직접 맞혀야 할 대상으로 쓰이지 않습니다. 논문은 Qwen3-8B 설정에서 on-policy rollout 성공률이 15% 미만인 경우가 많다고 설명합니다. 그렇다면 대부분의 실패 trajectory는 최종 보상 관점에서 약한 신호만 남기고 사라집니다. 실제로는 그 안에 왜 실패했는지, 어떤 파일이 있는지, 명령이 환경을 어떻게 바꿨는지에 대한 정보가 들어 있는데도 말입니다.
ECHO는 이 낭비를 줄이려 합니다. Environment Cross-entropy Hybrid Objective라는 이름처럼, GRPO의 policy-gradient loss에 환경 관찰 토큰을 예측하는 cross-entropy loss를 결합합니다. 에이전트가 어떤 명령을 냈을 때 터미널이 어떤 토큰을 돌려주는지 같은 모델이 예측하게 만드는 방식입니다. 중요한 점은 별도 teacher model이나 추가 rollout이 필요 없다는 주장입니다. 같은 rollout, 같은 forward pass에서 action-token mask와 observation-token mask를 다르게 모아 손실을 계산합니다.

이 GIF가 보여주는 흐름은 제품 데모라기보다 학습 데이터의 모양에 가깝습니다. 명령과 관찰이 번갈아 쌓이고, 그 관찰이 다음 행동의 문맥으로 들어갑니다. ECHO의 관점에서는 여기서 한 걸음 더 나아갑니다. 터미널 출력은 단지 읽고 지나가는 텍스트가 아니라, "이 명령을 이 환경에서 실행하면 이런 결과가 나온다"는 작은 세계 모델의 훈련 데이터입니다.
왜 stderr가 세계 모델의 단서인가
세계 모델이라는 표현은 거창해 보일 수 있습니다. 자율주행이나 로봇에서 말하는 물리 세계 시뮬레이터를 떠올리기 쉽습니다. 하지만 터미널 에이전트에게 세계는 파일 시스템, shell command, dependency, test runner, build script, exit code, log format입니다. rm은 파일을 지우고, pytest는 fixture 실패를 보여주고, sed는 텍스트를 바꾸며, 잘못된 path는 에러를 냅니다. 이 세계의 물리 법칙은 stdout과 stderr에 꽤 많이 드러납니다.
사람 개발자는 실패 로그를 보면서 환경의 상태를 역추론합니다. "이 모듈이 없다는 건 dependency가 설치되지 않았거나 path가 틀렸다는 뜻입니다", "이 테스트가 실패했다는 건 함수 signature가 바뀌었는데 호출부가 남았다는 뜻입니다" 같은 판단을 합니다. 코딩 에이전트도 같은 방식으로 강해지려면 실패 로그를 단순 문맥이 아니라 학습 대상 자체로 봐야 합니다. ECHO는 이 직관을 손실 함수로 옮긴 것입니다.
공식 README는 ECHO가 SkyRL 위 확장으로 구현됐다고 설명합니다. SkyRL이 기본 RL training stack을 제공하고, ECHO 저장소가 terminal-agent integration, environment prediction loss, example config, SkyRL hook patch를 추가합니다. 터미널 task backend로는 Harbor가 쓰이며, Docker task container를 시작하고 명령을 실행하고 verifier reward를 돌려주는 역할을 합니다. 즉 이 작업은 "예쁜 논문 아이디어"만이 아니라 재현 가능한 오픈소스 학습 파이프라인 쪽에 가깝습니다.
에이전트 action token: 명령, reasoning, task-done 신호
환경 observation token: stdout, stderr, 파일 내용, 로그
ECHO: GRPO 손실 + observation token cross-entropy
수치는 작지만 방향은 선명하다
논문이 제시한 TerminalBench-2.0 수치는 절대값만 보면 낮습니다. Qwen3-8B의 GRPO pass@1은 2.70%, ECHO는 5.17%입니다. Qwen3-14B의 GRPO pass@1은 5.17%, ECHO는 10.79%입니다. 강력한 상용 코딩 에이전트의 체감 성능과 비교하면 작아 보일 수 있습니다. 하지만 이 결과를 읽는 방식은 절대 성공률보다 상대 개선과 실험 조건에 있어야 합니다.
연구진은 같은 starting policy에 대해 GRPO와 ECHO를 비교합니다. 바뀐 것은 터미널 출력 토큰에 보조 학습 손실을 걸었는지입니다. 그 결과 8B와 14B 모두 TerminalBench-2.0 pass@1이 거의 두 배로 올라갔다고 보고합니다. 특히 14B에서는 pass@5도 13.48%에서 19.10%로 상승했습니다. 내부 평가인 val100, ITD, TBLite에서도 전반적으로 개선됐다고 제시합니다.
또 하나의 포인트는 expert SFT 의존도입니다. 논문은 base Qwen3-8B에서 GRPO+ECHO가 내부 평가에서는 OpenThinker-Agent-v1-SFT 뒤에 GRPO를 붙인 경우와 맞먹었다고 설명합니다. OpenThinker-Agent-v1-SFT는 약 1.5만 개 expert terminal-agent demonstration으로 supervised fine-tuning된 모델입니다. ECHO가 이런 demonstration을 완전히 대체한다고 읽으면 과장입니다. 다만 터미널 출력 예측이 expert trajectory 없이도 일부 초기화 이점을 회복할 수 있다는 신호로는 의미가 있습니다.
이 점은 작은 모델과 사내 에이전트 운영에 중요합니다. 모든 팀이 frontier model을 계속 크게 돌릴 수는 없습니다. agent execution cost, privacy, on-premise, self-hosted 요구가 커질수록 smaller open-weight model을 특정 작업 환경에 맞게 강화하려는 수요가 생깁니다. ECHO는 그때 "성공한 예제만 모아 SFT하기" 말고도 실패 rollout의 관찰 토큰을 학습 신호로 쓰는 길이 있다는 것을 보여줍니다.
verifier-free라는 말은 조심해서 읽어야 한다
논문에서 눈에 띄는 표현 중 하나는 verifier-free self-improvement입니다. 일부 설정에서 환경 예측 손실만으로도 unseen OOD task에서 개선이 가능했다는 주장입니다. 이는 에이전트 학습에서 꽤 매력적인 문장입니다. verifier를 만들기 어려운 작업이 많기 때문입니다. 실제 소프트웨어 업무에서는 테스트가 불완전하고, 정답이 하나가 아니며, 사용자가 원하는 결과가 명세에 다 적혀 있지 않습니다.
하지만 이 표현은 좁게 읽어야 합니다. ECHO가 보여준 것은 터미널 환경에서 관찰 토큰을 예측하는 학습이 task success에도 도움을 줄 수 있다는 점입니다. 이것이 곧 모든 업무에서 보상 없이 자가 개선할 수 있다는 뜻은 아닙니다. 터미널 출력은 비교적 구조화되어 있고, 명령과 결과의 인과관계가 짧은 경우가 많습니다. 반면 브라우저, CRM, 이메일, 결제, 배포, 데이터베이스 같은 환경에서는 관찰이 더 부분적이고, 잘못된 행동의 비용이 더 크며, 결과가 즉시 드러나지 않을 수 있습니다.
그래서 ECHO의 진짜 메시지는 "verifier가 필요 없다"가 아니라 "verifier만 보지 말라"에 가깝습니다. 성공/실패 보상은 여전히 중요합니다. 다만 그 사이의 로그, 오류, 파일 변경, 테스트 출력이 더 촘촘한 supervision으로 쓰일 수 있다는 것입니다. 코딩 에이전트가 장기 작업을 맡을수록 이 중간 신호의 가치는 커집니다. 최종 PR이 성공했는지뿐 아니라 어떤 실패를 거쳐 어떤 상태를 학습했는지가 성능과 비용을 좌우하기 때문입니다.
커뮤니티가 본 "무료 신호"의 매력
Hacker News에서는 아직 독립적으로 크게 올라온 스레드를 확인하기 어려웠습니다. 대신 X 글을 미러링한 Digg 클러스터와 The Neuron의 5월 18일 AI 정리에서 ECHO가 빠르게 다뤄졌습니다. 반응의 공통점은 "이미 있는 신호를 왜 버렸나"라는 직관입니다. 에이전트가 shell을 실행할 때마다 환경은 답을 줍니다. 그 답을 단순 문맥으로만 쓰지 않고 예측 대상으로 삼는다면, 실패한 rollout도 학습에 기여할 수 있습니다.
이 직관은 최근 agent infra 흐름과 잘 맞습니다. 2026년의 코딩 에이전트 경쟁은 단순 autocomplete에서 cloud session, remote control, MCP, audit, cost routing으로 이동하고 있습니다. 그런데 운영 표면이 아무리 좋아져도 에이전트가 긴 작업에서 같은 실수를 반복하면 비용은 줄지 않습니다. 로그를 더 잘 읽고, 명령 결과를 더 잘 예상하고, 실패한 실행에서 빠르게 다음 행동을 고르는 능력이 필요합니다.
ECHO는 이 지점을 training objective로 건드립니다. 에이전트를 더 똑똑하게 만드는 방법이 꼭 모델 크기, 더 큰 context window, 더 많은 외부 도구만은 아니라는 뜻입니다. interaction trace 안에 남아 있는 환경 피드백을 어떻게 학습할지도 제품 경쟁의 일부가 됩니다. 특히 self-hosted agent나 사내 전용 coding agent를 만드는 팀에는 이 방향이 실용적입니다. 회사 내부 터미널 로그, CI 출력, build trace, test failure는 외부에 내보내기 어렵지만, 내부 학습 신호로는 매우 구체적이기 때문입니다.
기업 개발팀에는 무엇이 달라지나
첫째, 에이전트 로그는 단순 감사 자료가 아니라 학습 자산이 됩니다. 지금 많은 팀은 에이전트 transcript를 디버깅이나 규정 준수 목적으로 저장하려 합니다. ECHO식 접근은 한 걸음 더 나아가 그 transcript 자체가 성능 개선 재료가 될 수 있음을 보여줍니다. 물론 개인정보, 비밀키, 고객 데이터가 섞인 로그를 그대로 학습에 쓰면 안 됩니다. 하지만 scrubbed terminal trace, CI failure, test output을 체계적으로 모으는 일은 점점 중요해질 수 있습니다.
둘째, 실패를 버리지 않는 평가 체계가 필요합니다. 최종 PR merge 여부만 보면 에이전트가 어떤 단계에서 헤맸는지 알기 어렵습니다. 실패한 명령의 종류, 같은 오류 반복, 불필요한 파일 탐색, 테스트 출력 오해, dependency 설치 실수 같은 중간 지표가 있어야 합니다. ECHO는 이 중간 지표 중 일부를 학습 objective로 끌어온 연구입니다. 운영팀도 비슷한 관점으로 에이전트 세션을 관찰해야 합니다.
셋째, 작은 모델의 가능성을 다시 봐야 합니다. ECHO 결과는 Qwen3-8B와 Qwen3-14B 같은 공개 계열 모델에서 제시됐습니다. 절대 성능이 frontier model 수준이라는 이야기는 아니지만, 특정 환경에 맞춘 강화가 작은 모델을 더 쓸모 있게 만들 수 있다는 신호입니다. 비용이나 보안 때문에 모든 agent task를 외부 frontier API로 보낼 수 없는 조직에서는 이런 방식이 중요합니다.
넷째, tool output을 학습 가능한 형태로 설계해야 합니다. 에이전트가 읽는 출력이 지나치게 noisy하거나, 매번 format이 달라지거나, 중요한 상태가 숨겨져 있으면 학습 신호도 약해집니다. 사람이 보기 좋은 로그와 모델이 학습하기 좋은 로그는 완전히 같지 않을 수 있습니다. 앞으로 agent-friendly CI output, structured error, deterministic task harness 같은 설계가 더 중요해질 가능성이 큽니다.
ECHO가 아직 답하지 못한 것
가장 큰 한계는 환경 범위입니다. 터미널은 강력하지만, 에이전트가 실제로 움직일 공간은 더 넓습니다. 브라우저 UI, spreadsheet, design tool, Slack, Jira, cloud console, database admin tool에서는 관찰과 행동의 관계가 더 복잡합니다. 터미널 output token 예측이 이런 환경에서도 같은 효율을 낼지는 아직 별도 검증이 필요합니다. 특히 GUI 환경에서는 픽셀, accessibility tree, network state, hidden state가 섞입니다.
두 번째 한계는 safety입니다. 환경을 더 잘 예측하는 모델이 항상 더 안전한 모델은 아닙니다. 어떤 명령이 어떤 결과를 낳는지 더 잘 알면 유용한 자동화도 잘하지만, 위험한 명령의 효과도 더 잘 이해할 수 있습니다. 따라서 ECHO류 학습은 sandbox, permission, redaction, policy enforcement와 함께 봐야 합니다. Microsoft의 오픈소스 블로그가 같은 시기 agentic systems에 governance primitives가 필요하다고 말한 것도 이 맥락과 맞닿아 있습니다.
세 번째 한계는 데이터 품질입니다. 터미널 출력은 풍부하지만 항상 좋은 신호는 아닙니다. 무의미하게 긴 로그, flaky error, 외부 네트워크 실패, nondeterministic timestamp, secret이 섞인 출력은 학습에 방해가 되거나 위험할 수 있습니다. 논문도 warning prefix 같은 일부 토큰은 제외하고 실제 command output token을 대상으로 삼았다고 설명합니다. 무엇을 observation target으로 삼을지 자체가 중요한 설계 문제가 됩니다.
코딩 에이전트의 다음 병목은 실패 해석
ECHO는 대형 제품 발표처럼 즉시 사용자 화면을 바꾸지는 않습니다. 하지만 코딩 에이전트를 실제로 운영하는 팀에는 중요한 방향을 가리킵니다. 에이전트가 길게 일할수록 중요한 것은 한 번에 정답을 맞히는 능력만이 아닙니다. 실패했을 때 무엇을 배웠는지, 같은 실패를 반복하지 않는지, 터미널이 돌려준 단서를 다음 행동에 제대로 반영하는지가 중요합니다.
지금까지 AI 코딩 뉴스는 "더 강한 모델", "더 긴 context", "더 많은 도구", "더 편한 승인 UI"에 집중하는 경우가 많았습니다. ECHO는 그 사이에 있는 조용한 병목을 보여줍니다. 에이전트는 이미 많은 피드백을 받고 있습니다. 테스트는 실패 이유를 말하고, 빌드는 누락된 패키지를 말하고, shell은 권한과 path 문제를 말합니다. 문제는 그 피드백을 얼마나 밀도 있게 학습하느냐입니다.
그래서 이 연구의 가장 좋은 해석은 "stderr를 학습 데이터로 승격시켰다"입니다. 개발자에게 stderr는 불쾌한 빨간 글씨가 아니라 환경이 말하는 사실입니다. 코딩 에이전트도 그 사실을 읽는 데서 멈추지 않고, 예측하고 내재화해야 합니다. ECHO가 제안한 손실 함수는 그 방향의 작고 구체적인 구현입니다. 코딩 에이전트의 세계 모델은 거대한 3D 시뮬레이터에서 시작하지 않을 수 있습니다. 어쩌면 첫 세계 모델은 실패한 pytest 출력과 ModuleNotFoundError에서 시작됩니다.