feat: sync all plugins, skills, agents updates

New plugins: core-tools
New skills: auto-expense, ticket-triage, design, security-check,
  aiktop-tasks, daily-digest, imap-triage, index-update, mindmap,
  notebooklm, proc-creator, tasks-overview, validate-component,
  perfex-module, report, calendar-manager
New agents: design-critic, design-generator, design-lead,
  design-prompt-architect, design-researcher, compliance-auditor,
  metabase-analyst, gitea-integration-specialist
Updated: all plugin configs, knowledge datasets, existing skills

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-05 17:16:15 +00:00
parent f2b5171ea2
commit 9404af7ac9
184 changed files with 20865 additions and 1993 deletions

View File

@@ -0,0 +1,144 @@
---
name: aiktop-tasks
description: >
Executa tarefas agendadas para AikTop no Desk CRM. Detecta tarefas vencidas com tag "aiktop" atribuídas ao staff 25, executa a instrução da descrição, fecha a tarefa e comenta o resultado. Invocado automaticamente por cron no dev server a cada 15 min. Use when "aiktop tasks", "executar tarefas aiktop", "task queue ai".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 85
user_invocable: true
category: management
tags: [aiktop, automacao, task-queue, desk-crm]
desk_task: 1755
desk_project: 65
allowed-tools: Read, mcp__desk-crm-v3, mcp__mcp-time, mcp__ssh-unified, mcp__imap, mcp__memory-supabase
mcps: [desk-crm-v3, mcp-time]
---
# /aiktop-tasks v1.0
Executa automaticamente tarefas agendadas para o AikTop no Desk CRM.
---
## Protocolo
### Passo 1: Obter data actual
```
mcp__mcp-time__current_time → data hoje (YYYY-MM-DD)
```
### Passo 2: Recolher tarefas AikTop pendentes
```
mcp__desk-crm-v3__get_tasks({
assignee: 25,
tags: ["aiktop"],
status: [1, 4],
due_date_to: hoje
})
SE 0 tarefas → registar "Nenhuma tarefa AikTop pendente" e terminar.
```
### Passo 3: Para cada tarefa (por ordem de prioridade)
```
1. mcp__desk-crm-v3__update_task({ task_id, status: 4 })
→ Marcar "Em progresso"
2. LER task.name + task.description
→ A descrição É a instrução completa para o claude executar
3. EXECUTAR a instrução descrita na tarefa
→ Usar os MCPs disponíveis conforme necessário
→ Guardar resultado/output
4. mcp__desk-crm-v3__update_task({ task_id, status: 5 })
→ Marcar "Concluída"
5. mcp__desk-crm-v3__add_task_comment({
task_id,
content: html_resultado,
staff_id: 25
})
→ Comentar com o resultado da execução
```
### Passo 4: Resumo final
```
SE invocado via cron (não interactivo):
→ Escrever em ~/.claude-work/aiktop-tasks-{date}.log
SE invocado directamente:
→ Mostrar output markdown ao utilizador
```
---
## Formato Comentário de Resultado (HTML)
```html
<h4>Tarefa executada — YYYY-MM-DD HH:MM</h4>
<p><strong>Instrução:</strong> [nome da tarefa]</p>
<p><strong>Resultado:</strong> Concluído | Parcial | Erro</p>
<h4>Output</h4>
<ul>
<li>[resultado principal]</li>
<li>[dados relevantes]</li>
</ul>
<p><em>Executado automaticamente por /aiktop-tasks v1.0</em></p>
```
---
## Protocolo de Criação de Tarefas AikTop
> Para agendar trabalho para o AikTop, criar tarefa Desk CRM com:
| Campo | Valor |
|-------|-------|
| **Assignee** | AikTop (staff 25) |
| **Tag** | `aiktop` (obrigatório) |
| **Nome** | O que fazer (breve) |
| **Descrição** | Instrução completa — o claude vai executar isto literalmente |
| **Due date** | Quando executar |
| **Prioridade** | Conforme urgência |
**Exemplos de descrições válidas:**
- "Verificar logs `/root/Dev/imap-cleaner/cron.log` e `/root/Dev/auto-expense/auto-expense.log`. Reportar se houve erros ou se o pipeline correu bem."
- "Correr /imap-triage e reportar faturas detectadas."
- "Verificar tarefas overdue no Desk CRM e sugerir as 3 mais urgentes."
---
## Wrapper Script (dev server)
```bash
# /root/Dev/aiktop-tasks/run-aiktop-tasks.sh
#!/bin/bash
export IS_SANDBOX=1
LOG="$HOME/Dev/aiktop-tasks/aiktop-tasks.log"
echo "$(date) [START] A verificar tarefas AikTop..." >> "$LOG"
claude --print --dangerously-skip-permissions "/aiktop-tasks" < /dev/null >> "$LOG" 2>&1
EXIT_CODE=$?
echo "$(date) [END] exit=$EXIT_CODE" >> "$LOG"
exit $EXIT_CODE
```
**Cron:** `*/15 * * * * /root/Dev/aiktop-tasks/run-aiktop-tasks.sh`
---
## Anti-Patterns
- NUNCA executar tarefas sem tag `aiktop` (filtro de segurança)
- NUNCA fechar tarefa sem adicionar comentário com resultado
- NUNCA ignorar tarefas com status 4 (em progresso) — podem ter ficado presas
- SEMPRE executar por ordem de prioridade (4=Urgente primeiro)
- NUNCA assumir que a descrição é sempre simples — pode invocar outras skills
---
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*

View File

