Trocar de agente custa as regras que você já escreveu, não a instalação

Você tem um CLAUDE.md que vem editando há um ano — metade convenções de verdade, metade pedidos de desculpa ao seu eu do passado. Tem uma parede de allow rules do tipo Bash(...) que você não lembra de ter adicionado, quatro servidores MCP plugados num projeto paralelo e uma dúzia de skills, cada uma guardando uma lição caríssima. Você já leu o suficiente sobre o Hermes para querer testar. Aí faz a conta de redigitar tudo, lembra que vai esquecer justamente a regra que impede o agente de pedir permissão quarenta vezes por dia, e fecha a aba.
É para essa tarde que existe o hermes import-agent. Ele lê o diretório de config de outro agente, descobre o que dá para trazer e te mostra o plano item por item antes de gravar um único byte.
Três termos se repetem daqui para frente. Um servidor MCP é um servidor de ferramentas que o agente pode chamar — um banco de dados, um navegador, um issue tracker — descrito por um bloco de config pequeno. Uma allowlist é o conjunto de comandos de shell que o agente pode rodar sem parar para perguntar. Uma skill é um diretório que guarda um arquivo SKILL.md ensinando um procedimento.
A instalação leva um minuto; a config é o ativo de verdade
Ninguém hesita porque instalar o Hermes seja difícil; hesita porque o valor está na configuração acumulada: o arquivo de instruções que levou meses de “não, para de fazer isso” até ficar certo, as regras de aprovação que codificam sua tolerância a risco, os servidores MCP que custaram uma noite inteira depurando headers. Cada um vive num formato diferente por agente, e nenhum é portátil por padrão.
Reescrever à mão descarta a config que você esqueceu que tinha, porque não se redigita de memória algo que nunca foi escrito conscientemente — e uma ferramenta que copia mecanicamente não perde a paciência no nono item.
O hermes import-agent suporta quatro origens: OpenClaw (~/.openclaw, incluindo os nomes mais antigos ~/.clawdbot e ~/.moltbot), Claude Code (~/.claude), OpenAI Codex CLI (~/.codex) e Cursor (~/.cursor).
Instale o importer uma vez, depois peça o plano
O importer vem como plugin oficial, agent-importers, mantido pela Nous Research no diretório agent-importers do repositório hermes-official-plugins. Instale uma vez por profile — plugins são por profile, então um segundo profile precisa do mesmo comando:
hermes plugins install agent-importers
O plugin se mudou recentemente: a v0.22.4 (2026-10-21) o tirou do core e o levou para o catálogo, além de adicionar o Cursor como origem, e a v0.22.5 (2026-10-23) menciona o hermes import-agent e o setup oferecendo um importer quando detecta outro agente.
Sem argumento, o comando sonda os quatro diretórios. Com um, vai direto naquela origem:
hermes import-agent # probe ~/.openclaw, ~/.claude, ~/.codex, ~/.cursor
hermes import-agent openclaw # from ~/.openclaw
hermes import-agent claude-code # from ~/.claude
hermes import-agent codex # from ~/.codex
hermes import-agent cursor # from ~/.cursor
hermes import-agent claude-code --dry-run # plan only
hermes import-agent codex --source /path/to/.codex # non-standard location
hermes import-agent claude-code --overwrite --yes # resolve conflicts, skip prompts
O que a primeira forma não faz é misturar quatro agentes num monte só e torcer. Ela reporta por origem, por item: encontrado, vai gravar, ignorado e por quê. O --dry-run entrega o mesmo relatório e não toca em nada no disco. O --overwrite resolve conflitos a favor da importação; o --yes pula a confirmação, o que é ótimo num bootstrap automatizado e arriscado depois que você editou o destino à mão.
O hermes setup numa instalação nova roda a mesma sondagem primeiro. Quando encontra algo, pergunta “Import your setup from Claude Code?” e diz o que achou; quando encontra vários, você recebe um checklist com tudo marcado. Diga sim e, se o profile não tiver o agent-importers, o setup instala do catálogo e executa o mesmo fluxo de plano-preview-confirmação. Recuse, ou não encontre nada, e nada é instalado.
O OpenClaw ganha um refinamento ali: o setup passa --migrate-secrets automaticamente, reaproveitando a etapa de migração de OpenClaw que já existia no core, de modo que as chaves de API e os tokens de bot vêm junto e as seções de provider e de plataformas de mensagem já chegam preenchidas. Depois escolha o Quick Setup e, se a importação trouxe um modelo e sua chave, o setup pergunta se você quer manter aquele modelo (o padrão) ou trocar para o Nous Portal.
O que cada origem entrega de fato
Toda origem é lida nas mesmas quatro categorias — instruções, aprovações, servidores MCP, skills —, mas os formatos diferem o bastante para valer uma leitura antes.
| Origem | O que lê | Onde cai |
|---|---|---|
| Claude Code | instruções globais do CLAUDE.md |
entradas de memória em ~/.hermes/memories/MEMORY.md |
| Claude Code | permissions.allow no settings.json |
command_allowlist no config.yaml |
| Claude Code | permissions.deny no settings.json |
approvals.deny no config.yaml |
| Claude Code | mcpServers, de ~/.claude.json e settings.json |
mcp_servers no config.yaml |
| Claude Code | diretórios skills/ com um SKILL.md dentro |
~/.hermes/skills/claude-code-imports/ |
| Claude Code | slash commands de commands/*.md |
ignorados, com a sugestão de reescrever como skill |
| Codex CLI | instruções globais do AGENTS.md |
entradas de memória |
| Codex CLI | [mcp_servers.*] do config.toml |
mcp_servers |
| Codex CLI | memories/*.md |
entradas de memória |
| Codex CLI | diretórios skills/ |
~/.hermes/skills/codex-imports/ |
| Cursor | AGENTS.md |
entradas de memória |
| Cursor | rules/*.md e rules/*.mdc (User Rules) |
entradas de memória |
| Cursor | mcpServers no mcp.json |
mcp_servers |
| Cursor | diretórios de skill em skills/**/ |
~/.hermes/skills/cursor-imports/ |
| OpenClaw | ~/.openclaw (mais ~/.clawdbot, ~/.moltbot) |
mapeamento mais amplo, descrito abaixo |
Os arquivos .mdc do Cursor carregam frontmatter — description, globs, alwaysApply —, que é informação de roteamento para o motor de regras do Cursor. Isso é removido e só o corpo vira memória: essas chaves não significam nada para o Hermes, e carregá-las criaria regras que parecem ativas mas nunca disparam. Skills do Cursor podem estar em pastas de categoria, então skills/shipping/land-it/ é importado como cursor-imports/land-it/ — o diretório folha é a skill, porque uma skill é o diretório que contém um SKILL.md. Duas skills com o mesmo nome em pastas diferentes são reportadas como conflito.
Os slash commands do Claude Code são a outra recusa honesta. commands/*.md é ignorado com uma mensagem em vez de convertido, e a sugestão é reescrever como skill — porque um slash command e uma skill são invocados de formas diferentes, e uma conversão mecânica só pareceria ter funcionado.
Allow rules não se traduzem forma por forma
O mapeamento é mecânico mas não simétrico, e é a parte do plano que vale ler com atenção.
Uma regra de prefixo Bash(...) do Claude vira um glob: Bash(npm run test:*) chega como npm run test*. A intenção sobrevive — “essa família de comandos, sem perguntas” —, mas a notação não. Se quiser apertar o que veio, o modelo de aprovação está em configuração de aprovações inteligentes.
Regras que não são de Bash seguem outro caminho. Read(...), WebFetch e parentes governam ferramentas que existem no Claude Code e não no Hermes, então elas são reportadas como não mapeadas em vez de importadas à força para algo parecido — uma linha “unmapped” é melhor do que uma chave de config que se comporta diferente do que você quis dizer.
Credenciais nunca fazem parte da carga
Chaves de API e credenciais nunca são importadas, e é isso que torna o processo seguro num notebook de trabalho. Os arquivos de credencial — ~/.claude/.credentials.json, ~/.codex/auth.json, ~/.cursor/cli-config.json — não são lidos de forma alguma. Quando um bloco de servidor MCP carrega variáveis de ambiente ou headers com nomes que parecem segredo (*_TOKEN, *_API_KEY, Authorization), esses valores são removidos e listados no relatório, para você recolocá-los sabendo exatamente quais saíram.
Duas rotas os restauram: hermes setup para configuração de provider, ou gravar os segredos em ~/.hermes/.env. Para evitar chaves em texto puro num dotfile, a abordagem apoiada em keychain em criptografia de segredos é a alternativa.
A única exceção é o OpenClaw, e é opt-in: apenas um --migrate-secrets explícito traz as chaves de API e tokens de bot da allowlist.
Três coisas que você tem que terminar à mão
O importer move estrutura; ele não consegue concluir o serviço.
Recoloque os segredos. Todo servidor MCP cujos headers foram removidos precisa do token antes de conectar, e credenciais faltando aparecem como uma ferramenta falhando na primeira chamada, não como um erro de importação. Como servidores MCP e variáveis de contexto são resolvidos está em config de MCP e variáveis de contexto.
Reescreva os slash commands. Um comando /review ou /ship foi ignorado. O substituto é uma skill, normalmente vinte minutos por comando — vale fazer na ordem em que você realmente os usa.
Releia as aprovações. A allowlist e a deny list importadas são um primeiro rascunho feito por uma ferramenta que nunca viu sua tolerância a risco. Confira se cada glob casa com o que você acha que casa e se nada importante caiu no relatório de não mapeados. Se veio mais texto de instrução do que o esperado, a cadeia de diretórios do AGENTS.md explica como arquivos de instrução se empilham no Hermes.
Observe estes pontos antes de confirmar
- Plugins são por profile. O
agent-importersinstalado no seu profile principal não faz nada pelo segundo. - Conflitos são reportados, não resolvidos em silêncio. Duas skills do Cursor com o mesmo nome, ou um arquivo já existente no destino, aparecem como conflito. O
--overwriteos resolve a favor da importação. - O OpenClaw tem guia próprio e flags próprias. Aquele guia cobre o mapeamento completo — persona, memória, skills, providers de modelo, plataformas de mensagem, comportamento do agente, servidores MCP — além de
--preset,--migrate-secrets,--workspace-targete--skill-conflict, um backup pré-migração e ohermes claw cleanupdepois. A grafia antigahermes claw migrateainda executa a mesma importação. - Instalações fora do padrão precisam de
--source. Se o Codex mora fora de~/.codex, a sondagem não vai encontrá-lo.
A metade da transcrição, o importer faz sem erros de digitação — e te entrega um recibo de tudo o que deixou para o seu julgamento.