Mac mini에 OpenClaw 설치부터 Discord 연동까지
Mac mini에 OpenClaw를 설치하고, launchd 데몬, Discord 연동, Browser Relay까지 구성하여 24/7 자동화 런타임을 만드는 과정을 정리합니다.
왜 Mac mini + OpenClaw인가
Mac mini + OpenClaw 조합은 OpenClaw는 에이전트를 상시 실행 상태로 저전력의 홈서버로 개인 AI에이전트를 만들 수 있습니다.
특히, OCI와 달리 브라우저 릴레이 (Browser Relay) 기능을 쓸 수 있는 것이 장점입니다.
이 글에서 만드는 상태
이 포스팅이 끝나면 다음 환경이 완성됩니다.
- Mac mini에서 OpenClaw Gateway 상시 실행 (launchd 데몬)
- macOS 절전 방지 설정 완료
- Discord 봇 연결 및 페어링
- Browser Relay 설정 (웹 크롤링 준비)
- 24/7 자동화 런타임 기반 완성
다음 글에서 이 환경 위에 항공권 가격 트래커를 올려 OpenClaw를 어떻게 사용했는지를 알아봅니다.
1. OpenClaw 설치
macOS(arm64) 기준입니다.
# OpenClaw 설치
curl -fsSL https://openclaw.ai/install.sh | bash
# 설치 확인
openclaw --version
설치 완료 후 onboard를 실행합니다. --install-daemon 옵션을 추가하면 launchd 데몬까지 자동으로 설정됩니다.
openclaw onboard --install-daemon
onboard 마법사에서 다음을 설정합니다:
- Model/auth provider: Anthropic 선택 → setup-token 인증 (혹은 구독 중인 서비스의 모델을 선택합니다.)
- Channel: Discord 선택 (아래에서 상세 설명)
- Daemon: 자동 설치
# 설치 후 상태 확인
openclaw status
openclaw gateway status
2. macOS 절전 방지 설정
Mac mini를 서버로 쓰려면 절전 모드를 반드시 꺼야 합니다. 절전에 들어가면 크론 잡이 멈추고, Discord 봇도 오프라인이 됩니다.
pmset으로 영구 설정 (권장)
sudo pmset -a sleep 0 displaysleep 0 disksleep 0 womp 1 autorestart 1 ttyskeepawake 1
| 옵션 | 값 | 설명 |
|---|---|---|
sleep 0 | 0 | 시스템 절전 비활성화 |
displaysleep 0 | 0 | 디스플레이 절전 비활성화 |
disksleep 0 | 0 | 디스크 스핀다운 비활성화 |
womp 1 | 1 | Wake on LAN 활성화 |
autorestart 1 | 1 | 정전 후 자동 재시작 |
ttyskeepawake 1 | 1 | 원격 세션 중 절전 방지 |
설정 확인:
pmset -g # 현재 전원 설정 확인
pmset -g assertions # 활성화된 절전 방지 assertions 확인

