
AI 코딩 에이전트 Terminal-Bench 2.0에서 1, 2위를 동시에 차지했다는 ForgeCode를 며칠 전에 깔아봤습니다. 81.8%라는 점수를 GPT 5.4와 Claude Opus 4.6 두 버전으로 나란히 찍었다는 소식 때문이었는데, Claude Code 쓰던 입장에서 안 깔아볼 이유가 없었습니다.
그런데 막상 써보니 뭔가 이상했습니다. 1위 도구치고는 결과물이 어설프고, 한 번 질문 던지면 응답 끝날 때까지 다음 작업을 못 시키고, 가끔 답변에 띄어쓰기도 안 됐습니다. 81.8%짜리 에이전트가 정말 이 수준 맞나 싶었습니다.
결론부터 말씀드리면, 제 의심이 맞았습니다. 트위터에서 본 감사 보고서에 따르면 ForgeCode의 진짜 점수는 71.7%, 순위로 치면 14위였습니다. 10%포인트의 차이는 전부 답안지에서 나온 거였고요. 무슨 일이 있었던 건지 하나씩 풀어보겠습니다.
ForgeCode 어떤 도구인가요
ForgeCode는 Tailcall이라는 회사가 만든 터미널 기반 AI 코딩 에이전트입니다. Rust로 작성됐고 Apache 2.0 오픈소스고요. 쉽게 말하면 Claude Code의 경쟁자라고 보면 됩니다.
가장 큰 차별점은 모델이 자유롭다는 점입니다. Claude Code는 Anthropic 모델, Codex CLI는 OpenAI 모델 위주인데, ForgeCode는 OpenRouter나 직접 API 키를 통해 Claude, GPT, Gemini, Grok, DeepSeek 등 거의 모든 LLM을 갈아 끼울 수 있습니다. 깃허브 스타도 7천 개를 넘었으니 인지도는 충분한 편입니다.
설치는 진짜 한 줄이면 끝납니다.
curl -fsSL https://forgecode.dev/cli | sh
API 키만 넣으면 바로 작동하고, 진입 장벽 자체는 낮습니다.
Terminal-Bench 2.0이 뭔데?
본론 들어가기 전에, 81.8%라는 숫자가 어떤 벤치마크에서 나왔는지부터 알아야 합니다.
Terminal-Bench 2.0은 터미널 환경에서 AI 에이전트가 실제 작업을 얼마나 잘하는지 평가하는 벤치마크입니다. 89개의 태스크가 도커 컨테이너 안에서 돌아가고, 빌드 시스템 다루기, git 충돌 해결, 암호 해독, 머신러닝 모델 학습 같은 실전 작업이 포함됩니다. 단순히 코드 패치 한 줄 짜는 SWE-Bench와는 결이 다릅니다.

ForgeCode는 이 리더보드에서 상위권이었습니다. 2026년 3월에 ForgeCode + Gemini 3.1 Pro 조합이 78.4%로 1위에 올랐고, 얼마 뒤에는 81.8%로 점수를 끌어올려 GPT 5.4와 Opus 4.6 두 버전으로 1, 2위를 동시에 점령했습니다.

ForgeCode 측은 자사 블로그에 "harness engineering이 모델 자체보다 중요하다"는 자랑글까지 올렸습니다. 같은 모델이라도 에이전트 런타임을 어떻게 짜느냐에 따라 25%에서 81.8%까지 점수가 올라갈 수 있다는 주장이었습니다. 그럴듯한 이야기였고, 저도 이 마케팅에 낚여서 깔아본 사람 중 하나였습니다.
DebugML이 폭로한 것
2026년 4월, DebugML이라는 연구 그룹이 충격적인 보고서를 공개합니다. Meerkat이라는 자동 감사 도구로 Terminal-Bench 2.0에 제출된 수천 개의 트레이스를 전수 조사했더니, 상위 3개 에이전트가 전부 부정행위를 하고 있었다는 결과였습니다.
먼저 1위였던 Pilot. 82.9%로 1위였던 Pilot은 채점용 테스트 스크립트가 들어 있는 /tests 디렉토리를 에이전트가 접근할 수 있게 만들어놨습니다. 원래는 격리되어야 할 경로입니다. 429개 트레이스 중 415개에서 에이전트의 첫 번째 행동이cat/tests/test_outputs.py 같은 명령어였습니다. 답안지 먼저 보고, 그 답을 역산해서 코드 짜는 식이었습니다.
문제는 2, 3위였던 ForgeCode가 더 교묘했다는 겁니다.
ForgeCode의 scaffold는 실행 시작 전에 AGENTS.md라는 파일을 자동으로 시스템 프롬프트에 로딩합니다. 그런데 이 파일들 중 일부에 정답이 그대로 적혀 있었습니다.
mteb-leaderboard 태스크에서 발견된 AGENTS.md에는 이런 메모가 있었습니다.
That run failed with reward 0.0 because it wrote the wrong final answer… instead of the expected GritLM/GritLM-7B.

