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:
144
gestao/skills/aiktop-tasks/SKILL.md
Normal file
144
gestao/skills/aiktop-tasks/SKILL.md
Normal 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®*
|
||||
@@ -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"
|
||||
})
|
||||
|
||||
140
gestao/skills/daily-digest/SKILL.md
Normal file
140
gestao/skills/daily-digest/SKILL.md
Normal 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®*
|
||||
@@ -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
|
||||
|
||||
254
gestao/skills/imap-triage/SKILL.md
Normal file
254
gestao/skills/imap-triage/SKILL.md
Normal 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®*
|
||||
456
gestao/skills/imap-triage/config/email-triage-rules.md
Normal file
456
gestao/skills/imap-triage/config/email-triage-rules.md
Normal 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
|
||||
392
gestao/skills/index-update/SKILL.md
Normal file
392
gestao/skills/index-update/SKILL.md
Normal 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®*
|
||||
@@ -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",
|
||||
|
||||
@@ -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/"
|
||||
},
|
||||
|
||||
@@ -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/
|
||||
```
|
||||
|
||||
|
||||
164
gestao/skills/mindmap/SKILL.md
Normal file
164
gestao/skills/mindmap/SKILL.md
Normal 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")
|
||||
406
gestao/skills/notebooklm/SKILL.md
Normal file
406
gestao/skills/notebooklm/SKILL.md
Normal 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®
|
||||
365
gestao/skills/proc-creator/SKILL.md
Normal file
365
gestao/skills/proc-creator/SKILL.md
Normal 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®*
|
||||
128
gestao/skills/tasks-overview/SKILL.md
Normal file
128
gestao/skills/tasks-overview/SKILL.md
Normal 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®*
|
||||
@@ -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
@@ -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
|
||||
```
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -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
|
||||
|
||||
365
gestao/skills/validate-component/SKILL.md
Normal file
365
gestao/skills/validate-component/SKILL.md
Normal 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®*
|
||||
@@ -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)*
|
||||
|
||||
Reference in New Issue
Block a user