OpenClaw 튜닝 매뉴얼: "쓸 수 있는" 단계에서 "없으면 안 되는" 단계로 가는 7가지 고급 설정

OpenClaw 튜닝 매뉴얼: "쓸 수 있는" 단계에서 "없으면 안 되는" 단계로 가는 7가지 고급 설정

머리말: 이 글은 다음을 이미 해냈다고 가정합니다

만약 이미:

  • OpenClaw를 설치하고 정상적으로 대화할 수 있다(Discord / Telegram / WebChat 모두 가능)
  • SOUL.md / USER.md / IDENTITY.md
  • MEMORY.md,memory/ 의 계층 구조, 그리고 memorySearch 가 대략 무엇인지 안다

그렇다면 바로 읽어 내려가셔도 됩니다.

이 글에서는 7가지 주제를 다룹니다. 모두 "바로 적용할 수 있는" 설정 지점입니다:

  1. AGENTS.md: AI에게 업무 매뉴얼을 준다(가장 중요)
  2. 기억 시스템 실전: AI가 진짜로 기억하고 스스로 유지보수하게 만들기
  3. 하위 Agent: 한 사람이 작은 팀이 된다(병렬 + 컨텍스트 격리)
  4. Cron 작업: 분 단위로 정확한 자동화
  5. Skill 개발: AI에게 새 기술을 가르친다(skill을 0에서 작성)
  6. 다중 채널 연동: 언제 어디서나 당신의 AI를 찾기
  7. 설정 치트시트: 자주 쓰는 파라미터의 권장값과 함정

먼저 한눈에: "이전 글 수준"에서 "이 글의 튜닝 후"로

항목 이전 글 수준 이 글의 튜닝 후 행동 규범 SOUL.md 몇 가지 원칙 업무 매뉴얼이 있어 무엇을 읽고 쓰고 물어야 하는지 안다 기억 계층 구조 + 검색 가능 자동 기록, 자동 압축, 주간 유지보수로 적중률 향상 작업 능력 메인 두뇌 단일 스레드 하위 Agent를 병렬로 투입하고 결과를 취합 자동화 Heartbeat 점검 Cron 정확한 정시 실행, 조간·주간 보고서 자동 발송 확장성 기성 skill 설치 직접 skill을 작성해 필요한 능력을 추가 채널 플랫폼 하나만 연동 Discord/Telegram/WebChat 동시 접속 설정 돌아가기만 하면 됨 자주 쓰는 파라미터를 안정성·token 절약 위주로 조정

1. AGENTS.md: AI에게 "업무 매뉴얼"을 써 주기

1) 무엇을 해결하는가?

SOUL.md 는 "그것이 누구인지"를 정하고,USER.md 는 "누구를 돕는지"를 정합니다. 하지만 많은 사람이 놓치는 점이 있습니다:AI는 어떻게 일해야 하는지 모른다.

예를 들어:

  • 새 session이 시작될 때 어떤 파일을 먼저 읽어야 하는가? 순서는?
  • 기억은 어디에 써야 하는가? 어떤 형식으로 쓰는가?
  • 어떤 작업은 바로 해도 되고, 어떤 것은 반드시 먼저 물어야 하는가?
  • 그룹 채팅에서 당신의 개인 기억을 인용해도 되는가?

이것이 AGENTS.md 의 가치입니다. 이것은 성격 설정이 아니라 업무 매뉴얼 입니다.

이렇게 이해하면 됩니다:

  • SOUL.md = 성격("솔직하게 말하고 결론을 먼저 제시")
  • AGENTS.md = SOP("무엇을 먼저 읽고, 다음에 무엇을 하고, 어떻게 기록하고, 무엇을 하면 안 되는가")

2) Session 시작 흐름: AI가 깨어나서 가장 먼저 할 일

새 session은 본질적으로 "방금 깨어난" 상태이며, 지난 대화의 컨텍스트를 자동으로 갖고 있지 않습니다. "현장 복원" 절차를 명확히 못 박아 두어야 합니다.

이제 AGENTS.md 에 단락을 추가합니다(규칙은 영어로 쓰는 편이 더 안정적입니다):

Every Session

Before doing anything else:

  1. Read SOUL.md — this is who you are
  2. Read USER.md — this is who you're helping
  3. Read memory/YYYY-MM-DD.md (today + yesterday) for recent context
  4. If in MAIN SESSION (direct chat with your human): Also read MEMORY.md

Don't ask permission. Just do it.

