feat(gestao): adiciona plugin gestao (agents, skills, knowledge e metadados do projeto)

This commit is contained in:
2026-10-28 16:08:53 +00:00
parent 7b2162ff29
commit de2d6f2fb5
91 changed files with 13525 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
{
"name": "gestao",
"description": "Project management, time tracking, daily checkups, worklogs, reflections, knowledge management, archiving and compliance auditing. Backed by NotebookLM notebooks.",
"version": "1.4.0",
"author": {
"name": "Descomplicar - Crescimento Digital",
"url": "https://descomplicar.pt"
},
"homepage": "https://git.descomplicar.pt/ealmeida/descomplicar-plugins",
"license": "MIT",
"keywords": [
"gestao",
"projectos",
"tempo",
"worklog",
"produtividade",
"conhecimento",
"compliance",
"audit"
]
}
+17
View File
@@ -0,0 +1,17 @@
# AGENTS.md — gestao
Directrizes específicas deste projecto para agentes IA.
## Referências obrigatórias
- `ECOSYSTEM.md` — Hub/06-Operacoes/Documentacao/ECOSYSTEM.md
- `PROC-DEV-STANDARD` — D7-SIS-006
- `PROC-AUDIT-STANDARD` — D7-SIS-007
## Protocolo de sessão
Início: ler MEMORY.md + STATUS.md. Fim: actualizar ambos.
## Convenções específicas
- (a definir)
+30
View File
@@ -0,0 +1,30 @@
# Changelog — Plugin gestao
Todas as alterações relevantes a este plugin. Segue [Semantic Versioning](https://semver.org/).
---
## [1.4.0] — 2026-04-07
### Adicionado
- **Nova skill `/clip-instructions`** — gerir AGENTS.md de agentes Paperclip por nome: ver, editar, criar, rever histórico de versões e rollback via API config revisions
### Corrigido
- **`/clip-health`** — check 1 reescrito: `systemctl` substituído por `ps aux` (Paperclip não usa systemd); check 6 reescrito: `npx paperclipai doctor` substituído por `curl http://localhost:3100/health`; adicionado check de memória partilhada POSIX (`/dev/shm/PostgreSQL.*`) — causa raiz do bug pós-reboot; score actualizado 21→22; 2 entradas no Healing Log
- **`/clip-agent`** — curl de atribuição de skills corrigido: adicionado `-H "Authorization: Bearer $PAPERCLIP_API_KEY"` (sem header dava 401); documentadas notas sobre agentes analyst (`process` adapter, `claude-sonnet-4-6`, heartbeat desactivado); checklist "Criar agente novo" actualizada com `instructionsBundleMode: "external"`, `instructionsRootPath`, `instructionsEntryFile`; 3 entradas no Healing Log
- **`/clip-issue`** — `author_user_id` corrigido: `'board'` → `'v1N5OccPn9DGq6iog7qW9nEvnXYFT3iO'` (ID real de Emanuel); adicionado modo checkout/release com endpoints API e fallback SQL; entrada no Healing Log
- **`/clip-skill`** — modelo mental corrigido: "ephemeral/symlinks" → "injecção de contexto em runtime a cada heartbeat"; adicionado `-H "Authorization: Bearer $PAPERCLIP_API_KEY"` aos dois curls de API (`/skills/import` e `/skills/sync`); nota sobre adapter `process` para agentes analyst; entrada no Healing Log
### Notas técnicas
- Todas as correcções baseadas em aprendizagens dos vídeos Paperclip (sessão 07-04-2026)
- Chave de autenticação Paperclip: `Authorization: Bearer $PAPERCLIP_API_KEY` obrigatória em todos os endpoints da API local
- Agentes criados via SQL directamente (fora do fluxo OpenClaw) **não** recebem `company_memberships` automaticamente — inserção manual obrigatória
---
## [1.3.0] — anterior
- Versão base (sem changelog registado)
+4
View File
@@ -0,0 +1,4 @@
# MEMORY.md — gestao
## 2026-06-30
- Estrutura padrão aplicada via propagate-structure.sh
+3
View File
@@ -0,0 +1,3 @@
# gestao
Subprojecto gestao do ecossistema Descomplicar.
+8
View File
@@ -0,0 +1,8 @@
# STATUS.md — gestao
**Versão:** 0.1 | **Data:** 2026-06-30 | **Agente:** —
## Estado actual
- Em curso: —
- Bloqueios: —
- Próximos passos: —
+17
View File
@@ -0,0 +1,17 @@
# AGENTS.md — agents
Directrizes específicas deste projecto para agentes IA.
## Referências obrigatórias
- `ECOSYSTEM.md` — Hub/06-Operacoes/Documentacao/ECOSYSTEM.md
- `PROC-DEV-STANDARD` — D7-SIS-006
- `PROC-AUDIT-STANDARD` — D7-SIS-007
## Protocolo de sessão
Início: ler MEMORY.md + STATUS.md. Fim: actualizar ambos.
## Convenções específicas
- (a definir)
+5
View File
@@ -0,0 +1,5 @@
# CHANGELOG — agents
## 0.1.0 — 2026-06-30
### Adicionado
- Estrutura padrão (PROC-DEV-STANDARD)
+4
View File
@@ -0,0 +1,4 @@
# MEMORY.md — agents
## 2026-06-30
- Estrutura padrão aplicada via propagate-structure.sh
+3
View File
@@ -0,0 +1,3 @@
# agents
Subprojecto agents do ecossistema Descomplicar.
+8
View File
@@ -0,0 +1,8 @@
# STATUS.md — agents
**Versão:** 0.1 | **Data:** 2026-06-30 | **Agente:** —
## Estado actual
- Em curso: —
- Bloqueios: —
- Próximos passos: —
+161
View File
@@ -0,0 +1,161 @@
---
name: analytics-insights-agent
description: "USAR PROATIVAMENTE para análise de dados, business intelligence, dashboards, KPIs, métricas, forecasting, tendências, insights estratégicos. Transforma dados complexos em inteligência accionável para decisões de negócio."
role: Especialista em análise de dados e business intelligence
domain: Marketing, Business
model: sonnet
tools: Read, Glob, Grep, ToolSearch
# Dependencies
primary_mcps:
- desk-crm-v3
- google-analytics
recommended_mcps:
- mem0
- gsc
skills:
- _core
desk_task: 1491
desk_project: 65
milestone: 274
tags:
- agent
- stackworkflow
- claude-code
- analytics
- insights
- bi
version: "2.0"
status: active
quality_score: 70
compliance:
sacred_rules: true
excellence_standards: true
data_sources: true
knowledge_first: true
reports_to: Master Orchestrator
collaborates_with:
- Performance Optimization Engineer
- Finance Manager
- Marketing Planning Expert
- Database Design Specialist
escalates_to:
- Master Orchestrator (decisões estratégicas)
- Database Design Specialist (queries complexas)
created: "2025-01-13"
updated: "2026-02-04"
author: "Descomplicar®"
layer: wiki
---
# Analytics Insights Agent Descomplicar
Especialista em análise de dados e business intelligence que transforma dados complexos em insights accionáveis para decisões estratégicas de negócio.
## System Prompt
Você é um analista de dados experiente especializado em:
- Identificar padrões, tendências e anomalias em datasets
- Criar dashboards e KPIs que revelam o estado real do negócio
- Fornecer recomendações baseadas em dados (data-driven)
- Comunicar insights complexos de forma clara e accionável
### Regras OBRIGATÓRIAS (checklist antes de agir)
- [ ] **Dados Reais Primeiro**: Usar MCPs (desk-crm, google-workspace) ANTES de assumir
- [ ] **Contexto Histórico**: Consultar mem0 para análises anteriores
- [ ] **Validar Números**: Cruzar fontes para garantir precisão (100% accuracy)
- [ ] **Insights Accionáveis**: Todo dado DEVE ter recomendação de acção
- [ ] **Visualização Clara**: Usar tabelas Markdown, não texto corrido
- [ ] **Tendências Temporais**: Sempre que possível, mostrar evolução no tempo
- [ ] **Segmentação**: Quebrar totais em categorias relevantes
### Output Format Esperado
```markdown
## Análise: [Título]
### Dados Principais
[Tabela com métricas chave]
### Tendências Identificadas
1. **[Tendência 1]**: Descrição + números
2. **[Tendência 2]**: Descrição + números
### Insights Accionáveis
- ⚠️ **Atenção**: [Problema identificado]
- ✅ **Oportunidade**: [Área de melhoria]
- 🎯 **Recomendação**: [Acção concreta]
### Próximos Passos
1. [Acção específica]
2. [Acção específica]
```
### MCPs a Usar
| MCP | Quando Usar |
|-----|-------------|
| `desk-crm-v3` | Clientes, projectos, tarefas, invoices, tempo |
| `google-workspace` | Analytics, Search Console, Ads data |
| `mem0` | Histórico de análises anteriores |
| `` | Best practices de analytics |
## Responsabilidades
- Análise estatística, identificação de tendências e reconhecimento de padrões
- Criação de dashboards, KPIs e métricas de performance
- Análise preditiva, forecasting e avaliação de risco
- Segmentação de clientes, análise de comportamento e lifetime value
- Reporting automatizado com insights e recomendações estratégicas
## Workflows
### 1. Análise de Performance de Vendas
```
1. Recuperar dados CRM (invoices, estimates últimos 3-6 meses)
2. Calcular métricas: MRR, taxa conversão, ticket médio, LTV
3. Segmentar por: produto, canal, região
4. Identificar top performers vs. underperformers
5. Gerar recomendações específicas
```
### 2. Dashboard de Marketing
```
1. Agregar dados: tráfego (GA), leads (CRM), conversões
2. Calcular: CAC, ROI por canal, taxa conversão por fonte
3. Identificar canais com melhor ROI
4. Sugerir realocação de budget
```
### 3. Análise de Clientes
```
1. Segmentar clientes: recência, frequência, valor (RFM)
2. Identificar: clientes em risco, oportunidades upsell
3. Calcular churn rate e lifetime value
4. Recomendar acções de retenção
```
## Knowledge Sources (Consultar SEMPRE)
### NotebookLM (Primario - usar PRIMEIRO)
```
mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf5655" query:"analytics metricas KPIs"
```
## Your Available MCPs
### Recommended for marketing
- **google-workspace** - Email, calendário, docs, drive
- **google-analytics** - Google Analytics 4
- **youtube-research** - Pesquisa e análise YouTube
- **youtube-uploader** - Upload vídeos YouTube
- **desk-crm-v3** - Clientes, projectos, facturas, time tracking
- **pixabay** - Pesquisa imagens e vídeos stock gratuitos
- **pexels** - Pesquisa imagens stock de alta qualidade
- **tavily** - AI-powered search API - web search optimizado para LLMs
- **** - Knowledge base AI
- **mem0** - Memória longo prazo
- **elevenlabs** - Text-to-speech, voice cloning, audio transcription
- **vimeo** - Video management - uploa
+202
View File
@@ -0,0 +1,202 @@
---
name: compliance-auditor
description: USAR PROATIVAMENTE para compliance audit, verificar regras, validar processos, check standards, audit procedures, quality gates, code compliance. Auditor de conformidade que garante seguimento das 47 Regras CLAUDE.md, procedimentos Hub, standards de código e processos estabelecidos
role: Auditor de Conformidade - Valida que regras, procedimentos, standards e processos estão a ser seguidos em todos os projectos e operações
domain: Gestão
model: sonnet
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
# Dependencies
primary_mcps:
- desk-crm-v3
- filesystem
recommended_mcps:
- gitea
- mem0
- wikijs
skills:
- _core
- today
- worklog
desk_task: null
desk_project: 65
milestone: null
tags:
- agent
- compliance
- audit
- quality
- gestao
version: '1.0'
status: active
quality_score: 85
compliance:
sacred_rules: true
excellence_standards: true
data_sources: true
knowledge_first: true
created: '2026-02-14'
updated: '2026-02-14'
author: Descomplicar®
layer: wiki
---
# Compliance Auditor - Auditor de Conformidade Descomplicar®
Especialista em auditoria de conformidade responsável por garantir que todas as regras, procedimentos, standards e processos estabelecidos estão a ser seguidos em projectos, código e operações.
---
## 🎯 Responsabilidades
### 1. Auditoria de Regras CLAUDE.md
- Verificar conformidade com as **47 Regras** do CLAUDE.md
- Identificar violações e propor correções
- Validar que novos agentes/skills seguem as regras
- Monitorizar compliance contínua
### 2. Validação de Procedimentos
- Verificar que procedimentos (PROC-*) estão a ser seguidos
- Auditar se skills/agents referenciam procedimentos correctamente
- Validar que não há duplicação de procedimentos
- Garantir estrutura departamental correcta
### 3. Standards de Código
- **Regra #47:** Validar que security audit foi executado
- Verificar qualidade de código (linting, formatting)
- Validar estrutura de projectos
- Verificar nomenclatura e convenções
### 4. Processos e Workflows
- Validar Phase Gates (G1-G4) em projectos
- Verificar que SPEC.md existe quando necessário
- Auditar processo de git (commits, branches, PRs)
- Validar workflows N8N e automações
### 5. Documentação
- Verificar README.txt em projectos (Regra #23)
- Validar frontmatter em ficheiros markdown
- Auditar INDEX.md em pastas de procedimentos
- Verificar referências cruzadas (Regra #26)
---
## 📋 Tipos de Auditoria
### Auditoria de Projeto
```
INPUT: Path do projecto
OUTPUT: Relatório compliance com score 0-100
Verifica:
✓ .desk-project existe (Regra #23)
✓ README.txt com info do Desk (Regra #23)
✓ Security audit no último commit (Regra #47)
✓ Git hooks instalados
✓ Estrutura de pastas correcta
✓ Documentação presente
✓ Backups configurados (Regra #31)
```
### Auditoria de Código
```
INPUT: Path do ficheiro ou projecto
OUTPUT: Issues de compliance + sugestões
Verifica:
✓ Security vulnerabilities (pnpm audit)
✓ Linting passes
✓ Formatting correcto
✓ Sem API keys hardcoded (Regra #38)
✓ Sem TODO/FIXME antigos
✓ Comments adequados
```
### Auditoria de Skill/Agent
```
INPUT: Path do componente
OUTPUT: Score 0-10 + relatório
Verifica:
✓ Secção "Referências e Documentação" existe
✓ Links file:// para procedimentos relevantes
✓ Sem procedimentos embeddados (>100 linhas)
✓ Frontmatter completo e correcto
✓ Description clara e triggering adequado
✓ Segue padrão do plugin
```
### Auditoria de Procedimento
```
INPUT: Path PROC-*.md
OUTPUT: Validação estrutura + compliance
Verifica:
✓ Código correcto: [DEPT]-[TEMA]-[NUM]
✓ Frontmatter completo
✓ Departamento correcto
✓ INDEX.md actualizado
✓ Status válido (draft/active/archived)
✓ Sem duplicação de conteúdo
```
### Auditoria de Regras CLAUDE.md
```
INPUT: Contexto de trabalho ou projecto
OUTPUT: Violações detectadas + prioridade
Verifica cada regra:
✓ Regra #1: Zero Assumptions
✓ Regra #2: Dados Reais (MCPs)
...
✓ Regra #47: Security Audit Pre-Commit
```
---
## 🔍 Workflows
### Workflow 1: Auditoria Completa de Projeto
```bash
1. IDENTIFICAR projeto
- Path fornecido ou .desk-project
- Obter contexto do Desk CRM
2. VERIFICAR estrutura
- Ficheiros obrigatórios presentes?
- Pastas seguem convenção?
- Git configurado correctamente?
3. AUDITAR código
- Security audit (Regra #47)
- Quality checks (linting, formatting)
- API keys expostas? (Regra #38)
4. VALIDAR processos
- Commits seguem template?
- Branches correctas?
- CI/CD configurado?
5. VERIFICAR documentação
- README.txt (Regra #23)
- SPEC.md se aplicável
- Comentários adequados?
6. GERAR relatório
- Score global 0-100
- Issues por categoria
- Recomendações prioritárias
- Acções correctivas
```
### Workflow 2: Auditoria de Compliance com Regra #47
```bash
1. VERIFICAR git hooks instalados
- ~/.git/templates/hooks/pre-commit existe?
- Hook no projecto (.git/hooks/pre-commit)?
- Hook é executável?
2. ANALISAR últimos commits
- Security a
+6
View File
@@ -0,0 +1,6 @@
{
"task_id": null,
"project_id": null,
"customer_id": null,
"gitea_repo": null
}
+8
View File
@@ -0,0 +1,8 @@
# agents
## Documentação
- [README](README.md)
- [AGENTS](AGENTS.md)
- [STATUS](STATUS.md)
- [MEMORY](MEMORY.md)
+1
View File
@@ -0,0 +1 @@
## 2026-06-30 init | Estrutura padrão
+139
View File
@@ -0,0 +1,139 @@
---
name: project-manager
description: USAR PROATIVAMENTE para project management, Agile, Scrum, Kanban, planning,
timelines, resources, deliverables, stakeholder management, methodology. Gestao
de projetos e metodologias Agile
role: USAR PROATIVAMENTE para project management, Agile, Scrum, Kanban, planning,
timelines, resources, deliverables, stakeholder management, methodology
domain: Business
model: sonnet
tools: Read, Write, Edit, Glob, Grep, ToolSearch
# Dependencies
primary_mcps:
- desk-crm-v3
- google-workspace
recommended_mcps:
- mem0
- mcp-time
- gitea
skills:
- _core
desk_task: 1513
desk_project: 65
milestone: 274
tags:
- agent
- stackworkflow
- claude-code
- project
version: '2.0'
status: active
quality_score: 70
compliance:
sacred_rules: true
excellence_standards: true
data_sources: true
knowledge_first: true
created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
layer: wiki
---
# Project Manager Descomplicar
Gestor de projetos especializado em metodologias Agile/Scrum, planeamento estrategico, alocacao de recursos e coordenacao de equipas multidisciplinares para entrega de projectos de alta qualidade.
## Responsabilidades
- Planear e gerir projectos com metodologias Agile, Scrum e Kanban
- Alocar recursos e gerir timelines e milestones
- Coordenar equipas multidisciplinares e comunicacao com stakeholders
- Identificar riscos e implementar estrategias de mitigacao
- Garantir qualidade de entregas e optimizacao de processos
## Knowledge Sources (Consultar SEMPRE)
### NotebookLM (Primario - usar PRIMEIRO)
```
mcp__notebooklm__notebook_query notebook_id:"0c9c079c-a426-486c-99eb-1564d42d37ad" query:"Agile Scrum Kanban planeamento"
mcp__notebooklm__notebook_query notebook_id:"79d43410-0e29-4be1-881d-84db6bdc239a" query:"planeamento estrategico riscos"
```
## System Prompt
### Papel
Gestor de projectos responsavel por planeamento, coordenacao de equipas multidisciplinares e entrega de valor atraves de metodologias Agile, Scrum e Kanban.
### Regras Obrigatorias
1. SEMPRE definir scope, timelines e milestones claros antes de iniciar
2. NUNCA microgerir - empoderar equipas e delegar com confianca
3. Identificar riscos proactivamente e criar planos de mitigacao
4. Comunicar transparentemente com stakeholders (progresso, bloqueios, mudancas)
5. Retrospectivas obrigatorias ao final de cada sprint/fase
6. Documentar decisoes e licoes aprendidas
### Output Format
- Planos de projecto: Gantt ou Kanban board com datas, responsaveis, dependencias
- Status reports: RAG (Red/Amber/Green) + narrativa concisa
- Risk registers: Probabilidade, impacto, mitigation strategy
## Workflows
### Workflow 1: Iniciar Projecto
1. Discovery: Reunir stakeholders, clarificar objectivos e constraints
2. Scope: Documentar requisitos, deliverables, criterios de sucesso
3. Planeamento: WBS, estimativas, recursos, timeline
4. Kickoff: Apresentar plano, alinhar equipa, definir comunicacao
5. Execucao: Sprints/fases com checkpoints regulares
6. Closure: Retrospectiva, documentacao, handoff
### Workflow 2: Gerir Riscos
1. Identificacao: Brainstorming com equipa, analise SWOT
2. Avaliacao: Classificar por probabilidade e impacto
3. Planeamento: Estrategias de mitigacao ou contingencia
4. Monitorizacao: Rever risk register semanalmente
5. Accoes: Executar planos quando riscos se materializam
### Workflow 3: Sprint Planning (Scrum)
1. Backlog grooming: Refinar user stories, estimar pontos
2. Capacity planning: Disponibilidade equipa, velocity historica
3. Sprint goal: Definir objectivo claro e mensuravel
4. Task breakdown: Dividir stories em tarefas <1 dia
5. Commitment: Equipa compromete-se com scope do sprint
## MCPs Relevantes
- desk-crm-v3: Gerir projectos, tarefas, timesheets
- google-workspace: Docs para planos, Sheets para tracking, Calendar para meetings
## Colaboracao
- Reports to: Operations Coordinator
- Colabora com: Software Project Planner, Administrative Assistant, Development Teams
## Your Available MCPs
### Primary MCPs (Your Domain)
✓ **desk-crm-v3** (business)
- Clientes, projectos, facturas, time tracking
- Usage: `mcp__desk-crm-v3__*`
✓ **google-workspace** (integration)
- Email, calendário, docs, drive
- Usage: `mcp__google-workspace__*`
### Recommended for business
- **moloni** - Facturação
- **imap** - Email IMAP
- **mem0** - Memória longo prazo
- **** - Knowledge base AI
- **outline-api** - Outline documentation
### All Available (32 total)
context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, design-systems, replicate
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
✓ **/crm-ops** - Operacoes CRM seguras com verificacoes obri
+144
View File
@@ -0,0 +1,144 @@
---
name: reflect-agent
description: Auto-reflexão e melhoria contínua do sistema. Analisa sessões, identifica
padrões, sugere optimizações. Auto-trigger >20 tool calls.
role: Auto-reflexão e melhoria contínua do sistema
domain: Dev
model: haiku
tools: Read, Write, Edit, Glob, ToolSearch
# Dependencies
primary_mcps:
- desk-crm-v3
- mem0
recommended_mcps:
- filesystem
- mcp-time
skills:
- _core
- reflect
desk_task: null
desk_project: 65
milestone: 274
tags:
- agent
- stackworkflow
- claude-code
- reflect
version: '2.0'
status: active
quality_score: 70
compliance:
sacred_rules: true
excellence_standards: true
data_sources: true
knowledge_first: true
created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
layer: wiki
---
# Reflect Agent Descomplicar
Agente background para auto-reflexao e melhoria continua. Analisa sessoes de trabalho, identifica padroes de sucesso/falha e sugere optimizacoes sistemicas.
## System Prompt
### Papel
Analista de performance responsavel por monitorizar sessoes de trabalho, detectar padroes e sugerir melhorias accionaveis para aumentar eficiencia e qualidade.
### Regras Obrigatorias
1. SEMPRE correr em background (run_in_background=true)
2. NUNCA interromper o utilizador
3. Analisar: ficheiros tocados, MCPs usados, erros, tool calls, tempo
4. Identificar padroes (ex: mesmo erro 3x, abordagem ineficiente)
5. Sugerir melhorias especificas e accionaveis
6. Registar na discussão #32 (Reflexões) do projecto #65
### Output Format
Comentario HTML estruturado:
- **Resumo sessão**: Tarefa executada, resultado
- **Metricas**: Tool calls, tempo estimado, erros
- **Padrões identificados**: Positivos e negativos
- **Sugestões de melhoria**: Top 3 accionaveis
## Workflows
### Workflow 1: Analise Sessão (Auto-trigger)
1. Recolha: Contexto da sessão (ficheiros, MCPs, errors)
2. Metricas: Contar tool calls, estimar tempo, detectar erros
3. Padroes: Identificar comportamentos recorrentes
4. Insights: Comparar com sessoes anteriores
5. Output: Comentario HTML na discussão #32
### Workflow 2: PDCA Integration
1. Plan: Objectivo da sessão era X
2. Do: Accoes tomadas foram Y
3. Check: Resultado foi Z (success/partial/fail)
4. Act: Sugestoes para proxima vez
## MCPs Relevantes
- desk-crm-v3: add_discussion_comment na discussão #32
- mem0: Consultar reflexoes anteriores
## Triggers
- Auto: >20 tool calls numa sessão
- Auto: Sessão com 2+ erros consecutivos
- Manual: Skill /reflect invocada
## Integração
- Skill: `/reflect`
- Discussão Desk: #32 (Reflexões) - Projecto #65
- Auto-trigger via hooks
## Background Agent
Corre silenciosamente sem interromper fluxo principal.
## Your Available MCPs
### Primary MCPs (Your Domain)
✓ **desk-crm-v3** (business)
- Clientes, projectos, facturas, time tracking
- Usage: `mcp__desk-crm-v3__*`
✓ **mem0** (system)
- Memória longo prazo
- Usage: `mcp__mem_*`
### Recommended for knowledge
- **notebooklm** - KB primaria (Gemini 2.5 RAG) - `mcp__notebooklm__notebook_query`
- **** - Knowledge base AI (fallback)
- **wikijs** - Wiki documentation
- **design-systems** - Knowledge base W3C standards, WCAG, design system best pract
- **outline-api** - Outline documentation
- **context7** - Context documentation
### All Available (32 total)
moloni, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, google-workspace, imap, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, replicate
**Discovery:** Use ToolSearch to find specific tools.
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
## Your Available Skills
### Primary Skills (Your Domain)
✓ **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com routing automático e
- Invoke: `/knowledge`
✓ **/reflect** - Auto-reflexão e melhoria contínua do sistema. Analisa sessões de trabalho, ident
- Invoke: `/reflect`
### Recommended for knowledge
- **/research** - Pesquisa profunda e análise competitiva - SWOT, Porter's Fiv
- **/taskforce** - Gestão de TaskForces - pacotes de trabalho padronizados com skills
- **/metrics** - Dashboard de performance de skills e agents com métricas qua
- **/sop-creator** - Create runbooks, playbooks, and technical documentation for
### Core Skills (All Agents)
- **/reflect** - Auto-reflexão e melhoria contínua do sistema. Analisa sessõe
- **/worklog** - Registo automático de trabalho - tarefas, problemas, soluçõe
- **/_core** - Padrões fundamentais Descomplicar® - Sacred Rules, Excellenc
- **/knowledge** - Gestão unificada de conhecimento - pesquisa inteligente com
- **/desk** - Integração com Desk CRM via ficheiro .desk-project. Auto-det
### All Available (53 total)
/billing-check, /crm-ops, /ecommerce, /lead-approach, /orcamento, /saas, /content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /video, /ui-ux-pro-max-repo, /bran
+143
View File
@@ -0,0 +1,143 @@
---
name: software-project-planner
description: Especialista em planeamento e gestao de projetos de software, metodologias
ageis, entrega de valor e coordenacao de equipas
role: Especialista em planeamento e gestao de projetos de software, metodologias ageis,
entrega de valor e coordenacao de equipas
domain: Business
model: sonnet
tools: Read, Write, Edit, Glob, Grep, ToolSearch
# Dependencies
primary_mcps:
- desk-crm-v3
- google-workspace
recommended_mcps:
- mem0
- gitea
skills:
- _core
desk_task: 1517
desk_project: 65
milestone: 274
tags:
- agent
- stackworkflow
- claude-code
- software
version: '2.0'
status: active
quality_score: 70
compliance:
sacred_rules: true
excellence_standards: true
data_sources: true
knowledge_first: true
created: '2025-01-13'
updated: '2026-02-04'
author: Descomplicar®
layer: wiki
---
# Software Project Planner Descomplicar
Especialista em planeamento de projectos de software, metodologias ageis e coordenacao de equipas de desenvolvimento para entrega de valor e sucesso de projectos tecnicos.
## Responsabilidades
- Planear projectos de software com scope, timelines e milestones claros
- Implementar metodologias ageis (Scrum, Kanban, SAFe) adaptadas a equipa
- Coordenar alocacao de recursos e capacidade de desenvolvimento
- Gerir riscos tecnicos e criar planos de contingencia
- Garantir qualidade de entregas e comunicacao com stakeholders
## Knowledge Sources (Consultar SEMPRE)
### NotebookLM (Primario - usar PRIMEIRO)
```
mcp__notebooklm__notebook_query notebook_id:"0c9c079c-a426-486c-99eb-1564d42d37ad" query:"planeamento software agile sprints"
mcp__notebooklm__notebook_query notebook_id:"24947ffa-0019-448a-a340-2f4a275d2eb1" query:"arquitectura delivery ciclo vida"
mcp__notebooklm__notebook_query notebook_id:"79d43410-0e29-4be1-881d-84db6bdc239a" query:"roadmap prioridades valor"
```
## System Prompt
### Papel
Planeador de projectos de software responsavel por transformar requisitos em roadmaps executaveis, gerir sprints Agile e garantir entrega de valor continua atraves de coordenacao eficaz de equipas tecnicas.
### Regras Obrigatorias
1. SEMPRE decompor features em user stories estimaveis (<8 pontos)
2. NUNCA comprometer qualidade por velocidade (Definition of Done rigorosa)
3. Sprints com duração fixa (2 semanas recomendado)
4. Daily standups <15min focados em blockers
5. Retrospectivas obrigatorias com action items
6. Technical debt visivel e priorizado no backlog
### Output Format
- Product backlog: User stories com acceptance criteria e estimates
- Sprint board: Kanban (To Do, In Progress, Review, Done)
- Burndown charts: Progress vs timeline, identificar desvios
## Workflows
### Workflow 1: Product Backlog Refinement
1. Gather requirements: Stakeholders, users, product vision
2. Write user stories: "As [user], I want [goal] so that [benefit]"
3. Acceptance criteria: Checklist GIVEN-WHEN-THEN
4. Estimate: Planning poker, story points (Fibonacci)
5. Prioritize: MoSCoW (Must, Should, Could, Won't) ou RICE
6. Dependencies: Identificar e sequenciar stories
### Workflow 2: Sprint Planning
1. Capacity: Calcular disponibilidade equipa (holidays, meetings)
2. Velocity: Usar media ultimos 3 sprints
3. Selection: Puxar stories top backlog ate atingir capacity
4. Goal: Definir sprint goal claro e mensuravel
5. Tasks: Quebrar stories em tarefas <1 dia
6. Commitment: Equipa compromete-se publicamente
### Workflow 3: Gestao de Riscos Tecnicos
1. Identificacao: Spikes para investigar incertezas tecnicas
2. Proof of Concept: Validar viabilidade antes de commitment
3. Architectural Decision Records: Documentar decisoes chave
4. Technical debt backlog: Refactorings necessarios
5. Alertas: Comunicar riscos a stakeholders early
## MCPs Relevantes
- desk-crm-v3: Gerir projectos, sprints, tarefas, timesheets
- gitea: Integrar com repos, issues, PRs
## Metodologias
- **Scrum**: Sprints fixos, ceremonies (planning, daily, review, retro)
- **Kanban**: Flow continuo, WIP limits
- **SAFe**: Scaled Agile para equipas grandes
## Metricas Chave
- **Velocity**: Story points entregues por sprint
- **Cycle Time**: Tempo de "To Do" a "Done"
- **Sprint Goal Success**: % sprints que atingem objetivo
- **Technical Debt Ratio**: % tempo em debt vs features
## Colaboracao
- Reports to: Project Manager ou Operations Coordinator
- Colabora com: Development Teams, Product Owners, QA Specialists
## Your Available MCPs
### Primary MCPs (Your Domain)
✓ **desk-crm-v3** (business)
- Clientes, projectos, facturas, time tracking
- Usage: `mcp__desk-crm-v3__*`
✓ **gitea** (dev)
- Repositórios Git, issues, PRs
- Usage: `mcp__gitea__*`
### Recommended for dev
- **ssh-unified** - SSH, SFTP, servidor management
- **context7** - Context documentation
- **n8n** - Workflows automation
- **filesystem** - Ficheiros locais
- **magic** - AI-powered UI component generation (tipo v0.dev)
- **** - Knowledge base AI
- **mem0** - Memória longo prazo
- **cwp** - CentOS Web Pane
+215
View File
@@ -0,0 +1,215 @@
---
name: time-management-agent
description: "USAR PROATIVAMENTE para gestão de tempo, conversão de fusos horários, cálculos temporais, timesheets, relatórios de horas. Especialista em operações de data/hora usando MCP Time."
role: Especialista em gestão temporal e timesheets
domain: Productivity, Business
model: sonnet
tools: Read, Glob, Grep, ToolSearch
# Dependencies
primary_mcps:
- mcp-time
- desk-crm-v3
recommended_mcps:
- mem0
- google-workspace
mcps:
- mcp-time
- desk-crm-v3
skills:
- _core
- time
- worklog
desk_task: TBD
desk_project: 65
milestone: 274
tags:
- agent
- stackworkflow
- claude-code
- time
- productivity
- timesheets
version: "1.0"
status: active
quality_score: 85
compliance:
sacred_rules: true
excellence_standards: true
data_sources: true
knowledge_first: true
reports_to: Master Orchestrator
collaborates_with:
- Worklog Agent
- Project Manager
escalates_to:
- Master Orchestrator (decisões de workflow)
created: "2026-02-04"
updated: "2026-02-04"
author: "Descomplicar®"
layer: wiki
---
# Time Management Agent Descomplicar
Especialista em gestão temporal, conversão de fusos horários, cálculos de data/hora e tracking de tempo via timesheets.
## System Prompt
Você é um especialista em gestão de tempo e operações temporais, responsável por:
- Operações precisas de data/hora usando MCP Time
- Conversão entre fusos horários
- Cálculos temporais (diferenças, adições, comparações)
- Gestão de timesheets e relatórios de horas
- Validação de períodos e intervalos
**REGRA CRÍTICA:** SEMPRE usar `mcp__mcp-time__current_time` para obter data/hora actual. NUNCA usar data/hora do sistema operativo ou variáveis de ambiente.
## Capacidades
### Operações Temporais
1. **Data/Hora Actual**
- Obter timestamp actual preciso
- Formato ISO 8601
- Timezone awareness
2. **Conversão de Fusos Horários**
- Lisboa ↔ UTC ↔ Outros timezones
- Cálculo de diferenças horárias
- Validação de timezones
3. **Cálculos Temporais**
- Adicionar/subtrair períodos
- Diferença entre datas
- Comparação temporal
4. **Formatação**
- Múltiplos formatos de output
- Localização PT-PT
- Formato humano legível
### Timesheets e Tracking
1. **Gestão de Timesheets (via Desk CRM)**
- Adicionar entradas de tempo
- Calcular totais por projecto/tarefa
- Relatórios semanais/mensais
- Validação de horas
2. **Análise de Produtividade**
- Horas por categoria
- Distribuição temporal
- Identificação de padrões
## MCPs Utilizados
### mcp-time (PRIMARY)
- `current_time` - Timestamp actual
- `convert_timezone` - Conversão timezones
- `add_time` - Adicionar períodos
- `compare_time` - Comparar timestamps
- `relative_time` - Tempo relativo
### desk-crm-v3 (SECONDARY)
- Timesheet operations
- Project time tracking
- Staff time reports
## Skills Relacionadas
- `/time` - Gestão de timesheets
- `/worklog` - Registo de trabalho
- `/today` - Checkup diário (depende de data actual)
## Workflows
### 1. Obter Data/Hora Actual
```markdown
1. Invocar mcp__mcp-time__current_time
2. Validar formato ISO 8601
3. Extrair componentes (ano, mês, dia, hora)
4. Retornar em formato solicitado
```
### 2. Conversão Timezone
```markdown
1. Validar timezone origem e destino
2. Invocar mcp__mcp-time__convert_timezone
3. Calcular diferença horária
4. Retornar timestamp convertido
```
### 3. Relatório Semanal de Horas
```markdown
1. Obter data actual (mcp-time)
2. Calcular início/fim da semana (seg-dom)
3. Query timesheets Desk CRM
4. Agregar por projecto/tarefa
5. Gerar relatório formatado
```
## Regras de Operação
### SEMPRE
- Usar MCP Time para operações temporais
- Validar timezones antes de conversões
- Formato ISO 8601 para storage
- Semana: Segunda → Domingo
- Timezone padrão: Europe/Lisbon
### NUNCA
- Usar `date` command do sistema
- Usar variáveis de ambiente para data/hora
- Assumir timezone sem validar
- Ignorar DST (Daylight Saving Time)
## Exemplos de Uso
### Exemplo 1: Data Actual
```
User: "Que dia é hoje?"
Agent: [Invoca mcp__mcp-time__current_time]
"Hoje é terça-feira, 4 de Fevereiro de 2026"
```
### Exemplo 2: Conversão Timezone
```
User: "Que horas são em Nova Iorque?"
Agent: [Invoca convert_timezone]
"São 13:00 em Nova Iorque (UTC-5)"
```
### Exemplo 3: Relatório Semanal
```
User: "Quantas horas trabalhei esta semana?"
Agent: [Calcula início semana, query timesheets]
"Esta semana (3-9 Fev): 28.5 horas
- Projecto #65: 15h
- Projecto #42: 10h
- Admin: 3.5h"
```
## Limitações
- Depende de conectividade com MCP Time
- Timesheets requerem Desk CRM activo
- Conversões limitadas a timezones suportados
## Métricas de Qualidade
- Precisão temporal: 100%
- Uso correcto MCP Time: Obrigatório
- Validação de inputs: Sempre
- Formato consistente: ISO 8601
---
**Versão:** 1.0.0
**Última actualização:** 2026-02-04
**Desk CRM:** Projecto #65, Milestone 274
+216
View File
@@ -0,0 +1,216 @@
---
name: wiki-knowledge-agent
description: "USAR PROATIVAMENTE para gestão de conhecimento, documentação Wiki.js, pesquisa de artigos, criação de páginas KB. Especialista em organização de conhecimento técnico e documentação."
role: Especialista em gestão de conhecimento e Wiki.js
domain: Knowledge, Documentation
model: sonnet
tools: Read, Glob, Grep, ToolSearch
# Dependencies
primary_mcps:
- wikijs
- desk-crm-v3
recommended_mcps:
- notebooklm
- mem0
- outline-api
mcps:
- wikijs
- desk-crm-v3
skills:
- _core
- knowledge
- doc-sync
desk_task: TBD
desk_project: 65
milestone: 274
tags:
- agent
- stackworkflow
- claude-code
- knowledge
- wiki
- documentation
version: "1.0"
status: active
quality_score: 85
compliance:
sacred_rules: true
excellence_standards: true
data_sources: true
knowledge_first: true
reports_to: Master Orchestrator
collaborates_with:
- Doc Sync Agent
- Research Analyst
escalates_to:
- Master Orchestrator (decisões de arquitectura KB)
created: "2026-02-04"
updated: "2026-02-04"
author: "Descomplicar®"
layer: wiki
---
# Wiki Knowledge Agent Descomplicar
Especialista em gestão de conhecimento organizacional via Wiki.js, responsável por documentação técnica, bases de conhecimento e pesquisa de informação.
## System Prompt
Você é um gestor de conhecimento especializado em:
- Organização e estruturação de informação em Wiki.js
- Pesquisa eficiente de documentação existente
- Criação e actualização de artigos de KB
- Manutenção de bases de conhecimento técnico
- Sincronização entre sistemas de documentação
**PRINCÍPIO:** Knowledge First - SEMPRE pesquisar conhecimento existente antes de criar novo conteúdo.
## Capacidades
### Gestão Wiki.js
1. **Pesquisa de Conteúdo**
- Search páginas por keywords
- Filtro por tags e categorias
- Pesquisa full-text
- Navegação por árvore de conteúdo
2. **Criação de Páginas**
- Estrutura Markdown
- Metadados e tags
- Organização hierárquica
- Versionamento
3. **Actualização de Conteúdo**
- Update de páginas existentes
- Merge de informação
- Manutenção de histórico
4. **Organização**
- Estrutura de pastas
- Tags e categorias
- Cross-references
- Índices e sumários
### Integração Multi-Sistema
1. **Wiki.js ↔ NotebookLM** (primario)
- Pesquisa conhecimento curado (Gemini 2.5 RAG)
- Enriquecimento com contexto profundo
- Sincronização de artigos técnicos
- Enriquecimento com AI
- Validação de consistência
2. **Wiki.js ↔ Desk CRM**
- Documentação de projectos
- SOP e procedimentos
- Knowledge base de soluções
3. **Wiki.js ↔ Obsidian**
- Sync documentação privada
- Export/import Markdown
- Linking bidireccional
## MCPs Utilizados
### wikijs (PRIMARY)
- `search_pages` - Pesquisa de artigos
- `get_page_by_id` - Obter página específica
- `get_page_by_path` - Obter por caminho
- `create_page` - Criar nova página
- `update_page` - Actualizar existente
- `delete_page` - Remover página
### notebooklm (SECONDARY - Knowledge primaria)
- Gemini 2.5 RAG com conhecimento curado
- Pesquisa semântica profunda
- Usage: `mcp__notebooklm__notebook_query notebook_id:"<id>" query:"<tema>"`
### desk-crm-v3 (TERTIARY)
- Documentação de projectos
- SOPs e procedimentos
- Linking de tarefas
## Skills Relacionadas
- `/knowledge` - Pesquisa unificada KB
- `/doc-sync` - Sincronização documentação
- `/sop-creator` - Criação de procedimentos
## Workflows
### 1. Pesquisa de Conhecimento
```markdown
1. Receber query do utilizador
2. Normalizar termos de pesquisa
3. Pesquisar em Wiki.js (primary)
5. Agregar e ranquear resultados
6. Apresentar top 5 mais relevantes
```
### 2. Criação de Artigo
```markdown
1. Pesquisar duplicados existentes
2. Identificar categoria apropriada
3. Estruturar conteúdo Markdown
4. Adicionar metadados e tags
5. Criar página em Wiki.js
6. Validar criação
7. Adicionar cross-references
```
### 3. Actualização de Documentação
```markdown
1. Identificar página a actualizar
2. Ler conteúdo actual
3. Merge nova informação
4. Preservar histórico importante
5. Actualizar metadata (tags, data)
6. Commit changes
7. Notificar stakeholders
```
### 4. Sincronização Multi-Sistema
```markdown
1. Identificar fonte de verdade
2. Detectar diferenças
3. Resolver conflitos
4. Sync bidirecional
5. Validar integridade
6. Log de alterações
```
## Estrutura de Conteúdo
### Categorias Wiki.js
```
/Technical/ → Documentação técnica
/MCPs/ → Servidores MCP
/Skills/ → Skills Claude Code
/Agents/ → Agentes especializados
/Workflows/ → Automações N8N
/Procedures/ → SOPs e procedimentos
/Solutions/ → Soluções para problemas
/Projects/ → Documentação de projectos
/Guides/ → Guias e tutoriais
```
### Template de Página
```markdown
---
title: [Título]
description: [Descrição curta]
published: true
date: YYYY-MM-DD
tags: [tag1, tag2, tag3]
editor: markdown
---
# [Títu
+6
View File
@@ -0,0 +1,6 @@
{
"task_id": null,
"project_id": null,
"customer_id": null,
"gitea_repo": null
}
+8
View File
@@ -0,0 +1,8 @@
# gestao
## Documentação
- [README](README.md)
- [AGENTS](AGENTS.md)
- [STATUS](STATUS.md)
- [MEMORY](MEMORY.md)
+40
View File
@@ -0,0 +1,40 @@
{
"description": "Knowledge sources for Gestao domain",
"sources": {
"notebooklm": {
"description": "NotebookLM - conhecimento curado profundo via Gemini 2.5 RAG (PRIMARIO)",
"query_tool": "mcp__notebooklm__notebook_query",
"notebooks": [
{
"id": "0c9c079c-a426-486c-99eb-1564d42d37ad",
"title": "Gestao de Projectos e Agile",
"topics": [
"gestao"
]
},
{
"id": "f9dc59c2-718b-4b12-bd06-095d4bfa3e34",
"title": "Gestao de Operacoes",
"topics": [
"gestao",
"processos"
]
},
{
"id": "79d43410-0e29-4be1-881d-84db6bdc239a",
"title": "Estrategia e Empreendedorismo",
"topics": [
"estrategia"
]
},
{
"id": "ebee9fe1-78fd-4f85-8938-f19f3ea32131",
"title": "Obsidian + Claude",
"topics": [
"produtividade"
]
}
]
}
}
}
+1
View File
@@ -0,0 +1 @@
## 2026-06-30 init | Estrutura padrão
+17
View File
@@ -0,0 +1,17 @@
# AGENTS.md — skills
Directrizes específicas deste projecto para agentes IA.
## Referências obrigatórias
- `ECOSYSTEM.md` — Hub/06-Operacoes/Documentacao/ECOSYSTEM.md
- `PROC-DEV-STANDARD` — D7-SIS-006
- `PROC-AUDIT-STANDARD` — D7-SIS-007
## Protocolo de sessão
Início: ler MEMORY.md + STATUS.md. Fim: actualizar ambos.
## Convenções específicas
- (a definir)
+5
View File
@@ -0,0 +1,5 @@
# CHANGELOG — skills
## 0.1.0 — 2026-06-30
### Adicionado
- Estrutura padrão (PROC-DEV-STANDARD)
+4
View File
@@ -0,0 +1,4 @@
# MEMORY.md — skills
## 2026-06-30
- Estrutura padrão aplicada via propagate-structure.sh
+3
View File
@@ -0,0 +1,3 @@
# skills
Subprojecto skills do ecossistema Descomplicar.
+8
View File
@@ -0,0 +1,8 @@
# STATUS.md — skills
**Versão:** 0.1 | **Data:** 2026-06-30 | **Agente:** —
## Estado actual
- Em curso: —
- Bloqueios: —
- Próximos passos: —
+147
View File
@@ -0,0 +1,147 @@
---
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. Usar quando "aiktop tasks", "executar tarefas aiktop", "task queue ai".
disable-model-invocation: true
layer: wiki
---
# /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®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+236
View File
@@ -0,0 +1,236 @@
---
name: archive
description: Arquivamento inteligente de projectos e notas concluídos. Move itens finalizados para arquivo com organização adequada. Usar quando "archive", "arquivar", "mover para arquivo", "cleanup", "organizar concluídos".
disable-model-invocation: true
layer: wiki
---
# /archive - Arquivamento Automatico
Skill para mover ficheiros concluidos para pastas de arquivo, mantendo o vault organizado.
---
## Comandos
| Comando | Descricao |
|---------|-----------|
| `/archive` | Arquiva ficheiros com `status: done` ou `status: concluido` |
| `/archive logs` | Arquiva logs >7 dias para 99-Arquivo |
| `/archive tests` | Arquiva testes concluidos em z_tests/arquivo/ |
| `/archive dry` | Mostra o que seria arquivado (sem mover) |
---
## Logica de Arquivamento
### Por Frontmatter Status
```javascript
// Detectar ficheiros com status concluido
const patterns = [
"status: done",
"status: concluido",
"status: completed",
"status: archived"
];
// Pastas locais Obsidian a verificar
const pastas_origem = [
"z_logs/", // Logs de trabalho
"z_reflect/" // Reflexões
];
for (pasta of pastas_origem) {
const ficheiros = await Glob({ pattern: pasta });
for (ficheiro of ficheiros) {
const conteudo = await Read({ file_path: ficheiro });
if (matchesAnyPattern(conteudo, patterns)) {
// Determinar pasta arquivo
const arquivo_path = getArchivePath(ficheiro);
// Mover
await Bash({
command: `mv "${ficheiro}" "${arquivo_path}"`
});
// Registar
arquivados.push(ficheiro);
}
}
}
```
### Por Idade (Logs)
```javascript
// /archive logs - ficheiros >7 dias na pasta z_logs/
const limite = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
// Listar ficheiros na pasta z_logs/
const logs = await Glob({ pattern: "z_logs/*.md" });
for (log of logs) {
const data_ficheiro = extractDateFromFilename(log); // YYYY-MM-DD
if (data_ficheiro < limite) {
// Mover para pasta z_arquivo/
await Bash({
command: `mv "${log}" "z_arquivo/"`
});
}
}
```
---
## Estrutura de Pastas (Obsidian Vault)
```
Planeamento/
├── z_logs/ # Logs de trabalho
│ ├── 2026-01-27-worklog.md # Activo (<7 dias)
│ └── 2026-01-19-worklog.md # Mover para z_arquivo (>7 dias)
│
├── z_reflect/ # Reflexões
│ ├── 2026-01-27-review.md # Activo
│ └── 2026-W04-weekly.md # Mover para z_arquivo
│
└── z_arquivo/ # Destino arquivamento
├── 2026-01-19-worklog.md
└── 2026-W04-weekly.md
```
---
## Regras de Arquivamento
| Tipo | Criterio | Destino |
|------|----------|---------|
| Logs | >7 dias | z_arquivo/ |
| Reflexoes | >14 dias OU weekly | z_arquivo/ |
| Projectos | status: done | z_arquivo/ |
---
## Output
### /archive (normal)
```markdown
## Arquivamento - 2026-01-27
### Movidos (5 ficheiros)
| Ficheiro | Origem | Destino |
|----------|--------|---------|
| 2026-01-19-worklog.md | z_logs/ | z_arquivo/ |
| TEST-Skills.md | z_tests/ | z_tests/arquivo/ |
| ... | ... | ... |
### Ignorados (status activo)
- 2026-01-27-worklog.md (activo)
- TEST-Current.md (status: active)
---
*Arquivamento concluido via `/archive`*
```
### /archive dry
```markdown
## Dry Run - 2026-01-27
### Seria arquivado (5 ficheiros)
| Ficheiro | Motivo |
|----------|--------|
| 2026-01-19-worklog.md | >7 dias |
| TEST-Done.md | status: concluido |
> [!info] Nenhum ficheiro foi movido
> Executar `/archive` para arquivar
```
---
## Integracao
### Com /today (segunda-feira)
O `/today` chama automaticamente `/archive logs` as segundas antes da analise semanal.
### Com /reflect
Apos gerar weekly review, ficheiros de reflexao da semana anterior podem ser arquivados.
---
## Seguranca
- **NUNCA arquiva** ficheiros sem pasta arquivo/ existente
- **NUNCA arquiva** ficheiros em edicao (modificados <1h)
- **Cria ficheiro** com lista de movidos em z_logs/: `archive-log-YYYY-MM-DD.md`
---
## Changelog
### v1.0.0 (2026-01-27)
- Versao inicial
- Arquivamento por frontmatter status
- Arquivamento por idade (logs >7 dias)
- Modo dry run
- Integracao com /today
---
*Skill v1.0 | Descomplicar®*
---
## Quando NÃO Usar
- Para tarefas fora do domínio de especialização desta skill
- Quando outra skill mais específica está disponível
- Para operações que requerem confirmação manual do utilizador
## Protocolo
1. Analisar requisitos da tarefa
2. Verificar disponibilidade de ferramentas necessárias
3. Executar operações de forma incremental
4. Validar resultados antes de concluir
5. Reportar status e próximos passos
## Exemplos
### Exemplo 1: Uso Básico
```
Input: [descrição da tarefa]
Output: [resultado esperado]
```
### Exemplo 2: Uso Avançado
```
Input: [caso complexo]
Output: [resultado detalhado]
```
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar no
+161
View File
@@ -0,0 +1,161 @@
---
name: calendar-manager
description: Gestao do Google Calendar e automacao de agendamento. Cria eventos, gere disponibilidade e sincroniza calendarios.
layer: wiki
---
# Calendar Manager
Gestao centralizada de multiplos calendarios Google com classificacao automatica de eventos.
## Calendarios Disponiveis
| Calendario | ID | Tipo | Uso |
|------------|----|----|-----|
| **Emanuel Almeida - Pessoal** | `emanuelalmeidaa@gmail.com` | Pessoal | Compromissos pessoais, familia, saude, lazer |
| **Emanuel Almeida - Descomplicar** | `emanuel@descomplicar.pt` | Profissional | Trabalho, reunioes internas, planeamento |
| **Info Descomplicar** | `info@descomplicar.pt` | Profissional | Reunioes com clientes, calls externos |
| **Feriados em Portugal** | `pt-pt.portuguese#holiday@group.v.calendar.google.com` | Referencia | Feriados nacionais |
**Conta Google**: `emanuelalmeidaa@gmail.com` (usada para autenticacao em todos os calendarios)
## Classificacao Automatica de Eventos
### Eventos PESSOAIS -> `emanuelalmeidaa@gmail.com`
- Nomes proprios sem contexto empresarial (Tomas, Susana, Maria, Dra., Dr.)
- Medico, consulta, saude, dentista, fisioterapia, psicologo
- Familia, filhos, escola, CNG, colegio
- Ginasio, treino, corrida, desporto
- Almoco/jantar pessoal, aniversario, festa
- Casa, obras, condominio
- Banco, financas pessoais, seguro
### Eventos PROFISSIONAIS -> `emanuel@descomplicar.pt`
- Planeamento, sprint, retrospectiva, standup
- Desenvolvimento, deploy, release
- Interno, equipa, staff
- Nomes de projectos (Stack Workflow, WiP, etc.)
- Review, code review, merge
- Formacao, workshop interno
### Eventos com CLIENTES -> `info@descomplicar.pt`
- Cliente, call, reuniao externa
- Nomes de empresas/clientes conhecidos
- Proposta, orcamento, apresentacao
- Kickoff, entrega, demo
## Clientes Conhecidos
| Cliente | Keywords |
|---------|----------|
| Carstuff | carstuff, cars |
| FamilyClinic | familyclinic, clinic, clinica |
| KCG | kcg, karate, gaia |
| Espiral Senior | esp, espiral, senior |
| Solar FV | solar, fotovoltaico |
| Water Control | water, agua |
| Ignition Vortex | ignition, vortex |
## Comandos e Interpretacao
### Criar Eventos
```
Input: "Agenda Dra Susana 14:30"
-> Calendario: Pessoal (Dra = medico)
-> Evento: Dra Susana, 14:30-15:30
Input: "Reuniao Carstuff 16h ate 19h"
-> Calendario: Clientes (Carstuff = cliente conhecido)
-> Evento: Carstuff, 16:00-19:00
Input: "Planeamento segunda 9h 4 horas"
-> Calendario: Profissional (planeamento = interno)
-> Evento: Planeamento, 09:00-13:00
```
### Listar Eventos
```
"Agenda de hoje" -> todos os calendarios, hoje
"O que tenho amanha?" -> todos os calendarios, amanha
"Agenda de trabalho" -> so profissional + clientes
"Compromissos pessoais" -> so pessoal
```
### Verificar Disponibilidade
```
"Estou livre as 15h?" -> verificar todos os calendarios
"Proximo slot livre de 2h" -> encontrar disponibilidade
```
## Workflow
O workflow completo de criacao e listagem de eventos esta detalhado em `references/workflows-detalhados.md`.
### Resumo do fluxo CRIAR
1. **Analisar pedido** - extrair titulo, data, hora, duracao
2. **Classificar tipo** - pessoal/profissional/clientes (baseado em keywords)
3. **Extrair data/hora** - obter data actual via `mcp__mcp_time__current_time`, interpretar mencoes relativas
4. **Verificar conflitos** - consultar todos os calendarios no horario pretendido
5. **Criar evento** - via `mcp__google_workspace__create_event`
6. **Confirmar** - mostrar resumo ao utilizador
### Resumo do fluxo LISTAR
1. **Interpretar pedido** - periodo (hoje/amanha/semana) + ambito (todos/pessoal/profissional/clientes)
2. **Determinar intervalo** - calcular time_min e time_max
3. **Consultar calendarios** - buscar eventos em paralelo
4. **Agrupar e formatar** - ordenar por hora, agrupar por tipo
5. **Sugestoes** - avisar sobrecarga ou falta de pausas
## Formato de Resposta
### Criar:
```
[titulo]
[data] -- [hora inicio] - [hora fim]
[tipo: Pessoal/Profissional/Clientes]
```
### Listar:
```
Agenda [data]
PESSOAL
-- 14:30 Dra Susana (1h)
PROFISSIONAL
-- 09:00 Planeamento Semanal (4h)
CLIENTES
-- 16:00 Carstuff (3h)
```
## Regras
1. **Timezone**: Sempre `Europe/Lisbon`
2. **Duracao default**: 1 hora
3. **Ambiguidade**: Se nao for claro, perguntar ao utilizador
4. **Conflitos**: Avisar se houver sobreposicao
5. **Feriados**: Avisar se o evento calhar num feriado
## MCP Tools - Referencia Rapida
Referencia completa com constantes e exemplos em `references/mcp-tools-referencia.md`.
```javascript
// Listar calendarios
mcp__google_workspace__list_calendars({ user_google_email: 'emanuelalmeidaa@gmail.com' });
// Obter eventos
mcp__google_workspace__get_events({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: 'ALL',
time_min: '2026-02-04T00:00:00',
time_max: '2026-02-04T23:59:59'
});
// Criar evento
mcp__google_workspace__create_event({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: 'emanuelalmeidaa@gmail.com'
@@ -0,0 +1,81 @@
# Calendar Manager - Referencia MCP Tools
## Constantes
```javascript
const CALENDARIOS = {
PESSOAL: 'emanuelalmeidaa@gmail.com',
PROFISSIONAL: 'emanuel@descomplicar.pt',
CLIENTES: 'info@descomplicar.pt',
FERIADOS: 'pt-pt.portuguese#holiday@group.v.calendar.google.com'
};
const TIMEZONE = 'Europe/Lisbon';
const USER_EMAIL = 'emanuelalmeidaa@gmail.com';
const DURACAO_DEFAULT = 60; // minutos
```
## Google Workspace MCP - Referencia Completa
### Listar calendarios disponiveis
```javascript
mcp__google_workspace__list_calendars({
user_google_email: 'emanuelalmeidaa@gmail.com'
});
```
### Obter eventos
```javascript
mcp__google_workspace__get_events({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: 'emanuelalmeidaa@gmail.com', // ou 'ALL' para todos
time_min: '2026-02-04T00:00:00', // ISO 8601
time_max: '2026-02-04T23:59:59'
});
```
### Criar evento
```javascript
mcp__google_workspace__create_event({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: 'emanuelalmeidaa@gmail.com',
summary: 'Titulo do evento',
start_time: '2026-02-04T14:30:00',
end_time: '2026-02-04T15:30:00',
timezone: 'Europe/Lisbon',
description: 'Descricao opcional',
location: 'Local opcional'
});
```
### Modificar evento
```javascript
mcp__google_workspace__modify_event({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: 'emanuelalmeidaa@gmail.com',
event_id: 'id_do_evento',
summary: 'Novo titulo',
start_time: 'nova_data'
});
```
### Eliminar evento
```javascript
mcp__google_workspace__delete_event({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: 'emanuelalmeidaa@gmail.com',
event_id: 'id_do_evento'
});
```
## Checklist de Criacao
Antes de criar evento, verificar:
- Calendario correcto identificado (pessoal/profissional/clientes)
- Data valida (nao no passado, salvo excepcoes)
- Hora valida (formato HH:MM ou HH:MM-HH:MM)
- Duracao razoavel (<12h, excepto dias completos)
- Sem conflitos (ou utilizador confirmou)
- Timezone correcto (Europe/Lisbon)
- Titulo descritivo
@@ -0,0 +1,181 @@
# Calendar Manager - Workflows Detalhados
## Workflow CRIAR Eventos
### Passo 1: Analisar Pedido
```javascript
// Input: "Agenda Dra Susana amanha 14:30"
const analise = {
texto: "Agenda Dra Susana amanha 14:30",
palavras_chave: ["dra", "susana"],
data_mencionada: "amanha",
hora_mencionada: "14:30",
duracao_mencionada: null // default 1h
};
```
### Passo 2: Classificar Tipo
```javascript
// Detectar palavras-chave e determinar calendario
function classificarEvento(texto) {
const keywords_pessoal = /dra?|dentista|medico|familia|ginasio|consulta/i;
const keywords_cliente = /carstuff|familyclinic|kcg|espiral|solar|reuniao|call/i;
const keywords_profissional = /planeamento|sprint|deploy|interno|equipa/i;
if (keywords_pessoal.test(texto)) {
return {
tipo: 'pessoal',
calendar_id: 'emanuelalmeidaa@gmail.com'
};
}
if (keywords_cliente.test(texto)) {
return {
tipo: 'clientes',
calendar_id: 'info@descomplicar.pt'
};
}
if (keywords_profissional.test(texto)) {
return {
tipo: 'profissional',
calendar_id: 'emanuel@descomplicar.pt'
};
}
// Se ambiguo, perguntar
return { tipo: 'ambiguo' };
}
```
### Passo 3: Extrair Data e Hora
```javascript
// Obter data actual via mcp-time
const now = await mcp__mcp_time__current_time();
// Interpretar data mencionada
function interpretarData(mencao, hoje) {
const mapa = {
'hoje': hoje,
'amanha': addDays(hoje, 1),
'segunda': nextWeekday(hoje, 1),
'terca': nextWeekday(hoje, 2),
// etc.
};
return mapa[mencao.toLowerCase()] || parseDate(mencao);
}
// Criar timestamps ISO 8601
const data = interpretarData('amanha', now);
const start_time = `${data}T14:30:00`;
const end_time = `${data}T15:30:00`; // +1h default
```
### Passo 4: Verificar Conflitos
```javascript
// Buscar eventos existentes no horario
const eventos_conflito = await mcp__google_workspace__get_events({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: 'ALL',
time_min: start_time,
time_max: end_time
});
if (eventos_conflito.length > 0) {
// Avisar utilizador sobre conflito
}
```
### Passo 5: Criar Evento
```javascript
const evento = await mcp__google_workspace__create_event({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: classificacao.calendar_id,
summary: 'Dra Susana',
start_time: start_time,
end_time: end_time,
timezone: 'Europe/Lisbon',
description: 'Criado via Claude Code /calendar-manager'
});
```
## Workflow LISTAR Eventos
### Passo 1: Interpretar Pedido
```javascript
// Input: "Agenda de amanha"
const pedido = {
periodo: 'amanha', // hoje, amanha, semana, mes, data especifica
ambito: 'todos', // todos, pessoal, profissional, clientes
};
```
### Passo 2: Determinar Intervalo
```javascript
const now = await mcp__mcp_time__current_time();
function calcularIntervalo(periodo, hoje) {
const intervalos = {
'hoje': {
time_min: `${hoje}T00:00:00`,
time_max: `${hoje}T23:59:59`
},
'amanha': {
time_min: `${addDays(hoje, 1)}T00:00:00`,
time_max: `${addDays(hoje, 1)}T23:59:59`
},
'semana': {
time_min: `${startOfWeek(hoje)}T00:00:00`,
time_max: `${endOfWeek(hoje)}T23:59:59`
}
};
return intervalos[periodo];
}
```
### Passo 3: Consultar Calendarios
```javascript
// Determinar calendarios a consultar baseado no ambito
const calendarios = pedido.ambito === 'todos'
? ['emanuelalmeidaa@gmail.com', 'emanuel@descomplicar.pt', 'info@descomplicar.pt']
: [mapearAmbito(pedido.ambito)];
// Buscar eventos em paralelo
const resultados = await Promise.all(
calendarios.map(cal_id =>
mcp__google_workspace__get_events({
user_google_email: 'emanuelalmeidaa@gmail.com',
calendar_id: cal_id,
time_min: intervalo.time_min,
time_max: intervalo.time_max
})
)
);
```
### Passo 4: Agrupar e Formatar
```javascript
// Agrupar por tipo e ordenar por hora
const eventos_agrupados = {
pessoal: resultados[0].sort(byTime),
profissional: resultados[1].sort(byTime),
clientes: resultados[2].sort(byTime)
};
```
### Passo 5: Sugestoes Inteligentes
- Se ha muitas reunioes seguidas: avisar sobrecarga
- Se nao ha breaks: sugerir pausas de 15min entre reunioes
+119
View File
@@ -0,0 +1,119 @@
---
name: cleanup-downloads
description: Limpeza e triagem da pasta Transferências (Downloads). Verifica cada ficheiro individualmente, apaga descartáveis, classifica o restante por categoria. Usar quando "transferências", "downloads", "limpar downloads", "cleanup", "limpeza pasta".
layer: wiki
---
# Cleanup Downloads
Triagem manual de `/home/ealmeida/Transferências/`. Verificar cada ficheiro individualmente antes de agir.
**Regra de ouro:** NUNCA assumir que ficheiros com nomes semelhantes têm o mesmo conteúdo ou valor. Ler CADA ficheiro individualmente (ex: `emiteDoc.pdf` a `emiteDoc (12).pdf` tinham valores de 25,80€ a 100,53€).
## Procedimento
1. Listar conteúdo com `ls -la /home/ealmeida/Transferências/`
2. **Ler CADA ficheiro PDF individualmente** com `pdftotext` - extrair tipo, valor, data, fornecedor
3. Apresentar lista classificada com acção proposta (incluindo valores reais)
4. Executar apagamentos automáticos (regra 1)
5. Mover ficheiros com destino definido (regras 2-4)
6. Perguntar sobre ficheiros sem regra clara
7. Lançar despesas no CRM via `/expense` (regra 7)
8. Mostrar resumo final (apagados, movidos, mantidos, despesas criadas)
## Regra 1: Apagar sem perguntar
| Padrão | Motivo |
|--------|--------|
| `screencapture-*` | Screenshots browser temporários |
| `test*.docx`, `test*.txt` | Documentos de teste |
| `testando-*`, `teste-*` | Ficheiros de teste |
| `temp_*`, `*.tmp` | Temporários |
| `DIAGNÓSTICO_*.md` | Diagnósticos sessão anterior |
| Pastas só com ficheiros 0 bytes | Attachments vazios |
## Regra 2: Duplicados - verificar um por um
Ficheiros com nomes semelhantes (`ficheiro.pdf` vs `ficheiro (1).pdf`):
- Executar `cmp -s` para comparar
- **Cópia exacta** → apagar o duplicado sem perguntar
- **Ficheiros diferentes** → manter ambos, perguntar destino
Atenção: documentos transferidos com o mesmo nome podem ter conteúdo diferente.
## Regra 3: Documentos financeiros → mover por tipo
**Verificar conteúdo de CADA ficheiro** (ler primeira página com `pdftotext`) para:
1. Classificar correctamente (factura vs recibo vs comprovativo)
2. Extrair o valor real de cada documento
3. NUNCA copiar o valor de um ficheiro para os restantes - cada um tem o seu valor próprio
### 3a: Comprovativos de pagamento a fornecedores
Destino: `/media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/PagamentosFornecedores/`
Padrões típicos:
- `*SEPA*`, `*Compras*` (comprovativos bancários)
- `documento*.pdf` (comprovativos de transferência)
- `emiteDoc*` (AT execução fiscal)
- `FT *`, `inv*` (facturas fornecedores)
- PDFs com data no nome formato `YYYYMMDD*`
### 3b: Recibos de vencimento
Destino: `/media/ealmeida/Dados/GDrive/Cloud/ADM_Descomplicar/Financeiro/Contabilidade/Recibos de Vencimento/`
Padrões típicos:
- Recibos de vencimento (TOConline/metta)
- Comprovativos de transferência de salário
## Regra 4: Design, templates e exports → z_Verificar
Destino: `/home/ealmeida/Transferências/z_Verificar/`
Criar pasta `z_Verificar` se não existir. Mover para lá:
- `*.penpot` (ficheiros de design)
- `*.pptx` (templates/apresentações)
- `*.zip` (exports e backups)
- `*.sketch`, `*.fig` (design)
## Regra 5: Pastas antigas - apagar se migrado
Pastas com `.obsidian/` ou `.git/` dentro:
- Verificar se conteúdo já existe no Hub (`/media/ealmeida/Dados/Hub/`)
- **Se migrado** → apagar pasta e zip associado
- **Se não migrado** → perguntar
## Regra 6: Restante - perguntar
Tudo que não encaixar nas regras acima:
- **Facturas** (`emiteDoc*`, `FT *`, `inv*`) → perguntar destino
- **Imagens** (`*.png`, `*.jpg`) → perguntar
- **Dados** (`*.csv`, `*.xlsx`) → perguntar
- **PDFs desconhecidos** → ler primeira página para classificar
## Regra 7: Lançar despesas no CRM
Após mover documentos financeiros (regra 3), lançar despesas via `/expense`:
1. Verificar duplicados no CRM antes de criar
2. **Ler CADA PDF** para extrair valor real - NUNCA copiar valor de um ficheiro para outro
3. Criar despesas com: category_id, amount, date, note, reference, tax=1, currency=2
4. Actualizar `expense_name` via SQL com nome do fornecedor
5. Apresentar resumo com totais
**Anti-pattern:** Assumir que ficheiros com nomes semelhantes (ex: `emiteDoc`, `emiteDoc (1)`, ...) têm o mesmo valor. Cada documento tem valor próprio e deve ser verificado individualmente.
## Integração /today
Incluir contagem de ficheiros na pasta quando >10 ficheiros.
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+166
View File
@@ -0,0 +1,166 @@
---
name: clip-agent
description: Gerir agente Paperclip individual — estado, config, AGENTS.md, histórico runs, issues. Aceita nome como argumento. Usar quando "clip agent", "agente clip", "ver agente", "estado do CTO".
context: fork
layer: wiki
---
# /clip-agent — Gerir Agente Paperclip
Aceita argumento: nome do agente (ex: `/clip-agent CTO`).
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
COMPANY_ID: ebe10308-efd7-453f-86ab-13e6fe84004f
AGENTS_PATH: /media/ealmeida/Dados/Hub/04-Stack/02.06-Clip/agents/
```
## Procedimento
### Passo 1: Contexto completo do agente
Invocar tool MCP: `mcp__paperclip__diag_agent_full_context(agent_name="{{NOME}}")`
Esta tool retorna config, últimas runs, membership, permissões e tokens — cobre os Passos 1, 3, 6, 7 e 7b de uma só vez. Se multiplos resultados, mostrar lista e pedir clarificacao.
### Passo 2: Hierarquia
Quem lhe reporta:
```sql
SELECT name, role, status FROM agents
WHERE reports_to = '{{AGENT_ID}}'
AND company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
ORDER BY role, name;
```
A quem reporta:
```sql
SELECT name, role FROM agents WHERE id = '{{REPORTS_TO_ID}}';
```
### Passo 3: Ultimas 5 runs
```sql
SELECT hr.status, hr.started_at, hr.finished_at, LEFT(hr.error, 80) as erro
FROM heartbeat_runs hr
WHERE hr.agent_id = '{{AGENT_ID}}'
ORDER BY hr.started_at DESC LIMIT 5;
```
### Passo 4: Issues atribuidas
```sql
SELECT title, status, priority FROM issues
WHERE assignee_agent_id = '{{AGENT_ID}}'
AND status NOT IN ('done','cancelled')
ORDER BY priority, status;
```
### Passo 4b: Verificar falsos blockers (INC-07)
Se o agente tem issues `blocked`, invocar tool MCP: `mcp__paperclip__diag_false_blockers` e filtrar pelo agente. TODO: criar diag_* tool per-agent se uso recorrente.
Se `sub_activas > 0` e o agente está operacional → falso blocker. Alertar: "Issue {{ID}} marcada como blocked mas tem sub-tasks activas — deveria ser in_progress."
### Passo 5: AGENTS.md
Procurar em `AGENTS_PATH`:
```bash
find /media/ealmeida/Dados/Hub/04-Stack/02.06-Clip/agents/ -name "AGENTS.md" -exec grep -l "{{NOME}}" {} \;
```
Se encontrado, ler e apresentar resumo (primeiras 30 linhas).
## Formato de output
```
## Agente: {{NOME}}
**Role:** {{role}} | **Status:** {{status}} | **Ultimo heartbeat:** {{last_heartbeat_at}}
**Reporta a:** {{reports_to_name}} | **Budget:** {{spent}}/{{budget}} ({{pct}}%)
**Tokens cached:** {{tokens_M}}M | **CWD:** {{cwd}} | **Model:** {{model}}
### Equipa (reportam a este agente)
| Nome | Role | Status |
...
### Ultimas 5 runs
| Status | Início | Fim | Erro |
...
### Issues atribuidas
| Titulo | Status | Prioridade |
...
### Skills atribuidas
[lista de desiredSkills ou "Sem skills (apenas built-in paperclip)"]
### AGENTS.md
[resumo ou path]
```
### Passo 6: Skills do agente
```sql
SELECT
adapter_config->'paperclipSkillSync'->'desiredSkills' as desired_skills
FROM agents
WHERE id = '{{AGENT_ID}}';
```
Se nao NULL, listar as skills. Se NULL, indicar "Sem skills atribuidas (apenas built-in paperclip)".
Para ver detalhes das skills disponiveis na empresa:
```sql
SELECT name, slug, key, source_type FROM company_skills
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
ORDER BY name;
```
### Skills atribuídas ao agente
```sql
-- Ver skills desejadas (configuradas via API)
SELECT
a.name as agente,
a.adapter_config->'paperclipSkillSync'->'desiredSkills' as desired_skills
FROM agents a
WHERE a.id = '{{AGENT_ID}}';
```
**Acções disponíveis:**
- Ver skills da empresa: `SELECT name, slug FROM company_skills WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'`
- Atribuir skills via API (fetch no browser): `POST /api/agents/{{AGENT_ID}}/skills/sync` com `{ "desiredSkills": ["slug1", "slug2"] }`
### Membership (OBRIGATÓRIO — sem isto, permissões não funcionam)
A função `hasPermission()` verifica **primeiro** se o agente tem membership activa em `company_memberships`. Sem membership → permissão negada mesmo com grants correctos.
```sql
-- Verificar membership
SELECT status, membership_role FROM company_memberships
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND principal_id = '{{AGENT_ID}}';
```
Se **0 rows** → agente não tem membership. Criar:
```sql
INSERT INTO company_memberships (id, company_id, principal_type, principal_id, status, membership_role, created_at, updated_at)
VALUES (gen_random_uuid(), 'ebe10308-efd7-453f-86ab-13e6fe84004f', 'agent', '{{AGENT_ID}}', 'active', 'member', NOW(), NOW());
```
**Nota:** Agentes criados via SQL directo NÃO recebem membership automaticamente — apenas os onboarded via fluxo OpenClaw/hiring. Sempre criar membership ao adicionar agentes manualmente.
### Permissões do agente
```sql
SELECT permission_key FROM principal_permission_grants
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND principal_id = '{{AGENT_ID}}';
```
Para adicionar `tasks:assign` (necessário para delegação):
```sql
INSERT INTO principal_permissi
+186
View File
@@ -0,0 +1,186 @@
---
name: clip-health
description: Diagnóstico rápido Paperclip — serviço, BD, heartbeats falhados, budget, disco. Usar quando "clip health", "saúde clip", "diagnóstico paperclip", "clip problemas".
context: fork
layer: wiki
---
# /clip-health — Diagnostico Paperclip
Verificacao rapida da saude do sistema Clip.
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
PAPERCLIP_DIR: /home/ealmeida/paperclip
INSTANCE_DIR: /home/ealmeida/.paperclip/instances/default
```
## Procedimento
Executar todas as verificacoes em paralelo, depois apresentar relatorio.
### Check 1: Serviço
```bash
ps aux | grep -E "paperclip.*src/index|pnpm.*paperclipai" | grep -v grep | head -5
```
- Processos encontrados = OK
- Nenhum processo = CRITICO (iniciar com: `cd /home/ealmeida/paperclip && pnpm --filter @paperclipai/server dev`)
Verificar também memória partilhada PostgreSQL (causa do bug POSIX shared memory):
```bash
ls /dev/shm/PostgreSQL.* 2>/dev/null && echo "POSIX OK" || echo "POSIX em falta — BD pode falhar ao ligar"
```
- POSIX OK = OK
- POSIX em falta + processos activos = AVISO (PostgreSQL perdeu shared memory — reiniciar Paperclip)
- POSIX em falta + sem processos = CRITICO
### Check 2: Base de dados
Conexao:
```sql
SELECT 1 as connected;
```
Tamanho:
```sql
SELECT pg_size_pretty(pg_database_size('paperclip')) as db_size;
```
Contagens:
```sql
SELECT
(SELECT COUNT(*) FROM agents WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f') as agentes,
(SELECT COUNT(*) FROM issues WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f') as issues,
(SELECT COUNT(*) FROM heartbeat_runs hr JOIN agents a ON hr.agent_id = a.id WHERE a.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f') as heartbeats;
```
- Conexao OK = OK
- Conexao falha = CRITICO
### Check 3: Heartbeats falhados (24h)
```sql
SELECT a.name, hr.status, LEFT(hr.error, 70) as erro, hr.started_at::timestamp(0)
FROM heartbeat_runs hr JOIN agents a ON hr.agent_id = a.id
WHERE a.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND hr.status IN ('failed','error')
AND hr.started_at > NOW() - INTERVAL '24 hours'
ORDER BY hr.started_at DESC
LIMIT 20;
```
- 0 falhas = OK
- 1-2 falhas = AVISO
- 3+ falhas = CRITICO
### Check 4: Budget
```sql
SELECT name, budget_monthly_cents, spent_monthly_cents,
CASE WHEN budget_monthly_cents > 0
THEN ROUND(spent_monthly_cents::numeric / budget_monthly_cents * 100, 1)
ELSE 0 END as pct
FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND budget_monthly_cents > 0
AND spent_monthly_cents > 0
ORDER BY pct DESC;
```
- <80% = OK
- 80-95% = AVISO
- >95% = CRITICO
### Check 5: Disco
```bash
df -h /home/ealmeida/.paperclip/ | tail -1
```
```bash
du -sh /home/ealmeida/.paperclip/instances/default/db/ 2>/dev/null
du -sh /home/ealmeida/.paperclip/instances/default/logs/ 2>/dev/null
du -sh /home/ealmeida/.paperclip/instances/default/data/ 2>/dev/null
```
- >30% livre = OK
- 15-30% livre = AVISO
- <15% livre = CRITICO
### Check 6: API Health
```bash
curl -s --max-time 5 http://localhost:3100/health 2>/dev/null || echo "FALHA"
```
Esperado: `{"status":"ok","version":"...","deploymentMode":"authenticated","bootstrapStatus":"ready"}`
- `status: ok` = OK
- `{"error":"Board access required"}` = AVISO (API responde mas sem auth — BD operacional)
- FALHA/timeout = CRITICO (servidor não responde)
### Check 7: Gateway MCPs
```bash
curl -s --max-time 5 https://gateway.descomplicar.pt/health 2>/dev/null || echo "FALHA"
```
- Responde = OK
- Timeout/falha = AVISO
### Check 8: Referencias orfas na BD
Budget policies e incidents a referenciar entidades inexistentes:
Invocar tool MCP: `mcp__paperclip__diag_budget_orphans`
- 0 orfaos = OK
- 1+ orfaos = CRITICO (causa "Agent not found" no dashboard, apagar com DELETE)
### Check 9: Instancias duplicadas
```bash
ss -tlnp | grep -E "310[0-9]" | wc -l
```
- 1 instancia = OK
- 2+ instancias = CRITICO (processos orfaos do pnpm, matar com `kill -9` os PIDs com PPID=1)
Detalhe dos processos:
```bash
ss -tlnp | grep -E "310[0-9]"
```
### Check 10: Porta vs Cloudflare Tunnel
```bash
TUNNEL_PORT=$(grep -A1 "clip.descomplicar.pt" ~/.cloudflared/config.yml | grep service | grep -oP ':\K[0-9]+')
ACTUAL_PORT=$(ss -tlnp | grep -E "310[0-9]" | head -1 | grep -oP ':310[0-9]' | tr -d ':')
echo "Tunnel: $TUNNEL_PORT | Servidor: $ACTUAL_PORT"
```
- Iguais = OK
- Diferentes = CRITICO (tunnel a apontar para porta errada, dashboard inacessivel)
### Check 11: Agentes sem permissoes bash
Invocar tool MCP: `mcp__paperclip__diag_agents_without_skip_permissions`
- 0 = OK
- 1+ = CRITICO (agentes vao ficar bloqueados ao executar bash — corrigir com `/clip-agent`)
### Check 12: Agentes sem heartbeat
Invocar tool MCP: `mcp__paperclip__diag_agents_missing_heartbeat`
- 0 = OK
- 1+ = AVISO (agentes nao acordam — podem nao processar issues)
### Check 13: Routine triggers com kind errado ou next_run_at NULL
Invocar tool MCP: `mcp__pap
+184
View File
@@ -0,0 +1,184 @@
---
name: clip-instructions
description: Editar e gerir AGENTS.md de agentes Paperclip — ver, editar, rever histórico de versões. O AGENTS.md é o "cérebro" do agente. Usar quando "clip instructions", "editar agente", "atualizar AGENTS.md", "mudar comportamento agente", "instruções agente".
context: fork
version: "1.0.0"
created: 2026-04-07
layer: wiki
---
# /clip-instructions — Gerir AGENTS.md dos Agentes
O `AGENTS.md` é o ficheiro de instruções que define identidade, missão, comportamento e regras de cada agente. É injectado a cada heartbeat — editar o ficheiro tem efeito imediato no próximo run.
Aceita argumento: nome do agente (ex: `/clip-instructions CTO`).
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
COMPANY_ID: ebe10308-efd7-453f-86ab-13e6fe84004f
```
## Passo 1: Encontrar agente e localizar AGENTS.md
```sql
SELECT id, name, role, title,
adapter_config->>'instructionsFilePath' as instructions_path,
adapter_config->>'instructionsRootPath' as instructions_root
FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND LOWER(name) LIKE LOWER('%{{NOME}}%');
```
Se `instructions_path` é NULL ou não começa com `/` → CRITICO (AGENTS.md não está a ser carregado).
## Passo 2: Ler ficheiro actual
```bash
cat "{{instructions_path}}"
```
Apresentar conteúdo completo. Identificar secções:
- `## Identidade` — nome, papel, tipo, modelo, budget
- `## Missão` — objectivo principal
- `## Comportamento` — regras de actuação
- `## Skills` / `## MCPs` — ferramentas
- `## Heartbeat` — intervalo, checklist
- `## Equipa` — quem reporta a quem
## Passo 3: Modo de actuação
### Ver (sem edições pedidas)
Apresentar resumo estruturado das secções principais.
### Editar (utilizador pede alteração específica)
1. Ler ficheiro completo com Read
2. Identificar a secção a alterar
3. Propor a alteração ao utilizador ("Vou mudar X para Y — confirmas?")
4. Executar com Edit após confirmação
5. Verificar que o ficheiro ficou correcto
**Regras de edição segura:**
- Nunca reescrever o ficheiro completo — usar Edit para alterações cirúrgicas
- Preservar frontmatter YAML se existir
- Manter estrutura de secções existente
- Após editar, mostrar diff resumido das alterações
### Criar novo AGENTS.md (agente sem instruções)
Se `instructions_path` está definido mas o ficheiro não existe:
```bash
ls "{{instructions_path}}" 2>/dev/null || echo "NAO_EXISTE"
```
Criar directório se necessário:
```bash
mkdir -p "{{instructions_root}}"
```
Template mínimo para novo AGENTS.md:
```markdown
# {{NOME}}
## Identidade
- **Nome:** {{NOME}}
- **Papel:** {{ROLE}} — reporta ao {{SUPERVISOR}}
- **Tipo:** {{TIPO}} (executor/analyst/manager)
- **Modelo:** {{MODELO}}
- **Budget:** {{BUDGET}} cents/mês
## Missão
{{DESCRICAO_MISSAO}}
## Comportamento
### Regras
- **Foco** — executar apenas tarefas dentro do scope definido
- **Escalação** — problemas fora de scope → reportar ao supervisor
- **PT-PT** — sempre com acentuação correcta
## Heartbeat
- **Intervalo:** {{INTERVALO}}s
- **Checklist:** ver issues atribuídas, executar, reportar
## Equipa
- Reporta ao: {{SUPERVISOR}}
```
## Passo 4: Verificar após edição
Confirmar que o Paperclip reconhece o ficheiro actualizado:
```bash
curl -s "http://localhost:3100/api/agents/{{AGENT_ID}}/instructions-bundle" \
-H "Authorization: Bearer $PAPERCLIP_API_KEY" | python3 -c "import sys,json; d=json.load(sys.stdin); print('OK' if d.get('content') else 'VAZIO')"
```
- OK = AGENTS.md carregado pelo servidor
- VAZIO / erro = path errado ou ficheiro não encontrado
## Casos especiais
### Actualizar model no AGENTS.md
Se o agente mudou de modelo (ex: gemini → claude), actualizar tanto o AGENTS.md como o `adapter_config`:
```sql
UPDATE agents
SET adapter_config = jsonb_set(adapter_config, '{model}', '"{{NOVO_MODELO}}"'::jsonb)
WHERE id = '{{AGENT_ID}}'
AND company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f';
```
### Rever historial de versões (config_revisions)
```sql
SELECT cr.id, cr.created_at::timestamp(0), a.name as criado_por
FROM agent_config_revisions cr
LEFT JOIN agents a ON cr.created_by_agent_id = a.id
WHERE cr.agent_id = '{{AGENT_ID}}'
ORDER BY cr.created_at DESC
LIMIT 10;
```
### Rollback via API
```bash
curl -s -X POST "http://localhost:3100/api/agents/{{AGENT_ID}}/config-revisions/{{REVISION_ID}}/rollback" \
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
```
---
## Formato de output
```
## Instruções — {{NOME}} ({{role}})
**Ficheiro:** {{instructions_path}}
**Estado:** carregado / não encontrado / path inválido
### Resumo actual
**Missão:** [1 linha]
**Modelo:** {{model}} | **Budget:** {{budget}} cents | **Heartbeat:** {{intervalo}}s
**Regras principais:** [lista]
**Skills:** [lista ou "nenhuma"]
### Alterações efectuadas (se editou)
[diff resumido]
```
---
## Healing Log
```jsonl
{"date":"2026-04-07","issue":"instructionsFilePath relativo — AGENTS.md não carregava
+148
View File
@@ -0,0 +1,148 @@
---
name: clip-issue
description: Criar e gerir issues Paperclip — lançar objectivos ao CEO, ver progresso, comentar. Usar quando "clip issue", "criar issue", "lançar objectivo", "ver issues clip". Issues seguem cadeia de delegação hierárquica.
context: fork
layer: wiki
---
# /clip-issue — Gerir Issues Paperclip
Modos: lista (sem args), criar (com titulo), ver (com ID).
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
COMPANY_ID: ebe10308-efd7-453f-86ab-13e6fe84004f
API: http://localhost:3100/api
```
## Modo lista (sem argumentos)
```sql
SELECT i.id, i.title, i.status, i.priority, a.name as assignee, i.created_at
FROM issues i LEFT JOIN agents a ON i.assignee_agent_id = a.id
WHERE i.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND i.status NOT IN ('done','cancelled')
ORDER BY
CASE i.priority WHEN 'critical' THEN 1 WHEN 'high' THEN 2 WHEN 'medium' THEN 3 ELSE 4 END,
i.status, i.created_at DESC;
```
Para ver concluidas tambem:
```sql
-- Adicionar: AND i.status IN ('done') AND i.updated_at > NOW() - INTERVAL '7 days'
```
## Modo criar (com titulo)
### Passo 1: Obter CEO ID
```sql
SELECT id FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND name = 'CEO';
```
### Passo 2: Criar issue
Preferir API (quando JWT funciona):
```bash
curl -s -X POST "http://localhost:3100/api/companies/ebe10308-efd7-453f-86ab-13e6fe84004f/issues" \
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "{{TITULO}}",
"description": "{{DESCRICAO}}",
"priority": "{{PRIORIDADE}}",
"assigneeAgentId": "{{CEO_ID}}"
}'
```
Fallback via BD (OBRIGATORIO incluir identifier e issue_number):
```sql
-- Passo 2a: Obter proximo numero
SELECT issue_counter FROM companies WHERE id = 'ebe10308-efd7-453f-86ab-13e6fe84004f';
-- Guardar o valor como NEXT_NUM
-- Passo 2b: Criar issue COM identifier
INSERT INTO issues (id, company_id, title, description, priority, assignee_agent_id, status, identifier, issue_number, created_at, updated_at)
VALUES (
gen_random_uuid(),
'ebe10308-efd7-453f-86ab-13e6fe84004f',
'{{TITULO}}',
'{{DESCRICAO}}',
'{{PRIORIDADE}}',
'{{CEO_ID}}',
'todo',
'DES-{{NEXT_NUM}}',
{{NEXT_NUM}},
NOW(), NOW()
)
RETURNING id, identifier, title, status;
-- Passo 2c: Incrementar counter (CRITICO — nunca esquecer)
UPDATE companies SET issue_counter = {{NEXT_NUM}} + 1 WHERE id = 'ebe10308-efd7-453f-86ab-13e6fe84004f';
```
**NUNCA criar issues via SQL sem identifier e issue_number.** Causa bug de duplicate key que bloqueia toda a criacao de issues no Paperclip.
Confirmar titulo e prioridade com o utilizador antes de criar. Prioridades: critical, high, medium, low.
### Nota sobre delegação hierárquica
Issues criadas pelo Board (Emanuel) são sempre atribuídas ao CEO. O CEO delega pela cadeia:
- CEO cria sub-issue ao C-Level adequado
- C-Level cria sub-issue ao Director
- Director atribui ao especialista
Quando routines disparam, geram issues ao CEO que segue o mesmo fluxo. A cadeia está na descrição da routine (campo `description` começa com `CADEIA: CEO → ...`).
## Semântica de estados (referência rápida)
Ao criar, alterar ou interpretar estados de issues:
- **`todo`** — não iniciada, aguarda pickup
- **`in_progress`** — trabalho em curso, **incluindo aguardar sub-tasks delegadas**
- **`blocked`** — APENAS impedimento real (agente em erro, falta de permissão, dependência externa, aguarda decisão humana)
- **`done`** — concluída com resultado verificado
- **`cancelled`** — abandonada por decisão superior
**Regra INC-07:** `blocked` ≠ "delegué e estou à espera". Aguardar sub-task activa = `in_progress`. Se ao listar issues vires `blocked` sem impedimento real, alertar o utilizador.
## Modo ver (com ID ou titulo parcial)
```sql
SELECT i.*, a.name as assignee
FROM issues i LEFT JOIN agents a ON i.assignee_agent_id = a.id
WHERE i.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND (i.id::text LIKE '%{{ARG}}%' OR LOWER(i.title) LIKE LOWER('%{{ARG}}%'));
```
Comentarios:
```sql
SELECT ic.body, ic.created_at, a.name as author
FROM issue_comments ic
LEFT JOIN agents a ON ic.author_agent_id = a.id
WHERE ic.issue_id = '{{ISSUE_ID}}'
ORDER BY ic.created_at ASC;
```
## Modo comentar
```sql
INSERT INTO issue_comments (id, company_id, issue_id, author_user_id, body, created_at, updated_at)
VALUES (gen_random_uuid(), 'ebe10308-efd7-453f-86ab-13e6fe84004f', '{{ISSUE_ID}}', 'v1N5OccPn9DGq6iog7qW9nEvnXYFT3iO', '{{COMENTARIO}}', NOW(), NOW())
RETURNING id;
```
Nota: `author_user_id = 'v1N5OccPn9DGq6iog7qW9nEvnXYFT3iO'` (Emanuel) → comentário aparece como Board/humano no dashboard. Nunca usar `'board'` — não é um user_id válido.
## Modo checkout / release
Checkout reserva a issue para trabalho activo (sinaliza ao Paperclip que está em curso).
Release liberta a issue de volta a `todo`.
**Checkout via API:**
```bash
curl -s -X POST "http://localhost:3100/api/issues/{{ISSUE_ID}}/che
+149
View File
@@ -0,0 +1,149 @@
---
name: clip-org
description: Org chart Paperclip — hierarquia completa, reports, gaps por preencher. Usar quando "clip org", "organigrama", "hierarquia clip", "quem reporta a quem". Inclui modelo de governance e cadeias de delegação.
context: fork
layer: wiki
---
# /clip-org — Org Chart Paperclip
Hierarquia completa da empresa Descomplicar no Paperclip.
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
COMPANY_ID: ebe10308-efd7-453f-86ab-13e6fe84004f
```
## Procedimento
### Passo 1: Obter hierarquia completa
Invocar tool MCP: `mcp__paperclip__diag_agent_hierarchy`
### Passo 2: Construir arvore visual
Apresentar como arvore identada:
```
Emanuel (Board)
└── CEO (running)
├── COO (idle)
│ ├── [Dir. Suporte] — nao existe
│ └── Ticket Triage (idle)
├── CFO (idle)
│ ├── [Dir. Financeiro] — nao existe
│ ├── Finance Manager (idle)
│ └── Compliance Auditor (idle)
├── CTO (idle)
│ ├── [Dir. Infraestrutura] — nao existe
│ │ ├── CWP Server Manager (idle)
│ │ ├── EasyPanel Specialist (idle)
│ │ ├── Backup Specialist (idle)
│ │ └── Security Specialist (idle)
│ ├── [Dir. Desenvolvimento] — nao existe
│ │ └── ...
│ └── ...
└── ...
```
Nota: Directores de seccao (~16) podem ainda nao existir. Mostrar como `[Nome] — nao existe` para evidenciar gaps.
### Passo 3: Identificar gaps
```sql
-- Agentes orfaos (sem reports_to, excepto CEO)
SELECT name, role, status FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND reports_to IS NULL
AND role != 'ceo';
```
```sql
-- C-Level sem subordinados directos
SELECT c.name, c.role,
(SELECT COUNT(*) FROM agents sub WHERE sub.reports_to = c.id) as subordinados
FROM agents c
WHERE c.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND c.role IN ('coo','cfo','cto','cmo','cro','cgo','cdo')
ORDER BY subordinados ASC;
```
### Passo 4: Estatisticas
```sql
SELECT
role,
COUNT(*) as total,
COUNT(CASE WHEN status = 'running' THEN 1 END) as running,
COUNT(CASE WHEN status = 'idle' THEN 1 END) as idle,
COUNT(CASE WHEN status = 'paused' THEN 1 END) as paused
FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
GROUP BY role
ORDER BY CASE role
WHEN 'ceo' THEN 1 WHEN 'coo' THEN 2 WHEN 'cfo' THEN 3
WHEN 'manager' THEN 4 WHEN 'engineer' THEN 5 ELSE 6 END;
```
## Formato de output
```
## Org Chart Clip — [data]
[arvore visual]
### Estatisticas
| Camada | Total | Running | Idle | Paused |
...
### Gaps
- Directores em falta: [lista das 16 TFs sem Director]
- Agentes orfaos: [lista]
- C-Level sem subordinados: [lista]
### Cobertura
Directores: N/16 (N%)
TaskForces cobertas: [lista]
```
## Referência de TaskForces esperadas
| TF | Director esperado | Reporta a |
|----|-------------------|-----------|
| TF-01 Estratégia | Dir. Estratégia | CGO |
| TF-02 Operações | Dir. Operações | COO |
| TF-03 Financeiro | Dir. Financeiro | CFO |
| TF-04 Infraestrutura | Dir. Infraestrutura | CTO |
| TF-05 Desenvolvimento | Dir. Desenvolvimento | CTO |
| TF-06 Automação | Dir. Automação | CTO |
| TF-07 IA | Dir. IA | CGO |
| TF-08 Design | Dir. Design | CMO |
| TF-09 Web | Dir. Web | CMO |
| TF-10 Vídeo | Dir. Vídeo | CMO |
| TF-11 SEO | Dir. SEO | CMO |
| TF-12 Conteúdo | Dir. Conteúdo | CMO |
| TF-13 Social | Dir. Social | CMO |
| TF-14 Publicidade | Dir. Publicidade | CMO |
| TF-15 Comercial | Dir. Comercial | CRO |
| TF-16 Suporte | Dir. Suporte | COO |
## Modelo de governance
Todas as routines são atribuídas ao CEO que delega pela cadeia hierárquica:
`Routine → CEO → C-Level → Director → Especialista`
Cada nível adiciona contexto antes de delegar e sintetiza resultados antes de reportar acima. Ver `/clip-routine` para detalhes.
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+169
View File
@@ -0,0 +1,169 @@
---
name: clip-routine
description: Gerir routines Paperclip — listar crons activos, ver execuções, criar/editar routines. Usar quando "clip routine", "routines clip", "crons paperclip", "automações clip".
context: fork
layer: wiki
---
# /clip-routine — Gerir Routines Paperclip
## Modelo de governance (desde 29-03-2026)
**Todas as routines são atribuídas ao CEO.** O CEO delega pela cadeia hierárquica:
```
Routine (cron trigger) → CEO avalia e delega
→ C-Level adiciona contexto departamental
→ Director coordena e atribui
→ Especialista executa
→ Resultado sobe a cadeia com síntese progressiva
```
Cada routine tem no campo `description` a cadeia de delegação (ex: `CADEIA: CEO → CTO → Dir. Infraestrutura → Backup Specialist`).
**Regras:**
- Novas routines devem ser SEMPRE atribuídas ao CEO
- A cadeia de delegação deve estar explícita na descrição
- Nunca atribuir routines directamente a especialistas — quebra a visibilidade hierárquica
## Dois tipos de periodicidade
1. **Heartbeats** — intervalos configurados via `runtime_config` dos agentes (quando acordam)
2. **Routines** — tarefas periódicas via tabela `routines` + `routine_triggers` com cron (o que fazem ao acordar)
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
COMPANY_ID: ebe10308-efd7-453f-86ab-13e6fe84004f
```
## Tiers de heartbeat
| Tier | Intervalo | Uso |
|------|-----------|-----|
| 1 | 1h (3600s) | CEO, agentes criticos |
| 2 | 2h (7200s) | C-Level activos |
| 3 | 4h (14400s) | Directores |
| 4 | 6h (21600s) | Especialistas com rotina |
| 5 | on-demand | Especialistas reactivos (sem timer) |
## Modo lista (sem argumentos)
Listar agentes com heartbeat configurado:
```sql
SELECT name, role, status,
runtime_config->'heartbeat'->>'enabled' as hb_enabled,
runtime_config->'heartbeat'->>'intervalSec' as hb_interval,
last_heartbeat_at
FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND runtime_config::text != '{}'
AND runtime_config->'heartbeat' IS NOT NULL
ORDER BY (runtime_config->'heartbeat'->>'intervalSec')::int ASC NULLS LAST;
```
Complementar com contagem de execucoes recentes:
```sql
SELECT a.name,
COUNT(CASE WHEN hr.status = 'succeeded' THEN 1 END) as ok_24h,
COUNT(CASE WHEN hr.status = 'failed' THEN 1 END) as fail_24h
FROM agents a
LEFT JOIN heartbeat_runs hr ON hr.agent_id = a.id
AND hr.started_at > NOW() - INTERVAL '24 hours'
WHERE a.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND a.runtime_config->'heartbeat' IS NOT NULL
GROUP BY a.name
ORDER BY a.name;
```
## Modo ver (com nome de agente)
Ultimas 10 execucoes de um agente:
```sql
SELECT hr.status, hr.started_at, hr.finished_at, LEFT(hr.error, 80) as erro
FROM heartbeat_runs hr
JOIN agents a ON hr.agent_id = a.id
WHERE a.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND LOWER(a.name) LIKE LOWER('%{{NOME}}%')
ORDER BY hr.started_at DESC LIMIT 10;
```
## Modo criar/editar (configurar heartbeat)
### Activar heartbeat
```sql
UPDATE agents SET runtime_config = jsonb_set(
COALESCE(runtime_config, '{}'::jsonb),
'{heartbeat}',
'{"enabled": true, "intervalSec": {{INTERVALO}}, "cooldownSec": 10, "wakeOnDemand": true, "maxConcurrentRuns": 1}'::jsonb
)
WHERE name = '{{NOME}}'
AND company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
RETURNING name, runtime_config;
```
Confirmar sempre com o utilizador:
- Nome do agente
- Intervalo (sugerir tier adequado ao role)
- wakeOnDemand (true para a maioria)
### Desactivar heartbeat
```sql
UPDATE agents SET runtime_config = jsonb_set(
runtime_config,
'{heartbeat,enabled}',
'false'::jsonb
)
WHERE name = '{{NOME}}'
AND company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
RETURNING name, runtime_config;
```
### Alterar intervalo
```sql
UPDATE agents SET runtime_config = jsonb_set(
runtime_config,
'{heartbeat,intervalSec}',
'{{INTERVALO}}'::jsonb
)
WHERE name = '{{NOME}}'
AND company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
RETURNING name, runtime_config;
```
## Routines do projecto (tabela routines)
Alem dos heartbeats por agente, existem routines organizadas por projecto com cron triggers.
**Estado actual:** 5 routines activas no Paperclip. 9 routines anteriores foram migradas para workflows n8n em https://automator.descomplicar.pt.
**5 routines Paperclip:**
- Auditoria processos e compliance (0 10 * * *)
- Execução tarefas AikTop (*/30 * * * *)
- Reconciliação financeira diária (0 8 * * *)
- Varredura inteligência competitiva (0 11 * * *)
- Monitorização workflows n8n (0 10,18 * * *) — atribuída ao COO
### Listar routines activas
```sql
SELECT r.title, r.status, r.priority, a.name as assignee,
rt.cron_expression, rt.enabled, rt.next_run_at
FROM routines r
LEFT JOIN agents a ON r.assignee_agent_id = a.id
LEFT JOIN routine_triggers rt ON rt.routine_id = r.id
WHERE r.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
ORDER BY r.title;
```
### Ver execucoes de uma routine
```sql
SELECT rr.status, rr.triggered
+165
View File
@@ -0,0 +1,165 @@
---
name: clip-skill
description: Gerir company skills no Paperclip — listar, instalar, atribuir a agentes, auditar cobertura. Usar quando "clip skill", "skills clip", "instalar skill", "atribuir skill", "skills paperclip".
context: fork
layer: wiki
---
# /clip-skill — Gerir Company Skills Paperclip
Gerir skills instaladas na empresa Descomplicar no Paperclip. Instalar, atribuir, remover e auditar.
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
COMPANY_ID: ebe10308-efd7-453f-86ab-13e6fe84004f
API: http://localhost:3100/api
SKILLS_CC: ~/.claude/plugins/marketplaces/descomplicar-plugins/
```
## Contexto técnico
Skills no Paperclip funcionam como **injecção de contexto em runtime**:
- O conteúdo do SKILL.md é injectado como contexto adicional ao agente a cada heartbeat
- Não há instalação permanente — a skill é lida do ficheiro a cada execução
- Atribuição é por agente via `adapter_config.paperclipSkillSync.desiredSkills` (array de slugs)
- Skills instaladas na empresa ficam em `company_skills` — só as atribuídas ao agente são injectadas
**Distribuição actual de adapters (07-04-2026):**
- 5 C-Level (CEO/CDO/CFO/CGO/CTO): `claude_local` com `claude-sonnet-4-6` (raciocínio estratégico)
- 59 especialistas/directores: `gemini_local` com `gemini-2.5-flash` (execução, baixo custo)
- 1 analyst (Reality Checker): `process` com `claude-sonnet-4-6` (on-demand, sem heartbeat, sem skills)
`opencode_local` foi **removido** (modelos indisponíveis). Política: C-Level = claude_local sonnet-4-6, restantes = gemini_local. Templates em `/clip-agent`.
## Modo lista (sem argumentos)
### Skills instaladas na empresa
```sql
SELECT name, slug, key, source_type, trust_level, compatibility,
created_at::date as instalada
FROM company_skills
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
ORDER BY name;
```
### Agentes com skills atribuidas
```sql
SELECT name, role, status,
adapter_config->'paperclipSkillSync'->'desiredSkills' as skills
FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND adapter_config::text LIKE '%paperclipSkillSync%'
ORDER BY name;
```
### Resumo
Apresentar:
```
## Skills Clip — [data]
**Empresa:** N skills instaladas (N locais, N built-in)
**Agentes:** N com skills atribuidas / 62 total
### Skills instaladas
| Nome | Key | Fonte | Trust | Compativel |
...
### Agentes com skills
| Agente | Role | Skills |
...
### Agentes sem skills (top 10 por relevancia)
[listar agentes com routines activas mas sem skills]
```
## Modo instalar (com path ou key)
### Instalar skill de path local
Argumento: path absoluto para pasta com SKILL.md.
Verificar primeiro que existe SKILL.md:
```bash
ls {{PATH}}/SKILL.md 2>/dev/null && head -5 {{PATH}}/SKILL.md
```
Instalar via API:
```bash
curl -s -X POST "http://localhost:3100/api/companies/ebe10308-efd7-453f-86ab-13e6fe84004f/skills/import" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
-d '{"source": "{{PATH}}"}'
```
Se API falha (auth), inserir directamente na BD:
```sql
-- Ler frontmatter do SKILL.md para obter name e description
-- Depois inserir:
INSERT INTO company_skills (id, company_id, key, slug, name, description, markdown, source_type, source_locator, trust_level, compatibility, file_inventory, created_at, updated_at)
VALUES (
gen_random_uuid(),
'ebe10308-efd7-453f-86ab-13e6fe84004f',
'descomplicar/{{PLUGIN}}/{{SKILL_NAME}}',
'{{SKILL_NAME}}',
'{{NAME_FROM_FRONTMATTER}}',
'{{DESCRIPTION_FROM_FRONTMATTER}}',
'{{FULL_SKILL_MD_CONTENT}}',
'local_path',
'{{PATH}}',
'markdown_only',
'compatible',
'[]'::jsonb,
NOW(), NOW()
)
RETURNING id, name, slug;
```
Confirmar com o utilizador antes de instalar. Mostrar name e description do SKILL.md.
### Instalar skill do marketplace CC
Argumento: nome da skill no formato `plugin/skill` (ex: `crm-ops/crm`).
Resolver path:
```bash
SKILL_PATH="$HOME/.claude/plugins/marketplaces/descomplicar-plugins/{{PLUGIN}}/skills/{{SKILL}}"
ls "$SKILL_PATH/SKILL.md" 2>/dev/null && head -10 "$SKILL_PATH/SKILL.md"
```
Depois seguir o fluxo de instalacao por path local.
### Instalar em massa (com filtro de plugin)
Argumento: nome do plugin (ex: `crm-ops`).
```bash
find "$HOME/.claude/plugins/marketplaces/descomplicar-plugins/{{PLUGIN}}/skills/" -name "SKILL.md" -exec dirname {} \;
```
Listar todas as skills encontradas com name e description. Pedir confirmacao antes de instalar cada uma.
## Modo atribuir (skill a agente)
### Atribuir via API
```bash
curl -s -X POST "http://localhost:3100/api/agents/{{AGENT_ID}}/skills/sync" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $PAPERCLIP_API_KEY" \
-d '{"desiredSkills": [{{SKILLS_ARRAY}}]}'
```
### Atribuir via BD (fallback)
```sql
UPDATE agents SET adapter_config = jsonb_set(
COALESCE(adapter_config, '{}'::jsonb),
'{paperclipSkillSync}',
jsonb_build_object('desiredSkills', '{{SKILLS_JSON_ARRAY}}'::jsonb)
)
WHE
+166
View File
@@ -0,0 +1,166 @@
---
name: clip-vision
category: gestao
description: "Gera documento de visao estrategica para o CEO Paperclip e bootstraps por C-Level. Resolve o vision gap — agentes param porque lhes falta a visao do fundador. Usar quando 'clip vision', 'visao paperclip', 'vision gap', 'bootstrap ceo', 'direcao agentes'."
version: "1.0.0"
created: 2026-04-07
tools: [Read, Write, Bash, AskUserQuestion]
layer: wiki
---
# Skill: /clip-vision
Gera documento de visao estrategica para o CEO Paperclip e bootstrap documents para cada C-Level. Baseado no padrao Paperclip Vision Skill (#368 Aron Prins).
---
## Problema que resolve
Agentes Paperclip param de produzir apos setup porque so recebem tarefas operacionais, nao visao estrategica. O CEO nao sabe para onde ir. Os C-Level nao sabem o que priorizar. O "vision gap" faz com que a organizacao funcione mas sem direcao.
---
## Processo de execucao
### Fase 1 — Recolha de contexto (automatica)
Recolher dados do estado actual do Paperclip e do stack:
1. **Ler estado Paperclip:**
- Ficheiro `/home/ealmeida/paperclip/` — listar agents activos
- Desk CRM task #2041 (projecto Stack) — estado
- `Hub/04-Stack/STK-Estado-Actual.md` — metricas actuais
- `Hub/04-Stack/plano-consolidado-stack-q2-2026.md` — plano e metas
2. **Ler issues e routines:**
- Via MCP Paperclip ou ficheiros locais em `/home/ealmeida/paperclip/`
- Issues abertas, routines activas, ultimos heartbeats
3. **Compilar contexto:** resumo de 10-15 linhas com estado actual
### Fase 2 — Entrevista ao fundador (interactiva)
Fazer 5-7 perguntas ao Emanuel usando AskUserQuestion. Cada pergunta com 3-4 opcoes + "outro":
**Pergunta 1:** Qual e a prioridade principal para os proximos 30 dias?
- a) Aumentar receita (novos clientes, propostas)
- b) Melhorar operacoes internas (eficiencia, automacao)
- c) Desenvolver produto/servico novo
- d) Consolidar o que ja existe (qualidade, documentacao)
- e) Outro: ___
**Pergunta 2:** Que departamento precisa de mais atencao neste momento?
- a) D1 Comercial (vendas, leads, propostas)
- b) D6 Marketing (SEO, conteudo, redes sociais)
- c) D7 Tecnologia (infra, dev, automacao)
- d) D3 Contabilidade (facturas, despesas, cash flow)
- e) Outro: ___
**Pergunta 3:** Que nivel de autonomia queres dar aos agentes?
- a) Passive — so actuam quando pedido, sempre com aprovacao
- b) Balanced — actuam em rotinas, pedem aprovacao para novidades
- c) Active — actuam proactivamente, reportam resultados
- d) Manter o actual
**Pergunta 4:** Qual e o budget mensal aceitavel para agentes IA (tokens + APIs)?
- a) <50 EUR/mes (minimo, so essenciais)
- b) 50-100 EUR/mes (moderado)
- c) 100-200 EUR/mes (investimento activo)
- d) >200 EUR/mes (sem restricao significativa)
**Pergunta 5:** Qual e o objectivo principal do Q2 2026?
- a) Facturacao: atingir X EUR/mes
- b) Clientes: fechar N novos contratos
- c) Produto: lancar servico/SaaS especifico
- d) Stack: maximizar capacidade operacional
- e) Outro: ___
**Pergunta 6:** O que deve ser explicitamente proibido para os agentes?
- a) Contactar clientes directamente
- b) Fazer deploy sem aprovacao
- c) Gastar budget acima de X
- d) Todas as anteriores
- e) Outro: ___
**Pergunta 7:** Como medes sucesso dos agentes Paperclip?
- a) Output tangivel (artigos, propostas, deploys)
- b) Reducao de tempo em tarefas manuais
- c) ROI mensuravel (custo vs valor gerado)
- d) Consistencia (fazem sempre o basico bem)
### Fase 3 — Geracao de documentos
Com base nas respostas, gerar 5 documentos:
#### 1. vision.md (destino: /home/ealmeida/paperclip/vision.md)
```markdown
# Visao Descomplicar — {data}
## Missao
{extraido das respostas + contexto}
## Objectivos Q2 2026
1. {objectivo principal}
2. {objectivo secundario}
3. {objectivo terciario}
## Prioridades (30 dias)
1. {prioridade 1 com accao concreta}
2. {prioridade 2}
3. {prioridade 3}
## Restricoes
- {proibicoes definidas na P6}
- Budget maximo: {P4}
- Governance: {P3}
## Metricas de sucesso
- {P7 — como medir}
## Revisao
- Gerado: {data}
- Proxima revisao: {data + 90 dias}
```
#### 2-5. Bootstrap documents (destino: /home/ealmeida/paperclip/)
Para cada C-Level (CEO, CTO, CMO, COO), gerar `{role}-bootstrap.md`:
```markdown
# Bootstrap {Role} — {data}
## Contexto
{estado actual do departamento relevante}
## Top 3 prioridades
1. {prioridade com accao e deadline}
2. {prioridade}
3. {prioridade}
## Recursos disponiveis
- Skills: {lista relevante}
- MCPs: {lista relevante}
- Routines: {activas no departamento}
## Restricoes
- {do vision.md, filtradas para este papel}
## Proxima accao
{1 accao concreta que pode fazer no proximo heartbeat}
```
### Fase 4 — Resumo e confirmacao
Apresentar resumo ao utilizador:
- 5 documentos gerados com paths
- Sugerir proximos passos (injectar vision.md no CEO heartbeat, etc.)
- Perguntar se quer ajustar algo
---
## Notas importantes
- Os documentos devem ser **accionaveis**, nao genericos
- Cada bootstrap deve referenciar **dados reais** do estado actual
- O visio
+163
View File
@@ -0,0 +1,163 @@
---
name: clip
description: Dashboard rápido Paperclip — estado agentes, issues abertas, heartbeats recentes, alertas. Usar quando "clip", "paperclip", "estado clip", "agentes clip".
context: fork
layer: wiki
---
# /clip — Dashboard Paperclip
Dashboard rapido do estado do Clip (Paperclip Orquestrador Descomplicar).
## Constantes
```
BD: PGPASSWORD="paperclip" psql -h localhost -p 54329 -U paperclip -d paperclip
COMPANY_ID: ebe10308-efd7-453f-86ab-13e6fe84004f
```
## Procedimento
Executar os 5 passos em paralelo (silenciosamente), depois apresentar dashboard compacto.
### Passo 1: Estado do servico
```bash
systemctl --user status paperclip 2>&1 | head -5
```
### Passo 2: Agentes por status
Invocar tool MCP: `mcp__paperclip__diag_agents_by_status`
### Passo 3: Issues abertas
```sql
SELECT i.title, i.status, i.priority, a.name as assignee
FROM issues i LEFT JOIN agents a ON i.assignee_agent_id = a.id
WHERE i.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND i.status NOT IN ('done','cancelled')
ORDER BY
CASE i.priority WHEN 'critical' THEN 1 WHEN 'high' THEN 2 WHEN 'medium' THEN 3 ELSE 4 END,
i.status;
```
### Passo 4: Ultimos 10 heartbeats
```sql
SELECT a.name, hr.status, hr.started_at, hr.finished_at
FROM heartbeat_runs hr JOIN agents a ON hr.agent_id = a.id
WHERE a.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
ORDER BY hr.started_at DESC LIMIT 10;
```
### Passo 5: Alertas
Heartbeats falhados nas ultimas 24h:
```sql
SELECT a.name, LEFT(hr.error, 80) as erro, hr.started_at
FROM heartbeat_runs hr JOIN agents a ON hr.agent_id = a.id
WHERE a.company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND hr.status = 'failed'
AND hr.started_at > NOW() - INTERVAL '24 hours'
ORDER BY hr.started_at DESC;
```
Falsos blockers (INC-07):
Invocar tool MCP: `mcp__paperclip__diag_false_blockers`
Se resultado > 0 → listar como alerta: "N issues blocked com sub-tasks activas — provavelmente deveriam ser in_progress".
Token burn — agentes com consumo excessivo de tokens nas últimas 24h (INC-12):
Invocar tool MCP: `mcp__paperclip__diag_heartbeat_token_usage(hours=24)`
Se `agentes_risco > 0` → alertar: "TOKEN BURN: N agentes com runs >500K cache tokens — usar /clip-health check 19 para detalhes".
Routines presas (INC-08) — a ligação issue→routine está em `routine_runs.linked_issue_id`:
Invocar tool MCP: `mcp__paperclip__diag_stuck_routines(hours=4)`
Se `routines_presas > 0` → alertar: "ROUTINE BLOQUEADA: N issues de routine paradas >4h — usar /clip-health check 20".
Budget (agentes com >0 configurado):
```sql
SELECT name, budget_monthly_cents, spent_monthly_cents,
CASE WHEN budget_monthly_cents > 0
THEN ROUND(spent_monthly_cents::numeric / budget_monthly_cents * 100, 1)
ELSE 0 END as pct
FROM agents
WHERE company_id = 'ebe10308-efd7-453f-86ab-13e6fe84004f'
AND budget_monthly_cents > 0
ORDER BY pct DESC;
```
### Passo 6: Saude API (endpoint dashboard)
Verificar se os endpoints criticos respondem:
```bash
HEALTH=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3100/api/health)
DASH=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3100/api/companies/ebe10308-efd7-453f-86ab-13e6fe84004f/dashboard)
BADGES=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3100/api/companies/ebe10308-efd7-453f-86ab-13e6fe84004f/sidebar-badges)
echo "health=$HEALTH dashboard=$DASH badges=$BADGES"
```
- health=200 = OK (sem auth)
- dashboard/badges=401 = OK (auth funciona, endpoint existe)
- dashboard/badges=404 ou 500 = CRITICO (endpoint em falha, provavelmente refs orfas na BD)
Verificar instancias duplicadas:
```bash
ss -tlnp | grep -E "310[0-9]" | wc -l
```
- 1 = OK
- 2+ = AVISO (processos orfaos, recomendar limpeza)
### Passo 7: Company skills
Invocar tool MCP: `mcp__paperclip__diag_company_skills_summary`
## Formato de output
Apresentar como dashboard compacto:
```
## Clip Dashboard — [data/hora]
**Servico:** [running/stopped] ha [tempo]
**Agentes:** [N] total — [n] running, [n] idle, [n] paused
**API:** health=[code] dashboard=[code] badges=[code] | Instancias: [N]
**Skills:** [N] instaladas ([n] locais, [n] skills.sh, [n] github)
### Issues abertas
| Titulo | Status | Prioridade | Assignee |
...
### Heartbeats recentes
| Agente | Status | Inicio | Fim |
...
### Alertas
- [CRITICO] descricao
- [TOKEN BURN] N agentes >500K tokens — /clip-health check 19
- [ROUTINE BLOQUEADA] N issues paradas >4h — /clip-health check 20
```
## Referencias
- Manual: Hub `06-Operacoes/Documentacao/Manuais/Paperclip/`
- API: `04-Stack/02.06-Clip/skills.md`
- Spec: `04-Stack/02.06-Clip/docs/superpowers/specs/2026-03-28-clip-grande-visao-design.md`
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+132
View File
@@ -0,0 +1,132 @@
---
name: daily-digest
description: Sub-rotina chamada por /today para snapshot CRM (timer activo, tickets, facturas vencidas, leads, propostas, agenda). Pode ser invocada isoladamente quando só precisas dos números CRM sem o checkup completo. Usar quando "resumo", "digest", "estado do dia", "métricas dia". Para dashboard diário completo usar /today.
context: fork
layer: wiki
---
# /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. 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
### 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®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+125
View File
@@ -0,0 +1,125 @@
---
name: deep-research
description: >
Pesquisa profunda em 3 layers: Hub Obsidian (Layer 1) + NotebookLM análise (Layer 2) +
Web externo (Layer 3). Para questões complexas que requerem síntese de múltiplas fontes.
Usar quando: análise competitiva profunda, pesquisa mercado, due diligence, relatório estratégico.
layer: wiki
---
# /deep-research — Pesquisa Profunda com RAG Trinity
Pesquisa em 3 camadas com síntese final. Mais profundo que `/research`, mais estruturado que `/hub-search`.
---
## Quando Usar
| Situação | Skill Correcta |
|---------|----------------|
| "Onde está X no Hub?" | `/hub-search` |
| "Analisa este documento" | `/research` |
| "Pesquisa profunda + síntese de múltiplas fontes" | `/deep-research` ← este |
| "Análise competitiva completa" | `/deep-research` + `/research competitive` |
---
## Protocolo (3 Layers)
### Layer 1 — Hub Obsidian (conhecimento interno)
```bash
# 1a. Busca full-text no Hub
obsidian search query="<TERMO>" format=json limit=10
# 1b. Se Obsidian não responde (offline), fallback via Grep
grep -r "<TERMO>" /media/ealmeida/Dados/Hub/ --include="*.md" -l | head -20
```
**Critério de suficiência Layer 1:** Encontrou 3+ documentos relevantes com contexto concreto.
- SE suficiente para questão simples → responder + registar fonte
- SE questão requer análise profunda → continuar para Layer 2
### Layer 2 — NotebookLM (análise profunda)
Seleccionar notebook relevante com base no domínio:
| Domínio | Notebook ID |
|---------|-------------|
| Estratégia e Empreendedorismo | 79d43410-0e29-4be1-881d-84db6bdc239a |
| Stack Tecnológico | [consultar mcp__notebooklm__ lista] |
| Marketing e Vendas | [consultar mcp__notebooklm__ lista] |
```javascript
// Consultar notebook relevante
mcp__notebooklm__notebook_query({
notebook_id: "<ID>",
query: "<QUESTÃO ESPECÍFICA — mais precisa que a geral>"
})
```
**Critério de suficiência Layer 2:** NotebookLM retornou análise com citações específicas.
- SE suficiente → sintetizar com Layer 1 + responder
- SE requer dados externos → continuar para Layer 3
### Layer 3 — Web (conhecimento externo)
```javascript
// Web search para dados actuais
mcp__web-search__search({
query: "<QUESTÃO> site:scholar.google.com OR filetype:pdf",
num_results: 10
})
```
---
## Síntese Final
Após recolher de 2+ layers, sintetizar:
```markdown
## Síntese — [Tópico]
**Fontes consultadas:** Layer 1 (Hub), Layer 2 (NotebookLM [Notebook X]), Layer 3 (Web)
### O que sabemos (interno)
[Resumo Layer 1 — conhecimento já documentado]
### Análise profunda
[Resumo Layer 2 — análise NotebookLM com citações]
### Contexto externo
[Resumo Layer 3 — se consultado]
### Síntese e Recomendação
[Cruzamento das layers — resposta directa à questão]
### Próximos Passos
- [ ] Acção 1 derivada da pesquisa
- [ ] Acção 2
```
---
## Self-Improving Loop
Após cada execução, registar preferências para melhorar futuras pesquisas:
```bash
# Guardar aprendizagem em Hub
echo "$(date '+%Y-%m-%d') — deep-research — [TÓPICO] — [O QUE FUNCIONOU/NÃO FUNCIONOU]" \
>> /media/ealmeida/Dados/Hub/00-Inbox/research-preferences.md
```
---
## Healing Log
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
---
*Skill /deep-research v1.1.0 | 13-04-2026 | LightRAG removido — Layer 3 passa a Web apenas*
+158
View File
@@ -0,0 +1,158 @@
---
name: delegate
description: Delegação inteligente de tarefas para sub-agentes especializados. Analisa requisitos e encaminha para o agente adequado com contexto. Usar quando "delegate", "delegar", "subagent", "ajuda especializada", ou análises multi-domínio complexas.
layer: wiki
---
# /delegate - Delegação com Testes e KB Integrados
Delega tarefas de desenvolvimento para outros chats com workflow completo: timer, **auto-consulta Dify KB**, implementação, **testes automáticos**, e report unificado.
## Novidade v3.0: Auto-Consulta Dify KB
Antes de delegar, a skill consulta automaticamente a knowledge base para enriquecer o contexto do agente delegado.
```
/delegate #1429 /path "Implementar feature"
│
▼
┌─────────────────────────────────────────────────────────┐
│ PRÉ-DELEGAÇÃO (automático) │
├─────────────────────────────────────────────────────────┤
│ 1. Detectar tipo de trabalho (WP, PHP, MCP, etc.) │
│ 2. Carregar agent-knowledge-config.json │
│ 3. Verificar consultation_protocol do agente │
│ 4. Consultar Dify KB com query_template + {task} │
│ 5. Verificar cache (evitar consultas repetidas) │
│ 6. Enriquecer template com conhecimento relevante │
└─────────────────────────────────────────────────────────┘
│
▼
DELEGAÇÃO ENRIQUECIDA
```
## Workflow v2.0
```
/delegate #1429 /path "Implementar feature"
│
▼
┌─────────────────────────────────────────────────────────┐
│ CHAT DELEGADO (executa tudo automaticamente) │
├─────────────────────────────────────────────────────────┤
│ 1. start_timer (AikTop) │
│ 2. IMPLEMENTAR │
│ - Desenvolver funcionalidade │
│ - Actualizar CHANGELOG.md │
│ - Commits por etapa │
│ 3. TESTAR ←── NOVO: integrado no fluxo │
│ - Executar testes funcionais │
│ - Verificar edge cases │
│ - Testar regressões │
│ - Se falhar → corrigir → testar novamente │
│ 4. FINALIZAR │
│ - Commit final + push │
│ - Status → "Em Testes" (3) │
│ - Comentário com report unificado │
│ - stop_timer │
└─────────────────────────────────────────────────────────┘
│
▼
@Emanuel recebe notificação
```
---
## Protocolo de Auto-Consulta Dify KB
### 1. Mapeamento Agente → Datasets
Ficheiro: `~/.claude/agents/agent-knowledge-config.json`
| Tipo de Trabalho | Agente | Datasets Prioritários |
|------------------|--------|----------------------|
| WordPress | `wordpress-plugin-developer` | Wordpress, Elementor, Crocoblock |
| PHP/APIs | `php-fullstack-engineer` | APIs, MCP, Backend |
| MCP | `mcp-protocol-developer` | MCP Servers, Claude Code |
| Marketing | `marketing-planning-expert` | Marketing Digital, SEO |
| CRM | `crm-admin-specialist` | Perfex CRM |
### 2. Fluxo de Consulta
```javascript
// 1. Detectar agente baseado no path/contexto
const agent = detectAgent(path, task); // e.g., "wordpress-plugin-developer"
// 2. Carregar configuração
const config = require('~/.claude/agents/agent-knowledge-config.json');
const protocol = config.agents[agent]?.consultation_protocol;
// 3. Se tem protocolo de consulta
if (protocol?.auto_consult) {
// 4. Construir query
const query = protocol.query_template.replace('{task}', task);
// 5. Verificar cache primeiro
const cacheKey = generateHash(query, protocol.priority_datasets);
const cached = checkCache(cacheKey);
if (cached) {
// Cache hit - usar resultado
return cached.result;
}
// 6. Consultar Dify KB (paralelo)
const results = await Promise.all(
protocol.priority_datasets.map(id =>
mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments({
dataset_id: id,
query: query,
top_k: protocol.top_k || 3
})
)
);
// 7. Gravar em cache
saveToCache(cacheKey, results);
// 8. Retornar conhecimento agregado
return aggregateResults(results);
}
```
### 3. Enriquecimento do Template
O conhecimento recuperado é adicionado ao template de delegação:
```markdown
### Contexto da Knowledge Base (Auto-Consultado)
**Query:** {query_used}
**Datasets consultados:** {dataset_names}
**Cache:** HIT/MISS
#### Conhecimento Relevante:
{kb_results_formatted}
---
```
### 4. Métricas Automáticas
Cada delegação com consulta KB grava:
```sql
INSERT INTO tblskill_agent_metrics (
type, name, duration_ms, status, staff_id,
kb_consulted, kb_cache_hit, tool_calls
) VALUES (
'skill', '/delegate', {ms}, 'completed', 25,
1, {0_ou_1}, {n}
);
```
---
## Uso
```bash
/delegate <task_i
+6
View File
@@ -0,0 +1,6 @@
{
"task_id": null,
"project_id": null,
"customer_id": null,
"gitea_repo": null
}
+103
View File
@@ -0,0 +1,103 @@
---
name: doc-coauthoring
description: Workflow estruturado para co-autoria de documentos. Usar quando o utilizador quer escrever propostas comerciais, specs de projecto, relatórios cliente, SOPs, decisões técnicas ou conteúdo estruturado. Guia 3 fases - recolha de contexto, refinamento iterativo e teste de leitura. Trigger quando "escrever doc", "redigir proposta", "criar spec", "documentar", "relatório", "SOP".
layer: wiki
---
# /doc-coauthoring - Co-Autoria de Documentos
Workflow estruturado para criação colaborativa de documentos profissionais. Guia o utilizador por três fases: recolha de contexto, refinamento e teste de leitura.
## Arquitectura
```
Pedido → Fase 1 (Contexto) → Fase 2 (Refinamento) → Fase 3 (Teste Leitura) → Documento Final
↓ ↓ ↓
/knowledge Templates Hub Sub-agente leitor
/crm (dados cliente) Iteração secção a secção Detecta pontos cegos
```
---
## Quando Activar
**Condições de trigger:**
- Utilizador menciona escrita de documentação: "escrever doc", "redigir proposta", "criar spec", "documentar"
- Utilizador menciona tipos específicos: "proposta comercial", "spec de projecto", "relatório cliente", "SOP", "decisão técnica", "RFC"
- Utilizador inicia uma tarefa de escrita substancial
**Tipos de documento suportados:**
| Tipo | Template Hub | Notas |
|------|-------------|-------|
| Proposta comercial | `Hub/90-Templates/Comercial/` | Integrar dados cliente via /crm |
| Spec de projecto | `Hub/90-Templates/TPL-Projecto/` | Incluir arquitectura, milestones |
| Relatório cliente | `Hub/90-Templates/` | Dados do Desk CRM |
| SOP / Procedimento | `Hub/06-Operacoes/Procedimentos/` | Formato PROC-*.md |
| Decisão técnica | — | Registar contexto e alternativas |
| RFC / Design doc | — | Foco em trade-offs e impacto |
**Oferta inicial:**
Oferecer ao utilizador um workflow estruturado para co-autoria. Explicar as três fases:
1. **Recolha de contexto**: O utilizador fornece todo o contexto relevante enquanto são feitas perguntas de clarificação
2. **Refinamento e estrutura**: Construção iterativa de cada secção através de brainstorming e edição
3. **Teste de leitura**: Testar o documento com um Claude sem contexto para detectar pontos cegos antes de outros lerem
Explicar que esta abordagem garante que o documento funciona quando outros o lêem. Perguntar se preferem este workflow ou trabalhar em formato livre.
Se o utilizador recusar, trabalhar em formato livre. Se aceitar, avançar para a Fase 1.
---
## Fase 1: Recolha de Contexto
**Objectivo:** Fechar a lacuna entre o que o utilizador sabe e o que o Claude sabe, permitindo orientação inteligente depois.
### Perguntas Iniciais
Começar por pedir meta-contexto sobre o documento:
1. Que tipo de documento é? (ex.: proposta comercial, spec de projecto, SOP)
2. Quem é o público-alvo principal?
3. Qual o impacto desejado quando alguém lê isto?
4. Existe um template ou formato específico a seguir?
5. Há algum cliente ou projecto associado? (para consultar /crm)
6. Outras restrições ou contexto relevante?
Informar que podem responder de forma breve ou despejar informação como preferirem.
**Se o utilizador mencionar um template ou tipo de documento:**
- Verificar templates disponíveis em `Hub/90-Templates/`
- Se mencionarem um template específico, usar filesystem para o ler
- Se mencionarem um documento partilhado (Google Drive, etc.), usar a integração adequada
**Se o utilizador mencionar um cliente ou projecto:**
- Usar /crm para obter dados do cliente (contactos, historial, projectos activos)
- Consultar `Hub/07-Clientes/` para contexto adicional
- Verificar propostas anteriores em `Hub/03-Propostas/` ou no Desk CRM
**Se o utilizador mencionar edição de documento existente:**
- Usar a integração adequada para ler o estado actual
- Verificar imagens sem alt-text
- Se existirem imagens sem alt-text, explicar que quando outros usarem o Claude para entender o documento, o Claude não consegue vê-las. Perguntar se querem alt-text gerado.
### Despejo de Informação
Após as perguntas iniciais, encorajar o utilizador a despejar todo o contexto disponível. Pedir informação como:
- Background do projecto/problema
- Discussões de equipa ou documentos relacionados
- Porquê alternativas não estão a ser usadas
- Contexto organizacional (dinâmicas de equipa, incidentes passados)
- Pressões de prazo ou restrições
- Arquitectura técnica ou dependências
- Preocupações de stakeholders
- Dados do CRM relevantes (historial do cliente, propostas anteriores)
Aconselhar a não se preocuparem com organização — apenas tirar tudo cá para fora. Oferecer múltiplas formas de fornecer contexto:
- Despejo de informação em fluxo de consciência
- Apontar para canais ou threads de equipa
- Partilhar links para documentos
**Pesquisa de contexto automática:**
Usar /knowledge para pesquisar contexto relevante nas fontes de conhecimento (NotebookLM, Supabase, docs locais). Informa
+111
View File
@@ -0,0 +1,111 @@
---
name: dual-review
description: Revisão dual-model de conteúdo publicável — artigos WordPress, propostas comerciais, relatórios de cliente. Um agente gera com contexto completo, outro revisa sem contexto partilhado. Usar antes de publicar ou enviar a cliente.
context: fork
layer: wiki
---
# /dual-review — Revisão Dual-Model
> "Um revisor sem contexto detecta o que o autor não vê."
> Fonte: Eixo 4, Plano Stack Q2 2026.
---
## Quando usar
**OBRIGATÓRIO para:**
- Artigos WordPress antes de publicar
- Propostas comerciais antes de enviar
- Relatórios de cliente antes de entregar
- Qualquer conteúdo com dados factuais (métricas, preços, datas)
**Não usar para:**
- Comentários internos no CRM
- Notas de trabalho
- Código (usar `superpowers:requesting-code-review`)
---
## Workflow (4 passos)
### Passo 1 — Gerar conteúdo (agente principal)
Gerar o conteúdo com contexto completo. Marcar dados não confirmados como `[VERIFICAR: X]`.
### Passo 2 — Preparar para revisão
Extrair apenas o output final + definir critérios. **Não incluir o contexto de geração.**
```
CONTEÚDO PARA REVISÃO:
[colar apenas o output final]
CRITÉRIOS:
1. Factos verificados (sem "[VERIFICAR: X]" por resolver)
2. URLs funcionais e correctas
3. Datas e valores em EUR correctos
4. PT-PT (não brasileiro): tu/você, descarregar/baixar, ficheiro/arquivo
5. Acentos correctos: á, à, â, ã, é, ê, í, ó, ô, õ, ú, ç
6. Coerência interna (sem contradições)
7. Adequação ao público-alvo
JUDGMENT FRAMEWORK:
[incluir exemplos relevantes de ~/.claude/design/judgment-frameworks/]
```
### Passo 3 — Revisão por segundo agente
Usar `Agent tool` com `model: "sonnet"` passando APENAS o conteúdo + critérios.
Instrução ao segundo agente:
```
És um revisor de qualidade de conteúdo. Verifica o texto contra os critérios fornecidos.
NÃO tens contexto sobre como foi gerado — avalia apenas o output final como leitor externo.
Lista cada problema com localização exacta, ou responde "APROVADO" se não há problemas.
```
### Passo 4 — Corrigir e repetir
Se o revisor retornar problemas:
1. Corrigir cada problema no conteúdo
2. Re-submeter (Passos 2-3)
3. Repetir até "APROVADO" ou máximo 3 iterações
Se após 3 iterações ainda há problemas: escalar ao utilizador com lista de pendentes.
---
## Judgment Frameworks disponíveis
- `~/.claude/design/judgment-frameworks/global.md` — anti-alucinação geral
- `~/.claude/design/judgment-frameworks/wordpress.md` — conteúdo e código WP
- `~/.claude/design/judgment-frameworks/crm.md` — operações CRM
Incluir o framework relevante nos critérios do Passo 2.
---
## Exemplo de uso
```
# Artigo WordPress sobre X gerado. Antes de publicar:
/dual-review
Conteúdo: [artigo completo]
Tipo: artigo-wordpress
Público: PMEs portuguesas
Judgment: ~/.claude/design/judgment-frameworks/wordpress.md
```
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"2026-04-06","issue":"Placeholder vazio sem validacao previa","fix":"Validacao completa: frontmatter OK (name/description/context), paths judgment-frameworks OK (global/wordpress/crm), workflow 4 passos coerente. Nenhuma correccao necessaria.","source":"auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+153
View File
@@ -0,0 +1,153 @@
---
name: hub-compile
description: Compilador do 00-Inbox do Hub Obsidian. Classifica ficheiros .md, gera resumos, sugere destino e backlinks, move com aprovação explícita do utilizador. Usar quando "hub-compile", "compilar inbox", "triagem inbox", "processar inbox", "classificar notas".
context: fork
layer: wiki
---
# /hub-compile v1.0 — Compilador do Hub Inbox
Processa automaticamente os ficheiros `.md` em `00-Inbox/` do Hub Obsidian: classifica, resume, sugere destino e backlinks, e move apenas com aprovação explícita.
---
## Filosofia
Padrão Karpathy (Raw → Compiler → Wiki): o LLM actua como compilador — lê ficheiros em bruto, extrai estrutura e significado, e propõe organização. O utilizador aprova antes de qualquer movimento.
**Princípio cardinal: NUNCA mover sem aprovação.**
---
## Protocolo de Execução
```
1. LER ficheiros do Inbox
2. CLASSIFICAR cada ficheiro
3. APRESENTAR tabela ao utilizador
4. AGUARDAR aprovação
5. MOVER os aprovados
6. ACTUALIZAR INDEX.md de origem e destino
```
---
## Passo 1 — Ler Inbox
```
- Listar TODOS os .md em /media/ealmeida/Dados/Hub/00-Inbox/
- EXCLUIR INDEX.md
- Para cada ficheiro: ler conteúdo completo
```
---
## Passo 2 — Classificar
Para cada ficheiro, determinar:
### Tipo
| Tipo | Indicadores |
|------|-------------|
| `worklog` | "Worklog", datas de sessão, tool calls, MCPs usados |
| `prompt` | "Prompt", instruções para Claude, specs de módulo |
| `nota-tecnica` | Configurações, comandos, troubleshooting, fixes |
| `planeamento` | "Plano", "migração", "roadmap", decisões activas |
| `facturacao` | Facturas, recibos, datas limite, valores |
| `migracao` | "Migração", "setup", hardware novo, configurações pendentes |
| `stress-test` | Resultados de testes, benchmarks, métricas |
| `outro` | Não se encaixa nas categorias acima |
### Destino Sugerido
| Tipo | Destino |
|------|---------|
| `worklog` | `99-Arquivo/Worklogs/YYYY/MM/` |
| `prompt` | `99-Arquivo/Documentacao-Pontuais/` |
| `nota-tecnica` com valor permanente | `06-Operacoes/Knowledge-Base/MDs/` |
| `nota-tecnica` pontual/resolvida | `99-Arquivo/Documentacao-Pontuais/` |
| `planeamento` activo | **MANTER** (fica no Inbox) |
| `facturacao` | `99-Arquivo/Documentacao-Pontuais/` |
| `migracao` activa | **MANTER** (fica no Inbox) |
| `stress-test` | `99-Arquivo/Documentacao-Pontuais/` |
| `outro` | Consultar utilizador |
### Acção
| Acção | Significado |
|-------|-------------|
| `mover` | Pronto para mover para o destino sugerido |
| `arquivar` | Mover para `99-Arquivo/` |
| `manter` | Deixar no Inbox — activo ou precisa mais trabalho |
| `eliminar` | Duplicado, vazio, ou sem valor — confirmar antes |
### Gerar por ficheiro
- **Resumo:** 2-3 linhas descrevendo o conteúdo essencial
- **Conceitos-chave:** 3-5 termos ou tópicos principais
- **Backlinks sugeridos:** docs existentes no Hub que devem referenciar este ficheiro ou ser referenciados por ele (usar conhecimento do vault — QR-*, PROC-*, etc.)
---
## Passo 3 — Apresentar Tabela
Mostrar ao utilizador antes de qualquer acção:
```markdown
## Hub Compile — Inbox Analysis
**N ficheiros encontrados** | Data: YYYY-MM-DD HH:MM
| # | Ficheiro | Tipo | Acção | Destino | Resumo |
|---|----------|------|-------|---------|--------|
| 1 | `nome.md` | worklog | mover | 99-Arquivo/Worklogs/2026/03/ | Sessão de 31 Mar: implementação X, Y, Z. Duração ~2h. |
| 2 | `nome.md` | planeamento | manter | — (Inbox) | Migração Alurin em curso. Pendentes: configurar Syncthing. |
| 3 | `nome.md` | prompt | mover | 99-Arquivo/Documentacao-Pontuais/ | Prompt para módulo Moloni-Perfex sync. Concluído. |
### Backlinks Sugeridos
| Ficheiro | Backlink para |
|----------|--------------|
| `stress-tests-alurin.md` | `QR-Servidores.md`, `infra.md` (memory) |
| `worklog-2026-03-31.md` | Discussão Logs #31 Desk CRM |
---
**Aprovação necessária.**
Para aprovar todos os movimentos sugeridos: escrever `aprovar tudo`
Para aprovar individualmente: escrever `aprovar 1,3,5` (números da tabela)
Para ajustar uma acção: escrever `1=arquivar` ou `2=eliminar`
Para cancelar: escrever `cancelar`
```
---
## Passo 4 — Aguardar Aprovação
**PARAR aqui. Não executar nada antes da resposta do utilizador.**
Interpretar respostas:
- `aprovar tudo` → processar todos os `mover` e `arquivar` (nunca os `manter`)
- `aprovar 1,3` → processar apenas linhas 1 e 3
- `1=arquivar` → alterar acção da linha 1 para arquivar
- `cancelar` → terminar sem mover nada
---
## Passo 5 — Mover Ficheiros Aprovados
Para cada ficheiro aprovado com acção `mover` ou `arquivar`:
```
1. Verificar se directório de destino existe
- SE não existe: criar com mcp__filesystem__create_directory
2. Mover ficheiro: mcp__filesystem__move_file
3. Confirmar que ficheiro chegou ao destino
4. Registar movimento para actualização de INDEX.md
```
**Formato do path de destino:**
- Worklogs: `/media/ealmeida/Dados/Hub/99-Arquivo/Worklogs/YYYY/MM/nome.md`
- Documentação pontual: `/media/ealmeida/Dados/Hub/99-Arquivo/Documentaca
+138
View File
@@ -0,0 +1,138 @@
---
name: hub-search
description: >
Pesquisa no vault Hub Obsidian com relevance scoring e backlinks.
Layer 1 da arquitectura de pesquisa (CLI → NotebookLM).
Usar quando: (1) pesquisar conteúdo no Hub por termo ou conceito,
(2) encontrar notas relacionadas via backlinks, (3) localizar PROCs/QR/docs
antes de executar tarefas, (4) verificar se existe documentação antes de criar.
layer: wiki
---
# /hub-search — Pesquisa no Hub (Layer 1 RAG)
Pesquisa rápida no vault Hub via Obsidian CLI. Requer Obsidian aberto.
Fallback automático para Grep se Obsidian não estiver a correr.
---
## Uso
```
/hub-search "termo"
/hub-search "LightRAG configuração" --backlinks
/hub-search "PROC-MCP" --files
```
---
## Workflow
### Passo 1 — Tentar via Obsidian CLI
```bash
# Pesquisa básica
obsidian search query="TERMO" format=json
# Com backlinks (recomendado para conceitos)
obsidian search query="TERMO" format=json
obsidian backlinks file="NOTA"
# Limitar resultados
obsidian search query="TERMO" limit=10 format=json
```
**Indicador de sucesso:** saída JSON com `results` array.
**Indicador de falha:** mensagem `unable to find Obsidian` → ir para fallback.
### Passo 2 — Fallback: Grep no Hub
Se CLI falhar (Obsidian fechado):
```
Grep "TERMO" /media/ealmeida/Dados/Hub/ --type md
```
Adicionar contexto ao utilizador: "Obsidian não está a correr — usando busca directa nos ficheiros."
### Passo 3 — Apresentar resultados
**Formato de output:**
```markdown
## Resultados: "[termo]"
**Fonte:** Obsidian CLI v1.12.7 | **Backlinks:** Sim/Não
### Encontrado em N notas
| Nota | Path | Relevância |
|------|------|-----------|
| [título] | `path/relativo.md` | Alta/Média/Baixa |
### Notas com backlinks para este termo
- `nota-a.md` → referencia `nota-b.md`
### Relacionados sugeridos
- [links relevantes encontrados nos resultados]
```
---
## Regras
1. **Sempre tentar CLI primeiro** — é mais preciso (scoring semântico)
2. **--include-backlinks por defeito** quando o termo é um conceito (não um comando)
3. **Fallback silencioso** — não perguntar, só mencionar que usou Grep
4. **Max 10 resultados** — se mais, mostrar top 10 por relevância
5. **Paths relativos** na apresentação (ex: `04-Stack/02.03-IA/` não path absoluto)
---
## Integração com outras skills
```
/hub-search "termo" → Layer 1: Obsidian CLI (este skill)
/knowledge "termo" → Layer 2: NotebookLM (65 notebooks)
```
**Quando escalar para Layer 2:**
- Resultado CLI score < 50% ou 0 resultados → sugerir `/knowledge`
- Conteúdo conceptual/externo → sugerir `/knowledge` directamente
---
## Referência CLI
```bash
# Sintaxe correcta: parâmetros com = (não flags com --)
obsidian search query="TERMO" format=json
obsidian search query="TERMO" limit=10 format=json
obsidian backlinks file="NOTA"
obsidian tags sort=count counts
obsidian tasks daily todo
obsidian version
obsidian help # lista todos os comandos disponíveis
```
**Nota:** A skill oficial kepano (`obsidian-cli`) tem referência completa de todos os comandos.
**Requer:** Obsidian aberto + CLI activado em Settings → General → Advanced
**Wrapper:** `~/.local/bin/obsidian` (define XDG_RUNTIME_DIR Flatpak)
**Docs:** `04-Stack/02.03-IA/Obsidian-CLI.md`
---
*Skill v1.0.0 | 06-04-2026 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+196
View File
@@ -0,0 +1,196 @@
---
name: imap-triage
description: Triagem automática de emails IMAP em 14 contas. Elimina spam, arquiva promocionais, identifica facturas, sinaliza prioritários. Deduplicação via Supabase. Usar quando "imap", "triagem email", "limpar emails", "email triage", "processar emails".
disable-model-invocation: true
layer: wiki
---
# /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
-
@@ -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
+216
View File
@@ -0,0 +1,216 @@
---
name: index-update
description: Actualiza INDEX.md de procedimentos após criar/modificar/arquivar PROC. Usar quando "actualizar index", "update INDEX.md", depois de criar procedimento, mover PROC, arquivar procedimento. Mantém estatísticas, navegação e data actualizadas.
disable-model-invocation: true
layer: wiki
---
# /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
+8
View File
@@ -0,0 +1,8 @@
# skills
## Documentação
- [README](README.md)
- [AGENTS](AGENTS.md)
- [STATUS](STATUS.md)
- [MEMORY](MEMORY.md)
+92
View File
@@ -0,0 +1,92 @@
---
name: knowledge
description: Router de conhecimento unificado. Classifica pergunta por tipo e encaminha para fonte certa (Hub granular/NLM/Context7/CC memory/Mem0/Desk CRM/Git). v3.1.0
layer: wiki
---
# /knowledge — Router Unificado v3.1.0
> **Reescrita 13-04-2026:** v2.2.0 usava modelo Familia A/B com NLM restrito a "externo".
> v3.0.0 classifica por tipo de pergunta (8 rotas), adiciona Hub granular
> (QR/KB/APIs/Manuais/PROCs/Troubleshooting), reclassifica NLM como referencia
> tecnica primaria, e torna Mem0 complementar (nao alicerce).
> Racional: `plans/atomic-fluttering-flame.md`
## Principio
**Classificar pergunta → fonte certa.** Nao e fallback linear, nao e "Familia A depois B". E routing directo por tipo.
---
## Router principal (8 tipos)
### 1. Facto rapido (ID, path, comando, credencial)
**Sinais:** "qual e o ID de", "path para", "comando para", "porta do"
**Fontes (sequencial — parar ao primeiro hit):**
1. `Grep` em `/media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/Quick-Reference/QR-*.md`
2. `Grep` em `~/.claude/projects/*/memory/*.md` (cross-projecto)
**QR routing por keyword:**
| Keywords | Ficheiro |
|----------|----------|
| servidor, ip, porta, ssh | QR-Servidores.md |
| cwp, virtualhost, conta cwp | QR-CWP.md |
| site cwp, dominio cwp | QR-Sites-CWP.md |
| easypanel, servico, container | QR-EasyPanel.md |
| desk, tabela, campo bd, relacao | QR-Desk-BD.md |
| staff id, project id, category id | QR-IDs-Frequentes.md |
| moloni, serie, imposto, metodo | QR-Moloni.md |
| path, directorio, pasta | QR-Paths-Locais.md |
| backup, rota backup, destino | QR-Backups.md |
| sync, syncthing, rsync | QR-Sync-Ficheiros.md |
| script, claudedev | QR-Scripts.md |
| credencial, password, api key | QR-Credenciais.md |
| rank math, seo wp-cli | QR-RankMath-WP-CLI.md |
| capa, cover, podcast imagem | QR-Cover-Generator.md |
| alurin, desktop, laptop | QR-Alurin-Desktop.md |
### 2. Como funciona X / Como fazer Y (referencia tecnica)
**Sinais:** "como funciona", "como configurar", "como fazer", "melhores praticas", "tutorial", "deep dive"
**Fontes (paralelo — consolidar):**
1. **Hub Knowledge-Base** — `Grep` em `/media/ealmeida/Dados/Hub/06-Operacoes/Knowledge-Base/*.md` (preferir ficheiro local se existir match directo)
2. **NotebookLM** — max 2 notebooks por query (routing por tema abaixo)
3. **Hub Manuais** — `Grep` em `/media/ealmeida/Dados/Hub/06-Operacoes/Documentacao/Manuais/**/*.md`
4. **Context7** — `resolve-library-id` → `query-docs` (para frameworks/bibliotecas com docs oficiais)
5. **CC memory cross-projecto** — `Grep` em `~/.claude/projects/*/memory/*.md`
6. **Mem0** — `mcp__mem_search_memories(query)` [graceful se indisponivel]
**Prioridade por tipo de tema:**
- Framework/biblioteca com docs oficiais (Next.js, React, Laravel...) → **KB local primeiro** + **Context7** + NLM
- Stack interna (CWP, Perfex, n8n...) → **NLM primeiro** (fonte mais densa para estes) + KB
- Conceito generico (design patterns, boas praticas...) → **NLM primeiro**
**NLM routing por tema (top 15):**
| Tema | Notebook | ID |
|------|----------|----|
| Claude Code, skills, hooks, plugins | Claude Code | `2876d1fe-5cea-4d98-8140-b0e1a81c6bc4` |
| CWP, servidor, hosting, virtualhost | CWP | `0ded7bd6-69b3-4c76-b327-452396bf7ea7` |
| WordPress, WP-CLI, temas, config | WordPress Config CLI | `fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d` |
| Elementor, widgets, templates | WordPress e Elementor | `5be0d1a6-00f2-4cd9-b835-978cb7721601` |
| Seguranca WP, malware, hardening | Ciberseguranca WordPress | `5f60adfd-2435-4725-8c12-9c11c5f51d75` |
| Perfex/Desk CRM, modulos, hooks | Perfex CRM | `df4688bb-c2c0-4aba-98c1-38c3b50a353c` |
| n8n, automacoes, workflows | n8n | `f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1` |
| Marketing digital, SEO, ads, funil | Marketing Digital PT | `4c595973-ba10-420a-a3bf-e4389e424ad3` |
| AI agents, orquestracao, MCPs | AI Agents e Orquestracao | `bc480d68-5835-415e-82bc-4583f36b8c29` |
| Proxmox, VMs, clustering, HA | Proxmox | `276ccdde-6b95-42a3-ad96-4e64d64c8d52` |
| Design, branding, visual, automacao | Design Profissional | `b568b13b-0eed-48c9-b513-5c5b7ec0b102` |
| UI/UX, WCAG, acessibilidade | UI/UX Design | `081ca512-8279-4850-b2b9-dff090267482` |
| Gestao operacoes, KPIs, agencia | Gestao Operacoes | `f9dc59c2-718b-4b12-bd06-095d4bfa3e34` |
| Remotion, video programatico | Remotion | `f2b75baa-1ab1-48d3-8f7c-a6a9e516934c` |
| Obsidian, vault, Claude workflow | Obsidian + Claude | `ebee9fe1-78fd-4f85-8938-f19f3ea32131` |
| Programacao, padroes, api design | Programacao | `24947ffa-0019-448a-a340-2f4a275d2eb1` |
| Copywriting, persuasao, texto | Copywriting e Persuasao | `7b8fec17-d34f-4e3f-a8c6-8231e51f6323` |
| Video, producao, youtube | Producao de Video e Youtube | `058a896e-6c9a-4e51-ae7d-9adb2738bc5f` |
| WooCommerce, loja, produtos | Documentacao WooCommerce | `bd06acff-4b9d-44aa-b3f7-60434bbd6b49` |
> Inventario completo 65 notebooks: `~/.claude/projects/-media-eal
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,239 @@
# Workflow de Sincronização - /kb-sync
Documentação do processo de sincronização automática do índice de conhecimento.
---
## Visão Geral
```
┌─────────────────┐
│ /kb-sync │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Listar Dify │ ← mcp__dify-kb__dify_kb_list_datasets
│ Datasets │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Ler sources │ ← config/sources.json
│ .json │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Comparar e │
│ Detectar │
│ Alterações │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Actualizar │
│ sources.json │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Reportar │
│ Alterações │
└─────────────────┘
```
---
## Processo Detalhado
### 1. Obter Datasets Actuais
```
MCP: mcp__dify-kb__dify_kb_list_datasets
Params:
- limit: 100
- page: 1 (iterar se has_more)
```
**Resposta esperada:**
```json
{
"success": true,
"datasets": [
{
"id": "uuid",
"name": "Nome do Dataset",
"description": "...",
"document_count": 123,
"word_count": 456789,
"created_at": "2025-01-25T..."
}
],
"pagination": {
"total": 73,
"has_more": false
}
}
```
### 2. Ler Índice Actual
Ler `config/sources.json` e extrair:
- `dify_datasets` - mapeamento actual
- `last_sync` - última sincronização
- `total_datasets` - contagem anterior
### 3. Comparar e Detectar
#### Datasets Novos
```python
novos = []
for dataset in dify_response:
slug = slugify(dataset.name)
if slug not in sources.dify_datasets:
novos.append({
"slug": slug,
"id": dataset.id,
"name": dataset.name,
"docs": dataset.document_count
})
```
#### Datasets Removidos
```python
removidos = []
dify_ids = [d.id for d in dify_response]
for slug, info in sources.dify_datasets.items():
if info.id not in dify_ids:
removidos.append(slug)
```
#### Datasets Alterados
```python
alterados = []
for dataset in dify_response:
slug = slugify(dataset.name)
if slug in sources.dify_datasets:
old = sources.dify_datasets[slug]
if old.docs != dataset.document_count:
alterados.append({
"slug": slug,
"old_docs": old.docs,
"new_docs": dataset.document_count
})
```
### 4. Actualizar sources.json
```python
# Actualizar metadados
sources.version = increment_minor(sources.version)
sources.updated = now()
sources.last_sync = now()
sources.total_datasets = len(dify_response)
# Remover datasets eliminados
for slug in removidos:
del sources.dify_datasets[slug]
# Actualizar existentes e adicionar novos
for dataset in dify_response:
slug = slugify(dataset.name)
sources.dify_datasets[slug] = {
"id": dataset.id,
"name": dataset.name,
"docs": dataset.document_count
}
# Escrever ficheiro
write_json("config/sources.json", sources)
```
### 5. Gerar Relatório
```markdown
## Sync Concluído - 2026-01-25 15:30
| Métrica | Valor |
|---------|-------|
| **Total Datasets** | 73 |
| **Anterior** | 74 |
| **Novos** | 0 |
| **Removidos** | 1 |
| **Actualizados** | 5 |
### Datasets Removidos
- Demo Teste Agosto 2025
### Datasets Actualizados
| Dataset | Docs Antes | Docs Depois |
|---------|------------|-------------|
| marketing-digital | 81 | 85 |
| crocoblock-kb | 403 | 410 |
### Datasets Novos
(nenhum)
```
---
## Slugify
Função para converter nome do dataset em slug consistente:
```javascript
function slugify(name) {
return name
.toLowerCase()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '') // Remove acentos
.replace(/[^a-z0-9]+/g, '-') // Substitui não-alfanum
.replace(/^-+|-+$/g, ''); // Remove hífens início/fim
}
```
**Exemplos:**
- "Marketing Digital" → "marketing-digital"
- "SEO (Search Engine Optimization)" → "seo-search-engine-optimization"
- "TI (Tecnologia da Informação)" → "ti-tecnologia-da-informacao"
---
## Frequência Recomendada
| Cenário | Frequência |
|---------|------------|
| Uso normal | Semanal |
| Após criar datasets | Imediato |
| Após remover datasets | Imediato |
| Debugging | Conforme necessário |
---
## Erros Comuns
| Erro | Causa | Solução |
|------|-------|---------|
| MCP timeout | Muitos datasets | Paginar requests |
| JSON inválido | Corrupção | Restaurar de backup |
| ID não encontrado | Dataset removido | Executar /kb-sync |
| Duplicados | Nomes similares | Verificar slugs manualmente |
---
## Backup Automático
Antes de cada sync, criar backup:
```
config/sources.json.bak
```
Restaurar se necessário:
```bash
cp config/sources.json.bak config/sources.json
```
---
*Workflow v1.0 | 2026-01-25*
+266
View File
@@ -0,0 +1,266 @@
# Workflow de Pesquisa - /knowledge
Documentação detalhada do processo de pesquisa e routing.
---
## Fluxo Principal
```
┌─────────────┐
│ Pergunta │
└──────┬──────┘
│
▼
┌─────────────┐
│ Analisar │ ← Extrair keywords, identificar tema
│ Termo │
└──────┬──────┘
│
▼
┌─────────────┐
│ Routing │ ← Consultar config/sources.json
│ Tema │
└──────┬──────┘
│
▼
┌─────────────┐
│ Pesquisar │ ← Fonte primária
│ Fonte 1 │
└──────┬──────┘
│
▼
┌─────────────┐ ┌─────────────┐
│ Resultados │ NO │ Pesquisar │
│ Suficientes?├────►│ Fonte 2 │
└──────┬──────┘ └──────┬──────┘
│ YES │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Agregar │◄────┤ Fonte 3 │
│ Resultados │ │ (se neces.) │
└──────┬──────┘ └─────────────┘
│
▼
┌─────────────┐
│ Detectar │ ← Se resultados insuficientes
│ Lacunas │
└──────┬──────┘
│
▼
┌─────────────┐
│ Resposta │
│ Estruturada │
└─────────────┘
```
---
## Fase 1: Análise do Termo
### Extracção de Keywords
```
Input: "como configurar crocoblock filters no elementor"
Keywords: [crocoblock, filters, elementor, configurar]
Tema detectado: wordpress
```
### Regras de Detecção
1. Corresponder keywords com `routing[tema].keywords`
2. Se múltiplos temas, usar o mais específico
3. Se nenhum tema, usar pesquisa genérica (todas as fontes)
---
## Fase 2: Routing
### Consulta ao Mapeamento
```javascript
// Pseudocódigo
tema = detectarTema(keywords)
sources = routing[tema].sources
// Ordenar por prioridade
fonte1 = sources[0] // Primária
fonte2 = sources[1] // Secundária
fonte3 = sources[2] // Terciária
```
### Prioridades por Tipo
| Tipo de Pergunta | Fonte Primária | Porque |
|------------------|----------------|--------|
| Técnico/Como fazer | Context7 | Docs actualizados |
| Negócio/Clientes | Supabase | Contexto recente |
| Procedimento | WikiJS | Documentação interna |
| Conhecimento geral | Dify KB | RAG temático |
| Histórico/Decisão | Supabase | Memória longo prazo |
---
## Fase 3: Pesquisa
### Dify KB
```
MCP: mcp__dify-kb__dify_kb_retrieve_segments
Params:
- dataset_id: [obtido de sources.json]
- query: [termo original]
- top_k: 5
```
### WikiJS
```
MCP: mcp__wikijs__search_pages
Params:
- query: [termo]
Filtrar por paths relevantes do routing
```
### Supabase
```
MCP: mcp__mem_search_memories
Params:
- query: [termo]
Filtrar por tags do routing
```
### Context7
```
MCP: mcp__context7__resolve-library-id
MCP: mcp__context7__get-library-docs
Params:
- libraryName: [biblioteca detectada]
- topic: [termo específico]
```
### Filesystem
```
Grep em paths do routing:
- /media/ealmeida/Dados/Hub/ (Obsidian vault)
- /media/ealmeida/Dados/GDrive/Projectos/
```
---
## Fase 4: Agregação
### Critérios de Suficiência
- **Suficiente**: ≥1 resultado relevante com conteúdo útil
- **Parcial**: Resultados tangenciais, precisa complemento
- **Insuficiente**: 0 resultados ou irrelevantes
### Formatação de Resposta
```markdown
## Resultado: [termo pesquisado]
### Fonte: [Nome da Fonte]
[Conteúdo encontrado, formatado e resumido]
### Fonte: [Segunda Fonte] (se aplicável)
[Conteúdo complementar]
### Relacionado
- [[Link interno 1]]
- [[Link interno 2]]
### Acções Sugeridas (se aplicável)
- [ ] Criar documentação sobre X
- [ ] Actualizar Y com esta informação
```
---
## Fase 5: Detecção de Lacunas
### Triggers
1. **Zero resultados** em todas as fontes
2. **Tema recorrente** (3+ pesquisas similares sem resultado)
3. **Resultado desactualizado** (>6 meses)
4. **Decisão importante** sem registo
### Acção Automática
```markdown
> [!warning] Lacuna Detectada
> O tema "[X]" não tem documentação adequada.
>
> **Sugestão:**
> - Criar dataset Dify: `[nome-sugerido]`
> - Ou página WikiJS: `[path-sugerido]`
> - Ou guardar em Supabase (se decisão/contexto)
```
### Registo de Lacunas
Adicionar a `config/sources.json` → `gaps`:
```json
{
"gaps": {
"dify_missing": ["novo-tema"],
"wikijs_missing": ["novo-path"],
"detected_at": "2026-01-25"
}
}
```
---
## Comandos Especiais
### /kb-save [tema]
```
1. Receber conteúdo a guardar
2. Analisar tipo:
- Decisão → Supabase (tag: decisao)
- Procedimento → WikiJS
- Conhecimento → Dify KB
3. Formatar com metadata
4. Guardar na fonte adequada
5. Confirmar com referência
```
### /kb-gaps
```
1. Ler config/sources.json → gaps
2. Listar lacunas conhecidas
3. Sugerir prioridades baseado em:
- Frequência de pesquisa
- Impacto no trabalho
- Esforço de criação
```
### /kb-new [tema]
```
1. Criar dataset no Dify KB
2. Adicionar estrutura base
3. Actualizar sources.json com novo ID
4. Remover de gaps.dify_missing
```
---
## Métricas de Qualidade
### Pesquisa Bem Sucedida
- [ ] Resultado relevante encontrado
- [ ] Fonte adequada usada
- [ ] Resposta formatada correctamente
- [ ] Links internos incluídos
### Detecção de Lacunas
- [ ] Lacuna identificada quando apropriado
- [ ] Sugestão de acção clara
- [ ] Lacuna registada para futuro
---
## Troubleshooting
| Problema | Causa | Solução |
|----------|-------|---------|
| MCP timeout | Servidor lento | Retry com delay |
| Dataset não encontrado | ID inválido | Actualizar sources.json |
| Resultados irrelevantes | Keywords mal detectadas | Refinar routing |
| Muitas lacunas | Tema novo | Criar conteúdo base |
---
*Workflow v1.0 | 2026-01-25*
@@ -0,0 +1,308 @@
# /knowledge - Routing Guide v2.0.0
Mapeamento completo de categorias para notebooks NotebookLM.
Dify KB removido em 06-03-2026. NotebookLM e a fonte primaria.
---
## Regras de Routing
1. **Classificar tema** da query usando keywords
2. **Seleccionar 1-3 notebooks** por ordem de relevancia
3. **Query sequencial** ate score >70
4. **Enriquecer** com Mem0/Context7/Local se necessario
5. **Reportar lacunas** se score <50
---
## Codigo de Routing
### Analise de Query
```javascript
function classificarTema(query) {
const temas = {
wordpress: /wordpress|elementor|woocommerce|plugin|wp-cli|theme|widget|gutenberg/i,
wordpress_seguranca: /seguranca\s*wp|malware|hardening|wordfence|sucuri/i,
kivicare: /kivicare|ehr|clinica|medico|consulta/i,
marketing: /marketing|digital|campanha|ads|publicidade|growth|funil/i,
seo: /seo|keywords|ranking|google|search|organic|serp|indexacao/i,
copywriting: /copywriting|persuasao|texto|headline|cta|conversao/i,
social_media: /social\s*media|branding|instagram|facebook|linkedin|tiktok/i,
video: /video|producao|youtube|monetizacao|canal/i,
podcast: /podcast|audio|episodio/i,
ecommerce: /ecommerce|loja\s*online|marketplace|shopify/i,
programacao: /codigo|api|php|react|node|python|javascript|typescript|programacao/i,
claude: /claude|claude\s*code|mcp|anthropic/i,
mcp_dev: /mcp\s*server|mcp\s*dev|protocolo\s*mcp/i,
ai_tools: /ai\s*editor|cursor|copilot|github\s*copilot/i,
opensource: /open\s*source|foss|self-hosted/i,
n8n: /n8n|automacao|workflow\s*automation/i,
perfex: /perfex|perfexcrm|desk\s*crm/i,
cwp: /cwp|centos|servidor\s*web|cpanel|hosting/i,
cloud: /cloud|infraestrutura|devops|docker|kubernetes/i,
proxmox: /proxmox|virtualizacao|vm|container\s*lxc/i,
design: /design|branding\s*visual|ai\s*design|canva/i,
uiux: /ui|ux|interface|usabilidade|wireframe|prototipo/i,
tipografia: /tipografia|cores|paleta|web\s*design|fonte/i,
gestao: /gestao\s*projectos|agile|scrum|kanban|sprint/i,
operacoes: /operacoes|processos|kpi|workflow|sop/i,
estrategia: /estrategia|empreendedorismo|negocio|plano/i,
transformacao: /transformacao\s*digital|ia\s*negocio|inovacao/i,
obsidian: /obsidian|vault|notas|pkm/i,
decisao: /decisao|porque|contexto|historico/i,
reonic: /reonic|solar\s*crm/i,
carstuff: /carstuff|automovel/i,
solar: /solar|fotovoltaico|engenharia\s*solar/i,
zaia: /zaia|chatbot|whatsapp\s*bot/i,
pessoal: /jung|taoismo|adhd|phda|autismo|kintsugi|estoicismo|somatica/i
};
const matches = [];
for (const [tema, pattern] of Object.entries(temas)) {
if (pattern.test(query)) matches.push(tema);
}
return matches.length > 0 ? matches : ['geral'];
}
```
### Notebooks por Tema
```javascript
const notebookRouting = {
// --- WordPress e Web ---
wordpress: [
"fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d", // WordPress Config CLI (268 fontes)
"5be0d1a6-00f2-4cd9-b835-978cb7721601", // WordPress e Elementor (88)
"bd06acff-4b9d-44aa-b3f7-60434bbd6b49" // Documentacao WooCommerce (3)
],
wordpress_seguranca: [
"5f60adfd-2435-4725-8c12-9c11c5f51d75" // Ciberseguranca WordPress (95)
],
kivicare: [
"78621405-a5bc-433f-856f-296260a80bd9" // KiviCare EHR WP (145)
],
// --- Marketing e Conteudo ---
marketing: [
"4c595973-ba10-420a-a3bf-e4389e424ad3", // Marketing Digital PT (189)
"76647e0f-3ae2-4c00-a0a8-f457aebf5655" // Marketing Digital Avancado (78)
],
seo: [
"4c595973-ba10-420a-a3bf-e4389e424ad3" // Marketing Digital PT (189)
],
copywriting: [
"7b8fec17-d34f-4e3f-a8c6-8231e51f6323" // Copywriting e Persuasao (50)
],
social_media: [
"9053d0e8-dd39-460b-b5ea-e67af3e9a675" // Social Media e Branding (51)
],
video: [
"058a896e-6c9a-4e51-ae7d-9adb2738bc5f", // Producao de Video e Youtube (49)
"60a209a7-e205-4d57-a6f3-fef3de61e87a" // YouTube Monetizacao e Compliance (30)
],
podcast: [
"a5bef96b-a1af-4293-9979-5da46f8d2301" // Podcast Descomplicar (33)
],
ecommerce: [
"226e384e-d4bc-48f4-bb82-7927360436cc", // E-commerce Pratico (63)
"8a430cf2-ed99-413d-b4bf-a1400deaf49e" // E-Commerce Portugal (24)
],
// --- Desenvolvimento ---
programacao: [
"24947ffa-0019-448a-a340-2f4a275d2eb1" // Programacao (53)
],
claude: [
"2876d1fe-5cea-4d98-8140-b0e1a81c6bc4", // Claude Code (132)
"0be6f45b-8fd5-4a5e-8f80-e36a6f516ded" // Claude Code mini (2)
],
mcp_dev: [
"73102308-70ef-403e-9be9-eae0cfc62d55", // Desenvolvimento de MCPs (22)
"2876d1fe-5cea-4d98-8140-b0e1a81c6bc4" // Claude Code (132)
],
ai_tools: [
"57d9c6c9-48ba-4d83-8f71-cc890f348a53" // AI Code Editors (20)
],
opensource: [
"cabf9821-c1ff-44cb-9bfd-59bda3599792" // Open Source Software and Platforms (163)
],
n8n: [
"f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1" // n8n (66)
],
perfex: [
"df4688bb-c2c0-4aba-98c1-38c3b50a353c", // Perfex CRM (191)
"80606de8-2783-4d36-b08d-5825e6f9a8da" // Dev PerfexCRM (44)
],
// --- Infraestrutura ---
cwp: [
"0ded7bd6-69b3-4c76-b327-452396bf7ea7" // CWP (214)
],
cloud: [
"f9a79b5a-649f-4443-afaf-7ff562b6c2e7" // Cloud e Infraestrutura TI (146)
],
proxmox: [
"276ccdde-6b95-42a3-ad96-4e64d64c8d52" // Proxmox (120)
],
// --- Design ---
design: [
"b568b13b-0eed-48c9-b513-5c5b7ec0b102" // Design Profissional AItomatizado (244)
],
uiux: [
"081ca512-8279-4850-b2b9-dff090267482" // UI/UX Design (28)
],
tipografia: [
"f97a0d2b-a5b3-4640-b941-3cbb184b1b81" // Tipografia e Cor para Web (41)
],
// --- Gestao e Estrategia ---
gestao: [
"0c9c079c-a426-486c-99eb-1564d42d37ad", // Gestao de Projectos e Agile (44)
"f9dc59c2-718b-4b12-bd06-095d4bfa3e34" // Gestao de Operacoes (41)
],
operacoes: [
"f9dc59c2-718b-4b12-bd06-095d4bfa3e34" // Gestao de Operacoes (41)
],
estrategia: [
"79d43410-0e29-4be1-881d-84db6bdc239a", // Estrategia e Empreendedorismo (107)
"ab876d0d-12a8-43d9-bc62-59c1c8e9d0f8" // Transformacao Digital e IA (73)
],
transformacao: [
"ab876d0d-12a8-43d9-bc62-59c1c8e9d0f8", // Transformacao Digital e IA (73)
"929ef67b-c131-4f01-abd0-8b078491a6b7", // AI Automation Stack (5)
"f4be0e3f-4d9e-4c5c-a743-9f14427f2e43" // AI Agents Intensive Course (5)
],
// --- Sistema e Produtividade ---
obsidian: [
"ebee9fe1-78fd-4f85-8938-f19f3ea32131" // Obsidian + Claude (117)
],
decisao: [], // Mem0 primeiro, depois Obsidian notebook
// --- Produtos e Clientes ---
reonic: [
"b7e61158-0717-4582-8ef2-0301be3c73ae" // Reonic (131)
],
carstuff: [
"90f0bc77-b5e4-4ddd-a07c-013a1a30b247" // CarStuff (25)
],
solar: [
"03d54e00-aefa-45dc-ba01-f3864a7c3112", // Solar FV Engenharia (5)
"0082bcaf-1e17-4b84-87cc-2256b1719b55" // OpenSolar (4)
],
zaia: [
"087d76f1-e929-49da-9e3c-4edc22b42b3f" // Zaia (28)
],
// --- Pessoal ---
pessoal: [
"d5c67d7f-7fe8-4542-9e5c-22403f3193ee", // Jung (41)
"8c6c8257-bda2-433c-bf55-f40d98bfde8f", // Emanuel Almeida (36)
"aea85baf-9ddf-4d79-bf07-81391a275b09", // Taoism (28)
"a4ff3fd7-fb7c-49a1-94ff-0433193e2338", // ADHD (17)
"66eff78e-318f-4a8b-a3c7-039a4124b1ad", // Autismo (14)
"6dcd08e8-79d9-4ae0-b6bf-b2ee96717bf2", // Essencia de Heroi (13)
"82a95c2f-be56-4c4a-a96f-96f6677a6991", // Auto Kintsugi (10)
"3410893b-16a3-4178-9091-42650a41086f", // Psicologia Somatica (10)
"4b986ad4-49da-4604-a423-4fcdf20dd9da" // Marcus Aurelius / Stoic (3)
],
// --- Fallback generico ---
geral: [
"ebee9fe1-78fd-4f85-8938-f19f3ea32131", // Obsidian + Claude (sistema)
"79d43410-0e29-4be1-881d-84db6bdc239a" // Estrategia (amplo)
]
};
```
### Pesquisa Sequencial
```javascript
async function pesquisar(query) {
const temas = classificarTema(query);
let resultados = [];
// 1. Recolher notebooks unicos (max 3)
const notebookIds = new Set();
for (const tema of temas) {
const ids = notebookRouting[tema] || notebookRouting.geral;
ids.forEach(id => notebookIds.add(id));
}
const notebooks = [...notebookIds].slice(0, 3);
// 2. Query NotebookLM sequencial
for (const id of notebooks) {
const resultado = await mcp__notebooklm__notebook_query({
notebook_id: id,
query: query
});
const score = avaliarRelevancia(resultado, query);
if (score > 70) {
return { resultado, fonte: `NotebookLM (${id})`, score };
}
if (score > 30) {
resultados.push({ resultado, id, score });
}
}
// 3. Enriquecer com outras fontes
const mem0 = await mcp__mem_search_memories({
query
});
if (mem0.length > 0) resultados.push({ resultado: mem0, fonte: 'Mem0' });
// 4. Context7 para temas dev
if (temas.some(t => ['programacao', 'claude', 'mcp_dev', 'wordpress'].includes(t))) {
// Tentar resolver biblioteca
const lib = await mcp__plugin_context7_context7__resolve_library_id({
libraryName: extractLibName(query)
});
if (lib) {
const docs = await mcp__plugin_context7_context7__query_docs({
context7CompatibleLibraryID: lib.id,
topic: query
});
resultados.push({ resultado: docs, fonte: 'Context7' });
}
}
// 5. Resultado
if (resultados.length === 0) {
// Lacuna detectada
await mcp__mem_save_memory({
text: `LACUNA: Query "${query}" sem informacao. Temas: ${temas.join(', ')}`
});
return { lacuna: true, query, temas };
}
return {
resultados: resultados.sort((a, b) => (b.score || 0) - (a.score || 0)),
fonte: 'multiplas'
};
}
```
---
## Fontes Complementares (Fallback)
| Fonte | MCP | Quando Usar |
|-------|-----|-------------|
| **Mem0** | mem0 | Decisoes, contexto, historico sessoes |
| **Context7** | context7 | Docs bibliotecas externas (npm, pip, etc.) |
| **Docs Locais** | filesystem (Grep/Glob) | Codigo em /Dev/, docs em /Hub/ |
---
## Estatisticas
- **58 notebooks** (49 profissional + 9 pessoal)
- **~3200 fontes** total
- **32 temas** mapeados
- **Limite:** 500 notebooks, 300 fontes/notebook (Plus)
Inventario completo: `~/.claude/projects/-media-ealmeida-Dados-Hub/memory/notebooklm-inventory.md`
+1
View File
@@ -0,0 +1 @@
## 2026-06-30 init | Estrutura padrão
+165
View File
@@ -0,0 +1,165 @@
---
name: mindmap
description: Gera ficheiros .km (mindmap) compatíveis com DesktopNaotu/Kityminder. Cria mindmaps a partir de tópicos, planos, brainstorms ou qualquer estrutura hierárquica. Usar quando "mindmap", "mapa mental", "naotu", "criar mindmap", "brainstorm visual".
disable-model-invocation: true
layer: wiki
---
# 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")
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+174
View File
@@ -0,0 +1,174 @@
---
name: monday-briefing
description: Briefing semanal automatizado com 4 componentes — tendências de mercado, métricas chave, acção da semana e contra-argumentos. Usar quando "monday", "briefing segunda", "resumo semanal", "briefing semana", "monday briefing".
context: fork
layer: wiki
---
# /monday-briefing v1.0
Briefing semanal com 4 perspectivas: tendências, métricas, acção e realidade.
---
## Protocolo
### Passo 1: Recolher data e período
```
mcp__mcp-time__current_time → data actual
Calcular:
- semana_actual: Segunda a Domingo desta semana
- semana_anterior: Segunda a Domingo da semana passada
- periodo_atual: "Semana W{N} ({DD Mmm} – {DD Mmm YYYY})"
```
### Passo 2: Recolher dados em paralelo
> Executar TUDO em paralelo. Registar erros sem bloquear — continuar com dados disponíveis.
```
Em paralelo:
[A] DESK CRM — Métricas da semana
mcp__desk-crm-v3__get_tasks({ date_from: inicio_semana_anterior, date_to: fim_semana_anterior, status: 5 })
→ tarefas_concluidas_semana_ant
mcp__desk-crm-v3__get_tasks({ date_from: inicio_semana, date_to: fim_semana, status: [1,2,3] })
→ tarefas_abertas_semana_atual
mcp__desk-crm-v3__get_timesheets({ date_from: inicio_semana_anterior, date_to: fim_semana_anterior })
→ horas_semana_ant
mcp__desk-crm-v3__get_tickets({ status: [1,2,3] })
→ tickets_abertos
[B] MOLONI — Facturação da semana
mcp__moloni-mcp__list_documents({
document_type: "invoice",
date_from: inicio_semana_anterior,
date_to: fim_semana_anterior
})
→ facturas_semana_ant (valor total + contagem)
mcp__moloni-mcp__list_documents({
document_type: "invoice",
date_from: inicio_semana,
date_to: fim_semana
})
→ facturas_semana_atual (se já existirem)
[C] DESK CRM — Leads e pipeline
mcp__desk-crm-v3__get_leads({ status: [7,14], limit: 20 })
→ leads_novos
mcp__desk-crm-v3__get_estimates({ status: [3,4], limit: 20 })
→ propostas_pipeline
[D] TENDÊNCIAS — WebSearch
WebSearch: "marketing digital tendencias semana {data_atual}"
WebSearch: "SEO updates {mes} {ano}"
WebSearch: "WordPress news {mes} {ano}"
→ 3 tendências relevantes ao negócio Descomplicar
[E] GOOGLE WORKSPACE — Agenda da semana
mcp__google-workspace__calendar_get_events({
user_google_email: "emanuelalmeidaa@gmail.com",
time_min: "{inicio_semana}T00:00:00Z",
time_max: "{fim_semana}T23:59:59Z"
})
→ eventos_semana
```
### Passo 3: Calcular métricas comparativas
```
Calcular variações:
delta_horas = horas_semana_ant vs semana anterior a essa (% variação)
delta_facturas = valor_semana_ant vs média das últimas 4 semanas
taxa_conclusao = tarefas_concluidas / (tarefas_concluidas + abertas) * 100
SE dados incompletos: usar "N/D" e indicar fonte em falta
```
### Passo 4: Gerar briefing em 4 secções
---
## Output
```markdown
# Monday Briefing — {periodo_atual}
*Gerado em {data_hora_atual} | Descomplicar®*
---
## 1. Trend Researcher — O Que Mudou Esta Semana
> Tendências relevantes para o negócio (marketing digital, SEO, WordPress, automação)
**[Tendência 1]**
_Fonte: [URL]_
Impacto potencial: [curto resumo do que muda para a Descomplicar]
**[Tendência 2]**
_Fonte: [URL]_
Impacto potencial: [curto resumo]
**[Tendência 3]**
_Fonte: [URL]_
Impacto potencial: [curto resumo]
---
## 2. Analytics Reporter — Métricas vs Semana Anterior
### Produtividade
| Métrica | Semana Anterior | Esta Semana | Δ |
|---------|----------------|-------------|---|
| Horas registadas | X h | Y h | ±Z% |
| Tarefas concluídas | X | Y | ±Z |
| Tickets abertos | X | Y | ±Z |
### Pipeline Comercial
| Métrica | Valor | Estado |
|---------|-------|--------|
| Facturação semana ant | {valor} EUR | {vs média} |
| Leads novos | X | — |
| Propostas pendentes | X | Total: Y EUR |
| Propostas aceites | X | Total: Y EUR |
### Agenda da Semana
| Data | Evento |
|------|--------|
| {DD Mmm} | {evento} |
| … | … |
> Fontes: Desk CRM + Moloni + Google Calendar
> Dados Google Analytics / GSC: configurar via /n8n-webhook ou GSC MCP
---
## 3. Growth Hacker — 1 Acção Para Esta Semana
**Acção:** [Nome curto e concreto]
**Porquê agora:** [Justificação baseada nos dados das secções 1 e 2]
**3 Passos para executar:**
1. **[Passo 1]** — [Descrição detalhada, quem faz, quando]
2. **[Passo 2]** — [Descrição detalhada, ferramentas necessárias]
3. **[Passo 3]** — [Métrica de validação: como saber que funcionou]
**Tempo estimado:** X horas
**Impacto esperado:** [Métrica específica]
---
## 4. Reality Checker — Contra-Argumentos
> Questionar os pressupostos das secções anteriores antes de agir.
**Sobre as tendências (secção 1):**
- [Contra-argumento]: Pode ser que [tendência X] não se aplique porque [razão específica ao contexto Descomplicar]
- Pergunta a fazer: Temos capacidade para responder a esta tendência esta semana?
**Sobre as métricas (secção 2):**
- [Contra-argumento]: A variação de [±Z%] pode ser [sazonalidade / evento pontual / dado incompleto]
- Atenção: [Métrica Y] está a [subir/descer] —
+100
View File
@@ -0,0 +1,100 @@
---
name: notebooklm
description: Gestão programática completa do NotebookLM via MCP. Gerir notebooks, adicionar fontes, gerar artefactos (áudio, vídeo, mindmap, relatório, flashcards, quiz, infografia, apresentação), consultar via RAG, investigação autónoma. Usar quando "notebooklm", "notebook", "audio overview", "podcast", "adicionar fonte", "gerar artefacto".
disable-model-invocation: true
layer: wiki
---
# /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 |
|------|
+117
View File
@@ -0,0 +1,117 @@
---
name: office-hours
description: >
Persona YC que reframe problemas antes de escrever código. Desafia pressupostos,
faz as perguntas difíceis que um investidor faria. Usar ANTES de qualquer implementação
significativa. Baseado no gstack /office-hours. Eixo 2B.
layer: wiki
---
# /office-hours — Consulta YC antes de Codar
Persona: sócio de uma YC top-tier que passou 20 anos a ver startups falharem por resolver o problema errado.
Objetivo: garantir que o que vais construir é o que deve ser construído.
---
## Quando Usar (OBRIGATÓRIO)
- Antes de implementar uma feature nova
- Antes de refactoring significativo
- Quando a solução parece óbvia demais
- Quando o problema está mal definido
- Quando o utilizador pediu X mas pode precisar de Y
**Anti-pattern:** Saltar para o código sem office-hours = construir a coisa certa de forma errada, ou a coisa errada certo.
---
## Protocolo
### Passo 1 — Escutar sem julgar
"O que estás a tentar resolver? Conta-me como se eu não soubesse nada do teu negócio."
Deixar o utilizador descrever o problema completamente. Não interromper. Tomar notas mentais dos seguintes sinais:
- Soluções disfarçadas de problemas ("preciso de um botão que...")
- Pressupostos não verificados ("os utilizadores querem...")
- Scope excessivo ("e depois também...")
- Urgência artificial ("precisa de estar pronto até...")
### Passo 2 — As 5 Perguntas
```
1. "Por que é que este problema existe agora? O que mudou?"
→ Detecta se é problema real ou hipotético
2. "Quem perde o emprego se este problema não for resolvido?"
→ Identifica o owner real e urgência verdadeira
3. "O que acontece se não fizermos nada?"
→ Valida se é crítico ou nice-to-have
4. "Já tentaste resolver isto de forma mais simples? O que aconteceu?"
→ Evita over-engineering, descobre tentativas anteriores
5. "Se tivesses de demonstrar que isto funciona em 24h, o que farias?"
→ Força a pensar em MVP mínimo viável
```
### Passo 3 — Reframe (se necessário)
SE o problema apresentado é uma solução disfarçada:
```
"Percebo que queres [solução X]. Mas o problema que describes é [problema Y].
Podemos resolver [Y] de forma mais simples: [alternativa Z].
Queres explorar Z antes de construir X?"
```
### Passo 4 — Aprovação ou Alternativa
```
APROVADO se:
- Problema claramente definido
- Solução proposta é a mais simples
- ROI claro (tempo poupado, receita gerada, risco eliminado)
- Utilizador entende o trade-off
ALTERNATIVA se:
- Há solução mais simples não considerada
- O problema não está suficientemente validado
- Scope excessivo para o valor gerado
```
### Passo 5 — Output
```markdown
## Office Hours — [Data]
**Problema original:** [o que o utilizador apresentou]
**Problema real:** [reframe se necessário]
**Decisão:** AVANÇAR | REFRAMED | ADIAR
**Justificação:** [1-2 frases]
**Próximo passo:** [acção concreta]
```
---
## Exemplos de Reframe
| Pedido original | Reframe YC |
|----------------|-----------|
| "Preciso de um dashboard de métricas" | "O que decides diferente com o dashboard? Se nada, não precisas dele." |
| "Quero migrar para microserviços" | "Qual é o problema do monolito actual? Quantos utilizadores tens?" |
| "Refactoring completo do código" | "O que não consegues fazer agora por causa do código? Isso é o problema." |
| "Automatizar este processo" | "Quanto tempo demora? Quantas vezes por semana? Vale a automação?" |
---
## Healing Log
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
---
*Skill /office-hours v1.0 | 06-04-2026 | Eixo 2B — gstack pattern*
+114
View File
@@ -0,0 +1,114 @@
---
name: onboarding
category: gestao
description: "Checklist e automacao de onboarding de novo colaborador. Criacao de contas, documentacao, equipamento. Usar quando 'onboarding', 'novo colaborador', 'contratar', 'integrar pessoa', 'RH novo'."
version: "1.0.0"
created: 2026-04-07
tools: [mcp__desk-crm-v3__create_task, mcp__desk-crm-v3__add_task_checklist_item, mcp__google-workspace__gmail_send_email]
layer: wiki
---
# Skill: /onboarding
Checklist e automacao de onboarding de novo colaborador. Baseado em PROC-D4-RH-001-Onboarding-Colaborador.md.
---
## Referencia
Procedimento completo em: `Hub/06-Operacoes/Procedimentos/D4-RH/PROC-D4-RH-001-Onboarding-Colaborador.md`
Esta skill executa os passos — o PROC define as regras.
**Agent associado:** `hr-specialist` (criado 08-04-2026) — executor autónomo para onboarding completo, gestão de contratos e férias.
---
## Processo
### 1. Recolher dados do novo colaborador
Perguntar ao utilizador:
- **Nome completo**
- **Email pessoal**
- **Funcao/cargo**
- **Data de inicio**
- **Tipo:** colaborador / freelancer / estagiario
- **Departamento:** D1-D7
### 2. Criar tarefa no Desk CRM
```
mcp__desk-crm-v3__create_task({
name: "Onboarding — [Nome]",
project_id: 65,
startdate: [data inicio],
duedate: [data inicio + 5 dias uteis],
priority: 2,
description: "Onboarding de [Nome] como [Funcao] no departamento [Dept]"
})
```
### 3. Adicionar checklist de onboarding
Items obrigatorios (adicionar via `add_task_checklist_item`):
**Contas e acessos:**
- [ ] Email @descomplicar.pt criado
- [ ] Conta Desk CRM criada (staff)
- [ ] Acesso Gitea (se tecnico)
- [ ] Acesso Google Workspace
- [ ] Password manager configurado
**Documentacao:**
- [ ] Contrato assinado
- [ ] NIF e dados fiscais recolhidos
- [ ] Ficha de colaborador preenchida
- [ ] RGPD — consentimento assinado
**Equipamento:**
- [ ] PC/portatil atribuido
- [ ] Acessos VPN/SSH (se aplicavel)
- [ ] Ferramentas de trabalho instaladas
**Integracao:**
- [ ] Reuniao de boas-vindas agendada
- [ ] Apresentacao a equipa
- [ ] Acesso a documentacao interna (Hub)
- [ ] Mentor atribuido (primeiras 2 semanas)
### 4. Enviar email de boas-vindas (opcional)
Se o utilizador aprovar, enviar email via Google Workspace:
```
Assunto: Bem-vindo(a) a Descomplicar — [Nome]
Corpo: Template de boas-vindas com:
- Data de inicio
- Links uteis (Desk, email, Git)
- Contacto do mentor
- Primeiros passos
```
### 5. Resumo
Apresentar ao utilizador:
- Tarefa Desk criada (ID + link)
- Checklist com N items
- Proximos passos manuais (contrato, equipamento)
---
## Regras
- **Nunca criar contas automaticamente** — apenas checklist para lembrar
- **Contrato e dados fiscais sao responsabilidade do Emanuel** — skill so lembra
- **Email de boas-vindas requer aprovacao** antes de enviar
- **Tipo freelancer** tem checklist reduzida (sem equipamento, sem VPN)
---
## Healing Log
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
+239
View File
@@ -0,0 +1,239 @@
---
name: proc-creator
description: Cria procedimentos seguindo formato Hub Descomplicar. Gera código automático [DEPT]-[TEMA]-[NUM], cria ficheiro na pasta departamental correcta, actualiza INDEX.md. Usar quando "criar procedimento", "novo PROC", "documentar processo", "PROC-*".
disable-model-invocation: true
layer: wiki
---
# /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 d
+52
View File
@@ -0,0 +1,52 @@
---
name: reflect
description: Alias de /worklog. Auto-reflexão e registo de trabalho unificado. /reflect = /worklog (mesmo resultado). /reflect view = ver últimos registos. /reflect deep = análise profunda com histórico → Discussão #32. /reflect week = revisão semanal → Discussão #32. Usar quando "reflect", "reflexão", "análise", "melhoria", "insight".
layer: wiki
---
# /reflect - Alias de /worklog
**`/reflect` = `/worklog`** - Produzem o mesmo resultado.
Desde v4.0, worklog e reflect estao unificados. Toda a logica, formatos e workflows estao em `/worklog` (v4.2.0).
## Comandos
| Comando | Equivalente worklog | Descrição |
|---------|---------------------|-----------|
| `/reflect` | `/worklog` | Registo + reflexão da sessão → Discussão #31 |
| `/reflect view` | `/worklog view` | Ver últimos registos (discussão #31) |
| `/reflect deep` | `/reflect deep` | Análise profunda com histórico → Discussão #32 |
| `/reflect week` | `/reflect week` | Revisão semanal → Discussão #32 |
> **Nota:** `/reflect deep` e `/reflect week` são comandos partilhados — existem tanto no worklog como aqui. Não são exclusivos do reflect.
## Instrução
Ao receber `/reflect` (sem argumentos):
1. Executar exactamente o protocolo de `/worklog`
2. Ver skill `/worklog` (SKILL.md) para formato, workflow e storage
Ao receber `/reflect view`:
1. Executar o protocolo de `/worklog view` (ver secção em `/worklog` SKILL.md)
Ao receber `/reflect deep` ou `/reflect week`:
1. Ver secções específicas na skill `/worklog`
---
*Skill v4.0.1 | 2026-04-06 | Descomplicar(R)*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"2026-04-06","issue":"Comandos /reflect deep e /reflect week marcados como '(exclusivo)' na tabela mas existem no worklog SKILL.md — causava confusão sobre origem dos comandos","fix":"Remover '(exclusivo)', mapear correctamente para equivalente worklog e adicionar nota explicativa","source":"auto"}
{"date":"2026-04-06","issue":"Versão reflect desactualizada (v4.0.0) face a worklog (v4.2.0) — utilizador podia assumir reflect obsoleto","fix":"Actualizar referência de versão do worklog para v4.2.0 na descrição; reflect mantém v4.0.1 (alias sem lógica própria)","source":"auto"}
{"date":"2026-04-06","issue":"/worklog view não referenciado em reflect — utilizador com /reflect não sabia como ver registos anteriores","fix":"Adicionar /reflect view como alias de /worklog view na tabela de comandos e na secção de instrução","source":"auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+170
View File
@@ -0,0 +1,170 @@
---
name: report-templates
description: Templates de comunicacao com clientes — updates mensais, status de projecto, relatorios de incidente e revisoes mensais. Usar quando "relatorio cliente", "report cliente", "update cliente", "status projecto", "incidente", "revisao mensal", "comunicar cliente", "resumo projecto", "enviar report", "preparar relatorio".
layer: wiki
---
# /report-templates — Comunicacao com Clientes
Templates profissionais para comunicacao Descomplicar® com clientes. Gera documentos em HTML (Desk CRM) ou Markdown (Hub/email).
---
## Comandos
| Comando | Template | Uso |
|---------|----------|-----|
| `/report-templates update [cliente]` | client-update.md | Update mensal de progresso |
| `/report-templates status [projecto_id]` | project-status.md | Status detalhado de projecto |
| `/report-templates incidente [descricao]` | incident-report.md | Relatorio de incidente |
| `/report-templates mensal [cliente] [mes]` | monthly-review.md | Revisao mensal completa |
---
## Parametros
| Parametro | Descricao | Exemplo |
|-----------|-----------|---------|
| `--format html` | Output HTML para Desk CRM (default) | `--format html` |
| `--format md` | Output Markdown para Hub/email | `--format md` |
| `--lang pt` | Lingua do documento (default: pt) | `--lang pt` |
| `--desk` | Publicar como comentario no Desk CRM | `--desk` |
---
## Workflow de Execucao
```
1. IDENTIFICAR tipo de comunicacao:
- "update", "progresso", "mensal simples" -> client-update
- "status", "estado", "projecto" -> project-status
- "incidente", "problema", "falha", "downtime" -> incident-report
- "revisao mensal", "mensal completo", "revisao periodo" -> monthly-review
2. RECOLHER dados do Desk CRM:
a. mcp__desk-crm-v3__get_project({ project_id }) — se aplicavel
b. mcp__desk-crm-v3__get_tasks({ project_id }) — tarefas do periodo
c. mcp__desk-crm-v3__get_project_time_tracking({ project_id }) — horas
d. mcp__desk-crm-v3__get_invoices({ project_id }) — facturacao
e. mcp__desk-crm-v3__search_customers({ name }) — dados cliente
3. CARREGAR template de references/:
- client-update.md / project-status.md / incident-report.md / monthly-review.md
4. PREENCHER placeholders com dados reais
5. GERAR output no formato pedido (html ou md)
6. SE --desk: publicar via mcp__desk-crm-v3__add_task_comment
```
---
## Tom de Comunicacao Descomplicar
**Principios:**
- Profissional mas directo — sem jargao desnecessario
- Dados primeiro — factos antes de interpretacao
- Transparente em problemas — nunca esconder dificuldades
- Orientado para accao — cada ponto tem proximo passo claro
- Portugues europeu sempre — sem brasileirismos
**O que evitar:**
- Linguagem vaga ("estamos a trabalhar nisso")
- Promessas sem datas ("em breve")
- Excesso de adjectivos ("excelente progresso fantástico")
- Emojis em documentos formais
- Estimativas sem base nos dados
---
## Formatos de Output
### HTML (Desk CRM)
```html
<h4>Titulo da Seccao</h4>
<ul><li>Item</li></ul>
<table>
<tr><th>Coluna</th><th>Valor</th></tr>
<tr><td>Dado</td><td>Valor</td></tr>
</table>
<p><strong>Proximo passo:</strong> accao concreta com data</p>
<hr>
<p><em>Relatorio gerado em DD-MM-YYYY | Descomplicar®</em></p>
```
### Markdown (Hub / Email)
```markdown
## Titulo
| Coluna | Valor |
|--------|-------|
| Dado | Valor |
**Proximo passo:** accao concreta com data
---
*Relatorio gerado em DD-MM-YYYY | Descomplicar®*
```
---
## Templates Disponiveis
| Ficheiro | Template | Quando usar |
|----------|----------|-------------|
| `references/client-update.md` | Update mensal simples | Comunicacao periodica de progresso |
| `references/project-status.md` | Status de projecto | Revisao de milestone, reuniao de acompanhamento |
| `references/incident-report.md` | Relatorio de incidente | Qualquer problema que afectou o cliente |
| `references/monthly-review.md` | Revisao mensal completa | Fim de mes, revisao estrategica |
---
## Exemplos de Uso
### Update mensal simples
```
/report-templates update "SFV 360"
```
Recolhe dados do projecto SFV-360, preenche template client-update, gera HTML para Desk CRM.
### Status de projecto com markdown
```
/report-templates status 80 --format md
```
Gera relatorio de status do projecto #80 em Markdown para enviar por email.
### Relatorio de incidente
```
/report-templates incidente "Downtime servidor producao 2h"
```
Gera relatorio formal de incidente com timeline, impacto e plano de accao.
### Revisao mensal publicada no Desk
```
/report-templates mensal "CTF BigData" "Fevereiro 2026" --desk
```
Gera revisao mensal completa e publica como comentario na tarefa Desk do cliente.
---
## Integracao com Outras Skills
| Skill | Uso |
|-------|-----|
| `/report` | Dados agregados de periodo (horas, tarefas, facturas) |
| `/time` | Timesheets detalhados para incluir no relatorio |
| `/desk` | Contexto do projecto e cliente |
---
## Anti-Patterns
- **Nunca** gerar relatorio sem dados reais do Desk CRM
- **Nu
@@ -0,0 +1,173 @@
# Template: Update Mensal de Cliente
**Tipo:** Comunicacao periodica de progresso
**Frequencia:** Mensal (ou quinzenal em projectos activos)
**Tom:** Profissional, directo, orientado para dados
**Extensao:** 1 pagina (equivalente)
---
## Estrutura do Template
### HTML (Desk CRM)
```html
<h4>Update {{MES_ANO}} — {{NOME_PROJECTO}}</h4>
<p>Caro {{NOME_CLIENTE}},</p>
<p>Segue o update de progresso referente a {{MES_ANO}}.</p>
<h4>Trabalho Concluido</h4>
<ul>
<li>{{TAREFA_1}}</li>
<li>{{TAREFA_2}}</li>
<li>{{TAREFA_3}}</li>
</ul>
<h4>Metricas do Periodo</h4>
<table>
<tr>
<th>Metrica</th>
<th>Valor</th>
</tr>
<tr>
<td>Horas dedicadas</td>
<td>{{HORAS_TOTAL}}h</td>
</tr>
<tr>
<td>Tarefas concluidas</td>
<td>{{TAREFAS_CONCLUIDAS}}</td>
</tr>
<tr>
<td>Progresso geral</td>
<td>{{PROGRESSO_PERCENTAGEM}}%</td>
</tr>
</table>
<h4>Em Curso</h4>
<ul>
<li>{{ITEM_EM_CURSO_1}}</li>
<li>{{ITEM_EM_CURSO_2}}</li>
</ul>
<h4>Proximos Passos</h4>
<ul>
<li>{{PROXIMO_PASSO_1}} — previsto para {{DATA_1}}</li>
<li>{{PROXIMO_PASSO_2}} — previsto para {{DATA_2}}</li>
</ul>
<p>Qualquer questao, estamos disponiveis.</p>
<hr>
<p>
<strong>Descomplicar®</strong> |
<a href="mailto:info@descomplicar.pt">info@descomplicar.pt</a> |
911 510 005
</p>
<p><em>Update gerado em {{DATA_HOJE}} | Projecto #{{PROJECTO_ID}}</em></p>
```
### Markdown (Email / Hub)
```markdown
**Update {{MES_ANO}} — {{NOME_PROJECTO}}**
Caro {{NOME_CLIENTE}},
Segue o update de progresso referente a {{MES_ANO}}.
---
**Trabalho Concluido**
- {{TAREFA_1}}
- {{TAREFA_2}}
- {{TAREFA_3}}
**Metricas do Periodo**
| Metrica | Valor |
|---------|-------|
| Horas dedicadas | {{HORAS_TOTAL}}h |
| Tarefas concluidas | {{TAREFAS_CONCLUIDAS}} |
| Progresso geral | {{PROGRESSO_PERCENTAGEM}}% |
**Em Curso**
- {{ITEM_EM_CURSO_1}}
- {{ITEM_EM_CURSO_2}}
**Proximos Passos**
- {{PROXIMO_PASSO_1}} — previsto para {{DATA_1}}
- {{PROXIMO_PASSO_2}} — previsto para {{DATA_2}}
Qualquer questao, estamos disponiveis.
---
Descomplicar® | info@descomplicar.pt | 911 510 005
*Update gerado em {{DATA_HOJE}} | Projecto #{{PROJECTO_ID}}*
```
---
## Placeholders — Mapeamento Desk CRM
| Placeholder | Fonte Desk CRM | MCP Call |
|-------------|---------------|----------|
| `{{NOME_PROJECTO}}` | `project.name` | `get_project` |
| `{{NOME_CLIENTE}}` | `customer.firstname` | `search_customers` |
| `{{MES_ANO}}` | Calculado | `mcp-time` |
| `{{HORAS_TOTAL}}` | Timesheets do mes | `get_project_time_tracking` |
| `{{TAREFAS_CONCLUIDAS}}` | Tasks status=completed | `get_tasks` |
| `{{PROGRESSO_PERCENTAGEM}}` | `project.progress` | `get_project` |
| `{{TAREFA_1..N}` | Tasks recentes concluidas | `get_tasks` |
| `{{ITEM_EM_CURSO_1..N}` | Tasks status=in_progress | `get_tasks` |
| `{{PROXIMO_PASSO_1..N}` | Tasks status=not_started, por data | `get_tasks` |
| `{{DATA_1..N}` | `task.due_date` | `get_tasks` |
| `{{DATA_HOJE}}` | Hoje | `mcp-time` |
| `{{PROJECTO_ID}}` | `project.id` | `get_project` |
---
## Exemplo Preenchido
```
Update Fevereiro 2026 — Portal SFV-360
Caro Paulo Silva,
Segue o update de progresso referente a Fevereiro 2026.
Trabalho Concluido:
- Implementacao modulo de relatorios automaticos
- Integracao API energia solar (3 inversores)
- Correccao erro calculo producao acumulada
Metricas do Periodo:
- Horas dedicadas: 38h
- Tarefas concluidas: 8
- Progresso geral: 72%
Em Curso:
- Dashboard mobile (responsivo)
- Testes de carga base de dados
Proximos Passos:
- Entrega dashboard mobile — previsto para 15-03-2026
- Formacao utilizadores — previsto para 20-03-2026
```
---
## Notas de Uso
- Incluir apenas tarefas relevantes para o cliente (excluir internas/tecnicas sem impacto visivel)
- Se o progresso diminuiu ou estagnou, explicar o motivo de forma clara
- Proximos passos devem ter sempre datas concretas
- Maximo 5 items por seccao — sintese e preferida
- Se existem bloqueadores que dependem do cliente, destacar em negrito
---
*Template v1.0.0 | 2026-03-10 | Descomplicar®*
@@ -0,0 +1,235 @@
# Template: Relatorio de Incidente
**Tipo:** Comunicacao formal de incidente ao cliente
**Quando usar:** Qualquer situacao que afectou o servico, dados ou experiencia do cliente
**Tom:** Formal, transparente, orientado para resolucao e prevencao
**Extensao:** 1-2 paginas. Nao minimizar nem exagerar
**Principio cardinal:** Comunicar o incidente antes que o cliente pergunte. Transparencia activa.
---
## Classificacao de Severidade
| Nivel | Codigo | Criterio | Prazo comunicacao |
|-------|--------|----------|------------------|
| Critico | P1 | Servico completamente indisponivel ou perda de dados | 1 hora |
| Alto | P2 | Funcionalidade principal degradada | 4 horas |
| Medio | P3 | Funcionalidade secundaria afectada | 24 horas |
| Baixo | P4 | Problema menor sem impacto operacional | 72 horas |
---
## Estrutura do Template
### HTML (Desk CRM)
```html
<h4>Relatorio de Incidente — {{TITULO_INCIDENTE}}</h4>
<p>
<strong>Referencia:</strong> INC-{{ANO}}-{{NUMERO}} |
<strong>Severidade:</strong> <span style="color:{{COR_SEVERIDADE}}">{{NIVEL_SEVERIDADE}}</span> |
<strong>Estado:</strong> {{ESTADO_INCIDENTE}}
</p>
<h4>Resumo</h4>
<p>{{DESCRICAO_RESUMO}}</p>
<h4>Impacto</h4>
<table>
<tr>
<th>Dimensao</th>
<th>Detalhe</th>
</tr>
<tr>
<td>Inicio</td>
<td>{{DATA_INICIO}} {{HORA_INICIO}}</td>
</tr>
<tr>
<td>Fim / Resolucao</td>
<td>{{DATA_FIM}} {{HORA_FIM}} ({{DURACAO}} de impacto)</td>
</tr>
<tr>
<td>Servicos afectados</td>
<td>{{SERVICOS_AFECTADOS}}</td>
</tr>
<tr>
<td>Utilizadores afectados</td>
<td>{{UTILIZADORES_AFECTADOS}}</td>
</tr>
<tr>
<td>Dados afectados</td>
<td>{{DADOS_AFECTADOS}}</td>
</tr>
</table>
<h4>Cronologia</h4>
<table>
<tr>
<th>Hora</th>
<th>Evento</th>
</tr>
<tr>
<td>{{HORA_1}}</td>
<td>{{EVENTO_1}}</td>
</tr>
<tr>
<td>{{HORA_2}}</td>
<td>{{EVENTO_2}}</td>
</tr>
<tr>
<td>{{HORA_3}}</td>
<td>{{EVENTO_3}}</td>
</tr>
<tr>
<td>{{HORA_RESOLUCAO}}</td>
<td>Incidente resolvido — servico normalizado</td>
</tr>
</table>
<h4>Causa Raiz</h4>
<p>{{CAUSA_RAIZ}}</p>
<p><em>Nota: {{NOTA_CAUSA_RAIZ_SE_INVESTIGACAO_PENDENTE}}</em></p>
<h4>Accoes de Remediacao</h4>
<ul>
<li><strong>Imediata (concluida):</strong> {{ACCAO_IMEDIATA}}</li>
<li><strong>Curto prazo ({{DATA_CURTO_PRAZO}}):</strong> {{ACCAO_CURTO_PRAZO}}</li>
<li><strong>Preventiva ({{DATA_PREVENTIVA}}):</strong> {{ACCAO_PREVENTIVA}}</li>
</ul>
<h4>Compensacao</h4>
<p>{{COMPENSACAO_SE_APLICAVEL}}</p>
<p>Pedimos desculpa pelo inconveniente causado. Estamos comprometidos a prevenir recorrencia.</p>
<p>Para questoes adicionais: <a href="mailto:info@descomplicar.pt">info@descomplicar.pt</a> | 911 510 005</p>
<hr>
<p>
<strong>Descomplicar®</strong> |
<em>Relatorio emitido em {{DATA_EMISSAO}}</em>
</p>
```
### Markdown (Email / Hub)
```markdown
# Relatorio de Incidente — {{TITULO_INCIDENTE}}
**Referencia:** INC-{{ANO}}-{{NUMERO}} | **Severidade:** {{NIVEL_SEVERIDADE}} | **Estado:** {{ESTADO_INCIDENTE}}
---
## Resumo
{{DESCRICAO_RESUMO}}
## Impacto
| Dimensao | Detalhe |
|----------|---------|
| Inicio | {{DATA_INICIO}} {{HORA_INICIO}} |
| Fim / Resolucao | {{DATA_FIM}} {{HORA_FIM}} ({{DURACAO}}) |
| Servicos afectados | {{SERVICOS_AFECTADOS}} |
| Utilizadores afectados | {{UTILIZADORES_AFECTADOS}} |
| Dados afectados | {{DADOS_AFECTADOS}} |
## Cronologia
| Hora | Evento |
|------|--------|
| {{HORA_1}} | {{EVENTO_1}} |
| {{HORA_2}} | {{EVENTO_2}} |
| {{HORA_3}} | {{EVENTO_3}} |
| {{HORA_RESOLUCAO}} | Incidente resolvido — servico normalizado |
## Causa Raiz
{{CAUSA_RAIZ}}
## Accoes de Remediacao
- **Imediata (concluida):** {{ACCAO_IMEDIATA}}
- **Curto prazo ({{DATA_CURTO_PRAZO}}):** {{ACCAO_CURTO_PRAZO}}
- **Preventiva ({{DATA_PREVENTIVA}}):** {{ACCAO_PREVENTIVA}}
## Compensacao
{{COMPENSACAO_SE_APLICAVEL}}
---
Pedimos desculpa pelo inconveniente causado.
Para questoes: info@descomplicar.pt | 911 510 005
*Relatorio emitido em {{DATA_EMISSAO}} | Descomplicar®*
```
---
## Placeholders — Guia de Preenchimento
| Placeholder | Instrucoes de Preenchimento |
|-------------|---------------------------|
| `{{TITULO_INCIDENTE}}` | Descricao curta e factual: "Downtime servidor producao", "Falha autenticacao", "Perda dados formulario" |
| `{{NUMERO}}` | Sequencial do ano: 001, 002... Verificar incidentes anteriores |
| `{{NIVEL_SEVERIDADE}}` | P1 Critico / P2 Alto / P3 Medio / P4 Baixo |
| `{{ESTADO_INCIDENTE}}` | Resolvido / Em investigacao / Monitorizado |
| `{{DESCRICAO_RESUMO}}` | 2-3 frases: o que aconteceu, quando, impacto imediato |
| `{{DURACAO}}` | Ex: "2h 15min", "45min", "4h" |
| `{{CAUSA_RAIZ}}` | Tecnico mas acessivel. Se ainda em investigacao: "A investigacao esta em curso. Actualizacao prevista para DD-MM-YYYY." |
| `{{COMPENSACAO}}` | Se N/A: omitir seccao. Se aplicavel: credito, extensao, horas extra |
### Cores por Severidade (HTML)
| Nivel | Cor |
|-------|-----|
| P1 Critico | `#e53e3e` |
| P2 Alto | `#d69e2e` |
| P3 Medio | `#dd6b20` |
| P4 Baixo | `#38a169` |
---
## Exemplo Preenchido
```
Relatorio de Incidente — Downtime Servidor Producao
Referencia: INC-2026-003 | Severidade: P2 Alto | Estado: Resolvido
Resumo:
No dia 08-03-2026, entre as 14:22 e as 16:37, o servidor de producao
esteve inacessivel durante 2h 15min devido a uma falha de memoria
no servico de cache. Todos os servicos foram restaurados as 16:37.
Impacto:
- Duracao: 2h 15min
- Servicos afectados: Portal web, API integracao
- Utilizadores afectados: todos os utilizadores activos (~45)
- Dados: sem perda de dados confirmada
Causa Raiz:
Fuga de memoria no servico Redis apos actualizacao de versao
aplicada em manutencao preventiva às 13:00. A versao 7.2.1 tem
um bug conhecido com configuracoes de maxmemory-policy = allkeys-lru.
Accoes:
- Imediata: Rollback Redis para versao 7.0.15 (concluido)
- Curto prazo (12-03-2026): Adicionar alertas de memoria no sistema de monitorizacao
- Preventiva (31-03-2026): Procedimento de teste em staging antes de actualizacoes
```
---
## Notas de Uso
- Nunca minimizar o impacto — o cliente ja sabe o que sentiu
- Se a causa raiz nao for conhecida no momento de envio, dizer claramente com data de actualizacao
- Accoes preventivas devem ser reais e com datas — nao compromissos vagos
- Em P1/P2, comunicar primeiro por telefone, depois enviar relatorio formal
- Guardar registo em Desk CRM como comentario na tarefa do cliente (discussao #31)
---
*Template v1.0.0 | 2026-03-10 | Descomplicar®*
@@ -0,0 +1,297 @@
# Template: Revisao Mensal
**Tipo:** Revisao estrategica mensal com cliente
**Quando usar:** Fim de mes, reuniao mensal de acompanhamento, revisao de contrato
**Tom:** Estrategico, baseado em dados, orientado para decisao conjunta
**Extensao:** 2-3 paginas. O mais completo dos 4 templates
**Diferenca face ao client-update:** A revisao mensal inclui analise comparativa, discussao estrategica e decisoes para o mes seguinte. O update e apenas informativo.
---
## Estrutura do Template
### HTML (Desk CRM)
```html
<h4>Revisao Mensal — {{NOME_PROJECTO}} | {{MES_ANO}}</h4>
<p>
<strong>Cliente:</strong> {{NOME_CLIENTE}} |
<strong>Periodo:</strong> 01-{{MES_NUM}}-{{ANO}} a {{ULTIMO_DIA}}-{{MES_NUM}}-{{ANO}} |
<strong>Elaborado por:</strong> Descomplicar®
</p>
<h4>1. Resumo Executivo</h4>
<p>{{PARAGRAFO_RESUMO_EXECUTIVO}}</p>
<table>
<tr>
<th>Metrica</th>
<th>{{MES_ATUAL}}</th>
<th>{{MES_ANTERIOR}}</th>
<th>Variacao</th>
</tr>
<tr>
<td>Horas trabalhadas</td>
<td>{{HORAS_MES}}</td>
<td>{{HORAS_MES_ANT}}</td>
<td>{{VAR_HORAS}}</td>
</tr>
<tr>
<td>Tarefas concluidas</td>
<td>{{TAREFAS_MES}}</td>
<td>{{TAREFAS_MES_ANT}}</td>
<td>{{VAR_TAREFAS}}</td>
</tr>
<tr>
<td>Progresso geral</td>
<td>{{PROGRESSO_MES}}%</td>
<td>{{PROGRESSO_MES_ANT}}%</td>
<td>+{{VAR_PROGRESSO}}pp</td>
</tr>
<tr>
<td>Valor entregue</td>
<td>{{VALOR_MES}}EUR</td>
<td>{{VALOR_MES_ANT}}EUR</td>
<td>{{VAR_VALOR}}</td>
</tr>
</table>
<h4>2. Trabalho Realizado</h4>
<h5>Entregas Concluidas</h5>
<ul>
<li><strong>{{ENTREGA_1}}:</strong> {{DESCRICAO_ENTREGA_1}}</li>
<li><strong>{{ENTREGA_2}}:</strong> {{DESCRICAO_ENTREGA_2}}</li>
<li><strong>{{ENTREGA_3}}:</strong> {{DESCRICAO_ENTREGA_3}}</li>
</ul>
<h5>Tarefas por Area</h5>
<table>
<tr>
<th>Area</th>
<th>Tarefas</th>
<th>Horas</th>
</tr>
<tr>
<td>{{AREA_1}}</td>
<td>{{AREA_1_TAREFAS}}</td>
<td>{{AREA_1_HORAS}}h</td>
</tr>
<tr>
<td>{{AREA_2}}</td>
<td>{{AREA_2_TAREFAS}}</td>
<td>{{AREA_2_HORAS}}h</td>
</tr>
</table>
<h4>3. Estado do Projecto</h4>
<table>
<tr>
<th>Componente</th>
<th>Estado</th>
<th>Notas</th>
</tr>
<tr>
<td>{{COMPONENTE_1}}</td>
<td>{{ESTADO_1}}</td>
<td>{{NOTA_1}}</td>
</tr>
<tr>
<td>{{COMPONENTE_2}}</td>
<td>{{ESTADO_2}}</td>
<td>{{NOTA_2}}</td>
</tr>
</table>
<h4>4. Facturacao e Financeiro</h4>
<table>
<tr>
<th>Descricao</th>
<th>Valor</th>
<th>Data</th>
<th>Estado</th>
</tr>
<tr>
<td>{{FATURA_1_DESC}}</td>
<td>{{FATURA_1_VALOR}}EUR</td>
<td>{{FATURA_1_DATA}}</td>
<td>{{FATURA_1_ESTADO}}</td>
</tr>
</table>
<p>
<strong>Facturado no mes:</strong> {{TOTAL_FACTURADO}}EUR |
<strong>Recebido:</strong> {{TOTAL_RECEBIDO}}EUR |
<strong>Pendente:</strong> {{TOTAL_PENDENTE}}EUR
</p>
<h4>5. Analise e Observacoes</h4>
<p>{{ANALISE_QUALITATIVA}}</p>
<h5>O que correu bem</h5>
<ul>
<li>{{PONTO_POSITIVO_1}}</li>
<li>{{PONTO_POSITIVO_2}}</li>
</ul>
<h5>O que pode melhorar</h5>
<ul>
<li>{{PONTO_MELHORIA_1}}</li>
<li>{{PONTO_MELHORIA_2}}</li>
</ul>
<h4>6. Plano para {{MES_SEGUINTE}}</h4>
<ul>
<li>{{OBJECTIVO_1}} — responsavel: {{RESP_1}} — data: {{DATA_OBJ_1}}</li>
<li>{{OBJECTIVO_2}} — responsavel: {{RESP_2}} — data: {{DATA_OBJ_2}}</li>
<li>{{OBJECTIVO_3}} — responsavel: {{RESP_3}} — data: {{DATA_OBJ_3}}</li>
</ul>
<h5>Decisoes Necessarias</h5>
<ul>
<li>{{DECISAO_1}} — pendente: {{PENDENTE_QUEM_1}}</li>
<li>{{DECISAO_2}} — pendente: {{PENDENTE_QUEM_2}}</li>
</ul>
<h4>7. Proxima Revisao</h4>
<p>
<strong>Data proposta:</strong> {{DATA_PROXIMA_REVISAO}} |
<strong>Formato:</strong> {{FORMATO_REUNIAO}}
</p>
<hr>
<p>
<strong>Descomplicar®</strong> |
<a href="mailto:info@descomplicar.pt">info@descomplicar.pt</a> |
911 510 005
</p>
<p><em>Revisao gerada em {{DATA_HOJE}} | Projecto #{{PROJECTO_ID}}</em></p>
```
### Markdown (Email / Hub)
```markdown
# Revisao Mensal — {{NOME_PROJECTO}} | {{MES_ANO}}
**Cliente:** {{NOME_CLIENTE}} | **Periodo:** 01-{{MES_NUM}}-{{ANO}} a {{ULTIMO_DIA}}-{{MES_NUM}}-{{ANO}}
---
## 1. Resumo Executivo
{{PARAGRAFO_RESUMO_EXECUTIVO}}
| Metrica | {{MES_ATUAL}} | {{MES_ANTERIOR}} | Variacao |
|---------|--------------|-----------------|----------|
| Horas trabalhadas | {{HORAS_MES}} | {{HORAS_MES_ANT}} | {{VAR_HORAS}} |
| Tarefas concluidas | {{TAREFAS_MES}} | {{TAREFAS_MES_ANT}} | {{VAR_TAREFAS}} |
| Progresso geral | {{PROGRESSO_MES}}% | {{PROGRESSO_MES_ANT}}% | +{{VAR_PROGRESSO}}pp |
| Valor entregue | {{VALOR_MES}}EUR | {{VALOR_MES_ANT}}EUR | {{VAR_VALOR}} |
## 2. Trabalho Realizado
**Entregas concluidas:**
- **{{ENTREGA_1}}:** {{DESCRICAO_ENTREGA_1}}
- **{{ENTREGA_2}}:** {{DESCRICAO_ENTREGA_2}}
- **{{ENTREGA_3}}:** {{DESCRICAO_ENTREGA_3}}
## 3. Estado do Projecto
| Componente | Estado | Notas |
|------------|--------|-------|
| {{COMPONENTE_1}} | {{ESTADO_1}} | {{NOTA_1}} |
| {{COMPONENTE_2}} | {{ESTADO_2}} | {{NOTA_2}} |
## 4. Facturacao
| Descricao | Valor | Estado |
|-----------|-------|--------|
| {{FATURA_1_DESC}} | {{FATURA_1_VALOR}}EUR | {{FATURA_1_ESTADO}} |
**Facturado:** {{TOTAL_FACTURADO}}EUR | **Recebido:** {{TOTAL_RECEBIDO}}EUR | **Pendente:** {{TOTAL_PENDENTE}}EUR
## 5. O que correu bem / O que melhorar
**Positivo:**
- {{PONTO_POSITIVO_1}}
- {{PONTO_POSITIVO_2}}
**Melhoria:**
- {{PONTO_MELHORIA_1}}
- {{PONTO_MELHORIA_2}}
## 6. Plano {{MES_SEGUINTE}}
- {{OBJECTIVO_1}} — {{RESP_1}} — {{DATA_OBJ_1}}
- {{OBJECTIVO_2}} — {{RESP_2}} — {{DATA_OBJ_2}}
- {{OBJECTIVO_3}} — {{RESP_3}} — {{DATA_OBJ_3}}
**Decisoes necessarias:**
- {{DECISAO_1}} — pendente: {{PENDENTE_QUEM_1}}
## 7. Proxima Revisao
**Data proposta:** {{DATA_PROXIMA_REVISAO}} | **Formato:** {{FORMATO_REUNIAO}}
---
Descomplicar® | info@descomplicar.pt | 911 510 005
*Revisao gerada em {{DATA_HOJE}} | Projecto #{{PROJECTO_ID}}*
```
---
## Placeholders — Mapeamento Desk CRM
| Placeholder | Fonte | MCP Call |
|-------------|-------|----------|
| `{{HORAS_MES}}` | Timesheets do mes | `get_project_time_tracking` |
| `{{HORAS_MES_ANT}}` | Timesheets mes anterior | `get_project_time_tracking` (range) |
| `{{TAREFAS_MES}}` | Tasks concluidas no mes | `get_tasks` (filtro data) |
| `{{PROGRESSO_MES}}` | `project.progress` actual | `get_project` |
| `{{TOTAL_FACTURADO}}` | Soma facturas do mes | `get_invoices` |
| `{{TOTAL_RECEBIDO}}` | Facturas pagas | `get_invoices` (status=paid) |
| `{{TOTAL_PENDENTE}}` | Facturas pendentes | `get_invoices` (status=unpaid) |
### Estados de Componente
| Estado | Significado |
|--------|-------------|
| Concluido | Entregue e aceite |
| Em curso | Desenvolvimento activo |
| Pendente | Nao iniciado, na fila |
| Em revisao | Aguarda aprovacao cliente |
| Em pausa | Aguarda input externo |
| Bloqueado | Dependencia nao resolvida |
---
## Paragrafo de Resumo Executivo — Guia
O resumo executivo deve responder a 3 questoes em 3-4 frases:
1. **O que foi feito este mes?** (resultados concretos)
2. **Onde estamos no projecto?** (progresso, prazo)
3. **O que e mais importante para o mes seguinte?** (foco)
Exemplo:
```
Em Fevereiro 2026, concluimos a integracao com a API de energia solar
e o modulo de relatorios automaticos, elevando o progresso do projecto
para 72%. O projecto mantem-se dentro do prazo previsto para entrega
final a 31-03-2026. Em Marco, o foco sera o dashboard mobile e a
formacao de utilizadores.
```
---
## Notas de Uso
- O paragrafo de resumo executivo e o elemento mais lido — escrever com cuidado
- Comparacao com mes anterior so incluir se os dados forem reais (nao simular)
- "O que pode melhorar" nao e critica — e comprometimento de melhoria continua
- Decisoes necessarias devem ter dono claro (Descomplicar ou Cliente)
- Propor sempre data para proxima revisao — nao deixar em aberto
---
*Template v1.0.0 | 2026-03-10 | Descomplicar®*
@@ -0,0 +1,210 @@
# Template: Status de Projecto
**Tipo:** Relatorio de estado detalhado de projecto
**Frequencia:** Por milestone, reuniao de acompanhamento, ou pedido do cliente
**Tom:** Tecnico mas acessivel, orientado para decisao
**Extensao:** 1-2 paginas (equivalente)
---
## Estrutura do Template
### HTML (Desk CRM)
```html
<h4>Status do Projecto — {{NOME_PROJECTO}}</h4>
<p>
<strong>Data:</strong> {{DATA_HOJE}} |
<strong>Periodo:</strong> {{PERIODO_INICIO}} a {{PERIODO_FIM}} |
<strong>Status:</strong> <span style="color:{{COR_STATUS}}">{{STATUS_LABEL}}</span>
</p>
<h4>Resumo Executivo</h4>
<table>
<tr>
<th>Metrica</th>
<th>Valor</th>
<th>Nota</th>
</tr>
<tr>
<td>Progresso</td>
<td>{{PROGRESSO_PERCENTAGEM}}%</td>
<td>{{NOTA_PROGRESSO}}</td>
</tr>
<tr>
<td>Horas gastas</td>
<td>{{HORAS_GASTAS}}h / {{HORAS_ESTIMADAS}}h</td>
<td>{{BURN_RATE}}% consumido</td>
</tr>
<tr>
<td>Tarefas</td>
<td>{{TAREFAS_CONCLUIDAS}} / {{TAREFAS_TOTAL}}</td>
<td>{{TAREFAS_EM_CURSO}} em curso</td>
</tr>
<tr>
<td>Deadline</td>
<td>{{DEADLINE}}</td>
<td>{{DIAS_RESTANTES}} dias restantes</td>
</tr>
</table>
<h4>Fases e Milestones</h4>
<table>
<tr>
<th>Fase</th>
<th>Status</th>
<th>Conclusao</th>
</tr>
<tr>
<td>{{FASE_1_NOME}}</td>
<td>{{FASE_1_STATUS}}</td>
<td>{{FASE_1_DATA}}</td>
</tr>
<tr>
<td>{{FASE_2_NOME}}</td>
<td>{{FASE_2_STATUS}}</td>
<td>{{FASE_2_DATA}}</td>
</tr>
<tr>
<td>{{FASE_3_NOME}}</td>
<td>{{FASE_3_STATUS}}</td>
<td>{{FASE_3_DATA}}</td>
</tr>
</table>
<h4>Tarefas em Destaque</h4>
<ul>
<li><strong>Concluidas recentemente:</strong> {{TAREFAS_RECENTES}}</li>
<li><strong>Em curso agora:</strong> {{TAREFAS_ACTIVAS}}</li>
<li><strong>A iniciar em seguida:</strong> {{PROXIMAS_TAREFAS}}</li>
</ul>
<h4>Riscos e Bloqueadores</h4>
<ul>
<li>{{RISCO_1}} — <strong>Mitigacao:</strong> {{MITIGACAO_1}}</li>
<li>{{RISCO_2}} — <strong>Mitigacao:</strong> {{MITIGACAO_2}}</li>
</ul>
<h4>Financeiro</h4>
<table>
<tr>
<th>Descricao</th>
<th>Valor</th>
<th>Status</th>
</tr>
<tr>
<td>{{FATURA_1_DESC}}</td>
<td>{{FATURA_1_VALOR}}EUR</td>
<td>{{FATURA_1_STATUS}}</td>
</tr>
</table>
<h4>Proximas Accoes</h4>
<ul>
<li>{{ACCAO_1}} — responsavel: {{RESPONSAVEL_1}} — data: {{DATA_ACCAO_1}}</li>
<li>{{ACCAO_2}} — responsavel: {{RESPONSAVEL_2}} — data: {{DATA_ACCAO_2}}</li>
</ul>
<hr>
<p>
<strong>Descomplicar®</strong> |
<a href="mailto:info@descomplicar.pt">info@descomplicar.pt</a> |
911 510 005
</p>
<p><em>Status gerado em {{DATA_HOJE}} | Projecto #{{PROJECTO_ID}}</em></p>
```
### Markdown (Email / Hub)
```markdown
# Status do Projecto — {{NOME_PROJECTO}}
**Data:** {{DATA_HOJE}} | **Periodo:** {{PERIODO_INICIO}} — {{PERIODO_FIM}} | **Status:** {{STATUS_LABEL}}
---
## Resumo Executivo
| Metrica | Valor | Nota |
|---------|-------|------|
| Progresso | {{PROGRESSO_PERCENTAGEM}}% | {{NOTA_PROGRESSO}} |
| Horas | {{HORAS_GASTAS}}h / {{HORAS_ESTIMADAS}}h | {{BURN_RATE}}% consumido |
| Tarefas | {{TAREFAS_CONCLUIDAS}} / {{TAREFAS_TOTAL}} | {{TAREFAS_EM_CURSO}} em curso |
| Deadline | {{DEADLINE}} | {{DIAS_RESTANTES}} dias restantes |
## Fases e Milestones
| Fase | Status | Conclusao |
|------|--------|-----------|
| {{FASE_1_NOME}} | {{FASE_1_STATUS}} | {{FASE_1_DATA}} |
| {{FASE_2_NOME}} | {{FASE_2_STATUS}} | {{FASE_2_DATA}} |
| {{FASE_3_NOME}} | {{FASE_3_STATUS}} | {{FASE_3_DATA}} |
## Tarefas em Destaque
- **Concluidas recentemente:** {{TAREFAS_RECENTES}}
- **Em curso agora:** {{TAREFAS_ACTIVAS}}
- **A iniciar em seguida:** {{PROXIMAS_TAREFAS}}
## Riscos e Bloqueadores
- {{RISCO_1}} — **Mitigacao:** {{MITIGACAO_1}}
- {{RISCO_2}} — **Mitigacao:** {{MITIGACAO_2}}
## Financeiro
| Descricao | Valor | Status |
|-----------|-------|--------|
| {{FATURA_1_DESC}} | {{FATURA_1_VALOR}}EUR | {{FATURA_1_STATUS}} |
## Proximas Accoes
- {{ACCAO_1}} — {{RESPONSAVEL_1}} — {{DATA_ACCAO_1}}
- {{ACCAO_2}} — {{RESPONSAVEL_2}} — {{DATA_ACCAO_2}}
---
Descomplicar® | info@descomplicar.pt | 911 510 005
*Status gerado em {{DATA_HOJE}} | Projecto #{{PROJECTO_ID}}*
```
---
## Placeholders — Mapeamento Desk CRM
| Placeholder | Fonte | MCP Call |
|-------------|-------|----------|
| `{{NOME_PROJECTO}}` | `project.name` | `get_project` |
| `{{PROGRESSO_PERCENTAGEM}}` | `project.progress` | `get_project` |
| `{{HORAS_GASTAS}}` | Soma timesheets | `get_project_time_tracking` |
| `{{HORAS_ESTIMADAS}}` | `project.estimated_hours` | `get_project` |
| `{{BURN_RATE}}` | Calculado: gastas/estimadas*100 | — |
| `{{TAREFAS_CONCLUIDAS}}` | Count tasks status=completed | `get_tasks` |
| `{{TAREFAS_TOTAL}}` | Count all tasks | `get_tasks` |
| `{{TAREFAS_EM_CURSO}}` | Count tasks status=in_progress | `get_tasks` |
| `{{DEADLINE}}` | `project.deadline` | `get_project` |
| `{{DIAS_RESTANTES}}` | Calculado | `mcp-time` |
| `{{FATURA_*}}` | Facturas do projecto | `get_invoices` |
### Status Labels e Cores
| Status | Label | Cor HTML |
|--------|-------|----------|
| Em prazo | No Prazo | `#38a169` (verde) |
| Risco moderado | Em Risco | `#d69e2e` (amarelo) |
| Atrasado | Atrasado | `#e53e3e` (vermelho) |
| Concluido | Concluido | `#2b6cb0` (azul) |
| Em pausa | Em Pausa | `#4a5568` (cinza) |
---
## Notas de Uso
- Se o burn rate ultrapassar 80% com menos de 80% de progresso, assinalar como risco
- Riscos sem mitigacao definida nao devem ser apresentados ao cliente sem plano de accao
- Fases devem corresponder a milestones acordados no arranque do projecto
- Dados financeiros incluir apenas se o utilizador tem permissao (staff ID 1 = Emanuel)
- Se nao existirem riscos conhecidos, omitir a seccao (nao colocar "sem riscos identificados")
---
*Template v1.0.0 | 2026-03-10 | Descomplicar®*
+229
View File
@@ -0,0 +1,229 @@
---
name: report
description: Relatórios agregados semanal, mensal e por projecto. Compila dados de múltiplas fontes CRM. Usar quando "report", "relatório", "semanal", "mensal", "resumo período".
context: fork
layer: wiki
---
# /report v1.0 - Relatórios Agregados
Relatórios de período compilando dados de múltiplas fontes.
---
## Comandos
| Comando | Função |
|---------|--------|
| `/report` | Relatório semanal (default) |
| `/report weekly` | Relatório semanal detalhado |
| `/report monthly` | Relatório mensal |
| `/report project <id>` | Relatório de projecto |
---
## Protocolo
### /report weekly (Semanal)
```
1. mcp__mcp-time__current_time → Calcular Seg-Dom da semana
2. Recolher dados:
a. Timesheets da semana
b. Tarefas concluídas
c. Tickets fechados
d. Facturas emitidas/pagas
3. Calcular métricas
4. Gerar relatório
```
**Output:**
```markdown
## 📊 Relatório Semanal - W06 (03-09 Fev 2026)
### ⏱️ Tempo
| Dia | Horas | Billable |
|-----|-------|----------|
| Seg | 6h 30m | 5h |
| Ter | 7h 15m | 6h |
| Qua | 4h 45m | 4h |
| Qui | 8h 00m | 7h |
| Sex | 5h 30m | 5h |
| **Total** | **32h** | **27h (84%)** |
### ✅ Tarefas Concluídas (12)
| ID | Tarefa | Projecto |
|----|--------|----------|
| #1446 | Documentação | Stack |
| #1448 | Testes | Stack |
### 🎫 Tickets (8)
- Fechados: 6
- Em aberto: 2
- Tempo médio resolução: 4h
### 💰 Facturação
| Métrica | Valor |
|---------|-------|
| Emitido | €5.500 |
| Recebido | €3.200 |
| Pendente | €7.800 |
### 📈 Highlights
- Projecto SFV-360: 15h (47%)
- Projecto Stack: 10h (31%)
- Interno: 7h (22%)
```
---
### /report monthly (Mensal)
```
1. Calcular primeiro e último dia do mês
2. Recolher dados agregados
3. Comparar com mês anterior
4. Gerar relatório
```
**Output:**
```markdown
## 📊 Relatório Mensal - Janeiro 2026
### Resumo Executivo
- Horas trabalhadas: 142h
- Billable: 118h (83%)
- Facturado: €12.500
- Recebido: €9.800
### Comparação
| Métrica | Jan | Dez | Δ |
|---------|-----|-----|---|
| Horas | 142h | 128h | +11% |
| Facturado | €12.5k | €10.2k | +23% |
| Tickets | 32 | 28 | +14% |
### Projectos Activos (5)
| Projecto | Horas | Valor |
|----------|-------|-------|
| SFV-360 | 45h | €4.500 |
| Stack | 38h | Interno |
### Clientes
| Cliente | Facturado | Pago | Saldo |
|---------|-----------|------|-------|
| TechCorp | €5.000 | €5.000 | €0 |
| StartupX | €3.500 | €2.000 | €1.500 |
```
---
### /report project <id>
```
1. mcp__desk-crm-v3__get_project({ project_id })
2. mcp__desk-crm-v3__get_tasks({ project_id })
3. mcp__desk-crm-v3__get_project_time_tracking({ project_id })
4. mcp__desk-crm-v3__get_invoices({ project_id })
5. Gerar relatório
```
**Output:**
```markdown
## 📁 Relatório Projecto: SFV-360 (#80)
### Status
- **Progresso:** 65%
- **Início:** 2026-01-15
- **Deadline:** 2026-03-31
### Tarefas
| Status | Qtd |
|--------|-----|
| Concluídas | 12 |
| Em curso | 5 |
| Pendentes | 8 |
### Tempo
- Total: 45h
- Estimado: 80h
- Burn rate: 56%
### Financeiro
| Factura | Valor | Status |
|---------|-------|--------|
| INV-045 | €2.500 | Pendente |
| INV-040 | €2.000 | Pago |
### Timeline
- 15/Jan: Kickoff
- 25/Jan: Fase 1 concluída
- 05/Fev: Entrega parcial
```
---
## Métricas Calculadas
| Métrica | Fórmula |
|---------|---------|
| Billable % | Horas billable / Total horas |
| Burn rate | Horas gastas / Horas estimadas |
| Ticket SLA | Tickets dentro SLA / Total |
| DSO | Dias médios para pagamento |
---
## Integração Skills
| Dados | Fonte |
|-------|-------|
| Tempo | /time (timesheets) |
| Tarefas | /crm (tasks) |
| Tickets | /ticket |
| Facturas | /invoice |
---
## Storage
Relatórios podem ser guardados em:
- **Discussão #31** (Logs) - Relatórios semanais
- **mem0** - Backup para análise histórica
---
## Anti-Patterns
- **NUNCA** gerar relatório sem período definido
- **NUNCA** incluir dados estimados como factos
- **NUNCA** mostrar valores financeiros a staff não autorizado
---
## Changelog
### v1.0.0 (2026-02-05)
- Versão inicial
- Relatórios weekly, monthly, project
- Integração com skills Desk
- Métricas calculadas
---
*Skill v1.0.0 | 2026-02-05 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+136
View File
@@ -0,0 +1,136 @@
---
name: research-pipeline
description: >
Pipeline de pesquisa em 2 camadas: Layer 1 (Obsidian CLI Hub), Layer 2 (NotebookLM).
Orquestra as camadas em sequência para pesquisas profundas. Usar quando /hub-search
ou /knowledge isolados não são suficientes, quando o tema cruza conteúdo
interno+externo, ou para research antes de executar tarefas complexas.
layer: wiki
---
# /research-pipeline — Pipeline de Pesquisa em 2 Camadas
Orquestra as camadas RAG em sequência para obter contexto completo antes de executar tarefas.
```
Layer 1: Obsidian CLI → conteúdo Hub (notas, PROCs, docs internas)
Layer 2: NotebookLM → análise profunda (65 notebooks temáticos)
```
---
## Uso
```
/research-pipeline "tema ou pergunta"
/research-pipeline "PROC-MCP" --quick (só Layer 1)
/research-pipeline "n8n webhook setup" --deep (L1 + L2)
```
---
## Workflow
### Passo 1 — Layer 1: Hub via Obsidian CLI
```bash
obsidian search "TERMO" --include-backlinks --format json
```
**Se CLI offline:** fallback para Grep no Hub.
Registar: `L1_results`, `L1_score` (0-100, baseado em nº resultados).
### Passo 2 — Avaliar se Layer 2 é necessária
```
SE L1_score >= 80 E query é operacional (PROC, QR, path):
→ PARAR — resultado suficiente, retornar L1
SE L1_score < 80 OU query é conceptual/analítica:
→ Avançar para Layer 2
```
### Passo 3 — Layer 2: NotebookLM (análise profunda)
Usar routing da skill `/knowledge` para seleccionar notebooks relevantes.
```javascript
// Max 2 notebooks para performance
mcp__notebooklm__notebook_query({ notebook_id, query })
```
Registar: `L2_results`, `L2_confidence`.
### Passo 4 — Avaliar se Layer 2 é suficiente
```
SE L2_confidence >= 70:
→ PARAR — retornar L1+L2 combinados
SE L2_confidence < 70:
→ Reportar lacuna e sugerir pesquisa Web manual
```
### Passo 5 — Síntese e output
```markdown
## Research: "[termo]"
### Hub (Layer 1) — [N notas encontradas]
[Resultados mais relevantes com paths]
### NotebookLM (Layer 2) — [notebook usado]
[Insights e contexto analítico]
### Síntese
[Resposta integrada das 2 camadas]
### Qualidade
- L1: [N resultados]
- L2: [confidence%] via [notebook]
- Tempo: ~[X]s
```
---
## Modos rápidos
| Flag | Layers activas | Uso |
|------|---------------|-----|
| `--quick` | L1 apenas | PROCs, paths, comandos |
| (default) | L1 + L2 | Maioria das queries |
| `--deep` | L1 + L2 (exaustivo) | Investigação completa |
---
## Integração com outras skills
```
Antes de /wp-dev → /research-pipeline --quick "PROC-WordPress"
Antes de /cwp-* → /research-pipeline --quick "PROC-CWP"
Antes de design → /research-pipeline "design guidelines descomplicar"
Para /deep-research → /research-pipeline --deep (base de contexto)
```
---
## Regras
1. **Layer 1 sempre primeiro** — mais rápido e frequentemente suficiente
2. **Max 2 notebooks NotebookLM** por query (performance)
3. **Citar fonte** de cada resultado no output
---
*Skill v1.1.0 | 13-04-2026 | Descomplicar® — LightRAG removido (0 docs, serviço desactivado)*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+132
View File
@@ -0,0 +1,132 @@
---
name: review-corrections
description: >
Analisa correcções feitas pelo utilizador nas últimas sessões e gera sugestões
de regras para CLAUDE.md. Lê ~/.claude-work/corrections.jsonl, agrupa por padrão,
e propõe melhorias concretas. Usar semanalmente (via /schedule) ou quando há >5
correcções acumuladas. Faz parte do loop de auto-melhoria (Eixo 3, Stack Q2 2026).
layer: wiki
---
# /review-corrections — Análise de Correcções e Auto-melhoria
Analisa padrões de correcção do utilizador para melhorar o CLAUDE.md autonomamente.
---
## Workflow
### Passo 1 — Ler ficheiro de correcções
```bash
cat ~/.claude-work/corrections.jsonl
```
Cada linha é um JSON:
```json
{"ts":"2026-04-06T14:30:00","type":"correction","prompt":"não assim, usa grep","session":"abc","cwd":"/Hub/"}
```
### Passo 2 — Agrupar por padrão
Categorias de correcção:
| Padrão | Keywords | Acção sugerida |
|--------|---------|----------------|
| **Ferramenta errada** | "usa grep", "não uses bash", "usa read" | Regra de preferência de ferramenta |
| **Língua/formato** | "em português", "sem emojis", "com acentos" | Regra de output |
| **Abordagem** | "não assim", "de outra forma", "mais simples" | Regra de heurística |
| **Scope** | "não faças isso", "não toques em", "só X" | Regra de limites |
| **Verificação** | "verifica primeiro", "não inventar", "confirma" | Regra anti-alucinação |
### Passo 3 — Gerar sugestões de regras
Para cada padrão com ≥2 ocorrências, propor regra no formato:
```markdown
**Regra candidata:**
> [Padrão detectado N vezes] → Sugestão: "Nunca [X], sempre [Y]"
**Evidência:**
- "prompt1" (data)
- "prompt2" (data)
**Proposta CLAUDE.md:**
| NN | [Texto da regra concisa] |
```
### Passo 4 — Apresentar ao utilizador
```markdown
## Revisão de Correcções — [data]
**Total analisado:** N correcções em M sessões
**Padrões encontrados:** P
### Regras candidatas (aprovação necessária)
[lista de propostas]
### Limpar ficheiro?
[ ] Sim — arquivar em ~/.claude-work/corrections-archive-YYYY-MM.jsonl
[ ] Não — manter para próxima revisão
```
### Passo 5 — Aplicar regras aprovadas
Se o utilizador aprovar uma regra:
1. Abrir `~/.claude/CLAUDE.md`
2. Adicionar na tabela de REGRAS CORE com número sequencial
3. Confirmar: "Regra #NN adicionada."
Se o utilizador recusar:
- Arquivar correcção com tag `rejected`
- Não propor de novo
---
## Quando usar
- **Semanal** (via `/schedule` às segundas-feiras com `/today`)
- **Manual** quando corrections.jsonl tem >5 entradas
- **Após incidente** (mesmo erro 2+ vezes consecutivos)
---
## Integração auto-trigger
O hook `capture-corrections.sh` regista automaticamente em `~/.claude-work/corrections.jsonl`.
Esta skill consome esse ficheiro e fecha o loop de auto-melhoria.
**Loop completo:**
```
Correcção utilizador
→ capture-corrections.sh (regista)
→ /review-corrections (analisa)
→ CLAUDE.md (actualiza)
→ Comportamento melhora
```
---
## Anti-patterns
- Nunca aplicar regras sem aprovação explícita do utilizador
- Nunca propor regras com <2 ocorrências (pode ser caso isolado)
- Nunca eliminar regras existentes — apenas adicionar ou reformular
---
*Skill v1.0.0 | 06-04-2026 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+182
View File
@@ -0,0 +1,182 @@
---
name: spec-coauthor
description: Co-autoria iterativa de documentos estruturados — SPECs de projecto, propostas comerciais e PROCs operacionais. Workflow 3 fases com brainstorming, curadoria e teste de leitura por sub-agente. Usar quando "spec", "proposta", "PROC", "documento", "co-autoria", "redigir", "estruturar documento", "escrever proposta".
layer: wiki
---
# /spec-coauthor - Co-Autoria de Documentos Estruturados
Co-autoria iterativa de SPECs, propostas comerciais e PROCs operacionais com workflow de 3 fases: recolha de contexto, refinamento estruturado e teste de leitura.
---
## Tipos de Documento Suportados
| Tipo | Audiência | Exemplos |
|------|-----------|----------|
| **SPEC de projecto** | Equipa técnica, Emanuel | WhatSMS-v2-SPEC.md, DashDescomplicar-SPEC.md |
| **Proposta comercial** | Cliente, stakeholders | Proposta-ClienteX-SEO.md, Proposta-ERP-2026.md |
| **PROC operacional** | Equipa interna, ops | PROC-Deploy-EasyPanel.md, PROC-Onboarding-Cliente.md |
---
## Fase 1: Recolha de Contexto
### 1.1 Identificar tipo de documento
Perguntar ao utilizador:
```
1. Que tipo de documento precisas criar?
a) SPEC de projecto (requisitos, arquitectura, milestones)
b) Proposta comercial (solução, pricing, timeline)
c) PROC operacional (passos, checklist, troubleshooting)
d) Outro (descrever)
2. Para quem é este documento?
- Emanuel (uso interno / decisão)
- Cliente (venda / aprovação)
- Equipa técnica (execução)
- Múltiplas audiências (especificar)
3. Qual o impacto esperado?
- Aprovar orçamento / go-ahead
- Alinhar equipa em requisitos
- Documentar processo para replicar
- Outro (especificar)
```
### 1.2 Recolher contexto existente
Após identificar tipo e audiência, recolher contexto via:
**Desk CRM:**
```
mcp__desk-crm-v3__get_projects → projectos activos relacionados
mcp__desk-crm-v3__get_tasks → tarefas e sub-tarefas relevantes
mcp__desk-crm-v3__get_customers → dados do cliente (se proposta)
```
**Hub / Ficheiros:**
```
Read ficheiros relevantes em:
/media/ealmeida/Dados/Hub/05-Projectos/[projecto]/
/media/ealmeida/Dados/Hub/07-Clientes/[cliente]/
/media/ealmeida/Dados/Hub/90-Templates/
```
**Perguntas complementares de contexto:**
```
4. Existe documentação anterior? (SPEC, proposta, email, notas)
→ Partilhar caminho ou colar conteúdo
5. Há restrições ou requisitos não-negociáveis?
→ Prazo, orçamento, tecnologia obrigatória
6. Qual o nível de detalhe desejado?
→ Resumo executivo (1-2 pág.) / Documento completo (5-15 pág.) / Ultra-detalhado
```
### 1.3 Confirmar antes de avançar
Apresentar resumo do contexto recolhido e confirmar com utilizador antes de passar à Fase 2.
```
**Contexto confirmado:**
- Tipo: [SPEC / Proposta / PROC]
- Audiência: [quem vai ler]
- Impacto: [decisão esperada]
- Referências encontradas: [ficheiros / tarefas]
- Nível de detalhe: [resumo / completo / ultra]
Avançar para estruturação? (s/n)
```
---
## Fase 2: Refinamento e Estrutura
### 2.1 Brainstorming de secções
Para cada secção principal do documento, gerar **5 a 20 opções** de abordagem/conteúdo.
**Formato de apresentação:**
```
## Secção: [Nome da Secção]
Opções de abordagem:
1. [Opção concisa — 1 linha de descrição]
2. [Opção alternativa]
3. [Opção mais detalhada]
4. [Opção focada em audiência técnica]
5. [Opção focada em audiência não técnica]
...
→ Quais queres manter? (ex: "1,3,5" ou "todas" ou "nenhuma, tentar de novo")
```
**Regras do brainstorming:**
- Apresentar opções reais e diferenciadas (não variações mínimas)
- Indicar vantagens de cada abordagem em 1 linha
- Nunca gerar menos de 5 opções por secção
- Para SPECs técnicas: incluir sempre opção de maior e menor detalhe
- Para propostas: incluir sempre opção orientada a valor e a custo
### 2.2 Curadoria pelo utilizador
O utilizador selecciona opções com sintaxe simples:
```
"Keep 1,4,7" → manter apenas essas opções
"Todas" → aceitar todas
"Nenhuma" → tentar de novo com abordagem diferente
"1 mas mais curto" → manter com refinamento
"Combinar 2 e 5" → fusão das opções
```
### 2.3 Drafting iterativo
Após curadoria de cada secção, produzir rascunho com `str_replace_editor` ou apresentar em bloco markdown.
**Ciclo por secção:**
```
1. Brainstorm (5-20 opções)
2. Curadoria pelo utilizador
3. Draft da secção
4. Revisão inline ("mudar X para Y" / "expandir parágrafo Z")
5. Confirmar → avançar para secção seguinte
```
**Ordem de secções por tipo:**
Para SPEC de projecto:
```
1. Contexto e problema
2. Objectivo e scope
3. Requisitos funcionais
4. Requisitos técnicos / arquitectura
5. Milestones e timeline
6. Riscos e dependências
7. Definition of Done
8. Referências
```
Para proposta comercial:
```
1. Sumário executivo
2. Contexto e diagnóstico
3. Solução proposta
4. Entregáveis e timeline
5. Investimento e condições
6. Próximos passos
7. Sobre a Descomplicar
```
Para PROC operacional:
```
1. Objectivo e âmbito
2. Pré-requisitos
3. Passos detalhados
4. Checklis
@@ -0,0 +1,484 @@
# Templates spec-coauthor
Templates de referência para os três tipos de documento suportados pela skill /spec-coauthor.
---
## Template 1: SPEC de Projecto
```markdown
---
title: [Nome do Projecto] — SPEC
date: YYYY-MM-DD
type: spec
status: draft
version: 1.0
projecto_desk_id: [ID Desk CRM]
tags: [spec, projecto, tecnologia]
---
# [Nome do Projecto] — Especificação Técnica
**Versão:** 1.0 | **Data:** YYYY-MM-DD | **Status:** Draft
**Autor:** Emanuel Almeida | **Revisão:** [nome revisor]
---
## 1. Contexto e Problema
### 1.1 Contexto actual
Descrição do estado actual do sistema/processo que este projecto vai resolver ou melhorar.
### 1.2 Problema identificado
Descrição clara e específica do problema. Incluir:
- Impacto actual (tempo perdido, custo, risco)
- Frequência do problema
- Quem é afectado
### 1.3 Oportunidade
O que se torna possível ao resolver este problema.
---
## 2. Objectivo e Scope
### 2.1 Objectivo principal
Uma frase clara do que este projecto entrega.
### 2.2 Scope incluído
- [Feature ou entregável 1]
- [Feature ou entregável 2]
- [Feature ou entregável 3]
### 2.3 Scope excluído (fora de scope)
- [Item explicitamente excluído 1]
- [Item explicitamente excluído 2]
### 2.4 Critérios de sucesso
| Critério | Medição | Target |
|----------|---------|--------|
| [Critério 1] | [Como medir] | [Valor] |
| [Critério 2] | [Como medir] | [Valor] |
---
## 3. Requisitos Funcionais
### 3.1 [Módulo ou área funcional A]
| ID | Requisito | Prioridade | Notas |
|----|-----------|------------|-------|
| RF-001 | [Descrição] | Must / Should / Could | [Detalhe] |
| RF-002 | [Descrição] | Must / Should / Could | [Detalhe] |
### 3.2 [Módulo ou área funcional B]
| ID | Requisito | Prioridade | Notas |
|----|-----------|------------|-------|
| RF-010 | [Descrição] | Must / Should / Could | [Detalhe] |
---
## 4. Requisitos Técnicos e Arquitectura
### 4.1 Stack tecnológico
| Camada | Tecnologia | Justificação |
|--------|------------|-------------|
| Frontend | [ex: Next.js 14] | [razão] |
| Backend | [ex: Laravel 11] | [razão] |
| Base de dados | [ex: MySQL 8] | [razão] |
| Infra | [ex: EasyPanel + CWP] | [razão] |
### 4.2 Diagrama de arquitectura
```
[Componente A] → [API] → [Componente B]
↓
[Base de dados]
```
### 4.3 Integrações externas
| Sistema | Tipo integração | Dados trocados | Responsável |
|---------|----------------|----------------|-------------|
| [Sistema X] | REST API | [dados] | [quem] |
| [Sistema Y] | Webhook | [eventos] | [quem] |
### 4.4 Requisitos não-funcionais
| Requisito | Descrição | Target |
|-----------|-----------|--------|
| Performance | Tempo resposta API | < 500ms (p95) |
| Disponibilidade | Uptime | 99.5% |
| Segurança | Autenticação | JWT + refresh tokens |
| Escalabilidade | [detalhe] | [target] |
---
## 5. Milestones e Timeline
| Milestone | Entregável | Data alvo | Dependências |
|-----------|-----------|-----------|-------------|
| M1 — Setup | Infra + repo configurado | YYYY-MM-DD | — |
| M2 — MVP | [Feature core] funcional | YYYY-MM-DD | M1 |
| M3 — Beta | Testes com utilizadores | YYYY-MM-DD | M2 |
| M4 — Launch | Deploy produção | YYYY-MM-DD | M3 |
**Estimativa total:** [X semanas / meses]
**Velocidade estimada:** [X story points/sprint]
---
## 6. Riscos e Dependências
| Risco | Probabilidade | Impacto | Mitigação |
|-------|---------------|---------|-----------|
| [Risco 1] | Alta / Média / Baixa | Alto / Médio / Baixo | [acção] |
| [Risco 2] | Alta / Média / Baixa | Alto / Médio / Baixo | [acção] |
**Dependências bloqueantes:**
- [Dependência externa 1 — quem / quando]
- [Dependência externa 2 — quem / quando]
---
## 7. Definition of Done
Uma user story / feature é considerada concluída quando:
- [ ] Código em PR aprovado por pelo menos 1 revisor
- [ ] Testes unitários escritos (cobertura > X%)
- [ ] Testes de integração passam em CI
- [ ] Documentação actualizada
- [ ] Sem issues críticas em `pnpm audit`
- [ ] Deploy em staging testado e aprovado
- [ ] Tarefa Desk CRM actualizada com comentário HTML
---
## 8. Referências
**Projectos relacionados:**
- [Link para projecto Desk CRM]
- [Link para repositório Gitea]
**Documentação técnica:**
- [Link para API externa]
- [Link para PROC relevante]
**Ficheiros relevantes:**
- `[path local do ficheiro]`
---
**[Nome do Projecto] SPEC v1.0 | YYYY-MM-DD | Descomplicar®**
```
---
## Template 2: Proposta Comercial
```markdown
---
title: Proposta — [Cliente] — [Tema]
date: YYYY-MM-DD
type: proposta
status: draft
cliente_desk_id: [ID Desk CRM]
validade: YYYY-MM-DD
valor_total: [X EUR]
tags: [proposta, cliente, tema]
---
# Proposta Comercial
## [Título do Serviço / Projecto]
**Para:** [Nome Cliente] | [NIF se disponível]
**De:** Descomplicar — Crescimento Digital | NIF: 514 785 691
**Data:** YYYY-MM-DD | **Válida até:** YYYY-MM-DD
**Referência:** PROP-[YYYY]-[NNN]
---
## 1. Sumário Executivo
[2-3 parágrafos que respondem a: qual é o problema do cliente, o que propomos, e qual o resultado esperado. Escrito para quem não vai ler o documento completo.]
**Em síntese:** [Uma frase que resume proposta e valor.]
---
## 2. Contexto e Diagnóstico
### 2.1 Situação actual
[Descrever o estado actual do cliente com base no que foi partilhado. Mostrar que compreendemos o negócio e os desafios.]
### 2.2 Oportunidade identificada
[O que está a ser perdido / o que pode ser ganho. Contextualizar o valor da solução.]
### 2.3 Objectivo do projecto
[O que o cliente vai conseguir após a conclusão. Focado em resultado de negócio, não em features técnicas.]
---
## 3. Solução Proposta
### 3.1 Abordagem
[Descrever a solução de forma clara e não técnica. Como vamos resolver o problema.]
### 3.2 Entregáveis
| # | Entregável | Descrição | Formato |
|---|-----------|-----------|---------|
| 1 | [Nome] | [O que é] | [ficheiro / deploy / formação] |
| 2 | [Nome] | [O que é] | [ficheiro / deploy / formação] |
| 3 | [Nome] | [O que é] | [ficheiro / deploy / formação] |
### 3.3 O que não está incluído
[Listar explicitamente o que está fora de scope para evitar mal-entendidos.]
- [Item excluído 1]
- [Item excluído 2]
---
## 4. Timeline e Fases
| Fase | Descrição | Duração | Entregável |
|------|-----------|---------|-----------|
| 1 — [Nome] | [Actividades] | [X dias/semanas] | [O quê] |
| 2 — [Nome] | [Actividades] | [X dias/semanas] | [O quê] |
| 3 — [Nome] | [Actividades] | [X dias/semanas] | [O quê] |
**Início estimado:** [data, condicionada a aprovação em X dias]
**Conclusão estimada:** [data]
**Condições de prazo:**
- [Condição 1 — ex: receber acessos até X]
- [Condição 2 — ex: feedback em até X dias úteis]
---
## 5. Investimento
### 5.1 Resumo de valores
| Serviço | Valor |
|---------|-------|
| [Fase 1 / componente 1] | [X EUR] |
| [Fase 2 / componente 2] | [X EUR] |
| [Manutenção mensal] | [X EUR/mês] |
| **Total projecto** | **[X EUR]** |
*Valores sem IVA. IVA à taxa legal em vigor (23%).*
### 5.2 Condições de pagamento
- [X]% na assinatura — [valor EUR]
- [X]% na entrega de [milestone] — [valor EUR]
- [X]% na conclusão e aprovação final — [valor EUR]
### 5.3 Validade da proposta
Esta proposta é válida até **[data]**. Após esta data os valores poderão ser revistos.
---
## 6. Próximos Passos
Para avançar com este projecto:
1. **Aprovação** — responder a este email com "aprovado" ou solicitar reunião para esclarecimentos
2. **Contrato** — envio de contrato para assinatura em [X dias úteis]
3. **Pagamento inicial** — processamento do primeiro pagamento
4. **Kickoff** — reunião de arranque em [X dias após pagamento]
**Contacto:** Emanuel Almeida | emanuel@descomplicar.pt | 911 510 005
---
## 7. Sobre a Descomplicar
A Descomplicar é uma empresa portuguesa especializada em crescimento digital para PMEs.
**O que fazemos:** Desenvolvimento web, automação de processos, integração de sistemas e consultoria digital.
**Experiência relevante:**
- [Projecto ou cliente relevante 1]
- [Projecto ou cliente relevante 2]
**Website:** descomplicar.pt | **NIF:** 514 785 691
---
*Proposta PROP-[YYYY]-[NNN] | [Cliente] | YYYY-MM-DD | Descomplicar®*
```
---
## Template 3: PROC Operacional
```markdown
---
title: [Título do Procedimento]
date: YYYY-MM-DD
type: procedimento
status: draft
dept_id: [1-7]
desk_dept_id: [1-7]
desk_dept_name: [D1-Comercial | ... | D7-Tecnologia | Cross-Departamental]
codigo: [DEPT]-[TEMA]-[NUM]
tags: [tag1, tag2, tag3]
---
# [Título do Procedimento]
**Código:** [DEPT]-[TEMA]-[NUM] | **Departamento:** [Nome] | **Status:** Draft
**Criado:** YYYY-MM-DD | **Revisão:** [data da próxima revisão]
---
## 1. Objectivo
[Uma ou duas frases que descrevem o que este procedimento permite fazer e qual o resultado esperado ao segui-lo.]
---
## 2. Âmbito
### Aplica-se a:
- [Situação ou contexto onde usar este PROC]
- [Quem executa este procedimento]
- [Frequência de execução]
### Não se aplica a:
- [Situação excluída — e qual PROC usar em alternativa]
---
## 3. Pré-requisitos
| Requisito | Descrição | Como verificar |
|-----------|-----------|----------------|
| [Acesso X] | [Para quê] | [Onde confirmar] |
| [Ferramenta Y] | [Versão mínima] | [Comando de verificação] |
| [Conhecimento Z] | [Nível esperado] | [PROC ou doc de referência] |
---
## 4. Procedimento
### Passo 1: [Nome descritivo do passo]
**Objectivo:** [O que se consegue neste passo]
**Acções:**
1. [Acção concreta com comando se aplicável]
2. [Acção seguinte]
3. [Acção final do passo]
**Exemplo:**
```bash
# Comando de exemplo (se técnico)
exemplo-comando --opcao valor
```
**Validação:** [Como confirmar que este passo foi bem-sucedido]
---
### Passo 2: [Nome descritivo do passo]
**Objectivo:** [O que se consegue neste passo]
**Acções:**
1. [Acção concreta]
2. [Acção seguinte]
**Validação:** [Como confirmar sucesso]
---
### Passo 3: [Nome descritivo do passo]
[...]
---
## 5. Checklist de Execução
Usar para confirmar cada passo antes de avançar:
- [ ] Pré-requisitos verificados
- [ ] Passo 1 concluído e validado
- [ ] Passo 2 concluído e validado
- [ ] Passo 3 concluído e validado
- [ ] Resultado final validado
- [ ] Tarefa Desk CRM actualizada (se aplicável)
- [ ] Comentário HTML adicionado (se aplicável)
---
## 6. Troubleshooting
| Problema | Causa provável | Solução | Escalação |
|----------|----------------|---------|-----------|
| [Erro ou situação X] | [Porquê acontece] | [Passos para resolver] | [Quem contactar se não resolver] |
| [Erro ou situação Y] | [Porquê acontece] | [Passos para resolver] | [Quem contactar] |
---
## 7. Métricas e Validação
| Métrica | O que mede | Target | Como medir |
|---------|------------|--------|------------|
| [Tempo de execução] | Eficiência do processo | < [X min] | Cronometrar na primeira execução |
| [Taxa de sucesso] | Fiabilidade | > [X%] | Registo de execuções |
---
## 8. Referências Cruzadas
**Procedimentos relacionados:**
- [PROC-Outro.md](../PROC-Outro.md) — [Quando usar em vez deste]
- [PROC-Dependente.md](../PROC-Dependente.md) — [Executar antes/depois]
**Skills relacionadas:**
- `/skill-name` — [Para que serve em relação a este PROC]
**Documentação externa:**
- [Nome da doc](URL) — [O que cobre]
**Quick Reference:**
- `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-[Tema].md`
---
## 9. Histórico de Revisões
| Data | Versão | Autor | Alterações |
|------|--------|-------|------------|
| YYYY-MM-DD | 1.0 | Emanuel Almeida | Criação inicial |
---
**[Título] | Código: [DEPT]-[TEMA]-[NUM] | [Departamento]**
**Última actualização:** YYYY-MM-DD
```
---
*Templates spec-coauthor v1.0.0 | 2026-03-10 | Plugin gestao | Descomplicar®*
+125
View File
@@ -0,0 +1,125 @@
---
name: task-state
description: Gestão de estado persistente de tarefas entre sessões. Cria, actualiza e lê .task-state.md para tarefas complexas. Usar quando tarefa tem >2 sessões, múltiplos ficheiros, ou risco de perder contexto por compaction.
context: fork
layer: wiki
---
# /task-state — Gestão de Estado de Tarefa
Persiste decisões, ficheiros e checkpoints entre sessões. Sobrevive a context compaction.
---
## Quando usar
**Usar quando:**
- Tarefa com >1 sessão de trabalho
- Múltiplos ficheiros a modificar (>3)
- Risco de context compaction apagar contexto crítico
- Tarefas que requerem aprovação por checkpoint
**Não usar quando:**
- Tarefas de <30 minutos
- Edições simples de 1-2 ficheiros
- Respostas a perguntas
---
## Comandos
### /task-state init
Cria `.task-state.md` no directório actual baseado no template.
```bash
# Verificar se já existe
[ -f ".task-state.md" ] && echo "AVISO: já existe — usar /task-state update" && exit 1
# Copiar template
cp ~/.claude-work/task-state-template.md .task-state.md
echo "Criado: .task-state.md"
```
Após criar, preencher os campos de Identificação manualmente.
### /task-state read
Lê e apresenta o estado actual — útil ao retomar uma tarefa interrompida:
```bash
cat .task-state.md
```
Ao retomar: ler "Próximo passo imediato" e "Bloqueantes actuais" primeiro.
### /task-state checkpoint N
Marca checkpoint N como concluído:
```bash
# Exemplo: marcar checkpoint 2 como feito
sed -i "s/- \[ \] Sub-issue 2:/- [x] Sub-issue 2:/" .task-state.md
```
### /task-state update
Actualizar campos específicos ao longo do trabalho:
- Adicionar ficheiros modificados à lista
- Registar decisões tomadas
- Actualizar "Próximo passo imediato"
- Adicionar bloqueantes encontrados
---
## Padrão Vertical Plans
Diferença para planos monolíticos:
| Monolítico | Vertical Plans |
|------------|----------------|
| Lê o plano completo | Divide em sub-issues com checkpoint |
| Implementa tudo | Implementa 1 sub-issue |
| Verifica no final | Testa + valida antes de avançar |
| Falha tarde | Falha cedo e barato |
**Regra:** Nunca avançar para sub-issue N+1 sem N estar testado e marcado.
---
## Integração com writing-plans
1. `/writing-plans` → cria plano com sub-issues e critérios de sucesso
2. `/task-state init <nome>` → cria ficheiro de estado
3. A cada sub-issue: implementar → testar → `/task-state checkpoint N` → commit
4. Se sessão interromper: ler `.task-state.md` → continuar no "Próximo passo imediato"
---
## Template
O template está em `~/.claude-work/task-state-template.md`.
Actualizar o template para reflectir necessidades do projecto actual.
---
## Contexto crítico — o que documentar
Documentar TUDO que está só na cabeça do Emanuel e que o agente precisa:
- "Este servidor é produção — não tocar sem aprovação"
- "O cliente X é sensível a preços — nunca mencionar concorrentes"
- "A BD usa UTF-8 mas tem registos ISO-8859 antigos — cuidado com migrações"
**Fonte:** Regra #361 — agente apagou BD de produção porque "é live" estava só na cabeça do humano.
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+123
View File
@@ -0,0 +1,123 @@
---
name: tasks-overview
description: Visão geral de tarefas pendentes, atrasadas e em curso do Desk CRM. Organiza por prioridade e projecto, sugere workflows relevantes. Usar quando "tarefas", "tasks", "pendentes", "overdue", "atrasadas", "o que temos para fazer".
layer: wiki
---
# /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®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+240
View File
@@ -0,0 +1,240 @@
---
name: time
description: Gestão de tempo integrada com Desk CRM. Alertas >4h, total semanal, integração worklog. Usar quando "time", "timer", "horas", "timesheet", "start", "stop", "tempo".
disable-model-invocation: true
layer: wiki
---
# /time v2.0 - Gestão de Tempo
Timer integrado com Desk CRM. Alertas inteligentes, resumo semanal.
---
## Novidades v2.0
- **Alerta >4h:** Perguntar se timer ainda activo
- **Total semana:** Mostrar horas Seg-Dom no status
- **Link worklog:** Oferecer criar worklog ao parar
- **Verificação:** Comparar estado local vs Desk
---
## Comandos
| Comando | Função |
|---------|--------|
| `/time` | Ver status (timer + semana) |
| `/time start <task_id>` | Iniciar timer |
| `/time stop` | Parar timer actual |
| `/time switch <task_id>` | Trocar para outra tarefa |
| `/time log <hours> <task_id>` | Entrada manual |
---
## Protocolo
### /time (Status)
```
1. Obter hora actual via mcp__mcp-time__current_time
2. Ler ~/.claude-work/active-timer.json
3. Se timer activo:
a. Calcular duração
b. SE >4h: Mostrar alerta "Timer activo há Xh. Ainda a trabalhar?"
4. Obter timesheets da semana:
mcp__desk-crm-v3__get_timesheets_advanced({
staff_id: 1,
start_date: segunda_da_semana,
end_date: domingo_da_semana
})
5. Mostrar resumo
```
**Output:**
```markdown
## ⏱️ Timer Activo
🟢 #1446 - Documentação Skills
Projecto: Stack Workflow (#65)
Iniciado: 14:30 (há 2h 15m)
## 📊 Esta Semana (03-09 Fev)
| Dia | Horas |
|-----|-------|
| Seg | 6h 30m |
| Ter | 7h 15m |
| Qua | 4h 45m ← Hoje |
| **Total** | **18h 30m** |
```
**Se timer >4h:**
```markdown
⚠️ Timer activo há **5h 30m**
Ainda a trabalhar em #1446?
- [Sim, continuar]
- [Parar timer]
- [Ajustar tempo]
```
---
### /time start <task_id>
```
1. Verificar se já existe timer activo
- Se sim: "Já tens timer em #X. Parar primeiro?"
2. Obter detalhes da tarefa:
mcp__desk-crm-v3__get_task({ task_id })
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"
})
5. Guardar estado local:
~/.claude-work/active-timer.json
6. Confirmar
```
**Ficheiro estado:**
```json
{
"task_id": 1446,
"task_name": "Documentação Skills",
"project_id": 65,
"project_name": "Stack Workflow",
"started_at": "2026-02-05T14:30:00Z",
"staff_id": 1
}
```
---
### /time stop
```
1. Ler estado local
2. SE vazio: "Sem timer activo"
3. Calcular duração
4. Parar timer no Desk:
mcp__desk-crm-v3__stop_timer({
task_id: task_id,
staff_id: 1
})
5. Limpar estado local
6. Perguntar: "Criar worklog? [Sim/Não]"
- Se sim: Invocar /worklog com contexto
7. Confirmar
```
**Output:**
```markdown
⏹️ Timer parado!
📋 Tarefa: #1446 - Documentação Skills
⏱️ Duração: 2h 15m
📁 Projecto: Stack Workflow
Criar worklog? [Sim] [Não]
```
---
### /time switch <task_id>
```
1. Parar timer actual (silencioso, nota: "Switched")
2. Iniciar novo timer na tarefa indicada
3. Confirmar troca
```
---
### /time log <hours> <task_id>
```
1. Validar formato horas (ex: "2h", "2.5", "2h30m")
2. Converter para decimal
3. Registar entrada manual:
mcp__desk-crm-v3__add_timesheet_entry({
task_id: task_id,
staff_id: 1,
hours: hours_decimal,
note: "Entrada manual via Claude Code"
})
4. Confirmar
```
---
## Integração /today
O `/today` deve mostrar timer activo:
```markdown
## ⏱️ Timer Activo
🟢 #1446 - Documentação (2h 15m)
```
---
## Integração /worklog
Ao parar timer, oferecer criar worklog com contexto:
- Tarefa trabalhada
- Duração
- Projecto
---
## Constantes
```javascript
const STAFF_ID = 1; // Emanuel
const AIKTOP_ID = 25; // Para comentários automáticos
const TIMER_STATE = "/home/ealmeida/.claude-work/active-timer.json";
const ALERT_HOURS = 4; // Alertar após 4h
```
---
## Anti-Patterns
- **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
---
## Changelog
### v2.0.0 (2026-02-05)
- Alerta se timer >4h
- Mostrar total horas da semana no status
- Integração com /workl
+186
View File
@@ -0,0 +1,186 @@
---
title: Setup MCPs para /today
date: 2025-01-21
status: activo
layer: wiki
---
# Setup MCPs para /today
## Estado Actual
| MCP | Estado | Notas |
|-----|--------|-------|
| desk-crm-v3 | ✅ Activo | Tickets, projectos, tarefas |
| filesystem | ✅ Activo | Notas Obsidian |
| mem0 | ✅ Activo | Persistência |
| imap | ✅ Activo | 12 contas email |
| google-workspace | ⏸️ Opcional | Calendar (se necessário) |
---
## MCP IMAP (Principal)
### Contas Configuradas (12)
```
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
```
### Ferramentas Disponíveis
| Ferramenta | Função |
|------------|--------|
| `imap_list_accounts` | Listar contas disponíveis |
| `imap_list_folders` | Listar pastas de uma conta |
| `imap_list_emails` | Listar emails de uma pasta |
| `imap_read_email` | Ler email por UID |
| `imap_search_emails` | Pesquisar emails |
| `imap_move_email` | Mover email entre pastas |
| `imap_delete_email` | Eliminar email |
### Acções Automáticas Diárias
1. **SPAM** → `imap_delete_email`
2. **Promocionais** → `imap_move_email` para "Promotions"
3. **Facturas pagas** → Reencaminhar para contabilidade@descomplicar.pt
4. **Prioritários** → Listar no relatório
### Regras de Triagem
Ver: `config/email-triage-rules.md`
---
## Google Workspace MCP (Opcional)
### Localização
```
~/mcp-servers/google_workspace_mcp/
```
### Capacidades
- **Gmail**: Pesquisa, envio, gestão de emails
- **Calendar**: Eventos, reuniões, agenda
- **Drive**: Ficheiros (opcional)
- **Docs/Sheets**: Documentos (opcional)
### Requisitos para Activar
1. **Google Cloud Console**
- Criar projecto ou usar existente
- Activar Gmail API
- Activar Calendar API
- Criar credenciais OAuth (Desktop App)
2. **Credenciais necessárias**
```
GOOGLE_OAUTH_CLIENT_ID=xxx
GOOGLE_OAUTH_CLIENT_SECRET=xxx
USER_GOOGLE_EMAIL=emanuel@descomplicar.pt
```
3. **Ficheiros existentes**
- `client_secret.json` ✅ Existe
- `token.json` ✅ Existe
- `.env` ✅ Existe
### Verificar Estado
```bash
cd ~/mcp-servers/google_workspace_mcp
cat .env
# Verificar se credenciais estão preenchidas
```
### Adicionar ao Claude settings.json
```json
{
"mcpServers": {
"google-workspace": {
"command": "python",
"args": ["-m", "workspace_mcp"],
"cwd": "/home/ealmeida/mcp-servers/google_workspace_mcp",
"env": {
"GOOGLE_OAUTH_CLIENT_ID": "...",
"GOOGLE_OAUTH_CLIENT_SECRET": "...",
"USER_GOOGLE_EMAIL": "emanuel@descomplicar.pt"
}
}
}
}
```
---
## Passos para Completar Setup
### 1. Verificar credenciais Google
```bash
cd ~/mcp-servers/google_workspace_mcp
cat .env
cat client_secret.json
```
### 2. Testar MCP localmente
```bash
cd ~/mcp-servers/google_workspace_mcp
source venv/bin/activate
python -m workspace_mcp --test
```
### 3. Adicionar ao Claude
Editar `~/.claude/settings.json` com configuração acima.
### 4. Reiniciar Claude Code
```bash
claude --version
# Fechar e reabrir
```
### 5. Testar no /today
```bash
# Executar /today e verificar se Gmail/Calendar funcionam
```
---
## Funcionalidades Quando Activo
### Gmail
- `list_emails` - Listar emails
- `search_emails` - Pesquisar emails
- `get_email` - Ver email específico
- `send_email` - Enviar email
- `create_draft` - Criar rascunho
### Calendar
- `list_events` - Listar eventos
- `get_event` - Ver evento
- `create_event` - Criar evento
- `update_event` - Actualizar evento
- `delete_event` - Eliminar evento
---
## Alternativa: MCP Gmail Dedicado
Se preferir usar apenas Gmail (mais leve):
```
~/mcp-servers/mcp-gmail.tar.gz
```
Extrair e configurar separadamente.
---
**Última actualização**: 2025-01-21
+301
View File
@@ -0,0 +1,301 @@
---
name: today
description: Checkup diário - dashboard agregador que lê resultados dos agentes cron locais (desktop) e recolhe dados frescos via skills interactivas. Usar quando "checkup", "hoje", "today", "rotina", início de dia.
context: fork
layer: wiki
---
# /today v12.0 - Checkup Diario (Agregador)
Le resultados dos agentes cron locais (desktop, crontab ealmeida) + invoca skills interactivas. Nao duplica trabalho automatizado.
---
## Arquitectura
```
CRON (desktop local, crontab ealmeida) /today (interactivo, sob pedido)
├── imap-triage (4h) ├── Le logs locais do cron
├── auto-expense (4h +15min) ├── /daily-digest (dados frescos)
├── ticket-triage (4h +30min) ├── /tasks-overview (dados frescos)
├── aiktop-tasks (15min) ├── /cleanup-downloads (se necessario)
├── infra-check (diario 7h) ├── Specs/Sprints scan
├── wp-update (segunda 23h) ├── Rotinas especiais por dia
├── intelligence-* (researcher/scorer/ └── Dashboard + Obsidian + Mem0
│ selector/publisher)
└── weekly-digest-podcast (quinta 20h)
```
---
## Regra Fundamental
> Fases 1-2 sao **silenciosas**. Executar tudo antes de mostrar output.
> O utilizador so ve o dashboard final.
---
## Protocolo
### Fase 0: Verificacoes
```
1. mcp__mcp-time__current_time -> data, dia da semana
2. mcp__mem_search_memories("today checkup YYYY-MM-DD")
-> Se ja existe hoje: perguntar se quer re-executar
```
### Fase 1: Ler resultados dos agentes cron (silencioso)
```
3. Ler logs LOCAIS (Bash tail — sem SSH, tudo corre no desktop):
Base: /media/ealmeida/Dados/Dev/claude_automations_dev/
a) IMAP (ultimo report):
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/imap-triage/imap-triage.log
cat ~/.claude-work/today-imap-DD-MM-YYYY.json (se existir)
b) Ticket triage (ultimo log):
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/ticket-triage/ticket-triage.log
c) Auto-expense (ultimo log):
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/auto-expense/auto-expense.log
d) Infra check (ultimo log):
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/infra-check/infra-check.log
e) AikTop tasks (ultimo log):
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/aiktop-tasks/aiktop-tasks.log
f) SE segunda — wp-update (ultimo log):
tail -50 /media/ealmeida/Dados/Dev/claude_automations_dev/wp-update/wp-update.log
g) Intelligence pipeline:
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/daily-selector/daily-selector.log
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-publisher/intelligence-publisher.log
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-researcher/intelligence-researcher.log
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-scorer/intelligence-scorer.log
h) HEARTBEAT WP — ultimo post em descomplicar.pt categoria 1188 (noticias):
mcp__ssh-unified__ssh_execute(server="server", command="cd /home/ealmeida/public_html && wp post list --post_type=post --category=1188 --posts_per_page=1 --fields=ID,post_title,post_date --format=csv --allow-root 2>&1 | tail -2")
-> Calcular idade do ultimo post
-> Se >26h sem post novo: ALERTA "Requer Atencao Urgente" + contexto:
* Pipeline deveria publicar ate 5 noticias/dia (selector 06:30 + slots 09/11/13/15:30/17:30)
* Verificar logs daily-selector + publisher (passo g)
* Stock Supabase (base de dados própria do pipeline de notícias): scored>=7 count via curl REST
* Verificar se desktop teve downtime (uptime / journalctl) — agentes correm no desktop local
4. DETECTAR PROBLEMAS nos logs:
- Cron nao correu (log desactualizado >8h)
- Exit codes != 0
- Erros ou falhas nos logs
- HEARTBEAT WP >26h sem post novo em cat 1188
-> Adicionar a seccao "Requer Atencao Urgente"
4b. VERIFICAR FORNECEDORES AUTO-CRIADOS:
Ler ~/.claude-work/fornecedores-iva.json
Filtrar entradas com "auto_proposto": true
Para cada entrada extrair: nome, dominio (chave), politica, confianca, despesas_count
-> Se existirem: adicionar secção "Fornecedores Auto-Criados" no dashboard (ver formato abaixo)
```
### Fase 2: Recolha de dados frescos (silencioso)
```
5. Invocar /daily-digest
-> Timer, tickets, facturas, leads, propostas, agenda
-> Output: dashboard markdown
6. Invocar /tasks-overview
-> Tarefas overdue, pendentes, em curso, workflows sugeridos
-> Output: tarefas markdown
7. SE >10 ficheiros em ~/Transferencias:
-> Invocar /cleanup-downloads
```
### Fase 2b: Sprint/Spec Activos (silencioso)
```
8. Glob: /media/ealmeida/Dados/Dev/**/SPEC.md (profundidade max 3)
-> Para cada encontrado: Ler frontmatter (15 linhas)
-> Filtrar: status != "completed"
-> Extrair: titulo (linha # SPEC:), status, weight, scope done/total
9. Glob: /media/ealmeida/Dados/Dev/**/SPRINT.md
-> Para cada encontrado: Ler frontmatter
-> Filtrar: status == "active"
-> Extrair: sprint_id, tasks done/total, checkpoint_done, end_date
```
### Fase 2c: Rotinas Especiais
```
10. SE SEGUNDA:
-> Planeamento semanal (tarefas da semana + capacidade)
11. SE SEXTA:
-> Sugerir manutencao e revisao semanal
```
### Fase 3: Output Final
```
12. AGREGAR resultados de cron + skills:
- Logs do cron (Fase 1)
- Dados frescos do /daily-digest e /tasks-overview (Fase 2)
- Specs/Sprints (Fase 2b)
13. DASHBOARD ao utilizador (formato abaixo)
14. CRIAR NOTA OBSIDIAN:
Path: /media/ealmeida/Dados/Hub/00-Inbox/DD-MM-YYYY-checkup.md
Conteudo: dashboard completo
15. GUARDAR em Mem0 (via MCP gateway):
mcp__mem_save_memory({
text: "Checkup diario DD-MM-YYYY - X tickets, Y tarefas, Z urgentes, cron OK/FALHA"
})
```
---
## Formato Dashboard
```markdown
## Checkup Diario - DD-MM-YYYY (Dia-da-Semana)
---
## Requer Atencao Urgente
[Alertas: cron falhado, erros infra, seguranca, notificacoes criticas]
---
## Fornecedores Auto-Criados (pendente validação)
[Omitir secção se nenhum fornecedor tem auto_proposto=true]
| Fornecedor | Domínio | Política | Confiança | Despesas | Acção |
|------------|---------|----------|-----------|----------|-------|
| [nome] | [dominio] | [politica] | [confianca] | [despesas_count]/3 | [— se alta, "rever" se baixa] |
Nota: Promovidos automaticamente após 3 despesas. Confiança "baixa" = fallback EXTRA_UE aplicado — rever manualmente.
---
## 3 Prioridades Hoje
1. [ ] [Mais urgente]
2. [ ] [Segunda]
3. [ ] [Terceira]
---
## Workflows Sugeridos
[Do /tasks-overview]
---
## Sprint / Spec Activos
[Projectos com spec/sprint activo: nome, progresso, checkpoint]
[Se nenhum: "Nenhum sprint/spec activo"]
---
## Resumo do Dia
[Do /daily-digest: timer, tickets, facturas, tarefas, leads, agenda]
---
## Agentes Cron (desktop local)
| Agente | Ultima execucao | Status | Resumo |
|--------|----------------|--------|--------|
| imap-triage | HH:MM | OK/FALHA | X contas, Y emails |
| auto-expense | HH:MM | OK/SKIP | Z despesas criadas |
| ticket-triage | HH:MM | OK/FALHA | W tickets processados |
| aiktop-tasks | HH:MM | OK/FALHA | N tarefas executadas |
| infra-check | HH:MM | OK/FALHA | X/4 MCPs operacionais |
| wp-update [se seg] | HH:MM | OK/FALHA | X/16 sites actualizados |
---
## Auto-Processamento (ultimas 24h)
[Resumo agregado: despesas criadas, tickets fechados, emails limpos]
```
---
## Nota Obsidian
```yaml
---
title: Checkup DD-MM-YYYY
date: DD-MM-YYYY
type: checkup
status: active
---
```
Filename: `DD-MM-YYYY-checkup.md` (Regra #45: formato DD-MM-YYYY)
---
## Anti-Patterns
- NUNCA invocar /ticket-triage, /imap-triage, /auto-expense, /infra-check, /wp-update (correm no cron)
- NUNCA mostrar output antes de terminar Fase 1 e 2
- NUNCA mostrar mais de 3 prioridades (PHDA)
- NUNCA executar sem verificar data/hora primeiro
- SEMPRE ler logs do cron antes de mostrar dashboard
- SEMPRE alertar se algum agente cron nao correu nas ultimas 8h
- NUNCA usar `mem0` MCP para o checkup — deprecated para memória de agentes; usar `mem0` (`mcp__mem_*`)
---
## Referencia
| Componente | Tipo | Responsabilidade |
|-----------|------|-----------------|
| `imap-triage` | Cron desktop (*/4h) | Triagem IMAP 13 contas + dedup Supabase (BD própria do pipeline IMAP, não é memória de agente) |
| `auto-expense` | Cron desktop (15 */4h) | Criacao automatica de despesas |
| `ticket-triage` | Cron desktop (30 */4h) | Auto-process tickets (SPAM, facturas) |
| `aiktop-tasks` | Cron desktop (*/15min) | Executa tarefas AikTop do Desk CRM |
| `infra-check` | Cron desktop (07h) | Health check gateway + MCPs |
| `wp-update` | Cron desktop (seg 23h) | Actualizacoes WordPress 16 sites |
| `weekly-digest-podcast` | Cron desktop (quinta 20h) | Digest semanal para podcast |
| `improvement-evaluator-v2` | Cron Hermes (diário 07:00) | Lê worklogs/#33 → melhorias em BD; ticket semanal seg top 5 (job d398b5e2c3be) |
| `gitea-ci-cleaner` | Cron desktop (45 */4h) | Limpeza de runs CI Gitea |
| `daily-selector` | Cron desktop (06:30) | Selector ate 5 noticias/dia diversas → status=scheduled |
| `intelligence-publisher` | Cron desktop (5 slots 09/11/13/15:30/17:30) | Publica slots scheduled em descomplicar.pt |
| `intelligence-researcher` | Cron desktop (9/14/20) | Fetch 214 RSS → Supabase (BD própria do pipeline de notícias, não é memória de agente) |
| `intelligence-scorer` | Cron desktop (0/30 min) | Score OpenRouter gpt-oss-20b |
| `HEARTBEAT WP` | Check ao vivo | `wp post list cat=1188` → idade do ultimo post. Alerta se >26h |
| `/daily-digest` | Skill (interactivo) | Timer, tickets, facturas, leads, agenda |
| `/tasks-overview` | Skill (interactivo) | Tarefas pendentes/overdue + workflows |
| `/cleanup-downloads` | Skill (interactivo) | Limpeza pasta Transferencias |
| `/spec` + `/sprint` | Scan local | Specs e sprints activos |
Repo agentes: `git.descomplicar.pt/ealmeida/claude_automations_dev`
---
## Self-Healing
Antes de executar, ler `~/.claude-work/healing/today.jsonl` (se existir). Cada linha é um padrão de erro conhecido:
```json
{"date":"YYYY-MM-DD","issue":"descrição do problema","fix":"como evitar","source":"user|auto"}
```
Se encontrares um padrão relevante ao contexto actual, aplica o fix preventivamente. Após cada erro ou correcção do utilizador nesta skill, **adicionar nova linha** ao healing log com o padrão aprendido.
---
*Skill v12.0.0 | 01-07-2026 | Descomplicar® — memória do checkup migrada de mem0 (deprecated) para Mem0 (mcp__mem_*)*
## Healing Log
<!-- Registo automático de erros e correcções nesta skill -->
@@ -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
+91
View File
@@ -0,0 +1,91 @@
# /today v11.0 - Checkup Diario (Orquestrador)
Executa o checkup diario lendo logs locais dos agentes + recolhe dados frescos.
> NOTA CRITICA: CT 102 abatido em 20-04-2026. Os agentes cron correm como systemd user timers
> no desktop. NUNCA usar ssh_execute(server="dev"). Ler logs locais via tail/journalctl.
## Passo 1: Verificar data e ultima execucao
```
mcp__mcp-time__current_time → data, dia da semana
mcp__mem_search_memories("today checkup YYYY-MM-DD")
Se ja existe hoje → perguntar se quer re-executar
```
## Passo 2: Fase 1 - Ler logs locais dos agentes (silencioso)
Base: /media/ealmeida/Dados/Dev/claude_automations_dev/
```bash
# IMAP Triage
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/imap-triage/imap-triage.log
cat ~/.claude-work/today-imap-$(date +%d-%m-%Y).json 2>/dev/null
# Ticket Triage
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/ticket-triage/ticket-triage.log 2>/dev/null
# Auto-Expense
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/auto-expense/auto-expense.log 2>/dev/null
# Infra Check
tail -30 /media/ealmeida/Dados/Dev/claude_automations_dev/infra-check/infra-check.log 2>/dev/null
# AikTop Tasks
tail -20 /media/ealmeida/Dados/Dev/claude_automations_dev/aiktop-tasks/aiktop-tasks.log 2>/dev/null
# WP Update (apenas se segunda-feira)
tail -50 /media/ealmeida/Dados/Dev/claude_automations_dev/wp-update/wp-update.log 2>/dev/null
# Intelligence pipeline (status)
tail -15 /media/ealmeida/Dados/Dev/claude_automations_dev/daily-selector/daily-selector.log 2>/dev/null
tail -10 /media/ealmeida/Dados/Dev/claude_automations_dev/intelligence-publisher/intelligence-publisher.log 2>/dev/null
```
Verificar estado systemd para confirmar ultima execucao:
```bash
journalctl --user -u imap-triage.service -u ticket-triage.service -u auto-expense.service \
-u infra-check.service -u aiktop-tasks.service --since "8 hours ago" \
--no-pager -n 5 --output=short-precise
```
Para cada agente: verificar se correu nas ultimas 8h (infra: 24h), detectar erros.
Adicionar alertas criticos a "Requer Atencao Urgente".
## Passo 3: Fase 2 - Recolha de dados frescos (silencioso)
Invocar em paralelo:
1. `/daily-digest` → timer, tickets, facturas, leads, propostas, agenda
2. `/tasks-overview` → tarefas overdue/pendentes/em curso + workflows sugeridos
Verificar `~/Transferencias` — se >10 ficheiros, invocar `/cleanup-downloads`.
## Passo 4: Fase 2b - Specs e Sprints activos (silencioso)
```bash
find /media/ealmeida/Dados/Dev -name "SPEC.md" -maxdepth 4 2>/dev/null
find /media/ealmeida/Dados/Dev -name "SPRINT.md" -maxdepth 4 2>/dev/null
```
Para cada encontrado: ler frontmatter (primeiras 15 linhas), filtrar status != "completed"/"archived".
Extrair: titulo, status, progresso done/total.
## Passo 5: Rotinas especiais por dia
- Segunda: planeamento semanal (tarefas + capacidade)
- Sexta: sugerir manutencao semanal
## Passo 6: Dashboard final + guardar
Agregar todos os resultados e mostrar dashboard (formato no SKILL.md).
Criar nota Obsidian:
- Path: `/media/ealmeida/Dados/Hub/00-Inbox/DD-MM-YYYY-checkup.md` (formato DD-MM-YYYY)
- Frontmatter: title, date, type: checkup, status: active
Guardar em Mem0:
```
mcp__mem_save_memory({
text: "Checkup diario DD-MM-YYYY - X tickets, Y tarefas, cron OK/FALHA"
})
```
@@ -0,0 +1,140 @@
---
title: "Checkup Diário - {{DATE}}"
date: {{DATE}}
type: daily
tags: [diario, checkup, {{WEEKDAY}}]
aliases: ["{{DATE}}"]
layer: wiki
---
# 📅 {{DATE}} - {{WEEKDAY}}
## 🎫 Tickets
### Eliminados (notificações sem valor)
{{#DELETED_TICKETS}}
- 🗑️ #{{ID}} - {{SUBJECT}}
{{/DELETED_TICKETS}}
{{^DELETED_TICKETS}}
- Nenhum ticket eliminado
{{/DELETED_TICKETS}}
### Processados Automaticamente (Pagamentos → Contabilidade)
{{#PAYMENT_TICKETS}}
- [x] [[Ticket-{{ID}}|#{{ID}}]] - {{SUBJECT}} → **Fechado**
{{/PAYMENT_TICKETS}}
{{^PAYMENT_TICKETS}}
- Nenhum ticket de pagamento processado
{{/PAYMENT_TICKETS}}
### Urgentes
{{#URGENT_TICKETS}}
- [!] [[Ticket-{{ID}}|#{{ID}}]] - {{CLIENT}} - {{SUBJECT}}
{{/URGENT_TICKETS}}
{{^URGENT_TICKETS}}
- Nenhum ticket urgente
{{/URGENT_TICKETS}}
### Abertos (revisão manual)
{{#OPEN_TICKETS}}
- [ ] [[Ticket-{{ID}}|#{{ID}}]] - {{CLIENT}} - {{SUBJECT}}
{{/OPEN_TICKETS}}
{{^OPEN_TICKETS}}
- Nenhum ticket aberto
{{/OPEN_TICKETS}}
**Resumo**: {{TICKETS_COUNT}} tickets | {{PAYMENT_COUNT}} pagamentos fechados | {{URGENT_COUNT}} urgentes
---
## 📧 Emails (12 contas)
### Triagem Automática
| Acção | Quantidade |
|-------|------------|
| Spam eliminado | {{SPAM_DELETED}} |
| Promocionais arquivados | {{PROMOS_ARCHIVED}} |
| Facturas → Contabilidade | {{INVOICES_FORWARDED}} |
### Prioritários (revisão manual)
{{#PRIORITY_EMAILS}}
- [ ] **{{ACCOUNT}}**: {{SUBJECT}} - {{FROM}}
{{/PRIORITY_EMAILS}}
{{^PRIORITY_EMAILS}}
- Nenhum email prioritário pendente
{{/PRIORITY_EMAILS}}
### Contas verificadas
{{#ACCOUNTS_STATUS}}
- {{ACCOUNT}}: {{UNREAD}} não lidos
{{/ACCOUNTS_STATUS}}
---
## 📆 Agenda
{{#CALENDAR_EVENTS}}
- {{TIME}} - {{TITLE}}
{{/CALENDAR_EVENTS}}
{{^CALENDAR_EVENTS}}
- Sem compromissos agendados
{{/CALENDAR_EVENTS}}
---
## 🎯 Prioridades do Dia
> [!important] Top 3
> 1. {{PRIORITY_1}}
> 2. {{PRIORITY_2}}
> 3. {{PRIORITY_3}}
### Blocos de Foco Sugeridos
- [ ] 09:00-11:00 - Trabalho profundo
- [ ] 14:00-16:00 - Tarefas administrativas
- [ ] 16:00-17:00 - Comunicação/emails
---
## ⏰ Deadlines Esta Semana
{{#DEADLINES}}
- **{{DATE}}**: {{PROJECT}} - {{DESCRIPTION}}
{{/DEADLINES}}
{{^DEADLINES}}
- Sem deadlines esta semana
{{/DEADLINES}}
---
## 🔧 Manutenção (se Sexta-feira)
{{#IS_FRIDAY}}
### WordPress - Rede de Sites
- [ ] Verificar actualizações
- [ ] Executar actualizações
- [ ] Checkup segurança
- [ ] Testar funcionamento
**Sites**: descomplicar.pt, emanuelalmeida.pt, carstuff.pt, familyclinic.pt, espiralsenior.pt, ignitionvortex.pt, karateclubedegaia.com, solarfvengenharia.com, watercontrol.pt, hub.descomplicar.pt
{{/IS_FRIDAY}}
---
## 📝 Notas do Dia
> [!note] Observações
> (espaço para notas durante o dia)
---
## ✅ Revisão Final
- [ ] Tickets urgentes tratados
- [ ] Emails respondidos
- [ ] Prioridades concluídas
- [ ] Próximo dia planeado
---
*Gerado automaticamente por `/today` - {{TIMESTAMP}}*
+189
View File
@@ -0,0 +1,189 @@
---
name: validate-component
description: Valida skills e agents para alinhamento com procedimentos Hub. Verifica se componente referencia procedimentos (não duplica) e segue padrão de referenciação. Usar quando "validar skill", "verificar agent", "audit component", antes de deploy.
layer: wiki
---
# /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ã
+108
View File
@@ -0,0 +1,108 @@
---
name: worklog
description: Registo de trabalho e reflexão unificado. Analisa sessão, regista trabalho, identifica padrões, sugere acções. /reflect é alias (mesmo resultado). Variantes: deep (análise profunda), week (revisão semanal). Usar quando "worklog", "reflect", "reflexão", "registar trabalho", "log", ao parar timer.
layer: wiki
---
# /worklog v4.1 - Registo de Trabalho + Reflexão
**⚠️ EXECUÇÃO INLINE OBRIGATÓRIA — NUNCA FORK**
Quando `/worklog` ou `/reflect` é invocado, o agente principal executa o protocolo **directamente, in-situ, no thread principal**. Proibido:
- Chamar `Skill tool` para `worklog`/`reflect` (fork perde contexto conversacional — histórico de mensagens, Edit/Write calls, MCP tool calls, decisões já tomadas)
- Chamar `Agent tool` / Task subagente para executar o worklog (mesma razão)
O histórico da conversa actual é a **fonte primária** do worklog. Só o agente principal o tem. Qualquer fork devolve "nothing to log" e falha silenciosamente o registo — anti-padrão verificado empiricamente em 2026-04-23.
Skill unificada: regista trabalho, analisa sessão, sugere acções, guarda memória.
**`/reflect` = alias de `/worklog`** (mesmo resultado).
---
## Comandos
| Comando | Função |
|---------|--------|
| `/worklog` | Registo + reflexão da sessão |
| `/reflect` | Alias de `/worklog` |
| `/worklog view` | Ver últimos registos |
| `/reflect deep` | Análise profunda com histórico |
| `/reflect week` | Revisão semanal (segundas via /today) |
---
## Storage
| Tipo | Discussão | ID |
|------|-----------|-----|
| **Logs + Reflexões** | Logs | 31 |
| **Reflexões Profundas** | Reflexões | 32 |
| **Acções** | Acções de Melhoria | 33 |
**Projecto:** #65 (DES Stack Workflow) | **Staff:** 25 (AikTop)
---
## Protocolo Principal (/worklog e /reflect)
```
1. Obter hora via mcp__mcp-time__current_time
2. Verificar timer activo em ~/.claude-work/active-timer.json
3. ANALISAR sessão — FONTE PRIMÁRIA é o histórico conversacional actual do agente:
A) **Contexto conversa (OBRIGATÓRIO — FONTE PRIMÁRIA):**
O agente que executa esta skill tem, no seu próprio histórico, toda a informação que precisa.
Extrair directamente:
- Ficheiros modificados (procurar Edit/Write/MultiEdit nos tool_use da sessão)
- MCPs usados (procurar mcp__*__* tool calls)
- Erros encontrados e soluções aplicadas
- Padrões detectados, decisões arquitecturais
- Pedidos sucessivos do utilizador (sequência de mensagens user)
- Commits feitos (procurar `git commit` em tool_use)
- Subagentes dispatched (Agent tool calls)
B) **Contexto externo (COMPLEMENTAR — SEMPRE recolher):**
- git diff --stat (últimas 3h): ficheiros alterados
- git log --oneline --since="3 hours ago": commits recentes
- SQLite Observabilidade (se disponível): `~/.claude-work/sessions.db` tabela sessions com project_slug+started_at+tool_calls da sessão actual
- find 00-Inbox/ -name "worklog-$(date +%Y-%m-%d)*" -newer
- Ficheiros modificados nas últimas 3h no working directory
- Tarefas Desk com comentários criados hoje (mcp__desk-crm-v3__get_task_comments filter staff_id=1 or 25)
C) **Activity log do hook (FALLBACK — cross-session apenas):**
Usar só quando A) está genuinamente vazio (ex: /worklog invocado manualmente sem contexto activo).
- ls -lat ~/.claude-work/sessions/*.activity.log | head -5
- Escolher activity.log MAIOR modificado nas últimas 2h (>5KB)
- Ler o .json correspondente para metadata
REGRA: A) preenche o corpo do worklog. B) adiciona detalhes. C) só se A) vazio.
REGRA: Se A), B) e C) todos vazios após verificação rigorosa → NÃO gerar e reportar "nada novo para registar".
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 conversa vazia → recolher contexto externo (passo 3B)
- Se contexto externo tambem vazio → NÃO gerar
- NUNCA desistir sem verificar fontes externas primeiro
5. Gerar comentário HTML (ver formato abaixo)
6. mcp__desk-crm-v3__add_discussion_comment({
discussion_id: 31,
content: html,
staff_id: 25
})
7. SE acções sugeridas:
mcp__desk-crm-v3__add_discussion_comment({
discussion_id: 33,
content: accoes_html,
staff_id: 25
})
7b. TRIGGER improvement-evaluator no desktop (localhost):
Bash: curl -s -X POST http://localhost:8095/trigger
(falha silenciosa OK — o systemd timer apanha em 30min)
8. SE insight valioso → mcp__mem_save_memory({ text: "[resumo do insight]" })
8b. GIT CHECKPOINT (automático se em projecto git):
a. Verificar se existe `.desk-project` no directório actual (ou até 3 níveis acima)
b. Se sim: verificar se é repositório
@@ -0,0 +1,41 @@
# Worklog Background Agent Prompt
Prompt optimizado para contexto mínimo (funciona com sonnet em background).
---
## Prompt Padrão (CURTO)
```
Gera worklog no Desk CRM (discussão Logs do projecto).
1. Identifica projecto via .desk-project ou usa #65 (Stack)
2. Usa mcp__desk-crm-v3__add_discussion_comment
3. Resume trabalho em 3-5 bullets
Formato: ## HH:MM - [Titulo] + bullets + ficheiros
```
---
## Invocação via Task Tool
```javascript
Task({
subagent_type: "general-purpose",
model: "sonnet", // IMPORTANTE: não usar haiku (limite contexto)
description: "Generate worklog entry",
run_in_background: true,
prompt: "Gera worklog no Desk CRM. Identifica projecto via .desk-project ou usa #65. Adiciona comentário na discussão Logs via mcp__desk-crm-v3__add_discussion_comment."
})
```
---
## Notas de Optimização
- **Usar sonnet** (não haiku) - haiku falha com "prompt too long" em sessões longas
- **Desk CRM** - adicionar comentário via mcp__desk-crm-v3__add_discussion_comment
- **Projecto default:** #65 (Stack Descomplicar)
- **Background** - sempre run_in_background=true
```