MÓDULO 4.4

⚡ Automações e Workflows com OpenClaw

Construa o pipeline completo: cron jobs de ingestão, integração com GitHub, daily briefings, revisão semanal automática e alertas proativos de degradação do wiki.

6
Tópicos
45
Minutos
Expert
Nível
Prático
Tipo
1

⏰ Cron Jobs de Ingestão

Automação elimina a dependência de memória humana. Configure cron jobs no SOUL.md para que o vault se mantenha atualizado em segundo plano — sem precisar lembrar de ingerir manualmente.

⏰ Schedule completo de automações

00h 06h 08h 12h 18h 22h 24h check_inbox (toda hora) 📋 briefing 08:00 🔧 lint dom 📜 export 23:00 check_inbox (horário) daily_briefing (08h) lint_wiki (dom 09h) export_chats (23h)
Cron jobs no SOUL.md
## Cron Jobs

cron:
  # Verificar inbox toda hora
  - schedule: "0 * * * *"
    name: check_inbox
    action: |
      count = filesystem.count("raw/inbox/*.md")
      if count > 0:
        exec("claude ingest raw/inbox/")
        notify(f"✓ {count} docs ingeridos")

  # Briefing diário às 8h
  - schedule: "0 8 * * *"
    name: daily_briefing
    action: send_daily_briefing
    channel: telegram

  # Lint semanal domingo 9h
  - schedule: "0 9 * * 0"
    name: weekly_lint
    action: run_lint_report
    channel: telegram

  # Export de conversas às 23h
  - schedule: "0 23 * * *"
    name: export_chats
    action: export_to_raw_inbox
Implementando check_inbox em Python
#!/usr/bin/env python3
# scripts/check_inbox.py

import os
import subprocess
from pathlib import Path

VAULT = Path("/home/user/vault")
INBOX = VAULT / "raw" / "inbox"

def check_and_ingest():
    pending = list(INBOX.glob("*.md"))

    if not pending:
        return  # nada a fazer

    print(f"📥 {len(pending)} docs pendentes")

    result = subprocess.run(
        ["claude", "ingest", str(INBOX)],
        cwd=VAULT,
        capture_output=True,
        text=True
    )

    if result.returncode == 0:
        print("✓ Ingestão concluída")
        # Move docs processados para raw/processed/
        for doc in pending:
            doc.rename(VAULT / "raw" / "processed" / doc.name)
    else:
        print(f"✗ Erro: {result.stderr}")

if __name__ == "__main__":
    check_and_ingest()
2

🐙 Integração GitHub → Wiki via OpenClaw

Cada PR mergeado carrega decisões técnicas e contexto que devem estar no segundo cérebro. Com um webhook do GitHub para o OpenClaw, isso acontece automaticamente — sem esforço adicional.

🐙 Fluxo GitHub → raw/ → wiki/

🐙 GitHub PR mergeado 🤖 OpenClaw recebe webhook raw/inbox/ github-pr-NNN.md skill exec claude ingest 📖 wiki/ projeto atualizado 📱 notifica Telegram 1. evento 2. processa 3. salva + ingere 4. wiki atualizado 5. avisa
Webhook handler no SOUL.md
## Webhooks

webhooks:
  github_pr:
    path: /webhook/github
    secret: "${GITHUB_WEBHOOK_SECRET}"
    events: ["pull_request"]
    filter:
      action: "closed"
      merged: true
    handler: |
      pr = payload.pull_request
      title = pr.title
      body = pr.body or ""
      diff_url = pr.diff_url
      number = pr.number
      repo = pr.base.repo.name

      # Cria arquivo raw
      content = f"""
      # PR #{number}: {title}
      Repositório: {repo}
      Merge: {pr.merged_at}

      ## Descrição
      {body}

      ## Diff
      {fetch(diff_url)[:3000]}
      """

      path = f"raw/inbox/github-pr-{number}.md"
      filesystem.write(path, content)
      exec(f"claude ingest {path}")
      notify(f"🐙 PR #{number} do {repo} adicionado ao wiki")
Configurando o webhook no GitHub
1.
Expor o OpenClaw na internet
# Via ngrok (dev)
ngrok http 3000

# Via domínio próprio (prod)
# Configure seu DNS e nginx
2.
Registrar webhook no GitHub

Settings → Webhooks → Add webhook

URL: https://seu-dominio.com/webhook/github

Content type: application/json

Events: Pull requests

3.
Testar com PR de exemplo

Crie e mergeie um PR de teste. Verifique raw/inbox/ e a notificação no Telegram.

3

