OpenClaw 에이전트에 자기 개선 루프(Self-Improvement Loop)를 구축했습니다. 제가 잠든 사이 매일 밤 실행됩니다.
요약
OpenClaw 에이전트의 세션 간 기억 상실 문제를 해결하기 위해 매일 밤 실행되는 자기 개선 루프(Self-Improvement Loop)를 구축했습니다. cron job을 통해 에이전트가 스스로 로그를 분석하고 메모리를 업데이트하여 지속적인 성능 향상을 도모합니다.
핵심 포인트
- 에이전트의 상태 유지(stateful)를 위한 야간 자동 검토 루프 구현
- 에러 로그 분석을 통한 실패 패턴 파악 및 설정 최적화
- 구조화된 메모리 업데이트를 통한 개인화된 선호도 반영
- cron job을 활용한 비동기적 자기 개선 프로세스 구축
지난달 제 OpenClaw 에이전트는 세션 사이에 무언가를 잊어버리곤 했습니다. 간결한 답변을 선호하는 저의 취향, 제가 활발히 진행 중인 프로젝트, 어떤 cron job이 실패했는지와 같은 사소한 것들 말이죠. 순간적으로는 예리했지만, 시간이 지날수록 기억이 얕아졌습니다.
그러다 깨달았습니다. 저는 에이전트를 상태가 없는 (stateless) API처럼 취급하고 있었다는 것을요. 모든 세션이 매번 새로운 시작이었습니다. 메모리 파일은 존재했지만, 아무도 그것을 선제적으로 읽지 않았습니다.
그래서 저는 매일 밤 실행되는 자기 개선 루프 (self-improvement loop)를 구축했습니다. 이 루프는 새벽 2시에 실행되어, 무슨 일이 있었는지 검토하고, 메모리를 업데이트하며, 제가 깨어나기 전에 몇 가지 설정을 조정합니다. 제가 정확히 무엇을 설정했는지, 그리고 그것이 실제로 무엇을 바꾸었는지 소개하겠습니다.
핵심 문제: 에이전트는 세션 사이에 내용을 잊어버린다
OpenClaw는 일일 로그, 장기 MEMORY.md, 도메인별 파일 등 탄탄한 메모리 시스템을 갖추고 있습니다. 문제는 시스템이 아니었습니다. 문제는 세션 사이에 그것을 실행하는 사람이 아무도 없었다는 점이었습니다.
에이전트는 깨어나서 컨텍스트 (context) 파일들을 읽고 작업을 시작합니다. 하지만 그날의 실패, 결정, 수정 사항들이 지속적인 행동 변화로 합성되지 않았습니다. 저는 매일 아침 그 작업을 수동으로 하고 있었습니다.
해결책은 에이전트 자신의 코치 역할을 하는 매일 밤 격리된 cron job을 만드는 것이었습니다. 이 작업은 구조화된 검토를 수행하고 업데이트 내용을 메모리 시스템에 다시 기록합니다.
매일 밤 실행되는 cron 설정
openclaw.json에 설정된 스케줄은 다음과 같습니다:
{
"name": "Nightly Self-Improvement Loop",
"schedule": {
...
bestEffort: true 설정이 중요합니다. 새벽 2시에 작업이 실패하더라도 제가 잠에서 깨고 싶지는 않기 때문입니다. 그러면 다음 날 밤에 다시 시도할 것입니다.
매일 밤 실제로 실행되는 내용
위의 프롬프트는 의도적으로 구조화되었습니다. 각 단계가 무엇을 하는지 설명해 보겠습니다.
1~2단계: 컨텍스트 수집. 어제의 일일 로그를 읽음으로써 에이전트는 무슨 일이 일어났는지에 대한 구체적인 그림을 갖게 됩니다. 자기 개선 메모리를 읽음으로써 에이전트는 학습된 규칙들 — 즉, 제가 수행한 수정 사항과 제가 설정한 선호도들을 파악합니다. 이 둘이 합쳐져 개선을 위한 원재료가 됩니다.
3단계: 로그 분석 (Log analysis). 이 부분은 제가 이렇게 가치 있을 것이라고 예상하지 못했던 부분입니다. 에이전트는 자신의 에러 로그 (error logs)를 확인하고 실패 사례를 분류합니다. 도구 타임아웃 (tool timeout)인가요? 모델 API 문제인가요? 아니면 컨텍스트 오버플로 (context overflow)인가요? 단일 실패 사례를 아는 것보다 실패의 _패턴 (pattern)_을 파악하는 것이 훨씬 더 유용합니다.
4단계: 리뷰 작성 (Writing the review). 야간 리뷰 파일은 ~/self-improving/nightly-reviews/에 저장됩니다. 이 파일들은 패턴 저널 (pattern journal)로 축적됩니다. 몇 주가 지나면 다음과 같이 되돌아보며 확인할 수 있습니다: "아, 대규모 배치 작업 (batch job)을 실행할 때마다 에이전트가 280초에서 타임아웃이 발생하는구나 — 이 제한 시간을 늘려야겠다."
5단계: 일일 메모리 업데이트 (Daily memory update). 에이전트는 오늘의 메모리 파일에 짧은 상태 정보를 기록합니다. 이것은 메타 (meta)적인 작업입니다. 즉, 에이전트가 리뷰가 실행되었음을 문서화하는 것입니다. 무언가 잘못되더라도 기록이 남게 됩니다.
6단계: 학습된 규칙 업데이트 (Updating learned rules). 이것은 가장 레버리지가 높은 (highest-leverage) 단계입니다. 만약 에이전트가 새로운 패턴 — 즉, 제가 수행한 수정 사항이나 특정 방식으로 더 잘 작동하는 워크플로 (workflow) — 을 발견하면, 이를 영구적인 자기 개선 메모리 (persistent self-improving memory)에 기록합니다. 이는 제가 아무것도 하지 않아도 향후의 행동을 변화시킵니다.
자기 개선 메모리 구조 (The Self-Improving Memory Structure)
제가 사용하는 메모리 시스템은 세 가지 계층으로 구성됩니다:
~/self-improving/
memory.md # 글로벌 규칙 및 선호도 (가장 중요)
corrections.md # 세션 중에 수행된 구체적인 수정 사항
...
memory.md 파일은 에이전트가 매 세션 시작 시 읽는 파일입니다. 이는 큐레이션된 고신호 (high-signal) 계층입니다. 야간 리뷰가 이 파일로 유입됩니다.
제가 배운 핵심 규칙은 다음과 같습니다: 에이전트가 자신의 수정 사항을 직접 작성해야 한다는 것입니다. 이전에는 제가 에이전트를 수정할 때마다 memory.md를 수동으로 업데이트했습니다. 이제는 야간 루프 (nightly loop)가 이를 수행합니다. 저는 이제 "이것을 기억해 둬"라고 말하고 시스템이 이를 처리할 것이라고 믿는 습관이 생겼습니다.
30일 후 변화된 점
이 시스템을 한 달 동안 실행한 후, 다음과 같은 점들을 발견했습니다:
시작 시간(Startup time)이 단축되었습니다. 에이전트는 더 이상 매 세션이 시작될 때마다 저에게 선호도를 다시 설명해 달라고 요청하지 않습니다. memory.md를 읽고 제가 기술적인 내용을 선호하며, 간결한 답변을 원하고, 불필요한 미사여구(filler words)를 원하지 않는다는 점을 파악합니다.
오류 복구(Error recovery) 능력이 향상되었습니다. 에이전트는 이제 "그것은 제 능력 밖입니다"라는 상황을 더 잘 처리합니다. 어설픈 결과물을 시도하는 대신 그렇게 말해야 한다는 것을 알고 있습니다. 이는 제가 세 번이나 수정해 준 규칙이며, 야간 루프(nightly loop)가 해당 패턴을 포착했기 때문입니다.
메모리 시스템이 실제로 성장합니다. 이전에는 저만이 memory.md에 내용을 작성했습니다. 이제는 에이전트가 기여합니다. 저보다는 느리지만(규칙을 추출하기 위해 세션을 되돌아봐야 하므로), 더 철저합니다. 제가 세부 사항에 매몰되어 놓치는 패턴들을 에이전트는 잡아냅니다.
예상치 못한 이점 하나: 가끔 야간 검토(nightly review) 파일들을 읽어보곤 합니다. 에이전트가 무엇을 기록할 가치가 있다고 생각했는지 확인하는 것은 묘하게 유용합니다. 제 자신의 행동에 대한 에이전트의 관찰 중 일부는 제가 의식적으로 인지하지 못했던 것들이었습니다.
가장 큰 차이를 만든 단 하나의 설정
위의 모든 것은 프로세스에 관한 것입니다. 하지만 가장 영향력 있었던 단 하나의 변화를 꼽아야 한다면, 에이전트 프롬프트 부트스트랩(prompt bootstrap)에 다음 내용을 추가한 것입니다:
중요한 작업을 수행하기 전에, ~/self-improving/memory.md를 읽으세요.
그게 전부입니다. 단 한 줄입니다. 이제 에이전트는 어떤 작업을 시작하기 전에 자신이 학습한 규칙들을 스스로 로드합니다. 야간 루프는 그 규칙들을 더 낫게 만듭니다. 피드백 루프(feedback loop)가 완성되는 것입니다.
이 한 줄이 없다면, 자기 개선형 메모리는 무덤에 불과합니다. 이 한 줄이 있음으로써, 에이전트는 실제로 학습하고 있습니다.
내가 배운 점
AI 에이전트를 위한 자기 개선 루프(self-improvement loop)를 구축하는 것은 메타 수준(meta-level)의 프로젝트처럼 들립니다. 하지만 구현 방식은 매우 실용적입니다. 크론 잡(cron jobs), 메모리 파일, 그리고 구조화된 야간 검토 프롬프트가 전부입니다.
가장 어려운 부분은 기술적인 것이 아니었습니다. 시스템이 스스로의 개선을 처리하도록 신뢰하는 것이었습니다. 저는 모든 규칙을 수동으로 큐레이션하는 것을 멈추고, 에이전트가 스스로 수정 사항을 작성하도록 내버려 두어야 했습니다. 그중 일부는 틀렸습니다. 하지만 대부분은 맞았습니다. 시간이 지남에 따라 신호 대 잡음비(signal-to-noise ratio)가 개선되었습니다.
만약 당신이 OpenClaw를 실행 중인데 세션 사이에 에이전트가 피상적(shallow)이라고 느껴진다면, 그 해답은 더 나은 모델이 아닙니다. 그것은 더 나은 연속성(continuity)입니다. 메모리 시스템(memory system)을 설정하세요. 야간 리뷰 루프(nightly review loop)를 추가하세요. 에이전트가 스스로를 코칭하게 만드세요.
새벽 2시의 당신이 당신에게 고마워할 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기