컨텍스트 엔진
컨텍스트 엔진은 OpenClaw가 각 실행에 대한 모델 컨텍스트를 구축하는 방식을 제어합니다. 어떤 메시지를 포함할지, 오래된 기록을 어떻게 요약할지, 서브에이전트 경계 전반에서 컨텍스트를 어떻게 관리할지를 결정합니다. OpenClaw에는 내장legacy 엔진이 포함되어 있습니다. Plugins는
활성 컨텍스트 엔진 수명 주기를 대체하는 대체 엔진을 등록할 수 있습니다.
빠른 시작
현재 어떤 엔진이 활성화되어 있는지 확인합니다.컨텍스트 엔진 plugin 설치
컨텍스트 엔진 plugins는 다른 OpenClaw plugin과 동일하게 설치합니다. 먼저 설치한 다음 슬롯에서 엔진을 선택합니다.contextEngine을 "legacy"로 설정하거나
키를 완전히 제거하세요 — 기본값은 "legacy"입니다.
작동 방식
OpenClaw가 모델 프롬프트를 실행할 때마다 컨텍스트 엔진은 다음 네 가지 수명 주기 지점에 참여합니다.- Ingest — 새 메시지가 세션에 추가될 때 호출됩니다. 엔진은 자체 데이터 저장소에 메시지를 저장하거나 인덱싱할 수 있습니다.
- Assemble — 각 모델 실행 전에 호출됩니다. 엔진은
토큰 예산 내에 맞는 정렬된 메시지 집합(및 선택적
systemPromptAddition)을 반환합니다. - Compact — 컨텍스트 창이 가득 찼을 때 또는 사용자가
/compact를 실행할 때 호출됩니다. 엔진은 공간 확보를 위해 오래된 기록을 요약합니다. - After turn — 실행 완료 후 호출됩니다. 엔진은 상태를 영구 저장하거나, 백그라운드 압축을 트리거하거나, 인덱스를 업데이트할 수 있습니다.
서브에이전트 수명 주기(선택 사항)
OpenClaw는 현재 하나의 서브에이전트 수명 주기 hook을 호출합니다.- onSubagentEnded — 서브에이전트 세션이 완료되거나 정리될 때 정리합니다.
prepareSubagentSpawn hook은 향후 사용을 위해 인터페이스의 일부로 포함되어 있지만,
런타임은 아직 이를 호출하지 않습니다.
시스템 프롬프트 추가
assemble 메서드는 systemPromptAddition 문자열을 반환할 수 있습니다. OpenClaw는
이를 실행용 시스템 프롬프트 앞에 추가합니다. 이를 통해 엔진은
정적 workspace 파일 없이도 동적 회상 가이드, 검색 지침 또는
컨텍스트 인식 힌트를 주입할 수 있습니다.
레거시 엔진
내장legacy 엔진은 OpenClaw의 원래 동작을 유지합니다.
- Ingest: no-op(세션 관리자가 메시지 영구 저장을 직접 처리).
- Assemble: pass-through(런타임의 기존 sanitize → validate → limit 파이프라인이 컨텍스트 조립을 처리).
- Compact: 내장 요약 압축에 위임하며, 오래된 메시지의 단일 요약을 만들고 최근 메시지는 그대로 유지합니다.
- After turn: no-op.
systemPromptAddition도 제공하지 않습니다.
plugins.slots.contextEngine이 설정되지 않았거나(또는 "legacy"로 설정된 경우)
이 엔진이 자동으로 사용됩니다.
Plugin 엔진
plugin은 plugin API를 사용해 컨텍스트 엔진을 등록할 수 있습니다.ContextEngine 인터페이스
필수 멤버:| 멤버 | 종류 | 목적 |
|---|---|---|
info | 속성 | 엔진 id, 이름, 버전, 압축 소유 여부 |
ingest(params) | 메서드 | 단일 메시지 저장 |
assemble(params) | 메서드 | 모델 실행용 컨텍스트 구축(AssembleResult 반환) |
compact(params) | 메서드 | 컨텍스트 요약/축소 |
assemble은 다음을 포함하는 AssembleResult를 반환합니다.
messages— 모델에 보낼 정렬된 메시지estimatedTokens(필수,number) — 조립된 컨텍스트의 총 토큰 수에 대한 엔진의 추정값. OpenClaw는 이를 압축 임계값 결정과 진단 보고에 사용합니다.systemPromptAddition(선택 사항,string) — 시스템 프롬프트 앞에 추가됨
| 멤버 | 종류 | 목적 |
|---|---|---|
bootstrap(params) | 메서드 | 세션용 엔진 상태 초기화. 엔진이 세션을 처음 볼 때 한 번 호출됨(예: 기록 가져오기). |
ingestBatch(params) | 메서드 | 완료된 턴을 배치로 수집. 실행이 끝난 후 해당 턴의 모든 메시지를 한 번에 받아 호출됨. |
afterTurn(params) | 메서드 | 실행 후 수명 주기 작업(상태 영구 저장, 백그라운드 압축 트리거). |
prepareSubagentSpawn(params) | 메서드 | 자식 세션용 공유 상태 설정. |
onSubagentEnded(params) | 메서드 | 서브에이전트 종료 후 정리. |
dispose() | 메서드 | 리소스 해제. gateway 종료 또는 plugin 재로드 중 호출되며 세션별 호출은 아님. |
ownsCompaction
ownsCompaction은 Pi의 내장 시도 중 자동 압축이
해당 실행에서 계속 활성화될지를 제어합니다.
true— 엔진이 압축 동작을 소유합니다. OpenClaw는 해당 실행에서 Pi의 내장 자동 압축을 비활성화하고, 엔진의compact()구현이/compact, 오버플로 복구 압축,afterTurn()에서 수행하려는 사전 압축을 책임집니다.false또는 미설정 — 프롬프트 실행 중 Pi의 내장 자동 압축이 여전히 실행될 수 있지만, 활성 엔진의compact()메서드는/compact및 오버플로 복구에 대해 계속 호출됩니다.
ownsCompaction: false는 OpenClaw가 자동으로
레거시 엔진의 압축 경로로 폴백한다는 뜻이 아닙니다.
즉, 유효한 plugin 패턴은 두 가지입니다.
- 소유 모드 — 자체 압축 알고리즘을 구현하고
ownsCompaction: true를 설정합니다. - 위임 모드 —
ownsCompaction: false를 설정하고compact()가openclaw/plugin-sdk/core의delegateCompactionToRuntime(...)를 호출해 OpenClaw의 내장 압축 동작을 사용하도록 합니다.
compact()는 안전하지 않습니다. 왜냐하면
해당 엔진 슬롯의 일반 /compact 및 오버플로 복구 압축 경로를
비활성화하기 때문입니다.
구성 참조
kind: "context-engine" plugins도 여전히 로드되고 등록 코드를 실행할 수 있지만,
plugins.slots.contextEngine은 OpenClaw가 컨텍스트 엔진이 필요할 때
어떤 등록된 엔진 id를 해석할지만 선택합니다.
압축 및 메모리와의 관계
- 압축은 컨텍스트 엔진의 한 책임입니다. 레거시 엔진은 OpenClaw의 내장 요약에 위임합니다. Plugin 엔진은 어떤 압축 전략이든 구현할 수 있습니다(DAG 요약, 벡터 검색 등).
- 메모리 plugins (
plugins.slots.memory)는 컨텍스트 엔진과 별개입니다. 메모리 plugins는 검색/조회 기능을 제공하고, 컨텍스트 엔진은 모델이 무엇을 볼지를 제어합니다. 둘은 함께 작동할 수 있습니다 — 예를 들어 컨텍스트 엔진이 조립 중 메모리 plugin 데이터를 사용할 수 있습니다. - 세션 프루닝(메모리 내 오래된 도구 결과 다듬기)은 어떤 컨텍스트 엔진이 활성화되어 있든 계속 실행됩니다.
팁
- 엔진이 올바르게 로드되는지 확인하려면
openclaw doctor를 사용하세요. - 엔진을 전환해도 기존 세션은 현재 기록을 유지합니다. 새 엔진은 이후 실행부터 적용됩니다.
- 엔진 오류는 로그에 기록되고 진단에 표시됩니다. plugin 엔진이
등록에 실패하거나 선택된 엔진 id를 해석할 수 없으면 OpenClaw는
자동으로 폴백하지 않습니다. plugin을 수정하거나
plugins.slots.contextEngine을"legacy"로 되돌릴 때까지 실행이 실패합니다. - 개발 시에는
openclaw plugins install -l ./my-engine을 사용해 로컬 plugin 디렉터리를 복사하지 않고 링크하세요.
관련 문서
- 컨텍스트 — 에이전트 턴용 컨텍스트가 구축되는 방식
- Plugin 아키텍처 — 컨텍스트 엔진 plugins 등록
- 압축 — 긴 대화 요약