OpenClaw와 Hermes는 메모리를 어떻게 관리하는가
OpenClaw는 파일·검색·승격 계층으로, Hermes는 작은 세션 주입 파일·명시적 통합으로 기억한다. 공식문서로 두 구조와 컨텍스트 압축의 차이를 분리했다.
에이전트가 사용자를 기억한다고 말할 때 그 안에는 서로 다른 일이 섞여 있다. 지난 대화를 줄여 현재 세션을 이어가는 일, 오래된 기록에서 필요한 내용을 찾는 일, 반복해서 중요한 사실을 다음 세션의 기본 지식으로 올리는 일은 같은 기능이 아니다.
OpenClaw의 메모리 공식 문서와 Hermes의 Persistent Memory 문서를 나란히 읽으면 차이가 선명해진다. OpenClaw는 기록을 여러 층에 보존한 뒤 강한 신호를 장기 기억으로 승격한다. Hermes는 시작부터 활성 메모리의 크기를 작게 고정하고, 길어진 수행법은 스킬로 보낸다.
OpenClaw는 기록, 회수, 승격을 나눈다
OpenClaw의 기본 메모리는 에이전트 작업공간의 평범한 마크다운 파일이다. 문서에는 숨겨진 내부 상태가 없다고 명시돼 있다. 디스크에 기록된 것만 다음에 기억할 수 있다.
파일의 역할은 네 가지로 갈린다. USER.md에는 사용자의 안정적인 선호와 관계, 대화 방식이 들어간다. MEMORY.md에는 오래 유지할 사실과 결정이 들어간다. memory/YYYY-MM-DD.md는 그날의 관찰과 세션 요약을 담는 작업 기록이다. DREAMS.md는 백그라운드 통합 과정과 사람이 검토할 수 있는 요약을 남긴다.
모든 파일이 매번 프롬프트에 들어가지는 않는다. USER.md와 MEMORY.md는 세션 시작에 쓰이는 작은 층이고, 날짜별 기록은 검색 대상으로 남는다. MEMORY.md가 부트스트랩 예산보다 커져도 원본 파일은 그대로 보존된다. 잘리는 것은 모델에게 주입되는 사본이다. OpenClaw가 저장 용량과 활성 문맥을 분리하는 지점이다.
필요한 과거는 memory_search와 memory_get으로 가져온다. 임베딩을 설정하면 의미 유사도와 키워드를 섞은 하이브리드 검색을 쓴다. 더 넓은 로컬 검색이 필요하면 QMD 메모리 엔진을 붙일 수 있다. QMD는 BM25, 벡터 검색, 재순위를 결합하고 프로젝트 문서나 세션 기록처럼 작업공간 밖의 디렉터리도 색인한다.
Dreaming은 많이 적힌 내용을 그대로 장기 기억으로 올리지 않는다
날짜별 기록에서 MEMORY.md로 올라가는 경로가 Dreaming이다. 현재 공식 문서에서는 기본 활성화된 백그라운드 통합 시스템으로 설명한다. 한 번의 요약이 아니라 Light, REM, Deep 세 단계를 거친다.
Light 단계는 최근 기록과 회수 신호를 읽고 중복을 줄여 후보를 만든다. REM 단계는 반복되는 주제와 연결을 정리한다. 둘 다 MEMORY.md를 직접 바꾸지 않는다. Deep 단계에 와서야 후보의 점수, 회수 횟수, 서로 다른 질의에서 등장한 횟수를 함께 검사한다. 세 문턱을 모두 넘은 후보만 장기 기억 갱신 대상으로 들어간다.
승격 직전에는 원문을 다시 읽는다. 삭제되거나 오래된 조각을 그대로 올리지 않기 위해서다. 대화 기록을 후보로 쓸 때는 민감 내용을 먼저 가리고, 출처가 신뢰할 수 없거나 시스템이 주입한 내용은 통합 프롬프트에서 제외한다. 받아들일 수 있는 재작성은 기존 기억을 충분히 보존하고, 새 후보의 출처를 포함하며, 부트스트랩 예산 안에 들어와야 한다. 갱신 전 원본은 SQLite 기반 상태에 보관되고 결과는 DREAMS.md에서 검토할 수 있다.
OpenClaw의 Memory Wiki도 이 흐름을 대신하지 않는다. 검색, 승격, Dreaming은 활성 메모리 백엔드가 맡고, Memory Wiki는 그 옆에서 주장과 근거, 모순, 최신성을 구조화한다. 회수용 메모리와 관리되는 지식 위키를 별도 층으로 둔 셈이다.
대화 압축은 장기 기억과 다른 작업이다
OpenClaw의 Compaction은 오래된 대화를 요약해 현재 세션을 이어가는 기능이다. 최근 메시지는 그대로 두고 이전 턴을 요약한 항목으로 바꾼다. 전체 대화 원본을 장기 기억으로 승격하는 과정은 아니다.
다만 압축 직전에는 중요한 사실이 대화 안에만 남지 않도록 memory flush가 먼저 실행된다. 에이전트에게 필요한 내용을 파일로 저장할 기회를 준 뒤 세션 문맥을 줄인다. OpenClaw에서 압축과 기억이 만나는 지점은 여기까지다. 압축은 현재 대화의 크기를 관리하고, Dreaming은 여러 기록 중 무엇을 다음 세션의 기본 지식으로 남길지 판단한다.
Hermes는 활성 메모리부터 작게 고정한다
Hermes의 기본 선택은 더 엄격하다. MEMORY.md는 환경, 프로젝트 관례, 배운 점을 담으며 기본 한도는 2,200자다. USER.md는 사용자 선호와 대화 방식을 담고 1,375자로 제한된다. 문서가 제시하는 전형적인 크기는 각각 8~15개, 5~10개 항목이다.
두 파일은 세션을 시작할 때 시스템 프롬프트에 고정된 스냅샷으로 들어간다. 세션 중 메모리를 추가하거나 바꾸면 디스크에는 곧바로 저장되지만 현재 프롬프트는 바뀌지 않는다. 새 내용은 다음 세션부터 기본 문맥에 나타난다. Hermes는 이를 프롬프트 prefix cache를 유지하기 위한 의도적인 설계라고 설명한다.
한도를 넘겼을 때 조용히 오래된 항목을 버리지도 않는다. memory 도구가 오류와 현재 항목을 돌려주면 에이전트가 겹치는 내용을 합치거나 덜 중요한 항목을 지운 뒤 다시 추가한다. 공식 문서는 사용량이 80%를 넘으면 새 항목을 넣기 전에 통합하라고 권한다. Hermes에서 메모리 다이어트는 백그라운드의 불투명한 삭제가 아니라 현재 항목을 보고 수행하는 명시적 편집이다.
Hermes의 학습은 메모리와 스킬로 갈라진다
Hermes는 턴이 끝난 뒤 백그라운드 자기개선 리뷰를 실행할 수 있다. 반복된 사용자 교정이나 다음 세션에도 필요한 사실은 작은 메모리 항목이 된다. 더 긴 절차와 도구 사용법은 스킬로 생성되거나 기존 스킬에 패치된다.
스킬은 항상 프롬프트에 들어가는 문서가 아니다. 필요한 순간에만 불러오는 점진적 공개 구조다. Hermes 공식 문서는 작은 영구 사실은 메모리, 길고 반복 가능한 절차는 스킬에 두라고 구분한다. 메모리 한도를 늘리는 대신 지식의 종류에 따라 로딩 시점을 나눈다.
자동 학습이 불안하면 memory.write_approval과 skills.write_approval을 켤 수 있다. 이 경우 백그라운드 리뷰가 만든 변경도 바로 반영되지 않고 검토 대기열에 쌓인다. 작은 메모리는 항목 단위로 승인하고, 스킬은 전체 diff를 보고 승인하거나 거절한다. 더 깊은 장기 기억이 필요하면 Honcho, OpenViking, Mem0, Hindsight 같은 외부 provider를 기본 메모리 옆에 붙일 수 있다.
Hermes도 대화 압축을 메모리와 분리한다
Hermes의 공식 저장소에 있는 컨텍스트 압축 설명에는 두 개의 안전선이 나온다. 기본 agent compressor는 컨텍스트의 50%에서 작동하고, gateway는 85%에서 큰 세션을 막는 안전망으로 움직인다. 압축할 때는 오래된 도구 출력을 먼저 비우고, 그래도 크면 이전 대화를 구조화된 요약과 최근 메시지 꼬리로 바꾼다.
이 압축 결과가 MEMORY.md로 자동 승격되는 것은 아니다. 현재 대화를 계속할 수 있게 줄이는 작업과 다음 세션에도 남길 사실을 고르는 작업은 독립적으로 움직인다. Hermes는 작은 영구 메모리, 필요할 때 읽는 스킬, 현재 세션을 줄이는 압축을 서로 다른 장치로 관리한다.
OpenClaw는 승격 문턱을 만들고 Hermes는 자리부터 제한한다
OpenClaw의 기본형은 기록을 넓게 남기는 데 유리하다. 날짜별 메모리를 검색할 수 있고, 반복해서 회수되는 신호를 Dreaming이 장기 기억으로 올린다. 자료가 많아질수록 무엇을 삭제할지보다 무엇을 승격할지가 중요해진다. 대신 검색 인덱스, 후보 점수, 통합 결과를 함께 관리해야 한다.
Hermes의 기본형은 항상 들어오는 문맥을 예측하기 쉽다. 2,200자와 1,375자라는 작은 예산 때문에 항목 하나를 추가하려면 기존 내용을 합칠지 판단해야 한다. 긴 절차는 스킬로 빠지고, 더 큰 기억은 외부 provider가 맡는다. 대신 기본 메모리만으로 많은 과거 기록을 탐색하는 구조는 아니다.
어느 쪽도 모든 대화를 매번 프롬프트에 다시 넣지 않는다. OpenClaw는 작업 기록, 검색, 장기 기억, 위키를 층으로 나눈다. Hermes는 사용자 프로필, 작은 영구 메모리, 스킬, 외부 provider를 나눈다. 두 제품에서 공통으로 남는 원칙은 저장된 기록의 양과 지금 모델이 읽어야 할 양을 같은 숫자로 관리하지 않는다는 것이다.
그래서 OpenClaw의 질문은 “이 기록이 여러 상황에서 다시 불렸는가”에 가깝다. Hermes의 질문은 “이 사실이 다음 세션의 2,200자 안에 계속 남을 자격이 있는가”에 가깝다. 하나는 승격의 증거를 쌓고, 다른 하나는 작은 자리에서 경쟁시킨다.
주요 출처: OpenClaw 공식 문서 Memory overview, Dreaming, Compaction, QMD memory engine, Memory Wiki; Hermes Agent 공식 문서 Persistent Memory, Skills System, 공식 저장소의 background_review.py와 Context Compression & Prompt Caching. 기능과 기본값은 2026년 8월 8일 확인한 문서 기준입니다. 마지막 두 단락의 장단점과 질문 형태는 공식 기능을 비교한 Zero Draft Lab의 해석입니다.