"오늘 + 어제" 로그를 왜 읽어야 할까요? 새벽 시간대에는 "오늘"이 아직 비어 있을 수 있고 어제에야 내용이 있기 때문입니다.

왜 MEMORY.md 는 MAIN SESSION에서만 읽을까요? MEMORY.md 에는 더 사적이고 핵심적인 색인 정보가 담기는 경우가 많아, 그룹 채팅이나 cron·하위 agent의 session에서 불러오기에 적합하지 않기 때문입니다.

3) 기억 기록 규범: "재사용 가능한 결론"을 기록하는 법을 가르치기

많은 사람의 기억 시스템이 무너지는 것은 계층 구조 문제가 아니라 기록 규범이 정해지지 않았기 때문입니다.

결과는 보통 두 가지입니다:

  • 무엇이든 MEMORY.md 에 쌓아 올린다(결국 그냥 일기장이 된다)
  • 아니면 아예 쓰지 않는다(다음에 바로 잊는다)

"어디에 쓰고, 무엇을 쓰고, 어떻게 쓸지"를 분명히 해 두는 것을 권합니다. 예를 들어:

Memory

You wake up fresh each session. These files are your continuity.

기억 계층

계층 파일 용도 색인 계층 MEMORY.md 핵심 정보와 색인, 간결하게 유지(40줄 미만 권장) 프로젝트 계층 memory/projects.md 각 프로젝트의 현재 상태와 할 일 인프라 계층 memory/infra.md 서버, API, 배포 설정 치트시트 교훈 계층 memory/lessons.md 겪은 함정, 심각도별 분류 로그 계층 memory/YYYY-MM-DD.md 일일 원본 기록(단, "결론을 기록")

기록 규칙

  • 로그: 그날 일어난 일을 memory/YYYY-MM-DD.md 에 기록, 형식 고정
  • 프로젝트 상태: 진척이 있으면 memory/projects.md
  • 교훈: 문제를 겪은 뒤 memory/lessons.md
  • MEMORY.md: 색인이 바뀔 때만 갱신하고 간결하게 유지

철칙

  • 과정이 아니라 결론을 기록한다
  • memorySearch를 위해 태그를 단다
  • 기억하고 싶으면 파일에 쓴다. "머릿속에 기억해 두기"를 기대하지 않는다

로그 형식은 이런 것을 쓰면 됩니다:

[PROJECT:이름] 제목

  • 결론: 한 문장 요약
  • 파일 변경: 관련된 파일
  • 교훈: 겪은 함정(있는 경우)
  • 태그: #tag1 #tag2

이 형식의 장점은 memorySearch 로 키워드를 검색할 때 적중이 더 집중되고 더 깔끔해진다는 점입니다.

4) 안전 경계: 해도 되는 일, 반드시 물어야 하는 일

"내부 vs 외부"를 분명히 그어 두는 것을 권합니다. 그러지 않으면 언젠가 사고가 납니다(특히 그룹 채팅과 자동화 작업).

Safety

  • Don't exfiltrate private data. Ever.
  • Don't run destructive commands without asking.
  • trash > rm (recoverable beats gone forever)
  • When in doubt, ask.

External vs Internal

Safe to do freely:

  • Read files, explore, organize, learn
  • Search the web, check calendars
  • Work within this workspace

Ask first:

  • Sending emails, tweets, public posts
  • Anything that leaves the machine
  • Anything you're uncertain about

Group Chats

You have access to your human's stuff. That doesn't mean you share it.
In groups, you're a participant — not their voice, not their proxy.

2. 기억 시스템 실전: AI가 진짜 "기억"하고 스스로 유지보수하게 만들기

다음 세 가지 전형적인 문제를 겪어 보셨을 것입니다:

  1. 오래 대화하다 갑자기 "기억을 잃는다"(대화가 압축되며 세부가 사라진다)
  2. 로그는 계속 늘어나는데 품질은 들쭉날쭉하고 검색 적중이 점점 운에 좌우된다
  3. 기억을 아무도 관리하지 않아 만료된 정보가 잡음으로 쌓인다

이 장에서 이 세 가지를 각각 해결합니다.

1) memoryFlush: 압축 전에 중요 정보를 파일로 먼저 기록

OpenClaw는 컨텍스트가 한계에 가까워지면 compaction(압축)을 발동합니다. 압축 자체는 정상이지만 압축은 세부를 잃을 수 있습니다.

해결책은 memoryFlush 를 켜서 압축 전에 먼저 디스크에 기록하게 하는 것입니다.

다음으로 openclaw.json 에 추가합니다(예시):

