OpenClaw Control UI 가이드 : config.json 세부 설정 및 자동화 구현

구분심화편 (Deep Dive)
업데이트2026년 5월
전제기초편 완독 후 권장
난이도중급 ~ 전문가
Docker 설치 Control UI 완전 설정 단계별 온보딩 자동화 심화 실사용 레시피 config.json 완전판
기초편에서 OpenClaw의 개념과 기본 사용법을 익혔다면, 이 심화편에서는 Docker 완전 설치, 단계별 온보딩의 모든 옵션, Control UI 전체 메뉴 완전 정복, config.json 심화 설정, 자동화 메커니즘 완전 구현까지 다룹니다. 설정 하나하나의 의미를 이해하고 나만의 최적 환경을 구축합니다.
SECTIOND1

설치 완전 가이드 — npm · Script · Docker · ClawDock

📊 설치 방법 비교 — 어떤 방법을 써야 하는가

방법난이도권장 환경장점단점
install.sh 원라이너가장 쉬움개인 macOS/LinuxNode.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 설치 — 완전 단계별 가이드

💡
Docker는 언제 써야 하는가?

본인 PC에서 개발 목적으로 사용한다면 Docker가 오히려 번거롭습니다. VPS, 홈 서버, Raspberry Pi처럼 격리된 환경에서 24시간 운영하거나, 다른 서비스와 함께 Docker Compose로 관리하고 싶을 때 Docker가 진가를 발휘합니다.

1
사전 요구사항 확인
Docker Engine + Docker Compose v2 설치. RAM 2GB 이상 (pnpm install 빌드 중 OOM 방지). docker --version && docker compose version으로 확인
2
저장소 클론
git clone https://github.com/openclaw/openclaw.git && cd openclaw
3
setup.sh 실행 (가장 쉬운 방법)
./scripts/docker/setup.sh — 빌드, 온보딩, Gateway 시작을 모두 자동으로 처리합니다
4
Control UI 접속
http://127.0.0.1:18789/ 접속 → .env의 토큰 입력 → 설정 완료
5
채널 연결 (Docker CLI로)
docker compose run --rm openclaw-cli channels login (WhatsApp QR)
bash — Docker 설치 완전 절차
# ── 사전 준비 ────────────────────────────────────────
# 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 파일 완전 해설

yaml — docker-compose.yml 커스터마이징 완전 예시
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 파일 완전 템플릿

env — .env 파일 완전판 (Docker용)
# ── 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 하나로 모든 것을 처리합니다.

bash — ClawDock 사용법
# 저장소 클론
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시간 운영 설정

bash — Raspberry Pi / Linux 서버 설치 (npm 방식)
# 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
SECTIOND2

단계별 온보딩 완전 정복 — 모든 옵션 해설

온보딩 마법사는 단순히 API Key를 입력하는 것 이상입니다. 에이전트 이름, 워크스페이스, Gateway 모드, 채널 연결, 데몬 등록까지 처음 환경을 완전히 구성합니다. 모든 옵션을 이해해야 최적의 환경을 만들 수 있습니다.

⚙️ onboard 명령어 플래그 완전 해설

플래그의미사용 예시
--install-daemon시스템 데몬으로 등록 (재부팅 시 자동 시작)서버·항상켜진 PC에 필수
--no-install-daemon데몬 등록 안 함 (수동 시작)테스트 환경, Docker 내부
--mode local로컬 전용 모드 (127.0.0.1 바인딩)개인 PC, 보안 최우선
--mode lanLAN 공개 모드 (0.0.0.0 바인딩)홈 서버, 내부망 공유
--no-onboard온보딩 없이 설치만CI/CD, 자동화 스크립트
--yes모든 프롬프트에 자동 yes무인 설치
--token TEXTGateway 토큰 사전 지정자동화 배포
--provider anthropicAI 공급자 사전 지정특정 공급자만 사용할 때
bash — 상황별 최적 온보딩 명령어
# ── 개인 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
# 전체 마법사 재실행 (기존 설정 유지하면서 변경)