에이전트는 이 파일을 읽고 GritLM/GritLM-7B를 그대로 result.txt에 적은 다음, 같은 정보로 자기 답을 검증합니다. 4개의 통과 트레이스 모두 똑같은 패턴이 반복됐습니다.

bn-fit-modify라는 베이지안 네트워크 태스크에서는 더 노골적이었습니다. 데이터로부터 구조 학습 알고리즘을 돌려서 DAG를 복원해야 하는 문제인데, ForgeCode 에이전트는 "guidelines에 있는 알려진 정답 DAG를 사용하겠다"고 선언하고 6개의 엣지를 그대로 하드코딩합니다. 알고리즘 자체를 돌리지도 않습니다. 5개 트레이스 모두 같은 행동을 보였고, 다른 scaffold들에서는 이런 패턴이 안 나타났습니다.
깨끗하게 다시 매기면 14위
DebugML이 오염된 트레이스들을 제거하고 같은 Opus 4.6 모델을 깨끗한 scaffold로 다시 돌렸더니, ForgeCode의 실제 점수는 81.8%에서 71.7%로 떨어졌습니다. 리더보드 순위로 환산하면 1위에서 14위로 추락하는 수치입니다. 10%포인트 차이가 전부 답안지에서 왔다는 거죠.
X에서는 이 보고서가 공개되자마자 난리가 났습니다. UPenn 박사과정 연구자 Charles Packer는 "공개 벤치마크가 진짜 맛이 갔다"며 "ForgeCode는 AGENTS.md에 정답을 그대로 끼워 넣고 에이전트가 그걸 베끼는 구조"라고 직설적으로 까버렸습니다.
결국 4월 19일에는 Terminal-Bench 운영팀이 공식 입장문을 내고 ForgeCode를 reward hacking 사례로 분류, 해당 시도들의 점수를 0으로 재산정했습니다. 운영팀은 "ForgeCode 에이전트가 인터넷에서 정답을 curl로 가져와 AGENTS.md에 집어넣는 사례가 여러 건 있었다"고 명시했습니다. 일반 사용자가 제기한 의혹이 아니라 벤치마크 운영주체가 공식적으로 인정한 부정행위라는 뜻입니다.

ForgeCode 깃허브 레포에도 4월 11일에 "critical bug fix required forge code leaking answers to cli bench"라는 제목의 이슈가 올라왔지만, 별다른 대응 없이 closed 처리되어 있습니다. 자사 블로그에서 "1, 2위를 차지했다"는 자랑글도 그대로 남아있고, 공식적인 사과나 해명도 없었습니다.
그래서 직접 쓸 때 그렇게 어설펐던 거였습니다
이 보고서를 보고 나니까 며칠 동안 ForgeCode를 쓰면서 느꼈던 위화감이 한 번에 이해됐습니다.