🌅 Daily Briefing

O daily briefing transforma o segundo cérebro de passivo para ativo. Em vez de você consultar o wiki, ele vem até você toda manhã com o que é relevante para o dia.

Conteúdo do briefing diário

📊 Stats do vault

Total de páginas wiki, últimas adições, tamanho do raw/inbox/ pendente

🔄 Modificações recentes

Páginas wiki atualizadas nas últimas 24h, via leitura do log.md

⚠️ Atenção necessária

Páginas não atualizadas há mais de X dias, inbox com muitos pendentes

💡 Sugestão do dia

Uma página wiki aleatória para revisão — mantém o conhecimento vivo

Exemplo de briefing real

🤖 Cleo 08:00

☀️ Bom dia! Briefing de 09/04/2026

📊 Vault: 342 páginas wiki · 3 pendentes em inbox

🔄 Ontem: github-pr-147.md, python-async.md atualizados

⚠️ Atenção: 3 docs em raw/inbox/ aguardam ingestão

💡 Revise hoje: strangler-fig-pattern.md (adicionado há 14 dias, ainda não revisado)

Responda "ingerir" para processar o inbox agora.

Implementação do daily briefing
## Ação: send_daily_briefing

actions:
  send_daily_briefing:
    steps:
      # 1. Coletar métricas do vault
      - name: stats
        exec: |
          wiki_count = filesystem.count("wiki/*.md")
          inbox_count = filesystem.count("raw/inbox/*.md")

      # 2. Páginas modificadas nas últimas 24h
      - name: recent
        exec: |
          log_content = filesystem.read("log.md")
          recent = extract_last_24h(log_content)

      # 3. Páginas desatualizadas (>30 dias)
      - name: stale
        exec: |
          stale = filesystem.find_older_than("wiki/", days=30)

      # 4. Sugestão aleatória para revisão
      - name: suggestion
        exec: |
          pages = filesystem.list("wiki/*.md")
          suggestion = random.choice(pages)

      # 5. Montar e enviar briefing
      - name: send
        message: |
          ☀️ *Briefing {date}*

          📊 *Vault:* {wiki_count} páginas · {inbox_count} pendentes
          🔄 *Recentes:* {recent}
          ⚠️ *Desatualizadas:* {stale}
          💡 *Revise:* {suggestion}
        channel: telegram
4

📅 Workflow de Revisão Semanal

O lint semanal é a operação de manutenção preventiva do wiki. O OpenClaw executa a auditoria automaticamente e entrega o relatório via Telegram para revisão humana — sem você precisar iniciar nada.

O que o lint verifica
Contradições entre páginas

A diz X, B diz não-X sobre o mesmo conceito

Páginas órfãs

Existe em wiki/ mas não referenciada em index.md

Links quebrados

[[link]] que aponta para página inexistente

Páginas muito longas

Acima de 3000 tokens — candidatas a divisão

Tópicos sem página

Referenciados em múltiplas páginas mas sem entrada própria no wiki

Relatório de lint via Telegram
🤖 Cleo Dom 09:00

🔧 Relatório Semanal de Wiki — 06/04/2026

342 páginas auditadas

⚠️ 2 contradições detectadas:

• python-async.md diz "use asyncio.run()" mas event-loop.md diz "evite asyncio.run() em libs"

• sql-patterns.md contradiz orm-patterns.md sobre lazy loading

🔗 3 links quebrados em wiki/

📄 1 página órfã: strangler-fig-advanced.md

Responda com o número de um problema para ver detalhes e opções de correção.

💡 Resolução assistida via chat

Após receber o relatório, você responde "1" para ver a contradição em detalhes. O agente mostra os dois trechos conflitantes e oferece opções: "corrigir A", "corrigir B", "marcar como ambos válidos (contexto diferente)". Você decide; o agente executa.

5

🚨 Notificações de Degradação

Degradação silenciosa é o maior inimigo do segundo cérebro. Sem alertas proativos, o wiki acumula problemas que só aparecem quando você mais precisa de uma informação — e ela está desatualizada ou errada.

Thresholds de alerta configuráveis
## Alertas de Degradação