caffeinate 병행 (M4 Mac mini 권장)
M4 Mac mini에서는 pmset 설정에도 불구하고 며칠 후 절전에 들어가는 사례가 보고되고 있습니다.
caffeinate을 launchd로 항상 실행하거나, Amphetamine 앱을 설치하여 “Indefinitely” 세션을 유지하는 것을 권장합니다.
# 임시 절전 방지 (터미널이 열려있는 동안)
caffeinate -s &
# 특정 프로세스가 살아있는 동안만 절전 방지
caffeinate -w <PID>
GUI 설정 (macOS Ventura 이후)
System Settings > Energy 에서:
- “Prevent automatic sleeping when the display is off” → 활성화
- “Put hard disks to sleep when possible” → 비활성화
- “Wake for network access” → 활성화
3. launchd 데몬 설정
openclaw onboard --install-daemon을 실행하면 자동으로 plist 파일이 생성됩니다.
수동으로 설정해야 하는 경우 아래를 참고하세요.
plist 파일 직접 작성
~/Library/LaunchAgents/com.openclaw.gateway.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.openclaw.gateway</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/openclaw</string>
<string>gateway</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/YOUR_USERNAME/.openclaw</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin</string>
<key>HOME</key>
<string>/Users/YOUR_USERNAME</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/YOUR_USERNAME/.openclaw/logs/gateway.stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/YOUR_USERNAME/.openclaw/logs/gateway.stderr.log</string>
<key>ThrottleInterval</key>
<integer>10</integer>
</dict>
</plist>
| 키 | 설명 |
|---|---|
RunAtLoad | 로그인 시 자동 실행 |
KeepAlive | 크래시 시 자동 재시작 |
ThrottleInterval | 재시작 간 최소 대기 시간(초) |
서비스 관리 명령어
# 로그 디렉토리 생성 (수동 설치 시)
mkdir -p ~/.openclaw/logs
# 서비스 로드 (등록 + 시작)
launchctl load ~/Library/LaunchAgents/com.openclaw.gateway.plist
# 서비스 언로드 (중지 + 해제)
launchctl unload ~/Library/LaunchAgents/com.openclaw.gateway.plist
OpenClaw 내장 명령어로도 관리할 수 있습니다:
openclaw gateway status # 상태 확인
openclaw gateway start # 시작
openclaw gateway stop # 중지
openclaw gateway restart # 재시작
openclaw doctor # 전체 진단

