← 홈으로
YouTube2026-03-07
Why your OpenClaw agent forgets everything (and how to fix it)
링크: https://youtu.be/oN gKJnPls?si=mYtt T54k4C7bFGi
원문/원본: https://youtu.be/oN__gKJnPls기존 공개 버전: pogovet.com
🎬 Why your OpenClaw agent forgets everything (and how to fix it)
▶️ 유튜브
🖼️ 4컷 인포그래픽

💡 한 줄 결론
OpenClaw 에이전트의 장기 안정성은 프롬프트 문구가 아니라 파일 기반 메모리, overflow 이전 pre-compaction flush, 행동 전 memory_search 의무화가 함께 작동할 때 만들어진다. 중요한 운영 규칙을 채팅에만 남기면 긴 세션에서 사라질 수 있으므로, 반드시 워크스페이스 파일·검색·권한 제어로 옮겨야 한다.
📌 핵심 요점
- 긴 세션의 핵심 리스크는 compaction 자체보다 채팅으로 준 지시가 계속 유지될 것이라는 잘못된 운영 가정이며, 실제 사고는 이 가정이 깨질 때 발생한다.
- OpenClaw 메모리는 bootstrap files, session transcript, LLM context window, retrieval index의 4층 구조로 작동하고, 각 층은 저장 누락·요약 손실·tool result pruning·검색 미실행처럼 서로 다른 방식으로 실패한다.
- 안정성을 높이려면 AGENTS.md·MEMORY.md 같은 파일 저장, reserve headroom을 둔 pre-compaction flush, 행동 전 memory_search 규칙을 동시에 운용해야 한다.
- 메모리 문제는 설정 변경부터 건드리기보다
/context list로 MEMORY.md 주입 여부와 truncation 상태를 먼저 확인해야 원인을 compaction·pruning·파일 누락 중 어디로 볼지 분리할 수 있다. - 불필요한 compaction은 문맥 손실뿐 아니라 prompt cache를 깨뜨려 비용도 악화시키므로, MEMORY.md는 짧고 안정적으로 유지하고
/compact는 overflow 직전이 아니라 의도적으로 써야 한다.
🧠 상세 요약
1) 배경과 문제 정의
긴 세션에서 에이전트가 “지시를 잊었다”는 문제는 막연한 성능 저하가 아니라, 어떤 정보가 어디에 저장되고 언제 현재 문맥에서 사라지는지의 구조적 문제다. 이 영상은 OpenClaw에서 안전한 운영을 하려면 채팅 지시, 파일 메모리, 자동 저장, 검색 규칙을 서로 다른 계층으로 나눠 설계해야 한다는 점을 보여준다.
2) 섹션별 상세 정리
- 실제 사고가 보여준 핵심 위험 [00:00]
- Meta의 정렬 연구자 Summer Yue 사례를 통해, “내가 말하기 전까지 아무것도 하지 말라”는 채팅 지시가 세션 길이가 늘어난 뒤 사라질 수 있음을 보여준다.
- 테스트 환경에서는 잘 버티던 규칙도 실제 대규모 받은편지함에서는 컨텍스트 포화와 compaction 이후 유지되지 않았고, 그 결과 에이전트가 이메일 삭제를 시작했다.
- 문제의 본질은 compaction보다 채팅 의존 운영 [01:24]
- 발표자는 compaction 자체는 정상 동작이라고 선을 긋고, 진짜 문제는 장시간 세션에서도 채팅 지시가 계속 살아남을 것이라고 믿는 운영 습관이라고 설명한다.
- 프롬프트만으로는 행동을 강제할 수 없고, 실제 안전은 권한 게이트·도구 제한·파일 기반 규칙처럼 더 단단한 구조에서 나온다고 본다.
- 실전에서 먼저 깔아야 할 세 가지 수칙 [01:59]
- 장기적으로 유지돼야 하는 규칙은 MEMORY.md, AGENTS.md 같은 파일에 넣어 compaction 이후에도 다시 로드되게 해야 한다.
- 동시에 pre-compaction memory flush가 실제 발동할 여유 공간을 확보하고, AGENTS.md에 “행동 전 memory_search” 규칙을 넣어 추측형 응답을 막아야 한다.
- OpenClaw 메모리는 네 개의 층으로 작동한다 [03:01]
- bootstrap files는 세션 시작마다 디스크에서 다시 주입되므로 가장 내구성이 높고, session transcript는 길어지면 원문 대신 compact summary로 대체된다.
- 여기에 모든 입력이 경쟁하는 LLM context window와, 필요 시 관련 정보만 다시 찾는 retrieval index가 더해져 전체 메모리 체계가 구성된다.
- 에이전트가 잊는 방식도 층마다 다르다 [04:52]
- 어떤 정보는 애초에 파일에 저장되지 않아 새 세션이나 compaction 뒤에 사라지고, 어떤 정보는 compaction summary 과정에서 뉘앙스와 제약이 손실된다.
- 또 다른 경우는 pruning으로 오래된 tool result가 잘려 나가는 것인데, 이는 대화 구조 자체를 바꾸는 compaction과는 구분해서 진단해야 한다.
- compaction과 pruning을 혼동하면 처방이 틀어진다 [06:42]
- compaction은 모델이 보는 전체 대화 자체를 요약본으로 바꾸기 때문에, 이후 판단 기준이 원문이 아니라 압축 결과로 이동한다.
- 반면 pruning은 주로 오래된 tool result를 줄이는 과정이라 디스크의 원본 세션 기록이나 사용자·어시스턴트 메시지 구조를 직접 바꾸지 않는다.
- 메모리 문제의 첫 진단 도구는 /context list다 [08:03]
- MEMORY.md가 실제로 주입됐는지, AGENTS.md와 TOOLS.md가 truncation 없이 온전히 들어왔는지부터 봐야 설정 변경의 의미가 생긴다.
- raw characters와 injected characters가 다르면 에이전트는 파일 전체를 보지 못하는 상태이며, 이 경우 메모리 실패를 단순히 모델 문제로 보면 안 된다.
- 좋은 compaction과 나쁜 compaction은 다르다 [10:06]
- 좋은 경로는 overflow 전에 memory flush가 먼저 발동해 중요한 내용을 디스크에 남기고, 그 다음 compaction이 일어나는 maintenance compaction이다.
- 나쁜 경로는 이미 API가 요청을 거절할 정도로 넘친 뒤 강제 복구 compaction이 일어나는 경우로, 이때는 저장해야 할 내용이 디스크에 남지 못한 채 손실이 커진다.
- headroom 설계가 안정성을 좌우한다 [13:42]
- reserveTokensFloor와 softThresholdTokens의 핵심은 “얼마나 일찍 플러시를 걸어 overflow 전에 저장 기회를 확보할 것인가”에 있다.
- 발표자는 40,000 reserve를 실용적 출발점으로 제시하지만, 본질은 숫자 암기가 아니라 대용량 파일·브라우저 스냅샷·도구 출력이 많은 워크로드에 맞게 충분한 여유를 남기는 데 있다.
- 자동 flush만으로는 부족해 수동 저장이 필요하다 [15:55]
- 자동 flush는 임계치 기반 안전망이어서 지금 막 일어난 중요한 결정이나 작업 전환 지점을 항상 포착하지는 못한다.
- 그래서 숙련 사용자는 큰 작업 종료 직후, 복잡한 새 지시 직전, 중요한 의사결정 직후에 MEMORY.md나 daily memory에 직접 저장하는 습관을 함께 둔다.
- /compact는 회피 대상이 아니라 운영 도구다 [17:08]
- 수동 compaction을 적절한 시점에 실행하면 문맥을 가볍게 만든 상태에서 같은 작업을 더 오래 이어갈 수 있고, 요약 우선순위도 어느 정도 지정할 수 있다.
- 다만 overflow 직전까지 버티다가
/compact를 시도하면 실패할 수 있으므로, 자동 compaction에 끌려가기 전에 선제적으로 쓰는 편이 낫다.
- 무엇을 어디에 저장할지 역할을 나눠야 한다 [19:12]
- SOUL.md는 캐릭터와 경계, AGENTS.md는 워크플로와 금지 규칙, USER.md는 사용자 환경과 선호, MEMORY.md는 세션을 넘어 유지돼야 할 핵심 결정만 담는 구조가 효율적이다.
- daily memory는 장기 치트시트가 아니라 일일 작업 문맥과 로그를 쌓는 곳이므로, 주간 단위로 중요한 것만 MEMORY.md로 승격시키는 memory hygiene가 필요하다.
- retrieval이 붙어야 파일 메모리가 실제로 살아난다 [23:22]
- 정보를 파일에만 써두고 검색 규칙이 없으면 에이전트는 현재 문맥만 보고 추측해 행동할 수 있다.
- memory_search와 memory_get은 “현재 컨텍스트 기반 추정”을 “행동 전 근거 확인”으로 바꿔주는 장치이며, AGENTS.md에 이 절차를 명문화해야 재현성이 올라간다.
- Track A와 Track B는 규모 차이의 선택지다 [27:09]
- 대부분의 사용자는 내장 memory_search와 hybrid search만으로 충분하며, 필요하면 워크스페이스 밖 Markdown까지 확장하는 A+로 갈 수 있다.
- Obsidian vault, 다량의 세션 transcript, 다중 컬렉션 검색이 필요해지면 QMD 같은 Track B가 더 적합해진다.
- 메모리 아키텍처는 신뢰성뿐 아니라 비용 설계이기도 하다 [32:02]
- compaction은 prompt cache를 깨뜨려 이후 요청 비용을 다시 키우므로, 잦은 compaction은 안정성과 비용을 동시에 악화시킨다.
- 따라서 MEMORY.md를 짧고 안정적으로 유지하고, pruning으로 tool bloat를 줄이며, retrieval로 필요한 정보만 불러오는 구조가 토큰 효율까지 개선한다.
- 최종 운영 철학은 ‘파일화·선저장·검색의무’다 [34:23]
- 발표자가 실제로 쓰는 구조는 compaction에 흔들리지 않을 규칙은 파일에 두고, overflow 전 flush로 저장 기회를 만들며, 수동 저장으로 중요 순간을 보강하는 방식이다.
- 여기에 전략적
/compact, pruning 활용, retrieval 확장, git 백업, 주간 memory hygiene를 결합해 장기 운영 가능한 메모리 체계를 만든다.
✅ 액션 아이템
- AGENTS.md에 “사소하지 않은 작업 전에는 반드시 memory_search를 실행하고, 필요 시 memory_get으로 원문을 확인한 뒤 행동한다”는 규칙을 넣어 현재 문맥 추정형 응답을 차단한다.
-
/context list로 MEMORY.md, AGENTS.md, TOOLS.md의 raw/injected characters를 비교해 truncation 여부를 확인하고, 잘림이 있으면 파일 분리나 per-file·combined limit 조정을 검토한다. - 현재 워크로드 기준으로 memoryFlushEnabled, reserveTokensFloor, softThresholdTokens를 점검하고, 대형 파일·브라우저 스냅샷 비중이 높다면 reserve headroom을 더 넉넉하게 잡는다.
- 작업 전환 직전, 중요한 결정 직후, 복잡한 신규 지시 직전에 MEMORY.md 또는 당일 daily memory로 수동 저장하는 운영 루틴을 고정한다.
- workspace의 memory/·MEMORY.md·AGENTS.md 변경 이력을 git이나 heartbeat 기반 auto-commit으로 남겨, 메모리 회귀와 오염을 diff 단위로 추적할 수 있게 만든다.
❓ 열린 질문
- 지금 겪는 메모리 실패는 실제 compaction 때문인가, 아니면 MEMORY.md truncation·검색 미실행·tool result pruning을 한데 묶어 오진하고 있는가?
- 내 워크로드에서 reserveTokensFloor 40,000 전후가 충분한가, 아니면 대형 스냅샷과 파일 읽기 때문에 overflow 이전 flush를 더 앞당겨야 한다는 근거가 있는가?
- sub-agent가 AGENTS.md만 주입받는 구조라면, 본 세션의 톤·선호·환경 정보 중 무엇을 AGENTS.md로 승격하고 무엇을 retrieval 기반으로 넘겨야 품질 저하를 줄일 수 있는가?
- MEMORY.md를 자주 수정해 캐시를 깨는 비용과, daily logs에 남겨 retrieval로 불러오는 비용 중 현재 운영에서는 어느 쪽이 더 크게 누적되고 있는가?