health_checks:
  # Inbox acumulando
  inbox_overload:
    condition: "count(raw/inbox/) > 10"
    severity: warning
    message: "⚠️ {count} docs no inbox há mais de 24h"
    cooldown: 4h

  # Página crítica desatualizada
  stale_critical_page:
    condition: |
      any(page.days_since_update > 30
          for page in wiki/ if page.tag == "critical")
    severity: error
    message: "🔴 Página crítica desatualizada: {page}"
    immediate: true

  # Muitas páginas órfãs
  orphan_explosion:
    condition: "count(orphan_pages) > 5"
    severity: warning
    message: "📄 {count} páginas órfãs detectadas"
    cooldown: 7d  # máximo 1 alerta por semana

  # Falha na ingestão
  ingestion_failure:
    condition: "last_ingestion.status == 'failed'"
    severity: critical
    message: "🔴 Falha na ingestão: {error}"
    immediate: true
Sistema de severidades
Critical

Notificação imediata + som. Falhas de ingestão, dados corrompidos.

Warning

Notificação com cooldown. Inbox cheio, páginas antigas.

Info

Incluído no digest matinal. Sugestões de melhoria, estatísticas.

Comando de snooze

Responda "/snooze inbox 2h" para silenciar o alerta de inbox por 2 horas. Útil quando você está consciente do acúmulo e vai resolver depois.

6

🔄 Construindo seu Pipeline Completo

O pipeline completo conecta todos os módulos da trilha em um sistema coeso e autônomo. Do raw/ ao celular, do celular ao wiki, do wiki ao briefing matinal — o segundo cérebro que funciona enquanto você dorme.

🔄 Pipeline end-to-end

ENTRADAS 📱 Telegram 🐙 GitHub PR 🔗 URL scrape 📧 Email raw/inbox/ landing zone todos os docs aguardando Ingestão Claude Code CLI cron/manual LLM compiler wiki/ páginas compiladas 📄 index.md 📄 conceitos/ 📄 projetos/ 📄 decisoes/ 📄 log.md SAÍDAS 💬 Consultas naturais ☀️ Daily briefing 🔧 Lint semanal 🚨 Alertas proativos 🤖 OpenClaw orquestra todo o pipeline via SOUL.md
SOUL.md final consolidado (template de produção)
# SOUL.md — Segundo Cérebro (Produção)

## Identidade
name: Cleo
personality: "direto, conciso, cita fontes, nunca inventa"
language: pt-BR

## Knowledge Base
knowledge_base:
  vault_root: /home/user/vault/
  index_file: /home/user/vault/index.md
  wiki_path: /home/user/vault/wiki/
  inbox_path: /home/user/vault/raw/inbox/
  max_context_tokens: 8000
  cite_format: "↗ wiki/{filename}"
  not_found: "Não tenho isso registrado. Criar tarefa?"

## Skills
skills:
  - name: filesystem
    read: ["/vault/wiki/", "/vault/index.md"]
    write: ["/vault/raw/inbox/"]
    audit_log: true
  - name: cron
  - name: http
    allowed_hosts: ["api.github.com"]
  - name: exec
    allowed_commands: ["claude"]

## Channels
channels:
  telegram: { token: "${TELEGRAM_TOKEN}", role: owner }
  slack:    { token: "${SLACK_TOKEN}", channel: "#wiki" }

## Cron
cron:
  - "0 * * * *"   → check_inbox
  - "0 8 * * *"   → daily_briefing (telegram)
  - "0 9 * * 0"   → weekly_lint (telegram + slack)
  - "0 23 * * *"  → export_chat_logs

## Webhooks
webhooks:
  - path: /webhook/github
    event: pull_request[merged]
    action: save_to_inbox + ingest

## Alertas
health_checks:
  inbox_overload:  count > 10   → warning (cooldown 4h)
  ingestion_fail:  status=fail  → critical (imediato)

✓ Checklist de produção

  • OpenClaw rodando como serviço (pm2/systemd)
  • Backup do vault configurado (rclone/rsync diário)
  • Webhook GitHub registrado e testado
  • Primeiro daily briefing recebido
  • Primeiro lint semanal executado
  • Alertas de degradação configurados
  • Documentar o SOUL.md no próprio wiki

📈 Evolução incremental

Semana 1

Instalar, conectar Telegram, primeira consulta ao wiki

Semana 2

Ativar captura mobile + cron de ingestão horária

Semana 3

Daily briefing + alertas de degradação

Semana 4

Webhook GitHub + lint semanal + multi-canal

✅ Conceitos-chave do módulo
Cron jobs eliminam dependência de memória humana
GitHub webhook → PR mergeado → wiki atualizado automaticamente
Daily briefing torna o wiki proativo — ele vem até você
Lint semanal mantém a qualidade do conhecimento
Alertas de degradação previnem acúmulo silencioso de problemas
SOUL.md consolidado é o único ponto de configuração de todo o pipeline
4.3 — Interface Conversacional Trilha 4 — Índice