Pular para o conteúdo principal

Documentação oficial desta página · v0.20.6

Migrar do OpenClaw

O hermes claw migrate importa a sua configuração do OpenClaw (ou do antigo Clawdbot/Moldbot) para o Hermes. Este guia mostra exatamente o que é migrado, o mapeamento das chaves de configuração e o que conferir depois da migração.

observação

Está vindo do Claude Code ou do OpenAI Codex CLI? Use o hermes import-agent.

dica

Se a sua instalação do OpenClaw usava vários provedores, o hermes setup --portal reduz tudo a um único OAuth — mais de 300 modelos e o Tool Gateway num só login. Veja Nous Portal.

Início rápido​

# Prévia e migração (sempre mostra uma prévia antes e pede confirmação)
hermes claw migrate

# Só a prévia, sem alterar nada
hermes claw migrate --dry-run

# Migração completa incluindo chaves de API, sem confirmação
hermes claw migrate --preset full --migrate-secrets --yes

A migração sempre mostra uma prévia completa do que será importado antes de mudar qualquer coisa. Revise a lista e confirme para seguir.

Por padrão, lê de ~/.openclaw/. Diretórios antigos ~/.clawdbot/ ou ~/.moltbot/ são detectados automaticamente. O mesmo vale para os nomes antigos de arquivo de configuração (clawdbot.json, moltbot.json).

Opções​

OpçãoDescrição
--dry-runSó a prévia — para depois de mostrar o que seria migrado.
--preset <name>full (todas as configurações compatíveis) ou user-data (exclui a configuração de infraestrutura). Nenhum dos dois importa segredos por padrão — passe --migrate-secrets explicitamente.
--overwriteSobrescreve arquivos existentes do Hermes em caso de conflito (por padrão, a migração se recusa a aplicar quando o plano tem conflitos).
--migrate-secretsInclui as chaves de API. Necessário mesmo com --preset full — nenhum preset importa segredos em silêncio.
--no-backupPula o snapshot zip de ~/.hermes/ feito antes da migração (por padrão, um único arquivo de ponto de restauração é gravado antes de aplicar, em ~/.hermes/backups/pre-migration-*.zip; restaurável com hermes import).
--source <path>Diretório do OpenClaw personalizado.
--workspace-target <path>Onde colocar o AGENTS.md.
--skill-conflict <mode>skip (padrão), overwrite ou rename.
--yesPula a confirmação depois da prévia.

O que é migrado​

Persona, memória e instruções​

