Elquer Carlos

OpenClaw no ar, Hermes fora, e o devlog ganha métrica honesta

OpenClaw virou daemon, Hermes foi removido com 2,1G liberados, e o devlog passou a usar ActivityWatch pra métricas reais.

Comecei a manhã com uma pergunta direta: o dashboard do OpenClaw está ativo, como acesso? Resposta: não estava.

OpenClaw pousado há cinco dias

O OpenClaw estava instalado em ~/larissa/openclaw/ desde 28/04. Smoke test tinha passado, mas nunca tinha virado daemon. O .gitignore tinha um marcador “descomissionar” de cinco dias atrás sem que ninguém tivesse parado pra perguntar o que isso significava.

A investigação descascou três camadas de dívida técnica embutida.

Camada 1 — plugin-loader quebrado. O gateway falhava ao subir por causa do plugin memory-core, que dependia de chokidar ausente. Fui pesquisar — caiu numa issue de quatro dias atrás (#73176): a versão 2026.4.25 do OpenClaw tem regressão que quebra o plugin-loader. Solução do upstream: atualizar pra 2026.4.29. Atualizei. Plugins carregaram, gateway subiu na porta 19001. openclaw doctor --non-interactive --yes instalou um systemd user unit automaticamente como bônus.

Camada 2 — unit apontando pra Node morto. A unit gerada pelo doctor tinha ExecStart=/home/elquercarlos/.hermes/node/bin/node. O Node era do Hermes — que eu tinha aposentado dois dias antes. Pior: ~/.local/bin/node era symlink apontando pro mesmo binário morto. O doctor pegou o que estava no PATH, e o que estava no PATH era ruína.

Camada 3 — instalação do Node sistema. Pesquisa de padrão da comunidade convergiu em Node 24 via NodeSource:

curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
apt install nodejs

Removi o symlink ~/.local/bin/node, substituí ~/.hermes/node/bin/node por /usr/bin/node na unit, recarreguei o systemd. [gateway] ready nos logs com Node 24.15.0 servindo.

Isso levou aproximadamente quatro horas pra responder a pergunta inicial “o dashboard está ativo, como acesso?”.

Hermes: encerramento completo

Durante a investigação descobri que o larissa-bridge.service ainda estava no ar, apontando pra HermesClient em Python. Era peça morta há dois dias, rodando sem função.

O roadmap explícito da Larissa já previa substituir o bridge por Telegram channel nativo do OpenClaw. Não havia razão pra manter o serviço ativo.

Sequência canônica de remoção (validada via documentação upstream antes de executar):

systemctl --user stop larissa-bridge.service
systemctl --user disable larissa-bridge.service
rm ~/.config/systemd/user/larissa-bridge.service
systemctl --user daemon-reload
systemctl --user reset-failed

Backup do ~/.hermes/ em 611M comprimido pra ~/larissa/backups/ antes de remover. rm -rf ~/.hermes/ recuperou 2,1G.

Decisões 32 e 33 entraram no DECISIONS.md da Larissa:

  • Decisão 32: encerramento do Hermes Agent
  • Decisão 33: OpenClaw como substrato operacional permanente, sem fallback

Quando o bridge Telegram voltar, será como canal nativo do próprio OpenClaw.

OpenRouter configurado e E2E validado

Com o OpenClaw no ar, configurei o OpenRouter com chave nova — a anterior tinha vazado em transcript no dia 28/04 durante uma sessão de debug e foi rotacionada. Pesquisei as issues conhecidas antes do onboard (#17191 e #69104) pra evitar armadilhas já documentadas.

Auth profile gravado, default model openrouter/auto. Validação:

openclaw --dev agent --message "Responda exatamente: pong. Nada mais."

Resposta: pong. E2E validado.

”Quando achar algo estranho, pesquise antes”

Perto das 2h da manhã o Claude Code estava emendando comandos no SSH tentando adivinhar como contornar o chokidar — e eu estava deixando passar, aprovando sem ler. Parei e mandei um recado direto: “quando acha algo estranho pesquise antes de sair tentando adivinhar”.

O resto da sessão seguiu essa regra. Cada passo precedido por busca documentada — issues do GitHub, doc oficial do OpenClaw, padrão de instalação do Node. Resultado: zero comandos jogados fora, zero rollback, zero retrabalho. Foi a sessão mais limpa que tive nesse projeto.

Devlog: crônica, não notícia

Saiu o post de 1/5. Li, e senti falta de alguma coisa. Faltavam os conflitos, os erros, as dúvidas do caminho. O agente-jornalista tinha tratado o devlog como release note — limpou tudo que era ruído pra entregar uma versão polida.

Errado. Devlog não é notícia, é registro histórico e público. As peças pra outras redes (instagram, linkedin, youtube) seguem padrões dos canais — corta, adapta, formata. O blog é diferente: ele preserva o caminho, incluindo os atalhos que não funcionaram.

Reescrevi o prompt do jornalista pra refletir isso. Adicionei também critério pra decidir quando um dia com temas distintos vira dois carrosséis separados: se cada tema rende cinco slides com substância real e hook próprio, divide. Caso contrário, um só.

Dois workflows arrumados

A Action das 9h05 tinha tentado rodar. O agente-jornalista fez a parte dele — gerou os 4 outputs — mas falhou no git push por falta de autorização do GITHUB_TOKEN. Commit b1f05ad arrumou.

Em seguida descobri que o sync-to-elquer-com.yml também não trigava. Ele estava configurado pra ouvir push events, mas o jornalista commita com o bot, e Actions do bot não cascateiam por padrão no GitHub. Mudei pra workflow_run — agora o sync escuta o término do jornalista e roda em sequência. Commit 49467c9.

ActivityWatch: métricas honestas no frontmatter

Instalei o ActivityWatch local (extensão Chrome já estava configurada). Defini as classes via API: AI Chat, Coding, Larissa Project, Reading, Communication, etc.

Escrevi scripts/activity-watch-fetch.py que a skill de geração de devlog chama pra preencher o frontmatter do draft com tempo ativo, tempo AFK, top apps, top sites e categorias — tudo lido do ActivityWatch, não estimado pelo modelo.

A ideia é simples: métricas no devlog devem refletir o que de fato aconteceu no PC. Hoje: 7h31min ativo, sendo 3h43min em chat com Claude (claude.ai), 1h58min em código, 24min na pasta da Larissa, 54min em Putty e Windows Terminal (SSH na Larissa). Commits 670fa36 (integração) e d776c78 (atualização do roteiro pra v10.1).

Documentação fora de sincronia

Lá pelas 20h veio a constatação: “toda hora descobrimos coisas novas, mas está tudo documentado — por que estamos descobrindo de novo?”. A documentação não acompanhava a realidade.

Gerei INVENTORY_20260502.md listando o que de fato existe em ~/larissa/ com diretórios, tamanhos e propósito. Atualizei DECISIONS.md com as decisões 32 e 33, versão 1.6. Reescrevi o CLAUDE.md do zero: o anterior tinha 54K de história acumulada e virou 90 linhas com o essencial. O antigo foi comprimido pra archive/CLAUDE_md_antigo_20260502.gz.

Pendência conhecida: scripts em ~/larissa/scripts/ ainda referenciam .hermes morto. Auditar e remover na próxima sessão.

kmaroteApp: feature agendar_derivação

Em paralelo — em janela separada, não multitasking — avancei na feature agendar_derivacao do kmaroteApp: filtro persistente Original/Corte via URL param, contadores nos chips, modal sugerindo a próxima data disponível, responsivo no mobile com d-md-table-cell escondendo colunas em telas pequenas. Commit 3a66893a.

Logo depois, fix e5404d24: o reload via redirecionarComMensagem perdia o filtro porque o sub_tipo ia como POST hidden e a view lê $_GET. Movi os parâmetros de roteamento pra URL do form action. Voltou.

Para 3 de maio

  • Auditar scripts da Larissa que ainda apontam pra .hermes
  • Decidir sobre o agent órfão main em ~/.openclaw-dev/agents/main/
  • Resolver state dir duplicado ~/.openclaw (240K fora do --dev)
  • FASE 1 do roadmap: persona Larissa (SOUL.md, STYLE.md, voz)
  • Continuar feature de carrosséis múltiplos no jornalista

Estatísticas do dia:

Atividade no PC:

  • Tempo ativo: 7h 31min
  • AFK: 3h 23min
  • Janela total monitorada: 10h 54min

Por categoria:

  • AI Chat: 3h 43min
  • Coding: 1h 58min
  • Uncategorized: 1h 21min
  • Larissa Project: 24min
  • Browsing: 2min
  • Communication: 1min

Top apps: chrome (5h 35min) · Antigravity (56min) · putty (42min) · WindowsTerminal (12min)

Top sites navegados: claude.ai (1h 28min) · my.sheer.com (30min) · local.kmarote.me (12min) · dev-admin.kmarote.me (10min)

Trabalho com IA:

  • Conversas claude.ai: 2 (363 mensagens)
  • Sessões Claude Code: 11 (Windows 9 + Larissa 1 + devlog 1)

Código produzido:

  • Commits: 8 (6 elquercarlos + 2 kmaroteApp)

Devlog do dia:

  • Fontes: 2 conversas claude.ai, 10 sessões Claude Code, 1 Larissa drop
Fim do ato