주의:
openclaw gateway stop은 내부적으로launchctl bootout을 사용하여 서비스를 완전히 해제합니다. 다시 시작하려면launchctl load로 재등록하거나openclaw gateway start를 사용하세요.
4. Discord 봇 연동
Discord 봇을 처음 만들어보는 분은 10분만에 디스코드 봇 제작하기 글을 먼저 참고하면 이해가 쉽습니다.
Step 1: Discord Application 생성
- Discord Developer Portal에 접속
- New Application 클릭, 이름 입력 (예: “OpenClaw Agent”)
- 사이드바에서 Bot 클릭
Step 2: Privileged Gateway Intents 활성화
Bot 페이지의 Privileged Gateway Intents 섹션에서 다음을 활성화합니다:
- Message Content Intent — 필수 (메시지 텍스트 읽기)
- Server Members Intent — 권장 (멤버 조회)
이 설정을 빠뜨리면 Error 4014가 발생합니다.
Step 3: Bot Token 발급
Bot 페이지에서 Reset Token 클릭 → 토큰 복사. 이 토큰은 비밀번호처럼 취급해야 합니다.
Step 4: 봇 초대
사이드바 OAuth2 > URL Generator에서:
Scopes: bot, applications.commands
Bot Permissions:
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
생성된 URL을 브라우저에 붙여넣고 서버를 선택하여 봇을 초대합니다.
Step 5: OpenClaw에 토큰 설정
# 봇 토큰 설정
openclaw config set channels.discord.token '"YOUR_BOT_TOKEN"' --json
# Discord 채널 활성화
openclaw config set channels.discord.enabled true --json
# Gateway 재시작
openclaw gateway restart
Step 6: 페어링
Gateway가 실행된 상태에서:
- Discord에서 봇에게 DM을 보냅니다
- 봇이 페어링 코드로 응답합니다 (1시간 내 만료)
- 터미널에서 승인합니다:
# 페어링 승인
openclaw pairing approve discord <CODE>
Step 7: 서버 채널 설정
DM이 작동하면, 서버 채널에서도 봇이 응답하도록 설정할 수 있습니다.
~/.openclaw/openclaw.json에서 Discord 설정:
{
channels: {
discord: {
enabled: true,
token: "YOUR_BOT_TOKEN",
dmPolicy: "pairing",
groupPolicy: "allowlist",
guilds: {
"SERVER_ID": {
requireMention: false,
users: ["YOUR_USER_ID"],
channels: {
"general": { "allow": true },
"agent-work": { "allow": true }
}
}
}
}
}
}
Developer Mode 활성화: Discord 클라이언트에서 User Settings > Advanced > Developer Mode를 켜면 서버/채널/유저 ID를 우클릭으로 복사할 수 있습니다.
문제 해결
| 증상 | 원인 | 해결 |
|---|---|---|
| Error 4014 | Message Content Intent 미활성화 | Developer Portal에서 활성화 |
| 봇 무응답 | Gateway 미실행 | openclaw gateway status 확인 |
| Missing Access (50001) | 채널 권한 부족 | 채널 permission에 봇 추가 |
| Guild 메시지 차단 | groupPolicy 미설정 | allowlist에 서버 ID 추가 |
Step 5 부터 Step 7까지는 openclaw onboard에서 손 쉽게 설정할 수 있습니다. 아니면 openclaw tui를 이용해서 openclaw에서 설정을 요청해도 됩니다.
# 디버깅 명령어
openclaw doctor
openclaw channels status --probe
openclaw logs --follow
5. Browser Relay 설정
OpenClaw Browser Relay는 AI 에이전트가 실제 웹 브라우저를 제어할 수 있게 합니다. 항공권 크롤링 같은 자동화에 필수적입니다.
브라우저 모드
| 모드 | 설명 | 사용 시나리오 |
|---|---|---|
| Managed | 격리된 전용 Chromium 인스턴스 | 자동화, 크롤링 (권장) |
| Extension Relay | 기존 Chrome 탭 제어 | 로그인된 세션 활용 |
| Remote CDP | 원격 브라우저 연결 | 클라우드/분산 배포 |
기본 설정
~/.openclaw/openclaw.json:
{
browser: {
enabled: true,
defaultProfile: "openclaw",
headless: true, // 서버 환경에서는 true 권장
profiles: {
openclaw: {
cdpPort: 18800
}
}
}
}
headless 모드: Mac mini를 모니터 없이 서버로 운영할 때는
headless: true로 설정합니다.
Chrome Extension 설치 (Extension Relay)
로그인된 세션을 그대로 활용하려면 Extension Relay 모드를 사용합니다. Chrome 웹 스토어에서 OpenClaw Browser Connector 익스텐션을 설치해야 합니다.
- Chrome에서 OpenClaw Browser Connector 설치
- 익스텐션 아이콘 클릭 → Connect 버튼
- Gateway가 실행 중이면 자동으로 연결됩니다
# 연결 상태 확인
openclaw browser ext-status
Managed 모드와 차이: Managed 모드는 격리된 Chromium을 새로 띄우므로 로그인 세션이 없습니다. 네이버/구글 등 로그인이 필요한 페이지를 크롤링하려면 Extension Relay가 편리합니다.
브라우저 제어 명령어
# 브라우저 시작
openclaw browser --browser-profile openclaw start
# 상태 확인
openclaw browser --browser-profile openclaw status
# URL 열기
openclaw browser --browser-profile openclaw open https://example.com
# 페이지 스냅샷 (AI가 페이지 분석)
openclaw browser snapshot
# 스크린샷
openclaw browser screenshot --full-page
# 탭 관리
openclaw browser tabs # 탭 목록
openclaw browser tab new # 새 탭
openclaw browser tab close 2 # 탭 닫기
보안 설정
# 내부 네트워크 접근 차단 (보안)
openclaw config set browser.ssrfPolicy.dangerouslyAllowPrivateNetwork false
중요: 포트 18789-18899를 공인 인터넷에 절대 노출하지 마세요. 원격 접근이 필요하면 Tailscale 같은 VPN을 사용하세요.
핵심 요약
| 항목 | 설정 |
|---|---|
| 절전 방지 | pmset -a sleep 0 + caffeinate 병행 |
| 자동 실행 | launchd 데몬 (RunAtLoad + KeepAlive) |
| 알림 채널 | Discord 봇 (페어링 + Guild 설정) |
| 브라우저 | Browser Relay (Managed + headless) |
| 진단 | openclaw doctor / openclaw logs |
- Mac mini는 24/7 작업용으로 안정적입니다.
- 절전/권한/타임아웃을 초반에 잡아두어야 지속적인 운영이 가능합니다.