@@ -444,7 +444,7 @@ Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes data
```javascript
// Pesquisar técnicas de gestão de tempo
mcp__dify-kb__dify_kb_retrieve_segments({
mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "8ce4429f-8cf6-43b5-869d-75c8e1b461e8",
query: "blocos de foco time blocking"
})

View File

@@ -0,0 +1,140 @@
---
name: daily-digest
description: >
Resumo diario do estado operacional - timer activo, tickets abertos, facturas vencidas, leads novos, propostas pendentes e agenda do dia. Use when "resumo", "digest", "estado do dia", "dashboard", "metricas dia".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 85
user_invocable: true
category: management
tags: [digest, dashboard, daily, tickets, invoices, leads, calendar]
desk_task: 1710
desk_project: 65
allowed-tools: Read, Write, mcp__desk-crm-v3, mcp__google-workspace, mcp__mcp-time
mcps: desk-crm-v3, google-workspace, mcp-time
dependencies:
mcps: [desk-crm-v3, google-workspace, mcp-time]
triggers:
- "User asks for daily summary"
- "User mentions 'resumo', 'digest', 'estado do dia'"
- "Invoked by /today orchestrator"
---
# /daily-digest v1.0
Recolhe e apresenta o estado operacional do dia.
---
## Protocolo
### Passo 1: Recolher Dados (paralelo)
> Executar TUDO em paralelo para minimizar tempo.
```
Em paralelo:
1. TIMER ACTIVO
Verificar ~/.claude-work/active-timer.json
Se activo: mostrar tarefa, duracao
Se >4h: alertar "Timer activo ha muito tempo!"
2. TICKETS ABERTOS
mcp__desk-crm-v3__get_tickets({ status: [1,2,3], limit: 20 })
Contar por prioridade
3. FACTURAS VENCIDAS
mcp__desk-crm-v3__overdue_invoices_report()
Total valor + contagem
4. LEADS NOVOS
mcp__desk-crm-v3__get_leads({ status: [7,14], limit: 20 })
Leads com status 7 (Novo) ou 14
5. PROPOSTAS PENDENTES
mcp__desk-crm-v3__get_estimates({ status: 4, limit: 20 })
Estimates com status "To Do"
6. ESTIMATES ACEITES
mcp__desk-crm-v3__get_estimates({ status: 3, limit: 10 })
Destaques de valor
7. AGENDA DO DIA
mcp__google-workspace__calendar_get_events({
user_google_email: "emanuelalmeidaa@gmail.com",
time_min: "YYYY-MM-DDT00:00:00Z",
time_max: "YYYY-MM-DDT23:59:59Z"
})
```
### Passo 2: Formatar Dashboard
```markdown
## Resumo do Dia
### Timer
[Status ou "Nenhum timer activo"]
### Tickets
- Abertos: X (Y urgentes)
### Facturas
- Vencidas: X (valor total EUR)
### Tarefas (resumo)
- Urgentes (prioridade 4): X
- Alta prioridade overdue: Y
- Normal prioridade overdue: Z
- Total overdue: W
### Leads + Propostas
- Leads novos: X
- Propostas pendentes: Y
- Estimates aceites: Z (destaque: [cliente] [valor] EUR)
### Agenda
- HH:MM - [Evento]
- Ou "Sem eventos hoje"
```
### Passo 3: Output JSON (quando invocado pelo /today)
```
SE invocado com argumento "json":
Escrever em ~/.claude-work/today-digest-{date}.json
Formato:
{
"timer": null | {"task_id": 1446, "duration": "2h15m"},
"tickets": {"open": 4, "urgent": 1},
"invoices": {"overdue": 0, "total_eur": 0},
"leads": {"new": 0},
"estimates": {"pending": 0, "accepted": 10},
"calendar": []
}
SE invocado standalone:
Mostrar dashboard Markdown directamente
```
---
## Alertas Automaticos
Gerar alertas se:
- Timer activo >4h
- Facturas vencidas >30 dias
- Tickets urgentes (prioridade 3-4) sem resposta >24h
- Leads novos ha >48h sem contacto
---
## Anti-Patterns
- NUNCA mostrar todos os tickets/facturas (limite 20, mostrar resumo)
- NUNCA duplicar dados ja disponiveis noutras skills (/tasks-overview para tarefas detalhadas)
- SEMPRE usar mcp-time para data actual (nunca assumir)
---
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*

View File

@@ -111,7 +111,7 @@ if (protocol?.auto_consult) {
// 6. Consultar Dify KB (paralelo)
const results = await Promise.all(
protocol.priority_datasets.map(id =>
mcp__dify-kb__dify_kb_retrieve_segments({
mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: id,
query: query,
top_k: protocol.top_k || 3

View File

@@ -0,0 +1,254 @@
---
name: imap-triage
description: >
Triagem automatica de emails IMAP em 14 contas. Elimina spam, arquiva promocionais, identifica facturas para /auto-expense, flagga prioritarios. Deduplicacao via Supabase. Use when "imap", "triagem email", "limpar emails", "email triage", "processar emails".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 85
user_invocable: true
category: management
tags: [imap, email, triage, spam, promotions, invoices, supabase]
desk_task: 1710
desk_project: 65
allowed-tools: Read, Write, mcp__imap, mcp__ssh-unified
mcps: imap, ssh-unified
dependencies:
mcps: [imap, ssh-unified]
files:
- /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
triggers:
- "User asks to process emails"
- "User mentions 'imap', 'triagem', 'emails', 'limpar inbox'"
- "Invoked by /today orchestrator"
---
# /imap-triage v1.0
Triagem automatica de 14 contas IMAP com deduplicacao Supabase.
---
## Contas IMAP (14)
```
emanuel, it, help, suporte, contabilidade, financeiro,
rh, mkt, design, news, aiktop, recursos, google
```
---
## Protocolo
### Passo 0: Carregar emails ja processados (Supabase)
> Executar UMA VEZ no inicio, antes de iterar contas.
> Fonte de verdade: tabela `imap_processed_emails` em Supabase (EasyPanel).
```
mcp__ssh-unified__ssh_execute(
server="easy",
command="docker exec descomplicar_supabase-db-1 psql -U postgres -d postgres -t -A -c \"SELECT message_id FROM public.imap_processed_emails\""
)
Guardar resultado como Set: processed_ids
```
### Passo 1: Carregar tabela de fornecedores
```
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
Extrair:
- Lista de dominios de fornecedores conhecidos
- Lista de dominios de plataformas multi-fornecedor
```
### Passo 2: Iterar contas IMAP
Para cada conta: `imap_list_emails(account, folder="INBOX", limit=50)`
Para cada email:
1. Verificar `message_id` contra `processed_ids` -> SE match, SALTAR
2. Classificar por ordem de prioridade (ver seccao Classificacao)
### Passo 3: Registar no Supabase (batch)
> Executar UMA VEZ no final, apos processar todas as contas.
```
Acumular lista: { message_id, account_id, subject, sender, email_date, action, action_detail }
Actions: spam_deleted, promo_archived, expense_flagged, priority_flagged, notification_closed, skipped
mcp__ssh-unified__ssh_execute(
server="easy",
command="docker exec descomplicar_supabase-db-1 psql -U postgres -d postgres -c \"
INSERT INTO public.imap_processed_emails (message_id, account_id, subject, sender, email_date, action, action_detail)
VALUES (...)
ON CONFLICT (message_id) DO NOTHING;
\""
)
Maximo ~50 VALUES por INSERT.
```
### Passo 4: Escrever output JSON
```
Escrever em ~/.claude-work/today-imap-{date}.json:
{
"spam": 5,
"promo": 12,
"facturas": [
{"account": "contabilidade", "uid": 164, "message_id": "...", "fornecedor": "MEO", "subject": "..."}
],
"prioritarios": [
{"account": "emanuel", "uid": 100, "subject": "...", "sender": "..."}
],
"notificacoes": [...],
"erros": [],
"contas_processadas": 14,
"total_emails": 45
}
```
---
## Classificacao de Emails
> Aplicar por ordem de prioridade. Primeiro match ganha.
### 1. SPAM -> Eliminar
```
imap_delete_email(account, uid)
Padroes:
- Subject: lottery, winner, urgent money, bitcoin investment, guest post, SEO services, backlinks, partnership
- Remetente: *.ru, *.cn (excepto conhecidos)
- Subject todo em MAIUSCULAS
- Subject com caracteres estranhos excessivos
```
### 2. PROMOCIONAL -> Arquivar
```
imap_move_email(account, uid, "Promotions")
NOTA: Contas sem pasta "Promotions" (google, design, rh) -> imap_delete_email
Padroes:
- Subject: newsletter, promo, desconto, oferta, unsubscribe
- Remetente: *@marketing.*, *@news.*, *@promo.*
- Headers: List-Unsubscribe presente
```
### 3. FACTURA/RECIBO -> Flag para /auto-expense
```
NAO processar aqui - apenas identificar e registar no output JSON.
A skill /auto-expense trata da criacao de despesas.
Deteccao:
3a. FORNECEDOR DIRECTO:
- Dominio remetente bate com tabela de fornecedores
- Subject contem: factura, invoice, recibo, receipt, pagamento, paid
3b. PLATAFORMA MULTI-FORNECEDOR:
- Dominio: toconline.pt, stripe.com, paypal.com, fastspring.com, payproglobal.com
- Registar com nota sobre plataforma
Action: expense_flagged
```
### 4. NOTIFICACAO SISTEMA -> Registar
```
Padroes protegidos (NUNCA auto-fechar):
- Legal Update, Policy Change, Deprecation, End of Life
- Security Alert, API Change, Terms Update
- Action Required, Migration Required
- Compliance, GDPR, Infrastructure Change
Outros:
- Wordfence alerts, n8n updates, server notifications
- Registar para inclusao no dashboard de alertas
Action: notification_closed ou priority_flagged (conforme gravidade)
```
### 5. PRIORITARIO -> Incluir no relatorio
```
- Remetente: cliente conhecido (verificar nome/dominio)
- Subject: urgente, problema, erro, critical, down
- Threads activas (RE:, FW:)
Action: priority_flagged
```
### 6. RESTANTES -> Saltar
```
Emails que nao encaixam em nenhuma categoria.
Action: skipped
```
---
## Excepcoes (NUNCA processar automaticamente)
```
- *@descomplicar.pt (internos)
- *@gov.pt, *@at.gov.pt, *@seg-social.pt (governo)
- *@tribunais.org.pt (tribunais)
```
---
## Emails a IGNORAR (nao sao facturas)
```
- "Payment Confirmation" / "Payment Was Successfully Processed" -> apenas confirmacao
- "Your subscription has been renewed" sem valor -> apenas notificacao
- "Notificacao de transferencia" de bancos -> notificacao bancaria
- Marketing/changelog dos mesmos fornecedores -> promocional
- Subject "Welcome" / "Getting Started" -> onboarding
```
---
## Output Standalone
Quando invocado directamente (sem /today):
```markdown
## Triagem IMAP - DD-MM-YYYY
**Total: X emails processados em Y contas**
| Conta | Spam | Promo | Factura | Notif | Prio | Total |
|-------|------|-------|---------|-------|------|-------|
### Facturas Detectadas (para /auto-expense)
- contabilidade: MEO (uid 164) - FT A/861215955
### Prioritarios
- emanuel: [Subject] de [Remetente]
### Alertas Sistema
- [Alertas de seguranca, updates criticos]
```
---
## Anti-Patterns
- NUNCA criar despesas directamente (delegar para /auto-expense)
- NUNCA processar >50 emails por conta (limitar)
- NUNCA eliminar emails de dominios protegidos
- SEMPRE registar no Supabase, mesmo se skipped
- SEMPRE usar imap_delete para contas sem pasta "Promotions"
---
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*

View File

@@ -0,0 +1,456 @@
# Regras de Triagem de Emails
## Contas IMAP (12)
```yaml
accounts:
- emanuel@descomplicar.pt
- it@descomplicar.pt
- help@descomplicar.pt
- suporte@descomplicar.pt
- contabilidade@descomplicar.pt
- financeiro@descomplicar.pt
- info@descomplicar.pt
- rh@descomplicar.pt
- mkt@descomplicar.pt
- design@descomplicar.pt
- news@descomplicar.pt
- aiktop@descomplicar.pt
```
---
## Regra 1: SPAM (Eliminar)
**Acção**: `imap_delete_email`
### Padrões Subject (case insensitive)
```
- lottery
- winner
- million dollars
- urgent money
- bitcoin investment
- crypto opportunity
- claim your prize
- act now
- limited time offer
- you have been selected
- dear beneficiary
- inheritance
- nigerian prince
```
### Padrões Remetente
```
- *@*.ru (excepto conhecidos)
- *@*.cn (excepto conhecidos)
- no-reply@spam*
- noreply@bulk*
```
### Indicadores técnicos
```
- SPF fail
- DKIM fail
- Muitos caracteres especiais no subject
- Subject todo em MAIÚSCULAS
```
---
## Regra 2: PROMOCIONAIS (Arquivar ou Eliminar)
**Acção padrão**: `imap_move_email` → pasta "Promotions"
**Excepções por conta:**
```yaml
delete_promotions:
- rh # Não tem pasta Promotions - apagar directamente
```
> Contas listadas em `delete_promotions`: usar `imap_delete_email` em vez de mover.
### Padrões Subject
```
- newsletter
- promo
- promoção
- desconto
- oferta especial
- black friday
- cyber monday
- novidades
- new arrivals
- sale
- % off
- grátis
- free shipping
```
### Padrões Remetente
```
- *@marketing.*
- *@news.*
- *@promo.*
- *@newsletter.*
- *@campaigns.*
- *@mailchimp.com
- *@sendgrid.net
- *@mailgun.org
```
### Headers
```
- List-Unsubscribe presente
- Precedence: bulk
- X-Campaign-*
```
---
## Regra 3: FACTURAS PAGAS (Reencaminhar)
**Acção**: Registar para reencaminhar para `contabilidade@descomplicar.pt`
### Padrões Subject
```
- factura
- fatura
- invoice
- recibo
- receipt
- pagamento confirmado
- payment confirmed
- pago
- paid
- comprovativo
- ordem de pagamento
```
### Padrões Remetente (serviços conhecidos)
```
- *@hetzner.com
- *@ovh.com
- *@cloudflare.com
- *@github.com
- *@google.com
- *@microsoft.com
- *@adobe.com
- *@figma.com
- *@notion.so
- *@stripe.com
- *@paypal.com
- *@wise.com
- *@revolut.com
- *@n26.com
- *facturacao@*
- *billing@*
- *invoices@*
```
### Anexos
```
- *.pdf com "factura" no nome
- *.pdf com "invoice" no nome
- *.pdf com "recibo" no nome
```
---
## Regra 4: PRIORITÁRIOS (Listar)
**Acção**: Incluir no relatório diário para revisão manual
### Padrões Subject
```
- urgente
- urgent
- importante
- important
- problema
- problem
- erro
- error
- falha
- failure
- down
- offline
- crítico
- critical
```
### Remetentes prioritários
```
# Clientes activos (verificar DeskCRM)
# Parceiros importantes
# Serviços críticos:
- *@cloudflare.com (security alerts)
- *@hetzner.com (server alerts)
- *@github.com (security)
- *@google.com (security)
```
### Indicadores
```
- RE: ou FW: (threads activas)
- Múltiplos destinatários da empresa
- Marcado como importante pelo remetente
```
---
## Excepções (Nunca processar automaticamente)
```yaml
whitelist_senders:
- *@descomplicar.pt # Internos
- *@cliente-importante.pt # Clientes VIP
whitelist_domains:
- gov.pt # Governo
- tribunais.org.pt # Tribunais
- at.gov.pt # Autoridade Tributária
- seg-social.pt # Segurança Social
```
---
## Pastas IMAP Standard
| Pasta | Uso |
|-------|-----|
| INBOX | Emails por processar |
| Promotions | Emails promocionais arquivados |
| Processed | Emails processados pelo /today |
| Important | Emails marcados como prioritários |
| Trash | Eliminados |
---
## Métricas Diárias
Registar em cada execução:
```yaml
metrics:
date: YYYY-MM-DD
accounts_processed: 12
total_emails: X
spam_deleted: Y
promotions_archived: Z
invoices_forwarded: W
priority_flagged: V
processing_time: Xs
```
---
---
## Regras de Tickets (DeskCRM)
### Notificações de Sistema → NUNCA auto-fechar
> **REGRA PRIORITÁRIA:** Verificar ANTES dos padrões SPAM. Se um ticket corresponder a esta regra, não pode ser fechado automaticamente.
**Padrões protegidos (subject - case insensitive):**
```regex
Legal Update|Legal Notice|Policy Change|Policy Update|
Deprecation|End of Life|EOL|Breaking Change|
Migration Required|Action Required|Action Needed|
Security Alert|Security Advisory|Security Notice|
API Change|API Update|Terms Update|Terms Change|
Service Disruption|Maintenance Required|
Compliance|GDPR|Data Processing|Data Processor|
Infrastructure Change|Platform Update|transitions to
```
**Condição:** Remetente deve ser fornecedor conhecido (ver lista de remetentes conhecidos abaixo).
**Acção:**
```
→ NÃO fechar
→ Listar no relatório como: "⚠️ REQUER ACÇÃO: #{ID} - {Assunto}"
→ Manter aberto para análise e decisão manual
```
---
### Tickets SPAM → Fechar AUTOMATICAMENTE
> **IMPORTANTE:** Verificar PRIMEIRO se o ticket corresponde à regra de "Notificações de Sistema" acima. Se sim, NÃO fechar.
**Padrões de detecção (subject):**
```regex
Guest Post|SEO services|backlinks|partnership|
link building|dofollow|collaboration opportunity|
Boas Festas|Season's Greetings
```
> **NOTA:** "Action Required", "Termos de Serviço" e notificações legais foram removidos dos padrões SPAM. Podem indicar mudanças reais em serviços que usamos. São tratados pela regra de "Notificações de Sistema" acima.
**⚡ Acção AUTOMÁTICA - Executar SEM intervenção manual:**
```
close_ticket(ticket_id, message="Fechado automaticamente - SPAM detectado")
# Registar: "🗑️ SPAM fechado: #{ID} - {Assunto}"
```
> [!important] SPAM = FECHAR IMEDIATAMENTE
> Não perder tempo a analisar. Fechar automaticamente e seguir em frente.
---
### Tickets de PAGAMENTOS → Contabilidade + Fechar
**Departamentos DeskCRM:**
| ID | Nome | Email |
|----|------|-------|
| 1 | Comercial | info@descomplicar.pt |
| 2 | Suporte | suporte@descomplicar.pt |
| 3 | **Contabilidade** | contabilidade@descomplicar.pt |
| 4 | RH | rh@descomplicar.pt |
| 5 | Design | design@descomplicar.pt |
| 6 | Marketing | mkt@descomplicar.pt |
| 7 | Tecnologia | it@descomplicar.pt |
**Padrões de detecção (subject):**
```regex
payment|pagamento|pago|paid|
invoice|factura|fatura|recibo|
successfully.*(processed|completed)|
subscription.*(renewed|confirmed)|
order.*confirmed|receipt|
account.*funded|has been funded|
Envio de Fatura Eletrónica|
Invoice Payment Confirmation|
Customer Invoice
```
**Remetentes conhecidos (processar SEMPRE):**
```yaml
services:
# Hosting & Infra
- "*@elasticemail.com" # Elastic Email
- "*@hetzner.com" # Hetzner
- "*@hetzner.de"
- "*@centos-webpanel.com" # CWP
- "*@control-webpanel.com"
# Design & Tools
- "*@canva.com" # Canva
# Telecom PT
- "*@meo.pt" # MEO
- "*@altice.pt"
- "*@nos.pt" # NOS (futuro)
- "*@vodafone.pt" # Vodafone (futuro)
# Cloud & SaaS
- "*@cloudflare.com"
- "*@github.com"
- "*@google.com"
- "*@microsoft.com"
- "*@adobe.com"
- "*@figma.com"
- "*@notion.so"
- "*@openai.com"
- "*@email.openai.com"
- "*@anthropic.com"
- "*@openrouter.zendesk.com" # OpenRouter
# Pagamentos
- "*@stripe.com"
- "*@paypal.com"
- "*@wise.com"
- "*@revolut.com"
```
**Lógica de processamento:**
```
IF assunto contém padrão de pagamento/factura:
IF remetente IN remetentes_conhecidos:
→ Contabilidade + Fechar (AUTOMÁTICO)
ELSE:
→ Avaliar indicadores de spam/phishing
→ LISTAR para revisão manual com recomendação
```
**⚡ Acção AUTOMÁTICA para remetentes CONHECIDOS:**
```
# Executar AMBAS as acções automaticamente, SEM intervenção manual:
1. update_ticket(ticket_id, department=3) # Mover para Contabilidade
2. close_ticket(ticket_id, message="Fatura processada automaticamente - Contabilidade")
# Registar: "💰 Contabilidade + Fechado: #{ID} - {Assunto}"
```
**Acção para remetentes DESCONHECIDOS:**
```
1. Avaliar indicadores de spam (ver abaixo)
2. LISTAR no relatório com recomendação:
- [SPAM?] se indicadores presentes
- [NOVO?] se parece legítimo (possível novo serviço)
3. Aguardar decisão manual
```
### Indicadores de SPAM/PHISHING
**Alta probabilidade de SPAM:**
- Remetente pessoal (gmail, hotmail, yahoo) a enviar "facturas empresariais"
- Domínio suspeito (muitos números, hífens, extensões estranhas)
- Erros ortográficos no assunto ("facktura", "pagamanto")
- Assunto todo em MAIÚSCULAS
- Urgência exagerada ("ÚLTIMO AVISO", "URGENTE", "CONTA SUSPENSA")
- Sem número de factura/referência específico
- Remetente não corresponde à empresa alegada no assunto
**Provavelmente LEGÍTIMO (novo serviço):**
- Domínio empresarial consistente com o assunto
- Formato profissional (número de factura, data, referência)
- Sem urgência exagerada
- Padrão consistente com facturas reais
> [!info] NUNCA eliminar automaticamente remetentes desconhecidos
> Podem ser novos serviços subscritos. Sempre listar para revisão manual.
### Tickets para ELIMINAR (sem valor contabilístico)
**Padrões de assunto:**
```yaml
delete_patterns:
# Elastic Email - recargas
- "Your Elastic Email Account was successfully re-charged"
- "Account re-charged"
- "Auto-recharge successful"
- "Credit added to your account"
# FULL Services - activações
- "[BOT] Ativação realizada com sucesso"
- "[BOT] Activation successful"
```
**Acção:**
```
delete_ticket(ticket_id, confirm=true, reason="Notificação automática sem valor")
```
> Estas são notificações de recarga automática, não facturas. Não têm valor para contabilidade.
**Exemplos de assuntos detectados:**
- "Your Elastic Email Payment Was Successfully Processed"
- "Canva - Your invoice is ready"
- "Hetzner - Invoice for January 2025"
- "CentOS WebPanel Pro License Invoice"
- "MEO - Factura disponível"
- "Invoice #12345 - Payment Confirmed"
- "Pagamento confirmado - Factura #123"
- "Your OpenAI API account has been funded"
- "Your OpenRouter, Inc receipt [#1234-5678]"
- "Your receipt from OpenRouter, Inc #1234-5678"
- "Envio de Fatura Eletrónica: FT A/123456789"
- "Invoice Payment Confirmation"
- "Customer Invoice"
---
**Versão**: 1.1.0
**Última actualização**: 2025-01-21

View File

@@ -0,0 +1,392 @@
---
name: index-update
description: Actualiza INDEX.md de procedimentos após criar/modificar/arquivar PROC. Use quando "actualizar index", "update INDEX.md", depois de criar procedimento, mover PROC, arquivar procedimento. Mantém estatísticas, navegação e data actualizadas.
---
# /index-update - Actualizador de INDEX.md
Actualiza ficheiros INDEX.md de procedimentos após operações (criar, modificar, mover, arquivar).
---
## Referências e Documentação
**SEMPRE consultar:**
- **[06-Operacoes/Procedimentos/INDEX.md](file:///media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/INDEX.md)** - INDEX principal (8 departamentos)
- **[Hub CLAUDE.md](file:///media/ealmeida/Dados/Hub/CLAUDE.md)** - Convenções INDEX.md
---
## O Que Actualiza
### 1. INDEX.md Departamental
Após criar/modificar/mover PROC em departamento:
```markdown
| [PROC-Titulo.md](./PROC-Titulo.md) | Descrição breve | [DEPT]-[TEMA]-[NUM] |
```
**Campos:**
- Nome ficheiro (link relativo)
- Descrição breve (1 linha, <80 chars)
- Código procedimento
**Ordenação:** Por código (DEV-MCP-001, DEV-MCP-002, WP-SEC-001...)
### 2. INDEX.md Principal
Actualizar estatísticas globais:
```markdown
**Total:** X procedimentos (update counter)
| Departamento | Procedimentos | Código Exemplo |
|--------------|---------------|----------------|
| D7-Tecnologia | 28 → 29 | DEV, WP, INF, AI, WEB |
```
### 3. Metadados
Actualizar em AMBOS os INDEX.md:
```markdown
**Última actualização:** 2026-02-13
```
---
## Protocolo de Actualização
### Após Criar PROC (/proc-creator)
```
1. IDENTIFICAR departamento do novo PROC
- Ler frontmatter do PROC-*.md
- Obter dept_id e codigo
2. LER INDEX.md departamental
- Path: /media/.../Procedimentos/[Dept]/INDEX.md
3. ADICIONAR linha na tabela:
| [PROC-Nome.md](./PROC-Nome.md) | Descrição | [DEPT]-[TEMA]-[NUM] |
- Inserir na posição correcta (ordenado por código)
4. INCREMENTAR contador no INDEX departamental:
"X procedimentos" → "X+1 procedimentos"
5. ACTUALIZAR data:
"Última actualização: YYYY-MM-DD"
6. LER INDEX.md principal
- Path: /media/.../Procedimentos/INDEX.md
7. INCREMENTAR contador na tabela do departamento:
| D7-Tecnologia | 28 → 29 | ...
8. INCREMENTAR "Total:" no topo:
"36 procedimentos" → "37 procedimentos"
9. ACTUALIZAR data INDEX principal
10. CONFIRMAR ambos salvos
```
### Após Mover PROC
```
1. REMOVER linha do INDEX origem
2. DECREMENTAR contador origem
3. ADICIONAR linha ao INDEX destino
4. INCREMENTAR contador destino
5. ACTUALIZAR INDEX principal (sem alterar total)
6. ACTUALIZAR datas ambos
```
### Após Arquivar PROC
```
1. REMOVER linha do INDEX departamental
2. DECREMENTAR contador departamental
3. ACTUALIZAR INDEX principal (decrementar total)
4. ADICIONAR nota "Arquivado YYYY-MM-DD" se relevante
5. ACTUALIZAR datas
```
---
## Formato INDEX.md Departamental
```markdown
---
title: D[N]-[Nome] - Procedimentos
date: YYYY-MM-DD
type: index
status: active
tags: [d[N], procedimentos, [tema]]
---
# D[N] — [Nome] - Procedimentos
**X procedimentos | Código: [DEPT]**
---
## 📋 Lista de Procedimentos
| Procedimento | Descrição | Código |
|--------------|-----------|--------|
| [PROC-Nome1.md](./PROC-Nome1.md) | Descrição breve | [DEPT]-[TEMA]-001 |
| [PROC-Nome2.md](./PROC-Nome2.md) | Descrição breve | [DEPT]-[TEMA]-002 |
---
## 📊 Estatísticas
| Métrica | Valor |
|---------|-------|
| Total procedimentos | X |
| Códigos únicos | [DEPT1], [DEPT2], [DEPT3] |
| Status draft | Y |
| Status active | Z |
---
## 🔗 Navegação
- [[../INDEX|← Voltar a Procedimentos INDEX]]
- [[../../../04-Stack/02.01-Departamentos/D[N]-[Nome]|Ver Departamento]]
---
**D[N] — [Nome] | X Procedimentos**
**Última actualização:** YYYY-MM-DD
```
---
## Formato INDEX.md Principal
```markdown
---
title: Procedimentos - INDEX
date: YYYY-MM-DD
type: index
status: active
tags: [procedimentos, organizacao, hub]
---
# Procedimentos - INDEX Principal
**Total:** X procedimentos | **Departamentos:** 8
---
## 📊 Distribuição por Departamento
| Departamento | Procedimentos | Código | INDEX |
|--------------|---------------|--------|-------|
| D1-Comercial | 1 | CRM | [INDEX](./D1-Comercial/INDEX.md) |
| D2-Suporte | 0 | SUP | [INDEX](./D2-Suporte/INDEX.md) |
| D3-Contabilidade | 2 | FIN | [INDEX](./D3-Contabilidade/INDEX.md) |
| D4-RH | 0 | HR | [INDEX](./D4-RH/INDEX.md) |
| D5-Design | 0 | DES | [INDEX](./D5-Design/INDEX.md) |
| D6-Marketing | 1 | MKT | [INDEX](./D6-Marketing/INDEX.md) |
| D7-Tecnologia | 28 | DEV, WP, INF, AI, WEB | [INDEX](./D7-Tecnologia/INDEX.md) |
| Cross-Departamental | 4 | XDP | [INDEX](./Cross-Departamental/INDEX.md) |
---
**Última actualização:** YYYY-MM-DD
```
---
## Validações
Antes de salvar INDEX.md, verificar:
```
✅ Contadores correctos (manual count vs INDEX)
✅ Ordenação por código mantida
✅ Links relativos funcionam (./PROC-*.md)
✅ Sem linhas duplicadas
✅ Sem procedimentos órfãos (ficheiro existe mas não está no INDEX)
✅ Sem fantasmas (linha no INDEX mas ficheiro não existe)
✅ Data actualizada para hoje
✅ Formato tabela Markdown correcto
```
---
## Integração com /proc-creator
`/proc-creator` chama `/index-update` automaticamente:
```
User: /proc-creator "MCP Session Recovery"
→ PROC-MCP-Session-Recovery.md criado
→ /index-update triggered automaticamente
→ D7-Tecnologia/INDEX.md actualizado (28 → 29)
→ INDEX.md principal actualizado (36 → 37)
→ Confirmação ao utilizador
```
---
## Modo Manual
Quando usar manualmente:
```
User: Arquivei 3 procedimentos antigos do D7. Actualizar INDEX?
Assistant: /index-update
1. Lendo D7-Tecnologia/INDEX.md...
2. Detectei que PROC-X, PROC-Y, PROC-Z não existem mais
3. Removendo linhas...
4. Actualizando contador: 28 → 25
5. Actualizando INDEX principal: 36 → 33
6. ✅ Ambos os INDEX.md actualizados
```
---
## Detecção Automática de Dessinc
Quando `/index-update` é chamado sem contexto:
```
1. PARA CADA departamento:
- Ler INDEX.md
- Listar ficheiros PROC-*.md no directório
- Comparar
2. DETECTAR problemas:
- Órfãos: ficheiro existe mas não está no INDEX
- Fantasmas: linha no INDEX mas ficheiro não existe
- Contadores errados: NUM no INDEX ≠ count real
3. REPORTAR discrepâncias:
"D7-Tecnologia: 3 órfãos detectados"
"D3-Contabilidade: contador errado (diz 2, tem 3)"
4. PERGUNTAR ao utilizador:
"Corrigir automaticamente? [Sim/Não]"
5. SE Sim:
- Adicionar órfãos ao INDEX
- Remover fantasmas do INDEX
- Corrigir contadores
- Actualizar datas
```
---
## Exemplos de Uso
### Exemplo 1: Após Criar PROC
```
User: /proc-creator criou PROC-WordPress-CLI.md
Assistant: (auto-triggered /index-update)
✅ D7-Tecnologia/INDEX.md actualizado
- Adicionada linha: PROC-WordPress-CLI.md | WP-CLI-001
- Contador: 28 → 29
✅ INDEX.md principal actualizado
- D7: 28 → 29
- Total: 36 → 37
```
### Exemplo 2: Correcção Manual
```
User: /index-update
Assistant:
🔍 Verificando consistência...
D7-Tecnologia:
- ⚠️ 2 órfãos detectados:
- PROC-MCP-Troubleshooting-Erro-471.md (não está no INDEX)
- PROC-MCP-Session-Recovery.md (não está no INDEX)
- ✅ Sem fantasmas
D3-Contabilidade:
- ⚠️ Contador errado: INDEX diz 2, existem 3 ficheiros
Corrigir automaticamente? [Sim]
→ Adicionando órfãos...
→ Corrigindo contadores...
→ Actualizando datas...
✅ Todos os INDEX.md consistentes
```
### Exemplo 3: Após Arquivar
```
User: Arquivei PROC-Backup-Old-Method.md (obsoleto)
Assistant: /index-update D7-Tecnologia
✅ Removido PROC-Backup-Old-Method.md do INDEX
✅ Contador: 29 → 28
✅ INDEX principal: 37 → 36
✅ Data actualizada
```
---
## Anti-Patterns
**NUNCA:**
- ❌ Actualizar INDEX sem verificar ficheiro existe
- ❌ Esquecer de actualizar INDEX principal
- ❌ Deixar data desactualizada
- ❌ Quebrar ordenação por código
- ❌ Adicionar linha com link quebrado
**SEMPRE:**
- ✅ Actualizar AMBOS os INDEX (dept + principal)
- ✅ Verificar ficheiro existe antes de adicionar
- ✅ Manter ordenação por código
- ✅ Actualizar contadores correctamente
- ✅ Actualizar data para hoje
---
## Validação Pós-Actualização
Checklist automática:
```
✅ Contadores matemáticos correctos
✅ Links relativos válidos
✅ Ordenação mantida
✅ Sem duplicados
✅ Sem órfãos detectados
✅ Sem fantasmas detectados
✅ Data = hoje
✅ Formato Markdown válido
```
---
## Scripts Auxiliares (Futuro)
```bash
# Validar consistência INDEX.md
./scripts/validate-index.sh
# Detectar órfãos e fantasmas
./scripts/detect-orphans.sh
# Re-gerar INDEX.md do zero
./scripts/rebuild-index.sh [departamento]
```
---
*Skill v1.0.0 | 2026-02-13 | Plugin gestao | Descomplicar®*

View File

@@ -9,7 +9,7 @@ version: 1.1.0
user_invocable: true
tags: [knowledge, kb, dify, wikijs, supabase, context7, search, documentation]
desk_task: 1474
allowed-tools: Read, Grep, mcp__dify-kb__dify_kb_retrieve_segments, mcp__wikijs__search_pages, mcp__memory-supabase__search_memories, mcp__context7__get-library-docs
allowed-tools: Read, Grep, mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments, mcp__wikijs__search_pages, mcp__memory-supabase__search_memories, mcp__context7__get-library-docs
category: productivity
quality_score: 85
updated: "2026-02-04T18:00:00Z"
@@ -235,7 +235,7 @@ async function pesquisar(query, categoria) {
fonte.folders.map(folder =>
Grep({
pattern: extrairKeywords(query).join('|'),
path: `/media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/${folder}`,
path: `/media/ealmeida/Dados/Hub/${folder}`,
output_mode: 'content'
})
)
@@ -328,7 +328,10 @@ if (resultado.lacuna || resultado.score < 50) {
## MCPs Disponíveis
### Dify KB
### Knowledge Sources
**Primario:** NotebookLM
**Fallback:** Dify KB
```
mcp__dify-kb__dify_kb_list_datasets # Listar datasets
mcp__dify-kb__dify_kb_retrieve_segments # Pesquisar (dataset_id, query)
@@ -359,7 +362,7 @@ mcp__context7__get-library-docs # Obter docs
### Filesystem (Docs Locais)
```
Grep/Glob em:
- /media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/ (Obsidian vault)
- /media/ealmeida/Dados/Hub/ (Obsidian vault)
- /media/ealmeida/Dados/GDrive/Projectos/
```
@@ -538,6 +541,13 @@ Esta skill já faz routing automático para datasets Dify, mas em caso de dúvid
### Como Consultar
```javascript
# PRIMARIO: NotebookLM (Gemini 2.5 RAG)
# mcp__notebooklm__notebook_query({notebook_id: "0c9c079c-a426-486c-99eb-1564d42d37ad", query: "<tema>"}) // Gestao de Projectos e Agile
# mcp__notebooklm__notebook_query({notebook_id: "f9dc59c2-718b-4b12-bd06-095d4bfa3e34", query: "<tema>"}) // Gestao de Operacoes
# mcp__notebooklm__notebook_query({notebook_id: "79d43410-0e29-4be1-881d-84db6bdc239a", query: "<tema>"}) // Estrategia e Empreendedorismo
# mcp__notebooklm__notebook_query({notebook_id: "ebee9fe1-78fd-4f85-8938-f19f3ea32131", query: "<tema>"}) // Obsidian + Claude
# FALLBACK: Dify KB (se NotebookLM insuficiente)
// Pesquisar no Data Lake geral
mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: "b4e233d6-0d78-42f6-aef4-a56280600fe8",

View File

@@ -412,7 +412,7 @@
{
"type": "filesystem",
"paths": [
"/media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/"
"/media/ealmeida/Dados/Hub/"
]
},
{
@@ -449,7 +449,7 @@
{
"type": "filesystem",
"paths": [
"/media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/03-Recursos/"
"/media/ealmeida/Dados/Hub/03-Recursos/"
]
}
]
@@ -1712,7 +1712,7 @@
"qualidade": "09-operacoes-qualidade/qualidade-procedimentos"
},
"local_paths": {
"planeamento": "/media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/",
"planeamento": "/media/ealmeida/Dados/Hub/",
"projectos": "/media/ealmeida/Dados/GDrive/Projectos/",
"dev": "/media/ealmeida/Dados/Dev/"
},

View File

@@ -136,7 +136,7 @@ Params:
### Filesystem
```
Grep em paths do routing:
- /media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/ (Obsidian vault)
- /media/ealmeida/Dados/Hub/ (Obsidian vault)
- /media/ealmeida/Dados/GDrive/Projectos/
```

View File

@@ -0,0 +1,164 @@
---
name: mindmap
title: Mindmap Generator (DesktopNaotu)
description: Gera ficheiros .km (mindmap) compativeis com DesktopNaotu/Kityminder. Cria mindmaps a partir de topicos, planos, brainstorms ou qualquer estrutura hierarquica.
author: Descomplicar
version: 1.0.0
tags: [mindmap, naotu, kityminder, brainstorm, planeamento, organizacao]
user_invocable: true
trigger_patterns:
- "mindmap"
- "mapa mental"
- "mind map"
- "naotu"
- "criar mindmap"
- "gerar mindmap"
- "brainstorm visual"
---
# Mindmap Generator - DesktopNaotu
Gera ficheiros `.km` compativeis com DesktopNaotu (Kityminder) para visualizacao de mindmaps.
## Formato .km
Ficheiro JSON com a seguinte estrutura:
```json
{
"root": {
"data": {
"id": "<unique-id>",
"created": <timestamp-ms>,
"text": "Topico Central"
},
"children": [
{
"data": {
"id": "<unique-id>",
"created": <timestamp-ms>,
"text": "Sub-topico"
},
"children": []
}
]
},
"template": "default",
"theme": "fresh-blue",
"version": "1.4.43"
}
```
## Templates Disponiveis
| Template | Descricao |
|----------|-----------|
| `default` | Layout classico radial (centro para fora) |
| `right` | Todos os ramos para a direita |
| `structure` | Organograma (cima para baixo) |
| `filetree` | Arvore de ficheiros (esquerda para direita) |
| `filetree-up` | Arvore ascendente |
| `filetree-down` | Arvore descendente |
| `fish-bone` | Diagrama espinha de peixe (Ishikawa) |
| `tianpan` | Layout circular (tianpan) |
## Themes Disponiveis
| Theme | Cor |
|-------|-----|
| `fresh-blue` | Azul (default) |
| `fresh-green` | Verde |
| `fresh-pink` | Rosa |
| `fresh-purple` | Roxo |
| `fresh-red` | Vermelho |
| `fresh-soil` | Terra/Castanho |
| `classic-compact` | Classico compacto |
| `snow-compact` | Branco/neve compacto |
| `tianpan-compact` | Tianpan compacto |
## Instrucoes de Geracao
Quando o utilizador pedir um mindmap:
1. **Identificar o topico central** e sub-topicos a partir do pedido
2. **Escolher template** adequado ao tipo de conteudo:
- Brainstorm geral -> `default`
- Plano/processo linear -> `right`
- Organograma/hierarquia -> `structure`
- Analise causa-efeito -> `fish-bone`
- Listagem/arvore -> `filetree`
3. **Escolher theme** (default: `fresh-blue`, ou perguntar preferencia)
4. **Gerar o JSON** com IDs unicos (usar formato `km<timestamp><random>`)
5. **Guardar** em `/home/ealmeida/.config/desktopnaotu/backup/<nome>.km` para acesso facil pela app
6. **Informar** o utilizador do path e como abrir
### Regras de geracao de IDs
Cada node precisa de um `id` unico. Usar o formato: `km` + base36 do timestamp + sequencia aleatoria.
Gerar com Python:
```python
import time, random, string, json
def gen_id():
ts = int(time.time() * 1000)
rand = ''.join(random.choices(string.ascii_lowercase + string.digits, k=4))
return f"km{ts}{rand}"
def node(text, children=None):
return {
"data": {
"id": gen_id(),
"created": int(time.time() * 1000),
"text": text
},
"children": children or []
}
```
### Exemplo de geracao
```python
mindmap = {
"root": node("Projecto X", [
node("Fase 1 - Discovery", [
node("Pesquisa mercado"),
node("Entrevistas"),
node("Analise competitiva")
]),
node("Fase 2 - Design", [
node("Wireframes"),
node("Prototipo"),
node("Testes UX")
]),
node("Fase 3 - Desenvolvimento", [
node("Frontend"),
node("Backend"),
node("Integracao")
])
]),
"template": "right",
"theme": "fresh-blue",
"version": "1.4.43"
}
with open("/home/ealmeida/.config/desktopnaotu/backup/projecto-x.km", "w") as f:
json.dump(mindmap, f, ensure_ascii=False)
```
### Abrir o ficheiro
Depois de gerar, o utilizador pode abrir directamente:
```bash
/home/ealmeida/Programas/DesktopNaotu/DesktopNaotu "/home/ealmeida/.config/desktopnaotu/backup/<nome>.km"
```
Ou abrir a app e usar File > Open para navegar ate ao ficheiro.
## Boas Praticas
- **Profundidade maxima:** 4-5 niveis (mais que isso fica ilegivel)
- **Nos por nivel:** Maximo 7-8 (regra de Miller)
- **Texto curto:** 2-5 palavras por node (mindmap, nao documento)
- **Template adequado:** Fish-bone para causa/efeito, structure para hierarquias, right para processos
- **Nome descritivo:** Usar nome do topico no ficheiro (nao "mindmap1.km")

View File

@@ -0,0 +1,406 @@
---
name: notebooklm
description: >
Gestão programática completa do NotebookLM via MCP. Use when managing notebooks, adding sources,
generating artifacts (audio, video, mindmap, report, flashcards, quiz, infographic, presentation, table),
querying notebooks with RAG, running autonomous research, or when user mentions "notebooklm",
"notebook", "audio overview", "podcast", "mapa mental", "questionário", "resumo", "investigação profunda",
"adicionar fonte", "gerar artefacto".
author: Descomplicar® Crescimento Digital
version: 1.1.0
user_invocable: true
tags: [notebooklm, rag, audio, studio, research, gemini, knowledge, artifacts]
allowed-tools: mcp__notebooklm__notebook_list, mcp__notebooklm__notebook_get, mcp__notebooklm__notebook_create, mcp__notebooklm__notebook_describe, mcp__notebooklm__notebook_rename, mcp__notebooklm__notebook_delete, mcp__notebooklm__source_add, mcp__notebooklm__source_delete, mcp__notebooklm__source_describe, mcp__notebooklm__source_get_content, mcp__notebooklm__source_sync_drive, mcp__notebooklm__source_list_drive, mcp__notebooklm__notebook_query, mcp__notebooklm__chat_configure, mcp__notebooklm__studio_create, mcp__notebooklm__studio_status, mcp__notebooklm__studio_delete, mcp__notebooklm__download_artifact, mcp__notebooklm__export_artifact, mcp__notebooklm__research_start, mcp__notebooklm__research_status, mcp__notebooklm__research_import, mcp__notebooklm__notebook_share_public, mcp__notebooklm__notebook_share_invite, mcp__notebooklm__notebook_share_status, mcp__notebooklm__refresh_auth, mcp__notebooklm__server_info
category: knowledge
quality_score: 90
updated: "2026-02-24T20:00:00Z"
---
# /notebooklm - Gestão Programática NotebookLM
Motor RAG Gemini com geração de artefactos multimédia. 29 ferramentas MCP disponíveis.
---
## Notebooks Descomplicar (58 total)
> Registry actualizado via `notebook_list`. Para IDs actualizados: `mcp__notebooklm__notebook_list`.
### Tecnologia / Dev (21)
| Nome | ID | Fontes |
|------|----|--------|
| **KiviCare EHR WP** | `78621405-a5bc-433f-856f-296260a80bd9` | 166 |
| **CWP** | `0ded7bd6-69b3-4c76-b327-452396bf7ea7` | 214 |
| **WordPress Config CLI** | `fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d` | 268 |
| **WordPress e Elementor** | `5be0d1a6-00f2-4cd9-b835-978cb7721601` | 88 |
| **Cibersegurança WordPress** | `5f60adfd-2435-4725-8c12-9c11c5f51d75` | 95 |
| **Proxmox** | `276ccdde-6b95-42a3-ad96-4e64d64c8d52` | 120 |
| **Cloud e Infraestrutura TI** | `f9a79b5a-649f-4443-afaf-7ff562b6c2e7` | 146 |
| **Claude Code** | `2876d1fe-5cea-4d98-8140-b0e1a81c6bc4` | 132 |
| **Obsidian + Claude** | `ebee9fe1-78fd-4f85-8938-f19f3ea32131` | 117 |
| **Perfex CRM** | `df4688bb-c2c0-4aba-98c1-38c3b50a353c` | 141 |
| **Dev PerfexCRM** | `80606de8-2783-4d36-b08d-5825e6f9a8da` | 44 |
| **Reonic** | `b7e61158-0717-4582-8ef2-0301be3c73ae` | 131 |
| **Remotion** | `f2b75baa-1ab1-48d3-8f7c-a6a9e516934c` | 59 |
| **n8n** | `f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1` | 66 |
| **Desenvolvimento de MCPs** | `73102308-70ef-403e-9be9-eae0cfc62d55` | 22 |
| **Programação** | `24947ffa-0019-448a-a340-2f4a275d2eb1` | 53 |
| **Open Source Top Picks** | `cabf9821-c1ff-44cb-9bfd-59bda3599792` | 163 |
| **GitHub Trends** | `922b7532-ddf3-4dba-9d3c-6d5f83b89378` | 61 |
| **Zaia** | `087d76f1-e929-49da-9e3c-4edc22b42b3f` | 28 |
| **Open WebUI** | `be6f72ac-f8ba-4337-912d-abd5dd448519` | 15 |
| **AI Code Editors** | `57d9c6c9-48ba-4d83-8f71-cc890f348a53` | 20 |
### Gestão / Negócio (13)
| Nome | ID | Fontes |
|------|----|--------|
| **Estrategia e Empreendedorismo** | `79d43410-0e29-4be1-881d-84db6bdc239a` | 107 |
| **Gestão de Operações** | `f9dc59c2-718b-4b12-bd06-095d4bfa3e34` | 41 |
| **Gestão de Projectos e Agile** | `0c9c079c-a426-486c-99eb-1564d42d37ad` | 44 |
| **Transformacao Digital e IA** | `ab876d0d-12a8-43d9-bc62-59c1c8e9d0f8` | 73 |
| **E-commerce Pratico** | `226e384e-d4bc-48f4-bb82-7927360436cc` | 63 |
| **Descomplicar** | `f29c8457-f16d-4fb3-979d-6e5901de1b20` | 23 |
| **AI Automation and Orchestration** | `929ef67b-c131-4f01-abd0-8b078491a6b7` | 5 |
| **AI Agents Intensive Course** | `f4be0e3f-4d9e-4c5c-a743-9f14427f2e43` | 5 |
| **European E-Commerce** | `8a430cf2-ed99-413d-b4bf-a1400deaf49e` | 24 |
| **Documentação WooCommerce** | `bd06acff-4b9d-44aa-b3f7-60434bbd6b49` | 3 |
| **Produtos e Serviços BD** | `c451d7b4-79fd-4a67-9149-1da38d28345e` | 3 |
| **Erxes XOS** | `10ea7de8-5777-4f18-bd2c-f58952b6047c` | 10 |
| **Zender 3** | `7095e5fa-1465-4496-b1a3-48f2e6e07f79` | 3 |
### Marketing / Media (7)
| Nome | ID | Fontes |
|------|----|--------|
| **Marketing Digital PT** | `4c595973-ba10-420a-a3bf-e4389e424ad3` | 189 |
| **Marketing Digital Avancado** | `76647e0f-3ae2-4c00-a0a8-f457aebf5655` | 78 |
| **Social Media e Branding** | `9053d0e8-dd39-460b-b5ea-e67af3e9a675` | 51 |
| **Copywriting e Persuasao** | `7b8fec17-d34f-4e3f-a8c6-8231e51f6323` | 50 |
| **Produção de Video e Youtube** | `058a896e-6c9a-4e51-ae7d-9adb2738bc5f` | 49 |
| **YouTube Monetização e Compliance** | `60a209a7-e205-4d57-a6f3-fef3de61e87a` | 30 |
| **Podcast Descomplicar** | `a5bef96b-a1af-4293-9979-5da46f8d2301` | 33 |
### Design (3)
| Nome | ID | Fontes |
|------|----|--------|
| **Design Profissional AItomatizado** | `b568b13b-0eed-48c9-b513-5c5b7ec0b102` | 244 |
| **UI/UX Design** | `081ca512-8279-4850-b2b9-dff090267482` | 28 |
| **Tipografia e Cor para Web** | `f97a0d2b-a5b3-4640-b941-3cbb184b1b81` | 41 |
### Pessoal / Filosofia (11)
| Nome | ID | Fontes |
|------|----|--------|
| **Emanuel Almeida** | `8c6c8257-bda2-433c-bf55-f40d98bfde8f` | 36 |
| **Jung** | `d5c67d7f-7fe8-4542-9e5c-22403f3193ee` | 41 |
| **Taoism** | `aea85baf-9ddf-4d79-bf07-81391a275b09` | 28 |
| **ADHD** | `a4ff3fd7-fb7c-49a1-94ff-0433193e2338` | 17 |
| **Autismo** | `66eff78e-318f-4a8b-a3c7-039a4124b1ad` | 14 |
| **Psicologia Somática** | `3410893b-16a3-4178-9091-42650a41086f` | 10 |
| **Essência de Herói** | `6dcd08e8-79d9-4ae0-b6bf-b2ee96717bf2` | 13 |
| **Auto Kintsugi** | `82a95c2f-be56-4c4a-a96f-96f6677a6991` | 10 |
| **Marcus Aurelius** | `4b986ad4-49da-4604-a423-4fcdf20dd9da` | 3 |
| **Building Viral AI Philosophy** | `7bb570b3-9dc4-4e6f-817c-aca68df59e6d` | 13 |
### Clientes / Projectos (3)
| Nome | ID | Fontes |
|------|----|--------|
| **CarStuff** | `90f0bc77-b5e4-4ddd-a07c-013a1a30b247` | 25 |
| **Solar FV Engenharia** | `03d54e00-aefa-45dc-ba01-f3864a7c3112` | 5 |
| **OpenSolar Platform** | `0082bcaf-1e17-4b84-87cc-2256b1719b55` | 4 |
---
## Comandos
| Comando | Uso |
|---------|-----|
| `/notebooklm list` | Listar todos os notebooks |
| `/notebooklm query <id> <pergunta>` | Consulta RAG num notebook |
| `/notebooklm add <id> <fonte>` | Adicionar fonte (url/file/text/drive) |
| `/notebooklm studio <id> <tipo>` | Gerar artefacto |
| `/notebooklm research <id> <tema>` | Investigação autónoma web |
| `/notebooklm create <nome>` | Criar novo notebook |
---
## Studio — Artefactos
| Tipo (`artifact_type`) | Parâmetros Chave | Output | Tempo |
|------------------------|-----------------|--------|-------|
| `audio` | `format`: deep_dive, brief, critique, debate | MP3 | 3-7 min |
| `video` | `format`: explainer, brief | MP4 | 5-12 min |
| `mind_map` | — | Markdown/JSON | <1 min |
| `report` | `report_format`: Briefing Doc, Study Guide, Blog Post | Markdown/Docs | 1-2 min |
| `flashcards` | `difficulty`: hard, easy | JSON/HTML | <1 min |
| `quiz` | `question_count`: Integer | JSON/HTML | <1 min |
| `infographic` | `orientation`: 1=Landscape, 2=Portrait | PNG/SVG | 2-4 min |
| `slide_deck` | `orientation`, `visual_style` (1-10), `language`, `length` | PDF | 2-5 min |
| `data_table` | — | CSV/JSON/Sheets | 1-2 min |
### Workflow Geração de Artefacto
```
1. studio_create(notebook_id, artifact_type, ..., confirm=True)
→ devolve artifact_id
2. POLLING: studio_status(artifact_id)
→ repetir cada 20s até status="complete"
3a. download_artifact(artifact_id) → ficheiro local (MP3/MP4/JSON/MD)
3b. export_artifact(artifact_id) → Google Docs/Sheets
```
---
## Gestão de Fontes
### Adicionar fonte
```python
# URL
source_add(notebook_id, source_type="url", url="https://...", wait=True)
# Ficheiro local (PDF, MD, TXT)
source_add(notebook_id, source_type="file", file_path="/caminho/absoluto", wait=True)
# Texto directo
source_add(notebook_id, source_type="text", text="...", title="Título", wait=True)
# Google Drive
source_add(notebook_id, source_type="drive", document_id="gdrive-id", wait=True)
```
**Regra crítica:** Usar sempre `wait=True`. Sem isso o NotebookLM reporta sucesso mas o conteúdo não está indexado.
### Actualizar fontes Drive
```python
source_sync_drive(notebook_id, confirm=True)
```
Para PDFs/URLs não Drive: `source_delete` + `source_add` da versão nova.
---
## Consulta RAG (notebook_query)
### Padrão Drill-Down para documentos extensos
```
Passo 1 — Topologia:
"Mapeia a estrutura deste documento, identifica os capítulos sobre [tema]."
Passo 2 — Cirúrgico:
"Centra a análise em [secção específica]. Detalha [aspecto concreto]."
Passo 3 — Síntese externa:
Claude agrega as respostas parciais no seu próprio contexto.
```
### Multi-notebook (sem suporte nativo)
O NotebookLM não faz queries cross-notebook. Workflow:
```
1. notebook_query(notebook_A, pergunta)
2. notebook_query(notebook_B, pergunta)
3. Claude sintetiza os dois resultados localmente
```
### Rate limiting
~50 queries/dia em contas gratuitas. Contas Workspace: sem limite documentado.
---
## Investigação Autónoma
```python
# 1. Iniciar pesquisa
research_start(
notebook_id="uuid",
query="tendências telemedicina Portugal 2026",
mode="deep", # fast (~30s, 10 fontes) | deep (~5min, 40+ fontes)
source_type="web" # web | drive
)
# → devolve task_id
# 2. Polling
research_status(task_id) # repetir até status="complete"
# 3. Importar resultados
research_import(notebook_id, task_id)
```
**Atenção:** Iniciar nova pesquisa cancela qualquer pesquisa em curso no mesmo notebook.
---
## Casos de Uso Descomplicar
### Investigação técnica de plugin/tecnologia
```
1. Scraper → MDs em Hub/Manuais/
2. source_add(files) → notebook_create ou existente
3. notebook_query drill-down → extracção de padrões
4. studio_create(mind_map) → exportar para Obsidian
5. studio_create(audio, deep_dive) → consumo em mobilidade
```
### Onboarding novo projecto
```
1. notebook_create("Cliente - NomeProjecto")
2. source_add(contratos PDF + requisitos WikiJS)
3. notebook_share_invite(emails equipa + cliente)
4. studio_create(report, "Briefing Doc") → resumo executivo
```
### Proposta comercial
```
1. notebook_query → extrair capacidades relevantes
2. studio_create(data_table) → export_artifact → Google Sheets comparativo
3. studio_create(slide_deck, orientation=1, visual_style=1, language="pt") → esqueleto apresentação
```
### Rotina /today
```
notebook_query(Gestão de Operações, "3 métricas críticas com desvios hoje")
→ studio_create(audio, brief) → MP3 para consumo rápido
```
### Questionários de validação
```
studio_create(quiz, question_count=15) → JSON
→ n8n lê JSON → cria tasks Desk CRM para engenheiros
```
---
## Gestão de Notebooks
```python
# Listar
notebook_list()
# Metadados + fontes
notebook_get(notebook_id)
# Resumo IA com keywords
notebook_describe(notebook_id)
# Criar
notebook_create(name="Nome do Notebook")
# Partilha pública
notebook_share_public(notebook_id)
# Partilha por convite
notebook_share_invite(notebook_id, email="user@domain.com")
# Eliminar (irreversível)
notebook_delete(notebook_id, confirm=True)
```
---
## Integração n8n
O NotebookLM não tem API REST pública. Comunicar via JSON-RPC para o servidor MCP local:
```
NOTEBOOKLM_MCP_TRANSPORT=http
NOTEBOOKLM_MCP_HOST=0.0.0.0
NOTEBOOKLM_MCP_PORT=8000
```
### Flows úteis
**WikiJS → NotebookLM (ingestão dinâmica):**
```
Webhook (publicação WikiJS)
→ HTTP Request: source_add(source_type="text", wait=True)
→ Notificação Slack: "Nova doc indexada no RAG"
```
**Relatório semanal de projecto:**
```
Schedule (sexta 17h)
→ Desk CRM: extrair tasks semana
→ source_add(text) → studio_create(report, "Briefing Doc")
→ Polling studio_status
→ export_artifact → Google Docs
→ Link enviado para Slack do cliente
```
**Audio após actualização de manual:**
```
Drive webhook
→ source_sync_drive
→ studio_create(audio, deep_dive)
→ Polling + download_artifact
→ Email com MP3 anexo
```
---
## Limitações
| Limitação | Workaround |
|-----------|-----------|
| ~50 queries/dia (conta gratuita) | Usar conta Workspace; fallback Dify KB |
| Sem API REST oficial | JSON-RPC via servidor MCP local |
| Sem queries cross-notebook | Claude agrega respostas de múltiplos notebooks |
| Cookies expiram (2-4 semanas) | `refresh_auth()` automático; alertar se HTTP 401/499 |
| Slides com marca de água | Pós-processamento `clean-watermark.js` via n8n |
| Ficheiros estáticos imutáveis | `source_delete` + `source_add` para actualizar |
| `research_start` exclusivo | Só uma pesquisa activa por notebook de cada vez |
| Dados de treino Gemini | Workspace Enterprise: dados isentos de treino |
---
## Autenticação
```bash
# Verificar estado
nlm login status
# Renovar tokens
mcp__notebooklm__refresh_auth()
# Versão do servidor
mcp__notebooklm__server_info()
```
Auth guardada em: `~/.notebooklm-mcp-cli/profiles/<name>/auth.json`
---
## Roadmap de Adopção
**Fase 1 — Quick wins (<1 semana)**
- [ ] Conta Google Workspace dedicada a automações
- [ ] Servidor MCP em EasyPanel (projecto: descomplicar)
- [ ] Primeiro audio overview de manual técnico
**Fase 2 — Integrações (1-4 semanas)**
- [ ] n8n: ingestão dinâmica WikiJS → NotebookLM
- [ ] n8n: relatório semanal /today automático
- [ ] Claude Code: queries drill-down nos notebooks existentes
**Fase 3 — Escala (1-3 meses)**
- [ ] Notebook por cliente (criado automaticamente no Desk CRM)
- [ ] Quizzes de onboarding injectados em tarefas Desk CRM
- [ ] Research autónomo semanal: panorama competitivo por área
---
**Versão**: 1.0.0 | **Data**: 24-02-2026 | **Autor**: Descomplicar®

View File

@@ -0,0 +1,365 @@
---
name: proc-creator
description: Cria procedimentos seguindo formato Hub Descomplicar. Use quando "criar procedimento", "novo PROC", "documentar processo", "PROC-*". Gera código automático [DEPT]-[TEMA]-[NUM], cria ficheiro na pasta departamental correcta, actualiza INDEX.md.
---
# /proc-creator - Criador de Procedimentos Hub
Cria procedimentos estruturados seguindo formato e organização Hub Descomplicar.
---
## Referências e Documentação
**SEMPRE consultar:**
- **[06-Operacoes/Procedimentos/INDEX.md](file:///media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/INDEX.md)** - Estrutura completa (36 procedimentos, 8 departamentos)
- **[Hub CLAUDE.md](file:///media/ealmeida/Dados/Hub/CLAUDE.md)** - Secção "Organização de Procedimentos" (convenções, padrão referenciação)
---
## Estrutura de Procedimentos
### 8 Departamentos
| Departamento | Pasta | Código | Procedimentos Actuais |
|--------------|-------|--------|----------------------|
| D1-Comercial | `D1-Comercial/` | CRM | 1 |
| D2-Suporte | `D2-Suporte/` | SUP | 0 (gap) |
| D3-Contabilidade | `D3-Contabilidade/` | FIN | 2 |
| D4-RH | `D4-RH/` | HR | 0 (novo) |
| D5-Design | `D5-Design/` | DES | 0 (gap) |
| D6-Marketing | `D6-Marketing/` | MKT | 1 |
| D7-Tecnologia | `D7-Tecnologia/` | DEV, WP, INF, AI, WEB | 28 |
| Cross-Departamental | `Cross-Departamental/` | XDP | 4 |
**Base path:** `/media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/`
---
## Convenção de Código
Formato: `[DEPT]-[TEMA]-[NUM]`
**Exemplos:**
- D7: `DEV-MCP-001`, `WP-SEC-001`, `INF-SSL-001`, `AI-PLG-001`, `WEB-SEO-001`
- D1: `CRM-OPS-001`
- D3: `FIN-MOL-001`, `FIN-DSP-001`
- D6: `MKT-CNT-001`
- Cross: `XDP-GPR-001`, `XDP-OBS-001`
**Números:** Sequencial por tema (001, 002, 003...)
---
## Protocolo de Criação
```
1. PERGUNTAR ao utilizador:
- Título do procedimento
- Departamento (D1-D7 ou Cross)
- Tema/categoria
- Descrição breve
2. DETERMINAR código:
- Ler INDEX.md do departamento
- Identificar próximo NUM disponível para o tema
- Gerar código [DEPT]-[TEMA]-[NUM]
3. CRIAR ficheiro PROC-*.md:
- Nome: PROC-[Titulo].md
- Localização: /media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/[Departamento]/
- Usar template abaixo
4. ACTUALIZAR INDEX.md:
- Adicionar linha na tabela do departamento
- Incrementar contador total
- Actualizar data
5. CONFIRMAR:
- Mostrar path completo do ficheiro criado
- Mostrar código atribuído
- Listar próximos passos (preencher conteúdo)
```
---
## Template PROC-*.md
```markdown
---
title: [Título do Procedimento]
date: YYYY-MM-DD
type: procedimento
status: draft
dept_id: [N]
desk_dept_id: [N]
desk_dept_name: [Nome Departamento]
codigo: [DEPT]-[TEMA]-[NUM]
tags: [tag1, tag2, tag3]
---
# [Título do Procedimento]
**Código:** [DEPT]-[TEMA]-[NUM] | **Departamento:** [Nome] | **Status:** Draft
---
## 📋 Contexto
Descrição clara do propósito e âmbito deste procedimento.
---
## 🎯 Objectivo
O que este procedimento pretende alcançar.
---
## 📍 Âmbito
### Aplica-se a:
- [ ] Item 1
- [ ] Item 2
### Não se aplica a:
- [ ] Item 1
- [ ] Item 2
---
## 🔧 Pré-requisitos
| Requisito | Descrição |
|-----------|-----------|
| [Nome] | [Detalhe] |
---
## 📝 Procedimento
### Passo 1: [Nome do Passo]
**Objectivo:** [O quê]
**Como:**
1. Acção 1
2. Acção 2
**Validação:** Como confirmar sucesso
### Passo 2: [Nome do Passo]
[...]
---
## ✅ Checklist de Execução
- [ ] Pré-requisito A verificado
- [ ] Passo 1 concluído
- [ ] Passo 2 concluído
- [ ] Validação final OK
---
## ⚠️ Troubleshooting
| Problema | Causa Provável | Solução |
|----------|----------------|---------|
| [Erro X] | [Causa] | [Como resolver] |
---
## 📊 Métricas e KPIs
| Métrica | Target | Como Medir |
|---------|--------|------------|
| [Nome] | [Valor] | [Método] |
---
## 🔗 Referências
**Procedimentos relacionados:**
- [PROC-Outro.md](../PROC-Outro.md)
**Skills relacionadas:**
- `/skill-name` - Descrição
**Documentação externa:**
- [Nome](URL)
---
## 📅 Histórico de Revisões
| Data | Versão | Autor | Alterações |
|------|--------|-------|------------|
| YYYY-MM-DD | 1.0 | [Nome] | Criação inicial |
---
**[Título] | Código: [DEPT]-[TEMA]-[NUM] | Departamento: [Nome]**
**Última actualização:** YYYY-MM-DD
```
---
## Frontmatter Obrigatório
```yaml
---
title: [Título Procedimento]
date: YYYY-MM-DD
type: procedimento
status: draft | active | archived
dept_id: [1-7]
desk_dept_id: [1-7]
desk_dept_name: [D1-Comercial | D2-Suporte | ...]
codigo: [DEPT]-[TEMA]-[NUM]
tags: [categoria, tema, tecnologia]
---
```
**Mapeamento dept_id:**
- 1 = D1-Comercial (info@descomplicar.pt)
- 2 = D2-Suporte (suporte@descomplicar.pt)
- 3 = D3-Contabilidade (contabilidade@descomplicar.pt)
- 4 = D4-RH (rh@descomplicar.pt)
- 5 = D5-Design (design@descomplicar.pt)
- 6 = D6-Marketing (marketing@descomplicar.pt)
- 7 = D7-Tecnologia (dev@descomplicar.pt)
---
## Actualização INDEX.md
Adicionar linha na tabela do departamento:
```markdown
| [PROC-Titulo.md](./PROC-Titulo.md) | [Descrição breve] | [DEPT]-[TEMA]-[NUM] |
```
Actualizar estatísticas:
- Incrementar contador "X procedimentos"
- Actualizar data "Última actualização: YYYY-MM-DD"
---
## Integração com Skills/Agents
Após criar procedimento, informar utilizador:
```markdown
**Próximos passos:**
1. Preencher conteúdo do procedimento
2. Testar procedimento em cenário real
3. Actualizar status: draft → active
4. Adicionar referências em skills/agents relevantes:
\`\`\`markdown
## Referências e Documentação
**SEMPRE consultar:**
- [PROC-Titulo.md](file:///media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/[Dept]/PROC-Titulo.md)
\`\`\`
```
---
## Exemplos de Uso
### Exemplo 1: Procedimento Técnico D7
```
User: Criar procedimento para deployment EasyPanel
Assistant: /proc-creator
Título: Deployment EasyPanel via API
Departamento: D7-Tecnologia
Tema: Infraestrutura (INF)
Descrição: Deploy automatizado de serviços no EasyPanel usando API oficial
→ Código gerado: INF-EPL-001
→ Ficheiro: PROC-Deployment-EasyPanel.md
→ Localização: D7-Tecnologia/
→ INDEX.md actualizado
```
### Exemplo 2: Procedimento Cross-Departamental
```
User: Documentar processo de gestão de projectos
Assistant: /proc-creator
Título: Sistema Gestão Projectos
Departamento: Cross-Departamental
Tema: Gestão Projectos (GPR)
Descrição: Metodologia híbrida Ágil/Waterfall
→ Código gerado: XDP-GPR-002 (já existe 001)
→ Ficheiro: Sistema-Gestao-Projectos-v2.md
→ Localização: Cross-Departamental/
→ INDEX.md actualizado
```
### Exemplo 3: Procedimento D2-Suporte (Gap)
```
User: Criar procedimento atendimento cliente
Assistant: /proc-creator
Título: Atendimento Cliente
Departamento: D2-Suporte
Tema: Suporte (SUP)
Descrição: Workflow primeiro contacto, templates resposta, escalação
→ Código gerado: SUP-ATC-001 (primeiro do D2!)
→ Ficheiro: PROC-Atendimento-Cliente.md
→ Localização: D2-Suporte/
→ INDEX.md actualizado
→ NOTA: D2 tinha 0 procedimentos, agora tem 1
```
---
## Anti-Patterns
**NUNCA:**
- ❌ Criar procedimento sem perguntar departamento
- ❌ Inventar código sem verificar INDEX.md
- ❌ Esquecer de actualizar INDEX.md
- ❌ Usar status "active" para draft inicial
- ❌ Omitir frontmatter obrigatório
- ❌ Criar em localização errada
- ❌ Duplicar NUM existente no mesmo tema
**SEMPRE:**
- ✅ Confirmar departamento com utilizador
- ✅ Ler INDEX.md para próximo NUM
- ✅ Actualizar INDEX.md após criação
- ✅ Usar status "draft" inicialmente
- ✅ Incluir todo frontmatter obrigatório
- ✅ Criar em pasta departamental correcta
- ✅ Verificar tema antes de atribuir NUM
---
## Validação Pós-Criação
Checklist automática:
```
✅ Ficheiro criado em pasta correcta
✅ Frontmatter completo e válido
✅ Código único e sequencial
✅ INDEX.md actualizado
✅ Template aplicado
✅ Path absoluto correcto
✅ Data actual em YYYY-MM-DD
```
---
*Skill v1.0.0 | 2026-02-13 | Plugin gestao | Descomplicar®*

