OpenClaw 완벽 가이드 - 24시간 돌아가는 개인 AI 비서
요즘 개발자들 사이에서 OpenClaw가 화제다. GitHub 스타가 몇 주 만에 100,000개를 넘겼다. 대체 뭐길래 이렇게 난리인지 살펴봤다.
OpenClaw가 뭔가
한마디로 "Claude with hands" 다. 그냥 대화만 하는 ChatGPT 같은 챗봇이 아니라, 실제로 뭔가를 실행해주는 AI 에이전트 다.
WhatsApp이나 Telegram으로 "내일 일정 뭐 있어?"라고 물어보면 Google Calendar API 호출해서 알려준다. "테슬라 주가 5% 떨어지면 알려줘"라고 하면 조건 설정해두고 실제로 알림을 보내준다. 이메일 요약, 리마인더 설정, 심지어 터미널 명령 실행까지 가능하다.
원래 이름은 Clawdbot이었는데, Anthropic에서 "Claude"랑 너무 비슷하다고 상표권 요청을 해서 Moltbot으로 바뀌었다가, 최종적으로 OpenClaw로 정착했다.
설치는 간단하다
요구사항
- Node.js 22 이상
- Windows는 WSL2 필수
- Anthropic API 키 (또는 Claude Pro/Max 구독)
설치
npm install -g openclaw@latest
openclaw onboard --install-daemon
openclaw onboard 실행하면 설정 마법사가 뜬다. Anthropic API 키 입력하고, 연결할 채널(WhatsApp, Telegram, Discord 등) 선택하면 끝이다.
Docker로 설치하는 방법도 있다:
docker pull openclaw/openclaw:latest
docker run -it openclaw/openclaw onboard
Claude 구독으로 쓰기
Claude Pro나 Max 구독이 있으면 claude setup-token 으로 토큰 생성해서 API 비용 없이 쓸 수도 있다.
claude setup-token
생성된 토큰을 OpenClaw 설정에 입력하면 된다.
능동적으로 먼저 연락한다
일반 챗봇은 내가 말 걸어야 답한다. OpenClaw는 설정해두면 먼저 연락한다.
작동 방식은 크게 세 가지다.
1️⃣ Cron (정해진 시간)
"매일 아침 8시에 이메일 요약해줘" 같은 정해진 시간 작업이다.
{
"schedule": { "kind": "cron", "expr": "0 8 * * *" },
"payload": { "kind": "agentTurn", "message": "이메일 요약해줘" }
}
복잡한 설정 파일 만들 필요 없이, 채팅으로 "매일 아침 8시에 중요한 이메일 요약해서 알려줘"라고 말하면 알아서 설정해준다.
2️⃣ Heartbeat (주기적 체크)
30분마다 깨어나서 조건을 체크하고 임계값 넘으면 알려주는 방식이다.
workspace의 HEARTBEAT.md 파일에 체크리스트를 적어두면 주기적으로 확인한다:
# HEARTBEAT.md
- Gmail 미읽음 10개 이상이면 알림
- Calendar 오늘 일정 있으면 아침에 알림
- 서버 CPU 사용률 90% 넘으면 알림
3️⃣ Webhook (외부 이벤트)
GitHub PR 머지되면 알림, Stripe 결제 발생하면 알림 같은 외부 이벤트 트리거다.
curl -X POST http://localhost:18789/webhook \
-H "Content-Type: application/json" \
-d '{"event": "github.pr.merged", "pr": "#123"}'
Gateway가 모든 것을 연결한다
OpenClaw의 핵심은 Gateway 다. 모든 메시징 채널 연결을 유지하고, 메시지를 받아서 AI에게 전달하고, 응답을 다시 보내는 중앙 허브 역할을 한다.
Gateway는 WebSocket 데몬
Gateway는 ws://127.0.0.1:18789 에서 WebSocket 데몬으로 돌아간다. 백그라운드에서 24시간 실행되면서:
- WhatsApp, Telegram, Slack, Discord, iMessage 등 모든 채널 연결 동시 유지
- 세션 관리
- 스케줄링 (Cron, Heartbeat)
- 보안 인증
Gateway 관리 명령어
# 상태 확인
openclaw gateway status
# 재시작
openclaw gateway restart
# 설정 확인
openclaw gateway config.get
# 설정 업데이트
openclaw gateway config.patch --raw '{"key":"value"}'
메시지는 어떻게 받나
플랫폼마다 다른 방식으로 메시지를 수신한다.
공식 API가 아니라 WhatsApp Web 프로토콜을 리버스 엔지니어링한 Baileys 라이브러리 를 사용한다.
- QR 코드로 세션 연결
- Gateway가 WebSocket 연결 유지
- 실시간 메시지 수신
- 폰이 인터넷에 연결되어 있어야 함
- 브라우저에서 WhatsApp Web을 동시에 못 쓸 수 있음
Telegram
Bot API의 long polling 방식 이다.
- @BotFather로 봇 생성
- 토큰 발급
- Gateway가 주기적으로 새 메시지 가져옴
Slack
Bolt 라이브러리로 WebSocket 연결
- Socket Mode 사용
- 별도 서버 없이 WebSocket으로 이벤트 수신
Discord
discord.js로 Gateway WebSocket
- Discord Bot API
- 실시간 이벤트 수신
iMessage (macOS 전용)
imsg CLI를 통해 로컬 메시지 앱 접근
- macOS에서만 작동
- SMS 전송은 iPhone 연동 필요 ("문자 메시지 전달" 기능)
메시지는 누구 이름으로 보내나
이것도 플랫폼마다 다르다.
두 가지 방식:
- 전용 번호 등록: OpenClaw 전용 번호로 메시지 발송 (권장)
- 본인 번호 연결: 내가 보낸 것처럼 발송
전용 번호 방식이 깔끔해서 권장된다.
Telegram
@BotFather로 만든 봇 이름 으로 메시지 발송
"MyAssistantBot"으로 만들었으면 그 이름으로 표시된다.
Slack
만든 Slack App 이름 으로 발송
iMessage
본인 계정 으로 발송
보안: 기본 정책은 Pairing
기본 정책이 pairing이라서, 모르는 사람이 메시지를 보내면:
- 페어링 코드만 받음
- 관리자가 승인해야 처리됨
→ OpenClaw가 내 연락처에 무작위로 메시지 보내는 일은 없다.
대화 기억은 파일로 저장
OpenClaw가 대화를 기억하는 건 마법이 아니다. 그냥 마크다운 파일에 저장 하는 거다.
파일 구조
~/.openclaw/workspaces/<workspace>/
├── MEMORY.md # 장기 기억
├── memory/
│ ├── 2026-02-19.md # 오늘 대화
│ ├── 2026-02-18.md # 어제 대화
│ └── ...
MEMORY.md: 장기 기억 (중요한 정보 큐레이션)memory/YYYY-MM-DD.md: 날짜별 기록 (raw log)
작동 방식
- "이거 기억해줘"라고 하면 파일에 저장
- 나중에 관련 대화할 때 벡터 검색 으로 참조
- WhatsApp에서 대화하다가 Telegram에서 이어서 해도 같은 파일 참조 하니까 맥락 유지
예시
# MEMORY.md
## 프로젝트
- personal-blog: Next.js 기반 블로그, GitHub에 호스팅
- 블로그 관리 에이전트: blog-writer workspace 사용
## 선호사항
- 한국어 자연스러운 ~다 체어
- 기술 포스팅은 실용적으로
- PR 만들고 @frontalnh 리뷰 요청
터미널 권한은 어떻게 되나
OpenClaw가 터미널 명령을 실행할 때는 Gateway를 실행한 OS 사용자의 권한 그대로 실행 된다.
root로 Gateway 실행 →root권한- 일반 유저로 실행 → 해당 유저 권한
기본 설정의 위험성
기본 설정에서는 샌드박싱이 꺼져 있어서 승인 없이 바로 실행된다. 편하긴 한데 위험하다.
실제로 프롬프트 인젝션 공격 사례 가 있다:
- 누군가 OpenClaw가 접근 가능한 이메일 계정에 숨겨진 명령이 담긴 메일 전송
- OpenClaw는 그 명령을 따라 모든 이메일을 삭제 (휴지통까지)
- 이론이 아니라 실제로 일어난 일
권한 설정 3축
권한 설정은 세 가지 축으로 조절할 수 있다:
host: 실행 위치 (sandbox,gateway,node)security: 보안 모드 (deny,allowlist,full)ask: 승인 프롬프트 (off,on-miss,always)
승인 요청 설정
ask 옵션으로 명령 실행 전 승인을 받을 수 있다:
| 값 | 동작 |
|---|---|
off | 승인 없이 바로 실행 (기본값) |
on-miss | allowlist에 없는 명령만 승인 요청 |
always | 모든 명령 실행 전 승인 요청 |
실용적인 설정 예시
안전한 명령은 바로 실행, 그 외는 승인:
{
"agents": {
"defaults": {
"security": "allowlist",
"ask": "on-miss"
}
},
"allowedCommands": ["git", "npm", "curl", "ls", "cat"],
"blockedCommands": ["rm -rf", "sudo", "chmod"]
}
모든 명령 승인 필수:
{
"agents": {
"defaults": {
"ask": "always"
}
}
}
승인 요청은 연결된 메시징 채널(WhatsApp, Telegram 등)로 온다.
프롬프트 인젝션 방어
security: "allowlist" 모드에서는:
;,&&,||같은 명령어 체이닝 차단- 리다이렉션(
>,>>) 차단 - 프롬프트 인젝션으로 명령어 이어붙이는 공격 방어
Elevated 모드
sudo 같은 상위 권한이 필요하면:
/elevated on
세션별로 켤 수 있는데, 기본은 꺼져 있다.
보안은 신경 써야 한다
OpenClaw는 기본 설정에서 호스트에 풀 액세스 다. 터미널 명령 실행, 파일 읽기/쓰기 전부 가능하다. 이게 핵심 기능이자 동시에 위험 요소다.
실제 보안 사고 사례
보안 연구자들이 인터넷에 노출된 OpenClaw 게이트웨이를 1,600개 넘게 발견 했다는 보고도 있다. 자격 증명이 평문 파일로 저장되니까 설정을 꼭 해야 한다.
필수 보안 설정
1. root로 실행하지 말 것
전용 사용자를 만들어서 쓰는 게 좋다.
adduser openclaw
usermod -aG sudo openclaw
su - openclaw
2. 파일 권한 설정
chmod 700 ~/.openclaw
chmod 600 ~/.openclaw/config.json
openclaw security audit --fix
3. 그룹/채널은 샌드박스로
혼자 쓸 때는 괜찮아도, 다른 사람이 메시지 보낼 수 있는 그룹 에서는 Docker 샌드박스 안에서 실행되게 설정해야 한다.
{
"agents": {
"defaults": {
"sandbox": {
"mode": "non-main"
}
}
}
}
이렇게 하면:
- DM (main session): 풀 액세스
- 그룹 채널: 샌드박스 안에서만 실행
GitHub 연동: 봇 계정 설정
OpenClaw에게 GitHub 작업을 시키면서도 안전하게 권한을 분리하는 방법은 별도 봇 계정을 만드는 것 이다.
왜 봇 계정인가?
- PAT만으로는 부족: 본인 토큰으로 PR 만들면 본인이 approve 불가능
- GitHub App은 복잡: private key 관리, token 갱신 등
- 봇 계정이 정답: 간단하고 안전함
자세한 내용은 별도 가이드 참고: → OpenClaw GitHub 봇 계정 설정 가이드
멀티 에이전트 설정
용도별로 에이전트를 분리하고 싶을 때가 있다. 예를 들어 개인용과 업무용 을 나누거나, 프로젝트별로 다른 설정 을 쓰고 싶을 때다.
에이전트 추가
openclaw agents add work
openclaw agents list --bindings
설정 예시
~/.openclaw/openclaw.json:
{
"agents": {
"list": [
{
"id": "home",
"workspace": "~/.openclaw/workspace-home"
},
{
"id": "work",
"workspace": "~/.openclaw/workspace-work"
}
]
},
"bindings": [
{
"agentId": "home",
"match": { "channel": "whatsapp", "accountId": "personal" }
},
{
"agentId": "work",
"match": { "channel": "slack" }
}
]
}
작동 방식
- WhatsApp 개인 계정 →
home에이전트 처리 - Slack →
work에이전트 처리 - 각 에이전트는 독립된 workspace, MEMORY.md, 설정 보유
CLI에서 특정 에이전트와 대화
openclaw agent --agent work --message "오늘 일정 알려줘"
대시보드에서 에이전트 전환
멀티 에이전트 설정 후 대시보드에 "Agents" 메뉴가 나타난다.
주의: 에이전트가 하나뿐이면 메뉴가 안 보이니, 두 개 이상 설정해야 한다.
가격
OpenClaw 자체: 무료
OpenClaw는 MIT 라이선스 무료 오픈소스 다.
LLM API 비용
비용은 LLM API 사용료 에서 나온다:
- 가볍게 사용: 월 $10-30
- 많이 사용: 월 $70-150
Claude 구독 활용
Claude Max 구독($100/월)이 있으면 setup-token 방식으로 API 비용 없이 쓸 수 있다.
→ 많이 쓴다면 구독이 더 경제적일 수 있음
서버 비용
24시간 돌리려면 서버가 필요:
- 본인 PC 를 켜두거나
- VPS (DigitalOcean $6-12/월)
- Raspberry Pi 에서 돌리는 사람들도 있음
Claude 구독으로 쓸 때 주의점
Claude Pro나 Max 구독이 있으면 claude setup-token 으로 토큰을 생성해서 OpenClaw에 쓸 수 있다. 이렇게 하면 별도 API 비용이 안 든다.
기존 Claude Code와 충돌하지 않나?
아니다. 둘 다 쓸 수 있다.
setup-token은 별도의 long-lived 토큰 생성- 기존 Claude Code 세션을 로그아웃시키거나 무효화하지 않음
OAuth Refresh Token 충돌
다만 주의할 점이 있다. OAuth refresh token이 일회용 이라서 토큰 갱신 시 충돌이 생길 수 있다.
- Claude Code가 토큰 갱신 → OpenClaw의 기존 refresh token 무효화
- 또는 그 반대
해결 방법
갑자기 OpenClaw 인증이 안 되면:
claude setup-token다시 실행해서 새 토큰 발급- OpenClaw gateway 재시작
claude setup-token
openclaw gateway restart
자주 발생하는 문제는 아니지만, 인증 오류 시 이걸 의심해볼 수 있다.
써볼 만한가
솔직히 설정하고 관리하는 데 손이 좀 간다. 토큰 갱신 문제도 가끔 생기고, 보안 설정도 직접 해야 한다.
추천하는 경우
- "아침마다 이메일 요약해서 WhatsApp으로 보내줘"
- "서버 죽으면 바로 알려줘"
- "매일 저녁 GitHub PR 요약해줘"
같은 자동화가 필요 하다면 써볼 만하다.
OpenClaw의 강점
ChatGPT처럼 브라우저 탭에서만 사는 AI 가 아니라, 실제로 내 시스템에서 일을 처리해주는 에이전트 를 원한다면 현재로선 가장 완성도 높은 오픈소스 옵션 이다.
설정 동기화
OpenClaw 설정을 GitHub에 백업해두면 설정을 잃어버릴 걱정이 없다.
에이전트에게 자동 동기화 맡기기
OpenClaw 에이전트에게 이렇게 말하면 된다:
너의 openclaw 설정은 항상 https://github.com/yourname/openclaw-config 와 동기화 되어 있어야 해. 설정이 변경되면 여기 main 브랜치로 pr 올려.
에이전트가 알아서:
- 설정 파일 변경 감지
- GitHub 레포에 PR 생성
- 변경 사항 커밋
장점:
- 설정 백업 자동화
- 변경 이력 추적
- 다른 기기에서 설정 복원 가능
- 팀과 설정 공유 가능
주의:
- Private 레포 사용 권장 (보안 정보 포함)
- API 키 같은 민감 정보는 환경변수 사용