서론: 에이전트도 잠이 필요할까
LLM 기반 에이전트는 근본적으로 한계가 있다. 컨텍스트 윈도우 밖의 기억은 사라진다. 세션이 재시작되면 어제 나눴던 대화, 내렸던 결정, 배운 교훈은 모두 초기화된다. OpenClaw는 이 문제를 'MEMORY.md'와 'memory/*.md' 파일 기반의 지속적 메모리 시스템으로 해결해왔다. 하지만 메모리 파일이 쌓일수록 새로운 문제가 생긴다. 무엇을 남길지, 무엇을 버릴지를 어떻게 결정하냐는 것이다.
최근 도입된 Dreaming은 바로 이 지점을 건드린다. 에이전트가 스스로 단기 신호를 평가하고, 장기 기억으로 승격할 후보를 선별하며, 주기적으로 메모리를 '정리'하는 자동 통합(또는 강화) 시스템이다.
Dreaming이란?
Dreaming은 'memory-core' 플러그인의 하위 시스템으로, 단기 신호(short-term signals)를 내구성 있는 장기 기억(durable memory)으로 이동시키는 백그라운드 처리 파이프라인이다. 주요한 특징은 다음과 같다.
- 옵트인(opt-in) : 기본값은 비활성화
- 설명 가능(explainable) : 왜 어떤 항목이 승격됐는지/안 됐는지 추적 가능
- 검토 가능(reviewable) : 자동 승격 전 CLI로 미리보기 + 수동 적용 가능
3단계 수면 모델: Light → REM → Deep
Dreaming은 인간의 수면 주기를 모방한 3단계 협력 모델을 사용한다. 각 단계는 독립적인 '모드'가 아니라 내부 구현 단계다.
Light 페이즈 - 분류와 무대 준비
최근 일일 메모리 파일과 기억 회수 이력(recall traces)을 읽어 후보를 추출하고 중복을 제거한다.
- 'MEMORY.md'에는 절대 쓰지(write) 않음
- 'DREAMS.md'에 'Light Sleep' 블록 기록
- 나중에 Deep 단계에서 쓸 강화 신호를 기록해둠
쉽게 말해 "이런 재료들이 있네" 하고 식탁 위에 올려놓는 단계다.
REM 페이즈 - 패턴 추출
단기 트레이스에서 반복되는 테마와 아이디어를 추출한다.
- 테마 요약, 반영(summary) 생성
- 'REM Sleep' 블록 기록
- 역시 'MEMORY.md'에는 쓰지 않음
Deep 페이즈의 랭킹에 보정 신호를 제공한다.
Deep 페이즈 - 실제 승격 결정
여기가 핵심이다. Light와 REM에서 준비된 후보를 가중 스코어링해서 실제로 'MEMORY.md'에 기록할지 결정한다.
| 시그널 | 가중치 | 설명 |
| Relevance | 0.30 | 검색 품질 평균 - 얼마나 많이, 정확하게 검색됐나 |
| Frequency | 0.24 | 누적된 단기 신호 횟수 |
| Query diversity | 0.15 | 다른 쿼리/다른 날짜에서 등장한 횟수 |
| Recency | 0.15 | 시간 감쇠가 적용된 신선도 |
| Consolidation | 0.10 | 닷데이 이상 반복 등장 강도 |
| Conceptual richness | 0.06 | 개념 태그 밀도 |
여기에 Light, REM 단계의 보강 점수도 소폭 반영된다. 오래돼서 지워진 일일 파일의 스니펫은 스킵한다(stale/deleted 방지). 이 구조의 의미는 분명하다. 예전처럼 "중요해 보인다" 수준이 아니라,
- 얼마나 자주 등장했는지
- 얼마나 다양한 질문과 날짜에서 다시 떠올랐는지
- 최근에도 계속 유효한지
- 며칠에 걸쳐 반복됐는지
같은 조건을 합산해 장기 기억 승격 여부를 정한다는 뜻이다.
공식 문서에는 minScore, minRecallCount, minUniqueQueries 같은 임계치도 명시돼 있다. 즉, Dreaming은 단순 자동 요약이 아니라 점수 기반 장기 기억 승격 시스템으로 보는 편이 정확하다.
사용 방법 및 동작
Dreaming은 자동으로 켜지지 않는다. 직접 활성화해야 한다.
활성화 방법
{
"plugins": {
"entries": {
"memory-core": {
"config": {
"dreaming": {
"enabled": true
}
}
}
}
}
}
실행 스케줄 설정
활성화하면 'memory-core'가 크론 잡을 하나 자동 관리한다. 기본 실행 시각은 매일 오전 3시(0 3 * * *)이다. 즉 켜두면 기본적으로 매일 새벽 3시에 Light → REM → Deep 순서로 한 번 전체 순회가 돈다. 사용자의 타임존에 맞게 커스터마이징도 가능하다. 나도 아래 코드와 동일하게 한국 시간 시간 기준으로 새벽 4시에 동작하도록 설정해놨다.
{
"plugins": {
"entries": {
"memory-core": {
"config": {
"dreaming": {
"enabled": true,
"timezone": "Asia/Seoul",
"frequency": "0 4 * * *"
}
}
}
}
}
}
슬래시 및 CLI 명령어
지원되는 슬래시 명령은 아래와 같다. 따로 설명은 필요 없을 듯하다.
/dreaming status
/dreaming on
/dreaming off
/dreaming help

