Anthropic의 응용 AI(Applied AI) 엔지니어 팀인 Ash Prabaker와 Andrew Wilson이 진행한 장기 기동 에이전트(Long-running Agents) 설계 워크숍 강연 정리 노트입니다.
업계의 흔한 에이전트 데모들은 단순한 단발성 브라우저 제어 수준에 그치지만, 실무에서 마주하는 엔지니어링 환경은 수 시간에서 수 일간 연속으로 실행되는 고신뢰성 코딩 태스크를 요구합니다. 본 세션에서는 자율 코딩 CLI인 Claude Code를 빌드해 온 Anthropic 팀의 풍부한 실전 노하우를 바탕으로, 컨텍스트 조바심을 해소하고 deterministic한 제어 루프를 구성하는 Ralph Loop 설계와 Generator-Evaluator Contract 전술을 상세하게 규명합니다.
핵심 클립 및 해석
1. 장기 실행 에이전트의 3대 걸림돌: Context Rot & Coherence
“…firstly, context… finite… amnesia… context rot… less coherence… context sense anxiety… planning… models are not that great at planning… models are really bad at judging their own output.”
에이전트가 5~6시간 이상 장기 구동될 때 겪는 본질적인 엔지니어링 한계는 크게 세 가지 범주로 분류됩니다.
첫째는 컨텍스트(Context) 제약입니다. 대화가 깊어질수록 모델은 이전 단기 기억을 소실하거나 주의력이 왜곡되는 Context Rot(컨텍스트 부식/오염)을 겪어 일관성을 상실합니다. 또한, 컨텍스트 제한선에 임계할 때 모델이 불안을 느끼고 조급하게 코드를 마무리하려는 독특한 현상인 Context Sense Anxiety(컨텍스트 조바심)가 발생하여 완성도를 해칩니다.
둘째는 기획(Planning)의 무너짐입니다. LLM은 한 번에 너무 방대한 기능을 한 호흡(One-shot)에 처리하려다 실패하거나, 어설프게 구현을 마치고 멈춰버리는 등 세부 계획을 끈기 있게 실행하는 지구력이 부족합니다.
셋째는 판단(Judgment)력 부족입니다. 자율 에이전트에게 구현 확인을 지시하면 예스맨(Sycophancy)처럼 ‘모두 완료되었다’고 기만적인 자기 보고를 올리기 쉬워, 품질 가두리가 무너지게 됩니다.
2. 하네스와 모델의 공진화 (Co-evolution)
“…when we’ve released a model we’ve always also released a lot of harness changes alongside… So really these things are like co-evolving together.”
에이전트 시스템은 모델 자체의 지능 개선뿐 아니라, 모델을 캡슐화하는 **하네스(Scaffold/Harness)**의 정밀한 발전을 병행해야만 그 수명이 비약적으로 늘어납니다.
Anthropic 팀의 경험에 따르면, 매 신규 Claude 모델을 출시할 때마다 가속화된 하네스의 구조적 변경을 동시 배포해 왔습니다. 예를 들어 하드웨어 수준인 모델 가중치가 고도화되어 컨텍스트 조바심을 스스로 제어할 수 있게 되면, 하네스에 복잡하게 구성했던 단기 세션 리셋 로직을 과감히 제거하고 **단일 연속 세션 및 컴팩션(Compaction)**만으로 가볍게 단일화하는 방식입니다. 즉, 모델의 빈틈을 하네스로 메우고, 모델이 이를 흡수하며 학습하면 하네스를 다시 심플하게 리팩토링하는 공진화 루프(Co-evolution Loop)가 핵심입니다.
3. Ralph Loop: Deterministic하게 통제되는 실패 설계
“…it sort of seems really simplistic and he put it uh deterministically bad in an undeterministic world. So the idea being that it’s better to fail predictably than it is to succeed unpredictably.”
최근 업계에서 널리 활용되기 시작한 **Ralph Loop(랄프 루프)**의 요지는 매우 직관적이고 강력합니다. 비결정론적이고 혼란스러운 LLM 동작 세계관 속에서 “예측 불가능하게 성공하는 것보다 예측 가능하게 실패하는 것이 개발 엔지니어링 관점에서 100배 유용하다”는 원칙을 고수합니다.
랄프 루프는 복잡하고 거대한 기획 요구사항(Vague Prompt)을 받으면 먼저 세부 기능별 persistent JSON 산출물로 분할(Sprint Decomposition)합니다. 그리고 하네스에 미리 등록한 **Stop Hook(정지 갈고리)**과 Safe Word(안전 장치) 가드레일을 통과하게 함으로써, 에이전트 세션이 기획 범위를 이탈하여 무모하게 전진하지 못하도록 제어합니다. 단계를 쪼개고 실행 샌드박스를 격리하여, 에러 지점(Exit code)을 정확히 포착하는 deterministic한 환경을 강제합니다.
4. 장기 실행 에이전트의 구조: 에이전트 협업 (Agent Teams)
“…we released agent teams… instead of everything reporting back into the main agent, the actual sub-agents could communicate with each other… and report back to the main agent only when it was required.”
Claude Code 2.0 및 최신 Agent SDK의 진보된 구조는 **에이전트 협업 체계(Agent Teams)**입니다. 과거에는 모든 하위 실행 결과와 디버그 덤프가 메인 오케스트레이터 에이전트의 컨텍스트로 역류하여, 오케스트레이터의 장기 기억을 오염시키는 병목 현상이 발생했습니다.
현대 SOTA 하네스는 하위 에이전트들이 오케스트레이터를 거치지 않고 직접 파일 시스템(fs)을 매개로 상호 소통(Coordination)하고 검증하도록 격리 샌드박스를 설계합니다. 오직 모든 교차 검증과 테스트 코드를 통과한 최종 정제된 산출물(JSON)과 Git commit 상태만을 메인 기획 에이전트에 보고하게 설계함으로써, 메인 에이전트의 컨텍스트 윈도우를 깨끗하고 고결하게 장시간 보존해 냅니다.
5. Generator-Evaluator 계약 및 주관적 Rubrics
“The generator-evaluator contract… satisfy that spec… We expect the evaluator to be extremely willing to like throw away everything and restart from scratch if it wasn’t able to hill climb against the rubric.”
장기 실행 에이전트가 흔히 빠지는 Sycophancy(예스맨 본능) 함정을 타파하려면, 구현을 도맡는 생성기(Generator)와 그 구현을 매섭게 질책하는 **적대적 평가기(Adversarial Evaluator)**를 철저히 이원화하여 Generator-Evaluator Contract(계약 루프)를 구축해야 합니다.
평가기는 주관적인 프론트엔드 스타일이나 논리 오류도 단단하게 가둘 수 있도록 **상세한 평가 기준표(Rubric)**를 내장하고, Puppeteer나 Playwright 같은 브라우저 검증도구를 통해 콘솔 로그 및 렌더링 겹침 현상을 무자비하게 찾아냅니다. 평가 결과가 계약(Rubric)에 미치지 못하면, 생성기가 수 차례 수정한 코드라 할지라도 과감히 전체를 롤백(Git checkout)시키고 처음부터(Scratch) 재설계하도록 강제합니다. 이 과정에서 에이전트 지능은 로컬 샌드박스 내부에서 안전하게 언덕 오르기(Hill Climbing) 형태로 향상됩니다.
6. SOTA 하네스 설계의 5대 금율
“Self-evaluation is a trap. Just use an adversarial evaluator. Compaction does not equal coherence. Lossy summaries really drift. Structured hand-offs and clean contexts are very good patterns.”
실무에서 신뢰도 높은 장기 기동 에이전트 하네스를 구축하기 위해 반드시 마음에 새겨야 할 다섯 가지 수칙입니다.
- Self-evaluation is a trap (자가 평가는 덫이다): 개발 주체 에이전트에게 스스로 검증 완료를 판정하게 만들지 마십시오. 무조건 적대적인 검증 에이전트(Adversarial Evaluator)를 대립시켜야 합니다.
- Compaction != Coherence (압축이 곧 일관성은 아니다): 긴 대화를 단순 요약하여 밀어 넣는 방식은 맥락 드리프트(Drift)를 유발하여 지능을 바보로 만듭니다. **Structured Hand-offs (구조화된 인계 문서)**와 Clean Context (완전한 컨텍스트 리셋) 조합이 훨씬 강력합니다.
- 주관적인 정성 평가도 채점 가능하다: 상세한 루브릭(Rubrics) 지침을 마크다운이나 JSON으로 정교하게 짜서 가이드라인 스킬로 공급하십시오.
- Traces를 직접 읽고 함께 앉아 디버깅하라: 에이전트가 뱉어내는 Trace 파일들을 낱낱이 읽어 불필요한 복잡도를 걷어내고 프롬프트를 튜닝하십시오.
내 생각 (My Thoughts)
Anthropic applied AI 팀의 이번 워크숍은 pair programming 에이전트가 수 분을 넘어 수 시간 동안 무결성(Integrity)을 유지하며 자율 구동하는 체계를 완성하기 위해 필요한 아키텍처를 대단히 정밀하게 짚어낸 명강연이다.
특히 **”Self-evaluation is a trap (자가 평가는 덫이다)”**라는 경고는 뼈아픈 실무적 진실을 내포하고 있다. 우리는 이전까지 에이전트에게 작업을 시킨 뒤 “작성한 코드에 문제가 없는지 스스로 테스트하고 빌드해서 결과를 완료하라”고 편하게 위임하곤 했다. 그러나 모델은 본능적으로 자신이 짠 코드의 예외 상황을 눈감아주려 하거나(Sycophancy), 사소한 에러를 무시한 채 deploy:safe 단계로 직진하려 하는 경향을 보인다.
이를 통제하기 위해 우리의 듀얼 블로그 하네스(dual-blog-ops-harness) 또한 철저하게 분리 설계되어 있다:
- Adversarial Evaluator (적대적 평가기):
ops:doctor와deploy:safe같은 CLI 스크립트들은 에이전트 본체가 아니라 로컬 터미널의 엄격한 컴파일러 및 검사 파이프라인(Git, Node, ffmpeg, API Key 등)을 활용해 동작 무결성을 기계적으로 평가한다. 에이전트가 “배포 준비 완료”라고 주장하더라도,ops:doctor진단에서trackedDirty != 0또는ffmpeg FAIL이 뜨면 배포 실행권 자체를 가혹하게 박탈해 버린다. - Compaction의 대안인 Clean Context & Structured Handoff: 앞서 Matt Pocock 비디오 노트에서 다룬 Memento 철학과 완벽히 융합되는 대목이다. 긴 대화를 장황하게 컨텍스트 창에 채워 요약해 두는 대신, 정형 문서인 **implementation_plan.md**와 **task.md**를 디스크에 실시간 기록(Structured Hand-off)해 둔 뒤, 컴팩트한 Context 상에서만 다음 태스크를 기동하는 것이 지능의 명료함을 살리는 최선이다.
우리의 Next.js 또는 Supabase 다중 테넌트 설계 패턴(supabase-patterns)에서도, 단일 에이전트에게 모든 마이그레이션과 RLS 룰 정의, 그리고 테스트 실행을 한 번에 위임하기보다:
- 기획 및 규칙(Rubric) 수립 에이전트
- 구현 에이전트 (Sonnet 4.6급)
- 단위 테스트 및 스키마 검증 에이전트 (Adversarial Evaluator)
로 역할을 명확하게 쪼갠 Agent Teams를 구성하여, 서로
fs의 임시 config 파일이나 SQL 파일을 통신 기점으로 삼아 협업하게 배선한다면, 인간의 수동 승인(run_command대기 시간)을 최소화하면서도 수 시간 동안 안전하게 코드를 자율 컴파일하고 검증하는 자가 치유 컴파일 하네스를 달성할 수 있을 것이다.
댓글
GitHub 계정으로 의견을 남길 수 있습니다. 댓글은 GitHub Discussions에 저장됩니다.