View File

@@ -0,0 +1,128 @@
---
name: tasks-overview
description: >
Visao geral de tarefas pendentes, atrasadas e em curso do Desk CRM. Organiza por prioridade e projecto, sugere workflows relevantes. Use when "tarefas", "tasks", "pendentes", "overdue", "atrasadas", "o que temos para fazer", "tasks overview".
author: Descomplicar® Crescimento Digital
version: 1.0.0
quality_score: 85
user_invocable: true
category: management
tags: [tasks, overview, priorities, workflows, desk-crm]
desk_task: 1710
desk_project: 65
allowed-tools: Read, Write, mcp__desk-crm-v3
mcps: desk-crm-v3
dependencies:
mcps: [desk-crm-v3]
triggers:
- "User asks about pending tasks"
- "User mentions 'tarefas', 'tasks', 'pendentes', 'overdue'"
- "User wants task overview or priorities"
- "Invoked by /today orchestrator"
---
# /tasks-overview v1.0
Consulta e organiza tarefas do Desk CRM por prioridade, deadline e projecto.
---
## Protocolo
### Passo 1: Recolher Tarefas (paralelo)
```
Em paralelo, executar:
1. mcp__desk-crm-v3__get_tasks({ overdue_only: true, limit: 50 })
2. mcp__desk-crm-v3__get_tasks({ status: 1, limit: 50 }) # Nao iniciadas
3. mcp__desk-crm-v3__get_tasks({ status: 4, limit: 50 }) # Em curso
```
### Passo 2: Organizar por Prioridade
```
Agrupar tarefas (sem duplicados) por:
1. Prioridade (4=Urgente, 3=Alta, 2=Normal, 1=Baixa)
2. Dentro de cada prioridade: vencidas primeiro, depois por deadline
3. Incluir projecto associado
Formato:
### Urgentes (Prioridade 4)
| # | Tarefa | Projecto | Deadline | Status | Dias |
|---|--------|----------|----------|--------|------|
### Alta Prioridade (Prioridade 3)
[mesma tabela]
### Normal (Prioridade 2)
[mesma tabela, apenas overdue + esta semana]
```
### Passo 3: Resumo por Projecto
```
Contar tarefas por projecto:
| Projecto | Vencidas | Pendentes | Em Curso | Total |
|----------|----------|-----------|----------|-------|
```
### Passo 4: Workflows Sugeridos
> Para as top 3 tarefas prioritarias, sugerir workflow adequado.
> Consultar: `/media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/WORKFLOWS-QUICK-START.md`
```
Padroes de deteccao (keywords na tarefa):
1. WordPress, plugin, tema, woocommerce → /wp-dev ou wordpress-plugin-developer agent
2. Procedimento, documentar, padronizar → /proc-creator
3. Audit, seguranca, compliance → compliance-auditor agent
4. Orcamento, proposta, cotacao → /orcamento
5. Lead, cliente novo, contacto → /lead-approach
6. SEO, optimizacao, rankings → /seo-report ou seo-specialist agent
7. Deploy, publicar, easypanel → /easypanel-deploy
8. Marketing, campanha, estrategia → marketing-planning-expert agent
9. PHP, Laravel, API, backend → php-fullstack-engineer agent
10. React, Next, frontend, UI → javascript-fullstack-specialist agent
Formato output:
## Workflows Sugeridos
- [ ] **#ID Tarefa** -> Workflow: [componente]
- [Breve explicacao]
```
### Passo 5: Output JSON (quando invocado pelo /today)
```
SE invocado com argumento "json":
Escrever resultado em ~/.claude-work/today-tasks-{date}.json
Formato: { "urgentes": N, "alta": N, "overdue": N, "total": N, "por_projecto": {...} }
SE invocado standalone:
Mostrar output Markdown directamente ao utilizador
```
---
## Accoes Imediatas Sugeridas
Apos listar tarefas, sugerir ate 6 accoes concretas:
1. Tarefas P4 (urgentes) - resolver hoje
2. Tarefas P3 a aguardar feedback - desbloquear
3. Tarefas vencidas ha >30 dias - decidir (fazer, delegar ou cancelar)
4. Tarefas em curso ha >14 dias - verificar progresso
5. Tarefas sem deadline - sugerir definir prazo
6. Tarefas sem estimativa de tempo - sugerir estimar
---
## Anti-Patterns
- NUNCA mostrar mais de 50 tarefas (filtrar por relevancia)
- NUNCA sugerir workflows para tarefas genericas sem keywords claras
- NUNCA sugerir workflows para tarefas ja em progresso (status 4)
- SEMPRE incluir link CRM: `[#ID](https://desk.descomplicar.pt/admin/tasks/view/ID)`
---
*Skill v1.0.0 | 04-03-2026 | Descomplicar®*

View File

@@ -98,15 +98,32 @@ Ainda a trabalhar em #1446?
- Se sim: "Já tens timer em #X. Parar primeiro?"
2. Obter detalhes da tarefa:
mcp__desk-crm-v3__get_task({ task_id })
3. Iniciar timer no Desk:
3. **VALIDAR WORKFLOW (obrigatório):**
a. Verificar se tarefa está atribuída ao utilizador:
- Verificar se staff_id: 1 está em task.assignees
- Se NÃO: Erro "⚠️ Tarefa não atribuída a ti. Atribui primeiro."
b. Verificar status da tarefa:
- Status deve ser apropriado para timer (não "Não Iniciada")
- Se status inadequado: Erro com instruções
c. **Se validação falhar:**
```
⚠️ Para iniciar timer:
1. Atribuir tarefa a ti (staff_id: 1)
2. Mudar status para "Em progresso"
3. Só depois iniciar timer
Tarefas que precisam ser executadas:
[Listar acções necessárias]
```
4. Iniciar timer no Desk:
mcp__desk-crm-v3__start_timer({
task_id: task_id,
staff_id: 1,
note: "Iniciado via Claude Code"
})
4. Guardar estado local:
5. Guardar estado local:
~/.claude-work/active-timer.json
5. Confirmar
6. Confirmar
```
**Ficheiro estado:**
@@ -218,6 +235,10 @@ const ALERT_HOURS = 4; // Alertar após 4h
- **NUNCA** deixar timer overnight sem perguntar
- **NUNCA** iniciar timer sem tarefa associada
- **NUNCA** criar tarefa só para ter timer (usar tarefas existentes)
- **NUNCA** iniciar timer sem validar workflow:
- Tarefa DEVE estar atribuída ao utilizador
- Status DEVE ser apropriado ("Em progresso", não "Não Iniciada")
- SEMPRE validar antes de start_timer
---

File diff suppressed because it is too large Load Diff

View File

@@ -59,9 +59,17 @@ accounts:
---
## Regra 2: PROMOCIONAIS (Arquivar)
## Regra 2: PROMOCIONAIS (Arquivar ou Eliminar)
**Acção**: `imap_move_email` → pasta "Promotions"
**Acção padrão**: `imap_move_email` → pasta "Promotions"
**Excepções por conta:**
```yaml
delete_promotions:
- rh # Não tem pasta Promotions - apagar directamente
```
> Contas listadas em `delete_promotions`: usar `imap_delete_email` em vez de mover.
### Padrões Subject
```

View File

@@ -1,405 +1,43 @@
# /today - Checkup Diário
# /today - Checkup Diario (Orquestrador)
Executa o checkup diário completo seguindo estes passos:
Executa o checkup diario invocando sub-skills em sequencia.
## Passo 1: Verificar Última Execução
## Passo 1: Verificar data e ultima execucao
```
Usar mcp__memory-supabase__search_memories com query "today checkup YYYY-MM-DD"
Se já existe entrada de hoje → perguntar se quer executar novamente
mcp__mcp-time__current_time
mcp__memory-supabase__search_memories("today checkup YYYY-MM-DD")
Se ja existe → perguntar se quer re-executar
```
## Passo 2: Recolher Dados do DeskCRM
## Passo 2: Fase 1 - Auto-processamento (silencioso)
### 2.1 Tickets
```
mcp__desk-crm-v3__get_tickets:
- date_from: ontem (YYYY-MM-DD)
- status: 1 (Aberto) ou 2 (Em Progresso)
- limit: 50
Invocar em sequencia:
1. `/ticket-triage` → processa tickets abertos
2. `/imap-triage` → processa emails IMAP
3. `/auto-expense` → cria despesas dos resultados anteriores
4. `/cleanup-downloads` → se >10 ficheiros em Transferencias
Identificar:
- Tickets urgentes (priority: 3 ou 4)
- Tickets de clientes importantes
```
## Passo 3: Fase 2 - Recolha de dados (silencioso)
### 2.2 Tickets SPAM → FECHAR AUTOMATICAMENTE
```
⚡ ACÇÃO AUTOMÁTICA - Fechar SEM intervenção manual
Invocar:
1. `/daily-digest` → metricas do dia
2. `/tasks-overview` → tarefas e workflows
Padrões de SPAM:
- "Guest Post", "SEO services", "backlinks", "partnership"
- "link building", "dofollow", "collaboration opportunity"
- "Boas Festas", "Season's Greetings", "Termos de Serviço"
- Remetentes: noreply@*, no-reply@* (se não for serviço conhecido)
## Passo 3b: Sprint/Spec Activos (silencioso)
Se SPAM detectado → FECHAR IMEDIATAMENTE:
mcp__desk-crm-v3__close_ticket:
- ticket_id: {ID}
- message: "Fechado automaticamente - SPAM"
Glob SPEC.md e SPRINT.md em /media/ealmeida/Dados/Dev/.
Ler apenas frontmatter. Filtrar activos. Guardar em ~/.claude-work/today-sprint-{date}.json.
Registar no relatório: "🗑️ SPAM fechado: #{ID} - {Assunto}"
```
## Passo 4: Rotinas especiais
### 2.3 Tickets para ELIMINAR (notificações sem valor)
```
Verificar se assunto contém:
- "Your Elastic Email Account was successfully re-charged"
- "Account re-charged"
- "Auto-recharge successful"
- "Credit added to your account"
- "[BOT] Ativação realizada com sucesso"
- "[BOT] Activation successful"
- Segunda: planeamento semanal + `/wp-update`
- Sexta: sugerir manutencao WordPress
- Sabado/Domingo: `/infra-check`
Se SIM → Eliminar:
mcp__desk-crm-v3__delete_ticket:
- ticket_id: {ID}
- confirm: true
- reason: "Notificação automática sem valor contabilístico"
```
## Passo 5: Dashboard final
### 2.3 Processamento Automático: Tickets de PAGAMENTOS
```
Para cada ticket aberto, verificar se assunto contém:
- "payment", "pagamento", "pago", "paid"
- "invoice", "factura", "fatura", "recibo"
- "successfully processed", "confirmado"
- "subscription", "renewed", "renewal"
- "account funded", "has been funded"
- "Envio de Fatura Eletrónica"
Se SIM → Verificar remetente:
A) Remetente CONHECIDO (lista abaixo):
⚡ ACÇÃO AUTOMÁTICA - Executar SEM intervenção manual:
1. Mover para Contabilidade:
mcp__desk-crm-v3__update_ticket({ ticket_id: ID, department_id: 3 })
2. FECHAR o ticket:
mcp__desk-crm-v3__close_ticket({ ticket_id: ID, message: "Fatura processada - Contabilidade" })
3. Registar: "💰 Contabilidade + Fechado: #{ID} - {Assunto}"
B) Remetente DESCONHECIDO:
→ Avaliar indicadores de spam/phishing
→ LISTAR no relatório para revisão manual
Indicadores de SPAM:
- Remetente pessoal (gmail/hotmail) + factura empresarial
- Erros ortográficos, MAIÚSCULAS, urgência exagerada
- Domínio suspeito (muitos números, extensões estranhas)
- Sem número de factura/referência
Output no relatório:
- [SPAM?] #ID - Assunto - remetente@suspeito.com
- [NOVO?] #ID - Assunto - remetente@empresa.com (possível novo serviço)
```
> [!warning] NUNCA eliminar automaticamente remetentes desconhecidos
> Podem ser novos serviços. Sempre pedir confirmação manual.
**Remetentes CONHECIDOS (whitelist):**
```
Domínios confiáveis:
- @elasticemail.com
- @hetzner.com, @hetzner.de
- @centos-webpanel.com, @control-webpanel.com
- @canva.com
- @meo.pt, @altice.pt, @documentos.meoempresas.pt
- @cloudflare.com
- @github.com
- @google.com
- @microsoft.com
- @adobe.com
- @figma.com
- @notion.so
- @openai.com, @email.openai.com
- @anthropic.com
- @openrouter.zendesk.com
- @stripe.com
- @paypal.com
- @wise.com
- @revolut.com
- @bancobpi.pt
```
Ver lista completa de remetentes e indicadores: `config/email-triage-rules.md`
### 2.2 Projectos com Deadline
```
mcp__desk-crm-v3__get_projects:
- status: 2 (Em Progresso)
- Filtrar: deadline esta semana
```
### 2.3 Tarefas Pendentes (OBRIGATÓRIO - sempre incluir)
```
# Buscar TODAS as tarefas pendentes
mcp__desk-crm-v3__get_tasks({ status: 1, limit: 50 }) # Não iniciadas
mcp__desk-crm-v3__get_tasks({ status: 4, limit: 50 }) # Em curso
mcp__desk-crm-v3__get_tasks({ status: 2, limit: 50 }) # Aguarda feedback
mcp__desk-crm-v3__get_tasks({ overdue_only: true }) # Vencidas
# Organizar por:
# 1. Prioridade (4=Urgente, 3=Alta, 2=Normal, 1=Baixa)
# 2. Deadline (vencidas primeiro)
# 3. Projecto (agrupar)
# Formato output:
### 🔴 URGENTES (Prioridade 4)
| ID | Tarefa | Projecto | Deadline | Tempo Est. |
|----|--------|----------|----------|------------|
### 🟠 ALTA (Prioridade 3)
...
```
### 2.4 Verificar Estimativas de Tempo
```
Para cada tarefa importante, verificar se tem estimativa:
mcp__desk-crm-v3__get_task_time_estimates({ task_id: X })
Se não tem → sugerir definir:
mcp__desk-crm-v3__set_task_estimated_time({
task_id: X,
estimated_hours: Y,
estimated_minutes: Z,
notes: "Estimativa"
})
```
## Passo 3: Gestão de Emails (MCP IMAP)
### 3.1 Listar contas disponíveis
```
imap_list_accounts
# Verificar que todas as 12 contas estão acessíveis
```
### 3.2 Para CADA conta, processar emails
```
Contas: emanuel, it, help, suporte, contabilidade, financeiro,
info, rh, mkt, design, news, aiktop
Para cada conta:
1. imap_list_emails(account, folder="INBOX", limit=50)
2. Classificar cada email:
SPAM (eliminar):
- Subject contém: "lottery", "winner", "urgent money"
- Remetente em blacklist conhecida
- Caracteres estranhos no subject
→ imap_delete_email(account, uid)
PROMOCIONAL (arquivar):
- Subject contém: "newsletter", "promo", "desconto", "oferta"
- Remetente: *@marketing.*, *@news.*, *@promo.*
- Headers: List-Unsubscribe presente
→ imap_move_email(account, uid, "Promotions")
FACTURA PAGA (reencaminhar):
- Subject contém: "factura", "invoice", "recibo", "pagamento"
- Subject contém: "pago", "paid", "confirmado"
- Anexos PDF com padrão de factura
→ Registar para reencaminhar para contabilidade@descomplicar.pt
PRIORITÁRIO (listar):
- Remetente: cliente conhecido (verificar DeskCRM)
- Subject contém: "urgente", "urgent", "problema", "erro"
- Resposta a thread existente
→ Incluir no relatório diário
```
### 3.3 Resumo de acções
```
Contabilizar:
- X emails eliminados (spam)
- Y emails arquivados (promocionais)
- Z facturas para contabilidade
- W emails prioritários pendentes
```
## Passo 4: Calendário (opcional)
```
# Se MCP Google Calendar disponível:
# google_calendar_list_events(date=today)
# Por agora: Verificar agenda manualmente
```
## Passo 5: Gerar Relatório
Formatar output seguindo template:
```markdown
## 📅 Checkup Diário - YYYY-MM-DD (Dia da Semana)
### 🎫 Tickets (X abertos, Y urgentes)
[Lista de tickets urgentes com [!]]
[Lista de tickets abertos]
### 📧 Emails Prioritários
[Quando disponível]
### 📆 Agenda de Hoje
[Quando disponível]
### 🎯 Prioridades Sugeridas
1. [Baseado em urgência e deadlines]
2. [...]
3. [...]
### ⏰ Deadlines Esta Semana
[Lista de projectos/tarefas com deadline]
```
## Passo 6: SEGUNDA-FEIRA - Planeamento Semanal
```
Verificar dia da semana
Se SEGUNDA-FEIRA:
1. RECOLHER TAREFAS DA SEMANA INTEIRA
- Todas as tarefas pendentes (status 1, 2, 4)
- Todas as tarefas vencidas
- Filtrar: deadline até domingo
- Incluir estimativas de tempo
2. RECOLHER CALENDÁRIO DA SEMANA
mcp__google-workspace__get_events({
user_google_email: "emanuelalmeidaa@gmail.com",
time_min: "YYYY-MM-DD" (hoje),
time_max: "YYYY-MM-DD" (domingo),
max_results: 50
})
3. VERIFICAR ESTIMATIVAS DE TEMPO
Para tarefas sem estimativa:
- Sugerir tempo baseado no tipo
- PERGUNTAR ao utilizador se correcto
- Definir via set_task_estimated_time
4. PEDIR INDICAÇÕES AO UTILIZADOR
Usar AskUserQuestion:
- Disponibilidade semanal (horas)
- Horários preferidos para foco
- Prioridades especiais
- Compromissos pessoais
- Tarefas para delegar
5. DISTRIBUIR TAREFAS PELA AGENDA
- Calcular capacidade vs carga
- Distribuir por dia/horário
- Criar eventos no calendário (opcional)
- Alertar se capacidade excedida
6. OUTPUT: Planeamento Semanal
- Tabela por dia com tarefas
- Total horas por dia
- Alertas de capacidade
- Lista de delegações
```
## Passo 7: Manutenção WordPress (se Sexta-feira)
```
Verificar dia da semana
Se sexta-feira:
- Listar os 10 sites da rede
- Sugerir executar manutenção
- Oferecer checkup de segurança
```
## Passo 8: Resumo de Pendentes (do CRM)
```
📊 RESUMO - Mostrar no relatório
Os pendentes são obtidos directamente do Desk CRM (já recolhidos no Passo 2).
NÃO há documento PENDENTES separado - os dados ficam no relatório diário.
### CATEGORIZAÇÃO
Com base nos dados já recolhidos:
- 🔴 Urgentes: priority = 4
- 🟠 Alta Prioridade: priority = 3
- 🟡 Vencidas: overdue_only = true
- 🟢 Esta Semana: deadline dentro de 7 dias
- 🎫 Tickets: status 1, 2
- 👤 Leads: status 7, 14 (Novos)
- 📝 Propostas: status 4 (Para Fazer)
### FORMATO NO RELATÓRIO
| Categoria | Qtd |
|----|----:|
| 🔴 Urgentes | X |
| 🟠 Alta Prioridade | X |
| 🟡 Vencidas | X |
| 🎫 Tickets Abertos | X |
| 👤 Leads Novos | X |
### LINKS CRM
| Tipo | Formato Link |
|------|--------------|
| Tarefa | [#ID](https://desk.descomplicar.pt/admin/tasks/view/ID) |
| Ticket | [#ID](https://desk.descomplicar.pt/admin/tickets/ticket/ID) |
| Lead | [LID](https://desk.descomplicar.pt/admin/leads/index/ID) |
```
## Passo 9: Criar Nota Diária no Obsidian
```
Criar ficheiro no vault Planeamento:
- Path: /media/ealmeida/Dados/GDrive/Cloud/EAL/Planeamento/00-Inbox/
- Filename: YYYY-MM-DD-checkup.md
- Content: Relatório com dados recolhidos
Template:
---
title: Checkup YYYY-MM-DD
date: YYYY-MM-DD
type: checkup
status: active
---
## Checkup Diário - YYYY-MM-DD
[Conteúdo do relatório]
⚡ LINKS CRM: Todas as tarefas com link directo
- Formato: [#ID](https://desk.descomplicar.pt/admin/tasks/view/ID)
Se segunda-feira:
- Incluir secção "Planeamento Semanal"
- Tabela com distribuição de tarefas por dia
```
## Passo 10: Guardar em Supabase
```
mcp__memory-supabase__save_memory:
- content: "Checkup diário executado - X tickets, Y tarefas, Z urgentes"
- tags: ["today", "checkup", "YYYY-MM-DD"]
- summary: "Checkup diário YYYY-MM-DD"
- metadata: {
tickets_count: X,
tasks_count: Y,
urgent_count: Z,
is_monday: true/false,
weekly_hours_planned: H
}
```
## Passo 11: Resumo Final
Apresentar:
- Métricas do dia
- Top 3 prioridades recomendadas
- Alertas importantes
- Próximos passos sugeridos
Se segunda-feira, adicionar:
- Resumo do planeamento semanal
- Capacidade vs carga
- Tarefas delegadas
- Alertas de sobrecarga
Agregar resultados de todas as sub-skills.
Criar nota Obsidian em `00-Inbox/DD-MM-YYYY-checkup.md`.
Guardar em Supabase.
Limpar temporarios `~/.claude-work/today-*.json`.

View File

@@ -120,6 +120,19 @@ aliases: ["{{DATE}}"]
---
## Sprint / Spec Activos
| Projecto | Spec | Sprint | Progresso | Checkpoint |
|----------|------|--------|-----------|------------|
{{#ACTIVE_SPECS}}
| {{PROJECT}} | {{SPEC_STATUS}} | {{SPRINT_ID}} | {{TASKS_DONE}}/{{TASKS_TOTAL}} tasks | {{CHECKPOINT}} |
{{/ACTIVE_SPECS}}
{{^ACTIVE_SPECS}}
| — | Nenhum sprint/spec activo | — | — | — |
{{/ACTIVE_SPECS}}
---
## 📝 Notas do Dia
> [!note] Observações

View File

@@ -0,0 +1,365 @@
---
name: validate-component
description: Valida skills/agents para alinhamento com procedimentos Hub. Use quando "validar skill", "verificar agent", "audit component", "check procedure compliance", antes de deploy de nova skill/agent. Verifica se componente referencia procedimentos (não duplica), segue padrão de referenciação.
---
# /validate-component - Validador de Componentes
Audita skills e agents para garantir alinhamento com padrão de centralização de procedimentos Hub.
---
## Referências e Documentação
**SEMPRE consultar:**
- **[Hub CLAUDE.md](file:///media/ealmeida/Dados/Hub/CLAUDE.md)** - Secção "Organização de Procedimentos" (padrão referenciação)
- **[/mcp-dev skill](file:///home/ealmeida/.claude/plugins/marketplaces/descomplicar-plugins/infraestrutura/skills/mcp-dev/SKILL.md)** - Exemplo padrão ouro de referenciação
---
## O Que Valida
### 1. Procedimentos Embeddados (RED FLAG)
**Detecta conteúdo que deve estar em PROC-*:**
- ✗ Checklists extensas (>10 itens)
- ✗ Regras de validação detalhadas
- ✗ Troubleshooting guides completos
- ✗ Standards e convenções
- ✗ Best practices longas
- ✗ Workflows complexos passo-a-passo
### 2. Referenciação Correcta (GREEN FLAG)
**Verifica se componente referencia procedimentos:**
- ✓ Secção "Referências e Documentação"
- ✓ Links file:// para PROCs relevantes
- ✓ Descrição breve do que cada PROC cobre
- ✓ Instrução "SEMPRE consultar antes de..."
### 3. Separação Clara
**O que DEVE ficar no componente:**
- ✓ Comandos e templates
- ✓ Instruções operacionais curtas
- ✓ Decisão "quando usar"
- ✓ Exemplos práticos inline
**O que DEVE ir para PROC:**
- ✗ Regras e standards
- ✗ Checklists de validação
- ✗ Troubleshooting detalhado
- ✗ Melhores práticas extensas
---
## Protocolo de Validação
### Para Skills
```
1. LER skill SKILL.md completo
2. VERIFICAR secção "Referências e Documentação":
- Existe? (GREEN se sim, sugerir criar se não)
- Tem links file:// para PROCs? (GREEN se sim)
- Links são relevantes para o domínio da skill?
3. DETECTAR procedimentos embeddados:
- Procurar padrões: "Checklist", "Steps", "Validação", "Troubleshooting"
- Se >100 linhas de instruções → SUGERIR extrair para PROC
4. AVALIAR qualidade referenciação:
- Links funcionam? (teste paths)
- Descrição do PROC é clara?
- Indica quando consultar?
5. GERAR relatório (ver formato abaixo)
```
### Para Agents
```
1. LER agent .md completo (frontmatter + system prompt)
2. VERIFICAR system prompt tem secção "Referências":
- Existe? (GREEN se sim)
- Tem links file:// para PROCs relevantes?
3. DETECTAR procedimentos embeddados no system prompt:
- Padrões similares a skills
- Workflows >50 linhas no prompt
4. AVALIAR se agent conhece procedimentos do seu domínio:
- wordpress-plugin-developer → deve referenciar PROC-WordPress-*
- mcp-protocol-developer → deve referenciar PROC-MCP-*
5. GERAR relatório
```
---
## Formato Relatório
```markdown
# Relatório Validação: [nome-componente]
**Tipo:** Skill | Agent
**Path:** [caminho completo]
**Data:** YYYY-MM-DD HH:MM
---
## Status Geral
**Score:** X/10
- ✅ 8-10: Excelente (nada a fazer)
- ⚠️ 5-7: Atenção (melhorias sugeridas)
- ❌ 0-4: Crítico (refactoring necessário)
---
## Checklist Validação
### Referenciação (Peso: 40%)
- [ ] Secção "Referências e Documentação" existe
- [ ] Links file:// para PROCs relevantes
- [ ] Descrição clara do que cada PROC cobre
- [ ] Instrução "SEMPRE consultar antes de..."
### Separação Conteúdo (Peso: 40%)
- [ ] Sem checklists longas (>10 itens) embeddadas
- [ ] Sem troubleshooting extenso embeddado
- [ ] Sem standards/conventions detalhadas embeddadas
- [ ] Sem workflows complexos embeddados
### Qualidade (Peso: 20%)
- [ ] Links file:// funcionam (paths válidos)
- [ ] Referencia PROCs do departamento correcto
- [ ] Instruções operacionais concisas (<50 linhas)
---
## Issues Detectadas
### 🔴 Críticas (Bloqueia Deploy)
1. **[Tipo Issue]**
- **Localização:** Linha X-Y
- **Problema:** Descrição
- **Impacto:** Duplicação procedimento / Info embeddada
- **Acção:** Extrair para PROC-[Nome].md em [Departamento]/
### ⚠️ Avisos (Recomendado Corrigir)
1. **[Tipo Issue]**
- **Localização:** Secção X
- **Problema:** Descrição
- **Sugestão:** Adicionar referência a PROC-[Nome].md
### ✅ Boas Práticas Observadas
1. Secção "Referências" bem estruturada
2. Links file:// correctos
3. Separação clara comando vs regra
---
## Recomendações
### Imediatas (P1)
1. Extrair checklist linhas X-Y para PROC-[Nome].md
2. Adicionar link file:// para PROC-[Outro].md
### Melhorias (P2)
1. Expandir descrição PROC na referência
2. Adicionar exemplo uso combinado skill + PROC
### Opcional (P3)
1. Considerar criar PROC-[NovoTema].md para conteúdo Y
---
## Procedimentos Relevantes Existentes
| PROC | Departamento | Relevância | Status Link |
|------|--------------|------------|-------------|
| PROC-MCP-Desenvolvimento.md | D7 | Alta | ✅ Referenciado |
| PROC-WordPress-Hardening.md | D7 | Média | ❌ Não referenciado |
---
## Próximos Passos
1. [ ] Corrigir issues críticas (se houver)
2. [ ] Aplicar recomendações P1
3. [ ] Re-validar com /validate-component
4. [ ] Deploy quando score ≥7/10
```
---
## Exemplos de Uso
### Exemplo 1: Skill com Boa Referenciação
```
User: /validate-component /mcp-dev
Assistant:
# Relatório Validação: mcp-dev
**Score:** 9/10 ✅
## Status Geral
Excelente! Padrão ouro de referenciação.
## Issues Detectadas
Nenhuma crítica. Pequena sugestão: expandir descrição PROC-MCP-Session-Recovery.md.
## Boas Práticas
- Secção "Referências e Documentação" completa
- 5 links file:// para PROCs relevantes
- Instruções "SEMPRE consultar antes de..."
- Separação clara: comandos na skill, regras nos PROCs
```
### Exemplo 2: Agent com Procedimentos Embeddados
```
User: /validate-component wordpress-plugin-developer
Assistant:
# Relatório Validação: wordpress-plugin-developer
**Score:** 4/10 ❌
## Issues Críticas
1. **Checklist WordPress Security (60 linhas embeddadas)**
- Localização: Linhas 234-294
- Problema: Checklist completa hardening no system prompt
- Acção: Extrair para PROC-WordPress-Hardening.md (D7-Tecnologia)
2. **Sem Secção Referências**
- System prompt não referencia nenhum PROC
- Deve adicionar links para PROC-WordPress-* relevantes
## Recomendações P1
1. Criar PROC-WordPress-Hardening.md com checklist
2. Criar PROC-WordPress-CLI.md com comandos WP-CLI
3. Adicionar secção "Referências" no system prompt
4. Re-validar após refactoring
```
### Exemplo 3: Skill Nova Antes de Deploy
```
User: Criei /easypanel-deploy skill. Validar antes de commit?
Assistant: /validate-component easypanel-deploy
# Relatório Validação: easypanel-deploy
**Score:** 6/10 ⚠️
## Avisos
1. **Workflow Deploy (40 linhas)**
- Localização: Secção "Deployment Workflow"
- Problema: Workflow passo-a-passo detalhado
- Sugestão: Considerar PROC-Deployment-EasyPanel.md (D7/INF)
- Alternativa: Manter se workflow é core da skill
2. **API Reference Embeddada**
- 80 linhas de endpoints EasyPanel
- Sugestão: Mover para references/easypanel-api.md
## Recomendações
Score 6/10 é aceitável para deploy. Opcionalmente:
- Extrair API reference para ficheiro separado (progressive disclosure)
- Se workflow deploy for usado por outros componentes → PROC
```
---
## Integração CI/CD
Para validação automática antes de commit:
```bash
# .git/hooks/pre-commit
if [[ $(git diff --cached --name-only) =~ (skills|agents) ]]; then
echo "Validating modified components..."
claude-code /validate-component [path]
fi
```
---
## Critérios de Score
### Score 9-10 (Excelente)
- Secção "Referências" completa e bem estruturada
- Todos os PROCs relevantes referenciados
- Zero procedimentos embeddados
- Separação clara comando vs regra
### Score 7-8 (Bom)
- Secção "Referências" existe
- Maioria dos PROCs referenciados
- Pequenos procedimentos embeddados (<20 linhas)
- Maioria do conteúdo bem separado
### Score 5-6 (Aceitável)
- Algumas referências, mas incompletas
- Procedimentos embeddados médios (20-50 linhas)
- Separação parcial
- Deploy OK mas melhorias recomendadas
### Score 3-4 (Crítico)
- Sem secção "Referências" ou vazia
- Procedimentos longos embeddados (>50 linhas)
- Má separação comando vs regra
- Refactoring necessário antes deploy
### Score 0-2 (Bloqueado)
- Zero referências a PROCs
- Procedimentos extensos embeddados (>100 linhas)
- Duplicação crítica de conteúdo
- Deploy BLOQUEADO até corrigir
---
## Anti-Patterns
**NUNCA:**
- ❌ Aprovar deploy com score <5/10
- ❌ Ignorar issues críticas
- ❌ Validar sem ler componente completo
- ❌ Sugerir extrair conteúdo que é core da skill
**SEMPRE:**
- ✅ Testar links file:// funcionam
- ✅ Verificar departamento correcto dos PROCs
- ✅ Distinguir "core skill" vs "procedimento duplicado"
- ✅ Dar exemplos concretos de refactoring
---
## Referência: /mcp-dev (Padrão Ouro)
Ver secção "Referências e Documentação" em:
`/home/ealmeida/.claude/plugins/.../mcp-dev/SKILL.md`
**O que faz bem:**
- Secção dedicada no topo
- 5 links file:// para PROCs D7-Tecnologia
- Descrição breve de cada PROC
- Instrução clara "SEMPRE consultar antes de criar/modificar MCPs"
- Quick Reference sintética (não duplica PROC)
---
*Skill v1.0.0 | 2026-02-13 | Plugin gestao | Descomplicar®*

View File

@@ -6,7 +6,7 @@ description: >
Auto-trigger >10 tool calls. Auto-alerts degradação >15%, error rate >10%.
Use when "worklog", "reflect", "reflexão", "registar trabalho", "log", "análise", "melhoria", "insight", ao parar timer.
author: Descomplicar® Crescimento Digital
version: 4.0.0
version: 4.1.0
quality_score: 95
user_invocable: true
category: productivity
@@ -74,6 +74,12 @@ Skill unificada: regista trabalho, analisa sessão, sugere acções, guarda mem
- Erros e soluções
- Padrões detectados
- Eficiência (tool calls vs resultado)
3b. VERIFICAR alinhamento com spec (se aplicavel):
- Detectar ficheiros modificados na sessao
- Procurar SPEC.md no directorio pai (ate 3 niveis)
- SE spec approved/in_progress: comparar ficheiros vs scope items
- SE ficheiro nao mapeia para scope: incluir SCOPE ALERT no worklog
- SE sem SPEC.md: ignorar silenciosamente
4. VERIFICAR se há algo novo a documentar
- Se sessão vazia/sem dados → NÃO gerar
5. Gerar comentário HTML (ver formato abaixo)
@@ -133,6 +139,11 @@ Memória: Guardada / N/A
<br><strong>Solução:</strong> Como foi resolvido</li>
</ul>
<h4>Alertas de Scope</h4>
<ul>
<li><strong>SCOPE ALERT:</strong> <code>path</code> nao mapeado no SPEC</li>
</ul>
<h4>Padrões Detectados</h4>
<ul>
<li>Padrão identificado e impacto</li>
@@ -270,7 +281,7 @@ Perguntas ao analisar sessão:
- Faltou informação que deveria estar em memória?
- Alguma regra CLAUDE.md foi violada?
- Os MCPs funcionaram correctamente?
- Algum TaskForce foi utilizado? Registar métricas.
- **Context health:** CLAUDE.md global <200 linhas? MEMORY.md <80 linhas? (Ref: DEV-CTX-001)
---
@@ -335,4 +346,4 @@ Perguntas ao analisar sessão:
---
*Skill v4.0.0 | 2026-02-06 | Descomplicar(R)*
*Skill v4.1.0 | 2026-03-04 | Descomplicar(R)*