OpenClaw는 LLM(거대 언어 모델)을 기반으로, 개인 서버와 일상을 자동화하고 관리하도록 설계된 오픈소스 AI 에이전트 게이트웨이임.
OpenClaw는 단순히 챗봇이 아니라, 당신의 서버 환경과 물리적 장치(Node)에 직접 접근하여 명령을 실행하는 '실행 엔진' 역할을 수행함.
맥미니 사야 하나요?
사용 편의 면에서는 맥미니가 좋습니다. 오픈클로 자체는 라즈베리파이나, 먼지 쌓인 노트북에도 잘 돌아갑니다. 인공지능 모듈을 맥미니에서 돌리는 것은 성능도 떨어지고, 느리기 때문에 LLM을 맥미니에서 돌리려고 사는 것은 추천하지 않습니다. 오픈클로에 연결할 LLM은 클로드의 오푸스(비싸지만 좋음), 오픈AI, 구글 제미나이 이런 것으로 시작 하세요.
llama.cpp 옵션에 -ngl 99 --n-cpu-moe 24 -> 24는 16gb vram 기준이니 8gb는 적당히 조절하면서 최적값 찾아봐. MoE 모델이라 활성화 파라미터만 vram에 올리면 충분히 실사용 가능한 속도 나옴.
.\llama-cli.exe -m Qwen3.5-35B-A3B-UD-MXFP4_MOE.gguf -ngl 28 --flash-attn --color -p "
OpenClaw는 Gateway라는 중앙 프로세스를 통해 작동함.
npm install -g openclaw@latest 명령어를 통해 설치하고 openclaw onboard 마법사로 설정함.오픈클로(OpenClaw) 설치부터 제미나이(Gemini) 무료 연동까지 완벽 가이드(feat. 구 클로드봇(Clawdbot) 설치 가이드)
openclaw uninstall --all --yes --non-interactive
| 명령어 | 용도 및 설명 |
|---|---|
| /status | 현재 세션의 상태, 사용 중인 모델, 토큰 사용량, 런타임 정보 등을 보여줘. |
| /model <name> | 현재 세션에서 사용할 모델을 지정해. (예: /model gemini-flash-latest) |
| /default-model <name> | 모든 새 세션의 기본 모델을 지정해. |
| /new | 현재 세션을 종료하고 새로운 세션을 시작해. (이전 컨텍스트 초기화) |
| /reset | /new와 비슷하게 세션을 초기화하고 새로 시작해. |
| /tools | 사용 가능한 모든 도구 목록을 보여줘. |
| /reasoning | 내 '생각하기' 모드를 켜거나 꺼. (켜면 내가 어떻게 추론하는지 볼 수 있어) |
| /thinking | /reasoning과 같은 기능이야. |
| /verbose | 상세 모드를 켜거나 꺼. (도구 출력 등을 더 자세히 보여줄 수 있어) |
| /history | 최근 대화 기록을 보여줘. |
| /profile <name> | 브라우저 도구에서 사용할 프로필을 지정해. (예: /profile chrome 또는 /profile openclaw) |
| /memory | MEMORY.md 파일 내용을 보여줘. |
openclaw gateway status openclaw gateway status --deep openclaw gateway status --json openclaw gateway install openclaw gateway restart openclaw gateway stop openclaw logs --follow openclaw doctor
처음 도입할 때, 에이전트에게 원하는 모든 기능을 아주 자세하게 설명해 주세요.
| 분야 | 유료클라우드 | 무료로컬 | |
|---|---|---|---|
| 💻코딩 | DeepSeek Coder v2 ( 월 20달러) | ||
| 🎙️ 음성 인식 | OpenAI Whisper (한달에 약 3달러) | ||
| 🖼️ 이미지 생성 | Gemini / Nano Banana Pro (달에 약 10달러 ) | x/z-image-turbo | |
| 🖼️ 이미지 인식 | 거의 모든 유료 클라우드 모델 | llava | |
| 🧾 구조화된 장기 기억 | (무료) Supermemory.ai | ||
| 🌐 웹 검색 및 브라우징 | Brave / Tavily | Brave는 일반 검색에 적합하고, Tavily는 연락처 정보 추출 등 특정 용도. | |
| 이메일 | Nylas 이 서비스는 무료 | ||
# Identity - 로컬 실행 환경을 우선하는 OpenClaw 에이전트 # Priority - 비용 최소화 > 편의성 > 상세 설명 # Cost Policy - 로컬 모델 우선 - 클라우드 사용 시 사전 비용 명시 - 토큰 증가 선택지는 대안을 먼저 제시 # Output Rules - 코드 요청 시 전체 코드 우선 제공 - 불필요한 설명 금지 # Web Policy - 6개월 이상 최신성 요구 시 웹 검색 필수
https://github.com/tobi/qmd 를 사용해서 장기 기억을 인덱싱하고 검색함.
openclaw memory status
작동하는 cron 예제.
{
"version": 1,
"jobs": [
{
"id": "d6206e6c-8544-4324-9062-435ba835864e",
"name": "아침 날씨 알림",
"enabled": true,
"createdAtMs": 1771753627753,
"updatedAtMs": 1771974387969,
"schedule": {
"expr": "1 8 * * *",
"kind": "cron",
"tz": "Asia/Seoul"
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"text": "Generate today's briefing: today's weather comparing yesterday's, use weather skill"
},
"delivery": {
"mode": "announce",
"channel": "heartbeat",
"to": "6913272833"
},
"state": {
"nextRunAtMs": 1772060460000,
"lastRunAtMs": 1771974300009,
"lastStatus": "ok",
"lastDurationMs": 87960,
"consecutiveErrors": 0,
"lastRunStatus": "ok",
"lastDeliveryStatus": "delivered",
"lastDelivered": true
}
}
]
}
# 💓 HEARTBEAT CHECKLIST CONTRACT: Reply HEARTBEAT_OK if nothing needs attention. Gateway silently drops OK-only replies. Only message the user if action is needed. --- ## 1. 🧠 Memory Maintenance - Check memory/ folder for .md files older than 3 days - If any daily log has actionable items not yet in MEMORY.md: - Extract: decisions, preferences, project states, learned facts - Merge into the correct section of MEMORY.md - After merge, mark the daily log as [MERGED] at the top - Skip entries that are just routine conversation (no lasting value) ## 2. 📋 Pending Tasks - Scan MEMORY.md for any items tagged #todo or #pending - If overdue → notify user - If blocked → note what's missing in MEMORY.md ## 3. 🤖 Subagent Status - Check if any subagents are currently active - Do NOT interrupt active subagents - If a subagent has been silent > 30min, flag it ## 4. 🔔 Proactive Actions - Only attempt if no active subagents are running - Examples: scheduled summaries, reminders, monitoring tasks ## 5. ✅ FINAL STEP (always last) - If nothing above requires user attention → reply HEARTBEAT_OK - Never send HEARTBEAT_OK before completing steps 1-4
# 매일 오전 7시 브리핑 (isolated 세션) openclaw cron add \ --name "Morning brief" \ --cron "0 7 * * *" \ --tz "Asia/Seoul" \ --session isolated \ --message "오늘 브리핑: 날씨, 캘린더, 이메일 요약" \ --announce # 20분 후 one-shot 리마인더 openclaw cron add \ --name "Meeting reminder" \ --at "20m" \ --session main \ --system-event "회의 시작 10분 전입니다." \ --wake now \ --delete-after-run openclaw cron add \ --name "Morning briefing" \ --cron "0 7 * * *" \ --tz "America/New_York" \ --session isolated \ --message "Generate today's briefing: weather, calendar, top emails, news summary." \ --model opus \ --announce \ --channel whatsapp \ --to "+15551234567" openclaw cron add \ --name "Morning briefing" \ --cron "0 8 * * *" \ --tz "Asia/Seoul" \ --session isolated \ --message "Generate today's briefing: today's weather comparing yesterday's, web_fetch https://news.naver.com" \ --model macmini \ --announce \ --channel telegram
Tailscale을 Clawdbot이 설치된 컴퓨터와 메인 컴퓨터에 설치하세요. 앞서 언급했듯이 저는 Windows를 사용하고 있는데(놀랍죠!), Tailscale을 통해 원격 데스크톱을 사용할 수 있고, Tailscale이 설치된 다른 컴퓨터의 웹 인터페이스를 통해 Clawdbot을 제어할 수도 있습니다. 또한, 서버에서 원격 데스크톱용 RDP 포트를 열 필요가 없으므로 보안 측면에서 유리합니다.
openclaw security audit –deep
chmod 700 ~/.openclaw chmod 600 ~/.openclaw/openclaw.json chmod 700 ~/.openclaw/credentials
컨텍스트 자동 압축 설정해주는 것이 좋다. 1M이라고 주장하는 제미나이도 너무 길어지면 오류난다. 150k~200K 이하가 적당함.
{
"meta": {
"comment": "Sanitized OpenClaw config example - replace placeholders with your values"
},
"agents": {
"defaults": {
"model": {
"comment": "Primary model + fallback chain. Keeps expensive models out of default path.",
"primary": "anthropic/claude-sonnet-4-5",
"fallbacks": [
"kimi-coding/k2p5",
"synthetic/hf:zai-org/GLM-4.7",
"openrouter/openai/gpt-5-mini",
"openrouter/openai/gpt-5-nano",
"openrouter/google/gemini-3-flash-preview",
"openrouter/google/gemini-2.5-flash-lite"
]
},
"models": {
"comment": "Model aliases for easier referencing",
"anthropic/claude-haiku-4-5": {
"alias": "haiku"
},
"anthropic/claude-sonnet-4-5": {
"alias": "sonnet"
}
},
"workspace": "/path/to/your/.openclaw/workspace",
"memorySearch": {
"comment": "Cheap embeddings for memory recall",
"sources": ["memory", "sessions"],
"experimental": {
"sessionMemory": true
},
"provider": "openai",
"model": "text-embedding-3-small"
},
"contextPruning": {
"comment": "Automatically prune old context, keep cache valid for 6h",
"mode": "cache-ttl",
"ttl": "6h",
"keepLastAssistants": 3
},
"compaction": {
"comment": "Memory flush settings - distill sessions to daily memory files",
"mode": "default",
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 40000,
"prompt": "Extract key decisions, state changes, lessons, blockers to memory/YYYY-MM-DD.md. Format: ## [HH:MM] Topic. Skip routine work. NO_FLUSH if nothing important.",
"systemPrompt": "Compacting session context. Extract only what's worth remembering. No fluff."
}
},
"heartbeat": {
"comment": "Use cheapest model for background heartbeat checks",
"model": "openrouter/openai/gpt-5-nano"
},
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
}
},
"list": [
{
"id": "main",
"default": true
}
]
},
"logging": {
"comment": "Redact sensitive data from tool output in logs",
"redactSensitive": "tools"
},
"tools": {
"web": {
"search": {
"enabled": true,
"apiKey": "YOUR_BRAVE_SEARCH_API_KEY"
},
"fetch": {
"enabled": true
}
}
},
"messages": {
"ackReactionScope": "group-mentions",
"tts": {
"auto": "inbound",
"provider": "edge",
"edge": {
"enabled": true,
"voice": "en-GB-RyanNeural"
}
}
},
"channels": {
"telegram": {
"enabled": true,
"dmPolicy": "pairing",
"botToken": "YOUR_TELEGRAM_BOT_TOKEN",
"groupPolicy": "allowlist",
"streamMode": "partial"
},
"discord": {
"enabled": true,
"token": "YOUR_DISCORD_BOT_TOKEN",
"groupPolicy": "allowlist",
"dm": {
"enabled": true,
"policy": "allowlist",
"allowFrom": ["YOUR_DISCORD_USER_ID"]
},
"guilds": {
"YOUR_DISCORD_GUILD_ID": {
"requireMention": false,
"users": ["YOUR_DISCORD_USER_ID"],
"channels": {
"*": {
"allow": true
}
}
}
}
}
},
"gateway": {
"comment": "SECURITY: Bind to loopback (localhost) only, not 0.0.0.0",
"port": 18789,
"mode": "local",
"bind": "loopback",
"auth": {
"mode": "token",
"token": "YOUR_GATEWAY_AUTH_TOKEN",
"allowTailscale": true
},
"tailscale": {
"mode": "serve",
"resetOnExit": true
}
},
"models": {
"comment": "Example: Add Synthetic provider for free GLM/Kimi models",
"mode": "merge",
"providers": {
"synthetic": {
"baseUrl": "https://api.synthetic.new/anthropic",
"api": "anthropic-messages",
"models": [
{
"id": "hf:zai-org/GLM-4.7",
"name": "GLM-4.7",
"reasoning": false,
"input": ["text"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 198000,
"maxTokens": 128000
},
{
"id": "hf:moonshotai/Kimi-K2.5",
"name": "Kimi K2.5",
"reasoning": true,
"input": ["text"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 256000,
"maxTokens": 8192
}
]
}
}
},
"auth": {
"comment": "API auth profiles - tokens stored in ~/.openclaw/credentials/",
"profiles": {
"kimi-coding:default": {
"provider": "kimi-coding",
"mode": "api_key"
},
"openrouter:default": {
"provider": "openrouter",
"mode": "api_key"
},
"synthetic:default": {
"provider": "synthetic",
"mode": "api_key"
},
"anthropic:default": {
"provider": "anthropic",
"mode": "token"
}
}
}
}
| 미니맥스 M2.7 | $0.30인 / $1.20아웃 | 204.8K | 코딩, 추론, 다중 턴 대화, 에이전트 워크플로 |
| 미니맥스 M2.5 | $0.30인 / $1.20아웃 | ~200K | 코딩, 도구 사용, 검색, 사무 업무 |
| GLM-4.7 | $0.60인 / $2.20아웃 | ~202K | 긴 맥락 추론, 열린 가중치, 하지만 느림 |
| K2.5 처럼 | $0.60인 / $3.00아웃 | 262K | 다중 모드, 시각적 코딩, 연구 |
| 딥시크 V3.2 | $0.26인 / $0.38아웃 | 163K | 가장 저렴한 옵션, 구조화된 출력 |
| Qwen3.5 플러스 | $0.12–$0.57 in / $0.69–$3.44 out | 최대 1M | 초장 텍스트, 다중 모드 에이전트 |
M4 실리콘의 경우 mlx 모델을 사용하는 것이 낫다고 함. Ollama보다는 편의성이 떨어짐. 모델이 플래시 어텐션을 켜고 작동하면 GGUF가 MLX보다 약간 더 빠르다는 주장도 있다.
메인모델은 똑똑하고 빨라야 하기 때문에 구글 젬민, 쳇지피티, 오푸스 등을 사용하고 자주 작동하는 Heartbeat나 각종 긴 시간이 걸리는 작업을 처리하는 서브에이전트는 로컬 모델을 사용하는 것을 추천한다.
| NAME | ID | SIZE | PROCESSOR | CONTEXT |
|---|---|---|---|---|
| qwen3.5:27b | 193ec05b1e80 | 37 GB | 33%/67% CPU/GPU | 200000 |
| qwen3.5:35b-a3b | 4af949f8bdf0 | 31 GB | 21%/79% CPU/GPU | 200000 |
| qwen3.5:9b | 6488c96fa5fa | 17 GB | 100% GPU | 200000 |
"한반도의 지정학적 중요성 알려줘"
### 요약 결국 한반도는 "안보적 위험 (핵 문제, 북대서양)" 과 "경제적 가치 (무역, 기술, 에너지 공급)" 이 충돌하는 지점이기 때문입니다. 따라서 세계 각국은 여기 의 상황 변화가 지역적 전쟁이나 경제 파장을 초래할 수 있으므로 항상 감시하고 있는 지정학적 "불안 요소"이자 동시에 "전략적 교차로"라고 평가됩니다.
## qwen3.5:4b
total duration: 2m9.078710125s load duration: 1.027773417s prompt eval count: 19 token(s) prompt eval duration: 214.916625ms prompt eval rate: 88.41 tokens/s eval count: 2381 token(s) eval duration: 2m5.437022108s eval rate: 18.98 tokens/s
## qwen3.5:9b
total duration: 2m16.405829917s load duration: 3.300296709s prompt eval count: 19 token(s) prompt eval duration: 353.761042ms prompt eval rate: 53.71 tokens/s eval count: 1757 token(s) eval duration: 2m10.881691527s eval rate: 13.42 tokens/s
mlx_lm.server --model mlx-community/Qwen3.5-9B-MLX-4bit --port 8000
## Qwen3.5:35b a3b mlx
Prompt: 19 tokens, 9.354 tokens-per-sec Generation: 1849 tokens, 48.713 tokens-per-sec Peak memory: 20.481 GB
mlx_lm.server --model mlx-community/Qwen3.5-35B-A3B-4bit --port 8000 python -m mlx_vlm generate --model mlx-community/Qwen3.5-35B-A3B-4bit --max-tokens 5000 --temperature 0.1 --prompt "한반도의 지정학적 중요성 알려줘"
## Qwen3.5:35b a3b (ollama)
total duration: 2m20.342998791s load duration: 11.054221333s prompt eval count: 19 token(s) prompt eval duration: 17.026247125s prompt eval rate: 1.12 tokens/s eval count: 1907 token(s) eval duration: 1m50.160557783s eval rate: 17.31 tokens/s
## gpt-oss:20b 13 GB
total duration: 1m29.23167875s load duration: 3.888069916s prompt eval count: 77 token(s) prompt eval duration: 500.265375ms prompt eval rate: 153.92 tokens/s eval count: 2197 token(s) eval duration: 1m23.066894938s eval rate: 26.45 tokens/s
## LFM2-24B-A2B 14 GB
total duration: 19.203788291s load duration: 2.480609416s prompt eval count: 18 token(s) prompt eval duration: 1.063728334s prompt eval rate: 16.92 tokens/s eval count: 848 token(s) eval duration: 15.406530919s eval rate: 55.04 tokens/s