🧙 온보딩 마법사 각 단계 상세 해설

1단계
에이전트 이름 & 페르소나 설정
AI 어시스턴트의 이름을 지정합니다. “Jarvis”, “Claw”, “Aria” 등 원하는 이름. 이 이름이 채팅 응답의 서명, TTS 음성의 자기소개, 시스템 프롬프트에 반영됩니다. 나중에 openclaw config set agents.defaults.name "새이름"으로 변경 가능합니다.
2단계
AI 모델 공급자 선택 & API Key 입력
Anthropic(Claude), OpenAI, Google, Groq, Ollama 등에서 선택. 여러 개를 나중에 추가할 수 있습니다. API Key는 ~/.openclaw/openclaw.json에 암호화 저장. 환경변수(ANTHROPIC_API_KEY 등)도 지원합니다.
3단계
워크스페이스 경로 설정
AI가 파일을 읽고 쓸 기본 디렉토리입니다. 기본값: ~/.openclaw/workspace. Obsidian 볼트 경로, Documents 폴더, 프로젝트 루트 등을 지정하면 AI가 해당 파일에 직접 접근합니다. 나중에 세션 중 경로를 변경할 수도 있습니다.
4단계
Gateway 모드 & 포트 설정
local(127.0.0.1, 보안), lan(0.0.0.0, 내부망 공개) 중 선택. 포트는 기본 18789. 이미 사용 중이면 다른 포트 지정. 외부 공개 서버라면 Cloudflare Tunnel이나 Nginx를 앞단에 두고 local 모드 권장.
5단계
채널 연결 (선택)
Telegram, WhatsApp, Discord 등을 온보딩 중에 바로 설정할 수 있습니다. 나중에 추가해도 됩니다. 채널별 설정 방법은 D6 섹션 참조.
6단계
데몬 등록 (–install-daemon)
systemd(Linux) 또는 launchd(macOS)에 서비스로 등록합니다. 재부팅해도 자동 시작. 서버 운영에 필수. Docker 환경이라면 Docker 자체가 프로세스를 관리하므로 이 단계는 건너뜁니다.

🔄 온보딩 이후 추가 설정 명령어

bash — 온보딩 후 즉시 필요한 추가 설정
# 워크스페이스 경로 변경
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
SECTIOND3

Control UI 완전 정복 — 전체 메뉴 설정 가이드

Control UI는 http://127.0.0.1:18789/에서 접근하는 OpenClaw의 웹 인터페이스입니다. 단순한 채팅 창을 넘어 Gateway 설정, 채널 관리, 플러그인 설치, 스킬 관리, 자동화 설정까지 모두 담당합니다.

🔑 최초 접속 — 페어링 승인 프로세스

1
브라우저에서 접속
http://127.0.0.1:18789/ 또는 http://localhost:18789/
2
“disconnected (1008): pairing required” 메시지 확인
새 기기/브라우저는 최초 1회 페어링 승인이 필요합니다. localhost 직접 접속은 자동 승인됩니다.
3
토큰 입력 또는 페어링 승인
설정 패널에 Gateway 토큰 입력. 또는 CLI에서 openclaw devices listopenclaw devices approve <requestId>
4
연결 완료
한번 페어링된 기기는 기억됩니다. 토큰 변경 전까지 재승인 불필요.

💬 Chat 탭 — 메인 대화 인터페이스 완전 가이드

