Claude 에게 너무 큰 작업을 주면, 중간에 끝났다고 착각하고 멈춰버린다. 작업이 끝난 게 아니다. 그저 시작했다는 사실을 기억하지 못할 뿐이다.
에이전트는 생각처럼 긴 작업을 한 번에 처리하지 않는다. 교대 근무 방식으로 움직인다.
교대 근무하는 엔지니어들이 투입된 소프트웨어 프로젝트를 상상해보라. 다음 교대자가 도착할 때면 이전 근무에서 무슨 일이 있었는지 전혀 기억하지 못한다. 이는 에이전트의 느낌을 설명하는 비유가 아니다. 기계적으로 그것이 바로 에이전트다. 컨텍스트 윈도우는 유한하고, 대부분의 실제 작업은 한 윈도우에 들어가지 않는다. 그래서 에이전트는 개별 세션 단위로 작업하며, 매번 새로운 세션은 이전 세션에 대한 아무런 기억 없이 시작된다.
Anthropic 이 정확히 이 실험을 진행했고, 무엇이 문제인지 공개했다. 그 부분이 읽을 가치가 있다. 도구가 약하다고 말하는 블로거의 글이 아니기 때문이다. Claude 를 만드는 팀이 Claude 가 어디에서 무너지는지를 직접 기록한 것이다.
하나의 윈도우로는 작업을 끝낼 수 없는 이유
최첨단 코딩 모델에게 "claude.ai https://claude.ai/ 의 클론을 만들어라"는 높은 수준의 프롬프트를 주고, 여러 컨텍스트 윈도우에 걸쳐 루프를 돌리면, 작동하는 앱을 만들어내지 못한다. 가끔이 아니다. 확실히 실패한다. 이것은 Opus 가 Anthropic 자체 에이전트 프레임워크 위에서 실행되고, 컨텍스트 압축 기능이 켜져 있으며, 계속 작동하도록 설계된 전체 설정에서도 그렇다.
두 가지 특정한 방식으로 실패하며, 둘 다 교대 인수인계 문제다.
첫째, 에이전트가 모든 것을 한 번에 해결하려고 시도한다. 단일 윈도우에서 전체 앱을 한 번에 처리하려다가 기능 중간에 컨텍스트가 소진되고, 세션은 반쯤 완성되고 문서화되지 않은 상태로 끝난다. 다음 교대자가 출근해서는 자기가 만들지 않은 엉망진창을 보고 무슨 일이 있었는지 추측해야 한다. 그래서 다음 교대자는 전체 세션을 기본 앱을 다시 작동시키는 데만 소비하고, 진전을 보지 못한다.

두 번째 실패는 기능이 어느 정도 갖춰진 이후에 나타난다. 새로운 에이전트가 둘러보고 실제 진전이 있었다고 판단하고는 전체 작업이 끝났다고 결정한다. 하지만 그렇지 않다. 절반의 기능은 한 번도 구축되지 않았고, 어떤 기능이 누락되었는지 기록한 사람도 없다. 교대자는 작업 목록을 확인하지 않고 끝냈다고 선언한 것이다.
두 실패 모두 같은 근본 원인을 가진다. 떠나는 교대자가 아무것도 남기지 않았기 때문에, 도착하는 교대자는 맹목적으로 작업하게 된다. 해결책은 더 똑똑한 모델이 아니다. 해결책은 교대자가 퇴근하기 전에 무엇을 기록하느냐에 달려 있다.
떠나는 교대자가 기록해야 할 것
Anthropic 이 도달한 답변에는 두 가지 부분이 있다. 첫 번째는 작업이 시작되기 전에 사이트를 설정하는 에이전트 하나, 그리고 두 번째는 세션마다 나타나 진전을 이루는 교대 근무자들이다.
설정 에이전트는 맨 처음에 한 번 실행된다. 그것의 전체 임무는 미래의 모든 교대자가 "완료"가 어떤 상태인지 알 수 있는 환경을 남기는 것이다. 그것이 작성하는 핵심 요소는 기능 목록이다. 완성된 앱이 수행해야 하는 모든 단일 작업을 상세히 설명하는 구조화된 파일이다.

claude.ai https://claude.ai/ 클론의 경우, 200 개가 넘는 기능을 의미했다. "사용자가 새 채팅을 열고, 질문을 입력하고, Enter 를 누르고, 응답을 볼 수 있다"와 같은 것들. 모든 기능은 시작 시점에 실패로 표시되었다. 각 항목은 대략 다음과 같았다:
1{2 "description": "새 채팅 버튼이 새로운 대화를 생성합니다",3 "steps": ["새 채팅 클릭", "새로운 대화 확인", "환영 상태 확인"],4 "passes": false5}
모든 항목에 있는 "passes": false 가 바로 핵심이다. 체크되지 않은 상자이며, 그 상자가 200 개나 있다.
이 실패 목록이 에이전트가 조기 승리를 선언하는 것을 막는 장치다. 교대자는 둘러보고 작업이 끝났다고 판단할 수 없다. 200 개의 체크되지 않은 상자가 있는 파일이 바로 거기에 있기 때문이다. 작업은 첫 번째 코드 한 줄이 작성되기 전에 이미 정의되어 있다.
이것이 얼마나 신중하게 설계되어야 했는지를 보여주는 작은 세부 사항이 하나 있다: 파일 형식으로 Markdown 이 아닌 JSON 을 사용했다는 점이다. 그 이유는 모델이 Markdown 파일보다 JSON 파일을 조용히 다시 쓰거나 삭제할 가능성이 더 낮기 때문이다. 그리고 관련 지침은 의도적으로 단호하다 — 테스트를 제거하거나 수정하는 것은 용납될 수 없다. 테스트를 삭제하는 것은 기능이 조용히 사라지는 방법이기 때문이다. 교대자는 상자에 체크하는 것은 허용되지만, 상자를 지우는 것은 허용되지 않는다.
책상 위의 메모
작업을 설정하는 것은 절반에 불과하다. 나머지 절반은 각 교대자가 다음 교대자가 들어와서 작업할 수 있을 만큼 깨끗한 상태를 유지하도록 하는 것이다.
두 가지가 이를 가능하게 한다. 에이전트는 변경 사항을 설명하는 실제 메시지와 함께 작업을 Git 에 커밋하고, 일반 진행 상황 파일 — 지금까지 수행된 작업에 대한 지속적인 로그 — 를 작성한다. 이 로그는 Git 히스토리와 함께, 아무 정보 없이 시작하는 새로운 에이전트가 한 시간 동안 역공학하는 대신 몇 분 만에 상황을 이해할 수 있게 해준다.

