Context as an Environment: 장기 에이전트를 위한 프로그래밍 방식 컨텍스트 관리 (Scroll)
Context as an Environment: Programmatic Context Management for Long-Horizon Agents
TL;DR Highlight
히스토리를 프롬프트 밖 Python 커널에 두고 코드로 꺼내 쓰니 LOCA 256K 86.7%
Who Should Read
에이전트 대화·툴 결과가 길어져 요약하면 세부 정보가 사라져 고민인 에이전트 개발자
Core Mechanics
- 요약하면 나중에 필요한 정보가 사라진다
- 기존 압축·외부 메모리는 미래에 뭐가 필요할지 모르는 채로 무엇을 남길지 먼저 정해 버린다.
- 요약이나 메모리에 없는 세부 내용은 원본 로그가 디스크에 있어도 에이전트가 못 본다.
- 히스토리를 프롬프트가 아니라 환경으로 둔다
- 모든 이벤트는 append-only Event Log(추가만 되는 로그)에 고유 번호(seq)와 함께 원문 그대로 쌓인다.
- 모델이 exec로 Python 코드를 써서 검색·가공하고, print한 것만 다음 호출의 컨텍스트에 들어간다.
- 컨텍스트에서 빼도 원문은 남는다
- 예산을 넘으면 오래된 구간을 뷰에서만 내리고 로그에는 원문이 그대로 남는다.
- 뷰에는 제목(headline)과 seq 주소를 담은 eviction index(내려간 구간 목차)를 둬서 에이전트가 바로 찾아간다.
- 검색은 임베딩 대신 BM25를 쓴다
- 결정적으로 동작하고 저장 시점에 모델 호출이 필요 없어서다.
- 저장(ingestion) 때 LLM 호출이 추가로 들지 않는다.
- 모델이 코딩을 잘해야 효과가 크다
- 6개 백본 모두 쓸 수는 있지만 LOCA 256K에서는 86.7 대 22.7로 벌어진다.
- 약한 모델은 실행 오류가 늘거나 집계 작업에서 일찍 끝낸다.
Evidence
- BEAM10M에서 최고 기존 시스템 대비 5.1점↑
- Scroll 73.1, Exabase M-1 68.0, Cognee 67.0, Hindsight 64.1, Mem0 48.6이다.
- 백본은 Qwen3.8-Max이고 기존 수치는 각자 설정의 공개 결과라 통제 비교는 아니다.
- LongMemEvalS는 94.8로 최상위권이다
- Exabase M-1 96.4, Mastra OM 94.9, Hindsight 94.6, Mem0 94.4와 비슷한 수준이다.
- LOCA에서 같은 백본으로 관리 방식만 바꿨다
- 256K 정확도는 Summarization 65.3, Retrieval 88.0이 아니라 66.7, CodeAct 85.3, Scroll 86.7이다.
- 128K에서 256K로 갈 때 하락폭은 Summarization -21.4, Scroll -2.6이다.
- BEAM10M ablation에서 원본 삭제가 가장 치명적이었다
- 요약만 남기면 19.9로 떨어지고 REPL을 빼면 7.3점, index를 빼면 1.8점 낮아진다.
- 비용은 BEAM10M 입력 토큰 중앙값이 105K로 코퍼스의 약 1%다.
How to Apply
- 툴 응답을 프롬프트에 넣지 말고 변수에 담기
- 오늘 에이전트의 큰 툴 결과(JSON, 표)를 Python 변수로 저장하고 head나 집계 결과만 print하게 바꿔 보라.
- 변수 이름·타입·크기 목록을 매 호출 앞에 붙이면 모델이 무엇이 있는지 안다.
- 요약 전에 원문 로그를 append-only로 남기기
- 대화·툴 호출을 SQLite에 seq 번호와 함께 쌓고 컨텍스트 압축은 뷰에서만 하라.
- 큰 payload는 파일로 빼고 미리보기와 복구 포인터만 행에 남겨라.
- 내려간 구간에 headline 목차 붙이기
- 응답마다 작업·검증된 상태·다음 행동을 한 줄로 쓰게 하고 seq에 묶어라.
- 컨텍스트에서 내릴 때 이 목차만 뷰에 남기고 원문은 expand로 복구하게 하라.
- 검색 질의 규칙을 프롬프트에 넣기
- 질문이 여러 개체를 묻는다면 각각 따로 검색하고 사용자 발화만 근거로 삼게 하라.
- 답하기 전에 반대 증거를 찾는 검색을 한 번 더 하게 하라.
Try It
# Claude Code나 ChatGPT에 붙여넣기 (논문 방법의 간이 버전: 대화 로그 기반 질의응답 규칙)
아래 {{대화로그}}는 과거 대화 전체 원문이다. 요약하지 말고 원문에서만 근거를 찾아 답하라.
규칙:
1. 질문이 여러 개체를 묻는다면 각각 따로 검색하고 값을 하나씩 뽑은 뒤 계산하라.
2. role=user 발화만 사용자의 사실·선호의 근거로 삼아라. 어시스턴트의 제안은 근거가 아니다.
3. 값이 바뀌었다면 같은 프로젝트·같은 항목인지 확인한 뒤 가장 나중 사용자 발화를 써라.
4. 답하기 전에 정정이나 번복을 찾는 검색(예: 아니다, 취소, 잘못)을 한 번 더 하라.
5. 질문의 축(도구뿐 아니라 제약·비용·습관)을 최소 3가지로 나눠 각각 검색하라.
6. 모든 구체적 주장은 찾은 발화에서 나와야 한다. 없으면 '대화에 정보가 없다'고 답하라.
{{대화로그}}
질문: {{질문}}
이어서 해 볼 것: 답변에 사용한 발화 번호와 인용을 함께 출력하게 해 보라.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓
Related Resources
Original Abstract (Expand)
LLM agents increasingly take on long-running tasks whose history grows far beyond a single model context window. Existing approaches compress earlier interactions or extract selected information into fixed memory representations, committing to what to preserve before future needs are known. We present Scroll, a context manager that treats each agent session as an executable Session Environment. The environment is backed by an append-only Event Log and a sandboxed, persistent Python kernel. The kernel maintains a typed namespace across model calls, allowing tool outputs, retrieved history, and derived state to be bound to variables rather than serialized into the prompt at each call. Model-written code searches, materializes, and transforms session state through exec; only explicitly printed projections enter the model's working view for the next call. Context management thus becomes a programming task that inherits the improving coding abilities of LLMs, while the Event Log preserves lossless historical ground truth. As the working view approaches its budget, stale spans are evicted but remain recoverable: an eviction index keeps compact landmarks tied to exact Event Log addresses, so that the agent navigates directly to evicted regions instead of searching the full log. With Qwen3.8-Max as the backbone, Scroll achieves 94.8% on LongMemEval_S; 73.1% on BEAM_10M, surpassing the best published memory system by 5.1 points; and 86.7% on LOCA_256K, exceeding the best published long-horizon agent by 37.4 points.