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
mainem~/.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