{
"agents": {
"defaults": {
"compaction": {
"reserveTokensFloor": 20000,
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000
}
}
}
}
}

권장값을 어떻게 이해하면 되는지 간단히 설명합니다:

  • reserveTokensFloor=20000: 압축 후에도 "최근 대화"를 최소한 일정 분량 유지
  • softThresholdTokens=4000: 남은 공간이 4000 token 미만일 때 flush 발동(너무 작으면 쓸 수 없고, 너무 크면 너무 자주 발동)

2) memorySearch 정확도 높이기: 로그 하나에 주제 하나

벡터 검색은 적게 쓰는 것을 두려워하지 않습니다. 오히려 "너무 뒤섞어 쓰는 것"을 더 두려워합니다.

경험상 적중률이 가장 높은 작성법은 다음과 같습니다:

  • 제목에 주제를 분명히 쓴다(nginx 리버스 프록시, IPv6, 포트 충돌 등)
  • 결론은 고정된 위치에 둔다
  • 태그로 동의어를 보강한다(#deploy #nginx #reverse-proxy)

비구조적인 "일기식" 기록은 유사도를 희석시켜 검색이 운에 좌우되게 만듭니다.

3) 주간 자동 유지보수: "기억 부패" 방지

예를 들어

AGENTS.md 에 "주간 유지보수" 작업을 추가합니다.HEARTBEAT.md 상태 파일로 빈도를 제어할 수 있습니다:

  • memory/heartbeat-state.json 에 지난 유지보수 날짜를 기록
  • 하트비트로 "지난 유지보수로부터 7일 이상 지났는지" 확인
  • 지났으면 실행: 추출, 압축, 정리, 날짜 갱신

유지보수 작업은 세 가지를 권합니다:

  • 추출: 장기적으로 유용한 것을 로 옮긴다projects.md / lessons.md
  • 압축: 일회성 작업을 긴 로그에서 한 줄 결론으로 압축
  • 정리: 완전히 만료된 정보(예: "내일 회의")

3. 하위 Agent: 한 사람이 작은 팀이 된다(병렬 + 컨텍스트 격리)

1) 하위 Agent는 무엇을 해결하는가?

메인 두뇌가 단일 스레드일 때의 문제는, 복잡한 작업이 들어오면 오래 끌거나 중간에 끼어들 수 없다는 점입니다.

하위 Agent의 가치는 주로 두 가지입니다:

  • 병렬화: 두 명의 조수에게 동시에 각각 다른 몫을 맡길 수 있다
  • 컨텍스트 격리: 하위 agent의 긴 작업이 메인 대화를 터뜨리지 않는다

2) 가장 빠지기 쉬운 함정: 하위 Agent는 기본이 "컨텍스트 제로"

하위 Agent는 메인 두뇌가 준 task 설명만 보기 때문에, task를 대충 쓰면 결과도 대충 나옵니다.

좋은 task 설명에는 최소한 다음이 포함됩니다:

  • 목표(무엇을 산출할지)
  • 파일 경로(무엇을 읽고 쓸지)
  • 제약(읽기 전용인가? 무엇을 바꾸면 안 되는가? 규범은 무엇인가?)
  • 완료 기준(무엇을 완료로 볼지)

task는 "똑똑하지만 낯선 동료"에게 쓰는 설명서라고 생각하세요. 구체적일수록 안정적입니다.

3) 동시 실행 권장: 하위 Agent 2개부터

한 번에 너무 많은 agent를 투입하면 API 속도 제한(429)이 쉽게 걸립니다. 경험상:

  • 일반 개인 요금제: 동시 2개가 가장 안정적
  • 한도가 큰 경우·로컬 모델: 3개까지 시도 가능
  • 4개 이상은 높은 확률로 429가 시작됩니다(특히 web 검색·도구 호출을 동반할 때)

4. Cron 작업: 분 단위로 정확한 자동화

1) Heartbeat vs Cron: 혼용하지 않기

  • Heartbeat: "겸사겸사 확인하는" 가벼운 작업에 적합(정밀도 낮음)
  • Cron: "몇 시 몇 분에 반드시 실행"하는 작업에 적합(분 단위 정확)

"매일 9:00에 조간 보고서 발송", "매주 월요일 10:00에 주간 보고서 발송"이라면 Cron이 더 적합합니다.

2) 가장 자주 쓰는 cron 표현식

  • 0 9 * * *: 매일 9:00
  • 0 9 * * 1: 매주 월요일 9:00
  • 0 9,18 * * *: 매일 9:00와 18:00
  • */30 * * * *: 30분마다

