Cron multi-perfil finalmente acaba com a interferência cruzada: cada perfil entrega pelo seu próprio bot

Você mantém dois perfis: um assistente pessoal e um bot de equipe, cada um com seu próprio bot de Telegram ou Feishu. Às 3h da manhã, o job agendado do bot de equipe termina — e o resultado é entregue pelo seu bot pessoal. Ou pior: a entrega falha com Bot not in chat — o job foi concluído, mas ninguém nunca viu o resultado. Uma correção mesclada em 31 de agosto (PR #99375) arranca essa classe inteira de interferência cruzada pela raiz: qual bot entrega a mensagem de um cron job é decidido pelo perfil dono do job — não pelo processo que por acaso o executou.
A causa raiz: a identidade de entrega seguia a “pessoa” errada
No design multi-perfil do Hermes, cada perfil tem sua própria configuração, credenciais, banco de sessões e bots de mensageria. Mas antes dessa correção, a entrega de cron tinha uma falha fatal: a identidade de entrega seguia o processo executor em vez do perfil dono do job.
Concretamente: você inicia o gateway a partir do seu perfil principal, e ele hospeda os jobs do perfil B pelo caminho. Quando o job de B roda, o sistema lê as credenciais “do processo atual” — que pertencem ao perfil principal — então o resultado de B sai pelo bot do perfil principal. Entregando no grupo do perfil B? O bot não está naquele grupo, então dá erro. Entregando no chat do perfil principal? A mensagem cai no lugar errado. O job foi concluído, e mesmo assim o resultado desapareceu.
E isso era só metade do problema. O cron status tinha uma mentira correspondente: ele tratava qualquer gateway ativo de qualquer perfil como prova de saúde — mesmo quando o agendador do próprio perfil B não estava rodando. O status parecia verde enquanto os jobs de B nunca disparariam.
A correção: quatro causas raiz, um princípio
O PR #99375 faz cherry-pick de commits de nove contribuidores e conserta cada elo dessa corrente, sob um único princípio: a identidade de entrega deve vir do perfil dono do job. Concretamente:
- Cada tick de perfil ganha seu próprio mapa de adaptadores: ao multiplexar (
_start_multiplex), o tick de cada perfil recebe seu próprio mapa de adaptadores de plataforma; adaptadores compartilhados ficam reservados apenas para o perfil padrão e nunca servem de fallback para perfis secundários desconectados; - O escopo de segredos do perfil agora cobre a entrega: antes o escopo era resetado logo depois que o job rodava, então os fallbacks de standalone-send resolviam os tokens de plataforma do processo executor; agora o escopo cobre
_deliver_resultde ponta a ponta; - Os IDs de home chat são resolvidos a partir dos segredos do perfil dono: o chat/thread de destino é resolvido via
get_secretno escopo do perfil dono, em vez de variáveis de ambiente cruas; - Jobs de perfis gravam sessões no próprio state.db: a SessionDB é construída via
contextvars.copy_context(), então as execuções de cron de B param de persistir sessões no banco do perfil padrão; - Resgate de preflight para perfis satélite: satélites roteados via
gateway.profile_routesleem a config principal diretamente, falham de forma segura (fail-closed) e não vazam nenhum ambiente; cron statusdiz a verdade: a descoberta de PID do systemd é limitada ao nome de serviço deste perfil, e um heartbeat nunca visto é lido como aviso, não como verde.
Como verificar na sua máquina
Depois de atualizar para a main mais recente, primeiro confira se o status do agendador do seu perfil agora é confiável:
# Status do agendador de um perfil específico — não um sinal verde de "qualquer gateway vivo"
hermes -p work cron status
Depois rode um cron job com entrega e observe se a mensagem vem do bot daquele próprio perfil e cai no home chat daquele perfil. Para quem roda vários perfis em várias plataformas, esta é uma correção de experiência imediatamente visível: os resultados não desaparecem mais, a interferência cruzada acabou e as mensagens fantasma de “job concluído, mas ninguém recebeu” param.
Quando você pode usar
O PR #99375 foi mesclado em 31 de agosto de 2026 e está apenas na main — ainda não saiu em uma release. Ele corrige um conjunto de relatos reais de usuários: #94862, #97909, #99028, #98790, #97476 — todas queixas de “mensagem nunca chegou” / “o status está mentindo”.
Múltiplos perfis são uma das capacidades mais subestimadas do Hermes: cada perfil tem sua própria identidade, memória e bots. Para usá-los bem, comece pelo nosso guia completo de multi-perfil e pelo roteamento de múltiplos perfis no Feishu; o playbook completo de cron vive no guia completo de automação de cron.