Git 은 여기서 다른 역할도 한다. 교대자가 잘못된 변경을 했을 때, 다음 교대자는 피해를 풀려고 애쓰는 대신 마지막으로 작동했던 버전으로 롤백할 수 있다. 진행 파일은 우리가 어디에 있는지 알려준다. 커밋 히스토리는 실행 취소 버튼이다.
그리고 "깨끗함"은 특정한 의미를 가진다. 주요 브랜치에 병합해도 괜찮은 종류의 코드 — 주요 버그 없음, 질서 정연함, 문서화됨 — 를 의미한다. "기술적으로는 진전을 이루었다"는 의미가 아니다. 기준은 이렇다: 다음 사람이 당신의 엉망을 먼저 정리하지 않고도 새 기능을 시작할 수 있어야 한다.
다음 교대자가 출근하는 방법
이 두 가지를 제자리에 두면 모든 교대는 같은 방식으로 시작된다. 새로운 것을 건드리기 전에, 에이전트는 고정된 시작 루틴을 실행하여 상황을 파악한다. 이는 숙련된 엔지니어가 한동안 보지 못했던 프로젝트에 투입되었을 때 하는 것과 동일하다.
1pwd 를 실행하여 현재 디렉토리 확인 — 그곳만이 편집 가능한 유일한 위치2진행 파일과 git 로그를 읽어 최근에 어떤 일이 있었는지 확인3기능 목록을 읽고 아직 완료되지 않은 가장 우선순위가 높은 항목 선택4앱을 시작하고 핵심 기능이 여전히 작동하는지 기본 확인 실행5그런 다음에야 빌드 시작
네 번째 단계는 보기보다 훨씬 중요하다. 새로운 기능 하나를 작성하기 전에, 에이전트는 앱을 부팅하고 기본 기능이 여전히 작동하는지 확인한다 — 채팅 열기, 메시지 보내기, 응답 받기. 이전 교대자가 무언가를 망가뜨렸다면, 새 교대자가 망가진 기반 위에 새 작업을 쌓아 상황을 악화시키기 전에 즉시 발견된다.

이것이 전체 비결이며, 얼마나 단순한지 거의 지루할 지경이다. 떠나는 교대자는 자신이 한 일과 남은 일을 기록한다. 도착하는 교대자는 아무것도 하기 전에 그 기록을 읽는다. 인수인계가 전부다.
당신의 긴 작업에도 교대 근무는 있다
이 모든 것이 웹 앱 구축에 관한 이야기는 아니다. Anthropic 은 코드로 테스트했는데, 그 이유는 코드가 검증하기 쉽기 때문이다. 그러나 그 밑에 깔린 구조는 당신이 에이전트에 맡기는 모든 긴 작업의 구조와 동일하다.
하나의 윈도우에 들어가지 않는 모든 것은 교대 근무를 필요로 한다. 장문의 보고서를 챕터별로 작성하는 것. 여러 채팅에 걸쳐 연구 프로젝트를 진행하는 것. 며칠에 걸쳐 큰 분석 작업을 수행하는 것. 동일한 작업에 대해 새 세션을 시작할 때마다, 새로운 작업자가 이전 작업에 대한 기억 없이 출근하는 것과 같다. 그리고 인수인계를 남기지 않았다면, 추측부터 시작해야 한다.

그러니 인수인계를 남겨라. 긴 세션이 끝나기 전에, 모델이 무엇이 완료되었는지, 무엇이 아직 남아 있는지, 그리고 다음 세션이 무엇을 먼저 처리해야 하는지 기록하게 하라. 그 메모를 다음 세션이 시작될 때 읽을 수 있는 곳에 보관하라. 이것이 매 세션마다 프로젝트가 앞으로 나아가는 것과, 계속해서 같은 것을 반복해서 재구축하는 것의 차이를 만든다.
오늘 밤과 내일의 모델은 동일하다. 변하는 것은 오직 한 가지뿐이다. 내일의 세션이 맹목적으로 시작할지, 아니면 지난밤의 메모를 읽고 시작할지.
결코 교대자가 얼마나 똑똑한지의 문제가 아니었다. 다음에 오는 사람을 위해 무엇을 남기는지의 문제였다.
더 많은 분석은 여기에서 — https://t.me/+xYv1MgmIuds5YTli





