심화편 목차
설치 완전 가이드 — npm · Script · Docker · ClawDock
📊 설치 방법 비교 — 어떤 방법을 써야 하는가
| 방법 | 난이도 | 권장 환경 | 장점 | 단점 |
|---|---|---|---|---|
| install.sh 원라이너 | 가장 쉬움 | 개인 macOS/Linux | Node.js 자동 설치, 온보딩 자동 실행 | 커스터마이징 제한 |
| npm -g 설치 | 쉬움 | Node.js 이미 있는 개발자 | 빠름, 버전 관리 용이 | Node.js 사전 설치 필요 |
| install-cli.sh | 보통 | 시스템 Node.js를 건드리기 싫을 때 | ~/.openclaw 아래 격리 설치 | PATH 설정 필요 |
| Git 소스 설치 | 보통 | 소스 수정·기여자 | 최신 코드, 직접 수정 가능 | pnpm 필요, 빌드 필요 |
| Docker (표준) | 보통 | 서버·VPS·격리 환경 | 환경 격리, 쉬운 이전 | 설정 복잡도 높음 |
| ClawDock | 쉬움 | Docker 초보자 | setup.sh 한 번으로 완성 | Git repo 클론 필요 |
🐳 Docker 설치 — 완전 단계별 가이드
본인 PC에서 개발 목적으로 사용한다면 Docker가 오히려 번거롭습니다. VPS, 홈 서버, Raspberry Pi처럼 격리된 환경에서 24시간 운영하거나, 다른 서비스와 함께 Docker Compose로 관리하고 싶을 때 Docker가 진가를 발휘합니다.
docker --version && docker compose version으로 확인git clone https://github.com/openclaw/openclaw.git && cd openclaw./scripts/docker/setup.sh — 빌드, 온보딩, Gateway 시작을 모두 자동으로 처리합니다http://127.0.0.1:18789/ 접속 → .env의 토큰 입력 → 설정 완료docker compose run --rm openclaw-cli channels login (WhatsApp QR)# ── 사전 준비 ──────────────────────────────────────── # Docker가 없다면 설치 curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER newgrp docker # Docker Compose 버전 확인 (v2 이상 필요) docker compose version # ── 저장소 클론 ────────────────────────────────────── git clone https://github.com/openclaw/openclaw.git cd openclaw # ── 방법 A: setup.sh 자동 설치 (권장) ─────────────── # 빌드 + 온보딩 + Gateway 시작을 한 번에 ./scripts/docker/setup.sh # 사전 빌드 이미지 사용 (빌드 시간 절약) export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest" ./scripts/docker/setup.sh # ── 방법 B: 수동 설치 (각 단계 제어) ──────────────── # 1. 이미지 빌드 docker build -t openclaw:local -f Dockerfile . # 2. 온보딩 실행 (Gateway 없이) docker compose run --rm --no-deps --entrypoint node openclaw-gateway \ dist/index.js onboard --mode local --no-install-daemon # 3. Gateway 시작 docker compose up -d openclaw-gateway # ── 채널 연결 ────────────────────────────────────── # WhatsApp (QR 스캔) docker compose run --rm openclaw-cli channels login # Telegram docker compose run --rm openclaw-cli channels add \ --channel telegram --token "YOUR_BOT_TOKEN" # Discord docker compose run --rm openclaw-cli channels add \ --channel discord --token "YOUR_BOT_TOKEN" # ── 상태 확인 ────────────────────────────────────── docker compose ps docker compose logs -f openclaw-gateway # ── Control UI URL 확인 ──────────────────────────── docker compose run --rm openclaw-cli dashboard --no-open
📋 Docker Compose 파일 완전 해설
services:
openclaw-gateway:
image: ghcr.io/openclaw/openclaw:latest # 또는 openclaw:local (자체 빌드)
container_name: openclaw
restart: unless-stopped # 서버 재시작 시 자동 복구
ports:
- "18789:18789" # Control UI + WebSocket 포트
# 외부 공개 시: "127.0.0.1:18789:18789" (localhost만 바인딩)
volumes:
# 설정 파일 영속화 (컨테이너 삭제해도 유지)
- openclaw_data:/root/.openclaw
# 워크스페이스 (파일 읽기/쓰기 작업 기본 경로)
- openclaw_workspace:/workspace
# 호스트 특정 폴더 마운트 (AI가 접근할 파일)
- /home/user/documents:/workspace/documents:ro # 읽기 전용
- /home/user/downloads:/workspace/downloads # 읽기/쓰기
environment:
# Gateway 포트 (기본 18789)
- OPENCLAW_GATEWAY_PORT=18789
# 상태 디렉토리 오버라이드 (선택)
# - OPENCLAW_STATE_DIR=/root/.openclaw
# 설정 파일 경로 오버라이드 (선택)
# - OPENCLAW_CONFIG_PATH=/root/.openclaw/openclaw.json
env_file:
- .env # API 키, 토큰 등 시크릿 관리
# CLI 컨테이너 (관리 명령 실행용 — 평소엔 내려가 있음)
openclaw-cli:
image: ghcr.io/openclaw/openclaw:latest
profiles: ["cli"] # docker compose --profile cli run
volumes:
- openclaw_data:/root/.openclaw
entrypoint: ["openclaw"]
volumes:
openclaw_data:
openclaw_workspace:📄 .env 파일 완전 템플릿
# ── Gateway 인증 토큰 ───────────────────────────────── # setup.sh가 자동 생성. 수동 설정 시 충분히 긴 랜덤 문자열 사용 OPENCLAW_GATEWAY_TOKEN=your_secure_token_here # ── AI 모델 API 키 ──────────────────────────────────── ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxx OPENAI_API_KEY=sk-xxxxxxxxxxxxx GOOGLE_API_KEY=AIzaxxxxxxxxxxxxx GROQ_API_KEY=gsk_xxxxxxxxxxxxx # ── 채널 토큰 ───────────────────────────────────────── TELEGRAM_BOT_TOKEN=1234567890:AAFxxxxxxxxxxxxxxxx DISCORD_BOT_TOKEN=MTxxxxxxxxxxxxxxxxxxxxxxxx # ── 기타 서비스 ─────────────────────────────────────── BRAVE_SEARCH_API_KEY=BSAxxxxxxxxxxx # 웹 검색 (선택) ELEVENLABS_API_KEY=sk_xxxxxxxxxxxx # TTS (선택) GITHUB_TOKEN=ghp_xxxxxxxxxxxx # GitHub 연동 (선택)
🦞 ClawDock — 가장 간단한 Docker 설치법
ClawDock은 공식 Docker 설치 헬퍼입니다. setup.sh 하나로 모든 것을 처리합니다.
# 저장소 클론 git clone https://github.com/openclaw/openclaw.git cd openclaw # ClawDock 설치 (프리빌드 이미지 사용 → 빠름) export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest" ./scripts/docker/setup.sh # 이후 관리 명령어 docker compose restart openclaw-gateway # 재시작 docker compose logs -f openclaw-gateway # 로그 docker compose run --rm openclaw-cli status # 상태 확인 docker compose run --rm openclaw-cli update # 업데이트
🥧 Raspberry Pi / 홈랩 서버 — 24시간 운영 설정
# Node.js 24 설치 (ARM64 포함) curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash - sudo apt install -y nodejs # OpenClaw 설치 + 데몬 등록 (재부팅 시 자동 시작) npm install -g openclaw openclaw onboard --install-daemon # 데몬 상태 확인 systemctl status openclaw-gateway # 외부 접근을 위해 Gateway 바인딩 주소 변경 openclaw config set gateway.bind "lan" openclaw gateway restart # 방화벽 설정 (내부 네트워크만 허용) sudo ufw allow from 192.168.1.0/24 to any port 18789 sudo ufw deny 18789
단계별 온보딩 완전 정복 — 모든 옵션 해설
온보딩 마법사는 단순히 API Key를 입력하는 것 이상입니다. 에이전트 이름, 워크스페이스, Gateway 모드, 채널 연결, 데몬 등록까지 처음 환경을 완전히 구성합니다. 모든 옵션을 이해해야 최적의 환경을 만들 수 있습니다.
⚙️ onboard 명령어 플래그 완전 해설
| 플래그 | 의미 | 사용 예시 |
|---|---|---|
--install-daemon | 시스템 데몬으로 등록 (재부팅 시 자동 시작) | 서버·항상켜진 PC에 필수 |
--no-install-daemon | 데몬 등록 안 함 (수동 시작) | 테스트 환경, Docker 내부 |
--mode local | 로컬 전용 모드 (127.0.0.1 바인딩) | 개인 PC, 보안 최우선 |
--mode lan | LAN 공개 모드 (0.0.0.0 바인딩) | 홈 서버, 내부망 공유 |
--no-onboard | 온보딩 없이 설치만 | CI/CD, 자동화 스크립트 |
--yes | 모든 프롬프트에 자동 yes | 무인 설치 |
--token TEXT | Gateway 토큰 사전 지정 | 자동화 배포 |
--provider anthropic | AI 공급자 사전 지정 | 특정 공급자만 사용할 때 |
# ── 개인 PC (가장 일반적) ───────────────────────────── openclaw onboard --install-daemon # 데몬 등록 + 모든 설정을 대화식으로 진행 # ── 홈 서버 / Raspberry Pi ─────────────────────────── openclaw onboard --install-daemon --mode lan # 데몬 등록 + LAN 전체 접근 허용 (내부망 공유) # ── Docker 컨테이너 내부 ───────────────────────────── openclaw onboard --mode local --no-install-daemon # 데몬 등록 없음 (Docker가 프로세스 관리) # ── 무인 자동 설치 (CI/CD) ─────────────────────────── ANTHROPIC_API_KEY=sk-ant-xxx openclaw onboard \ --yes \ --no-install-daemon \ --provider anthropic \ --token "$(openssl rand -hex 32)" # ── 온보딩 재실행 (재설정) ─────────────────────────── openclaw configure # 전체 마법사 재실행 (기존 설정 유지하면서 변경)
🧙 온보딩 마법사 각 단계 상세 해설
openclaw config set agents.defaults.name "새이름"으로 변경 가능합니다.~/.openclaw/workspace. Obsidian 볼트 경로, Documents 폴더, 프로젝트 루트 등을 지정하면 AI가 해당 파일에 직접 접근합니다. 나중에 세션 중 경로를 변경할 수도 있습니다.🔄 온보딩 이후 추가 설정 명령어
# 워크스페이스 경로 변경 openclaw config set agents.defaults.workspace "~/Documents/AI-Workspace" # 에이전트 이름 변경 openclaw config set agents.defaults.name "Jarvis" # 기본 모델 변경 openclaw config set agents.defaults.model "anthropic/claude-sonnet-4-5" # Heartbeat 활성화 (30분마다 AI 능동 점검) openclaw config set agents.defaults.heartbeat.every "30m" openclaw config set agents.defaults.heartbeat.prompt \ "현재 시간과 중요한 알림이 있는지 확인하고 필요하면 연락하세요." # 도구 활성화 설정 openclaw config set tools.exec.enabled true openclaw config set tools.browser.enabled true openclaw config set tools.web_search.enabled true # 설정 확인 openclaw config get agents.defaults cat ~/.openclaw/openclaw.json
Control UI 완전 정복 — 전체 메뉴 설정 가이드
Control UI는 http://127.0.0.1:18789/에서 접근하는 OpenClaw의 웹 인터페이스입니다. 단순한 채팅 창을 넘어 Gateway 설정, 채널 관리, 플러그인 설치, 스킬 관리, 자동화 설정까지 모두 담당합니다.
🔑 최초 접속 — 페어링 승인 프로세스
http://127.0.0.1:18789/ 또는 http://localhost:18789/openclaw devices list → openclaw devices approve <requestId>💬 Chat 탭 — 메인 대화 인터페이스 완전 가이드
| 기능 | 위치 | 설명 |
|---|---|---|
| 메시지 입력 | 하단 텍스트 박스 | Enter 전송, Shift+Enter 줄바꿈. 파일 드래그&드롭으로 첨부 가능 |
| 이미지 첨부 | 첨부 버튼 (클립) | Vision 모델이 활성화된 경우 이미지 분석 가능 |
| 음성 입력 | 마이크 버튼 | 브라우저 내장 STT 사용. 말하기 → 자동 텍스트 변환 후 전송 |
| 모델 선택 | 입력창 상단 | 현재 세션에서 사용할 모델 변경. 세션 중 모델 전환 가능 |
| 슬래시 명령 | / 입력 | /status, /skills, /help 등. 스킬에서 정의한 커스텀 명령도 가능 |
| 대화 기록 | 왼쪽 사이드바 | 이전 대화 목록. 세션 검색·삭제·이름 변경 가능 |
| 도구 카드 | 메시지 내 인라인 | AI가 도구 사용 시 실행 내용이 접을 수 있는 카드로 표시됨 |
| Thinking 표시 | 메시지 상단 | Extended Thinking 활성화 시 AI의 추론 과정 표시 (Claude 전용) |
| 재생성 | 메시지 우클릭 | 마지막 응답 다시 생성. 다른 모델로 재시도 가능 |
⚙️ Config 탭 — Gateway 설정 GUI 완전 가이드
Config 탭은 openclaw.json을 직접 편집하지 않고 GUI 폼으로 설정하는 곳입니다. 라이브 스키마에서 폼을 자동 생성하므로 항상 최신 설정 옵션을 보여줍니다.
| Config 섹션 | 주요 설정 항목 | 설명 |
|---|---|---|
| Agents → defaults | name, model, workspace, heartbeat | 에이전트 기본 설정. 이름·기본 모델·워크스페이스·Heartbeat 주기 |
| Gateway | port, host, bind, authToken, controlUi | Gateway 수신 주소·포트·인증·Control UI 설정 |
| Channels | 채널별 설정 | Telegram/WhatsApp/Discord 등 채널 토큰·접근 제어·그룹 설정 |
| Model | default, failover, routing | 기본 모델·장애 조치 목록·작업 유형별 라우팅 |
| Tools | exec, browser, web_search 등 | 도구별 활성화/비활성화·허용/차단 목록 |
| Plugins | entries | 설치된 플러그인별 설정. API 키·옵션 |
| Automation | heartbeat, standing_orders, cron | 자동화 관련 전체 설정 |
| Sandbox | backend, allowedCommands | 코드 실행 격리 설정 |
GUI 폼으로 설정하기 어려운 복잡한 설정은 Config 탭 하단의 “Raw JSON” 버튼을 클릭해 직접 JSON을 편집할 수 있습니다. 저장 시 스키마 검증이 자동으로 실행되어 잘못된 설정을 방지합니다. 저장하면 Gateway가 즉시 hot reload합니다.
📡 Channels 탭 — 채널 관리 완전 가이드
| 기능 | 설명 |
|---|---|
| 채널 목록 | 현재 등록된 모든 채널과 연결 상태(초록/빨강) 표시 |
| 채널 추가 | “Add Channel” 버튼 → 채널 유형 선택 → 토큰/QR 설정 |
| 채널 상태 확인 | 각 채널 카드의 Last seen, 메시지 수, 연결 시간 확인 |
| 페어링 관리 | 허용된 사용자 목록 확인, 차단, 추가 |
| QR 재스캔 | WhatsApp 세션 만료 시 QR 코드 재생성 |
| 채널 삭제 | 채널 카드의 ⋮ 메뉴 → Remove |
| 채널 라우팅 | 어떤 채널의 메시지를 어떤 에이전트가 처리할지 설정 |
🧩 Plugins 탭 — 플러그인 설치 & 관리
| 플러그인 | 패키지명 | 기능 | 설정 필요 |
|---|---|---|---|
@openclaw/whatsapp | WhatsApp 채널 연결 | QR 스캔 | |
| Claude Max Proxy | @openclaw/claude-max-proxy | Claude Max 구독 API 활용 | Claude.ai 로그인 |
| Memory Wiki | @openclaw/memory-wiki | 마크다운 기반 영속 메모리 | 없음 |
| Memory LanceDB | @openclaw/memory-lancedb | 벡터 DB 기반 의미 검색 메모리 | 없음 |
| Codex Harness | @openclaw/codex-harness | Claude Code/Codex 원격 제어 | Claude Code 설치 |
| Codex Computer Use | @openclaw/codex-computer-use | 화면 캡처·마우스·키보드 제어 | 화면 접근 권한 |
| Webhooks | @openclaw/webhooks | 외부 서비스 웹훅 수신 | URL 설정 |
| Voice Call | @openclaw/voice-call | 음성 전화 (Twilio/Plivo) | Twilio API Key |
| Google Meet | @openclaw/google-meet | Google Meet 음성 참여·기록 | Google OAuth |
| Skill Workshop | @openclaw/skill-workshop | 스킬 개발·테스트 도우미 | 없음 |
# 플러그인 설치 openclaw plugins install @openclaw/memory-wiki openclaw plugins install @openclaw/webhooks openclaw plugins install @openclaw/codex-harness # 설치된 플러그인 목록 openclaw plugins list # 플러그인 업데이트 openclaw plugins update @openclaw/memory-wiki # 플러그인 제거 openclaw plugins remove @openclaw/memory-wiki # 커뮤니티 플러그인 검색 (ClawHub) openclaw plugins search "notion" openclaw plugins search "calendar"
📝 Skills 탭 — 스킬 관리 완전 가이드
| 기능 | 설명 |
|---|---|
| 스킬 목록 | 활성화된 모든 스킬 표시. 이름·버전·마지막 실행 시간 |
| 스킬 활성화/비활성화 | 토글 스위치로 즉시 on/off. Gateway hot reload 불필요 |
| 스킬 편집 | 내장 마크다운 에디터로 SKILL.md 직접 편집. 저장 즉시 반영 |
| 스킬 생성 | “New Skill” → 템플릿 선택 → 에디터에서 작성 |
| 스킬 디버그 | 선택 스킬을 채팅에서 테스트 실행 |
| ClawHub 탐색 | 커뮤니티 스킬 검색·설치. clawhub.ai 연동 |
🎨 Appearance 탭 — 테마 & UI 커스터마이징
Control UI는 4가지 테마를 지원하며 tweakcn을 통해 완전히 커스텀 테마를 가져올 수 있습니다.
| 설정 | 옵션 | 설명 |
|---|---|---|
| 기본 테마 | Claw · Knot · Dash | 기본 제공 3가지 테마. Claw가 기본값 |
| 커스텀 테마 | tweakcn URL 붙여넣기 | tweakcn.com에서 만든 테마 가져오기 |
| 텍스트 크기 | 슬라이더 | 채팅·도구 카드·사이드바 텍스트 크기. 모바일 자동 줌 방지 |
| 언어 | 19개 언어 | 한국어(ko) 포함. Gateway Access 카드에서 변경 |
| 에이전트 아바타 | 이미지 업로드 | 채팅창의 AI 아바타 이미지. 브라우저 로컬 저장 |
| 개인 ID | 이름·아바타 | 공유 세션에서 발신자 표시 이름. 브라우저 로컬 저장 |
🔒 Overview → Gateway Access 탭 — 보안 설정
| 항목 | 설명 |
|---|---|
| Gateway URL | 현재 연결된 Gateway 주소 표시. 원격 Gateway 주소 변경 가능 |
| 인증 방식 | Token(권장) / Password. 현재 세션 토큰 표시 |
| 언어 설정 | Control UI 표시 언어 변경 (여기서만 변경 가능) |
| 기기 목록 | 페어링된 모든 기기 표시. 기기별 접근 취소 가능 |
| 토큰 재발급 | 기존 토큰 무효화 + 신규 발급. 모든 연결 기기 재승인 필요 |
📊 Automation 탭 — 스케줄·자동화 관리 UI
| 기능 | 설명 |
|---|---|
| Cron Jobs 목록 | 등록된 스케줄 작업 전체 표시. 다음 실행 시간·최근 실행 결과 |
| Cron 추가 | GUI 폼으로 스케줄 작업 추가. cron 표현식 도우미 포함 |
| 수동 실행 | 스케줄과 상관없이 즉시 실행 버튼 |
| 실행 기록 | 각 작업의 실행 로그·성공/실패 여부·소요 시간 |
| Heartbeat 설정 | Heartbeat 주기·프롬프트 GUI 편집 |
| Standing Orders | 상시 지시 목록 추가·편집·비활성화 |
🩺 Health 탭 — 시스템 상태 진단
# Health 탭의 내용을 CLI로도 확인 가능 # 전체 상태 openclaw health # 상세 진단 (문제 자동 감지) openclaw doctor # 문제 자동 수정 openclaw doctor --fix # Gateway 로그 openclaw logs openclaw logs --tail 100 # 최근 100줄 openclaw logs -f # 실시간 스트리밍 # 채널 상태 openclaw channels status openclaw channels status telegram
config.json 심화 완전판 — 모든 필드 해설
OpenClaw의 설정 파일은 ~/.openclaw/openclaw.json (JSON5 형식 — 주석 허용)입니다. 스키마 검증이 엄격하므로 잘못된 키가 있으면 Gateway가 시작되지 않습니다. openclaw doctor로 오류를 확인하세요.
// ~/.openclaw/openclaw.json (JSON5 형식 — 주석 허용)
{
// ═══════════════════════════════════════════════════════
// AGENTS — 에이전트 행동 방식 설정
// ═══════════════════════════════════════════════════════
agents: {
defaults: {
// 에이전트 이름 (채팅에서 자기소개, 로그에 표시됨)
name: "Claw",
// 기본 AI 모델
// 형식: "공급자/모델명" 또는 "모델명"만
model: "anthropic/claude-sonnet-4-5",
// 워크스페이스 — AI가 파일을 읽고 쓰는 기본 경로
// 이 경로 외부 접근은 별도 허용 필요
workspace: "~/.openclaw/workspace",
// 시스템 프롬프트 — 모든 세션에 기본 적용
// 여기에 AI의 성격, 제약 사항, 특별 지시를 넣을 수 있음
systemPrompt: "당신은 한국어로 소통하는 개인 AI 어시스턴트입니다. 간결하고 실용적인 답변을 제공하세요.",
// Heartbeat — AI가 주기적으로 깨어나 능동 점검
heartbeat: {
// Heartbeat 활성화 여부
enabled: true,
// 점검 주기 (cron 표현식 또는 "30m", "1h" 형식)
every: "30m",
// 깨어났을 때 AI에게 줄 지시
prompt: "현재 시간을 확인하고, 30분 내 마감인 일정, 중요 알림이 있으면 사용자에게 연락하세요.",
// 알림을 보낼 채널
channel: "telegram",
// 조용한 시간 (알림 차단)
quietHours: {
start: "23:00",
end: "07:00",
timezone: "Asia/Seoul",
},
},
// 도구 사용 승인 설정
// "auto": AI가 자율적으로 도구 사용
// "confirm": 매번 사용자 확인 요청
// "deny": 도구 사용 금지
toolApproval: "auto",
// Extended Thinking 설정 (Claude claude-sonnet-4-5 이상)
thinking: {
enabled: false, // 기본 off (토큰 사용량 증가)
budgetTokens: 8000, // 최대 사고 토큰 수
},
},
},
// ═══════════════════════════════════════════════════════
// GATEWAY — 서버 설정
// ═══════════════════════════════════════════════════════
gateway: {
// 수신 포트 (기본 18789)
port: 18789,
// 바인딩 모드
// "local": 127.0.0.1 (개인 PC, 가장 안전)
// "lan": 0.0.0.0 (내부망 공개, 홈 서버)
bind: "local",
// 인증 설정
auth: {
// "shared-secret": 토큰 기반 인증 (기본, 권장)
// "password": 비밀번호 인증
// "trusted-proxy": Nginx/Cloudflare가 인증 처리
mode: "shared-secret",
// 게이트웨이 토큰 (온보딩 시 자동 생성)
token: "your_gateway_token",
// Tailscale 인증 허용
allowTailscale: false,
},
// Control UI 설정
controlUi: {
enabled: true,
// 베이스 경로 (기본: /)
// basePath: "/openclaw",
// 허용된 오리진 (CORS)
allowedOrigins: ["http://localhost:3000"],
},
// 로그 설정
log: {
// "debug" | "info" | "warn" | "error"
level: "info",
// 로그 파일 경로 (선택)
// file: "~/.openclaw/logs/gateway.log",
},
},
// ═══════════════════════════════════════════════════════
// CHANNELS — 채팅 채널 설정
// ═══════════════════════════════════════════════════════
channels: {
// Telegram 채널
telegram: {
token: "1234567890:AAFxxxxxxxxxxxxxxxx",
// 접근 허용 사용자 (allowlist 모드)
allowFrom: ["your_telegram_user_id"],
// 그룹에서 멘션 없이도 응답
respondWithoutMention: false,
// 봇이 그룹 관리자 명령 허용
allowAdminCommands: true,
},
// WhatsApp 채널 (플러그인 설치 필요)
whatsapp: {
// allowFrom: 허용된 전화번호 목록 (E.164 형식)
allowFrom: ["+821012345678"],
// 그룹 메시지 처리
handleGroupMessages: false,
},
// Discord 채널
discord: {
token: "MTxxxxxxxxxxxxxxxxxxxxxxxx",
// 응답할 채널 ID (빈 배열 = 모든 채널)
allowedChannelIds: [],
// 봇 멘션 없이도 응답 (DM에서)
respondInDMs: true,
},
},
// ═══════════════════════════════════════════════════════
// MODEL PROVIDERS — AI 모델 공급자
// ═══════════════════════════════════════════════════════
providers: {
anthropic: {
// API Key (환경변수 ANTHROPIC_API_KEY로도 설정 가능)
apiKey: "sk-ant-xxxxx",
// 기본 모델
defaultModel: "claude-sonnet-4-5",
},
openai: {
apiKey: "sk-xxxxx",
defaultModel: "gpt-4o",
},
groq: {
apiKey: "gsk_xxxxx",
defaultModel: "llama-4-scout-17b",
},
ollama: {
// 홈랩 Ollama 서버 주소
baseUrl: "http://192.168.1.253:11434",
defaultModel: "qwen2.5:14b",
},
},
// 모델 Failover 설정
model: {
default: "anthropic/claude-sonnet-4-5",
// Failover 순서: 앞에서부터 순차 시도
failover: [
"anthropic/claude-sonnet-4-5",
"groq/llama-4-scout-17b",
"ollama/qwen2.5:14b",
],
},
// ═══════════════════════════════════════════════════════
// TOOLS — 도구 설정
// ═══════════════════════════════════════════════════════
tools: {
// 셸 명령 실행 도구
exec: {
enabled: true,
// 사전 승인된 명령 패턴
allowed: ["git *", "npm *", "python3 *", "ls *", "cat *", "echo *"],
// 절대 실행 금지
denied: ["rm -rf *", "sudo rm *", "dd *", "mkfs *"],
// 목록에 없는 명령 실행 시 사용자 승인 요청
requireApprovalForUnknown: true,
// 실행 타임아웃 (ms)
timeoutMs: 30000,
},
// 브라우저 제어 도구
browser: {
enabled: true,
// 헤드리스 모드 (화면 없이 실행)
headless: true,
// 스크린샷 크기
viewport: { width: 1280, height: 720 },
},
// 웹 검색 도구
web_search: {
enabled: true,
// "brave" | "google" | "bing" | "searxng"
provider: "brave",
},
// 이미지 생성 도구
image_generate: {
enabled: true,
// "openai" | "fal" | "comfyui"
provider: "openai",
},
// TTS 도구
tts: {
enabled: true,
// "openai" | "elevenlabs" | "azure"
provider: "openai",
},
},
// ═══════════════════════════════════════════════════════
// PLUGINS — 플러그인 설정
// ═══════════════════════════════════════════════════════
plugins: {
entries: {
// Brave 웹 검색
brave: {
config: {
webSearch: {
apiKey: "BSAxxxxxxxxxxx",
},
},
},
// ElevenLabs TTS
elevenlabs: {
config: {
apiKey: "sk_xxxxxxxxxxxx",
defaultVoice: "Rachel",
},
},
},
},
// ═══════════════════════════════════════════════════════
// SANDBOX — 코드 실행 격리 설정
// ═══════════════════════════════════════════════════════
sandbox: {
// "docker" | "ssh" | "openshell" | "none"
// "none": 격리 없이 실행 (기본, 개인 환경)
// "docker": Docker 컨테이너 격리 (서버 권장)
backend: "none",
},
// ═══════════════════════════════════════════════════════
// AUTOMATION — 자동화 설정
// ═══════════════════════════════════════════════════════
automation: {
// Standing Orders — 모든 세션에 상시 주입되는 지시
standingOrders: [
{
name: "language-rule",
instruction: "모든 응답은 항상 한국어로 작성하세요. 단, 코드·기술 용어는 영어를 유지합니다.",
priority: 10, // 높을수록 먼저 주입
},
{
name: "safety-check",
instruction: "파일 삭제나 중요 변경 작업 전에 반드시 사용자 확인을 요청하세요.",
priority: 20,
},
],
// Cron 작업 (등록된 스케줄)
cron: [], // openclaw schedule add 명령으로 추가됨
// 웹훅 설정
hooks: {
github: {
secret: "your_github_webhook_secret",
},
},
},
}🔥 Hot Reload — 설정 즉시 반영
Gateway가 실행 중인 상태에서 openclaw.json을 수정하면 자동으로 감지하고 재시작 없이 설정을 반영합니다. Control UI의 Config 탭에서 저장 시에도 동일합니다. 단, Gateway 포트 변경은 재시작이 필요합니다.
자동화 심화 — Cron · Heartbeat · TaskFlow · Hooks 완전 구현
📊 자동화 메커니즘 선택 가이드
| 메커니즘 | 타이밍 | 컨텍스트 | 최적 용도 |
|---|---|---|---|
| Cron (Scheduled Tasks) | 정확한 시간 | 격리된 세션 | 일일 리포트, 주간 분석, 정시 알림 |
| Heartbeat | 대략적 주기 | 메인 세션 공유 | 이메일 체크, 캘린더 확인, 주변 상황 모니터링 |
| TaskFlow | 즉시 실행 | 독립 실행 | 다단계 리서치, 복잡한 분석, 개정 추적 |
| Standing Orders | 항상 (모든 세션) | 시스템 프롬프트 주입 | 언어 규칙, 안전 점검, 항상 지켜야 할 지침 |
| Hooks | 이벤트 발생 시 | 이벤트 데이터 포함 | GitHub PR, Sentry 에러, 파일 변경 감지 |
⏰ Scheduled Tasks (Cron) 심화
# ── 기본 등록 ───────────────────────────────────────── # 매일 오전 8시 Telegram으로 아침 브리핑 openclaw schedule add \ --name "morning-briefing" \ --cron "0 8 * * *" \ --task "날씨, 오늘 뉴스 3건, 캘린더 일정을 정리해서 Telegram으로 전송" \ --channel telegram # 매주 월요일 오전 9시 주간 계획 리뷰 openclaw schedule add \ --name "weekly-review" \ --cron "0 9 * * 1" \ --task "지난 주 GitHub 커밋 요약, 이번 주 예정 작업 정리" \ --channel telegram # 30분 후 한 번만 실행 (one-shot) openclaw schedule add \ --name "reminder-meeting" \ --at "+30m" \ --task "팀 회의 30분 후 시작입니다. 준비 사항을 확인하세요." # 매 5분마다 서버 상태 체크 (고급) openclaw schedule add \ --name "server-monitor" \ --cron "*/5 * * * *" \ --task "CPU, 메모리, 디스크 사용량을 체크하고 임계치 초과 시만 알림" \ --channel telegram \ --model "groq/llama-4-scout-17b" # 빠른 모델 사용 # ── 관리 명령어 ───────────────────────────────────────── openclaw schedule list # 전체 목록 openclaw schedule show morning-briefing # 상세 보기 openclaw schedule run morning-briefing # 즉시 실행 openclaw schedule pause morning-briefing # 일시 중지 openclaw schedule resume morning-briefing # 재개 openclaw schedule remove morning-briefing # 삭제 # 실행 기록 확인 openclaw tasks list openclaw tasks audit --last 10
💓 Heartbeat 심화 설정
{
agents: {
defaults: {
heartbeat: {
enabled: true,
// 점검 주기
// "30m" = 30분마다 | "1h" = 1시간마다
// 또는 cron 표현식: "*/30 * * * *"
every: "30m",
// Heartbeat 시 AI에게 주는 지시 (상세할수록 좋음)
prompt: `
현재 시각을 확인하고 다음 사항을 순서대로 점검하세요:
1. 📅 캘린더: 30분 내 시작하는 일정이 있으면 알림
2. 📧 이메일: 읽지 않은 중요 이메일이 있으면 요약 전달
(VIP 발신자: [email protected], [email protected])
3. 🔔 알림: 이전 대화에서 설정한 리마인더 확인
4. ⚠️ 시스템: AI 서버(192.168.1.253)가 응답하는지 ping 확인
위 항목 중 알릴 내용이 있을 때만 메시지 전송.
모든 게 정상이면 조용히 있을 것.
`,
// 알림 채널
channel: "telegram",
// 조용한 시간 (알림 완전 차단)
quietHours: {
start: "23:00",
end: "07:30",
timezone: "Asia/Seoul",
// 주말 추가 조용한 시간
weekendStart: "22:00",
weekendEnd: "09:00",
},
// Heartbeat에서 사용할 모델 (빠른 모델 권장)
model: "groq/llama-4-scout-17b",
},
},
},
}🔄 Task Flow — 다단계 복잡 작업
TaskFlow는 여러 단계로 이루어진 복잡한 작업을 추적하고 관리합니다. 중간에 실패해도 어디까지 완료됐는지 기록하고, 필요하면 해당 단계부터 재시작할 수 있습니다.
# 대화에서 복잡한 다단계 작업 요청 # "다음 단계로 경쟁사 분석 리포트를 만들어줘: # 1. 경쟁사 A, B, C의 최신 뉴스 수집 # 2. 각사의 강점·약점 분석 # 3. 시장 트렌드 요약 # 4. Word 리포트로 저장 # 5. 이메일로 발송 # 각 단계 완료시 알려줘" # AI가 자동으로 TaskFlow로 처리: # - 각 단계를 개별 태스크로 등록 # - 진행상황 추적 # - 실패 시 해당 단계부터 재시도 가능 # 태스크 목록 확인 openclaw tasks list openclaw tasks show# 태스크 감사 로그 openclaw tasks audit
🪝 Hooks — 이벤트 기반 자동화 완전 구현
{
automation: {
hooks: {
// ── GitHub 웹훅 ──────────────────────────────────
// GitHub 저장소 Settings → Webhooks → URL: http://서버:18789/webhook/github
github: {
secret: "your_github_webhook_secret",
// 이벤트별 AI 처리 지시
handlers: {
"pull_request.opened": {
task: "이 PR의 diff를 분석하고 잠재적 버그, 보안 취약점, 성능 이슈를 찾아서 GitHub 코멘트로 게시하세요.",
model: "anthropic/claude-sonnet-4-5",
channel: "slack",
},
"issues.opened": {
task: "새 이슈를 분석하고 관련 기존 이슈나 PR이 있는지 찾아서 코멘트로 알려주세요.",
},
"push": {
// 특정 브랜치만
condition: "event.ref === 'refs/heads/main'",
task: "main 브랜치에 새 커밋이 푸시됐습니다. 변경사항을 요약해서 Slack에 알려주세요.",
channel: "slack",
},
},
},
// ── Sentry 웹훅 ──────────────────────────────────
sentry: {
handlers: {
"event_alert": {
task: "새 에러가 발생했습니다. 스택 트레이스를 분석하고 원인과 수정 방법을 찾아 Slack으로 전송하세요.",
model: "anthropic/claude-sonnet-4-5",
channel: "slack",
},
},
},
// ── 커스텀 웹훅 ──────────────────────────────────
// 수신 URL: http://서버:18789/webhook/custom
custom: {
handlers: {
"default": {
task: "웹훅 데이터를 분석하고 중요한 내용이 있으면 Telegram으로 알려주세요.",
channel: "telegram",
},
},
},
},
},
}📋 Standing Orders 심화 — 항상 지켜지는 규칙
{
automation: {
standingOrders: [
// 언어 규칙 (최고 우선순위)
{
name: "korean-language",
instruction: "모든 응답은 한국어로 작성하세요. 코드, CLI 명령어, 기술 용어는 영어 유지.",
priority: 100,
enabled: true,
},
// 파일 삭제 안전 장치
{
name: "file-safety",
instruction: "파일 삭제(rm, delete), 포맷, 데이터베이스 초기화 등 되돌릴 수 없는 작업 전에 반드시 사용자에게 확인을 요청하고 무엇을 할 것인지 명확히 설명하세요.",
priority: 90,
enabled: true,
},
// 비용 인식
{
name: "api-cost-awareness",
instruction: "외부 유료 API(이미지 생성, TTS 등)를 사용하기 전에 간단히 비용이 발생함을 언급하고 진행 여부를 확인하세요.",
priority: 50,
enabled: true,
},
// 개인정보 보호
{
name: "privacy",
instruction: "대화 내용에 개인정보(주민번호, 신용카드 번호, 비밀번호)가 포함된 경우 처리하지 말고 입력하지 말것을 안내하세요.",
priority: 80,
enabled: true,
},
// 응답 형식
{
name: "response-format",
instruction: "긴 응답은 마크다운 형식(##, -, **bold**)을 사용해 구조화하세요. 코드는 항상 코드 블록으로 감싸세요.",
priority: 30,
enabled: true,
},
],
},
}채널 심화 설정 — 그룹·라우팅·접근 제어 완전 가이드
👥 Access Groups — 사용자 그룹별 권한 관리
Access Groups를 사용하면 사용자를 그룹으로 묶어 각 그룹별로 도구 사용 권한, 접근 가능한 채널, 사용 가능한 모델을 다르게 설정할 수 있습니다.
{
channels: {
telegram: {
token: "YOUR_TOKEN",
// 접근 그룹 설정
accessGroups: {
// "admin" 그룹: 모든 도구 사용 가능
admin: {
users: ["admin_telegram_id_1"],
tools: ["exec", "browser", "web_search", "image_generate"],
model: "anthropic/claude-sonnet-4-5", // 고품질 모델 허용
},
// "team" 그룹: 파일 읽기·웹 검색만 허용
team: {
users: ["team_member_1", "team_member_2"],
tools: ["read", "web_search"],
model: "groq/llama-4-scout-17b", // 저비용 모델로 제한
},
// "guest" 그룹: 채팅만 가능
guest: {
users: ["guest_1"],
tools: [], // 도구 사용 금지
model: "groq/llama-4-scout-17b",
// 일일 메시지 한도
dailyLimit: 20,
},
},
},
},
}🔀 Channel Routing — 메시지 라우팅 설정
여러 채널이 있을 때, 어떤 채널의 메시지를 어떤 에이전트가 처리할지 설정합니다. 예를 들어 Telegram DM은 개인 에이전트가, Slack은 팀 에이전트가 처리하도록 분리할 수 있습니다.
{
channels: {
routing: {
// Telegram DM → 개인 에이전트 (기본 설정)
"telegram:dm": {
agent: "default",
model: "anthropic/claude-sonnet-4-5",
},
// Telegram 그룹 → 팀 에이전트 (다른 시스템 프롬프트)
"telegram:group": {
agent: "team",
model: "groq/llama-4-scout-17b", // 저비용
systemPrompt: "당신은 팀 지원 봇입니다. 간결하게 답변하세요.",
},
// Slack → 업무 에이전트
"slack": {
agent: "work",
model: "anthropic/claude-sonnet-4-5",
systemPrompt: "당신은 업무 생산성 어시스턴트입니다.",
},
// Discord → 개발 에이전트
"discord": {
agent: "dev",
model: "anthropic/claude-sonnet-4-5",
systemPrompt: "당신은 개발 보조 AI입니다. 코드를 주로 다룹니다.",
},
},
},
}📢 Broadcast Groups — 일방향 공지 채널
// Broadcast = AI가 여러 채널에 동시에 메시지 보내는 것
// 대화에서: "모든 채널에 서버 점검 공지 보내줘"
// config에서 broadcast 그룹 정의
{
channels: {
broadcastGroups: {
"all": ["telegram", "discord", "slack"], // 전체 공지
"team": ["slack", "discord"], // 팀 공지
"personal": ["telegram"], // 개인 알림
},
},
}💬 그룹 메시지 정책 심화
{
channels: {
telegram: {
token: "YOUR_TOKEN",
// 그룹 메시지 정책
groups: {
// 특정 그룹만 응답
allowedGroupIds: [-1001234567890, -1009876543210],
// 그룹에서 봇 멘션 없이도 응답할지
respondWithoutMention: false,
// 그룹 전체 맥락 인식 (앰비언트 모드)
// true: 멘션 없는 메시지도 읽어 컨텍스트 파악 (응답은 안 함)
ambientContext: true,
// 봇 루프 방지 (봇끼리 무한 대화 방지)
botLoopProtection: true,
},
},
// WhatsApp 그룹 설정
whatsapp: {
allowFrom: ["+821012345678"],
groups: {
handleGroupMessages: true,
respondOnlyWhenMentioned: true,
// 특정 그룹만 허용 (전화번호[email protected] 형식)
allowedGroupJids: [],
},
},
},
}실사용 심화 레시피 20선 — 완전 구현 코드 포함
📝 레시피 1 — 완전 자동 이메일 처리 시스템
--- name: email-manager description: Gmail 수신 이메일 자동 분류·요약·대응 시스템 version: 2.0.0 triggers: - schedule: "*/15 * * * *" # 15분마다 새 이메일 체크 - command: "/email" # 수동 체크 tools: - exec - browser - message --- # 이메일 관리 스킬 ## 사용 환경 - Gmail API: OAuth 토큰 ~/.openclaw/secrets/gmail_token.json - 중요 발신자: [email protected], [email protected], [email protected] ## 처리 절차 ### 1단계: 이메일 조회 exec 도구로 Gmail API 호출: ```bash python3 ~/.openclaw/scripts/gmail_fetch.py --unread --max 20 ``` ### 2단계: 자동 분류 규칙 각 이메일을 다음 카테고리로 분류: - **URGENT**: 중요 발신자이거나 "긴급", "ASAP" 키워드 포함 - **NORMAL**: 일반 업무 메일 - **NEWSLETTER**: 마케팅, 뉴스레터 - **SPAM**: 스팸 의심 ### 3단계: 처리 규칙 - URGENT → 즉시 전체 내용 요약 + Telegram 알림 (3분 내) - NORMAL → 요약 + 하루 최대 3건만 알림 - NEWSLETTER → 읽음 처리 + 폴더 이동 (응답 없음) - SPAM → 스팸 신고 + 삭제 ### 4단계: 답장 초안 (URGENT에 한해) URGENT 이메일에 대해 답장 초안을 작성하고 사용자에게 검토 요청. 절대 자동으로 발송하지 말 것. ## 알림 형식 ``` 📧 새 이메일 (URGENT) 발신: {sender_name} <{email}> 제목: {subject} 요약: {2줄 요약} [답장 초안 보기] | [원본 보기] | [무시] ```
📊 레시피 2 — AI 기반 주식/코인 모니터링
# 오전 9시 장 시작 전 브리핑 openclaw schedule add \ --name "market-open" \ --cron "0 8 * * 1-5" \ --task "오늘 주요 종목(삼성전자, 카카오, 네이버)의 전일 종가, 미국 시장 마감 요약, 오늘 주목할 경제 일정을 정리해서 Telegram으로 전송" # 장중 급변 모니터링 (Heartbeat로) # openclaw.json의 heartbeat.prompt에 추가: # "주요 종목 가격이 전일 대비 3% 이상 변동한 경우 즉시 알림" # 오후 3시 30분 장 마감 요약 openclaw schedule add \ --name "market-close" \ --cron "30 15 * * 1-5" \ --task "오늘 코스피/코스닥 마감 요약, 주요 종목 등락률, 내일 주목할 뉴스를 정리해서 전송"
🏠 레시피 3 — 완전 자동 스마트홈 허브
---
name: smart-home
description: Home Assistant 완전 제어 스킬
version: 1.5.0
tools: [exec]
---
# 스마트홈 제어 스킬
## 설정
- HA 주소: http://homeassistant.local:8123
- 토큰: ~/.openclaw/secrets/ha_token.txt
## 지원 명령 패턴
### 조명 제어
- "거실 불 켜줘" / "꺼줘" / "50%로 낮춰줘"
- "잠자리 준비 모드" → 전체 조명 10%, 수면 조명 켜기
- "영화 모드" → 거실 10%, TV 뒤 조명 30%, 나머지 끄기
### 온도 제어
- "에어컨 켜줘, 24도로" → 에어컨 24도 설정
- "지금 집 온도?" → 온습도 센서 현재값 조회
- "귀가 30분 전이야" → 보일러 미리 켜기 (절전 → 난방)
### 보안
- "문 잠겼어?" → 도어락 상태 조회
- "카메라 확인해줘" → 최신 스냅샷 전송
## API 호출 방식
```bash
# 상태 조회
curl -s -H "Authorization: Bearer $(cat ~/.openclaw/secrets/ha_token.txt)" \
http://homeassistant.local:8123/api/states/{entity_id}
# 서비스 호출
curl -s -X POST \
-H "Authorization: Bearer $(cat ~/.openclaw/secrets/ha_token.txt)" \
-H "Content-Type: application/json" \
-d '{"entity_id": "{entity_id}"}' \
http://homeassistant.local:8123/api/services/{domain}/{service}
```
## 엔티티 목록
- 거실 조명: light.living_room_main
- 침실 조명: light.bedroom_main
- 에어컨: climate.living_room_ac
- 실내 온도: sensor.indoor_temperature
- 도어락: lock.front_door💻 레시피 4 — 개발자 자율 버그 수정 에이전트
{
automation: {
hooks: {
sentry: {
handlers: {
"event_alert": {
// 고품질 모델로 코드 분석
model: "anthropic/claude-sonnet-4-5",
task: `
다음 작업을 순서대로 수행하세요:
1. Sentry 에러의 스택 트레이스를 분석하세요
2. 관련 코드를 exec 도구로 읽어 오류 원인을 파악하세요
3. 수정 방법을 결정하세요
4. apply_patch 도구로 수정 코드를 작성하세요
5. 테스트 코드도 실행해서 수정이 올바른지 확인하세요
6. git commit으로 변경사항을 커밋하고 PR을 생성하세요
7. PR 링크와 수정 내용을 Slack으로 보고하세요
⚠️ PR은 반드시 draft로 생성하고 자동 머지하지 말 것
`,
channel: "slack",
// 실행 타임아웃 (큰 작업이므로 10분)
timeoutMs: 600000,
},
},
},
},
},
}📱 레시피 5 — WhatsApp 고객 응대 봇
---
name: customer-support-whatsapp
description: WhatsApp 고객 문의 자동 응대 및 에스컬레이션
version: 1.0.0
tools: [read, exec, message]
---
# 고객 지원 봇 스킬
## 동작 원칙
1. 모든 고객 메시지는 정중하고 친절하게 응대
2. FAQ에서 답을 찾으면 즉시 응답 (3분 이내)
3. 복잡한 문의는 담당자 연결 후 알림
## FAQ 데이터베이스
FAQ는 ~/.openclaw/workspace/faq.md 파일에서 로드
## 응대 절차
### 1. 카테고리 분류
- 배송 문의 → 배송 스크립트 실행
- 환불 요청 → 환불 정책 안내
- 기술 문제 → 기술팀 에스컬레이션
- 일반 문의 → FAQ 검색 후 응답
### 2. 에스컬레이션 조건
다음 경우 즉시 담당자(Telegram: @manager_id)에게 알림:
- 고객이 화를 내거나 법적 조치를 언급할 때
- FAQ에 없는 복잡한 기술 문제
- 금액이 50만원 이상인 환불 요청
### 3. 응답 형식
- 인사말 포함
- 문의 내용 요약 (1줄)
- 명확한 답변 또는 처리 예정 시간
- 추가 문의 안내
### 에스컬레이션 알림 형식
```
🚨 고객 지원 에스컬레이션
고객: {phone_number}
문의: {summary}
이유: {escalation_reason}
대화 기록: {last_3_messages}
```📓 레시피 6 — Obsidian 두 번째 뇌 완전 연동
# Obsidian 볼트를 워크스페이스로 설정
openclaw config set agents.defaults.workspace "~/Documents/Obsidian-Vault"
# 매주 일요일 주간 노트 자동 생성
openclaw schedule add \
--name "weekly-note" \
--cron "0 21 * * 0" \
--task "이번 주 Obsidian 노트를 모두 읽고 다음 형식으로 주간 요약 노트를 작성해:
- 파일명: Weekly/2026-W{주차}.md
- 섹션: 이번 주 핵심 내용, 배운 것, 할 일, 연결 아이디어
기존 파일이 있으면 덮어쓰지 말고 추가할 것"
# 새 노트 자동 분류 (매일 오후 11시)
openclaw schedule add \
--name "note-organizer" \
--cron "0 23 * * *" \
--task "~/Documents/Obsidian-Vault/Inbox 폴더의 모든 노트를 읽고
내용에 맞는 폴더(Projects, Resources, Archive)로 이동시키고
관련 태그를 추가해줘"🎤 레시피 7 — 음성 AI 어시스턴트 (음성으로 말하면 음성으로 응답)
// 1. ElevenLabs TTS 플러그인 설치
// openclaw plugins install @openclaw/elevenlabs
// 2. config 설정
{
plugins: {
entries: {
elevenlabs: {
config: {
apiKey: "sk_xxxxxxxxxxxx",
// 한국어 지원 목소리
defaultVoice: "Bella", // 또는 "Adam"
// 스트리밍 모드 (빠른 응답)
streaming: true,
modelId: "eleven_multilingual_v2",
},
},
},
},
tools: {
tts: {
enabled: true,
provider: "elevenlabs",
// 음성 응답 자동 전송 여부
// true: 모든 응답을 음성으로도 전송
// false: 사용자가 /voice 요청 시에만
autoVoiceReply: false,
},
},
}
// 3. 사용 방법 (Telegram에서)
// /voice "내일 날씨 알려줘" → 음성 파일로 응답
// /tts "이 텍스트를 읽어줘" → TTS 변환🔄 레시피 8 — n8n ↔ OpenClaw 완전 양방향 연동
# ── OpenClaw → n8n 방향 ────────────────────────────
# 스킬에서 exec로 n8n 웹훅 호출:
# curl -X POST http://192.168.1.253:5678/webhook/trigger-workflow \
# -H "Content-Type: application/json" \
# -d '{"task": "invoice_processing", "file": "/path/to/file.pdf"}'
# ── n8n → OpenClaw 방향 ────────────────────────────
# n8n HTTP Request 노드 설정:
# URL: http://192.168.1.253:18789/api/v1/message
# Method: POST
# Headers: Authorization: Bearer YOUR_GATEWAY_TOKEN
# Body:
{
"channel": "telegram",
"message": "n8n 워크플로우 '인보이스 처리' 완료!\n처리된 파일: {{ $json.filename }}\n결과: {{ $json.result }}"
}
# ── 양방향 예시: 문서 처리 파이프라인 ─────────────
# 1. 사용자 → Telegram: "이 PDF 인보이스 처리해줘" + 파일 첨부
# 2. OpenClaw: 파일 저장 후 n8n 웹훅 트리거
# 3. n8n: PDF 파싱 → DB 저장 → 회계 시스템 연동
# 4. n8n → OpenClaw 웹훅: 처리 완료 알림
# 5. OpenClaw → Telegram: "인보이스 처리 완료! 영수증 번호: INV-2026-xxx"📸 레시피 9 — 자동 사진 분류 & 기억 시스템
---
name: photo-organizer
description: 이미지 분석으로 사진 자동 분류 및 메타데이터 추가
version: 1.0.0
triggers:
- command: "/photo" # 수동 실행
tools: [image, exec, write]
---
# 사진 자동 분류 스킬
## 사용 방법
사용자가 Telegram/WhatsApp에 사진을 보내면:
1. Vision AI로 사진 내용 분석
2. 자동 태그 생성 (장소, 사람, 사물, 날씨 등)
3. 날짜별 폴더에 저장
4. Notion 사진 일기에 추가
## 분류 카테고리
- 🏠 집/실내
- 🌿 자연/풍경
- 🍜 음식
- 👤 사람/셀카
- 🏙️ 도시/건물
- ✈️ 여행
- 📄 문서/영수증
## 저장 경로
~/Pictures/AI-Sorted/{YYYY}/{MM-DD}/{category}/
## Notion 일기 형식
- 날짜: {today}
- 사진: {첨부}
- 장소: {detected_location}
- 태그: {auto_tags}
- 메모: {user_caption}📈 레시피 10 — 개인 생산성 대시보드 (주간 자동 생성)
# 매주 일요일 오후 9시 주간 생산성 리뷰 자동 생성 openclaw schedule add \ --name "weekly-productivity" \ --cron "0 21 * * 0" \ --task "이번 주 생산성 리뷰를 다음 데이터를 종합해서 작성해줘: 1. exec: git log --since='7 days ago' --oneline → 코딩 활동 2. 이메일 수·발송 수 (스킬에서 Gmail 데이터) 3. 완료한 Notion 할일 개수 4. WHOOP 수면·활동 평균 점수 결과를 마크다운으로 ~/Documents/Weekly-Reviews/$(date +%Y-W%V).md에 저장하고 핵심 인사이트 3가지를 Telegram으로 전송"
보안 심화 — 인증·샌드박스·원격 접근·위협 모델
🔐 Gateway 인증 모드 완전 가이드
| 인증 모드 | 설정 | 권장 환경 | 보안 수준 |
|---|---|---|---|
| shared-secret (토큰) | auth.mode: "shared-secret" | 대부분의 경우 기본 권장 | 🟢 높음 |
| password | auth.mode: "password" | 토큰 관리 어려울 때 | 🟡 중간 |
| trusted-proxy | auth.mode: "trusted-proxy" | Nginx/Cloudflare가 인증 처리할 때 | 🟢 높음 |
| allowTailscale | auth.allowTailscale: true | Tailscale 네트워크 내 신뢰 | 🟢 높음 |
🏖️ Exec Sandbox — 코드 실행 격리
{
sandbox: {
// ── 모드 선택 ──────────────────────────────────
// "none": 격리 없음 (기본, 개인 PC 개발 환경)
// "docker": Docker 컨테이너로 격리 (서버 권장)
// "ssh": 원격 SSH 서버에서 실행
// "openshell": OpenShell 격리
backend: "docker",
// Docker 샌드박스 설정
docker: {
// 샌드박스 컨테이너 이미지
image: "node:22-alpine",
// 허용된 호스트 디렉토리 마운트 (읽기 전용)
mounts: [
{ host: "~/projects", container: "/workspace", readonly: false },
{ host: "~/Documents", container: "/docs", readonly: true },
],
// 네트워크 격리
networkMode: "none", // "none" | "bridge"
// 메모리 제한
memoryMB: 512,
// CPU 제한
cpuShares: 512,
},
},
}🌐 Tailscale 원격 접근 설정
# ── 서버에 Tailscale 설치 ───────────────────────── curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up # OpenClaw를 Tailscale 전용으로 설정 openclaw config set gateway.bind "tailscale" openclaw config set gateway.auth.allowTailscale true # ── Tailscale Serve로 HTTPS 자동 설정 ───────────── # Tailscale Funnel은 인터넷 공개, Serve는 Tailnet 내부 sudo tailscale serve https:443 / http://127.0.0.1:18789 # ── 다른 기기에서 접근 ───────────────────────────── # Tailscale 설치 후 같은 계정으로 로그인하면 # http://server-hostname.tailnet.ts.net:18789 로 접근 가능 # 또는 https 서브도메인으로 자동 제공됨 # ── 모바일에서 Control UI 접속 ───────────────────── # iOS/Android Tailscale 앱 설치 후 # http://hostname:18789 로 모바일에서 접속 가능
🔒 보안 강화 체크리스트 완전판
- ✓Gateway 토큰 강도:
openssl rand -hex 32로 생성한 64자 이상 토큰 사용 - ✓채널 allowlist: 모든 채널에
allowFrom설정. 미설정 시 누구나 AI에 접근 가능 - ✓Exec denied 목록: rm -rf, sudo, dd, mkfs 등 위험 명령 차단
- ✓파일 권한:
chmod 600 ~/.openclaw/openclaw.json— API Key 파일 보호 - ✓Docker 격리: 서버에서는 sandbox backend를 docker로 설정
- ✓방화벽: 포트 18789를 외부에 직접 노출하지 말고 Tailscale/Nginx 경유
- !WhatsApp Baileys는 비공식 라이브러리임. 계정 밴 위험 있으므로 개인 계정 사용 권장
- !브라우저 도구 사용 시 중요 계정(뱅킹, 이메일)은 별도 브라우저 프로파일 사용 권장
- i공식 Threat Model(MITRE ATLAS 기반)은 docs.openclaw.ai/security/THREAT-MODEL-ATLAS에서 확인 가능
운영·모니터링·업데이트 완전 가이드
📊 상태 모니터링 명령어 완전 레퍼런스
# ── 상태 확인 ───────────────────────────────────────── openclaw status # 전체 요약 상태 openclaw health # Gateway 헬스 체크 openclaw health --verbose # 상세 헬스 정보 openclaw doctor # 문제 자동 진단 openclaw doctor --fix # 발견된 문제 자동 수정 # ── 로그 ────────────────────────────────────────────── openclaw logs # 기본 로그 (최근) openclaw logs --tail 200 # 최근 200줄 openclaw logs -f # 실시간 스트리밍 openclaw logs --level debug # 디버그 레벨 openclaw logs --channel telegram # 특정 채널 로그만 openclaw logs --since "1 hour ago" # 시간 필터 # ── 채널 모니터링 ───────────────────────────────────── openclaw channels status # 모든 채널 상태 openclaw channels status telegram # 특정 채널 상태 openclaw channels list # 등록된 채널 목록 # ── 기기 관리 ───────────────────────────────────────── openclaw devices list # 페어링된 기기 목록 openclaw devices approve# 기기 승인 openclaw devices revoke --device # 기기 접근 취소 # ── 스케줄 관리 ─────────────────────────────────────── openclaw schedule list # 전체 스케줄 목록 openclaw tasks list # 실행된 태스크 목록 openclaw tasks audit --last 20 # 최근 20개 실행 로그 # ── 설정 관리 ───────────────────────────────────────── openclaw config get # 전체 설정 출력 openclaw config get agents.defaults # 특정 경로만 openclaw config set gateway.log.level debug # 값 변경 openclaw config unset agents.defaults.heartbeat # 키 삭제 openclaw config validate # 설정 유효성 검사 openclaw config schema # JSON 스키마 출력
🔄 업데이트 채널 & 관리
| 채널 | 명령어 | 특징 | 권장 대상 |
|---|---|---|---|
| stable | openclaw update --channel stable | 안정 릴리즈. 충분히 테스트됨 | 프로덕션, 일반 사용자 |
| dev (main) | openclaw update --channel dev | 최신 기능, 가끔 버그 있음 | 얼리어답터, 개발자 |
| 특정 버전 | openclaw update --version 2026.3.1 | 정확한 버전 고정 | 버전 안정성 필요 시 |
# ── 업데이트 ────────────────────────────────────────── openclaw update # 현재 채널로 업데이트 openclaw update --channel stable # 안정 채널로 전환 openclaw update --channel dev # 개발 채널로 전환 # Docker 환경 업데이트 docker compose pull docker compose up -d # ── 설정 백업 & 복원 ────────────────────────────────── # 백업 (설정 + 시크릿 모두) tar czf openclaw-backup-$(date +%Y%m%d).tar.gz \ ~/.openclaw/openclaw.json \ ~/.openclaw/secrets/ \ ~/.openclaw/workspace/ \ ~/.openclaw/skills/ # 복원 tar xzf openclaw-backup-YYYYMMDD.tar.gz -C ~/ # ── 마이그레이션 (다른 서버로 이전) ────────────────── # 구 서버에서 내보내기 openclaw export > openclaw-export.json # 새 서버에서 가져오기 openclaw import openclaw-export.json # ── 완전 초기화 (⚠️ 모든 데이터 삭제) ───────────── openclaw reset --confirm
🩺 자주 발생하는 문제 심화 해결
| 증상 | 진단 명령어 | 해결 방법 |
|---|---|---|
| Config 검증 실패로 Gateway 부팅 불가 | openclaw doctor | openclaw doctor --fix → last-known-good 복원 |
| Control UI 연결 불가 (1008 오류) | openclaw devices list | openclaw devices approve <id> |
| Heartbeat 작동 안 함 | openclaw config get agents.defaults.heartbeat | enabled: true 확인, 채널 설정 확인 |
| 스케줄 작업이 실행 안 됨 | openclaw schedule list | paused 여부 확인, openclaw schedule resume <name> |
| 채널 메시지 수신 안 됨 | openclaw channels status | 토큰 유효성 확인, allowFrom 설정 확인 |
| Exec 도구 Permission denied | openclaw config get tools.exec | allowed 목록에 해당 명령 추가 |
| 모델 API 오류 (401/403) | openclaw config get providers | API 키 재설정: openclaw config set providers.anthropic.apiKey "새키" |
- Docker로 24시간 서버 운영 — setup.sh 하나로 완성, Docker Compose로 체계적 관리
- 온보딩 완전 제어 — 모든 플래그 이해, 상황별 최적 설치 방법 선택
- Control UI 마스터 — Chat·Config·Channels·Plugins·Skills·Automation 모든 탭 활용
- config.json 완전 이해 — agents·gateway·channels·tools·sandbox 모든 필드 설정
- 자동화 완전 구현 — Cron·Heartbeat·TaskFlow·Hooks·Standing Orders 상황별 선택
- 실사용 레시피 10종 — 이메일·스마트홈·개발자·고객지원 바로 사용 가능한 SKILL.md
🎉 OpenClaw 심화편 완독 완료! 기초편과 심화편을 모두 완독했다면 여러분만의 완전 자동화된 AI 비서 시스템을 구축할 준비가 됐습니다. 실제 사용 중 막히는 부분이나 추가로 만들고 싶은 스킬이 있다면 댓글로 알려주세요!