CLI로 수동 확인도 가능하다.
openclaw memory promote
openclaw memory promote --apply
openclaw memory promote-explain "router vlan"
openclaw memory rem-harness
openclaw memory status --deep
특히 'promote-explain'은 왜 어떤 항목이 승격됐는지, 왜 탈락했는지 확인할 때 유용하다.
Dream Diary와 Dreams UI
최근 업데이트된 문서에서 가장 눈에 띄는 건 사람이 직접 확인할 수 있는 산출물이 훨씬 풍부해졌다는 점이다. 주요한 두 가지 산출물은 다음과 같다.
- 내부 상태 : 'memory/.dreams/' 내 recall store, phase signals, ingestion checkpoints, locks
- 사용자용 출력
- 'DREAMS.md''memory/dreaming/<phase>/YYYY-MM-DD.md'
- 각 phase report
- Dreams UI
이 외에 Dream Diary가 꽤 흥미롭다. 각 단계가 충분한 재료를 확보하면, 백그라운드 서브에이전트가 짧은 일지 항목을 남긴다. 사용자가 Dreams UI에서 확인할 수 있는 기록이다. 하지만 Dream Diary는 열람용 로그일 뿐, 장기 기억 승격의 직접 입력이 아니다. Dreaming이 생성한 일지나 리포트는 승격 대상에서 제외되고, 실제 승격은 근거가 있는 메모리 조각(grounded memory snippet)만을 기준으로 한다. 시스템이 스스로 작성한 서술형 로그가 장기 기억으로 흘러들지 않도록 명확한 경계를 두고 있다.
Dreams UI 표시 정보
Dreaming을 활성화하면 Gateway(Control UI)에 'Dreams' 탭이 추가된다. 여기서 다음의 정보를 확인할 수 있다.
- Dreaming 활성화 상태
- 페이즈별 상태 + 다음 스케줄 실행 시각
- 단기/장기/오늘 승격된 항목 수
- 확장 가능한 Dream Diary 리더

조금 더 풀어쓰자면.. Dreaming을 활성화하면 이 탭이 나타나는데, 여기서 현재 Dreaming이 켜져 있는지, 각 phase가 어떤 상태인지, 다음 스케줄 실행이 언제인지를 한 화면에서 볼 수 있다. 단기 기억과 장기 기억 각각에 대기 중인 항목 수, 오늘 실제로 승격된 항목 수 같은 수치도 여기에 표시된다. Dream Diary 역시 이 탭 안에서 펼쳐 읽을 수 있는 리더로 제공되기 때문에, 별도로 파일을 열어볼 필요 없이 Dreaming의 전체 상황을 Gateway 하나에서 파악할 수 있다.

CLI나 슬래시 명령으로도 상태 확인은 가능하지만, 한눈에 전체 그림을 보는 데에는 이 UI가 더 낫다.
마무리
Dreaming의 진짜 의미는 단순 자동 요약이 아니다. OpenClaw가 점점 아래와 같은 방향으로 가고 있다는 신호다.
- 검색 이력 누적
- 세션 기록 흡수
- 장기 기억 승격의 수치화
- 사람이 읽는 diary와 UI 제공
과거 실험용 기능일 때는 "기억을 조금 더 잘 남기게 해주는 기능"이었다면 지금은 메모리 파이프라인 자체로 보는 편이 맞다. 앞으로 기본 활성(현재 기본 값은 비활성화)까지 가게 될지는 더 봐야겠지만, 적어도 지금 시점의 Dreaming은 더 이상 실험용 토막 기능으로 보이지 않는다.
'AI-Agent > OpenClaw-Guide' 카테고리의 다른 글
| OpenClaw 운영 중에 자주 사용하는 CLI 명령 모음 (0) | 2026.04.16 |
|---|---|
| OpenClaw 크론 tools 플래그 적용으로 토큰 절약과 보안, 두 마리 토끼 잡기 (0) | 2026.04.03 |
| OpenClaw 2026.4.1의 크론 tools 플래그가 동작하지 않는 현상 - 원인 분석과 우회 방법 (0) | 2026.04.03 |
| OpenClaw 모델 목록이 갑자기 줄어드는 현상 대응 - agents.defaults.models의 숨은 동작 (0) | 2026.04.02 |
| OpenClaw 멀티에이전트 환경에서 브라우저 자동화 - 포트 분리, 개별 브라우저 프로필 세션 (0) | 2026.04.01 |