O quêOrigem no OpenClawDestino no HermesObservações
Personaworkspace/SOUL.md~/.hermes/SOUL.mdCópia direta
Instruções do espaço de trabalhoworkspace/AGENTS.mdAGENTS.md em --workspace-targetExige a opção --workspace-target
Memória de longo prazoworkspace/MEMORY.md~/.hermes/memories/MEMORY.mdÉ dividida em entradas, mesclada com as existentes e deduplicada. Usa o delimitador §.
Perfil do usuárioworkspace/USER.md~/.hermes/memories/USER.mdMesma lógica de mesclagem por entrada da memória.
Arquivos de memória diáriaworkspace/memory/*.md~/.hermes/memories/MEMORY.mdTodos os arquivos diários são mesclados na memória principal.

Os arquivos do espaço de trabalho também são procurados em workspace.default/ e workspace-main/ como caminhos alternativos (o OpenClaw renomeou workspace/ para workspace-main/ nas versões recentes e usa workspace-{agentId} em instalações com vários agentes).

Skills (4 origens)​

OrigemLocal no OpenClawDestino no Hermes
Skills do espaço de trabalhoworkspace/skills/~/.hermes/skills/openclaw-imports/
Skills gerenciadas/compartilhadas~/.openclaw/skills/~/.hermes/skills/openclaw-imports/
Pessoais entre projetos~/.agents/skills/~/.hermes/skills/openclaw-imports/
Compartilhadas no projetoworkspace/.agents/skills/~/.hermes/skills/openclaw-imports/

Conflitos de skill são tratados pelo --skill-conflict: skip mantém a skill que já existe no Hermes, overwrite substitui e rename cria uma cópia com sufixo -imported.

Configuração de modelos e provedores​

O quêCaminho na config do OpenClawDestino no HermesObservações
Modelo padrãoagents.defaults.modelconfig.yaml → modelPode ser uma string ou um objeto {primary, fallbacks}
Provedores personalizadosmodels.providers.*config.yaml → custom_providers (migrado automaticamente para o dicionário canônico providers: na próxima migração de configuração do hermes update)Mapeia baseUrl, apiType/api — lida tanto com os valores curtos ("openai", "anthropic") quanto com os hifenizados ("openai-completions", "anthropic-messages", "google-generative-ai")
Chaves de API dos provedoresmodels.providers.*.apiKey~/.hermes/.envExige --migrate-secrets. Veja Resolução de chaves de API abaixo.

Comportamento do agente​

O quêCaminho na config do OpenClawCaminho na config do HermesMapeamento
Máximo de turnosagents.defaults.timeoutSecondsagent.max_turnstimeoutSeconds / 10, limitado a 200
Modo verbosoagents.defaults.verboseDefaultagent.verbose"off" / "on" / "full"
Esforço de raciocínioagents.defaults.thinkingDefaultagent.reasoning_effort"always"/"high"/"xhigh" → "high", "auto"/"medium"/"adaptive" → "medium", "off"/"low"/"none"/"minimal" → "low"
Compressãoagents.defaults.compaction.modecompression.enabled"off" → false, qualquer outro valor → true
Modelo de compressãoagents.defaults.compaction.modelcompression.summary_modelCópia direta da string
Atraso humanoagents.defaults.humanDelay.modehuman_delay.mode"natural" / "custom" / "off"
Tempos do atraso humanoagents.defaults.humanDelay.minMs / .maxMshuman_delay.min_ms / .max_msCópia direta
Fuso horárioagents.defaults.userTimezonetimezoneCópia direta da string
Timeout de execuçãotools.exec.timeoutSecterminal.timeoutCópia direta (o campo é timeoutSec, não timeout)
Sandbox Dockeragents.defaults.sandbox.backendterminal.backend"docker" → "docker"
Imagem Dockeragents.defaults.sandbox.docker.imageterminal.docker_imageCópia direta

Políticas de reinício de sessão​

Caminho na config do OpenClawCaminho na config do HermesObservações
session.reset.modesession_reset.mode"daily", "idle" ou os dois
session.reset.atHoursession_reset.at_hourHora (0–23) do reinício diário
session.reset.idleMinutessession_reset.idle_minutesMinutos de inatividade

Observação: o OpenClaw também tem session.resetTriggers (um vetor simples de strings, como ["daily", "idle"]). Se o session.reset estruturado não existir, a migração cai para a inferência a partir do resetTriggers.

Servidores MCP​

Campo do OpenClawCampo do HermesObservações
mcp.servers.*.commandmcp_servers.*.commandTransporte stdio
mcp.servers.*.argsmcp_servers.*.args
mcp.servers.*.envmcp_servers.*.env
mcp.servers.*.cwdmcp_servers.*.cwd
mcp.servers.*.urlmcp_servers.*.urlTransporte HTTP/SSE
mcp.servers.*.tools.includemcp_servers.*.tools.includeFiltro de ferramentas
mcp.servers.*.tools.excludemcp_servers.*.tools.exclude

TTS (síntese de voz)​

As configurações de TTS são lidas de dois locais da configuração do OpenClaw, nesta ordem de prioridade:

  1. messages.tts.providers.{provider}.* (local canônico)
  2. talk.providers.{provider}.* no nível raiz (alternativa)
  3. Chaves planas antigas messages.tts.{provider}.* (formato mais velho)
O quêDestino no Hermes
Nome do provedorconfig.yaml → tts.provider
ID de voz do ElevenLabsconfig.yaml → tts.elevenlabs.voice_id
ID de modelo do ElevenLabsconfig.yaml → tts.elevenlabs.model_id
Modelo da OpenAIconfig.yaml → tts.openai.model
Voz da OpenAIconfig.yaml → tts.openai.voice
Voz do Edge TTSconfig.yaml → tts.edge.voice (o OpenClaw renomeou "edge" para "microsoft" — os dois são reconhecidos)
Arquivos de TTS~/.hermes/tts/ (cópia de arquivo)

Plataformas de mensagens​

PlataformaCaminho na config do OpenClawVariável no .env do HermesObservações
Telegramchannels.telegram.botToken ou .accounts.default.botTokenTELEGRAM_BOT_TOKENO token pode ser uma string ou um SecretRef. Os dois formatos, plano e por contas, são suportados.
Telegramcredentials/telegram-default-allowFrom.jsonTELEGRAM_ALLOWED_USERSJuntado por vírgulas a partir do vetor allowFrom[]
Discordchannels.discord.token ou .accounts.default.tokenDISCORD_BOT_TOKEN
Discordchannels.discord.allowFrom ou .accounts.default.allowFromDISCORD_ALLOWED_USERS
Slackchannels.slack.botToken ou .accounts.default.botTokenSLACK_BOT_TOKEN
Slackchannels.slack.appToken ou .accounts.default.appTokenSLACK_APP_TOKEN
Slackchannels.slack.allowFrom ou .accounts.default.allowFromSLACK_ALLOWED_USERS
WhatsAppchannels.whatsapp.allowFrom ou .accounts.default.allowFromWHATSAPP_ALLOWED_USERSAutenticação por pareamento com QR do Baileys — é preciso parear de novo depois da migração
Signalchannels.signal.account ou .accounts.default.accountSIGNAL_ACCOUNT
Signalchannels.signal.httpUrl ou .accounts.default.httpUrlSIGNAL_HTTP_URL
Signalchannels.signal.allowFrom ou .accounts.default.allowFromSIGNAL_ALLOWED_USERS
Matrixchannels.matrix.accessToken ou .accounts.default.accessTokenMATRIX_ACCESS_TOKENUsa accessToken (não botToken)
Mattermostchannels.mattermost.botToken ou .accounts.default.botTokenMATTERMOST_BOT_TOKEN

Outras configurações​

O quêCaminho no OpenClawCaminho no HermesObservações
Modo de aprovaçãoapprovals.exec.modeconfig.yaml → approvals.mode"auto"→"off", "always"→"manual", "smart"→"smart"
Lista de comandos permitidosexec-approvals.jsonconfig.yaml → command_allowlistPadrões mesclados e deduplicados
URL do CDP do navegadorbrowser.cdpUrlconfig.yaml → browser.cdp_url
Navegador headlessbrowser.headlessconfig.yaml → browser.headless
Chave de busca do Bravetools.web.search.brave.apiKey.env → BRAVE_API_KEYExige --migrate-secrets
Token de autenticação do gatewaygateway.auth.token.env → HERMES_GATEWAY_TOKENExige --migrate-secrets
Diretório de trabalhoagents.defaults.workspaceconfig.yaml → terminal.cwdMigrações antigas ainda podem gerar MESSAGING_CWD como alternativa de compatibilidade

Arquivado (sem equivalente direto no Hermes)​

Estes itens são salvos em ~/.hermes/migration/openclaw/<timestamp>/archive/ para revisão manual:

O quêArquivo no acervoComo recriar no Hermes
IDENTITY.mdarchive/workspace/IDENTITY.mdMescle no SOUL.md
TOOLS.mdarchive/workspace/TOOLS.mdO Hermes já traz instruções de ferramentas embutidas
HEARTBEAT.mdarchive/workspace/HEARTBEAT.mdUse tarefas cron para o que é periódico
BOOTSTRAP.mdarchive/workspace/BOOTSTRAP.mdUse arquivos de contexto ou skills
Tarefas cronarchive/cron-config.jsonRecrie com hermes cron create
Pluginsarchive/plugins-config.jsonVeja o guia de plugins
Hooks/webhooksarchive/hooks-config.jsonUse hermes webhook ou os hooks do gateway
Backend de memóriaarchive/memory-backend-config.jsonConfigure com hermes honcho
Registro de skillsarchive/skills-registry-config.jsonUse hermes skills config
Interface/identidadearchive/ui-identity-config.jsonUse o comando /skin
Logsarchive/logging-diagnostics-config.jsonAjuste na seção de logging do config.yaml
Lista de vários agentesarchive/agents-list.jsonUse os perfis do Hermes
Vínculos de canalarchive/bindings.jsonConfiguração manual por plataforma
Canais complexosarchive/channels-deep-config.jsonConfiguração manual da plataforma

Resolução de chaves de API​

Com o --migrate-secrets ativado, as chaves de API são coletadas de quatro origens, nesta ordem de prioridade:

  1. Valores da configuração — models.providers.*.apiKey e as chaves dos provedores de TTS no openclaw.json
  2. Arquivo de ambiente — ~/.openclaw/.env (chaves como OPENROUTER_API_KEY, ANTHROPIC_API_KEY etc.)
  3. Sub-objeto env da configuração — openclaw.json → "env" ou "env"."vars" (algumas instalações guardam as chaves aí em vez de num .env separado)
  4. Perfis de autenticação — ~/.openclaw/agents/main/agent/auth-profiles.json (credenciais por agente)

Os valores da configuração têm prioridade. Cada origem seguinte preenche o que ainda estiver faltando.

Destinos de chave suportados​

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

Chaves fora dessa lista nunca são copiadas.

Tratamento de SecretRef​

Na configuração do OpenClaw, tokens e chaves de API podem estar em três formatos:

// String simples
"channels": { "telegram": { "botToken": "123456:ABC-DEF..." } }

// Template de variável de ambiente
"channels": { "telegram": { "botToken": "${TELEGRAM_BOT_TOKEN}" } }

// Objeto SecretRef
"channels": { "telegram": { "botToken": { "source": "env", "id": "TELEGRAM_BOT_TOKEN" } } }

A migração resolve os três formatos. Para templates de ambiente e objetos SecretRef com source: "env", ela busca o valor em ~/.openclaw/.env e no sub-objeto env do openclaw.json. Objetos SecretRef com source: "file" ou source: "exec" não têm como ser resolvidos automaticamente — a migração avisa sobre eles, e esses valores precisam ser adicionados ao Hermes manualmente com hermes config set.

Depois da migração​

  1. Confira o relatório da migração — ele é impresso ao final, com a contagem de itens migrados, pulados e em conflito.

  2. Revise os arquivos arquivados — tudo que estiver em ~/.hermes/migration/openclaw/<timestamp>/archive/ precisa de atenção manual.

  3. Comece uma sessão nova — skills e entradas de memória importadas só valem em sessões novas, não na atual.

  4. Verifique as chaves de API — rode hermes status para conferir a autenticação nos provedores.

  5. Teste as mensagens — se você migrou tokens de plataforma, reinicie o gateway: systemctl --user restart hermes-gateway

  6. Confira as políticas de sessão — rode hermes config show e veja se o valor de session_reset é o que você espera.

  7. Pareie o WhatsApp de novo — o WhatsApp usa pareamento por QR code (Baileys), e não migração de token. Rode hermes whatsapp para parear.

  8. Limpe o que sobrou — depois de confirmar que está tudo funcionando, rode hermes claw cleanup para renomear os diretórios remanescentes do OpenClaw para .pre-migration/ (evita confusão de estado).

Resolução de problemas​

"OpenClaw directory not found"​

A migração procura em ~/.openclaw/, depois ~/.clawdbot/ e então ~/.moltbot/. Se a sua instalação está em outro lugar, use --source /caminho/do/seu/openclaw.

"No provider API keys found"​

As chaves podem estar em vários lugares, dependendo da versão do OpenClaw: dentro do openclaw.json em models.providers.*.apiKey, em ~/.openclaw/.env, no sub-objeto "env" do openclaw.json ou em agents/main/agent/auth-profiles.json. A migração verifica os quatro. Se as chaves usam SecretRefs com source: "file" ou source: "exec", não há como resolvê-las automaticamente — adicione-as com hermes config set.

Skills não aparecem depois da migração​

As skills importadas vão para ~/.hermes/skills/openclaw-imports/. Comece uma sessão nova para que elas passem a valer, ou rode /skills para conferir se foram carregadas.

A voz do TTS não foi migrada​

O OpenClaw guarda as configurações de TTS em dois lugares: messages.tts.providers.* e a configuração talk no nível raiz. A migração verifica os dois. Se o seu ID de voz foi definido pela interface do OpenClaw (que grava em outro caminho), talvez você precise defini-lo manualmente: hermes config set tts.elevenlabs.voice_id YOUR_VOICE_ID.