OpenClaw에서 마이그레이션
anchor alias
anchor alias
OpenClaw에서 마이그레이션
hermes claw migrate은 OpenClaw(또는 레거시 Clawdbot/Moldbot) 설정을 Hermes로 가져옵니다. 이 가이드에서는 마이그레이션되는 항목, 구성 키 매핑, 마이그레이션 후 확인할 사항을 정확하게 다룹니다.
빠른 시작
# Preview then migrate (always shows a preview first, then asks to confirm)
hermes claw migrate
# Preview only, no changes
hermes claw migrate --dry-run
# Full migration including API keys, skip confirmation
hermes claw migrate --preset full --migrate-secrets --yes
마이그레이션에서는 변경하기 전에 항상 가져올 항목의 전체 미리보기를 표시합니다. 목록을 검토한 후 확인하여 계속 진행하세요.
기본적으로 ~/.openclaw/에서 읽습니다. 기존 ~/.clawdbot/ 또는 ~/.moltbot/ 디렉터리는 자동으로 감지됩니다. 레거시 구성 파일 이름(clawdbot.json, moltbot.json)과 동일합니다.
옵션
| 옵션 | 설명 |
|---|---|
--dry-run | 미리보기 전용 — 마이그레이션할 항목을 표시한 후 중지합니다. |
--preset <name> | full(모든 호환 설정) 또는 user-data(인프라 구성 제외) 두 사전 설정 모두 기본적으로 비밀을 가져오지 않습니다. --migrate-secrets을 명시적으로 전달하세요. |
--overwrite | 충돌 시 기존 Hermes 파일을 덮어씁니다(기본값: 계획이 충돌할 때 적용을 거부함). |
--migrate-secrets | API 키를 포함합니다. --preset full에서도 필요합니다. 사전 설정된 비밀 가져오기가 자동으로 없습니다. |
--no-backup | ~/.hermes/의 사전 마이그레이션 zip 스냅샷을 건너뜁니다(기본적으로 단일 복원 지점 아카이브는 적용 전에 ~/.hermes/backups/pre-migration-*.zip 아래에 기록되며 hermes import로 복원 가능). |
--source <path> | 사용자 정의 OpenClaw 디렉토리. |
--workspace-target <path> | AGENTS.md을(를) 배치할 위치입니다. |
--skill-conflict <mode> | skip(기본값), overwrite 또는 rename. |
--yes | 미리보기 후 확인 메시지를 건너뜁니다. |
마이그레이션되는 항목
페르소나, 기억, 지침
| 무엇 | OpenClaw 소스 | 헤르메스 목적지 | 메모 |
|---|---|---|---|
| 페르소나 | workspace/SOUL.md | ~/.hermes/SOUL.md | 직접 복사 |
| 작업공간 지침 | workspace/AGENTS.md | AGENTS.md(--workspace-target) | --workspace-target 플래그가 필요합니다. |
| 장기 기억 | workspace/MEMORY.md | ~/.hermes/memories/MEMORY.md | 항목으로 구문 분석하고, 기존 항목과 병합하고, 중복을 제거했습니다. § 구분 기호를 사용합니다. |
| 사용자 프로필 | workspace/USER.md | ~/.hermes/memories/USER.md | 메모리와 동일한 항목 병합 논리. |
| 일일 메모리 파일 | workspace/memory/*.md | ~/.hermes/memories/MEMORY.md | 모든 일일 파일이 메인 메모리에 병합되었습니다. |
작업공간 파일은 대체 경로로 workspace.default/ 및 workspace-main/에서도 확인됩니다(OpenClaw는 최신 버전에서 workspace/로 이름을 workspace-main/으로 바꾸었고 다중 에이전트 설정에는 workspace-{agentId}을 사용합니다).
스킬(4개 소스)
| 소스 | OpenClaw 위치 | 헤르메스 목적지 |
|---|---|---|
| 작업 공간 기술 | workspace/skills/ | ~/.hermes/skills/openclaw-imports/ |
| 관리/공유 기술 | ~/.openclaw/skills/ | ~/.hermes/skills/openclaw-imports/ |
| 개인 교차 프로젝트 | ~/.agents/skills/ | ~/.hermes/skills/openclaw-imports/ |
| 프로젝트 수준 공유 | workspace/.agents/skills/ | ~/.hermes/skills/openclaw-imports/ |
스킬 충돌은 --skill-conflict에 의해 처리됩니다. skip은 기존 Hermes 스킬을 떠나고, overwrite는 이를 대체하고, rename은 -imported 복사본을 생성합니다.
모델 및 제공자 구성
| 무엇 | OpenClaw 구성 경로 | 헤르메스 목적지 | 메모 |
|---|---|---|---|
| 기본 모델 | agents.defaults.model | config.yaml → model | 문자열 또는 {primary, fallbacks} 객체일 수 있습니다. |
| 맞춤 제공업체 | models.providers.* | config.yaml → custom_providers | baseUrl, apiType/api 매핑 — 짧은("openai", "anthropic") 값과 하이픈으로 연결된("openai-completions", "anthropic-messages", "google-generative-ai") 값을 모두 처리합니다. |
| 제공자 API 키 | models.providers.*.apiKey | ~/.hermes/.env | --migrate-secrets이 필요합니다. 아래의 API 키 확인을 참조하세요. |
에이전트 행동
| 무엇 | OpenClaw 구성 경로 | 헤르메스 구성 경로 | 매핑 |
|---|---|---|---|
| 최대 회전 | agents.defaults.timeoutSeconds | agent.max_turns | timeoutSeconds / 10, 최대 200개 |
| 자세한 모드 | agents.defaults.verboseDefault | agent.verbose | "끄기" / "켜기" / "가득찬" |
| 추론 노력 | agents.defaults.thinkingDefault | agent.reasoning_effort | "항상"/"높음"/"x높음" → "높음", "자동"/"중간"/"적응형" → "중간", "끄기"/"낮음"/"없음"/"최소" → "낮음" |
| 압축 | agents.defaults.compaction.mode | compression.enabled | "off" → false, 기타 → true |
| 압축 모델 | agents.defaults.compaction.model | compression.summary_model | 직접 문자열 복사 |
| 인간의 지연 | agents.defaults.humanDelay.mode | human_delay.mode | "자연" / "맞춤" / "오프" |
| 인간의 지연 타이밍 | agents.defaults.humanDelay.minMs / .maxMs | human_delay.min_ms / .max_ms | 직접 복사 |
| 시간대 | agents.defaults.userTimezone | timezone | 직접 문자열 복사 |
| 실행 시간 초과 | tools.exec.timeoutSec | terminal.timeout | 직접 복사(필드는 timeout이 아니라 timeoutSec임) |
| 도커 샌드박스 | agents.defaults.sandbox.backend | terminal.backend | "도커" → "도커" |
| 도커 이미지 | agents.defaults.sandbox.docker.image | terminal.docker_image | 직접 복사 |
세션 재설정 정책
| OpenClaw 구성 경로 | 헤르메스 구성 경로 | 메모 |
|---|---|---|
session.reset.mode | session_reset.mode | "매일", "유휴" 또는 둘 다 |
session.reset.atHour | session_reset.at_hour | 일일 재설정 시간(0~23) |
session.reset.idleMinutes | session_reset.idle_minutes | 비활성 시간(분) |
참고: OpenClaw에는 session.resetTriggers(["daily", "idle"]과 같은 간단한 문자열 배열)도 있습니다. 구조화된 session.reset이 없으면 마이그레이션은 resetTriggers에서 추론하는 것으로 대체됩니다.
MCP 서버
| OpenClaw 분야 | 헤르메스 필드 | 메모 |
|---|---|---|
mcp.servers.*.command | mcp_servers.*.command | 스튜디오 트랜스포트 |
mcp.servers.*.args | mcp_servers.*.args | |
mcp.servers.*.env | mcp_servers.*.env | |
mcp.servers.*.cwd | mcp_servers.*.cwd | |
mcp.servers.*.url | mcp_servers.*.url | HTTP/SSE 전송 |
mcp.servers.*.tools.include | mcp_servers.*.tools.include | 도구 필터링 |
mcp.servers.*.tools.exclude | mcp_servers.*.tools.exclude |
TTS(텍스트 음성 변환)
TTS 설정은 다음 우선순위로 두 개 OpenClaw 구성 위치에서 읽혀집니다.
messages.tts.providers.{provider}.*(표준 위치)- 최상위
talk.providers.{provider}.*(대체) - 레거시 플랫 키
messages.tts.{provider}.*(가장 오래된 형식)
| 무엇 | 헤르메스 목적지 |
|---|---|
| 제공자 이름 | config.yaml → tts.provider |
| ElevenLabs 음성 ID | config.yaml → tts.elevenlabs.voice_id |
| ElevenLabs 모델 ID | config.yaml → tts.elevenlabs.model_id |
| OpenAI 모델 | config.yaml → tts.openai.model |
| 오픈AI 음성 | config.yaml → tts.openai.voice |
| 엣지 TTS 음성 | config.yaml → tts.edge.voice (OpenClaw의 이름이 "edge"에서 "microsoft"로 변경되었습니다. 둘 다 인식됩니다.) |
| TTS 자산 | ~/.hermes/tts/ (파일 복사) |
메시징 플랫폼
| 플랫폼 | OpenClaw 구성 경로 | 헤르메스 .env 변수 | 메모 |
|---|---|---|---|
| 텔레그램 | channels.telegram.botToken 또는 .accounts.default.botToken | TELEGRAM_BOT_TOKEN | 토큰은 문자열 또는 SecretRef일 수 있습니다. 평면 및 계정 레이아웃이 모두 지원됩니다. |
| 텔레그램 | credentials/telegram-default-allowFrom.json | TELEGRAM_ALLOWED_USERS | allowFrom 배열에서 쉼표로 결합됨 |
| 불화 | channels.discord.token 또는 .accounts.default.token | DISCORD_BOT_TOKEN | |
| 불화 | channels.discord.allowFrom 또는 .accounts.default.allowFrom | DISCORD_ALLOWED_USERS | |
| 슬랙 | channels.slack.botToken 또는 .accounts.default.botToken | SLACK_BOT_TOKEN | |
| 슬랙 | channels.slack.appToken 또는 .accounts.default.appToken | SLACK_APP_TOKEN | |
| 슬랙 | channels.slack.allowFrom 또는 .accounts.default.allowFrom | SLACK_ALLOWED_USERS | |
| 왓츠앱 | channels.whatsapp.allowFrom 또는 .accounts.default.allowFrom | WHATSAPP_ALLOWED_USERS | Baileys QR 페어링을 통한 인증 - 마이그레이션 후 다시 페어링 필요 |
| 신호 | channels.signal.account 또는 .accounts.default.account | SIGNAL_ACCOUNT | |
| 신호 | channels.signal.httpUrl 또는 .accounts.default.httpUrl | SIGNAL_HTTP_URL | |
| 신호 | channels.signal.allowFrom 또는 .accounts.default.allowFrom | SIGNAL_ALLOWED_USERS | |
| 매트릭스 | channels.matrix.accessToken 또는 .accounts.default.accessToken | MATRIX_ACCESS_TOKEN | accessToken 사용(botToken 아님) |
| 가장 중요한 | channels.mattermost.botToken 또는 .accounts.default.botToken | MATTERMOST_BOT_TOKEN |
기타 구성
| 무엇 | OpenClaw 경로 | 헤르메스의 길 | 메모 |
|---|---|---|---|
| 승인 모드 | approvals.exec.mode | config.yaml → approvals.mode | "자동"→"끄기", "항상"→"수동", "스마트"→"스마트" |
| 명령 허용 목록 | exec-approvals.json | config.yaml → command_allowlist | 패턴 병합 및 중복 제거 |
| 브라우저 CDP URL | browser.cdpUrl | config.yaml → browser.cdp_url | |
| 브라우저 헤드리스 | browser.headless | config.yaml → browser.headless | |
| 용감한 검색 키 | tools.web.search.brave.apiKey | .env → BRAVE_API_KEY | --migrate-secrets 필요 |
| 게이트웨이 인증 토큰 | gateway.auth.token | .env → HERMES_GATEWAY_TOKEN | --migrate-secrets 필요 |
| 작업 디렉토리 | agents.defaults.workspace | .env → MESSAGING_CWD |
보관됨(직접 Hermes와 동일하지 않음)
수동 검토를 위해 ~/.hermes/migration/openclaw/<timestamp>/archive/에 저장됩니다.
| 무엇 | 아카이브 파일 | 헤르메스에서 재현하는 방법 |
|---|---|---|
IDENTITY.md | archive/workspace/IDENTITY.md | SOUL.md에 병합 |
TOOLS.md | archive/workspace/TOOLS.md | Hermes에는 도구 지침이 내장되어 있습니다. |
HEARTBEAT.md | archive/workspace/HEARTBEAT.md | 정기적인 작업에 크론 작업 사용 |
BOOTSTRAP.md | archive/workspace/BOOTSTRAP.md | 컨텍스트 파일 또는 기술 사용 |
| 크론 작업 | archive/cron-config.json | hermes cron create으로 다시 생성 |
| 플러그인 | archive/plugins-config.json | 플러그인 가이드를 참조하세요. |
| 후크/웹훅 | archive/hooks-config.json | hermes webhook 또는 게이트웨이 후크를 사용하세요. |
| 메모리 백엔드 | archive/memory-backend-config.json | hermes honcho을 통해 구성 |
| 기술 등록 | archive/skills-registry-config.json | hermes skills config 사용 |
| UI/ID | archive/ui-identity-config.json | /skin 명령을 사용하세요. |
| 로깅 | archive/logging-diagnostics-config.json | config.yaml 로깅 섹션에 설정 |
| 다중 에이전트 목록 | archive/agents-list.json | Hermes 프로필 사용 |
| 채널 바인딩 | archive/bindings.json | 플랫폼별 수동 설정 |
| 복합채널 | archive/channels-deep-config.json | 수동 플랫폼 구성 |
API 키 확인
--migrate-secrets이 활성화되면 API 키는 4가지 소스에서 우선순위에 따라 수집됩니다.
- 구성 값 —
models.providers.*.apiKey및openclaw.json의 TTS 제공자 키 - 환경 파일 —
~/.openclaw/.env(OPENROUTER_API_KEY,ANTHROPIC_API_KEY등과 같은 키) - 환경 하위 개체 구성 —
openclaw.json→"env"또는"env"."vars"(일부 설정에서는 별도의.env파일 대신 여기에 키를 저장합니다) - 인증 프로필 —
~/.openclaw/agents/main/agent/auth-profiles.json(에이전트별 자격 증명)
구성 값이 우선순위를 갖습니다. 각 후속 소스는 남은 공백을 채웁니다.
지원되는 주요 대상
OPENROUTER_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, GEMINI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY, ELEVENLABS_API_KEY, TELEGRAM_BOT_TOKEN, VOICE_TOOLS_OPENAI_KEY
이 허용 목록에 없는 키는 복사되지 않습니다.
SecretRef 처리
토큰 및 API 키에 대한 OpenClaw 구성 값은 세 가지 형식일 수 있습니다.
// Plain string
"channels": { "telegram": { "botToken": "123456:ABC-DEF..." } }
// Environment template
"channels": { "telegram": { "botToken": "${TELEGRAM_BOT_TOKEN}" } }
// SecretRef object
"channels": { "telegram": { "botToken": { "source": "env", "id": "TELEGRAM_BOT_TOKEN" } } }
마이그레이션은 세 가지 형식을 모두 해결합니다. source: "env"이 있는 env 템플릿 및 SecretRef 개체의 경우 ~/.openclaw/.env 및 openclaw.json env 하위 개체의 값을 조회합니다. source: "file" 또는 source: "exec"이 있는 SecretRef 개체는 자동으로 확인할 수 없습니다. 마이그레이션 시 이에 대해 경고하며 해당 값은 hermes config set을 통해 수동으로 Hermes에 추가되어야 합니다.
마이그레이션 후
-
이전 보고서를 확인하세요 — 완료 시 이전된 항목, 건너뛴 항목, 충돌하는 항목의 수가 인쇄됩니다.
-
보관된 파일 검토 —
~/.hermes/migration/openclaw/<timestamp>/archive/에 있는 모든 항목은 수동 주의가 필요합니다. -
새 세션 시작 — 가져온 스킬과 메모리 항목은 현재 세션이 아닌 새 세션에 적용됩니다.
-
API 키 확인 —
hermes status을 실행하여 제공자 인증을 확인하세요. -
메시징 테스트 — 플랫폼 토큰을 마이그레이션한 경우 게이트웨이를 다시 시작하세요:
systemctl --user restart hermes-gateway -
세션 정책을 확인하세요 —
hermes config get session_reset이 예상과 일치하는지 확인하세요. -
WhatsApp 다시 페어링 — WhatsApp은 토큰 마이그레이션이 아닌 QR 코드 페어링(Baileys)을 사용합니다.
hermes whatsapp을 실행하여 페어링합니다. -
아카이브 정리 — 모든 것이 작동하는지 확인한 후
hermes claw cleanup을 실행하여 남은 OpenClaw 디렉터리의 이름을.pre-migration/로 바꿉니다(상태 혼동 방지).
문제 해결
"OpenClaw 디렉토리를 찾을 수 없습니다"
마이그레이션에서는 ~/.openclaw/, ~/.clawdbot/, ~/.moltbot/을 차례로 확인합니다. 다른 곳에 설치한 경우 --source /path/to/your/openclaw을 사용하세요.
"제공자 API 키를 찾을 수 없습니다."
키는 OpenClaw 버전에 따라 여러 위치에 저장될 수 있습니다. models.providers.*.apiKey 아래의 openclaw.json 인라인, ~/.openclaw/.env, openclaw.json"env" 하위 개체 또는 agents/main/agent/auth-profiles.json. 마이그레이션에서는 네 가지를 모두 확인합니다. 키가 source: "file" 또는 source: "exec" SecretRefs를 사용하는 경우 자동으로 확인할 수 없습니다. hermes config set을 통해 추가하세요.
마이그레이션 후 스킬이 나타나지 않습니다.
가져온 스킬은 ~/.hermes/skills/openclaw-imports/에 있습니다. 적용하려면 새 세션을 시작하거나 /skills을 실행하여 로드되었는지 확인하세요.
TTS 음성이 마이그레이션되지 않았습니다.
OpenClaw는 TTS 설정을 messages.tts.providers.*과 최상위 talk 구성의 두 위치에 저장합니다. 마이그레이션에서는 두 가지를 모두 확인합니다. OpenClaw UI를 통해 음성 ID를 설정한 경우(다른 경로에 저장됨) 수동으로 설정해야 할 수도 있습니다: hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID.