---
name: today
description: Checkup diário - dashboard agregador que lê resultados dos agentes cron locais (desktop) e recolhe dados frescos via skills interactivas. Usar quando "checkup", "hoje", "today", "rotina", início de dia.
context: fork
---

# /today v11.0 - Checkup Diario (Agregador)

Le resultados dos agentes cron locais (desktop, crontab ealmeida) + invoca skills interactivas. Nao duplica trabalho automatizado.

---

## Arquitectura

```
CRON (desktop local, crontab ealmeida)    /today (interactivo, sob pedido)
├── imap-triage     (4h)                   ├── Le logs locais do cron
├── auto-expense    (4h +15min)            ├── /daily-digest (dados frescos)
├── ticket-triage   (4h +30min)            ├── /tasks-overview (dados frescos)
├── aiktop-tasks    (15min)                ├── /cleanup-downloads (se necessario)
├── infra-check     (diario 7h)            ├── Specs/Sprints scan
├── wp-update       (segunda 23h)          ├── Rotinas especiais por dia
├── intelligence-*  (researcher/scorer/    └── Dashboard + Obsidian + Supabase
│                    selector/publisher)
└── weekly-digest-podcast (quinta 20h)
```

---

## Regra Fundamental

> Fases 1-2 sao **silenciosas**. Executar tudo antes de mostrar output.
> O utilizador so ve o dashboard final.

---

## Protocolo

### Fase 0: Verificacoes

```
1. mcp__mcp-time__current_time -> data, dia da semana
2. mcp__memory-supabase__search_memories("today checkup YYYY-MM-DD")
   -> Se ja existe hoje: perguntar se quer re-executar
```

### Fase 1: Ler resultados dos agentes cron (silencioso)

```
3. Ler logs LOCAIS (Bash tail — sem SSH, tudo corre no desktop):

   Base: /media/ealmeida/Dados/Dev/claude_automations_dev/

   a) IMAP (ultimo report):
      tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/imap-triage/imap-triage.log
      cat ~/.claude-work/today-imap-DD-MM-YYYY.json (se existir)

   b) Ticket triage (ultimo log):
      tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/ticket-triage/ticket-triage.log

   c) Auto-expense (ultimo log):
      tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/auto-expense/auto-expense.log

   d) Infra check (ultimo log):
      tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/infra-check/infra-check.log

   e) AikTop tasks (ultimo log):
      tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/aiktop-tasks/aiktop-tasks.log

   f) SE segunda — wp-update (ultimo log):
      tail -50 /media/ealmeida/Dados/Dev/claude_automations_dev/wp-update/wp-update.log

   g) Intelligence pipeline:
      tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/daily-selector/daily-selector.log
      tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-publisher/intelligence-publisher.log
      tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-researcher/intelligence-researcher.log
      tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-scorer/intelligence-scorer.log

   h) HEARTBEAT WP — ultimo post em descomplicar.pt categoria 1188 (noticias):
      mcp__ssh-unified__ssh_execute(server="server", command="cd /home/ealmeida/public_html && wp post list --post_type=post --category=1188 --posts_per_page=1 --fields=ID,post_title,post_date --format=csv --allow-root 2>&1 | tail -2")
      -> Calcular idade do ultimo post
      -> Se >26h sem post novo: ALERTA "Requer Atencao Urgente" + contexto:
         * Pipeline deveria publicar ate 5 noticias/dia (selector 06:30 + slots 09/11/13/15:30/17:30)
         * Verificar logs daily-selector + publisher (passo g)
         * Stock Supabase: scored>=7 count via curl REST
         * Verificar se desktop teve downtime (uptime / journalctl) — agentes correm no desktop local

4. DETECTAR PROBLEMAS nos logs:
   - Cron nao correu (log desactualizado >8h)
   - Exit codes != 0
   - Erros ou falhas nos logs
   - HEARTBEAT WP >26h sem post novo em cat 1188
   -> Adicionar a seccao "Requer Atencao Urgente"

4b. VERIFICAR FORNECEDORES AUTO-CRIADOS:
   Ler ~/.claude-work/fornecedores-iva.json
   Filtrar entradas com "auto_proposto": true
   Para cada entrada extrair: nome, dominio (chave), politica, confianca, despesas_count
   -> Se existirem: adicionar secção "Fornecedores Auto-Criados" no dashboard (ver formato abaixo)
```

### Fase 2: Recolha de dados frescos (silencioso)

```
5. Invocar /daily-digest
   -> Timer, tickets, facturas, leads, propostas, agenda
   -> Output: dashboard markdown

6. Invocar /tasks-overview
   -> Tarefas overdue, pendentes, em curso, workflows sugeridos
   -> Output: tarefas markdown

7. SE >10 ficheiros em ~/Transferencias:
   -> Invocar /cleanup-downloads
```

### Fase 2b: Sprint/Spec Activos (silencioso)

```
8. Glob: /media/ealmeida/Dados/Dev/**/SPEC.md (profundidade max 3)
   -> Para cada encontrado: Ler frontmatter (15 linhas)
   -> Filtrar: status != "completed"
   -> Extrair: titulo (linha # SPEC:), status, weight, scope done/total

9. Glob: /media/ealmeida/Dados/Dev/**/SPRINT.md
   -> Para cada encontrado: Ler frontmatter
   -> Filtrar: status == "active"
   -> Extrair: sprint_id, tasks done/total, checkpoint_done, end_date
```

### Fase 2c: Rotinas Especiais

```
10. SE SEGUNDA:
    -> Planeamento semanal (tarefas da semana + capacidade)

11. SE SEXTA:
    -> Sugerir manutencao e revisao semanal
```

### Fase 3: Output Final

```
12. AGREGAR resultados de cron + skills:
    - Logs do cron (Fase 1)
    - Dados frescos do /daily-digest e /tasks-overview (Fase 2)
    - Specs/Sprints (Fase 2b)

13. DASHBOARD ao utilizador (formato abaixo)

14. CRIAR NOTA OBSIDIAN:
    Path: /media/ealmeida/Dados/Hub/00-Inbox/DD-MM-YYYY-checkup.md
    Conteudo: dashboard completo

15. GUARDAR em Supabase:
    mcp__memory-supabase__save_memory({
      content: "Checkup diario - X tickets, Y tarefas, Z urgentes, cron OK/FALHA",
      tags: ["today", "checkup", "DD-MM-YYYY"]
    })
```

---

## Formato Dashboard

```markdown
## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)

---

## Requer Atencao Urgente
[Alertas: cron falhado, erros infra, seguranca, notificacoes criticas]

---

## Fornecedores Auto-Criados (pendente validação)
[Omitir secção se nenhum fornecedor tem auto_proposto=true]

| Fornecedor | Domínio | Política | Confiança | Despesas | Acção |
|------------|---------|----------|-----------|----------|-------|
| [nome] | [dominio] | [politica] | [confianca] | [despesas_count]/3 | [— se alta, "rever" se baixa] |

Nota: Promovidos automaticamente após 3 despesas. Confiança "baixa" = fallback EXTRA_UE aplicado — rever manualmente.

---

## 3 Prioridades Hoje
1. [ ] [Mais urgente]
2. [ ] [Segunda]
3. [ ] [Terceira]

---

## Workflows Sugeridos
[Do /tasks-overview]

---

## Sprint / Spec Activos
[Projectos com spec/sprint activo: nome, progresso, checkpoint]
[Se nenhum: "Nenhum sprint/spec activo"]

---

## Resumo do Dia
[Do /daily-digest: timer, tickets, facturas, tarefas, leads, agenda]

---

## Agentes Cron (desktop local)

| Agente | Ultima execucao | Status | Resumo |
|--------|----------------|--------|--------|
| imap-triage | HH:MM | OK/FALHA | X contas, Y emails |
| auto-expense | HH:MM | OK/SKIP | Z despesas criadas |
| ticket-triage | HH:MM | OK/FALHA | W tickets processados |
| aiktop-tasks | HH:MM | OK/FALHA | N tarefas executadas |
| infra-check | HH:MM | OK/FALHA | X/4 MCPs operacionais |
| wp-update [se seg] | HH:MM | OK/FALHA | X/16 sites actualizados |

---

## Auto-Processamento (ultimas 24h)
[Resumo agregado: despesas criadas, tickets fechados, emails limpos]
```

---

## Nota Obsidian

```yaml
---
title: Checkup DD-MM-YYYY
date: DD-MM-YYYY
type: checkup
status: active
---
```

Filename: `DD-MM-YYYY-checkup.md` (Regra #45: formato DD-MM-YYYY)

---

## Anti-Patterns

- NUNCA invocar /ticket-triage, /imap-triage, /auto-expense, /infra-check, /wp-update (correm no cron)
- NUNCA mostrar output antes de terminar Fase 1 e 2
- NUNCA mostrar mais de 3 prioridades (PHDA)
- NUNCA executar sem verificar data/hora primeiro
- SEMPRE ler logs do cron antes de mostrar dashboard
- SEMPRE alertar se algum agente cron nao correu nas ultimas 8h

---

## Referencia

| Componente | Tipo | Responsabilidade |
|-----------|------|-----------------|
| `imap-triage` | Cron desktop (*/4h) | Triagem IMAP 13 contas + dedup Supabase |
| `auto-expense` | Cron desktop (15 */4h) | Criacao automatica de despesas |
| `ticket-triage` | Cron desktop (30 */4h) | Auto-process tickets (SPAM, facturas) |
| `aiktop-tasks` | Cron desktop (*/15min) | Executa tarefas AikTop do Desk CRM |
| `infra-check` | Cron desktop (07h) | Health check gateway + MCPs |
| `wp-update` | Cron desktop (seg 23h) | Actualizacoes WordPress 16 sites |
| `weekly-digest-podcast` | Cron desktop (quinta 20h) | Digest semanal para podcast |
| `improvement-evaluator` | Cron desktop (*/30min) | Avaliador de melhorias (HTTP @reboot) |
| `gitea-ci-cleaner` | Cron desktop (45 */4h) | Limpeza de runs CI Gitea |
| `daily-selector` | Cron desktop (06:30) | Selector ate 5 noticias/dia diversas → status=scheduled |
| `intelligence-publisher` | Cron desktop (5 slots 09/11/13/15:30/17:30) | Publica slots scheduled em descomplicar.pt |
| `intelligence-researcher` | Cron desktop (9/14/20) | Fetch 214 RSS → Supabase |
| `intelligence-scorer` | Cron desktop (0/30 min) | Score OpenRouter gpt-oss-20b |
| `HEARTBEAT WP` | Check ao vivo | `wp post list cat=1188` → idade do ultimo post. Alerta se >26h |
| `/daily-digest` | Skill (interactivo) | Timer, tickets, facturas, leads, agenda |
| `/tasks-overview` | Skill (interactivo) | Tarefas pendentes/overdue + workflows |
| `/cleanup-downloads` | Skill (interactivo) | Limpeza pasta Transferencias |
| `/spec` + `/sprint` | Scan local | Specs e sprints activos |

Repo agentes: `git.descomplicar.pt/ealmeida/claude_automations_dev`



---

## Self-Healing

Antes de executar, ler `~/.claude-work/healing/today.jsonl` (se existir). Cada linha é um padrão de erro conhecido:

```json
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
```

Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.

---

*Skill v11.0.0 | 20-04-2026 | Descomplicar® — CT 102 eliminado, cron 100% local desktop*


## Healing Log
<!-- Registo automático de erros e correcções nesta skill -->