기능위치설명
메시지 입력하단 텍스트 박스Enter 전송, Shift+Enter 줄바꿈. 파일 드래그&드롭으로 첨부 가능
이미지 첨부첨부 버튼 (클립)Vision 모델이 활성화된 경우 이미지 분석 가능
음성 입력마이크 버튼브라우저 내장 STT 사용. 말하기 → 자동 텍스트 변환 후 전송
모델 선택입력창 상단현재 세션에서 사용할 모델 변경. 세션 중 모델 전환 가능
슬래시 명령/ 입력/status, /skills, /help 등. 스킬에서 정의한 커스텀 명령도 가능
대화 기록왼쪽 사이드바이전 대화 목록. 세션 검색·삭제·이름 변경 가능
도구 카드메시지 내 인라인AI가 도구 사용 시 실행 내용이 접을 수 있는 카드로 표시됨
Thinking 표시메시지 상단Extended Thinking 활성화 시 AI의 추론 과정 표시 (Claude 전용)
재생성메시지 우클릭마지막 응답 다시 생성. 다른 모델로 재시도 가능

⚙️ Config 탭 — Gateway 설정 GUI 완전 가이드

Config 탭은 openclaw.json직접 편집하지 않고 GUI 폼으로 설정하는 곳입니다. 라이브 스키마에서 폼을 자동 생성하므로 항상 최신 설정 옵션을 보여줍니다.

Config 섹션주요 설정 항목설명
Agents → defaultsname, model, workspace, heartbeat에이전트 기본 설정. 이름·기본 모델·워크스페이스·Heartbeat 주기
Gatewayport, host, bind, authToken, controlUiGateway 수신 주소·포트·인증·Control UI 설정
Channels채널별 설정Telegram/WhatsApp/Discord 등 채널 토큰·접근 제어·그룹 설정
Modeldefault, failover, routing기본 모델·장애 조치 목록·작업 유형별 라우팅
Toolsexec, browser, web_search 등도구별 활성화/비활성화·허용/차단 목록
Pluginsentries설치된 플러그인별 설정. API 키·옵션
Automationheartbeat, standing_orders, cron자동화 관련 전체 설정
Sandboxbackend, allowedCommands코드 실행 격리 설정
💡
Config 탭 Raw JSON 에디터

GUI 폼으로 설정하기 어려운 복잡한 설정은 Config 탭 하단의 “Raw JSON” 버튼을 클릭해 직접 JSON을 편집할 수 있습니다. 저장 시 스키마 검증이 자동으로 실행되어 잘못된 설정을 방지합니다. 저장하면 Gateway가 즉시 hot reload합니다.

📡 Channels 탭 — 채널 관리 완전 가이드

기능설명
채널 목록현재 등록된 모든 채널과 연결 상태(초록/빨강) 표시
채널 추가“Add Channel” 버튼 → 채널 유형 선택 → 토큰/QR 설정
채널 상태 확인각 채널 카드의 Last seen, 메시지 수, 연결 시간 확인
페어링 관리허용된 사용자 목록 확인, 차단, 추가
QR 재스캔WhatsApp 세션 만료 시 QR 코드 재생성
채널 삭제채널 카드의 ⋮ 메뉴 → Remove
채널 라우팅어떤 채널의 메시지를 어떤 에이전트가 처리할지 설정

🧩 Plugins 탭 — 플러그인 설치 & 관리

플러그인패키지명기능설정 필요
WhatsApp@openclaw/whatsappWhatsApp 채널 연결QR 스캔
Claude Max Proxy@openclaw/claude-max-proxyClaude Max 구독 API 활용Claude.ai 로그인
Memory Wiki@openclaw/memory-wiki마크다운 기반 영속 메모리없음
Memory LanceDB@openclaw/memory-lancedb벡터 DB 기반 의미 검색 메모리없음
Codex Harness@openclaw/codex-harnessClaude 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-meetGoogle Meet 음성 참여·기록Google OAuth
Skill Workshop@openclaw/skill-workshop스킬 개발·테스트 도우미없음
bash — 플러그인 설치 & 관리 (CLI)
# 플러그인 설치
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 탭 — 시스템 상태 진단

bash — Health 탭 동등 CLI 명령어
# 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
SECTIOND4

config.json 심화 완전판 — 모든 필드 해설