타임존 tz 는 반드시 설정하세요. 그렇지 않으면 기본이 UTC라 시간이 8시간 어긋납니다(UTC+8에서 가장 흔한 함정).

5. Skill 개발 입문: 쓸 만한 skill을 0에서 작성하기

1) skill이란 무엇인가?

본질적으로 "운영 매뉴얼(Markdown)"입니다.

OpenClaw는 각 skill의 description 를 시스템 프롬프트에 넣습니다. 사용자가 메시지를 보내면 어떤 skill이 발동될 수 있는지 매칭하고, 매칭되면 해당 SKILL.md 를 읽어 단계대로 실행합니다.

그래서 description 는 "우아하게 쓰기"가 아니라 "빠짐없이 쓰기"가 중요합니다.

2) SKILL.md 권장 구조

  • frontmatter(name/description)
  • 발동 후 첫 단계로 무엇을 하는지
  • 단계(실행 가능하고 재현 가능한 것이 좋음)
  • 출력 형식(고정 템플릿)
  • 오류 처리(반드시 작성)

3) 연습 제안: 먼저 IP 조회 skill을 작성

"IP 위치 조회" 같은 skill은 초보자 연습에 특히 적합합니다. 발동이 단순하고, 단계가 명확하고, 출력이 고정적이며, 오류 처리도 쉽습니다.

skill을 쓸 때의 원칙 하나: 먼저 손으로 흐름을 통과시킨 뒤, 그 흐름을 skill로 쓴다. 이 방식이 성공률이 가장 높습니다.

6. 다중 채널 연동: AI를 항상 온라인으로, 그러나 아무 말이나 하지 않게

다중 채널 연동의 핵심은 "많이 연결하는 것"이 아니라 두 가지입니다:

  1. 출처 제어:allowFrom 를 반드시 엄격히(서버/사용자/채널)
  2. 형식 적응: 플랫폼마다 Markdown 지원이 다름(특히 표)

Discord와 Telegram을 함께 쓴다면 AGENTS.md 에 "플랫폼별 형식 규칙"을 쓰는 것을 권합니다:

  • Discord: 표와 코드 블록 모두 문제없음
  • Telegram: 표가 불안정하니 목록으로 대체
  • WhatsApp: 사실상 순수 텍스트로 처리

7. 설정 치트시트: 자주 쓰는 파라미터를 더 안정적으로 조정하는 법

이 장에서는 제가 "효과가 뚜렷하다"고 보는 몇 가지 지점만 남깁니다. 시작부터 설정에 압도되지 않도록 하기 위해서입니다.

1) blockStreaming: 긴 답변을 마지막까지 기다리게 하지 않기

AI가 긴 답변을 나누어 보내게 하면 "실시간으로 타이핑하는" 느낌에 훨씬 가까워집니다.

권장:

  • blockStreamingDefault: "on"
  • minChars: 200 (너무 작으면 화면이 넘쳐 흐른다)
  • maxChars: 1500 (너무 크면 스트리밍의 의미가 없어진다)

2) ackReaction: 먼저 "받았습니다"라는 반응 주기

특히 Discord/Telegram 같은 즉시 메신저에서 중요합니다. 그러지 않으면 멈춘 줄 알게 됩니다.

3) compaction + memoryFlush: 아무리 오래 대화해도 핵심 정보를 최대한 잃지 않기

한 줄만 기억하면 됩니다: 압축 전에 파일로 먼저 쓴다. 이것이 memoryFlush 의 의미입니다.

4) Heartbeat activeHours: 한밤중에 방해하지 않기

하트비트 점검을 켰다면 activeHours 설정을 권합니다. 예를 들어 08:00–23:00입니다. 그러면 잠든 사이에 메시지를 보내지 않습니다.

마지막: 권장 설정 순서(시간 절약판)

한 번에 다 하기 어렵다면 이 우선순위대로 진행하는 것이 가장 안정적입니다:

  1. AGENTS.md: 시작 흐름 + 기억 규범 + 안전 경계
  2. memoryFlush 활성화(대화가 길어도 핵심을 잃기 어려움)
  3. ackReaction 설정(체감이 즉시 좋아짐)
  4. blockStreaming 켜기(긴 출력이 더 편해짐)
  5. Heartbeat에 activeHours 추가(방해하지 않음)
  6. 그다음 Cron, 하위 Agent, Skill, 다중 채널을 검토(필요에 따라)

글 내비게이션(선택)