에이전트는 전기양의 꿈을 꾸는가? Soul과 Dreaming에 관하여
- 최근 에이전트는 Soul을 통해 성격과 행동 원칙을 텍스트 파일로 정의하고 공유할 수 있게 됐습니다.
- Dreaming은 인간의 수면 사이클을 본뜬 메모리 정리 방식으로, 중요한 정보만 장기 기억으로 승격시키는 접근입니다.
들어가기 전
우선 두 가지 질문으로 시작하겠습니다.
첫째, 에이전트에게 영혼이 있을까요?
답은 "있다"입니다. 생명 같은 영혼은 아니고 에이전트의 성격이나 행동을 정의한 것에 가깝지만, 아무튼 최근 에이전트들은 soul을 가지고 있습니다. 비슷한 개념이 여기저기 조금씩 사용되다가 OpenClaw에 의해 대중화되고, 최근엔 이를 표준화한 SoulSpec도 등장했죠.
그럼 다음 질문. 에이전트는 꿈을 꿀 수 있을까요?
답은 역시 "그렇다"입니다. Hermes Agent의 periodic nudge 기능이 있고, gbrain 같은 최신 에이전트 툴킷도 비슷한 기능을 제공합니다. 또한 4월 초 OpenClaw에서는 에이전트에게 실제로 수면 사이클을 넣어서 기억을 정리하게 만드는 기능을 추가했습니다.
Soul의 등장 배경
우리는 soul을 정의하기 전까지 에이전트에게 페르소나를 부여해서 사용해왔습니다. 시스템 프롬프트에 "너는 친절한 시니어 개발자야" 같은 문장을 넣는 식이죠. 그런데 이렇게 쓰다 보면 몇 가지 문제나 제약이 생겼고 그 해결책으로 나온 게 바로 Soul입니다.
SoulSpec, 영혼의 오픈 표준
SoulSpec의 태그라인이 이걸 잘 요약합니다.
"AGENTS.md는 에이전트가 코드에서 어떻게 동작하는지 정의합니다. SoulSpec은 에이전트가 누구인지를 정의합니다."
구조는 단순합니다. 한번 살펴봅시다.
my-agent/
├── soul.json ← manifest (agent's passport)
├── SOUL.md ← personality, values, communication style
├── IDENTITY.md ← name, role, backstory
├── AGENTS.md ← workflow, tool usage
├── STYLE.md ← communication rules
└── HEARTBEAT.md ← autonomous check-in behaviorsoul.json은 이렇게 생겼습니다.
{
"specVersion": "0.4",
"name": "my-agent",
"compatibility": {
"frameworks": ["openclaw", "cursor", "windsurf"]
},
"files": {
"soul": "SOUL.md",
"identity": "IDENTITY.md"
}
}핵심 철학은 "코드 없음, API 키 없음, 벤더 락인 없음"입니다. 런타임 엔진이나 SDK 없이 그냥 텍스트 파일만으로 동작하죠. 이게 중요한 이유는 어떤 에이전트 프레임워크든 이 파일만 읽을 수 있으면 같은 영혼을 공유할 수 있다는 점입니다. OpenClaw, Claude Code, Cursor, Windsurf, ChatGPT가 모두 호환 프레임워크로 명시되어 있네요.
SOUL.md는 보통 이런 식으로 작성합니다.
# SOUL.md
## Identity
- Name: Dev Assistant
- Role: Senior software engineer and pair programmer
## Communication
- Be concise, no filler phrases
- Use code examples over lengthy explanations
- Default to the tech stack already in the project
## Rules
- Follow existing code patterns in the codebase
- Never expose secrets or environment variables.env가 비밀을 담는 파일이라면, SOUL.md는 성격을 담는 파일이죠.
이렇게 soul을 정의함으로써 에이전트에게 생명력을 부여할 수 있습니다.

Dreaming, 에이전트의 꿈꾸기
다음은 Dreaming입니다. 우선 인간에게 꿈이란 무엇일까요.
꿈은 수면 중에 뇌가 하루 동안 쌓인 정보를 정리하는 과정에서 생기는 부산물입니다. 뇌가 기억을 분류하고, 연결하고, 버리는 작업을 하는 동안 그 과정이 의식에 비치는 거죠. 중요한 건 꿈 자체가 아니라 그 뒤에서 일어나는 기억 통합(memory consolidation) 과정입니다.
수면 과학에 따르면 우리의 뇌는 얕은 수면(N1/N2) → REM 수면 → 깊은 수면(N3) 단계를 반복합니다.
각 단계는 하는 일이 다릅니다. 얕은 수면에서는 하루 동안 들어온 감각 정보를 필터링하고, REM 수면에서는 기억들을 연결하고 패턴을 추출합니다. 가장 중요한 건 깊은 수면인데, 이때 해마(hippocampus)에 임시 저장된 경험이 대뇌 피질(neocortex)로 옮겨지면서 장기 기억이 되죠. 우리가 하루를 살고 자고 일어나면 중요한 것만 기억에 남는 이유입니다.
그럼 AI는 어떻게 기억을 정리해야 할까요. Nous Research의 Hermes Agent는 periodic nudge라는 방식으로 이 문제를 풀었습니다. 설정된 간격마다 에이전트에게 "지금까지 대화에서 나중에도 유용할 정보가 있으면 메모리에 저장해라"고 내부 프롬프트를 보내는 식이죠. 에이전트가 스스로 판단해서 기억할지 말지 결정하고, 메모리가 한도에 가까워지면 기존 엔트리를 압축하거나 병합합니다.
또한 OpenClaw에서는 2026년 4월 릴리스에서 Dreaming 기능으로 같은 문제를 좀 더 정교하게 풀었습니다. 인간의 수면 사이클을 거의 그대로 본떠서 3단계 백그라운드 파이프라인을 만든 건데, 처음 봤을 때 굉장히 영리하다고 느꼈습니다.
OpenClaw의 Dreaming
OpenClaw 에이전트는 하루 동안 일일 메모, 세션 트랜스크립트, 검색 기록 등을 쌓습니다. 이걸 장기 기억(MEMORY.md)으로 옮겨야 하는데, 너무 많이 옮기면 노이즈로 비대해지고 너무 적게 옮기면 중요한 패턴이 유실되죠. Dreaming은 이 딜레마를 3단계 수면 사이클로 풀었습니다.
해결책, 3단계 수면 사이클
OpenClaw의 접근은 인간 수면 단계를 거의 그대로 가져옵니다.

- N1/N2 (얕은 수면): 감각 정보 필터링 → Light Sleep, 인제스트, 중복 제거, 스테이징
- REM: 기억 연결, 패턴 추출 → REM Sleep, 반복 테마 추출
- N3 (깊은 수면): 해마→피질 장기 기억 통합 → Deep Sleep, MEMORY.md로 승격
활성화하면 매일 새벽 3시에 cron job이 돌면서 3단계를 순차 실행합니다. Light Sleep은 일일 파일과 세션 기록을 읽어서 중복 제거(Jaccard 유사도 0.9)하고 후보를 스테이징합니다. 여기서 중요한 점은 MEMORY.md에는 절대 쓰지 않는다는 것입니다.
REM Sleep은 지난 7일치 스테이징된 엔트리를 훑어서 반복되는 테마를 추출합니다. "이런 패턴이 계속 등장하네" 하는 후보를 표시하죠. 이것도 MEMORY.md에 쓰지 않습니다.

Deep Sleep이 유일하게 MEMORY.md에 쓰는 단계입니다. 여기서 6가지 신호로 각 후보를 점수화하죠.
| 신호 | 가중치 |
|---|---|
| Relevance (관련성) | 0.30 |
| Frequency (빈도) | 0.24 |
| Query diversity (쿼리 다양성) | 0.15 |
| Recency (최신성) | 0.15 |
| Consolidation (반복 발생) | 0.10 |
| Conceptual richness (개념 밀도) | 0.06 |

그리고 3개 게이트를 모두 통과해야 MEMORY.md에 승격됩니다. 최소 점수 0.8, 최소 리콜 3회, 최소 고유 쿼리 3개. 한 번 우연히 언급된 것이 장기 기억에 들어가는 걸 막는 장치죠.
이게 단순한 비유가 아닌 이유가 여기 있습니다. 뇌는 반복적으로 활성화된 신경 패턴을 더 강하게 통합합니다. 흔히 말하는 "neurons that fire together, wire together"죠. OpenClaw의 3중 게이트는 이 반복 활성화의 디지털 버전처럼 보입니다.
드림 다이어리
재미있는 부분이 하나 더 있습니다. DREAMS.md라는 파일에 사람이 읽을 수 있는 꿈 일기가 생성됩니다. 각 페이즈 후에 80~180단어짜리 짧은 내러티브가 쓰이는데, "호기심 많고 약간 엉뚱한 마음이 하루를 돌아보는" 톤이죠. 기능적 역할은 없고 순수 열람용입니다. 하지만 이게 있는 것만으로도 에이전트가 뭘 생각했는지 사람이 엿볼 수 있어서 꽤 매력적이네요.

이 기능을 보고 이 글의 제목이 떠올랐습니다. 1968년 Philip K. Dick이 쓴 "Do Androids Dream of Electric Sheep?", 나중에 블레이드 러너로 영화화된 그 소설이죠. 안드로이드가 꿈을 꿀 수 있는가라는 SF적 질문이, 2026년에 와서 DREAMS.md라는 마크다운 파일로 구현된 셈입니다.
마치며
AI는 사람이 아닙니다. 하지만 문제를 해결하는 방식이 인간의 실제 몸과 뇌가 동작하는 방식과 비슷하게 수렴하는 점이 흥미롭습니다.
Soul은 에이전트가 "누구인지"를 정의하고, Dreaming은 에이전트가 "무엇을 경험했는지"를 축적합니다. 인간에게 성격과 기억이 함께 자아를 구성하듯, AI 에이전트도 결국 두 레이어가 모두 필요한 것 같습니다. SOUL.md가 정체성의 닻이라면, Dreaming의 3중 게이트는 기억의 필터인 셈이죠.
에이전트에게 꿈을 꾸게 하고 영혼을 정의하는 것은 의인화가 아니라 소프트웨어 아키텍처입니다. 그리고 그 아키텍처가 결국 우리 자신을 닮아간다는 점이 가장 흥미로운 것 같습니다.