OpenClaw의 설정 파일은 ~/.openclaw/openclaw.json (JSON5 형식 — 주석 허용)입니다. 스키마 검증이 엄격하므로 잘못된 키가 있으면 Gateway가 시작되지 않습니다. openclaw doctor로 오류를 확인하세요.

json5 — ~/.openclaw/openclaw.json 완전 레퍼런스
// ~/.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 포트 변경은 재시작이 필요합니다.

SECTIOND5

자동화 심화 — Cron · Heartbeat · TaskFlow · Hooks 완전 구현

📊 자동화 메커니즘 선택 가이드

메커니즘타이밍컨텍스트최적 용도
Cron (Scheduled Tasks)정확한 시간격리된 세션일일 리포트, 주간 분석, 정시 알림
Heartbeat대략적 주기메인 세션 공유이메일 체크, 캘린더 확인, 주변 상황 모니터링
TaskFlow즉시 실행독립 실행다단계 리서치, 복잡한 분석, 개정 추적
Standing Orders항상 (모든 세션)시스템 프롬프트 주입언어 규칙, 안전 점검, 항상 지켜야 할 지침
Hooks이벤트 발생 시이벤트 데이터 포함GitHub PR, Sentry 에러, 파일 변경 감지

⏰ Scheduled Tasks (Cron) 심화

bash — 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 심화 설정

json5 — Heartbeat 심화 설정 (openclaw.json)
{
  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는 여러 단계로 이루어진 복잡한 작업을 추적하고 관리합니다. 중간에 실패해도 어디까지 완료됐는지 기록하고, 필요하면 해당 단계부터 재시작할 수 있습니다.

bash — TaskFlow 실전 예시
# 대화에서 복잡한 다단계 작업 요청
# "다음 단계로 경쟁사 분석 리포트를 만들어줘:
#  1. 경쟁사 A, B, C의 최신 뉴스 수집
#  2. 각사의 강점·약점 분석
#  3. 시장 트렌드 요약
#  4. Word 리포트로 저장
#  5. 이메일로 발송
# 각 단계 완료시 알려줘"

# AI가 자동으로 TaskFlow로 처리:
# - 각 단계를 개별 태스크로 등록
# - 진행상황 추적
# - 실패 시 해당 단계부터 재시도 가능

# 태스크 목록 확인
openclaw tasks list
openclaw tasks show 

# 태스크 감사 로그
openclaw tasks audit

🪝 Hooks — 이벤트 기반 자동화 완전 구현

json5 — 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 심화 — 항상 지켜지는 규칙

json5 — 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,
      },
    ],
  },
}
SECTIOND6

채널 심화 설정 — 그룹·라우팅·접근 제어 완전 가이드

👥 Access Groups — 사용자 그룹별 권한 관리

Access Groups를 사용하면 사용자를 그룹으로 묶어 각 그룹별로 도구 사용 권한, 접근 가능한 채널, 사용 가능한 모델을 다르게 설정할 수 있습니다.

json5 — 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은 팀 에이전트가 처리하도록 분리할 수 있습니다.

json5 — Channel Routing 설정
{
  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 — 일방향 공지 채널

json5 — Broadcast 설정 및 사용
// Broadcast = AI가 여러 채널에 동시에 메시지 보내는 것
// 대화에서: "모든 채널에 서버 점검 공지 보내줘"

// config에서 broadcast 그룹 정의
{
  channels: {
    broadcastGroups: {
      "all": ["telegram", "discord", "slack"],  // 전체 공지
      "team": ["slack", "discord"],              // 팀 공지
      "personal": ["telegram"],                  // 개인 알림
    },
  },
}

💬 그룹 메시지 정책 심화

json5 — 그룹 메시지 상세 정책
{
  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: [],
      },
    },
  },
}
SECTIOND7

실사용 심화 레시피 20선 — 완전 구현 코드 포함

