장기 실행 Agent

Session과 Context Window는 다릅니다

가장 혼동하기 쉬운 두 개념: Claude가 현재 볼 수 있는 것과 지금까지 일어난 모든 것. 이 둘은 반드시 분리되어야 합니다.

혼동하기 쉬운 두 개념
임시 / 제한적
Context Window
Claude가 현재 볼 수 있는 Token입니다. 인간의 작업 기억(Working Memory)과 같습니다: 용량이 제한되고, 넘치면 잊혀집니다. 매 대화 시작 시 구성되고, 사용 후 폐기됩니다.
현재 추론에 필요한 선별된 내용
영구 / 재생 가능
Session
발생한 모든 이벤트의 영구적인 로그입니다. 완전한 녹화 영상과 같습니다: 처음부터 끝까지 모든 것이 기록되고, 언제든 되감아 볼 수 있습니다. Append-only — 이벤트는 누적될 뿐입니다.
모든 원시 이벤트의 완전한 기록
왜 반드시 분리해야 하는가
컨텍스트 관리는 비가역적입니다

올바른 접근법: 원시 이벤트는 Session에 영구 보존하고, Context Window는 Session에서 임시로 꺼내 보는 뷰포트일 뿐입니다. Context가 사라져도 괜찮습니다 — Session이 남아 있으므로 언제든 재구성할 수 있습니다.

영구 컨텍스트 객체로서의 Session
getEvents() 인터페이스
Session은 데이터베이스와 유사한 쿼리 인터페이스를 제공합니다: Brain이 임의의 이벤트 범위를 필요에 따라 읽을 수 있어, 고정된 Context Window의 제약에서 벗어납니다.
// Brain이 Session을 유연하게 쿼리할 수 있습니다 const recentEvents = session.getEvents({ from: position - 100, // 특정 위치부터 읽기 시작 to: position // 현재 위치까지 읽기 }); // 특정 시점으로 되감기 const beforeDecision = session.getEvents({ from: decisionPoint - 20, to: decisionPoint + 5 }); // 특정 이벤트 유형 필터링 const toolCalls = session.getEvents({ filter: "tool_use" });

REPL의 객체처럼, LLM은 코드를 작성해 Session의 이벤트를 쿼리하고 필터링할 수 있습니다. Brain은 임의의 위치부터 읽거나, 특정 시점으로 되감거나, 과거 결정 전후의 컨텍스트를 다시 읽을 수 있습니다.

Harness의 유연성
Session에서 가져온 이벤트는 자유롭게 변환할 수 있습니다
핵심 비교
항목 Context Window Session
영속성 임시, 사용 후 폐기 영구, 지속 저장
내용 선별된 Token 모든 원시 이벤트
작업 읽기 전용(Claude 관점) 추가 전용(append-only)
크기 제한적(모델 최대 윈도우) 무제한
목적 현재 추론 기록 재생, 상태 복구
하드웨어 비유
RAM (메모리)
Context Window
빠르고, 용량이 작으며, 전원이 꺼지면 사라집니다. CPU가 사용 중인 데이터는 RAM에 있어야 하지만, RAM은 장기 저장 용도가 아닙니다.
디스크 (저장소)
Session
느리고, 용량이 크며, 전원이 꺼져도 데이터가 유지됩니다. 모든 데이터는 결국 디스크에 저장되며, 필요할 때만 RAM에 불러옵니다.

모든 파일을 동시에 RAM에 불러오지는 않습니다 — 그러면 RAM이 넘쳐 버립니다. 같은 이유로, 모든 이벤트 기록을 Context Window에 밀어 넣으면 Token이 넘쳐 버립니다. 올바른 방법은 필요할 때만 로드: Session에 전체를 저장하고, Context에는 부분집합만 가져옵니다.

Session은 Agent의 하드디스크이고, Context Window는 RAM입니다. RAM을 하드디스크처럼 쓰지 마세요. 모든 원시 이벤트를 Session에 저장하고, Harness가 필요에 따라 Context를 조합하도록 하세요. 그러면 Context가 압축되거나 모델이 교체되어도 기록은 절대 사라지지 않습니다.