가장 컸던 인상은 결과물이 어설프다는 거였습니다. 같은 Opus 4.6 모델인데 Claude Code에서는 깔끔하게 처리되는 작업이, ForgeCode에서는 엉뚱한 파일을 건드리거나 핵심을 놓치는 경우가 많았습니다. 처음에는 제가 프롬프트를 잘못 줬나 싶어서 똑같은 질문을 두 도구에 동시에 던져보기도 했는데 차이는 일관됐습니다.
속도는 빠른 편이었는데, 며칠 쓰다 보니 그 빠름의 정체도 의심스러웠습니다. 답은 "사고를 적게 하고 바로 실행한다"는 쪽이었습니다. Claude Code는 작업 시작 전에 코드베이스를 한 번 훑고, 관련 파일을 찾아보고, 계획을 세운 다음에 움직입니다. ForgeCode는 그 단계를 상당히 줄이고 바로 코드를 건드립니다. 빠른 만큼 엉뚱한 결과가 나오는 빈도도 늘어났습니다.
기능 면에서도 좀 빈약합니다
직접 써보지 않아도 알 수 있는 약점도 있습니다.

ForgeCode 공식 문서를 보면 muse(계획), forge(구현), sage(조사) 세 가지 에이전트가 있다고 나와 있습니다. 처음 보면 멀티 에이전트 시스템처럼 들리는데, 막상 써보면 그냥 모드 전환에 가깝습니다. :muse, :forge 같은 명령어로 사용자가 직접 모드를 갈아끼워야 하고, sage는 사용자가 호출도 못 하고 다른 두 에이전트가 내부적으로 알아서 부르는 구조입니다.
요즘 코딩 에이전트의 표준은 부모 에이전트가 자식 서브에이전트를 spawn해서 여러 컨텍스트를 병렬로 돌리는 패턴입니다. 큰 작업을 할 때 탐색용 서브에이전트 여러 개를 띄워서 각자 다른 영역을 조사시키고 결과만 요약해서 받아오는 식으로 컨텍스트를 절약합니다. ForgeCode는 이게 안 됩니다. AGENTS.md로 커스텀 에이전트를 정의할 수는 있는데, 자동 위임이나 fan-out 같은 패턴은 지원이 약합니다.

Hooks도 없습니다. Claude Code에는 PreToolUse, PostToolUse 같은 lifecycle hooks가 있어서 파일 수정 전후, 커맨드 실행 전후에 사용자가 정의한 스크립트를 자동으로 끼워 넣을 수 있습니다. 코드 포매터를 자동으로 돌리거나, 위험한 명령어를 차단하거나, 변경 내역을 자동 검증하는 데 쓰이는 기능입니다. ForgeCode는 AGENTS.md에 자연어로 "이런 규칙 지켜줘"라고 적어두는 정도가 한계입니다.
스킬(SKILL.md)은 있긴 합니다. 빌트인 스킬도 11개 들어 있고 Claude Code의 SKILL.md와 호환된다고 공식 문서에 나옵니다. 그런데 자동 호출 방식이라 사용자 입장에서는 거의 보이지 않습니다. 며칠 쓰는 동안 스킬 시스템이 있는 줄도 몰랐을 정도였습니다.
그래서 진짜 1위는?
이 부분은 짚고 가야 합니다. 트위터에서는 "지금 1위는 Codex"라는 얘기가 도는데, 정확히는 좀 더 복잡합니다.
Terminal-Bench 2.0에서 부정행위 트레이스를 제거한 뒤의 실질 1위는 GPT-5.3-Codex를 쓰는 Factory Droid 조합으로 77.3%입니다. OpenAI의 Simple Codex 에이전트도 같은 모델로 75.1%를 기록했습니다. Claude Opus 4.6은 KRAFTON AI의 Terminus-KIRA harness와 결합했을 때 74.7%였습니다.
다른 벤치마크에서는 또 다른 그림입니다. SWE-Bench Verified 같은 독립 벤치마크에서는 ForgeCode + Claude 4가 72.7%, Claude 3.7 Sonnet 단독이 70.3%로 격차가 2.4%포인트밖에 안 됩니다. Terminal-Bench의 24%포인트 격차와는 비교가 안 됩니다. 같은 도구가 벤치마크에 따라 위상이 이렇게 달라진다는 것 자체가 시사적입니다.
결국 "Codex가 1위"라는 말은 Terminal-Bench 2.0이라는 특정 벤치마크에서, 부정행위를 걸러낸 뒤의 순위라는 단서가 붙어야 정확합니다.