📝 레시피 1 — 완전 자동 이메일 처리 시스템

📁 ~/.openclaw/skills/email-manager/SKILL.md
markdown — SKILL.md: 이메일 자동 처리 시스템
---
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 기반 주식/코인 모니터링

bash — 스케줄 + 스킬 조합으로 시장 모니터링
# 오전 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 — 완전 자동 스마트홈 허브

📁 ~/.openclaw/skills/smart-home/SKILL.md
markdown — SKILL.md: 스마트홈 제어 완전 스킬
---
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 — 개발자 자율 버그 수정 에이전트

json5 — Sentry + GitHub 자동 버그 수정 설정
{
  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 고객 응대 봇

📁 ~/.openclaw/skills/customer-support/SKILL.md
markdown — SKILL.md: 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 두 번째 뇌 완전 연동

bash — 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 어시스턴트 (음성으로 말하면 음성으로 응답)

json5 — 음성 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 완전 양방향 연동

bash — 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 — 자동 사진 분류 & 기억 시스템

markdown — SKILL.md: 사진 자동 분류 시스템
---
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 — 개인 생산성 대시보드 (주간 자동 생성)

bash — 주간 생산성 대시보드 자동 생성
# 매주 일요일 오후 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으로 전송"
SECTIOND8

보안 심화 — 인증·샌드박스·원격 접근·위협 모델

🔐 Gateway 인증 모드 완전 가이드

인증 모드설정권장 환경보안 수준
shared-secret (토큰)auth.mode: "shared-secret"대부분의 경우 기본 권장🟢 높음
passwordauth.mode: "password"토큰 관리 어려울 때🟡 중간
trusted-proxyauth.mode: "trusted-proxy"Nginx/Cloudflare가 인증 처리할 때🟢 높음
allowTailscaleauth.allowTailscale: trueTailscale 네트워크 내 신뢰🟢 높음

🏖️ Exec Sandbox — 코드 실행 격리

json5 — 샌드박스 설정 3가지 모드
{
  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 원격 접근 설정

bash — 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에서 확인 가능
SECTIOND9

운영·모니터링·업데이트 완전 가이드

📊 상태 모니터링 명령어 완전 레퍼런스

bash — 운영 관리 명령어 완전판
# ── 상태 확인 ─────────────────────────────────────────
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 스키마 출력

🔄 업데이트 채널 & 관리

채널명령어특징권장 대상
stableopenclaw update --channel stable안정 릴리즈. 충분히 테스트됨프로덕션, 일반 사용자
dev (main)openclaw update --channel dev최신 기능, 가끔 버그 있음얼리어답터, 개발자
특정 버전openclaw update --version 2026.3.1정확한 버전 고정버전 안정성 필요 시
bash — 업데이트 & 백업 관리
# ── 업데이트 ──────────────────────────────────────────
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 doctoropenclaw doctor --fix → last-known-good 복원
Control UI 연결 불가 (1008 오류)openclaw devices listopenclaw devices approve <id>
Heartbeat 작동 안 함openclaw config get agents.defaults.heartbeatenabled: true 확인, 채널 설정 확인
스케줄 작업이 실행 안 됨openclaw schedule listpaused 여부 확인, openclaw schedule resume <name>
채널 메시지 수신 안 됨openclaw channels status토큰 유효성 확인, allowFrom 설정 확인
Exec 도구 Permission deniedopenclaw config get tools.execallowed 목록에 해당 명령 추가
모델 API 오류 (401/403)openclaw config get providersAPI 키 재설정: openclaw config set providers.anthropic.apiKey "새키"
🦞 심화편 완독 — 이제 당신은 OpenClaw 전문가입니다
  • 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 비서 시스템을 구축할 준비가 됐습니다. 실제 사용 중 막히는 부분이나 추가로 만들고 싶은 스킬이 있다면 댓글로 알려주세요!

Leave a reply

Please enter your comment!
Please enter your name here