Merge remote-tracking branch 'origin/main'
# Conflicts: # .claude-plugin/marketplace.json # .gitignore # acidaos/skills/devops/SKILL.md # acidaos/skills/docs/SKILL.md # acidaos/skills/rust-dev/SKILL.md # acidaos/skills/spoke-dev/SKILL.md # automacao/agents/automation-lead.md # automacao/agents/mcp-protocol-developer.md # automacao/agents/n8n-automation-expert.md # automacao/skills/moloni-api/SKILL.md # automacao/skills/n8n/SKILL.md # core-tools/skills/_core/SKILL.md # core-tools/skills/agent-context-injector/SKILL.md # core-tools/skills/component-generator/SKILL.md # core-tools/skills/db-maintenance-manager/SKILL.md # core-tools/skills/infrastructure-manager/SKILL.md # core-tools/skills/metrics/SKILL.md # core-tools/skills/plugin-curator/SKILL.md # core-tools/skills/plugin-manager/SKILL.md # core-tools/skills/plugin-manager/profiles.json # core-tools/skills/quality-validator/SKILL.md # core-tools/skills/relationship-manager/SKILL.md # crm-ops/.claude-plugin/plugin.json # crm-ops/CHANGELOG.md # crm-ops/agents/budget-proposal-specialist.md # crm-ops/agents/lead-approach-strategist.md # crm-ops/agents/lead-qualifier.md # crm-ops/agents/sales-manager.md # crm-ops/agents/support-specialist.md # crm-ops/skills/auto-expense/SKILL.md # crm-ops/skills/billing-check/SKILL.md # crm-ops/skills/crm-admin/SKILL.md # crm-ops/skills/crm/SKILL.md # crm-ops/skills/desk/SKILL.md # crm-ops/skills/estrategia-marca/SKILL.md # crm-ops/skills/estrategia-marca/references/metodologia-acida.md # crm-ops/skills/estrategia-marca/references/template-documento.md # crm-ops/skills/expense/SKILL.md # crm-ops/skills/invoice/SKILL.md # crm-ops/skills/orcamento/SKILL-light.md # crm-ops/skills/orcamento/SKILL.md # crm-ops/skills/proposal-deck/SKILL.md # crm-ops/skills/proposta-visual/SKILL.md # crm-ops/skills/ticket-manage/SKILL.md # crm-ops/skills/ticket-triage/SKILL.md # crm-ops/skills/ticket/SKILL.md # design-media/agents/design-critic.md # design-media/agents/design-generator.md # design-media/agents/design-lead.md # design-media/agents/design-prompt-architect.md # design-media/agents/design-researcher.md # design-media/agents/ui-designer.md # design-media/agents/video-production-specialist.md # design-media/agents/web-designer.md # design-media/skills/brand-guidelines/SKILL.md # design-media/skills/brand-guidelines/references/descomplicar-theme.md # design-media/skills/cinematic-site/SKILL.md # design-media/skills/clone-style/SKILL.md # design-media/skills/design-b2b/SKILL.md # design-media/skills/design-ecommerce/SKILL.md # design-media/skills/design-saude/SKILL.md # design-media/skills/design-solar/SKILL.md # design-media/skills/design/SKILL.md # design-media/skills/design/references/premium-proposals.md # dev-tools/agents/database-design-specialist.md # dev-tools/agents/dev-helper.md # dev-tools/agents/development-lead.md # dev-tools/agents/javascript-fullstack-specialist.md # dev-tools/agents/nextjs-specialist.md # dev-tools/agents/php-fullstack-engineer.md # dev-tools/skills/benchmark/SKILL.md # dev-tools/skills/canary/SKILL.md # dev-tools/skills/chrome/SKILL.md # dev-tools/skills/db-design/SKILL.md # dev-tools/skills/dep-audit/SKILL.md # dev-tools/skills/diagrama/SKILL.md # dev-tools/skills/docx/SKILL-light.md # dev-tools/skills/docx/SKILL.md # dev-tools/skills/docx/scripts/__init__.py # dev-tools/skills/docx/scripts/office/pack.py # dev-tools/skills/docx/scripts/office/unpack.py # dev-tools/skills/docx/scripts/office/validate.py # dev-tools/skills/nextjs/SKILL.md # dev-tools/skills/pdf/SKILL-light.md # dev-tools/skills/pdf/SKILL.md # dev-tools/skills/php-dev/SKILL.md # dev-tools/skills/prompt-refine/SKILL.md # dev-tools/skills/react-patterns/SKILL.md # dev-tools/skills/skill-creator/SKILL.md # dev-tools/skills/skill-creator/references/descomplicar-standards.md # dev-tools/skills/webapp-testing/SKILL.md # dev-tools/skills/webapp-testing/scripts/with_server.py # dev-tools/skills/xlsx/SKILL.md # dev-tools/skills/xlsx/scripts/office/pack.py # dev-tools/skills/xlsx/scripts/office/unpack.py # dev-tools/skills/xlsx/scripts/office/validate.py # dev-tools/skills/youtube-extract/SKILL.md # gestao/.claude-plugin/plugin.json # gestao/agents/analytics-insights-agent.md # gestao/agents/compliance-auditor.md # gestao/agents/project-manager.md # gestao/agents/reflect-agent.md # gestao/agents/software-project-planner.md # gestao/agents/time-management-agent.md # gestao/agents/wiki-knowledge-agent.md # gestao/skills/aiktop-tasks/SKILL.md # gestao/skills/archive/SKILL.md # gestao/skills/calendar-manager/SKILL.md # gestao/skills/cleanup-downloads/SKILL.md # gestao/skills/clip-agent/SKILL.md # gestao/skills/clip-health/SKILL.md # gestao/skills/clip-instructions/SKILL.md # gestao/skills/clip-issue/SKILL.md # gestao/skills/clip-org/SKILL.md # gestao/skills/clip-routine/SKILL.md # gestao/skills/clip-skill/SKILL.md # gestao/skills/clip-vision/SKILL.md # gestao/skills/clip/SKILL.md # gestao/skills/daily-digest/SKILL.md # gestao/skills/deep-research/SKILL.md # gestao/skills/delegate/SKILL.md # gestao/skills/doc-coauthoring/SKILL.md # gestao/skills/dual-review/SKILL.md # gestao/skills/hub-compile/SKILL.md # gestao/skills/hub-search/SKILL.md # gestao/skills/imap-triage/SKILL.md # gestao/skills/index-update/SKILL.md # gestao/skills/knowledge/SKILL.md # gestao/skills/knowledge/docs/workflow.md # gestao/skills/knowledge/references/routing-guide.md # gestao/skills/mindmap/SKILL.md # gestao/skills/monday-briefing/SKILL.md # gestao/skills/notebooklm/SKILL.md # gestao/skills/office-hours/SKILL.md # gestao/skills/onboarding/SKILL.md # gestao/skills/proc-creator/SKILL.md # gestao/skills/reflect/SKILL.md # gestao/skills/report-templates/SKILL.md # gestao/skills/report/SKILL.md # gestao/skills/research-pipeline/SKILL.md # gestao/skills/review-corrections/SKILL.md # gestao/skills/spec-coauthor/SKILL.md # gestao/skills/task-state/SKILL.md # gestao/skills/tasks-overview/SKILL.md # gestao/skills/time/SKILL.md # gestao/skills/today/SETUP_MCPS.md # gestao/skills/today/SKILL.md # gestao/skills/today/prompts/execute.md # gestao/skills/today/templates/daily-report.md # gestao/skills/validate-component/SKILL.md # gestao/skills/worklog/SKILL.md # infraestrutura/.claude-plugin/plugin.json # infraestrutura/agents/backup-specialist.md # infraestrutura/agents/cwp-server-manager.md # infraestrutura/agents/easypanel-specialist.md # infraestrutura/agents/infrastructure-orchestrator.md # infraestrutura/agents/proxmox-specialist.md # infraestrutura/agents/security-compliance-specialist.md # infraestrutura/skills/authentik/SKILL.md # infraestrutura/skills/backup-strategies/SKILL.md # infraestrutura/skills/backup-strategies/references/scripts.md # infraestrutura/skills/cwp/SKILL.md # infraestrutura/skills/easypanel-api/SKILL.md # infraestrutura/skills/easypanel-cicd/SKILL.md # infraestrutura/skills/easypanel-deploy/SKILL.md # infraestrutura/skills/easypanel-init/SKILL.md # infraestrutura/skills/easypanel-monitor/SKILL.md # infraestrutura/skills/easypanel-rollback/SKILL.md # infraestrutura/skills/easypanel-troubleshoot/SKILL.md # infraestrutura/skills/easypanel-validate/SKILL.md # infraestrutura/skills/gateway-check/SKILL.md # infraestrutura/skills/infra-check/SKILL.md # infraestrutura/skills/mcp-dev/SKILL.md # infraestrutura/skills/mcp-dev/references/best-practices.md # infraestrutura/skills/mcp-dev/references/evaluation-guide.md # infraestrutura/skills/mcp-dev/references/templates.md # infraestrutura/skills/pbs-config/SKILL.md # infraestrutura/skills/proxmox-cluster/SKILL.md # infraestrutura/skills/proxmox-ha/SKILL.md # infraestrutura/skills/proxmox-setup/SKILL.md # infraestrutura/skills/security-audit/SKILL.md # infraestrutura/skills/security-check/SKILL.md # infraestrutura/skills/server-health/SKILL.md # infraestrutura/skills/vm-migration/SKILL.md # marketing/.claude-plugin/plugin.json # marketing/CHANGELOG.md # marketing/agents/content-manager.md # marketing/agents/copywriter.md # marketing/agents/marketing-planning-expert.md # marketing/agents/ppc-specialist.md # marketing/agents/seo-specialist.md # marketing/agents/social-media-manager.md # marketing/agents/video-production-specialist.md # marketing/agents/youtube-specialist.md # marketing/skills/ads/SKILL.md # marketing/skills/content-marketing-pt/SKILL.md # marketing/skills/lead-approach/SKILL.md # marketing/skills/marketing-strategy/SKILL.md # marketing/skills/seo-audit/SKILL.md # marketing/skills/seo-audit/references/ferramentas-api.md # marketing/skills/seo-audit/references/template-relatorio-auditoria.md # marketing/skills/seo-content-optimization/SKILL.md # marketing/skills/seo-content-optimization/references/structured-data.md # marketing/skills/seo-report/SKILL.md # marketing/skills/seo-report/references/implementacao-tecnica.md # marketing/skills/seo-report/references/template-relatorio.md # marketing/skills/social-media/SKILL.md # marketing/skills/trend-signal/SKILL.md # marketing/skills/video/SKILL.md # marketing/skills/video/rules/3d.md # marketing/skills/video/rules/animations.md # marketing/skills/video/rules/assets.md # marketing/skills/video/rules/audio.md # marketing/skills/video/rules/calculate-metadata.md # marketing/skills/video/rules/can-decode.md # marketing/skills/video/rules/charts.md # marketing/skills/video/rules/compositions.md # marketing/skills/video/rules/display-captions.md # marketing/skills/video/rules/extract-frames.md # marketing/skills/video/rules/fonts.md # marketing/skills/video/rules/get-audio-duration.md # marketing/skills/video/rules/get-video-dimensions.md # marketing/skills/video/rules/get-video-duration.md # marketing/skills/video/rules/gifs.md # marketing/skills/video/rules/images.md # marketing/skills/video/rules/import-srt-captions.md # marketing/skills/video/rules/lottie.md # marketing/skills/video/rules/maps.md # marketing/skills/video/rules/measuring-dom-nodes.md # marketing/skills/video/rules/measuring-text.md # marketing/skills/video/rules/parameters.md # marketing/skills/video/rules/sequencing.md # marketing/skills/video/rules/tailwind.md # marketing/skills/video/rules/text-animations.md # marketing/skills/video/rules/timing.md # marketing/skills/video/rules/transcribe-captions.md # marketing/skills/video/rules/transitions.md # marketing/skills/video/rules/trimming.md # marketing/skills/video/rules/videos.md # marketing/skills/youtube/SKILL.md # metabase/agents/metabase-analyst.md # metabase/skills/dashboard/SKILL.md # metabase/skills/metabase/SKILL.md # metabase/skills/query/SKILL.md # negocio/agents/ecommerce-architect.md # negocio/agents/finance-manager.md # negocio/agents/research-analyst.md # negocio/agents/saas-architect.md # negocio/skills/ecommerce/SKILL.md # negocio/skills/interview/SKILL.md # negocio/skills/product/SKILL.md # negocio/skills/research/SKILL.md # negocio/skills/saas/SKILL.md # perfex-dev/agents/perfex-crm-module-developer.md # perfex-dev/skills/perfex-controllers/SKILL.md # perfex-dev/skills/perfex-database/SKILL.md # perfex-dev/skills/perfex-forms/SKILL.md # perfex-dev/skills/perfex-hooks/SKILL.md # perfex-dev/skills/perfex-menus/SKILL.md # perfex-dev/skills/perfex-migrations/SKILL.md # perfex-dev/skills/perfex-module-basics/SKILL.md # perfex-dev/skills/perfex-permissions/SKILL.md # perfex-dev/skills/perfex-security/SKILL.md # perfex-dev/skills/perfex-views/SKILL.md # project-manager/.claude-plugin/plugin.json # project-manager/agents/scrum-master.md # project-manager/agents/spec-writer.md # project-manager/hooks/spec-gate.sh # project-manager/skills/brainstorm/SKILL.md # project-manager/skills/discover/SKILL.md # project-manager/skills/scope/SKILL.md # project-manager/skills/spec/SKILL.md # project-manager/skills/sprint/SKILL.md # project-manager/skills/status/SKILL.md # wordpress/.claude-plugin/plugin.json # wordpress/agents/elementor-specialist.md # wordpress/agents/woocommerce-specialist.md # wordpress/agents/wordpress-performance-specialist.md # wordpress/agents/wordpress-plugin-developer.md # wordpress/skills/branda-menu/SKILL.md # wordpress/skills/crocoblock/SKILL.md # wordpress/skills/elementor/SKILL.md # wordpress/skills/jetengine/SKILL.md # wordpress/skills/rank-math/SKILL.md # wordpress/skills/rank-math/references/commands.md # wordpress/skills/seo-post/SKILL.md # wordpress/skills/woocommerce-cli/SKILL.md # wordpress/skills/woocommerce/SKILL.md # wordpress/skills/wp-cli/SKILL.md # wordpress/skills/wp-cli/references/commands.md # wordpress/skills/wp-cli/scripts/wp-auto.sh # wordpress/skills/wp-dev/SKILL.md # wordpress/skills/wp-hardening/SKILL.md # wordpress/skills/wp-performance/SKILL.md # wordpress/skills/wp-translate/SKILL.md # wordpress/skills/wp-update/SKILL.md
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
"name": "crm-ops",
|
"name": "crm-ops",
|
||||||
"source": "./crm-ops",
|
"source": "./crm-ops",
|
||||||
"description": "CRM operations, sales management, leads, customers, estimates, invoices, tickets and expense tracking with Desk CRM. Backed by NotebookLM notebooks.",
|
"description": "CRM operations, sales management, leads, customers, estimates, invoices, tickets and expense tracking with Desk CRM. Backed by NotebookLM notebooks.",
|
||||||
"version": "1.0.0",
|
"version": "1.3.1",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"url": "https://descomplicar.pt"
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
"name": "gestao",
|
"name": "gestao",
|
||||||
"source": "./gestao",
|
"source": "./gestao",
|
||||||
"description": "Project management, time tracking, daily checkups, worklogs, reflections, knowledge management and archiving. Backed by NotebookLM notebooks.",
|
"description": "Project management, time tracking, daily checkups, worklogs, reflections, knowledge management and archiving. Backed by NotebookLM notebooks.",
|
||||||
"version": "1.0.0",
|
"version": "1.7.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"url": "https://descomplicar.pt"
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
"name": "infraestrutura",
|
"name": "infraestrutura",
|
||||||
"source": "./infraestrutura",
|
"source": "./infraestrutura",
|
||||||
"description": "Server management, Proxmox VE/PBS/Clustering, CWP administration, EasyPanel deployments, security audits, backups and MCP development. Backed by NotebookLM notebooks (Proxmox 150+ sources).",
|
"description": "Server management, Proxmox VE/PBS/Clustering, CWP administration, EasyPanel deployments, security audits, backups and MCP development. Backed by NotebookLM notebooks (Proxmox 150+ sources).",
|
||||||
"version": "1.1.0",
|
"version": "1.2.2",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"url": "https://descomplicar.pt"
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
"name": "marketing",
|
"name": "marketing",
|
||||||
"source": "./marketing",
|
"source": "./marketing",
|
||||||
"description": "Digital marketing strategy, SEO, content marketing, social media, ads, copywriting, video and YouTube. Backed by NotebookLM notebooks.",
|
"description": "Digital marketing strategy, SEO, content marketing, social media, ads, copywriting, video and YouTube. Backed by NotebookLM notebooks.",
|
||||||
"version": "1.0.0",
|
"version": "2.1.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"url": "https://descomplicar.pt"
|
||||||
@@ -110,7 +110,7 @@
|
|||||||
"name": "project-manager",
|
"name": "project-manager",
|
||||||
"source": "./project-manager",
|
"source": "./project-manager",
|
||||||
"description": "Spec-driven project management with flexible sprints, scope validation, and NotebookLM-powered discovery.",
|
"description": "Spec-driven project management with flexible sprints, scope validation, and NotebookLM-powered discovery.",
|
||||||
"version": "1.1.0",
|
"version": "1.2.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"url": "https://descomplicar.pt"
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
"name": "wordpress",
|
"name": "wordpress",
|
||||||
"source": "./wordpress",
|
"source": "./wordpress",
|
||||||
"description": "WordPress development, maintenance and optimization - plugins, themes, WooCommerce, Elementor, Crocoblock. Backed by NotebookLM notebooks.",
|
"description": "WordPress development, maintenance and optimization - plugins, themes, WooCommerce, Elementor, Crocoblock. Backed by NotebookLM notebooks.",
|
||||||
"version": "1.0.0",
|
"version": "1.1.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"url": "https://descomplicar.pt"
|
||||||
|
|||||||
+4
-6
@@ -1,9 +1,7 @@
|
|||||||
design-media/skills/*/references/__pycache__/
|
design-media/skills/*/references/__pycache__/
|
||||||
|
|
||||||
# Symlinks absolutos para skills locais da máquina
|
# Estado de runtime IJFW (sessoes, metricas, cursores) — local, nunca versionado
|
||||||
design-media/skills/pptx-generator
|
.ijfw/
|
||||||
design-media/skills/remotion-video
|
|
||||||
design-media/skills/ui-ux-pro-max
|
# Output do graphify (hook local de rebuild)
|
||||||
dev-tools/skills/frontend-design
|
|
||||||
marketing/skills/brand-voice-generator
|
|
||||||
graphify-out/
|
graphify-out/
|
||||||
|
|||||||
@@ -8,4 +8,31 @@ layer: wiki
|
|||||||
---
|
---
|
||||||
# claude-plugins
|
# claude-plugins
|
||||||
|
|
||||||
Marketplace de plugins Claude Code da Descomplicar
|
Marketplace de plugins Claude Code da Descomplicar
|
||||||
|
|
||||||
|
## Versões — bumpar sempre nos DOIS sítios
|
||||||
|
|
||||||
|
A versão de cada plugin vive em dois ficheiros e **não há automação a sincronizá-los**:
|
||||||
|
|
||||||
|
| Ficheiro | Papel | Quem o lê |
|
||||||
|
|---|---|---|
|
||||||
|
| `<plugin>/.claude-plugin/plugin.json` | **fonte de verdade** | `/plugin update` — é esta que decide se há versão nova |
|
||||||
|
| `.claude-plugin/marketplace.json` | agregado derivado | `/plugin marketplace update` — catálogo |
|
||||||
|
|
||||||
|
Bumpar só o agregado **não tem efeito nenhum**: o catálogo mostra a versão nova, o
|
||||||
|
`/plugin update` responde `already at the latest version` e o cache continua na antiga.
|
||||||
|
Aconteceu a 30-07-2026 com marketing/gestao/project-manager/wordpress.
|
||||||
|
|
||||||
|
Verificar coerência antes de commitar:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
for p in */; do p=${p%/}; f="$p/.claude-plugin/plugin.json"; [ -f "$f" ] || continue
|
||||||
|
a=$(jq -r .version "$f")
|
||||||
|
b=$(jq -r ".plugins[]|select(.name==\"$p\").version" .claude-plugin/marketplace.json)
|
||||||
|
[ "$a" = "$b" ] || echo "DIVERGE $p: plugin.json=$a marketplace.json=$b"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
Depois de publicar: `/plugin marketplace update descomplicar-plugins` (catálogo) **e**
|
||||||
|
`/plugin update <nome>@descomplicar-plugins` (reinstala no cache). O primeiro sozinho
|
||||||
|
não actualiza o que corre.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
type: Validation
|
||||||
|
version: 2.5
|
||||||
|
padrao-versao: 2.5
|
||||||
|
timestamp: 2026-08-19 09:16:34 UTC
|
||||||
|
mode: project
|
||||||
|
status: ❌ FAILED
|
||||||
|
---
|
||||||
|
|
||||||
|
# VALIDAÇÃO — 2026-08-19
|
||||||
|
|
||||||
|
## Resumo
|
||||||
|
|
||||||
|
| Métrica | Valor |
|
||||||
|
|---------|-------|
|
||||||
|
| Modo | project |
|
||||||
|
| Total projecto | 23 |
|
||||||
|
| Ficheiros OKF | 0 |
|
||||||
|
| Entidades OKF | 0 |
|
||||||
|
| Relacionamentos OKF | 0 |
|
||||||
|
| Erros | 23 |
|
||||||
|
| Avisos | 6 |
|
||||||
|
| Veredicto | ❌ FAILED |
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: devops
|
name: devops
|
||||||
description: CI/CD pipelines para o AcidaOS via Gitea Actions — build, test, deploy para acidaos-core (Rust) e acidaos-dashboard (Next.js). Usar quando "pipeline acidaos", "gitea actions acidaos", "ci cd acidaos", "deploy acidaos", "workflow acidaos".
|
description: CI/CD pipelines para o AcidaOS via Gitea Actions — build, test, deploy para acidaos-core (Rust) e acidaos-dashboard (Next.js). Usar quando "pipeline acidaos", "gitea actions acidaos", "ci cd acidaos", "deploy acidaos", "workflow acidaos".
|
||||||
allowed-tools: Read, Write, Edit, Bash, mcp__gitea__list_repo_action_workflows, mcp__gitea__get_repo_action_workflow, mcp__gitea__create_file, mcp__gitea__update_file, mcp__mem_search_memories
|
allowed-tools: Read, Write, Edit, Bash, mcp__gitea__list_repo_action_workflows, mcp__gitea__get_repo_action_workflow, mcp__gitea__create_file, mcp__gitea__update_file, mcp__mem0__search_memories
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# AcidaOS DevOps — Gitea Actions
|
# AcidaOS DevOps — Gitea Actions
|
||||||
@@ -31,7 +30,7 @@ Deploy target:
|
|||||||
## Protocolo Inicial
|
## Protocolo Inicial
|
||||||
|
|
||||||
```
|
```
|
||||||
mcp__mem_search_memories "acidaos devops pipeline"
|
mcp__mem0__search_memories "acidaos devops pipeline"
|
||||||
mcp__gitea__list_repo_action_workflows <repo> # ver workflows existentes
|
mcp__gitea__list_repo_action_workflows <repo> # ver workflows existentes
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -203,4 +202,127 @@ jobs:
|
|||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '20'
|
node-version: '20'
|
||||||
cache: 'pnpm
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Instalar dependências
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: TypeScript check
|
||||||
|
run: pnpm tsc --noEmit
|
||||||
|
|
||||||
|
- name: ESLint
|
||||||
|
run: pnpm lint
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: Testes
|
||||||
|
needs: lint-typecheck
|
||||||
|
runs-on: [self-hosted, linux, node]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Instalar dependências
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Testes unitários
|
||||||
|
run: pnpm test
|
||||||
|
|
||||||
|
- name: Build de verificação
|
||||||
|
run: pnpm build
|
||||||
|
env:
|
||||||
|
ACIDAOS_CORE_URL: http://localhost:3001
|
||||||
|
|
||||||
|
e2e:
|
||||||
|
name: Testes E2E
|
||||||
|
needs: test
|
||||||
|
runs-on: [self-hosted, linux, node]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '20'
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Instalar dependências
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Instalar Playwright
|
||||||
|
run: pnpm exec playwright install --with-deps chromium
|
||||||
|
|
||||||
|
- name: Testes E2E
|
||||||
|
run: pnpm test:e2e
|
||||||
|
env:
|
||||||
|
BASE_URL: http://localhost:3000
|
||||||
|
ACIDAOS_CORE_URL: http://localhost:3001
|
||||||
|
|
||||||
|
- name: Upload relatório E2E
|
||||||
|
if: failure()
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: playwright-report
|
||||||
|
path: playwright-report/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gestão via MCP Gitea
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Listar workflows de um repo
|
||||||
|
mcp__gitea__list_repo_action_workflows({ owner: "descomplicar", repo: "acidaos-core" })
|
||||||
|
|
||||||
|
// Ver runs recentes
|
||||||
|
mcp__gitea__list_repo_action_runs({ owner: "descomplicar", repo: "acidaos-core" })
|
||||||
|
|
||||||
|
// Desencadear workflow manualmente
|
||||||
|
mcp__gitea__dispatch_repo_action_workflow({
|
||||||
|
owner: "descomplicar",
|
||||||
|
repo: "acidaos-core",
|
||||||
|
workflow_id: "deploy.yml",
|
||||||
|
ref: "main"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Ver logs de uma job
|
||||||
|
mcp__gitea__get_repo_action_job_log_preview({ owner: "descomplicar", repo: "acidaos-core", job_id: <id> })
|
||||||
|
```
|
||||||
|
|
||||||
|
## Segredos necessários (Gitea Secrets)
|
||||||
|
|
||||||
|
| Segredo | Usado em | Descrição |
|
||||||
|
|---------|----------|-----------|
|
||||||
|
| `TEST_DATABASE_URL` | Core CI | PostgreSQL de teste |
|
||||||
|
| `REGISTRY_TOKEN` | Core Deploy | Token registry Docker |
|
||||||
|
| `EASYPANEL_TOKEN` | Core/Dashboard Deploy | Token API EasyPanel |
|
||||||
|
|
||||||
|
## Checklist Pipeline Nova
|
||||||
|
|
||||||
|
- [ ] Workflow criado em `.gitea/workflows/`
|
||||||
|
- [ ] Runner labels correctas (`self-hosted, linux, rust` ou `node`)
|
||||||
|
- [ ] Cache Cargo/pnpm configurado
|
||||||
|
- [ ] Segredos referenciados (não hardcoded)
|
||||||
|
- [ ] Health check no deploy
|
||||||
|
- [ ] Tested com `mcp__gitea__dispatch_repo_action_workflow`
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: docs
|
name: docs
|
||||||
description: Gerar documentação técnica do AcidaOS a partir do código — Rust (rustdoc), TypeScript (TypeDoc), e publicar no Outline. Usar quando "documentação acidaos", "gerar docs", "rustdoc", "typedoc", "acidaos-docs", documentar código do projecto.
|
description: Gerar documentação técnica do AcidaOS a partir do código — Rust (rustdoc), TypeScript (TypeDoc), e publicar no Outline. Usar quando "documentação acidaos", "gerar docs", "rustdoc", "typedoc", "acidaos-docs", documentar código do projecto.
|
||||||
allowed-tools: Read, Write, Bash, mcp__gitea__get_file_content, mcp__gitea__get_dir_content, mcp__outline-api__create_document, mcp__outline-api__update_document, mcp__outline-api__search_documents, mcp__mem_search_memories
|
allowed-tools: Read, Write, Bash, mcp__gitea__get_file_content, mcp__gitea__get_dir_content, mcp__outline-api__create_document, mcp__outline-api__update_document, mcp__outline-api__search_documents, mcp__mem0__search_memories
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# AcidaOS Docs
|
# AcidaOS Docs
|
||||||
@@ -22,7 +21,7 @@ Skill para gerar e publicar documentação técnica do AcidaOS.
|
|||||||
## Protocolo
|
## Protocolo
|
||||||
|
|
||||||
```
|
```
|
||||||
mcp__mem_search_memories "acidaos documentação"
|
mcp__mem0__search_memories "acidaos documentação"
|
||||||
mcp__outline-api__search_documents "acidaos" # ver docs existentes
|
mcp__outline-api__search_documents "acidaos" # ver docs existentes
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -37,9 +36,9 @@ mcp__outline-api__search_documents "acidaos" # ver docs existentes
|
|||||||
mcp__gitea__get_dir_content acidaos-core/src/
|
mcp__gitea__get_dir_content acidaos-core/src/
|
||||||
```
|
```
|
||||||
|
|
||||||
**Gerar localmente (no container dev):**
|
**Gerar localmente (desktop):**
|
||||||
```bash
|
```bash
|
||||||
cd /root/Dev/acidaos-core
|
cd /media/ealmeida/Dados/Dev/acidaos-core
|
||||||
cargo doc --all-features --no-deps --open
|
cargo doc --all-features --no-deps --open
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -82,9 +81,9 @@ pub struct ComponenteX { ... }
|
|||||||
mcp__gitea__get_file_content acidaos-dashboard/typedoc.json
|
mcp__gitea__get_file_content acidaos-dashboard/typedoc.json
|
||||||
```
|
```
|
||||||
|
|
||||||
**Gerar (no container dev):**
|
**Gerar (localmente no desktop):**
|
||||||
```bash
|
```bash
|
||||||
cd /root/Dev/acidaos-dashboard
|
cd /media/ealmeida/Dados/Dev/acidaos-dashboard
|
||||||
pnpm typedoc --out docs/api src/
|
pnpm typedoc --out docs/api src/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: rust-dev
|
name: rust-dev
|
||||||
description: Desenvolvimento do AcidaOS Core em Rust — criar crates, definir endpoints Axum, debugar erros do compilador. Usar quando "rust", "axum", "cargo", "crate", "core", "acidaos core", "rust error", "borrow checker", desenvolvimento do motor central do AcidaOS.
|
description: Desenvolvimento do AcidaOS Core em Rust — criar crates, definir endpoints Axum, debugar erros do compilador. Usar quando "rust", "axum", "cargo", "crate", "core", "acidaos core", "rust error", "borrow checker", desenvolvimento do motor central do AcidaOS.
|
||||||
allowed-tools: Read, Write, Edit, Bash, mcp__mem_search_memories, mcp__gitea__get_file_content, mcp__gitea__create_file, mcp__gitea__update_file
|
allowed-tools: Read, Write, Edit, Bash, mcp__mem0__search_memories, mcp__gitea__get_file_content, mcp__gitea__create_file, mcp__gitea__update_file
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# AcidaOS Rust Dev
|
# AcidaOS Rust Dev
|
||||||
@@ -30,7 +29,7 @@ acidaos-core (Rust)
|
|||||||
## Protocolo Inicial
|
## Protocolo Inicial
|
||||||
|
|
||||||
```
|
```
|
||||||
mcp__mem_search_memories "acidaos core [componente]"
|
mcp__mem0__search_memories "acidaos core [componente]"
|
||||||
mcp__gitea__get_file_content acidaos-core/Cargo.toml # verificar dependências actuais
|
mcp__gitea__get_file_content acidaos-core/Cargo.toml # verificar dependências actuais
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -205,4 +204,41 @@ async fn handler(req: Arc<Request>) -> Response { ... }
|
|||||||
Antes de fazer commit:
|
Antes de fazer commit:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ca
|
cargo check # zero erros
|
||||||
|
cargo clippy # zero warnings
|
||||||
|
cargo test # todos os testes passam
|
||||||
|
cargo fmt --check # formatação correcta
|
||||||
|
```
|
||||||
|
|
||||||
|
**Standards:**
|
||||||
|
- Zero `unwrap()` em código de produção — usar `?` ou `expect("mensagem descritiva")`
|
||||||
|
- Funções async < 50 linhas
|
||||||
|
- `tracing::instrument` em todas as funções públicas async
|
||||||
|
- Documentação `///` em todos os tipos e funções públicas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist Entrega
|
||||||
|
|
||||||
|
- [ ] `cargo check` sem erros
|
||||||
|
- [ ] `cargo clippy -- -D warnings` limpo
|
||||||
|
- [ ] `cargo test` 100% pass
|
||||||
|
- [ ] Documentação `///` completa
|
||||||
|
- [ ] Observabilidade: `#[instrument]` nos handlers
|
||||||
|
- [ ] Sem `.unwrap()` em paths críticos
|
||||||
|
- [ ] CHANGELOG.md actualizado
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: spoke-dev
|
name: spoke-dev
|
||||||
description: Desenvolvimento de Spokes do AcidaOS em Next.js/TypeScript — criar aplicações Spoke, componentes React com testes e Storybook. Usar quando "spoke", "dashboard acidaos", "next.js acidaos", "componente react acidaos", "ts-create-spoke", "acidaos ui", "acidaos frontend".
|
description: Desenvolvimento de Spokes do AcidaOS em Next.js/TypeScript — criar aplicações Spoke, componentes React com testes e Storybook. Usar quando "spoke", "dashboard acidaos", "next.js acidaos", "componente react acidaos", "ts-create-spoke", "acidaos ui", "acidaos frontend".
|
||||||
allowed-tools: Read, Write, Edit, Bash, mcp__mem_search_memories, mcp__gitea__get_file_content, mcp__gitea__create_file, mcp__gitea__update_file
|
allowed-tools: Read, Write, Edit, Bash, mcp__mem0__search_memories, mcp__gitea__get_file_content, mcp__gitea__create_file, mcp__gitea__update_file
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# AcidaOS Spoke Dev
|
# AcidaOS Spoke Dev
|
||||||
@@ -33,7 +32,7 @@ acidaos-dashboard (Next.js 15 + App Router)
|
|||||||
## Protocolo Inicial
|
## Protocolo Inicial
|
||||||
|
|
||||||
```
|
```
|
||||||
mcp__mem_search_memories "acidaos spoke dashboard [componente]"
|
mcp__mem0__search_memories "acidaos spoke dashboard [componente]"
|
||||||
mcp__gitea__get_file_content acidaos-dashboard/package.json
|
mcp__gitea__get_file_content acidaos-dashboard/package.json
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -47,8 +46,8 @@ mcp__gitea__get_file_content acidaos-dashboard/package.json
|
|||||||
|
|
||||||
**Estrutura a criar:**
|
**Estrutura a criar:**
|
||||||
```bash
|
```bash
|
||||||
# No container dev (Regra #48)
|
# Localmente no desktop (Regra #48 — CT 102 extinto)
|
||||||
cd /root/Dev
|
cd /media/ealmeida/Dados/Dev
|
||||||
npx create-next-app@latest acidaos-<nome> \
|
npx create-next-app@latest acidaos-<nome> \
|
||||||
--typescript \
|
--typescript \
|
||||||
--tailwind \
|
--tailwind \
|
||||||
@@ -205,4 +204,48 @@ export type { <Nome>Props } from './<Nome>';
|
|||||||
- Hooks custom em `src/lib/hooks/use<Nome>.ts`
|
- Hooks custom em `src/lib/hooks/use<Nome>.ts`
|
||||||
- Server Components por defeito; `'use client'` apenas quando necessário
|
- Server Components por defeito; `'use client'` apenas quando necessário
|
||||||
|
|
||||||
### Performance
|
### Performance
|
||||||
|
- `next/image` para todas as imagens
|
||||||
|
- `loading="lazy"` em componentes pesados
|
||||||
|
- `Suspense` boundaries em torno de data-fetching
|
||||||
|
- Cache de API calls com `unstable_cache` ou React cache
|
||||||
|
|
||||||
|
### Segurança
|
||||||
|
- Nunca expor `ACIDAOS_CORE_URL` no cliente (apenas server-side)
|
||||||
|
- Sanitizar input do utilizador antes de enviar ao Core
|
||||||
|
- Usar Next.js Server Actions para mutações
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quality Gate
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm build # zero erros TypeScript
|
||||||
|
pnpm test # todos os testes passam
|
||||||
|
pnpm lint # zero erros ESLint
|
||||||
|
```
|
||||||
|
|
||||||
|
## Checklist Entrega
|
||||||
|
|
||||||
|
- [ ] Tipos TypeScript sem `any`
|
||||||
|
- [ ] Testes criados (>80% cobertura)
|
||||||
|
- [ ] Story Storybook criada
|
||||||
|
- [ ] `displayName` definido no componente
|
||||||
|
- [ ] `pnpm build` sem erros
|
||||||
|
- [ ] Client/Server components correctamente marcados
|
||||||
|
- [ ] CHANGELOG.md actualizado
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versão**: 1.0.0 | **Autor**: Descomplicar® | **Plugin**: acidaos
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- n8n
|
- n8n
|
||||||
@@ -46,7 +48,6 @@ escalates_to:
|
|||||||
created: "2025-01-13"
|
created: "2025-01-13"
|
||||||
updated: "2026-02-04"
|
updated: "2026-02-04"
|
||||||
author: "Descomplicar®"
|
author: "Descomplicar®"
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Automation Lead Descomplicar
|
# Automation Lead Descomplicar
|
||||||
@@ -168,9 +169,66 @@ mcp__notebooklm__notebook_query notebook_id:"929ef67b-c131-4f01-abd0-8b078491a6b
|
|||||||
- **ssh-unified** - SSH, SFTP, servidor management
|
- **ssh-unified** - SSH, SFTP, servidor management
|
||||||
- **gitea** - Repositórios Git, issues, PRs
|
- **gitea** - Repositórios Git, issues, PRs
|
||||||
- **puppeteer** - Browser automation
|
- **puppeteer** - Browser automation
|
||||||
- **mem0** - Memória longo prazo
|
- **mem0** - Mem0 (Tier 2, `mcp__mem0__*`) + IJFW (Tier 1, automático via hooks)
|
||||||
- **** - Knowledge base AI
|
- **** - Knowledge base AI
|
||||||
- **filesystem** - Ficheiros locais
|
- **filesystem** - Ficheiros locais
|
||||||
|
|
||||||
### All Available (32 total)
|
### All Available (32 total)
|
||||||
moloni, context7, cwp, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, p
|
moloni, context7, cwp, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, 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)
|
||||||
|
✓ **/delegate** - Delegar tarefas dev para outros chats Claude com workflow completo - timer, impl
|
||||||
|
- Invoke: `/delegate`
|
||||||
|
|
||||||
|
✓ **/archive** - Arquivamento automatico de ficheiros concluidos - move ficheiros com status done
|
||||||
|
- Invoke: `/archive`
|
||||||
|
|
||||||
|
### Recommended for automation
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
- **/taskforce** - Gestão de TaskForces - pacotes de trabalho padronizados com skills
|
||||||
|
|
||||||
|
### 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, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /metrics
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Colaboração
|
||||||
|
|
||||||
|
- **Reports to**: CTO
|
||||||
|
- **Colabora com**: N8N Automation Expert, MCP Protocol Developer, Development Lead, All department heads
|
||||||
|
- **Escalar para**: CTO (decisões estratégicas), Security Compliance Specialist (segurança workflows)
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **2 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce Claude Workflow
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
|
||||||
|
- **Sistema de automacao com hooks Claude Code, integracao N8N e gestao de sessoes com auto-triggers.**: NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- gitea
|
- gitea
|
||||||
@@ -38,7 +40,6 @@ compliance:
|
|||||||
created: '2025-01-13'
|
created: '2025-01-13'
|
||||||
updated: '2026-02-04'
|
updated: '2026-02-04'
|
||||||
author: Descomplicar®
|
author: Descomplicar®
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
# MCP Protocol Developer Descomplicar
|
# MCP Protocol Developer Descomplicar
|
||||||
|
|
||||||
@@ -142,15 +143,73 @@ Especialista em desenvolvimento, optimizacao e manutencao de servidores MCP e fe
|
|||||||
- **n8n** - Workflows automation
|
- **n8n** - Workflows automation
|
||||||
- **filesystem** - Ficheiros locais
|
- **filesystem** - Ficheiros locais
|
||||||
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
||||||
- **mem0** - Memória longo prazo
|
- **mem0** - Mem0 (Tier 2, `mcp__mem0__*`) + IJFW (Tier 1, automático via hooks)
|
||||||
- **cwp** - CentOS Web Panel
|
- **cwp** - CentOS Web Panel
|
||||||
- **puppeteer** - Browser automation
|
- **puppeteer** - Browser automation
|
||||||
|
|
||||||
### All Available (32 total)
|
### All Available (32 total)
|
||||||
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
||||||
|
|
||||||
**Discovery:** Use ToolSearch to find specific tools.
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
## Your Available Skills
|
## Your Available Skills
|
||||||
|
|
||||||
### Primary Skills (Your
|
### Primary Skills (Your Domain)
|
||||||
|
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
||||||
|
- Invoke: `/wp-dev`
|
||||||
|
|
||||||
|
✓ **/php-dev** - Desenvolvimento PHP fullstack - Laravel, Symfony, APIs RESTful, arquitectura bac
|
||||||
|
- Invoke: `/php-dev`
|
||||||
|
|
||||||
|
✓ **/db-design** - Design de bases de dados - schema, optimização queries, MySQL/PostgreSQL, arquit
|
||||||
|
- Invoke: `/db-design`
|
||||||
|
|
||||||
|
✓ **/mcp-dev** - Desenvolvimento de servidores MCP - criar, configurar, testar e documentar MCPs
|
||||||
|
- Invoke: `/mcp-dev`
|
||||||
|
|
||||||
|
### Recommended for dev
|
||||||
|
- **/react-patterns** - Padrões React modernos - Hooks, Server Components, State Man
|
||||||
|
- **/nextjs** - Desenvolvimento Next.js moderno com App Router, Server Compo
|
||||||
|
- **/elementor** - Desenvolvimento avançado com Elementor Pro e Crocoblock - wi
|
||||||
|
- **/woocommerce** - Desenvolvimento e optimização de lojas WooCommerce - checkou
|
||||||
|
- **/crm-admin** - Administração e desenvolvimento Perfex CRM - gestão dados, m
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/delegate** - Delegar tarefas dev para outros chats Claude com workflow co
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **2 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce MCP
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
|
||||||
|
- **Desenvolvimento de servidores MCP - criar, configurar, testar e publicar MCPs customizados com padrões Descomplicar.**: NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- n8n
|
- n8n
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
@@ -37,7 +39,6 @@ compliance:
|
|||||||
created: '2025-01-13'
|
created: '2025-01-13'
|
||||||
updated: '2026-02-04'
|
updated: '2026-02-04'
|
||||||
author: Descomplicar®
|
author: Descomplicar®
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
# N8N Automation Expert Descomplicar
|
# N8N Automation Expert Descomplicar
|
||||||
|
|
||||||
@@ -134,7 +135,7 @@ Especialista em design, desenvolvimento e optimizacao de workflows automatizados
|
|||||||
|
|
||||||
✓ **mem0** (system)
|
✓ **mem0** (system)
|
||||||
- Memória longo prazo
|
- Memória longo prazo
|
||||||
- Usage: `mcp__mem_*`
|
- Usage: `mcp__mem0__*`
|
||||||
|
|
||||||
### Recommended for automation
|
### Recommended for automation
|
||||||
- **ssh-unified** - SSH, SFTP, servidor management
|
- **ssh-unified** - SSH, SFTP, servidor management
|
||||||
@@ -143,7 +144,7 @@ Especialista em design, desenvolvimento e optimizacao de workflows automatizados
|
|||||||
- **filesystem** - Ficheiros locais
|
- **filesystem** - Ficheiros locais
|
||||||
|
|
||||||
### All Available (32 total)
|
### All Available (32 total)
|
||||||
moloni, context7, cwp, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, design-systems, replicate
|
moloni, context7, cwp, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, magic, vimeo, design-systems, replicate
|
||||||
|
|
||||||
**Discovery:** Use ToolSearch to find specific tools.
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
@@ -153,4 +154,46 @@ moloni, context7, cwp, google-analytics, google-workspace, imap, outline-api, yo
|
|||||||
✓ **/delegate** - Delegar tarefas dev para outros chats Claude com workflow completo - timer, impl
|
✓ **/delegate** - Delegar tarefas dev para outros chats Claude com workflow completo - timer, impl
|
||||||
- Invoke: `/delegate`
|
- Invoke: `/delegate`
|
||||||
|
|
||||||
✓ **/archive** - Arquivamento automat
|
✓ **/archive** - Arquivamento automatico de ficheiros concluidos - move ficheiros com status done
|
||||||
|
- Invoke: `/archive`
|
||||||
|
|
||||||
|
### Recommended for automation
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
- **/taskforce** - Gestão de TaskForces - pacotes de trabalho padronizados com skills
|
||||||
|
|
||||||
|
### 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, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /metrics
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **2 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce Claude Workflow
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
|
||||||
|
- **Sistema de automacao com hooks Claude Code, integracao N8N e gestao de sessoes com auto-triggers.**: NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: moloni-api
|
name: moloni-api
|
||||||
description: Referência da API Moloni v2 para facturação portuguesa — autenticação, documentos, clientes e produtos.
|
description: Referência da API Moloni v2 para facturação portuguesa — autenticação, documentos, clientes e produtos.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Moloni API v2
|
# Moloni API v2
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: n8n
|
name: n8n
|
||||||
description: Meta-skill n8n para criação e gestão de workflows na instância automator.descomplicar.pt. Cobre health check, webhooks, schedule (cron), sync de dados, notify (Slack/email/SMS) e chatbots/AI agents (LangChain/RAG). Triggers — n8n, workflow, automação, webhook, schedule, cron, sync, notify, alerta, slack, chatbot, ai agent, langchain, rag, automator, health check n8n.
|
description: Meta-skill n8n para criação e gestão de workflows na instância automator.descomplicar.pt. Cobre health check, webhooks, schedule (cron), sync de dados, notify (Slack/email/SMS) e chatbots/AI agents (LangChain/RAG). Triggers — n8n, workflow, automação, webhook, schedule, cron, sync, notify, alerta, slack, chatbot, ai agent, langchain, rag, automator, health check n8n.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /n8n - Meta-skill n8n
|
# /n8n - Meta-skill n8n
|
||||||
@@ -141,4 +140,131 @@ Upsert:
|
|||||||
{ nodeType: "nodes-base.postgres", config: { operation: "upsert", table: "clientes", columns: "email,nome,empresa", conflictColumns: "email" } }
|
{ nodeType: "nodes-base.postgres", config: { operation: "upsert", table: "clientes", columns: "email,nome,empresa", conflictColumns: "email" } }
|
||||||
```
|
```
|
||||||
|
|
||||||
Erros: retry (`{ options: { retry: { maxRetries: 3, retryInterval: 1000 } } }`), D
|
Erros: retry (`{ options: { retry: { maxRetries: 3, retryInterval: 1000 } } }`), Dead Letter Queue (Error Trigger -> BD -> Slack).
|
||||||
|
|
||||||
|
Exemplo CRM->Sheets: Schedule -> HTTP GET leads -> IF -> Set -> Google Sheets append -> Slack.
|
||||||
|
|
||||||
|
Troubleshooting: duplicados (upsert), timeout (batches menores), rate limit (delays).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Notify (alertas)
|
||||||
|
|
||||||
|
```
|
||||||
|
/n8n notify create <descrição>
|
||||||
|
/n8n notify slack <mensagem>
|
||||||
|
/n8n notify email <para> <assunto>
|
||||||
|
```
|
||||||
|
|
||||||
|
Canais: Slack (`nodes-base.slack`), Email (`nodes-base.emailSend`), Telegram, Discord, SMS Twilio.
|
||||||
|
|
||||||
|
Slack:
|
||||||
|
```js
|
||||||
|
mcp__n8n__validate_node({
|
||||||
|
nodeType: "nodes-base.slack",
|
||||||
|
config: { resource: "message", operation: "post", channel: "#alertas", text: "..." },
|
||||||
|
mode: "minimal"
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
Mensagem formatada (Blocks): header + section com `mrkdwn` e `{{ $json.message }}`.
|
||||||
|
|
||||||
|
Email:
|
||||||
|
```js
|
||||||
|
mcp__n8n__validate_node({
|
||||||
|
nodeType: "nodes-base.emailSend",
|
||||||
|
config: { fromEmail: "alertas@descomplicar.pt", toEmail: "emanuel@descomplicar.pt", subject: "Alerta: {{ $json.title }}", text: "{{ $json.message }}" },
|
||||||
|
mode: "minimal"
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
Padrões: Webhook->Slack, Monitor->Multi-canal (Schedule -> HTTP -> IF -> Slack+Email), Error Handler (Error Trigger -> Slack).
|
||||||
|
|
||||||
|
Níveis: Info (Slack), Warning (Slack+Email), Critical (Slack+Email+SMS) — implementar com IF aninhado por `severity`.
|
||||||
|
|
||||||
|
Troubleshooting: Slack não envia (token/canal), email em spam (SPF/DKIM), rate limited (agrupar).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Chatbot / AI Agents (LangChain)
|
||||||
|
|
||||||
|
```
|
||||||
|
/n8n chatbot create <descrição>
|
||||||
|
/n8n chatbot agent <tipo>
|
||||||
|
/n8n chatbot rag <knowledge_base>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Nodes LangChain
|
||||||
|
|
||||||
|
Core: `@n8n/n8n-nodes-langchain.agent`, `chainLlm`, `chainRetrievalQa`.
|
||||||
|
Modelos: `lmChatOpenAi`, `lmChatAnthropic`, `lmChatOllama`.
|
||||||
|
Memória: `memoryBufferWindow`, `memoryPostgresChat`, `memoryRedisChat`.
|
||||||
|
Tools: `toolCalculator`, `toolCode`, `toolHttpRequest`, `toolWorkflow`.
|
||||||
|
Vector Stores: `vectorStoreSupabase`, `vectorStorePinecone`, `vectorStorePgVector`.
|
||||||
|
|
||||||
|
### Chatbot básico
|
||||||
|
|
||||||
|
```
|
||||||
|
Webhook -> LLM Chat -> Memory Buffer -> Agent -> Resposta
|
||||||
|
```
|
||||||
|
|
||||||
|
### RAG
|
||||||
|
|
||||||
|
```
|
||||||
|
Documentos -> Embeddings -> Vector Store -> Query -> Retriever -> LLM
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
mcp__n8n__validate_node({
|
||||||
|
nodeType: "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
|
||||||
|
config: { mode: "insert", tableName: "documents", queryName: "match_documents" },
|
||||||
|
mode: "minimal"
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### AI Agent com tools
|
||||||
|
|
||||||
|
```js
|
||||||
|
mcp__n8n__validate_node({
|
||||||
|
nodeType: "@n8n/n8n-nodes-langchain.agent",
|
||||||
|
config: { agentType: "conversationalAgent", systemMessage: "Tu és um assistente prestável...", options: { returnIntermediateSteps: true } },
|
||||||
|
mode: "minimal"
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplos práticos
|
||||||
|
|
||||||
|
- Suporte: Webhook -> Memory Postgres -> Vector Store -> Chain Retrieval QA -> Webhook Response.
|
||||||
|
- Agent CRM: Webhook -> Agent (tools: pesquisar/criar lead/actualizar tarefa) -> Slack.
|
||||||
|
- Resumo PDFs: Webhook -> PDF Extract -> Text Splitter -> LLM Chain -> Email.
|
||||||
|
|
||||||
|
### Credenciais
|
||||||
|
|
||||||
|
OpenAI/Anthropic (API Key), Supabase (URL+Key), Pinecone (API Key).
|
||||||
|
|
||||||
|
### Boas práticas
|
||||||
|
|
||||||
|
System prompt claro | temperatura 0.1-0.3 | memória limitada | retry on error | logs de conversas.
|
||||||
|
|
||||||
|
### Troubleshooting
|
||||||
|
|
||||||
|
Inconsistente (baixar temperatura), contexto perdido (memória), RAG vazio (embeddings), timeout (limite), token limit (resumir).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Templates
|
||||||
|
|
||||||
|
```js
|
||||||
|
mcp__n8n__search_templates({ searchMode: "by_task", task: "ai_automation" })
|
||||||
|
mcp__n8n__search_templates({ searchMode: "keyword", query: "chatbot langchain openai" })
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Versão:** 2.0.0 (consolidação 6->1, 07-04-2026) | **Autor:** Descomplicar®
|
||||||
|
|
||||||
|
## Healing Log
|
||||||
|
|
||||||
|
```jsonl
|
||||||
|
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||||
|
```
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: core-descomplicar
|
name: core-descomplicar
|
||||||
description: Padrões fundamentais Descomplicar® — regras sagradas, standards de excelência e protocolo MCP. Skill base para todos os agentes.
|
description: Padrões fundamentais Descomplicar® — regras sagradas, standards de excelência e protocolo MCP. Skill base para todos os agentes.
|
||||||
user-invocable: false
|
user-invocable: false
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Core Standards Descomplicar®
|
# Core Standards Descomplicar®
|
||||||
@@ -63,7 +62,7 @@ Sempre pesquisar wiki CWP e skills `/cwp-*` antes de qualquer operação CWP. Ap
|
|||||||
**NUNCA simular quando dados reais existem.**
|
**NUNCA simular quando dados reais existem.**
|
||||||
|
|
||||||
Hierarquia:
|
Hierarquia:
|
||||||
1. MCPs especializados (desk-crm, dify-kb, wikijs)
|
1. MCPs especializados (desk-crm, dify-kb)
|
||||||
2. Sistemas internos (Gitea, Drive)
|
2. Sistemas internos (Gitea, Drive)
|
||||||
3. Documentação oficial (Context7)
|
3. Documentação oficial (Context7)
|
||||||
4. Simulação APENAS se dados não existem
|
4. Simulação APENAS se dados não existem
|
||||||
@@ -76,16 +75,17 @@ Hierarquia:
|
|||||||
|
|
||||||
```
|
```
|
||||||
SEMPRE EXECUTAR PRIMEIRO:
|
SEMPRE EXECUTAR PRIMEIRO:
|
||||||
1. mcp__mem_search_memories → Experiência histórica
|
1. IJFW (Tier 1) — automático via hooks (SessionStart/PostToolUse/Stop), nada a invocar
|
||||||
2. mcp__wikijs__search_pages → Documentação interna
|
2. mcp__mem0__search_memories → Mem0 (Tier 2): experiência histórica cross-agent
|
||||||
3. mcp__dify-kb__dify_kb_retrieve_segments → Knowledge base temática
|
3. /knowledge (router Hub QR/PROC) → Conhecimento curado do stack
|
||||||
|
4. mcp__dify-kb__dify_kb_retrieve_segments → Knowledge base temática
|
||||||
```
|
```
|
||||||
|
|
||||||
### PASSO 2: Hierarquia de Fontes
|
### PASSO 2: Hierarquia de Fontes
|
||||||
|
|
||||||
```
|
```
|
||||||
🥇 1ª: MCPs especializados (mem0, dify-kb, desk-crm-v3)
|
🥇 1ª: Memória — IJFW Tier 1 (automático) + Mem0 Tier 2 (mcp__mem0__*)
|
||||||
🥈 2ª: MCPs de sistema (wikijs, filesystem, google-workspace)
|
🥈 2ª: MCPs especializados (dify-kb, desk-crm-v3) e de sistema (filesystem, google-workspace)
|
||||||
🥉 3ª: MCPs complementares (context7, puppeteer)
|
🥉 3ª: MCPs complementares (context7, puppeteer)
|
||||||
🔧 ÚLTIMO: Ferramentas nativas Claude
|
🔧 ÚLTIMO: Ferramentas nativas Claude
|
||||||
```
|
```
|
||||||
@@ -93,10 +93,16 @@ SEMPRE EXECUTAR PRIMEIRO:
|
|||||||
### PASSO 3: Captura de Aprendizagem
|
### PASSO 3: Captura de Aprendizagem
|
||||||
|
|
||||||
```
|
```
|
||||||
SEMPRE GUARDAR ao final:
|
Factos duráveis (Tier 2, protocolo Wayland v2):
|
||||||
mcp__mem_save_memory {
|
1. Dedup primeiro: mcp__mem0__search_memories
|
||||||
"text": "[área/projecto/tipo] [Resumo do trabalho e decisões]"
|
2. Guardar: mcp__mem0__save_memory
|
||||||
}
|
- P5 = identidade ("Emanuel | atributo | valor")
|
||||||
|
- P4 = procedimento ("COMO fazer X em Y: método Z")
|
||||||
|
- P3 = facto atómico (S|P|O, máx 80 chars)
|
||||||
|
- tier=global (cross-projecto) ou tier=project
|
||||||
|
- Tags: mínimo 2, kebab-case
|
||||||
|
Estado de sessão: NÃO guardar em Mem0 — é papel do IJFW (Tier 1, automático).
|
||||||
|
MEMORY.md pessoal de agente: deprecated.
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ name: agent-context-injector
|
|||||||
description: Injeccao dinamica de contexto (MCPs e Skills) nos agentes via script Python + hook SessionStart com deteccao de staleness.
|
description: Injeccao dinamica de contexto (MCPs e Skills) nos agentes via script Python + hook SessionStart com deteccao de staleness.
|
||||||
user-invocable: false
|
user-invocable: false
|
||||||
allowed-tools: Read, Glob, Grep, ToolSearch
|
allowed-tools: Read, Glob, Grep, ToolSearch
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Agent Context Injector
|
# Agent Context Injector
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ name: component-generator
|
|||||||
description: Gera componentes Claude Code (skills, agents, commands) seguindo templates Descomplicar® com ciclo criar, validar e registar.
|
description: Gera componentes Claude Code (skills, agents, commands) seguindo templates Descomplicar® com ciclo criar, validar e registar.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
allowed-tools: Read, Write, Edit, Glob, ToolSearch
|
allowed-tools: Read, Write, Edit, Glob, ToolSearch
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Component Generator
|
# Component Generator
|
||||||
@@ -266,4 +265,32 @@ Após criação, invoca `quality-validator` para garantir score >= 70:
|
|||||||
User: Cria uma nova skill para gestão de backups
|
User: Cria uma nova skill para gestão de backups
|
||||||
|
|
||||||
Component Generator:
|
Component Generator:
|
||||||
1. [Cria directório skills/backup-mana
|
1. [Cria directório skills/backup-manager/]
|
||||||
|
2. [Gera SKILL.md com template Descomplicar®]
|
||||||
|
3. [Valida: score 65/100 - Draft]
|
||||||
|
4. [Regista em cr_skills (id: 55)]
|
||||||
|
5. [Cria tarefa Desk #1503]
|
||||||
|
6. Resposta: "Skill backup-manager criada com sucesso!
|
||||||
|
- Path: skills/backup-manager/SKILL.md
|
||||||
|
- Score: 65/100 (Draft)
|
||||||
|
- Próximo passo: Editar e correr /descomplicar:validate"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Limites
|
||||||
|
|
||||||
|
- Apenas cria estrutura base - conteúdo deve ser desenvolvido
|
||||||
|
- Score inicial tipicamente 50-70 (Draft)
|
||||||
|
- Não cria componentes duplicados (verifica slug existente)
|
||||||
|
- Requer conexão MySQL para registo em cr_*
|
||||||
|
- Não modifica componentes existentes (usar Edit tool)
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ name: db-maintenance-manager
|
|||||||
description: Manutenção automatizada das tabelas cr_* da infraestrutura Claude Code — limpeza de órfãos, migração de schema, backups e optimização.
|
description: Manutenção automatizada das tabelas cr_* da infraestrutura Claude Code — limpeza de órfãos, migração de schema, backups e optimização.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
allowed-tools: Read, Glob, Grep, ToolSearch
|
allowed-tools: Read, Glob, Grep, ToolSearch
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# DB Maintenance Manager
|
# DB Maintenance Manager
|
||||||
@@ -170,4 +169,106 @@ OPTIMIZE TABLE cr_agent_usage, cr_skill_usage, cr_mcp_tool_usage;
|
|||||||
ANALYZE TABLE cr_agents, cr_skills, cr_mcps, cr_agent_mcps;
|
ANALYZE TABLE cr_agents, cr_skills, cr_mcps, cr_agent_mcps;
|
||||||
|
|
||||||
-- Verificar índices em falta
|
-- Verificar índices em falta
|
||||||
SE
|
SELECT DISTINCT table_name, column_name
|
||||||
|
FROM information_schema.columns c
|
||||||
|
WHERE table_schema = DATABASE()
|
||||||
|
AND table_name LIKE 'cr_%'
|
||||||
|
AND column_name LIKE '%_id'
|
||||||
|
AND NOT EXISTS (
|
||||||
|
SELECT 1 FROM information_schema.statistics s
|
||||||
|
WHERE s.table_schema = c.table_schema
|
||||||
|
AND s.table_name = c.table_name
|
||||||
|
AND s.column_name = c.column_name
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
```
|
||||||
|
ANALISAR → BACKUP → EXECUTAR → VALIDAR → REPORTAR
|
||||||
|
```
|
||||||
|
|
||||||
|
1. **ANALISAR**: Identificar necessidades de manutenção
|
||||||
|
2. **BACKUP**: Criar backup antes de operações destrutivas
|
||||||
|
3. **EXECUTAR**: Correr operação com transação
|
||||||
|
4. **VALIDAR**: Verificar integridade pós-operação
|
||||||
|
5. **REPORTAR**: Registar em cr_maintenance_log
|
||||||
|
|
||||||
|
## Integrações
|
||||||
|
|
||||||
|
- **MCP**: desk-crm-v3 (operações MySQL)
|
||||||
|
- **Commands**:
|
||||||
|
- `/descomplicar:db-cleanup` - Limpeza de órfãos
|
||||||
|
- `/descomplicar:db-migrate` - Migração de schema
|
||||||
|
- `/descomplicar:db-backup` - Backup selectivo
|
||||||
|
- `/descomplicar:db-archive` - Archiving telemetria
|
||||||
|
- **Skills**: infrastructure-manager (detecção), quality-validator (validação)
|
||||||
|
|
||||||
|
## Métricas de Sucesso
|
||||||
|
|
||||||
|
| Métrica | Target |
|
||||||
|
|---------|--------|
|
||||||
|
| Órfãos | 0 |
|
||||||
|
| Telemetria activa | < 90 dias |
|
||||||
|
| Backup age | < 7 dias |
|
||||||
|
| Migrations pendentes | 0 |
|
||||||
|
|
||||||
|
## Exemplo de Uso
|
||||||
|
|
||||||
|
```
|
||||||
|
User: A BD tem dados antigos e órfãos. Limpa tudo.
|
||||||
|
|
||||||
|
DB Maintenance Manager:
|
||||||
|
1. [Analisa estado actual]
|
||||||
|
- Órfãos: 12 em cr_agent_mcps, 3 em cr_skill_mcps
|
||||||
|
- Telemetria: 45.000 registos > 90 dias
|
||||||
|
- Último backup: há 15 dias
|
||||||
|
|
||||||
|
2. [Cria backup preventivo]
|
||||||
|
✓ Backup criado: cr_backup_20260204_163000/
|
||||||
|
|
||||||
|
3. [Executa limpeza órfãos]
|
||||||
|
✓ cr_agent_mcps: 12 órfãos removidos
|
||||||
|
✓ cr_skill_mcps: 3 órfãos removidos
|
||||||
|
|
||||||
|
4. [Executa archiving]
|
||||||
|
✓ cr_agent_usage: 15.000 → archive
|
||||||
|
✓ cr_skill_usage: 20.000 → archive
|
||||||
|
✓ cr_mcp_tool_usage: 10.000 → archive
|
||||||
|
|
||||||
|
5. [Valida resultado]
|
||||||
|
✓ Integridade OK
|
||||||
|
✓ 0 órfãos
|
||||||
|
✓ Telemetria < 90 dias
|
||||||
|
|
||||||
|
Resultado:
|
||||||
|
╔════════════════════════════════════════╗
|
||||||
|
║ DB MAINTENANCE COMPLETE ║
|
||||||
|
╠════════════════════════════════════════╣
|
||||||
|
║ Órfãos removidos: 15 ║
|
||||||
|
║ Registos arquivados: 45.000 ║
|
||||||
|
║ Espaço libertado: ~12 MB ║
|
||||||
|
║ Backup: ✓ Criado ║
|
||||||
|
╚════════════════════════════════════════╝
|
||||||
|
```
|
||||||
|
|
||||||
|
## Limites
|
||||||
|
|
||||||
|
- Não executa operações destrutivas sem backup prévio
|
||||||
|
- Archiving mantém dados (move, não apaga)
|
||||||
|
- Migrations requerem aprovação manual
|
||||||
|
- Backup não inclui tabelas não-cr_*
|
||||||
|
- Optimização pode demorar em tabelas grandes (>1M registos)
|
||||||
|
- Não substitui backups gerais do Desk CRM
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: infrastructure-manager
|
name: infrastructure-manager
|
||||||
description: Gestão automatizada da infraestrutura Claude Code Descomplicar — componentes, health, sincronização e relacionamentos entre MCPs, skills e agentes.
|
description: Gestão automatizada da infraestrutura Claude Code Descomplicar — componentes, health, sincronização e relacionamentos entre MCPs, skills e agentes.
|
||||||
allowed-tools: Read, Glob, Grep, ToolSearch
|
allowed-tools: Read, Glob, Grep, ToolSearch
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Infrastructure Manager
|
# Infrastructure Manager
|
||||||
@@ -162,4 +161,57 @@ DETECTAR → DIAGNOSTICAR → REPARAR → VALIDAR → REPORTAR
|
|||||||
- **MCPs**: desk-crm-v3, filesystem, mcp-time
|
- **MCPs**: desk-crm-v3, filesystem, mcp-time
|
||||||
- **Commands**:
|
- **Commands**:
|
||||||
- `/descomplicar:status` - Dashboard completo
|
- `/descomplicar:status` - Dashboard completo
|
||||||
- `/descomplicar:sy
|
- `/descomplicar:sync` - Sincronização
|
||||||
|
- `/descomplicar:relationships` - Gestão relacionamentos
|
||||||
|
- `/descomplicar:telemetry` - Métricas de uso
|
||||||
|
- `/descomplicar:decision-trees` - Gestão decision trees
|
||||||
|
- `/descomplicar:lsps` - Gestão Language Server Protocols
|
||||||
|
|
||||||
|
## Métricas de Sucesso
|
||||||
|
|
||||||
|
| Métrica | Target |
|
||||||
|
|---------|--------|
|
||||||
|
| Health Score | >= 90 |
|
||||||
|
| Órfãos | 0 |
|
||||||
|
| Sync latency | < 5s |
|
||||||
|
| Telemetry coverage | 100% |
|
||||||
|
|
||||||
|
## Exemplo de Uso
|
||||||
|
|
||||||
|
```
|
||||||
|
User: Qual o estado da infraestrutura?
|
||||||
|
|
||||||
|
Infrastructure Manager:
|
||||||
|
1. [Verifica data/hora: 2026-02-04 16:00]
|
||||||
|
2. [Query entidades: 46 agents, 54 skills, 33 MCPs]
|
||||||
|
3. [Query relacionamentos: 800+ total, 0 órfãos]
|
||||||
|
4. [Calcula Health Score: 95/100]
|
||||||
|
5. Resposta:
|
||||||
|
"Health Score: 95/100 ████████████████████░ EXCELENTE
|
||||||
|
|
||||||
|
Core: 46 agents ✓ | 54 skills ✓ | 33 MCPs ✓
|
||||||
|
Relacionamentos: 800+ (0 órfãos) ✓
|
||||||
|
Última sync: há 2h
|
||||||
|
|
||||||
|
Alerta menor: MCP 'moloni' com latência 2.1s"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Limites
|
||||||
|
|
||||||
|
- Health Score é indicativo, não absoluto
|
||||||
|
- Sync pode demorar > 5s em bases de dados grandes
|
||||||
|
- Detecção de órfãos limitada a tabelas cr_* conhecidas
|
||||||
|
- Não corrige problemas automaticamente (apenas reporta)
|
||||||
|
- Telemetria depende de hooks activos e funcionais
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: metrics
|
name: metrics
|
||||||
description: Dashboard de metricas de performance de skills e agentes com telemetria quantitativa, trending temporal, alertas de degradacao e calculo de ROI.
|
description: Dashboard de metricas de performance de skills e agentes com telemetria quantitativa, trending temporal, alertas de degradacao e calculo de ROI.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# SKILL: Performance Metrics Dashboard
|
# SKILL: Performance Metrics Dashboard
|
||||||
@@ -181,4 +180,47 @@ if (degradation_pct > 15) {
|
|||||||
| Comando | Foco | Quando Usar |
|
| Comando | Foco | Quando Usar |
|
||||||
|---------|------|-------------|
|
|---------|------|-------------|
|
||||||
| `/taskforce kb-health` | Saude sistema KB | Visao arquitectural |
|
| `/taskforce kb-health` | Saude sistema KB | Visao arquitectural |
|
||||||
| `/metrics --kb` | Performance queries
|
| `/metrics --kb` | Performance queries KB | Analise operacional |
|
||||||
|
| `/metrics --roi` | Valor economico gerado | Justificacao investimento |
|
||||||
|
|
||||||
|
**Workflow recomendado:**
|
||||||
|
1. `/taskforce kb-health` - Verificar gaps e coverage
|
||||||
|
2. `/metrics --kb` - Analisar performance queries
|
||||||
|
3. `/metrics --roi` - Calcular ROI para stakeholders
|
||||||
|
|
||||||
|
Link Desk CRM: `https://desk.descomplicar.pt/admin/projects/view/65`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notas Tecnicas
|
||||||
|
|
||||||
|
**Tabelas DB:** `tblskill_agent_metrics` (telemetria), `tblskill_agent_baselines` (baselines), `tblskill_agent_pdca_cycles` (PDCA historico)
|
||||||
|
|
||||||
|
**Tools:** Implementados em `/opt/desk-crm-v3/src/tools/core/metrics.ts`
|
||||||
|
|
||||||
|
**Fallback:** Se tools MCP nao disponiveis, usar queries SQL directas via `sql_direct`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conteudo Detalhado
|
||||||
|
|
||||||
|
| Referencia | Conteudo |
|
||||||
|
|------------|----------|
|
||||||
|
| [references/sql-queries.md](references/sql-queries.md) | Queries SQL completas (top 10, ROI, trending) |
|
||||||
|
| [references/dashboards-templates.md](references/dashboards-templates.md) | Templates visuais KB, ROI, alertas, export, ASCII charts |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Desk CRM:** Projecto #65, Task #1637
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: plugin-curator
|
name: plugin-curator
|
||||||
description: Curadoria inteligente de plugins para o ecossistema Claude Code — descoberta, recomendações, actualizações e identificação de gaps funcionais.
|
description: Curadoria inteligente de plugins para o ecossistema Claude Code — descoberta, recomendações, actualizações e identificação de gaps funcionais.
|
||||||
allowed-tools: Read, Glob, Grep, WebFetch, WebSearch
|
allowed-tools: Read, Glob, Grep, WebFetch, WebSearch
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Plugin Curator
|
# Plugin Curator
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ name: plugin-config
|
|||||||
description: Gestão inteligente de plugins por contexto. Avalia regras aditivas e activa cada plugin relevante para o contexto actual (directório, ficheiros, conversa).
|
description: Gestão inteligente de plugins por contexto. Avalia regras aditivas e activa cada plugin relevante para o contexto actual (directório, ficheiros, conversa).
|
||||||
user-invocable: false
|
user-invocable: false
|
||||||
allowed-tools: Read, Bash, Glob
|
allowed-tools: Read, Bash, Glob
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /plugin-config v3.0 - Gestao Inteligente de Plugins
|
# /plugin-config v3.0 - Gestao Inteligente de Plugins
|
||||||
@@ -153,4 +152,4 @@ Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de exe
|
|||||||
{"date":"","issue":"","fix":"","source":"user|auto"}
|
{"date":"","issue":"","fix":"","source":"user|auto"}
|
||||||
```
|
```
|
||||||
|
|
||||||
*Adicionar nova linha ap
|
*Adicionar nova linha após cada erro corrigido.*
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
"description": "Servidores, CWP, EasyPanel, Proxmox, SSL, DNS, Docker, backups servidor",
|
"description": "Servidores, CWP, EasyPanel, Proxmox, SSL, DNS, Docker, backups servidor",
|
||||||
"activate_when": {
|
"activate_when": {
|
||||||
"files": ["docker-compose.yml", "Dockerfile", ".env.production"],
|
"files": ["docker-compose.yml", "Dockerfile", ".env.production"],
|
||||||
"directories": ["/root/Dev"],
|
"directories": ["/media/ealmeida/Dados/Dev"],
|
||||||
"keywords": ["servidor", "server", "cwp", "easypanel", "proxmox", "ssl certificado", "dns", "docker", "deploy", "backup servidor", "nginx", "apache", "firewall", "ssh servidor", "email servidor", "postfix", "pbs", "migration vm"]
|
"keywords": ["servidor", "server", "cwp", "easypanel", "proxmox", "ssl certificado", "dns", "docker", "deploy", "backup servidor", "nginx", "apache", "firewall", "ssh servidor", "email servidor", "postfix", "pbs", "migration vm"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: quality-validator
|
name: quality-validator
|
||||||
description: Validação de componentes contra os standards Descomplicar® — frontmatter, checklists e quality gates antes de activação ou release.
|
description: Validação de componentes contra os standards Descomplicar® — frontmatter, checklists e quality gates antes de activação ou release.
|
||||||
allowed-tools: Read, Glob, Grep
|
allowed-tools: Read, Glob, Grep
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Quality Validator
|
# Quality Validator
|
||||||
@@ -141,4 +140,63 @@ score = (campos_obrigatorios * peso_obrigatorio) + (campos_opcionais * peso_opci
|
|||||||
- Score >= 70 para activar componente
|
- Score >= 70 para activar componente
|
||||||
- Se < 70: AVISO + sugestões
|
- Se < 70: AVISO + sugestões
|
||||||
|
|
||||||
### Gate 3: Re
|
### Gate 3: Release
|
||||||
|
- Score >= 90 para todos os componentes
|
||||||
|
- Se algum < 90: BLOQUEAR release
|
||||||
|
|
||||||
|
## Integração com Sync
|
||||||
|
|
||||||
|
Durante `/descomplicar:sync`:
|
||||||
|
```sql
|
||||||
|
-- Verificar componentes com score baixo
|
||||||
|
SELECT c.slug, c.quality_score, c.status
|
||||||
|
FROM cr_skills c
|
||||||
|
WHERE c.quality_score < 70 AND c.status = 'active';
|
||||||
|
|
||||||
|
-- Marcar para revisão
|
||||||
|
UPDATE cr_skills
|
||||||
|
SET status = 'review_required'
|
||||||
|
WHERE quality_score < 70 AND status = 'active';
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
```
|
||||||
|
READ COMPONENT → PARSE FRONTMATTER → CHECK SECTIONS → CALCULATE SCORE → REPORT
|
||||||
|
↓ ↓ ↓ ↓ ↓
|
||||||
|
File path YAML valid All present 0-100 Suggestions
|
||||||
|
```
|
||||||
|
|
||||||
|
## Exemplo de Uso
|
||||||
|
|
||||||
|
```
|
||||||
|
User: Valida a skill infrastructure-manager
|
||||||
|
|
||||||
|
Quality Validator:
|
||||||
|
1. [Lê skills/infrastructure-manager/SKILL.md]
|
||||||
|
2. [Verifica frontmatter: 6/6 campos]
|
||||||
|
3. [Verifica secções: 4/5 presentes]
|
||||||
|
4. [Calcula score: 85/100]
|
||||||
|
5. Resultado:
|
||||||
|
"Score: 85/100 (BETA)
|
||||||
|
✓ Pronto para uso
|
||||||
|
Sugestão: Adicionar secção 'Limites' para score 90+"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Limites
|
||||||
|
|
||||||
|
- Não modifica componentes (apenas lê e reporta)
|
||||||
|
- Não cria componentes (usar component-generator)
|
||||||
|
- Não executa correções automáticas (usar /descomplicar:upgrade)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: relationship-manager
|
name: relationship-manager
|
||||||
description: Gestão inteligente de relacionamentos entre componentes do sistema — mapeamento de dependências, colaborações agent-MCP/skill e análise de impacto.
|
description: Gestão inteligente de relacionamentos entre componentes do sistema — mapeamento de dependências, colaborações agent-MCP/skill e análise de impacto.
|
||||||
allowed-tools: Read, Glob, Grep, ToolSearch
|
allowed-tools: Read, Glob, Grep, ToolSearch
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Relationship Manager
|
# Relationship Manager
|
||||||
@@ -188,4 +187,51 @@ WHERE sm.mcp_id = (SELECT id FROM cr_mcps WHERE slug = ?);
|
|||||||
1. Verificar impacto com análise de dependências
|
1. Verificar impacto com análise de dependências
|
||||||
2. Confirmar com utilizador
|
2. Confirmar com utilizador
|
||||||
3. Remover relacionamentos (ou marcar inactive)
|
3. Remover relacionamentos (ou marcar inactive)
|
||||||
4. Actualizar decision tre
|
4. Actualizar decision trees
|
||||||
|
5. Log em telemetria
|
||||||
|
|
||||||
|
## Métricas
|
||||||
|
|
||||||
|
| Métrica | Descrição |
|
||||||
|
|---------|-----------|
|
||||||
|
| Densidade | Média de relacionamentos por componente |
|
||||||
|
| Cobertura | % de componentes com relacionamentos |
|
||||||
|
| Consistência | % de relacionamentos válidos |
|
||||||
|
| Conectividade | Componentes isolados vs conectados |
|
||||||
|
|
||||||
|
## Exemplo de Uso
|
||||||
|
|
||||||
|
```
|
||||||
|
User: Configura o novo agente video-editor com os MCPs necessários
|
||||||
|
|
||||||
|
Relationship Manager:
|
||||||
|
1. [Analisa agentes similares na categoria 'content']
|
||||||
|
2. [Identifica MCPs comuns: filesystem, google-workspace, elevenlabs]
|
||||||
|
3. [Sugere relacionamentos:]
|
||||||
|
- PRIMARY: filesystem, elevenlabs
|
||||||
|
- RECOMMENDED: google-workspace, pexels, pixabay
|
||||||
|
- AVAILABLE: vimeo, youtube-uploader
|
||||||
|
4. [Cria mapeamentos em cr_agent_mcps]
|
||||||
|
5. [Sugere colaborações: content-manager, copywriter]
|
||||||
|
6. [Reporta: "Agente video-editor configurado com 7 MCPs e 2 colaborações"]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Limites
|
||||||
|
|
||||||
|
- Não cria componentes novos (apenas relacionamentos)
|
||||||
|
- Sugestões baseadas em padrões podem não ser 100% precisas
|
||||||
|
- Análise de impacto limitada a relacionamentos directos
|
||||||
|
- Não propaga alterações automaticamente (requer confirmação)
|
||||||
|
- Depende de consistência das tabelas cr_* na BD
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "crm-ops",
|
"name": "crm-ops",
|
||||||
"description": "CRM operations, sales management, leads, customers, estimates, invoices, tickets and expense tracking with Desk CRM. Backed by NotebookLM notebooks.",
|
"description": "CRM operations, sales management, leads, customers, estimates, invoices, tickets and expense tracking with Desk CRM. Backed by NotebookLM notebooks.",
|
||||||
"version": "1.2.0",
|
"version": "1.3.1",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Descomplicar - Crescimento Digital",
|
"name": "Descomplicar - Crescimento Digital",
|
||||||
"url": "https://descomplicar.pt"
|
"url": "https://descomplicar.pt"
|
||||||
|
|||||||
@@ -1,5 +1,16 @@
|
|||||||
# CHANGELOG — crm-ops
|
# CHANGELOG — crm-ops
|
||||||
|
|
||||||
|
## 1.3.1 — 2026-10-17
|
||||||
|
### Corrigido
|
||||||
|
- `estrategia-marca/references/metodologia-acida.md`: ACIDA = Atrair, Construir confiança, Interesse, Decisão, Ação (decisão do Emanuel). A tabela "ACIDA 2.0 — Fases operacionais" (Análise, Criação, Implementação, Desenvolvimento, Acompanhamento) passa a "Ciclo de projeto (orientado pela ACIDA)".
|
||||||
|
|
||||||
|
## 1.3.0 — 2026-10-17
|
||||||
|
### Alterado
|
||||||
|
- `estrategia-marca`: alinhada com a SPEC de Estratégia de Marca v2.0 (níveis Essencial, Standard e Completo; estrutura completa de 36 capítulos com todos os elementos das estratégias já entregues; BRIEFING-LLM e validador obrigatórios na entrega).
|
||||||
|
- Fundida a antiga `marketing:brand-strategy` (rondas de briefing, níveis, erros a evitar, exemplo de persona com 20 dimensões).
|
||||||
|
### Adicionado
|
||||||
|
- `references/estrutura-completa.md`, `references/prompt-redacao-parte.md` (redação em paralelo por parte), `scripts/montar.py` (montagem + anexo de pontos a validar), `scripts/render_pdf.py` (PDF A4 com a identidade da marca), `assets/marca-descomplicar.json`.
|
||||||
|
|
||||||
## 0.1.0 — 2026-06-30
|
## 0.1.0 — 2026-06-30
|
||||||
### Adicionado
|
### Adicionado
|
||||||
- Estrutura padrão (PROC-DEV-STANDARD)
|
- Estrutura padrão (PROC-DEV-STANDARD)
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Glob, ToolSearch
|
tools: Read, Write, Edit, Glob, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- google-workspace
|
- google-workspace
|
||||||
@@ -46,7 +48,6 @@ escalates_to:
|
|||||||
created: "2025-01-13"
|
created: "2025-01-13"
|
||||||
updated: "2026-02-04"
|
updated: "2026-02-04"
|
||||||
author: "Descomplicar®"
|
author: "Descomplicar®"
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Budget Proposal Specialist Descomplicar
|
# Budget Proposal Specialist Descomplicar
|
||||||
@@ -172,4 +173,65 @@ Você é um especialista comercial responsável por:
|
|||||||
|
|
||||||
## Knowledge Sources (Consultar SEMPRE)
|
## Knowledge Sources (Consultar SEMPRE)
|
||||||
|
|
||||||
### NotebookLM (Primario - usar PRIMEIR
|
### NotebookLM (Primario - usar PRIMEIRO)
|
||||||
|
|
||||||
|
```
|
||||||
|
mcp__notebooklm__notebook_query notebook_id:"76647e0f-3ae2-4c00-a0a8-f457aebf5655" query:"orcamento proposta pricing"
|
||||||
|
mcp__notebooklm__notebook_query notebook_id:"0c9c079c-a426-486c-99eb-1564d42d37ad" query:"projectos estimativa custos"
|
||||||
|
mcp__notebooklm__notebook_query notebook_id:"5be0d1a6-00f2-4cd9-b835-978cb7721601" query:"desenvolvimento custos"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Your Available MCPs
|
||||||
|
|
||||||
|
### Recommended for business
|
||||||
|
- **desk-crm-v3** - Clientes, projectos, facturas, time tracking
|
||||||
|
- **moloni** - Facturação
|
||||||
|
- **google-workspace** - Email, calendário, docs, drive
|
||||||
|
- **imap** - Email IMAP
|
||||||
|
- **mem0** - Mem0 (Tier 2, `mcp__mem0__*`) + IJFW (Tier 1, automático via hooks)
|
||||||
|
- **** - Knowledge base AI
|
||||||
|
- **outline-api** - Outline documentation
|
||||||
|
|
||||||
|
### All Available (32 total)
|
||||||
|
context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-research, youtube-uploader, 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 obrigatorias de duplicados e confirmacoes
|
||||||
|
- Invoke: `/crm-ops`
|
||||||
|
|
||||||
|
✓ **/orcamento** - Criação sistemática de orçamentos Descomplicar®. Usar quando o utilizador pedir
|
||||||
|
- Invoke: `/orcamento`
|
||||||
|
|
||||||
|
✓ **/billing-check** - Comparação de horas trabalhadas (Desk CRM) vs horas facturadas (Moloni). Identif
|
||||||
|
- Invoke: `/billing-check`
|
||||||
|
|
||||||
|
✓ **/lead-approach** - Abordagem estratégica de leads - análise, estratégia e primeiro contacto. Usar q
|
||||||
|
- Invoke: `/lead-approach`
|
||||||
|
|
||||||
|
### Recommended for business
|
||||||
|
- **/ecommerce** - Estratégia e arquitectura e-commerce - funil conversão, plat
|
||||||
|
- **/saas** - Arquitectura e desenvolvimento SaaS - multi-tenant, billing,
|
||||||
|
- **/product** - Gestão de produto e planeamento features - discovery, RICE p
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
/content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /video, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Colaboração
|
||||||
|
|
||||||
|
- **Reports to**: Sales Manager
|
||||||
|
- **Colabora com**: Project Manager, Development Lead, Marketing Planning Expert, Finance Manager
|
||||||
|
- **Escalar para**: Sales Manager (decisões pricing fora tabela), Project Manager (validar prazos)
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- google-workspace
|
- google-workspace
|
||||||
@@ -36,7 +38,6 @@ compliance:
|
|||||||
created: '2025-01-13'
|
created: '2025-01-13'
|
||||||
updated: '2026-02-04'
|
updated: '2026-02-04'
|
||||||
author: Descomplicar®
|
author: Descomplicar®
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
# Lead Approach Strategist Descomplicar
|
# Lead Approach Strategist Descomplicar
|
||||||
|
|
||||||
@@ -167,7 +168,7 @@ Estrategista comercial especializado em análise de leads e criação de abordag
|
|||||||
|
|
||||||
✓ **mem0** (system)
|
✓ **mem0** (system)
|
||||||
- Memória longo prazo
|
- Memória longo prazo
|
||||||
- Usage: `mcp__mem_*`
|
- Usage: `mcp__mem0__*`
|
||||||
|
|
||||||
### Recommended for marketing
|
### Recommended for marketing
|
||||||
- **google-workspace** - Email, calendário, docs, drive
|
- **google-workspace** - Email, calendário, docs, drive
|
||||||
@@ -176,4 +177,45 @@ Estrategista comercial especializado em análise de leads e criação de abordag
|
|||||||
- **youtube-uploader** - Upload vídeos YouTube
|
- **youtube-uploader** - Upload vídeos YouTube
|
||||||
- **pixabay** - Pesquisa imagens e vídeos stock gratuitos
|
- **pixabay** - Pesquisa imagens e vídeos stock gratuitos
|
||||||
- **pexels** - Pesquisa imagens stock de alta qualidade
|
- **pexels** - Pesquisa imagens stock de alta qualidade
|
||||||
- **tavily** - AI-powered search API
|
- **tavily** - AI-powered search API - web search optimizado para LLMs
|
||||||
|
- **elevenlabs** - Text-to-speech, voice cloning, audio transcription
|
||||||
|
- **vimeo** - Video management - upload, metadata, transcripts, analytics
|
||||||
|
- **replicate** - AI models - imagem, vídeo, áudio, LLMs
|
||||||
|
|
||||||
|
### All Available (32 total)
|
||||||
|
moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, imap, outline-api, gsc, lighthouse, mcp-time, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, magic, design-systems
|
||||||
|
|
||||||
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
|
## Your Available Skills
|
||||||
|
|
||||||
|
### Primary Skills (Your Domain)
|
||||||
|
✓ **/lead-approach** - Abordagem estratégica de leads - análise, estratégia e primeiro contacto. Usar q
|
||||||
|
- Invoke: `/lead-approach`
|
||||||
|
|
||||||
|
✓ **/marketing-strategy** - Estratégia de marketing digital integrada - análise mercado, posicionamento, mix
|
||||||
|
- Invoke: `/marketing-strategy`
|
||||||
|
|
||||||
|
✓ **/ads** - Gestão de campanhas de publicidade paga (PPC) - Google Ads, Meta Ads, LinkedIn A
|
||||||
|
- Invoke: `/ads`
|
||||||
|
|
||||||
|
### Recommended for marketing
|
||||||
|
- **/social-media** - Gestão e estratégia de redes sociais - Instagram, LinkedIn,
|
||||||
|
- **/content-marketing-pt** - Criação de conteúdo marketing em Português Europeu. Tom de v
|
||||||
|
- **/seo-content-optimization** - Optimização SEO técnico e conteúdo - meta tags, structured d
|
||||||
|
- **/youtube** - Extrair transcrições e metadados do YouTube + Estratégia cre
|
||||||
|
- **/research** - Pesquisa profunda e análise competitiva - SWOT, Porter's Fiv
|
||||||
|
|
||||||
|
### 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, /orcamento, /saas, /remotion-video, /video, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /doc-sync, /product, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /time, /today, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ model: sonnet
|
|||||||
tools: Read, Glob, Grep, ToolSearch
|
tools: Read, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
recommended_mcps:
|
recommended_mcps:
|
||||||
@@ -35,7 +37,6 @@ compliance:
|
|||||||
created: '2025-01-13'
|
created: '2025-01-13'
|
||||||
updated: '2026-02-04'
|
updated: '2026-02-04'
|
||||||
author: Descomplicar®
|
author: Descomplicar®
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
# Lead Qualifier Descomplicar
|
# Lead Qualifier Descomplicar
|
||||||
|
|
||||||
@@ -131,7 +132,7 @@ Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em pr
|
|||||||
|
|
||||||
✓ **mem0** (system)
|
✓ **mem0** (system)
|
||||||
- Memória longo prazo
|
- Memória longo prazo
|
||||||
- Usage: `mcp__mem_*`
|
- Usage: `mcp__mem0__*`
|
||||||
|
|
||||||
### Recommended for business
|
### Recommended for business
|
||||||
- **moloni** - Facturação
|
- **moloni** - Facturação
|
||||||
@@ -140,7 +141,7 @@ Avalia e prioriza leads inbound, garantindo que a equipa de vendas se foca em pr
|
|||||||
- **outline-api** - Outline documentation
|
- **outline-api** - Outline documentation
|
||||||
|
|
||||||
### All Available (32 total)
|
### 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
|
context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-research, youtube-uploader, 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.
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
@@ -151,4 +152,52 @@ context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, youtube-re
|
|||||||
- Invoke: `/crm-ops`
|
- Invoke: `/crm-ops`
|
||||||
|
|
||||||
✓ **/orcamento** - Criação sistemática de orçamentos Descomplicar®. Usar quando o utilizador pedir
|
✓ **/orcamento** - Criação sistemática de orçamentos Descomplicar®. Usar quando o utilizador pedir
|
||||||
- Invoke:
|
- Invoke: `/orcamento`
|
||||||
|
|
||||||
|
✓ **/billing-check** - Comparação de horas trabalhadas (Desk CRM) vs horas facturadas (Moloni). Identif
|
||||||
|
- Invoke: `/billing-check`
|
||||||
|
|
||||||
|
✓ **/lead-approach** - Abordagem estratégica de leads - análise, estratégia e primeiro contacto. Usar q
|
||||||
|
- Invoke: `/lead-approach`
|
||||||
|
|
||||||
|
### Recommended for business
|
||||||
|
- **/ecommerce** - Estratégia e arquitectura e-commerce - funil conversão, plat
|
||||||
|
- **/saas** - Arquitectura e desenvolvimento SaaS - multi-tenant, billing,
|
||||||
|
- **/product** - Gestão de produto e planeamento features - discovery, RICE p
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
/content-marketing-pt, /remotion-video, /seo-content-optimization, /social-media, /video, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **3 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce Marketing Estratégico
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Vendas
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -18,13 +18,15 @@ user_invocable: true
|
|||||||
tier: 1
|
tier: 1
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3 # Business operations
|
- desk-crm-v3 # Business operations
|
||||||
- google-workspace # Docs, Sheets, proposals
|
- google-workspace # Docs, Sheets, proposals
|
||||||
recommended_mcps:
|
recommended_mcps:
|
||||||
- moloni # Invoicing
|
- moloni # Invoicing
|
||||||
- imap # Email management
|
- imap # Email management
|
||||||
- mem0 # Long-term memory
|
- mem0 # Memória longo prazo (Tier 2) via Mem0
|
||||||
- outline-api # Documentation
|
- outline-api # Documentation
|
||||||
|
|
||||||
primary_skills:
|
primary_skills:
|
||||||
@@ -68,7 +70,6 @@ collaborations:
|
|||||||
created: 2026-02-04
|
created: 2026-02-04
|
||||||
last_updated: 2026-02-04
|
last_updated: 2026-02-04
|
||||||
quality_score: 85
|
quality_score: 85
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Sales Manager Descomplicar
|
# Sales Manager Descomplicar
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ domain: Support, CRM
|
|||||||
model: sonnet
|
model: sonnet
|
||||||
tools: Read, Glob, Grep, ToolSearch
|
tools: Read, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
recommended_mcps:
|
recommended_mcps:
|
||||||
@@ -51,7 +53,6 @@ escalates_to:
|
|||||||
created: "2026-04-07"
|
created: "2026-04-07"
|
||||||
updated: "2026-04-07"
|
updated: "2026-04-07"
|
||||||
author: "Descomplicar®"
|
author: "Descomplicar®"
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Support Specialist Descomplicar
|
# Support Specialist Descomplicar
|
||||||
@@ -156,4 +157,30 @@ Você é o especialista de suporte D2 da Descomplicar®. A sua missão é garant
|
|||||||
### Referências PROCs (Consultar SEMPRE)
|
### Referências PROCs (Consultar SEMPRE)
|
||||||
```
|
```
|
||||||
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/D2-Suporte/PROC-D2-SUP-001-Atendimento-Cliente.md
|
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/D2-Suporte/PROC-D2-SUP-001-Atendimento-Cliente.md
|
||||||
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Procedimento
|
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/D2-Suporte/PROC-D2-SUP-002-Ticketing-Workflow.md
|
||||||
|
Read: /media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/D2-Suporte/PROC-D2-SUP-003-SLA-Management.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Desk CRM (Dados Reais)
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__get_tickets({ status: [1,2,3] })
|
||||||
|
mcp__desk-crm-v3__get_ticket({ ticket_id: id })
|
||||||
|
mcp__desk-crm-v3__reply_ticket({ ticket_id: id, message: html, internal: false })
|
||||||
|
mcp__desk-crm-v3__close_ticket({ ticket_id: id })
|
||||||
|
```
|
||||||
|
|
||||||
|
## Métricas de Sucesso
|
||||||
|
|
||||||
|
| Métrica | Meta |
|
||||||
|
|---------|------|
|
||||||
|
| SLA resposta cumprido | >95% |
|
||||||
|
| SLA resolução cumprido | >90% |
|
||||||
|
| Resolução 1º contacto | >60% |
|
||||||
|
| NPS médio | >8/10 |
|
||||||
|
| Tickets P1 violados | 0/semana |
|
||||||
|
|
||||||
|
## Colaboração
|
||||||
|
|
||||||
|
- **Reporta a**: Emanuel Almeida
|
||||||
|
- **Colabora com**: sales-manager (tickets pós-venda), lead-qualifier (clientes novos)
|
||||||
|
- **Escalar para**: Emanuel (P1 crítico, SLA violado), D7 Tecnologia (tech complexo)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: auto-expense
|
name: auto-expense
|
||||||
description: Criação automática de despesas a partir de facturas detectadas no IMAP e tickets. Extrai dados, verifica duplicados por reference_no e cria despesas no Desk CRM com PDF anexo.
|
description: Criação automática de despesas a partir de facturas detectadas no IMAP e tickets. Extrai dados, verifica duplicados por reference_no e cria despesas no Desk CRM com PDF anexo.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /auto-expense v1.1
|
# /auto-expense v1.1
|
||||||
@@ -143,4 +142,96 @@ Formato linha: id_desk;data;categoria;fornecedor;descricao;valor;SIM;ficheiro;em
|
|||||||
Escrever em ~/.claude-work/today-expenses-{date}.json:
|
Escrever em ~/.claude-work/today-expenses-{date}.json:
|
||||||
{
|
{
|
||||||
"despesas_criadas": [
|
"despesas_criadas": [
|
||||||
{"id": 1180, "fornecedor": "MEO", "valor": 76.26, "moeda": "EUR", "referencia": "FT A/8
|
{"id": 1180, "fornecedor": "MEO", "valor": 76.26, "moeda": "EUR", "referencia": "FT A/861215955"}
|
||||||
|
],
|
||||||
|
"duplicados": [
|
||||||
|
{"fornecedor": "MEO", "referencia": "FT A/861215955", "existente_id": 1175, "camada": 0}
|
||||||
|
],
|
||||||
|
"flagged": [
|
||||||
|
{"fornecedor": "Desconhecido", "nota": "TOConline - emitente desconhecido: XPTO LDA"}
|
||||||
|
],
|
||||||
|
"erros": [],
|
||||||
|
"total_processadas": 1,
|
||||||
|
"total_duplicados": 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Plataformas Multi-Fornecedor - Padroes de Extracao
|
||||||
|
|
||||||
|
> Ver tabela completa em: Hub/06-Operacoes/Documentacao/fornecedores-recorrentes.md
|
||||||
|
|
||||||
|
| Plataforma | Padrao no Subject/HTML |
|
||||||
|
|-----------|----------------------|
|
||||||
|
| TOConline | "Emitido por:", "Emitente:" no HTML |
|
||||||
|
| Stripe | "Receipt from [Empresa]" ou "Your receipt from [Empresa]" no subject |
|
||||||
|
| PayPal | "You paid [Empresa]" no subject |
|
||||||
|
| FastSpring | "Order from [Empresa]" no subject/corpo |
|
||||||
|
| PayPro Global | Nome produto/empresa no corpo |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Campos Criticos Desk CRM
|
||||||
|
|
||||||
|
```
|
||||||
|
currency = 3 (EUR) → Fornecedores EUR
|
||||||
|
currency = 2 (USD) → Fornecedores USD (manter valor original, NAO converter)
|
||||||
|
currency = 1 → NAO EXISTE - causa despesas invisiveis
|
||||||
|
|
||||||
|
tax = 1 → Fornecedores PT (MEO, Moloni, PTisp, Staples)
|
||||||
|
tax = 0 → Fornecedores estrangeiros
|
||||||
|
|
||||||
|
send_invoice_to_customer = 0 → OBRIGATORIO (sem default na BD)
|
||||||
|
|
||||||
|
reference_no → coluna correcta (NAO "reference") — CHAVE DE DEDUPLICACAO
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Output Standalone
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Auto-Despesas - DD-MM-YYYY
|
||||||
|
|
||||||
|
### Despesas Criadas (X)
|
||||||
|
| # Desk | Fornecedor | Valor | Moeda | Ref | PDF |
|
||||||
|
|--------|-----------|-------|-------|-----|-----|
|
||||||
|
|
||||||
|
### Duplicados Detectados (Y)
|
||||||
|
| Fornecedor | Ref | ID Existente | Camada |
|
||||||
|
|-----------|-----|-------------|--------|
|
||||||
|
|
||||||
|
### Pendentes Revisao (Z)
|
||||||
|
- [Plataforma] - emitente desconhecido: [nome]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-Patterns
|
||||||
|
|
||||||
|
- NUNCA usar currency=1 (nao existe)
|
||||||
|
- NUNCA converter USD para EUR (manter original com currency=2)
|
||||||
|
- NUNCA criar despesa sem verificar duplicado primeiro (3 camadas obrigatorias)
|
||||||
|
- NUNCA omitir send_invoice_to_customer=0
|
||||||
|
- NUNCA omitir reference_no ao criar despesa (chave primaria de dedup)
|
||||||
|
- NUNCA saltar a Camada 0 (referencia de factura) — e a mais fiavel
|
||||||
|
- SEMPRE ler o email/ticket HTML para extrair valor real (nunca assumir)
|
||||||
|
- SEMPRE incluir reference_no quando disponivel
|
||||||
|
- SEMPRE logar duplicados detectados no output JSON com camada e ID existente
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Skill v1.1.0 | 30-03-2026 | Descomplicar | Fix: dedup por reference_no (DES-137)*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: billing-check
|
name: billing-check
|
||||||
description: Verificação de facturação e validação de facturas. Sincroniza facturas Moloni com horas Desk CRM para projectos 360, compara horas facturadas vs entregues e calcula saldos.
|
description: Verificação de facturação e validação de facturas. Sincroniza facturas Moloni com horas Desk CRM para projectos 360, compara horas facturadas vs entregues e calcula saldos.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Billing Check - Desk vs Moloni (v2.0)
|
# Billing Check - Desk vs Moloni (v2.0)
|
||||||
@@ -224,4 +223,85 @@ ToolSearch: "+desk timesheets"
|
|||||||
|
|
||||||
### v1.0.0 (2026-01-27)
|
### v1.0.0 (2026-01-27)
|
||||||
- Versão inicial
|
- Versão inicial
|
||||||
- Documentação de mapeamento Desk ↔
|
- Documentação de mapeamento Desk ↔ Moloni
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Dashboard:** https://plan-eal.descomplicar.pt
|
||||||
|
**Versão**: 2.0.0 | **Autor**: 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 aprovação manual obrigatória
|
||||||
|
- Quando os requisitos não estão claramente definidos
|
||||||
|
|
||||||
|
|
||||||
|
## Protocolo de Execução
|
||||||
|
|
||||||
|
1. **Análise Inicial**
|
||||||
|
- Verificar requisitos e contexto
|
||||||
|
- Identificar ferramentas necessárias
|
||||||
|
|
||||||
|
2. **Preparação**
|
||||||
|
- Validar acesso a recursos
|
||||||
|
- Preparar ambiente de trabalho
|
||||||
|
|
||||||
|
3. **Execução**
|
||||||
|
- Executar operações de forma incremental
|
||||||
|
- Validar cada passo antes de prosseguir
|
||||||
|
|
||||||
|
4. **Validação**
|
||||||
|
- Verificar resultados obtidos
|
||||||
|
- Confirmar sucesso da operação
|
||||||
|
|
||||||
|
5. **Conclusão**
|
||||||
|
- Documentar alterações realizadas
|
||||||
|
- Reportar status final e próximos passos
|
||||||
|
|
||||||
|
|
||||||
|
## Exemplos de Uso
|
||||||
|
|
||||||
|
### Exemplo 1: Caso Básico
|
||||||
|
```
|
||||||
|
User: [requisição simples relacionada com billing-check]
|
||||||
|
Skill: [execução directa com validação]
|
||||||
|
Output: [resultado conciso e accionável]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo 2: Caso Complexo
|
||||||
|
```
|
||||||
|
User: [requisição multi-passo ou complexa]
|
||||||
|
Skill:
|
||||||
|
1. Análise dos requisitos
|
||||||
|
2. Planeamento da abordagem
|
||||||
|
3. Execução faseada
|
||||||
|
4. Validação contínua
|
||||||
|
Output: [resultado detalhado com próximos passos]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo 3: Caso com Dependências
|
||||||
|
```
|
||||||
|
User: [requisição que depende de outros sistemas]
|
||||||
|
Skill:
|
||||||
|
1. Verificar dependências disponíveis
|
||||||
|
2. Coordenar com skills/MCPs necessários
|
||||||
|
3. Executar workflow integrado
|
||||||
|
Output: [resultado completo com referências]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: crm-admin
|
name: crm-admin
|
||||||
description: Administração e manutenção do Desk CRM. Gestão de utilizadores, permissões, campos personalizados, configuração de sistema e módulos Perfex.
|
description: Administração e manutenção do Desk CRM. Gestão de utilizadores, permissões, campos personalizados, configuração de sistema e módulos Perfex.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# CRM Admin Specialist
|
# CRM Admin Specialist
|
||||||
@@ -23,8 +22,8 @@ Skill para gestão e desenvolvimento Perfex CRM seguindo padrões Descomplicar®
|
|||||||
Antes de qualquer operação, usar MCPs:
|
Antes de qualquer operação, usar MCPs:
|
||||||
```
|
```
|
||||||
mcp__desk-crm-v3__get_customers - verificar dados existentes
|
mcp__desk-crm-v3__get_customers - verificar dados existentes
|
||||||
mcp__mem_search_memories "[contexto crm]"
|
mcp__mem0__search_memories "[contexto crm]"
|
||||||
mcp__wikijs__search_pages "perfex crm [funcionalidade]"
|
/knowledge (router Hub QR/PROC) + mcp__mem0__search_memories "perfex crm [funcionalidade]"
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Dados Reais Obrigatórios
|
### 2. Dados Reais Obrigatórios
|
||||||
@@ -155,4 +154,84 @@ mcp__dify-kb__dify_kb_retrieve_segments({
|
|||||||
### Quando Consultar
|
### Quando Consultar
|
||||||
|
|
||||||
- Desenvolver módulos Perfex CRM
|
- Desenvolver módulos Perfex CRM
|
||||||
- Configurar automações de
|
- Configurar automações de vendas
|
||||||
|
- Optimizar processos de facturação
|
||||||
|
- Implementar workflows de gestão de clientes
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versão**: 1.0.0 | **Autor**: Descomplicar®
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instrumentação Automática
|
||||||
|
|
||||||
|
Esta skill grava métricas automaticamente para análise PDCA.
|
||||||
|
|
||||||
|
### Query para Gravar (executar no final)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO tblskill_agent_metrics (
|
||||||
|
type, name, duration_ms, status, staff_id,
|
||||||
|
kb_consulted, kb_cache_hit, tool_calls, project_id
|
||||||
|
) VALUES (
|
||||||
|
'skill', '/$SKILL_NAME', {DURACAO_MS}, '{STATUS}', 25,
|
||||||
|
{KB_CONSULTADO}, {CACHE_HIT}, {TOOL_CALLS}, {PROJECT_ID}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Instrumentação**: Activa | **Data**: 2026-02-03
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## 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 aprovação manual obrigatória
|
||||||
|
- Quando os requisitos não estão claramente definidos
|
||||||
|
|
||||||
|
|
||||||
|
## Exemplos de Uso
|
||||||
|
|
||||||
|
### Exemplo 1: Caso Básico
|
||||||
|
```
|
||||||
|
User: [requisição simples relacionada com crm-admin]
|
||||||
|
Skill: [execução directa com validação]
|
||||||
|
Output: [resultado conciso e accionável]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo 2: Caso Complexo
|
||||||
|
```
|
||||||
|
User: [requisição multi-passo ou complexa]
|
||||||
|
Skill:
|
||||||
|
1. Análise dos requisitos
|
||||||
|
2. Planeamento da abordagem
|
||||||
|
3. Execução faseada
|
||||||
|
4. Validação contínua
|
||||||
|
Output: [resultado detalhado com próximos passos]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo 3: Caso com Dependências
|
||||||
|
```
|
||||||
|
User: [requisição que depende de outros sistemas]
|
||||||
|
Skill:
|
||||||
|
1. Verificar dependências disponíveis
|
||||||
|
2. Coordenar com skills/MCPs necessários
|
||||||
|
3. Executar workflow integrado
|
||||||
|
Output: [resultado completo com referências]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
+107
-2
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: crm
|
name: crm
|
||||||
description: Operações CRM unificadas. Leads, customers, proposals, estimates e visão 360 do cliente. Consolida crm-ops e crm-admin com verificação obrigatória de duplicados.
|
description: Operações CRM unificadas. Leads, customers, proposals, estimates e visão 360 do cliente. Consolida crm-ops e crm-admin com verificação obrigatória de duplicados.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /crm v2.0 - Operações CRM Unificadas
|
# /crm v2.0 - Operações CRM Unificadas
|
||||||
@@ -221,4 +220,110 @@ Integrar insights do NotebookLM nas recomendações e decisões.
|
|||||||
### 💰 Financeiro
|
### 💰 Financeiro
|
||||||
| Métrica | Valor |
|
| Métrica | Valor |
|
||||||
|---------|-------|
|
|---------|-------|
|
||||||
| Total facturado | €
|
| Total facturado | €15.000 |
|
||||||
|
| Pagamentos | €12.000 |
|
||||||
|
| Em aberto | €3.000 |
|
||||||
|
|
||||||
|
### 🎫 Suporte
|
||||||
|
- Tickets abertos: 1
|
||||||
|
- Tickets total (12m): 8
|
||||||
|
- Tempo resposta médio: 4h
|
||||||
|
|
||||||
|
### 📝 Notas Recentes
|
||||||
|
- [2026-02-01] Reunião marcada para dia 10
|
||||||
|
- [2026-01-15] Preferem comunicação por email
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Status Codes
|
||||||
|
|
||||||
|
### Leads
|
||||||
|
| ID | Status |
|
||||||
|
|----|--------|
|
||||||
|
| 1 | Novo |
|
||||||
|
| 2 | Contactado |
|
||||||
|
| 3 | Qualificado |
|
||||||
|
| 4 | Proposta |
|
||||||
|
| 5 | Ganho (→ Customer) |
|
||||||
|
| 6 | Perdido |
|
||||||
|
|
||||||
|
### Estimates
|
||||||
|
| ID | Status |
|
||||||
|
|----|--------|
|
||||||
|
| 1 | Rascunho |
|
||||||
|
| 2 | Enviado |
|
||||||
|
| 3 | Visto |
|
||||||
|
| 4 | Aceite |
|
||||||
|
| 5 | Recusado |
|
||||||
|
|
||||||
|
### Proposals
|
||||||
|
| ID | Status |
|
||||||
|
|----|--------|
|
||||||
|
| 1 | Draft |
|
||||||
|
| 2 | Sent |
|
||||||
|
| 3 | Open |
|
||||||
|
| 6 | Accepted |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Staff IDs
|
||||||
|
|
||||||
|
| ID | Nome | Usar |
|
||||||
|
|----|------|------|
|
||||||
|
| 25 | AikTop | **Default** - automático |
|
||||||
|
| 1 | Emanuel | Comunicação cliente |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-Patterns (NUNCA)
|
||||||
|
|
||||||
|
1. **NUNCA** criar lead sem verificar duplicados
|
||||||
|
2. **NUNCA** criar customer sem confirmação explícita
|
||||||
|
3. **NUNCA** criar customer automaticamente para estimate
|
||||||
|
4. **NUNCA** usar estimate para leads (usar proposal)
|
||||||
|
5. **NUNCA** converter estimate não-aceite para invoice
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Migração
|
||||||
|
|
||||||
|
Skills descontinuadas:
|
||||||
|
- `/crm-ops` → migrar para `/crm`
|
||||||
|
- `/crm-admin` → comandos admin em `/crm`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### v2.0.0 (2026-02-05)
|
||||||
|
- Consolidar crm-ops + crm-admin
|
||||||
|
- Novo comando /crm 360 para visão cliente
|
||||||
|
- Todos os subcomandos unificados
|
||||||
|
- Anti-duplicados reforçado
|
||||||
|
|
||||||
|
### v1.2.0 (crm-ops)
|
||||||
|
- Distinção Lead vs Customer
|
||||||
|
- Proposal vs Estimate
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Self-Healing
|
||||||
|
|
||||||
|
Antes de executar, ler `~/.claude-work/healing/crm.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 v2.0.0 | 2026-02-05 | Descomplicar®*
|
||||||
|
|
||||||
|
|
||||||
|
## Healing Log
|
||||||
|
<!-- Registo automático de erros e correcções nesta skill -->
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: desk
|
name: desk
|
||||||
description: Contexto de projecto via .desk-project. Auto-detecção, integração com /time, status rápido, criação de tarefas e changelog. Sistema Triângulo Desk-GDrive-Local.
|
description: Contexto de projecto via .desk-project. Auto-detecção, integração com /time, status rápido, criação de tarefas e changelog. Sistema Triângulo Desk-GDrive-Local.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /desk v3.0 - Contexto de Projecto
|
# /desk v3.0 - Contexto de Projecto
|
||||||
@@ -229,4 +228,31 @@ Ao entrar numa pasta:
|
|||||||
- Mostrar timer activo no contexto
|
- Mostrar timer activo no contexto
|
||||||
- Sync bidirecional .desk-project
|
- Sync bidirecional .desk-project
|
||||||
|
|
||||||
### v
|
### v2.0.0 (2026-01-27)
|
||||||
|
- Sistema Triângulo implementado
|
||||||
|
- Auto-detecção .desk-project
|
||||||
|
|
||||||
|
### v1.0.0
|
||||||
|
- Versão inicial
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Self-Healing
|
||||||
|
|
||||||
|
Antes de executar, ler `~/.claude-work/healing/desk.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 v3.0.0 | 2026-02-05 | Descomplicar®*
|
||||||
|
|
||||||
|
|
||||||
|
## Healing Log
|
||||||
|
<!-- Registo automático de erros e correcções nesta skill -->
|
||||||
|
|||||||
@@ -1,115 +1,177 @@
|
|||||||
---
|
---
|
||||||
name: estrategia-marca
|
name: estrategia-marca
|
||||||
description: Cria estratégias de marca completas seguindo a metodologia Descomplicar® (ACIDA + Framework 16Ps). Inclui fase de pesquisa de mercado com /deep-research antes do briefing. Guia a análise de público, posicionamento, Pitch Canvas, copywriting e documento final entregável. Usar quando o utilizador diz "estratégia de marca", "branding", "criar marca", "posicionamento", "16Ps", "/estrategia-marca", "análise de público", "narrativa de marca", "proposta de valor", "pitch canvas", "pain + gain", "copywriting estratégico", "identidade de marca", "pesquisa de mercado para marca", ou quando um cliente adquire o serviço EST-MRK-010.
|
description: Cria estratégias de marca Descomplicar® (EST-MRK-010) conforme a SPEC v2.0 (16Ps 2026, 40Ps em projetos complexos, ≥5 nichos, 20 pontos por segmento, identidade visual da marca, bloco BRIEFING-LLM) em três níveis, Essencial, Standard e Completo, do briefing ao PDF A4 validado. A versão completa (36 capítulos) junta todos os elementos de todas as estratégias já entregues. Usar quando o utilizador diz "estratégia de marca", "brand strategy", "branding", "criar marca", "posicionamento", "16Ps", "40Ps", "/estrategia-marca", "análise de público", "personas", "segmentação", "narrativa de marca", "proposta de valor", "pitch canvas", "pain + gain", "copywriting estratégico", "tom de voz", "identidade de marca", "manifesto", "versão completa da estratégia", ou quando um cliente adquire o serviço EST-MRK-010.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill: Estratégia de Marca
|
# Skill: Estratégia de Marca
|
||||||
|
|
||||||
Guia completo para criar estratégias de marca Descomplicar® — da pesquisa de mercado ao documento final entregável.
|
Da pesquisa ao documento final validado e em PDF. Substitui a antiga skill
|
||||||
|
`marketing:brand-strategy` (fundida aqui a 17-10-2026).
|
||||||
|
|
||||||
---
|
## Fonte de verdade (ler antes de escrever)
|
||||||
|
|
||||||
## Fluxo de trabalho (8 fases)
|
Standard canónico em `Cloud/Descomplicar/ACIDA/Estrategia-de-Marca/`
|
||||||
|
(caminho local: `/media/ealmeida/Dados/Cloud/Descomplicar/ACIDA/Estrategia-de-Marca/`):
|
||||||
|
|
||||||
### Fase 0 — Pesquisa de mercado
|
| Ficheiro | Para quê |
|
||||||
|
|---|---|
|
||||||
|
| `SPEC-Estrategia-de-Marca.md` (v2.0) | Decisões canónicas, níveis, critérios de completude |
|
||||||
|
| `PROC-Estrategia-de-Marca.md` (v2.0) | Fases, gates, responsáveis |
|
||||||
|
| `CONTRATO-OUTPUT-LLM.md` | Esquema do bloco `## BRIEFING-LLM` |
|
||||||
|
| `golden-example-briefing-llm.md` | Bloco BRIEFING-LLM preenchido (Descomplicar®) |
|
||||||
|
| `validador-estrategia-marca.mjs` | Gate final: `node validador-estrategia-marca.mjs <ficheiro> [--completo]` |
|
||||||
|
|
||||||
Antes do briefing com o cliente, fazer pesquisa independente. Verificar primeiro se já existem ficheiros de pesquisa (ex: pasta `Pesquisas/` no projecto).
|
Esta skill implementa o PROC. Se algo aqui contradisser a SPEC, prevalece a SPEC.
|
||||||
|
|
||||||
**Se a pesquisa já existe:** ler os ficheiros relevantes e extrair síntese.
|
Decisões que não se regridem (SPEC §1): 16Ps com a numeração de 2026 como base;
|
||||||
|
40Ps só em projetos complexos; ≥5 nichos reais e 20 pontos por segmento;
|
||||||
|
paleta é sempre a da marca em causa (nunca a da Descomplicar® num cliente);
|
||||||
|
`## BRIEFING-LLM` como última secção; PT-PT estrito; nada inventado, o que
|
||||||
|
faltar fica `[a validar: …]` e vai para o anexo A.
|
||||||
|
|
||||||
**Se não existe:** usar `/deep-research` (ou `mcp__tavily__tavily_research`) com os seguintes focos:
|
## Níveis
|
||||||
|
|
||||||
1. **Mercado/sector** — dimensão, crescimento, tendências, regulação
|
| Nível | Quando | Estrutura | Modo de redação |
|
||||||
2. **Concorrentes** — posicionamento, mensagens, pricing, pontos fracos
|
|---|---|---|---|
|
||||||
3. **Público** — linguagem online, canais activos, dores expressas em fóruns/reviews
|
| Essencial | Produto próprio, iteração rápida | Capítulos E de `estrutura-completa.md` | Um agente, de seguida |
|
||||||
4. **Oportunidades** — gaps de mercado, tendências emergentes não exploradas
|
| Standard (default) | Cliente EST-MRK-010 | Capítulos E + S | Bloco a bloco com validação do utilizador |
|
||||||
|
| Completo | "versão completa", marca da casa, branding WOW, cliente com várias linhas de negócio | Todos os 36 capítulos e anexos | Subagentes em paralelo por parte (`prompt-redacao-parte.md`) |
|
||||||
|
|
||||||
Guardar síntese em `Pesquisas/sintese-mercado.md` no projecto do cliente.
|
Se o pedido for ambíguo, Standard. "Completa", "com todos os elementos" ou
|
||||||
|
"como a da Descomplicar" = Completo.
|
||||||
|
|
||||||
**Resultado esperado:** chegar ao briefing já com hipóteses validadas sobre o mercado e o público — não para impor, mas para fazer perguntas mais certeiras e poupar tempo ao cliente.
|
## Fases
|
||||||
|
|
||||||
### Fase 1 — Activação e contexto
|
### Fase 0. Pesquisa de mercado
|
||||||
|
Verificar se já existe pesquisa (`Pesquisas/` no projeto). Se não, usar
|
||||||
|
`/deep-research` (ou pesquisa web) sobre mercado, concorrentes, público e
|
||||||
|
oportunidades. Só fontes primárias para números (INE, Eurostat, reguladores,
|
||||||
|
associações), sempre com link. Guardar em `Pesquisas/sintese-mercado.md`.
|
||||||
|
|
||||||
Ao iniciar, perguntar:
|
### Fase 1. Ativação e contexto
|
||||||
- Qual o nome do cliente/marca?
|
Nome da marca, sector, material existente, concorrentes conhecidos, projeto no
|
||||||
- Já existe briefing ou material de partida?
|
Desk CRM (`get_project`). Para a própria Descomplicar® ou marcas da casa, ler
|
||||||
- Qual o sector/indústria?
|
também: `Cloud/Descomplicar/Planeamento/Estrategia-2026/`, o sistema de design
|
||||||
- Temos exemplos de concorrentes?
|
(`Hub/04-Stack/02.04-Sistemas/DesignSystem-Descomplicar/sistema/docs/marca.md`)
|
||||||
|
e as fichas OKF (`empresa/`, `produtos-servicos/`).
|
||||||
|
|
||||||
Se existir projecto no Desk CRM, verificar com `get_project` antes de prosseguir.
|
### Fase 2. Briefing (rondas curtas, saltar o que já se sabe)
|
||||||
|
1. Essenciais: nome, sector, o que vende, quem compra, website.
|
||||||
|
2. Contexto: problema que resolve, 2-3 concorrentes, diferenciador, material de marca, mercado geográfico.
|
||||||
|
3. Ambição: onde quer estar a 2-3 anos, nichos prioritários, enquadramento legal.
|
||||||
|
Perguntas completas em `references/perguntas-briefing.md`.
|
||||||
|
|
||||||
### Fase 2 — Briefing estruturado
|
### Fase 3. Fundamentos (P1-P4)
|
||||||
|
Problema em 3 níveis, propósito, missão, visão, valores, objetivos, posicionamento
|
||||||
|
testável, proposta de valor. `references/framework-16ps.md` (Bloco A).
|
||||||
|
Gate P4: sem declaração de posicionamento testável, não avançar.
|
||||||
|
|
||||||
Conduzir entrevista com as perguntas de `references/perguntas-briefing.md`.
|
### Fase 4. Público (P5-P7)
|
||||||
|
≥5 nichos sectoriais com 8 pontos (`references/nichos.md`; "PMEs" não é nicho),
|
||||||
|
depois os segmentos com os 20 pontos por ordem (`references/template-documento.md` §5,
|
||||||
|
exemplo em `references/exemplo-persona-20d.md`), personas nomeadas.
|
||||||
|
Gate Público: ≥5 nichos e ≥2 segmentos com os 20 pontos completos.
|
||||||
|
|
||||||
Organizar por blocos:
|
### Fase 5. Pitch canvas
|
||||||
1. Negócio (problema, serviços, mercado)
|
Para quem, problema, solução, resultado, porquê nós, mais a declaração de mudança no mundo.
|
||||||
2. Público-alvo (segmentos identificados)
|
|
||||||
3. Posicionamento actual vs desejado
|
|
||||||
4. Tom de voz e personalidade
|
|
||||||
5. Concorrência e diferenciação
|
|
||||||
|
|
||||||
### Fase 3 — Fundamentos estratégicos
|
### Fase 6. Copywriting
|
||||||
|
Questionamento estratégico (10 perguntas), Pain + Gain original e refinado,
|
||||||
|
narrativa por segmento (dor → solução → resultado), mensagem central, headlines.
|
||||||
|
`references/narrativas-copywriting.md`.
|
||||||
|
|
||||||
Desenvolver com o cliente:
|
### Fase 7. Restante documento
|
||||||
- **Proposta de valor única** — o que nos torna únicos, diferenciais, benefícios por camada
|
Seguir a ordem de `references/estrutura-completa.md` para o nível escolhido:
|
||||||
- **Missão, Visão, Valores e Objectivos** — com exemplos de como se manifestam na prática
|
identidade e expressão, oferta e preço, comunicação e canais, crescimento,
|
||||||
- **Apresentação sumária** — empresa + serviços com tabela clara
|
medição e roteiro. Gate Identidade Visual: paleta desta marca em hex.
|
||||||
- **Posicionamento** — declaração de posicionamento testável
|
|
||||||
|
|
||||||
Ver `references/framework-16ps.md` → Bloco A para questões orientadoras.
|
No nível Completo as fases 3 a 7 correm em paralelo: o orquestrador fecha as
|
||||||
|
decisões transversais e lança um subagente por parte com
|
||||||
|
`references/prompt-redacao-parte.md`. Depois lê os relatórios, alinha nomes
|
||||||
|
partilhados entre partes e retira o que não pode sair (detalhes de incidentes,
|
||||||
|
promessas sem cláusula, concorrentes nomeados em copy).
|
||||||
|
|
||||||
### Fase 4 — Análise de público (20 pontos por segmento)
|
### Fase 8. Montagem, validação e PDF
|
||||||
|
1. Escrever a introdução (resumo executivo de 1 página + "Sobre este documento":
|
||||||
|
fontes, decisões tomadas quando as fontes divergem, convenções).
|
||||||
|
2. Escrever o `## BRIEFING-LLM` (esquema do CONTRATO; partir do golden example
|
||||||
|
e trocar tudo pelos valores desta marca; coerente com o corpo).
|
||||||
|
3. Montar: `python3 scripts/montar.py --partes <dir> --intro intro.md --briefing briefing-llm.md --config marca.json --out <ficheiro>.md [--glossario …] [--historico …]`.
|
||||||
|
Gera o anexo A com todos os `[a validar]`.
|
||||||
|
4. Validar: `node <ACIDA>/Estrategia-de-Marca/validador-estrategia-marca.mjs <ficheiro>.md` (acrescentar `--completo` no nível Completo). Corrigir até 0 erros.
|
||||||
|
5. PDF A4: copiar `assets/marca-descomplicar.json` para o projeto, trocar cores,
|
||||||
|
fontes, logótipo e textos pelos da marca, e correr
|
||||||
|
`python3 scripts/render_pdf.py <ficheiro>.md <ficheiro>.pdf --config marca.json`.
|
||||||
|
6. Verificar: abrir pelo menos a capa, o índice, uma página de texto com € e uma
|
||||||
|
tabela (`pdftoppm -r 60 -f N -l N`); o script avisa se aparecerem fontes de
|
||||||
|
recurso do sistema (Liberation/DejaVu).
|
||||||
|
|
||||||
**Obrigatório:** Antes dos segmentos psicográficos, identificar os nichos sectoriais relevantes para o produto. Usar `references/nichos.md` para seleccionar e analisar **pelo menos 5 nichos específicos** (ex: clínicas de saúde, imobiliárias, agências digitais — não "PMEs" como categoria vaga). Para cada nicho preencher os 8 pontos do guia de análise sectorial. Cruzar com os 20 pontos psicográficos abaixo para construir personas completas.
|
### Fase 9. Entrega
|
||||||
|
- Estratégia de cliente: pasta do projeto do cliente (Desk/GDrive/local), nunca
|
||||||
|
na pasta do standard. Marca da casa: `Cloud/Descomplicar/Planeamento/…` e
|
||||||
|
atualizar a ficha OKF correspondente.
|
||||||
|
- Status `rascunho-para-validacao` enquanto houver pontos no anexo A;
|
||||||
|
`aprovado` só com o validador a 0 erros e revisão do Emanuel.
|
||||||
|
- Cliente no Desk: comentar na tarefa com o caminho e a lista de pontos a validar.
|
||||||
|
|
||||||
Para cada segmento identificado, desenvolver os 20 pontos na seguinte ordem:
|
## Checklist de entrega
|
||||||
|
|
||||||
1. Perfil Demográfico
|
- [ ] Pesquisa de mercado com fontes (Fase 0)
|
||||||
2. Perfil Psicográfico
|
- [ ] P1-P16 referidos explicitamente
|
||||||
3. Dores
|
- [ ] Posicionamento testável, proposta única de valor, missão, visão, valores
|
||||||
4. Anseios
|
- [ ] ≥5 nichos (8 pontos) e segmentos com os 20 pontos (≥2 Essencial, 3-4 Standard, todos Completo)
|
||||||
5. Desejos
|
- [ ] Pitch canvas + declaração de mudança no mundo
|
||||||
6. Frustrações
|
- [ ] Pain + Gain original e refinado, narrativa por segmento, mensagem central
|
||||||
7. Preocupações
|
- [ ] Identidade visual com paleta desta marca em hex
|
||||||
8. Medos
|
- [ ] KPIs com base e metas a 3/6/12 meses
|
||||||
9. Inimigos
|
- [ ] Capítulos do nível escolhido todos presentes (`estrutura-completa.md`)
|
||||||
10. Linguagem
|
- [ ] Anexo A gerado; nenhum dado inventado
|
||||||
11. Como procuram ajuda/informação/dicas
|
- [ ] `## BRIEFING-LLM` em último, sem placeholders
|
||||||
12. Canais digitais activos
|
- [ ] Validador a 0 erros; PDF A4 verificado visualmente
|
||||||
13. Estilo de Decisão
|
|
||||||
14. Mudanças (que sabem necessárias)
|
|
||||||
15. Resistência à mudança
|
|
||||||
16. Objecções típicas (+ como ultrapassar)
|
|
||||||
17. Forma de gerar emoção
|
|
||||||
18. Argumentos (a que são mais sensíveis)
|
|
||||||
19. Concorrentes (que alternativas avaliam)
|
|
||||||
20. Propostas Recusadas (e porquê)
|
|
||||||
|
|
||||||
Ver `references/metodologia-acida.md` para contexto e profundidade em cada ponto.
|
## Erros a evitar
|
||||||
|
|
||||||
### Fase 5 — Pitch Canvas
|
- Personas genéricas sem nome nem história; segmentos vagos ("PMEs").
|
||||||
|
- Missão e visão de modelo; SWOT vago ("boa qualidade"); headlines do tipo "soluções inovadoras".
|
||||||
|
- KPIs sem meta numérica; proposta de valor com funcionalidades em vez de benefícios; ignorar objeções.
|
||||||
|
- Números, casos, testemunhos, preços ou concorrentes sem fonte.
|
||||||
|
- Garantias de resultado ("ROI garantido") em texto para clientes sem cláusula contratual.
|
||||||
|
- Paleta da Descomplicar® na estratégia de um cliente.
|
||||||
|
- Assinatura antiga: a Descomplicar® assina "Agência de Marketing Digital" (sistema de design de 16-10-2026), não "Aceleração" nem "Crescimento Digital".
|
||||||
|
- PDF em Letter: é sempre A4.
|
||||||
|
|
||||||
Estrutura de 5 elementos:
|
## Referências
|
||||||
- **Para quem:** segmento + problema específico
|
|
||||||
- **O problema:** dor principal na linguagem do cliente
|
|
||||||
- **A solução:** mecanismo único de resolução
|
|
||||||
- **O resultado:** transformação concreta (antes/depois + métrica)
|
|
||||||
- **Por que nós:** razão para acreditar
|
|
||||||
|
|
||||||
Criar também a **Declaração de mudança no mundo** — frase que resume o impacto maior da marca.
|
| Ficheiro | Quando carregar |
|
||||||
|
|---|---|
|
||||||
|
| `references/estrutura-completa.md` | Sempre: ordem canónica, níveis, mapa 16Ps → capítulos |
|
||||||
|
| `references/prompt-redacao-parte.md` | Nível Completo: contexto e tarefa de cada subagente |
|
||||||
|
| `references/perguntas-briefing.md` | Fase 2 |
|
||||||
|
| `references/framework-16ps.md` | Fase 3 |
|
||||||
|
| `references/metodologia-acida.md` | Fases 3-4 |
|
||||||
|
| `references/nichos.md` | Fase 4: 10 nichos PT/UE, 8 pontos cada |
|
||||||
|
| `references/template-documento.md` | Guia de escrita de cada secção (20 pontos em detalhe, pitch canvas, KPIs, inventário) |
|
||||||
|
| `references/exemplo-persona-20d.md` | Fase 4: exemplo de segmento com as 20 dimensões |
|
||||||
|
| `references/narrativas-copywriting.md` | Fase 6 |
|
||||||
|
| `scripts/montar.py`, `scripts/render_pdf.py`, `assets/marca-descomplicar.json` | Fase 8 |
|
||||||
|
|
||||||
### Fase 6 — Copywriting estratégico
|
Exemplos reais: `99-Arquivo/Manual-OwnCloud-Descomplicar/exemplos estrategias de marca/`
|
||||||
|
(Carritools é o mais completo dos clientes) e a Estratégia Descomplicar® v3.0 em
|
||||||
|
`Cloud/Descomplicar/Planeamento/Estrategia-2026/DESCOMPLICAR_ESTRATEGIA_MARCA_V3.md`.
|
||||||
|
|
||||||
Sequência obrigatória:
|
## Contexto do serviço
|
||||||
|
|
||||||
1. **Questionamento estratégico** — Qual é o objectivo da comunicação? Que transformação prometemos?
|
- Código EST-MRK-010 · 900€ fixo · cerca de 30 horas (catálogo, outubro de 2026).
|
||||||
2. **Pain + Gain** — formulação problema/resultado na linguagem do cliente; depois refinar com especificidades do sector
|
- Entregáveis: documento estratégico, personas, narrativa, apresentação executiva editável, plano de implementação, sessão de alinhamento com a equipa, suporte por WhatsApp durante 1 mês.
|
||||||
3. **Narrativa por segmento** — fórmula: Problema (dor do público) → Solução (serviços) → Resultado (benefícios concretos)
|
- Identidade visual completa: Branding WOW (1 800€ a 4 500€).
|
||||||
4. **Mensagem central** — 1 frase que toda a equipa sabe de cor
|
|
||||||
5. **Headlines** — por segmento (principal + secundária)
|
|
||||||
|
|
||||||
Ver `references/narrativas-copywriting.md` para templates e exemplos reais.
|
## Healing Log
|
||||||
|
|
||||||
#
|
Lido antes de executar. Acrescentar uma linha por erro corrigido.
|
||||||
|
|
||||||
|
```jsonl
|
||||||
|
{"date":"2026-10-17","issue":"Skill dizia-se alinhada com a SPEC (GATE-HOOK) mas não pedia o BRIEFING-LLM; a estratégia Descomplicar v3 reprovou no validador","fix":"Fase 8 obriga a escrever o BRIEFING-LLM e a correr o validador antes de entregar","source":"auto"}
|
||||||
|
{"date":"2026-10-17","issue":"Subagentes copiaram identificadores e pormenores de incidentes de segurança para a SWOT","fix":"Contrato de redação proíbe; orquestrador revê antes de montar","source":"auto"}
|
||||||
|
{"date":"2026-10-17","issue":"PDF saiu com Liberation Sans em vez das fontes da marca: woff2 subset sem € e faces de recurso na mesma família com pesos diferentes","fix":"render_pdf.py usa família de recurso separada e avisa se houver fontes do sistema no PDF","source":"auto"}
|
||||||
|
{"date":"2026-10-17","issue":"Partes escritas em paralelo usaram durações e segmentos diferentes (diagnóstico 30 vs 45 min, 5 vs 6 segmentos)","fix":"Fixar nomes partilhados no bloco 'Decisões já tomadas' antes de lançar","source":"auto"}
|
||||||
|
```
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"_nota": "Config de exemplo para render_pdf.py e montar.py. Só para estratégias DA PRÓPRIA Descomplicar®. Para clientes, copiar e trocar cores, fontes, logótipo e textos pelos da marca do cliente (SPEC C4). Caminhos absolutos do posto 'desktop'/'hp' (Hub em /media/ealmeida/Dados).",
|
||||||
|
"marca": "Descomplicar®",
|
||||||
|
"titulo_documento": "Estratégia de marca",
|
||||||
|
"rodape": "Descomplicar® · Estratégia de marca",
|
||||||
|
"capa_eyebrow": "Documento estratégico · versão 3.0",
|
||||||
|
"capa_titulo": "Estratégia<br>de marca",
|
||||||
|
"capa_slogan": "Criamos Resultados!",
|
||||||
|
"capa_assinatura": "Descomplicar® - Agência de Marketing Digital",
|
||||||
|
"capa_data": "outubro de 2026",
|
||||||
|
"logo_capa": "/media/ealmeida/Dados/Hub/04-Stack/02.04-Sistemas/DesignSystem-Descomplicar/sistema/assets/Logos/assinatura-vertical-white.svg",
|
||||||
|
"fonte_titulos": "Montserrat",
|
||||||
|
"fonte_texto": "Roboto",
|
||||||
|
"fallback": "'DCArrows','DCFallback',sans-serif",
|
||||||
|
"fontes": [
|
||||||
|
{"family": "Montserrat", "src": "/media/ealmeida/Dados/Hub/04-Stack/02.04-Sistemas/DesignSystem-Descomplicar/sistema/fonts/Montserrat-latin-wght-normal.woff2"},
|
||||||
|
{"family": "Roboto", "src": "/media/ealmeida/Dados/Hub/04-Stack/02.04-Sistemas/DesignSystem-Descomplicar/sistema/fonts/Roboto-latin-wght-normal.woff2"},
|
||||||
|
{"family": "Roboto", "style": "italic", "src": "/media/ealmeida/Dados/Hub/04-Stack/02.04-Sistemas/DesignSystem-Descomplicar/sistema/fonts/Roboto-latin-wght-italic.woff2"},
|
||||||
|
{"family": "DCFallback", "weight": "100 500", "src": "/media/ealmeida/Dados/Dev/SEO-Reports/public/fonts/pdf/Roboto-Regular.ttf"},
|
||||||
|
{"family": "DCFallback", "weight": "600 900", "src": "/media/ealmeida/Dados/Dev/SEO-Reports/public/fonts/pdf/Roboto-Bold.ttf"},
|
||||||
|
{"family": "DCArrows", "src": "/media/ealmeida/Dados/Dev/SEO-Reports/public/fonts/pdf/Montserrat-Regular.ttf", "unicode_range": "U+2190-21FF"}
|
||||||
|
],
|
||||||
|
"cores": {
|
||||||
|
"escura": "#0e0d0b",
|
||||||
|
"clara_texto": "#f5f1e8",
|
||||||
|
"primaria": "#cc8d00",
|
||||||
|
"acento_texto": "#7a5400",
|
||||||
|
"texto": "#1a1814",
|
||||||
|
"texto_secundario": "#5c5750",
|
||||||
|
"suave": "#faf4e6",
|
||||||
|
"linha": "#e6e1d8",
|
||||||
|
"alternada": "#faf8f3",
|
||||||
|
"aviso_fundo": "#fdecc8",
|
||||||
|
"aviso_texto": "#5a3d00"
|
||||||
|
},
|
||||||
|
"frontmatter": {
|
||||||
|
"type": "Document",
|
||||||
|
"title": "Descomplicar® · Estratégia de marca",
|
||||||
|
"codigo": "EST-MRK-010",
|
||||||
|
"version": "3.0",
|
||||||
|
"status": "rascunho-para-validacao",
|
||||||
|
"elaborado": "Descomplicar® - Agência de Marketing Digital"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
# Estrutura completa — Estratégia de Marca Descomplicar® (SPEC v2.0)
|
||||||
|
|
||||||
|
Ordem canónica do documento de autoria. Junta, sem perder nenhum, todos os
|
||||||
|
elementos usados nas estratégias entregues (Carritools MCT, Espiral Sénior ESP,
|
||||||
|
Loja da Maria LJM, Sintricare SNT, Water Control WTC, Solar FV SFV), no modelo
|
||||||
|
ACIDA v3, no prompt 40Ps, na skill `brand-strategy` (40 pontos, fundida aqui) e
|
||||||
|
na Estratégia de Marca Descomplicar® v3.0 (17-10-2026), que é o exemplo de
|
||||||
|
referência do nível Completo.
|
||||||
|
|
||||||
|
Exemplo de referência (nível Completo, 34 capítulos, 192 páginas A4; anterior a esta
|
||||||
|
estrutura, junta os 20 pontos nos caps. 9-11 e não tem capítulo de jornada):
|
||||||
|
`Cloud/Descomplicar/Planeamento/Estrategia-2026/DESCOMPLICAR_ESTRATEGIA_MARCA_V3.md` (+ `.pdf`).
|
||||||
|
Exemplo de profundidade por capítulo (cliente): `99-Arquivo/Manual-OwnCloud-Descomplicar/exemplos estrategias de marca/MCT Estratégia de Marca Carritools.md`.
|
||||||
|
|
||||||
|
A ordem vai do contexto para a ação: perceber o mercado e a empresa, fixar os
|
||||||
|
fundamentos, conhecer o público, definir a expressão da marca, desenhar a oferta,
|
||||||
|
planear a comunicação e o crescimento, e por fim medir e implementar.
|
||||||
|
|
||||||
|
## Níveis de profundidade
|
||||||
|
|
||||||
|
| Nível | Quando | O que entra | Público |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Essencial | Produto próprio, iteração rápida, teste de posicionamento | Cabeçalho, caps. 2-4 resumidos, 5-8, 9 (≥5 nichos), 10 (≥2 segmentos com 20 pontos), 16, 17, 20, 27, 32, anexo A, BRIEFING-LLM | 2-3 segmentos |
|
||||||
|
| Standard (default) | Cliente EST-MRK-010 | Essencial + 1, 11, 13-15, 18, 19, 21, 23, 35, 36 (resumo), anexos B e D | 3-4 segmentos, 20 pontos cada |
|
||||||
|
| Completo | Pedido "versão completa", marca da casa, branding WOW, cliente com várias linhas de negócio | Todos os capítulos e anexos abaixo | Todos os segmentos com 20 pontos + secundários e prescritores |
|
||||||
|
|
||||||
|
Coluna "Nível" abaixo: E = Essencial, S = Standard, C = Completo. Um capítulo
|
||||||
|
marcado S entra em S e C; marcado E entra nos três.
|
||||||
|
|
||||||
|
## Cabeçalho (todos os níveis)
|
||||||
|
|
||||||
|
| Elemento | Conteúdo | Fonte de exemplo |
|
||||||
|
|---|---|---|
|
||||||
|
| Frontmatter | title, cliente, codigo EST-MRK-010, versao, data, elaborado ("Descomplicar® - Agência de Marketing Digital"), status `rascunho-para-validacao` / `aprovado` | template-documento |
|
||||||
|
| Capa | Marca, "Estratégia de marca", assinatura ou slogan do cliente | todos |
|
||||||
|
| Declaração de impacto | Uma frase de 10-15 palavras (a mudança no mundo) | template v3, LJM ("Alegria todo o dia"), WTC ("Cada gota conta") |
|
||||||
|
| Índice | Partes e capítulos | todos |
|
||||||
|
| Resumo executivo | Tabela de 1 página: assinatura, slogan, missão, visão, posicionamento, proposta única de valor, método, persona principal, oferta de entrada, prioridade imediata, cada um com o capítulo | v3.0 |
|
||||||
|
| Sobre este documento | Fontes usadas, decisões tomadas quando as fontes divergem, convenções (o que significa `[a validar]`) | v3.0 |
|
||||||
|
|
||||||
|
## Parte I. Contexto (P6 Pesquisa)
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | P / 40Ps | Nível | Fonte de exemplo |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| 1 | Apresentação | Quem é a empresa (identidade legal, fundação, equipa, localização), histórico e evolução, como opera, serviços e produtos em resumo, estado atual | P8 resumo; Apresentação institucional | S | SNT, WTC, template v3, v3.0 |
|
||||||
|
| 2 | Enquadramento do mercado e contexto social | Contexto do sector, dimensão, tendências, mudanças sociais e tecnológicas, enquadramento legal e regulatório, cultura e comunidade do sector | P6; Possibilidades | E (resumo) / C | MCT 1.1-1.5, LJM, ESP |
|
||||||
|
| 3 | Concorrência e oportunidades de diferenciação | Tipos de concorrente e posicionamento de cada tipo, matriz comparativa, propostas recusadas e porquê, oportunidades de diferenciação com a condição para serem credíveis | P4, P6 | E (resumo) / C | MCT 1.3-1.6 |
|
||||||
|
| 4 | Análise SWOT | Forças, fraquezas, oportunidades, ameaças com evidência; cruzamento estratégico (SO, ST, WO, WT) e prioridades | P6 | E (resumo) / C | LJM |
|
||||||
|
|
||||||
|
## Parte II. Fundamentos (P1-P4)
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | P | Nível | Fonte |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| 5 | Problema, causa e propósito | P1 em 3 níveis (superficial, real, raiz), a causa da marca, propósito (porquê, como, o quê), manifesto (opcional em E/S), lema interno | P1, P2 | E | WTC ("A nossa causa"), v3.0 |
|
||||||
|
| 6 | Missão, visão, valores e objetivos | Missão, visão com metas datadas, valores com comportamentos concretos ("fazemos / não fazemos"), objetivos estratégicos com indicador, base e meta | P2, P16 | E | todos |
|
||||||
|
| 7 | Posicionamento | Categoria e papel, declaração de posicionamento testável (formato clássico + 1 frase + versão oral), especialização vs. competição pelo preço, mapa de posicionamento, oportunidades | P4 | E | LJM, MCT 1.6 |
|
||||||
|
| 8 | Proposta de valor | Proposta única de valor, dores e como a marca as resolve (tabela), diferenciais, benefícios tangíveis e benefícios por camada/segmento, expectativas emocionais e racionais, USP, escada de valor | P3 | E | MCT 3, SNT, WTC |
|
||||||
|
|
||||||
|
## Parte III. Públicos (P5-P7)
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | P | Nível | Fonte |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| 9 | Nichos e segmentos | ≥5 nichos sectoriais com os 8 pontos (`nichos.md`); segmentos primário, secundário e terciário; critérios de cliente ideal (obrigatórios, desejáveis, sinais de alerta); anti-persona; públicos secundários (prescritores, parceiros, talento) | P5 | E | MCT 2, WTC, SNT |
|
||||||
|
| 10 | Análise de 20 pontos por segmento | Para cada segmento, os 20 pontos por ordem (ver lista abaixo), com o ponto 16 (objeções) sempre acompanhado do tratamento | P5-P7 | E (≥2 seg.) / S (3-4) / C (todos) | template-documento §5, ESP, WTC |
|
||||||
|
| 11 | Personas e dashboard de personas | Persona principal com nome, biografia, objetivos, frustrações, comportamento digital, processo de decisão, citações típicas, mapa de empatia; personas secundárias; dashboard (uma ficha por persona) | P7 | S | 40Ps [8], v3.0 |
|
||||||
|
| 12 | Jornada e experiência do cliente | Fases da jornada (descoberta, consideração, decisão, onboarding, fidelização), pontos de contacto, emoção e fricção por fase | P9, P10 | C | brand-strategy 23b |
|
||||||
|
|
||||||
|
Os 20 pontos (ordem fixa, cabeçalhos com estes nomes para o validador os
|
||||||
|
encontrar): Perfil demográfico · Perfil psicográfico · Dores · Anseios · Desejos ·
|
||||||
|
Frustrações · Preocupações · Medos · Inimigos · Linguagem · Como procuram
|
||||||
|
ajuda/informação · Canais digitais · Estilo de decisão · Mudanças · Resistência à
|
||||||
|
mudança · Objeções (+ como ultrapassar) · Forma de gerar emoção · Argumentos ·
|
||||||
|
Concorrentes · Propostas recusadas.
|
||||||
|
|
||||||
|
## Parte IV. Identidade e expressão
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | Nível | Fonte |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 13 | Personalidade da marca | Arquétipo, traços (é / não é), símbolo e o que representa | S | MCT 4.4 |
|
||||||
|
| 14 | Voz, tom e estilo de comunicação | Princípios de voz, tom por contexto (site, propostas, redes, suporte, crise), regras de escrita, léxico a usar e a banir, tabela "em vez de / escrever" | S | MCT 4.5-4.6, ESP "Voz da marca" |
|
||||||
|
| 15 | Narrativa e história da marca | Origem, porquê do nome, o cliente como herói, narrativa por segmento (Problema → Solução → Resultado) | S | ESP, SNT, WTC |
|
||||||
|
| 16 | Identidade visual | Paleta DESTA marca em hex (primária, secundária, neutros, proporções), tipografia, logótipo e versões, margens e mínimos, proibições, imagem, iconografia, acessibilidade. Nunca a paleta da Descomplicar® num cliente | E (obrigatório, SPEC C4) | MCT 4.7 |
|
||||||
|
| 17 | Assinaturas, slogan e mensagens-chave | Assinatura, slogan/tagline e regras de uso, mensagem central (≤10 palavras), mensagens-chave institucionais, mensagens e headlines por segmento, elevator pitch de 10/30/60 segundos | E | MCT 10, template-documento §7.4-7.5 |
|
||||||
|
|
||||||
|
## Parte V. Oferta e venda (P8-P10, P15)
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | P | Nível | Fonte |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| 18 | Produtos, serviços e metodologia | Arquitetura da oferta, catálogo por área, casos de uso, metodologia de entrega, processos críticos, placement (canais de distribuição, pontos de venda, presença física e digital) | P8, P9, P10 | S | SNT "Serviços", v3.0 |
|
||||||
|
| 19 | Preço e modelo comercial | Lógica de preço, pacotes, avenças, preços de referência COM fonte, política de descontos e pagamento, garantias (só com cláusula contratual) | P15 | S | v3.0 |
|
||||||
|
| 20 | Pitch canvas | Porque é útil e como usar; declaração de impacto/compromisso; problema e resultado (Pain + Gain); solução; demonstração; aspetos únicos; relações; parcerias; pistas de futuro e tecnologia; atração de clientes; investimento; declaração de mudança no mundo | P3, P4 | E | SNT, template v3 |
|
||||||
|
| 21 | Venda consultiva e demonstração | Etapas do primeiro contacto ao fecho, diagnóstico, guião de demonstração (preparação, introdução, demonstração ao vivo, casos de uso, perguntas, follow-up), materiais de apoio, FAQ | P10 | S | WTC "Demonstração", brand-strategy 36 |
|
||||||
|
|
||||||
|
## Parte VI. Comunicação e canais (P14)
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | Nível | Fonte |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 22 | Objetivos de comunicação | Consciencialização, educação, envolvimento, confiança e credibilidade, conversão, retenção, diferenciação, advocacia; um indicador por objetivo | C | ESP |
|
||||||
|
| 23 | Canais | Website (função, mensagens-chave, estratégia, frequência, estrutura de menu e páginas), redes sociais por rede, email marketing, eventos e feiras, material impresso, vídeo e áudio, relações públicas, proximidade (WhatsApp, comunidade) | S | MCT 5, WTC, ESP "Estrutura do site" |
|
||||||
|
| 24 | Marketing de conteúdo e política editorial | Pilares, tipos de conteúdo, secções do blog, lista de artigos iniciais com intenção, princípios editoriais, CTA de fim de artigo | C | ESP, MCT 6.1 |
|
||||||
|
| 25 | SEO e GEO | Clusters de palavras-chave (sem volumes inventados), on-page, técnico, link building, presença em respostas de IA | C | MCT 6.2 |
|
||||||
|
| 26 | Publicidade online | Por plataforma: importância, estratégia, formatos, frequência e orçamento; diferenciação dos canais | C | MCT 7 |
|
||||||
|
| 27 | Copywriting | Questionamento estratégico (10 perguntas) respondido, Pain + Gain original e refinado, exemplos de CTA, estrutura da página de captura | E | SNT "Resumo estratégico", WTC, ESP |
|
||||||
|
| 28 | Calendário de conteúdos | Cadência por canal (diária, semanal, mensal), temas por mês ou trimestre | C | MCT 5.6 |
|
||||||
|
|
||||||
|
## Parte VII. Crescimento (P11-P13, Projeção)
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | Nível | Fonte |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 29 | Parcerias | Tipos (tecnológicas, distribuição, prescritores, associações, criadores de conteúdo), objetivo e critério de cada tipo | C | MCT 8, WTC |
|
||||||
|
| 30 | Expansão | Novos mercados geográficos, novos serviços ou produtos, cenários alternativos, critérios de decisão para avançar | C | LJM (Espanha, dropshipping), MCT 8.4 |
|
||||||
|
| 31 | Atração de clientes e prova social | Casos de sucesso e testemunhos (só com autorização), workshops e seminários, ofertas de entrada, presença em comunidades, programa de referência | C | WTC "Atração de clientes" |
|
||||||
|
|
||||||
|
## Parte VIII. Medição e implementação (P12, P16)
|
||||||
|
|
||||||
|
| Cap. | Título | Contém | Nível | Fonte |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 32 | KPIs | Por área (site e SEO, redes, email, vendas, retenção): definição, fonte de dados, base, metas a 3/6/12 meses | E | MCT 9.1, SPEC P16 |
|
||||||
|
| 33 | Testes A/B e otimização contínua | Objetivos, variáveis, hipóteses, duração, análise | C | MCT 9.2, WTC |
|
||||||
|
| 34 | Sistema de relatórios | Semanal, mensal, trimestral: quem lê, o que contém, ferramenta | C | MCT 9.3 |
|
||||||
|
| 35 | Investimentos prioritários e inventário de ativos | Prioridades impacto/esforço, orçamento por canal, inventário de ativos de marketing (existe, estado, prioridade) | S | template-documento §9, §11 |
|
||||||
|
| 36 | Roteiro de implementação | Fases a 90 dias com entregáveis e responsáveis por papel, visão a 12 meses, recursos necessários, riscos e mitigação, notas de implementação (sessão de alinhamento, validação com clientes) | S (resumo) / C | v3.0, template-documento |
|
||||||
|
|
||||||
|
## Anexos e secção final
|
||||||
|
|
||||||
|
| Elemento | Contém | Nível |
|
||||||
|
|---|---|---|
|
||||||
|
| A. Pontos a validar | Lista gerada de todas as marcas `[a validar: …]`, por capítulo (o script `montar.py` gera-a) | todos |
|
||||||
|
| B. Glossário | Termos técnicos e nomes internos usados no documento | S |
|
||||||
|
| C. Complementos do sector | Enquadramento legal detalhado, informações operacionais, serviços detalhados (só quando o sector o pede) | C |
|
||||||
|
| D. Histórico de alterações | Versão, data, alteração | todos |
|
||||||
|
| `## BRIEFING-LLM` | Bloco-contrato YAML (`CONTRATO-OUTPUT-LLM.md`). **Última secção do ficheiro**, depois dos anexos | todos (obrigatório) |
|
||||||
|
|
||||||
|
## Mapa 16Ps → capítulos
|
||||||
|
|
||||||
|
| P | Capítulos |
|
||||||
|
|---|---|
|
||||||
|
| P1 Problema | 5 |
|
||||||
|
| P2 Propósito | 5, 6 |
|
||||||
|
| P3 Proposta de valor | 8, 20 |
|
||||||
|
| P4 Posicionamento | 3, 7 |
|
||||||
|
| P5 Público-alvo | 9, 10 |
|
||||||
|
| P6 Pesquisa | 2, 3, 4 |
|
||||||
|
| P7 Persona | 10, 11 |
|
||||||
|
| P8 Produto/serviço | 1, 18 |
|
||||||
|
| P9 Placement | 12, 18, 23 |
|
||||||
|
| P10 Processos críticos | 18, 21 |
|
||||||
|
| P11 Pessoas | 1, 36 (recursos) |
|
||||||
|
| P12 Planeamento | 28, 36 |
|
||||||
|
| P13 Parcerias | 29 |
|
||||||
|
| P14 Promoção | 22-27 |
|
||||||
|
| P15 Preço | 19 |
|
||||||
|
| P16 Performance | 6, 32-34 |
|
||||||
|
|
||||||
|
Escrever explicitamente "(P1)", "(P2)"… nos títulos ou na primeira linha de cada
|
||||||
|
capítulo: o validador procura as referências P1-P16 no texto.
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
# Exemplo de Persona — 20 Dimensoes
|
||||||
|
|
||||||
|
Baseado no padrao AcidaOS (o mais profundo dos exemplos Descomplicar).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Segmento A — O Empreendedor Sobrecarregado
|
||||||
|
|
||||||
|
**Prioridade:** Alta
|
||||||
|
**Dimensao estimada:** 45% do mercado-alvo
|
||||||
|
|
||||||
|
### 1. Perfil demografico
|
||||||
|
- Idade: 35-50 anos
|
||||||
|
- Genero: predominantemente masculino (60/40)
|
||||||
|
- Localizacao: areas urbanas, Portugal continental
|
||||||
|
- Educacao: licenciatura ou equivalente profissional
|
||||||
|
- Rendimento: 25.000-60.000 EUR/ano (empresa factura 100K-500K)
|
||||||
|
- Dimensao empresa: 2-15 colaboradores
|
||||||
|
- Sector: servicos, comercio, consultoria
|
||||||
|
|
||||||
|
### 2. Perfil psicografico
|
||||||
|
- Trabalhador incansavel, faz tudo sozinho
|
||||||
|
- Valoriza independencia acima de tudo
|
||||||
|
- Resistente a delegar por medo de perda de controlo
|
||||||
|
- Pragmatico — quer solucoes que funcionem, nao teoria
|
||||||
|
- Orgulho no que construiu mas frustrado com a estagnacao
|
||||||
|
- Ceptico em relacao a "solucoes magicas"
|
||||||
|
|
||||||
|
### 3. Dores
|
||||||
|
- "Trabalho 12 horas por dia e o negocio nao cresce"
|
||||||
|
- Sem tempo para pensar estrategicamente
|
||||||
|
- Informacao dispersa (Excel, papel, cabeca)
|
||||||
|
- Clientes perdidos por falta de follow-up
|
||||||
|
- Nao sabe quanto lucra realmente
|
||||||
|
|
||||||
|
### 4. Anseios
|
||||||
|
- Ter tempo para a familia sem o negocio parar
|
||||||
|
- Ver o negocio crescer de forma previsivel
|
||||||
|
- Sentir-se no controlo em vez de apagar incendios
|
||||||
|
- Ser reconhecido como empresario de sucesso
|
||||||
|
|
||||||
|
### 5. Desejos
|
||||||
|
- Um sistema que "trabalhe por ele" nas tarefas repetitivas
|
||||||
|
- Dashboard simples que mostre como esta o negocio
|
||||||
|
- Processo de vendas que nao dependa so dele
|
||||||
|
- Facturacao automatica sem erros
|
||||||
|
|
||||||
|
### 6. Frustracoes
|
||||||
|
- Ja tentou CRMs e desistiu (demasiado complexos)
|
||||||
|
- Paga software que nao usa
|
||||||
|
- Funcionarios nao adoptam ferramentas novas
|
||||||
|
- Contabilista so aparece no fim do mes
|
||||||
|
|
||||||
|
### 7. Preocupacoes
|
||||||
|
- "Se eu parar, o negocio para"
|
||||||
|
- Concorrencia a crescer enquanto ele estagna
|
||||||
|
- Legislacao fiscal cada vez mais complexa
|
||||||
|
- Nao estar a usar a tecnologia como devia
|
||||||
|
|
||||||
|
### 8. Medos
|
||||||
|
- Perder clientes para concorrentes mais organizados
|
||||||
|
- Nao conseguir pagar salarios num mes mau
|
||||||
|
- Ser ultrapassado pela digitalizacao
|
||||||
|
- Investir em tecnologia e nao ter retorno
|
||||||
|
|
||||||
|
### 9. Inimigos
|
||||||
|
- Burocracia (AT, Seguranca Social, RGPD)
|
||||||
|
- Empresas grandes que competem com precos impossíveis
|
||||||
|
- Consultores que vendem teoria sem resultados
|
||||||
|
- O proprio perfeccionismo que impede de delegar
|
||||||
|
|
||||||
|
### 10. Linguagem
|
||||||
|
- "Nao tenho tempo para isso"
|
||||||
|
- "Ja tentei e nao funcionou"
|
||||||
|
- "Quanto e que isso custa?"
|
||||||
|
- "Mostra-me resultados, nao apresentacoes"
|
||||||
|
- Informal, directo, sem paciencia para jargao
|
||||||
|
|
||||||
|
### 11. Como procuram ajuda
|
||||||
|
- Perguntam a outros empresarios (boca-a-boca)
|
||||||
|
- Google quando ha um problema urgente
|
||||||
|
- LinkedIn para conteudo de negocios
|
||||||
|
- Contabilista como conselheiro informal
|
||||||
|
- Nao frequentam eventos/conferencias (sem tempo)
|
||||||
|
|
||||||
|
### 12. Canais digitais
|
||||||
|
- WhatsApp (principal — pessoal e profissional misturado)
|
||||||
|
- Facebook (pessoal, menos profissional)
|
||||||
|
- LinkedIn (passivo — le mas nao publica)
|
||||||
|
- Email (verifica 2-3x por dia, ignora newsletters)
|
||||||
|
- Instagram (pessoal, nao profissional)
|
||||||
|
|
||||||
|
### 13. Estilo de decisao
|
||||||
|
- Decide rapido quando ve valor claro
|
||||||
|
- Precisa de prova social (outro empresario a recomendar)
|
||||||
|
- Quer testar antes de comprometer
|
||||||
|
- Preco e factor mas nao o unico — valor percebido importa mais
|
||||||
|
- Prefere relacao pessoal a processo de vendas formal
|
||||||
|
|
||||||
|
### 14. Mudancas que procuram
|
||||||
|
- De "faz-tudo" para gestor que delega
|
||||||
|
- De reactivo (apagar incendios) para proactivo
|
||||||
|
- De Excel para sistema integrado
|
||||||
|
- De "acho que esta bem" para "sei que esta bem" (dados)
|
||||||
|
|
||||||
|
### 15. Resistencia a mudanca
|
||||||
|
- "Sempre fiz assim e funcionou"
|
||||||
|
- Medo da curva de aprendizagem
|
||||||
|
- Experiencias negativas anteriores com tecnologia
|
||||||
|
- Nao quer depender de fornecedores externos
|
||||||
|
- Equipa resiste a novas ferramentas
|
||||||
|
|
||||||
|
### 16. Objecoes tipicas
|
||||||
|
- "E caro demais para o meu negocio"
|
||||||
|
- "Nao tenho tempo para implementar"
|
||||||
|
- "Ja tentei um CRM e ninguem usou"
|
||||||
|
- "O meu negocio e diferente, isso nao se aplica"
|
||||||
|
- "Prefiro investir em publicidade directa"
|
||||||
|
|
||||||
|
### 17. Forma de gerar emocao
|
||||||
|
- Mostrar quanto tempo perde por semana em tarefas repetitivas (quantificar)
|
||||||
|
- Historias de empresarios semelhantes que transformaram o negocio
|
||||||
|
- Demonstrar em 5 minutos o que o sistema faz automaticamente
|
||||||
|
- Falar da familia — "imagina sair as 18h todos os dias"
|
||||||
|
|
||||||
|
### 18. Argumentos de venda
|
||||||
|
- ROI em 3 meses (calculado com dados do negocio)
|
||||||
|
- "Nao precisa de saber tecnologia — nos tratamos de tudo"
|
||||||
|
- Garantia de satisfacao ou devolucao
|
||||||
|
- Implementacao faseada (nao muda tudo de uma vez)
|
||||||
|
- Suporte por WhatsApp (o canal dele)
|
||||||
|
|
||||||
|
### 19. Concorrentes percebidos
|
||||||
|
- "O meu sobrinho faz-me um website"
|
||||||
|
- Freelancers no OLX/Facebook
|
||||||
|
- Ferramentas gratuitas (Google Sheets, Canva)
|
||||||
|
- PHC/Sage (que ja tem e nao usa)
|
||||||
|
- "Nao investir" (o concorrente mais forte)
|
||||||
|
|
||||||
|
### 20. Propostas recusadas
|
||||||
|
- Pacotes anuais sem flexibilidade
|
||||||
|
- Solucoes que requerem formacao extensa
|
||||||
|
- Propostas sem resultados tangíveis prometidos
|
||||||
|
- Precos acima de 200 EUR/mes sem trial
|
||||||
|
- Vendedores que nao entendem o sector especifico
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Formato resumido (para nivel Essencial — 8 dimensoes)
|
||||||
|
|
||||||
|
Quando o nivel e Essencial, usar apenas:
|
||||||
|
1. Perfil demografico
|
||||||
|
2. Perfil psicografico
|
||||||
|
3. Dores
|
||||||
|
4. Desejos
|
||||||
|
5. Objecoes tipicas
|
||||||
|
6. Canais digitais
|
||||||
|
7. Estilo de decisao
|
||||||
|
8. Argumentos de venda
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
# Metodologia ACIDA — Referência Completa
|
# Metodologia ACIDA — Referência Completa
|
||||||
|
|
||||||
|
ACIDA = **Atrair, Construir confiança, Interesse, Decisão, Ação** (definição única, confirmada pelo Emanuel a 17-10-2026). ACIDA 2.0 é a versão atual da mesma metodologia. Qualquer documento que expanda ACIDA como Análise, Criação/Conceção, Implementação, Desenvolvimento, Acompanhamento/Avaliação está errado: essas são as fases do ciclo de projeto (secção 4), não o ACIDA.
|
||||||
|
|
||||||
## 1. As 5 fases ACIDA
|
## 1. As 5 fases ACIDA
|
||||||
|
|
||||||
### A — Atrair atenção
|
### A — Atrair atenção
|
||||||
@@ -116,7 +118,9 @@ Para cada segmento, investigar as 8 dimensões antes de escrever qualquer copy:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. ACIDA 2.0 — Fases operacionais
|
## 4. Ciclo de projeto (orientado pela ACIDA)
|
||||||
|
|
||||||
|
As fases pelas quais a Descomplicar® executa um projeto de marketing. Não são o ACIDA: cada fase produz o que as etapas ACIDA (Atrair, Construir confiança, Interesse, Decisão, Ação) precisam.
|
||||||
|
|
||||||
| Fase | Acções |
|
| Fase | Acções |
|
||||||
|------|--------|
|
|------|--------|
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
# Prompt de redação por parte (nível Completo)
|
||||||
|
|
||||||
|
No nível Completo o documento tem 60 000 a 90 000 palavras. Um só agente não o
|
||||||
|
escreve com qualidade numa passagem. Divide-se por partes (I a VIII de
|
||||||
|
`estrutura-completa.md`) e entrega-se cada parte a um subagente, em paralelo. O
|
||||||
|
orquestrador fixa as decisões, junta, revê e gera o PDF.
|
||||||
|
|
||||||
|
Divisão que funcionou (Estratégia Descomplicar® v3.0, 17-10-2026, 7 subagentes,
|
||||||
|
cerca de 15 minutos): I · II · III · IV · V · VI · VII+VIII.
|
||||||
|
|
||||||
|
## Antes de lançar (orquestrador)
|
||||||
|
|
||||||
|
1. Ler as fontes principais e decidir os conflitos que afetam várias partes:
|
||||||
|
assinatura e slogan, nome da categoria, garantias, lista e ordem dos
|
||||||
|
segmentos, oferta de entrada (nome e duração), formato monetário.
|
||||||
|
2. Escrever essas decisões no bloco "Decisões já tomadas" abaixo. Subagentes
|
||||||
|
não rediscutem decisões; registam divergências em "Nota de fonte".
|
||||||
|
3. Mandar os subagentes alinharem entre si os nomes partilhados (segmentos,
|
||||||
|
ofertas, canais) por mensagem direta, sem editar ficheiros alheios.
|
||||||
|
|
||||||
|
## Contexto partilhado (copiar para o campo de contexto de todos os subagentes)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Goal
|
||||||
|
Escrever a Estratégia de Marca de <MARCA> (<sector>, <país>), nível Completo.
|
||||||
|
Cada subagente escreve UMA parte; o orquestrador junta.
|
||||||
|
|
||||||
|
# Estrutura global (contrato; numeração fixa)
|
||||||
|
<colar a lista de capítulos de references/estrutura-completa.md, Partes I a VIII,
|
||||||
|
com o "Contém" de cada capítulo>
|
||||||
|
|
||||||
|
# Fontes (ler as relevantes; NÃO inventar factos)
|
||||||
|
- Briefing e notas da entrevista: <caminho>
|
||||||
|
- Pesquisa de mercado (Fase 0): <caminho>/Pesquisas/sintese-mercado.md
|
||||||
|
- Material do cliente (site, catálogo, propostas, manual de marca): <caminhos/URLs>
|
||||||
|
- Desk CRM / OKF do cliente: <ids ou caminhos>
|
||||||
|
- Exemplo de profundidade: 99-Arquivo/Manual-OwnCloud-Descomplicar/exemplos estrategias de marca/MCT Estratégia de Marca Carritools.md (formato, não conteúdo)
|
||||||
|
- Dados externos: só fontes primárias (INE, Eurostat, Comissão Europeia, entidades
|
||||||
|
reguladoras, associações do sector); cada número com link numa nota no fim do capítulo.
|
||||||
|
|
||||||
|
# Decisões já tomadas (aplicar, não rediscutir)
|
||||||
|
- Assinatura / slogan / categoria: <…>
|
||||||
|
- Segmentos (nome e ordem): <…>
|
||||||
|
- Oferta de entrada: <…>
|
||||||
|
- Garantias: só as que existem em contrato; promessas de resultado não entram em texto para clientes.
|
||||||
|
- Onde as fontes divergem, prevalece a mais recente; registar numa linha "Nota de fonte" no fim do capítulo.
|
||||||
|
|
||||||
|
# Regras de escrita
|
||||||
|
- PT-PT, Acordo Ortográfico de 1990, zero brasileirismos (equipa, registo, ecrã, telemóvel, utilizador, planeamento).
|
||||||
|
- Copy dirigido ao cliente final em 3.ª pessoa de cortesia ("a sua empresa"); nunca "você" fora de citações.
|
||||||
|
- Títulos em frase. `## N. Título` para capítulos, `### N.M` para secções, `####` se preciso. Não escrever o título da Parte.
|
||||||
|
- Indicar o P correspondente na primeira linha do capítulo, ex.: "(P4)".
|
||||||
|
- Sem emoji, sem travessões (— ou –) como pausa, sem negrito no início de cada item de lista, sem frases-feitas ("alavancar", "no panorama atual", "não é X, é Y", perguntas retóricas respondidas logo a seguir).
|
||||||
|
- Moeda: 1 250€ (valor, espaço de milhar, símbolo colado). Datas por extenso: 16 de outubro de 2026.
|
||||||
|
- Concorrentes: no documento interno descrever por tipo; nomes só se vierem das fontes e nunca em copy ou mensagens destinadas a material público.
|
||||||
|
- Nunca inventar números, clientes, casos, preços, testemunhos ou concorrentes. Se o dado faltar, escrever o elemento na mesma e marcar `[a validar: o que falta]`.
|
||||||
|
- Casos e testemunhos de clientes só com autorização registada; sem ela, `[a validar: autorização de <cliente>]`.
|
||||||
|
- Detalhes de incidentes de segurança, credenciais e dados pessoais nunca entram no documento.
|
||||||
|
- Não repetir capítulos de outras partes: escrever "ver capítulo N".
|
||||||
|
|
||||||
|
# Entrega
|
||||||
|
Escrever em `local://marca/parte-<romano>.md` só os capítulos atribuídos.
|
||||||
|
Não criar nem alterar mais nenhum ficheiro, não correr builds.
|
||||||
|
Resposta final: nº de palavras, lista de `[a validar]`, notas de fonte, decisões tomadas que o orquestrador deve conhecer.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tarefa por subagente (um por parte)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Target
|
||||||
|
Parte <romano>. <nome>: capítulos <N> a <M>. Ficheiro: local://marca/parte-<romano>.md.
|
||||||
|
|
||||||
|
# Change
|
||||||
|
- Cap. N: <o que entra, tirado de estrutura-completa.md, adaptado ao cliente>
|
||||||
|
- …
|
||||||
|
|
||||||
|
# Acceptance
|
||||||
|
Capítulos N-M completos, cada afirmação factual rastreável a fonte interna ou a nota com link; `[a validar]` onde faltar dado.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Depois de receber as partes (orquestrador)
|
||||||
|
|
||||||
|
1. Ler os relatórios: decisões tomadas por cada subagente, divergências entre
|
||||||
|
partes (ex.: duração do diagnóstico, segmentos) e corrigi-las.
|
||||||
|
2. Procurar e retirar: detalhes de incidentes, caminhos de relatórios internos
|
||||||
|
sensíveis, nomes de concorrentes em copy, promessas sem cláusula.
|
||||||
|
3. Correr `scripts/montar.py` (junta, cria o anexo A) e escrever à mão a
|
||||||
|
introdução (resumo executivo e "Sobre este documento") e o `## BRIEFING-LLM`.
|
||||||
|
4. Validar e gerar o PDF (ver SKILL.md, Fase 8).
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Template: Documento de Estratégia de Marca
|
# Template: Documento de Estratégia de Marca
|
||||||
|
|
||||||
Estrutura completa do documento entregável ao cliente. Baseado nos projectos SFV, LJM, MCT, Espiral Senior e Sintricare.
|
Guia de escrita de cada secção (o que escrever e com que profundidade). Baseado nos projetos SFV, LJM, MCT, Espiral Sénior e Sintricare.
|
||||||
Adaptar secções ao sector e complexidade do cliente.
|
A ORDEM e a numeração dos capítulos vêm de `estrutura-completa.md` (SPEC v2.0), que prevalece sobre o índice abaixo. Adaptar ao sector e ao nível (Essencial, Standard, Completo).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ cliente: [Nome do cliente]
|
|||||||
código: EST-MRK-010
|
código: EST-MRK-010
|
||||||
versão: 1.0
|
versão: 1.0
|
||||||
data: [DD-MM-YYYY]
|
data: [DD-MM-YYYY]
|
||||||
elaborado: Descomplicar® — Agência de Aceleração Digital
|
elaborado: Descomplicar® - Agência de Marketing Digital
|
||||||
status: draft | aprovado
|
status: draft | aprovado
|
||||||
---
|
---
|
||||||
```
|
```
|
||||||
@@ -370,5 +370,5 @@ O Pitch Canvas é uma ferramenta de comunicação estratégica que resume, numa
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Elaborado por Descomplicar® — Agência de Aceleração Digital*
|
*Elaborado por Descomplicar® - Agência de Marketing Digital*
|
||||||
*emanuel@descomplicar.pt | descomplicar.pt*
|
*emanuel@descomplicar.pt | descomplicar.pt*
|
||||||
|
|||||||
+86
@@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Junta as partes de uma estratégia de marca num único markdown.
|
||||||
|
|
||||||
|
Uso:
|
||||||
|
montar.py --partes DIR --intro intro.md --briefing briefing-llm.md --config marca.json --out estrategia.md
|
||||||
|
[--glossario glossario.md] [--complementos complementos.md] [--historico historico.md]
|
||||||
|
|
||||||
|
- DIR contém parte-I.md ... parte-VIII.md (só os capítulos, `## N. Título`).
|
||||||
|
- intro.md: resumo executivo + "Sobre este documento" (títulos `# ...`).
|
||||||
|
- briefing-llm.md: a secção `## BRIEFING-LLM` completa (fica sempre em último).
|
||||||
|
- marca.json: chaves `frontmatter` (dict) e, opcional, `partes` ([[romano, nome], ...]).
|
||||||
|
Gera o anexo A (pontos a validar) a partir das marcas `[a validar: ...]`.
|
||||||
|
"""
|
||||||
|
import argparse, json, os, re, sys
|
||||||
|
|
||||||
|
PARTES = [["I", "Contexto"], ["II", "Fundamentos da marca"], ["III", "Públicos"],
|
||||||
|
["IV", "Identidade e expressão"], ["V", "Oferta e venda"], ["VI", "Comunicação e canais"],
|
||||||
|
["VII", "Crescimento"], ["VIII", "Medição e implementação"]]
|
||||||
|
|
||||||
|
|
||||||
|
def yaml_value(v):
|
||||||
|
if isinstance(v, list):
|
||||||
|
return "[" + ", ".join(str(x) for x in v) + "]"
|
||||||
|
s = str(v)
|
||||||
|
return '"' + s.replace('"', '\\"') + '"' if re.search(r"[:#®·\-]", s) else s
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
ap = argparse.ArgumentParser()
|
||||||
|
ap.add_argument("--partes", required=True)
|
||||||
|
ap.add_argument("--intro", required=True)
|
||||||
|
ap.add_argument("--briefing", required=True)
|
||||||
|
ap.add_argument("--config", required=True)
|
||||||
|
ap.add_argument("--out", required=True)
|
||||||
|
ap.add_argument("--glossario")
|
||||||
|
ap.add_argument("--complementos")
|
||||||
|
ap.add_argument("--historico")
|
||||||
|
a = ap.parse_args()
|
||||||
|
|
||||||
|
cfg = json.load(open(a.config, encoding="utf-8"))
|
||||||
|
fm = "---\n" + "".join(f"{k}: {yaml_value(v)}\n" for k, v in cfg.get("frontmatter", {}).items()) + "---\n\n"
|
||||||
|
doc = [fm, open(a.intro, encoding="utf-8").read().rstrip() + "\n\n"]
|
||||||
|
|
||||||
|
for rom, nome in cfg.get("partes", PARTES):
|
||||||
|
p = os.path.join(a.partes, f"parte-{rom}.md")
|
||||||
|
if not os.path.exists(p):
|
||||||
|
sys.exit(f"Falta {p}")
|
||||||
|
t = open(p, encoding="utf-8").read().strip()
|
||||||
|
if re.search(r"^# ", t, re.M):
|
||||||
|
sys.exit(f"{p} tem títulos de nível 1; só o montar.py escreve as Partes")
|
||||||
|
doc.append(f"# Parte {rom}. {nome}\n\n{t}\n\n")
|
||||||
|
full = "".join(doc)
|
||||||
|
|
||||||
|
pend, cap, seen, rows = [], None, set(), []
|
||||||
|
for line in full.split("\n"):
|
||||||
|
m = re.match(r"^## (\d+)\. ", line)
|
||||||
|
if m:
|
||||||
|
cap = int(m.group(1))
|
||||||
|
for v in re.findall(r"\[a validar:\s*([^\]]+)\]", line):
|
||||||
|
pend.append((cap or 0, v.strip().rstrip(".")))
|
||||||
|
for c, v in pend:
|
||||||
|
if (c, v.lower()) in seen:
|
||||||
|
continue
|
||||||
|
seen.add((c, v.lower()))
|
||||||
|
rows.append(f"| {c or '—'} | {v[0].upper() + v[1:]} |")
|
||||||
|
|
||||||
|
anexos = ["# Anexos\n\n## A. Pontos a validar\n\n",
|
||||||
|
f"{len(rows)} pontos, por capítulo. Cada ponto fechado corrige-se no capítulo e sai desta lista.\n\n",
|
||||||
|
"| Cap. | O que falta confirmar |\n| --- | --- |\n", "\n".join(rows) or "| — | Nenhum |", "\n\n"]
|
||||||
|
extras = [(t, f) for t, f in [("Glossário", a.glossario), ("Complementos do sector", a.complementos),
|
||||||
|
("Histórico de alterações", a.historico)] if f]
|
||||||
|
for letra, (titulo, f) in zip("BCD", extras):
|
||||||
|
anexos.append(f"## {letra}. {titulo}\n\n" + open(f, encoding="utf-8").read().strip() + "\n\n")
|
||||||
|
full += "".join(anexos)
|
||||||
|
|
||||||
|
br = open(a.briefing, encoding="utf-8").read().strip()
|
||||||
|
if not br.startswith("## BRIEFING-LLM"):
|
||||||
|
sys.exit("briefing-llm.md tem de começar por '## BRIEFING-LLM'")
|
||||||
|
full += br + "\n"
|
||||||
|
open(a.out, "w", encoding="utf-8").write(full)
|
||||||
|
caps = len(re.findall(r"^## \d+\. ", full, re.M))
|
||||||
|
print(f"{a.out}: {len(full.split())} palavras, {caps} capítulos, {len(rows)} pontos a validar")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
+134
@@ -0,0 +1,134 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Estratégia de marca (markdown) -> PDF A4 com a identidade DA MARCA em causa.
|
||||||
|
|
||||||
|
Uso: render_pdf.py estrategia.md estrategia.pdf --config marca.json [--html saida.html]
|
||||||
|
|
||||||
|
Requer: pandoc, google-chrome (ou chromium), pdfinfo.
|
||||||
|
O marca.json define cores, fontes, logótipo e textos da capa (ver assets/marca-descomplicar.json).
|
||||||
|
Regras aprendidas (17-10-2026):
|
||||||
|
- A4 sempre (nunca Letter). Margens 20/18 mm, numeração no rodapé.
|
||||||
|
- Fontes web subset (ex.: woff2 só latim básico) não têm €, → ou −; declarar uma
|
||||||
|
família de recurso SEPARADA (`fallback` no config) e acrescentá-la a todas as pilhas.
|
||||||
|
Não usar unicode-range na mesma família com intervalos de peso diferentes: o Chrome
|
||||||
|
escolhe a face pelo peso e perde o resto dos glifos.
|
||||||
|
- Confirmar com `pdffonts` que não aparecem Liberation/DejaVu (exceto mono) e ver uma
|
||||||
|
página de conteúdo renderizada, não só a capa.
|
||||||
|
- A secção BRIEFING-LLM vai no PDF como está (bloco yaml), por ser a última secção.
|
||||||
|
"""
|
||||||
|
import argparse, json, re, shutil, subprocess, tempfile, os
|
||||||
|
|
||||||
|
TPL = """<!doctype html>
|
||||||
|
<html lang="$lang$"><head><meta charset="utf-8"><title>$title$</title></head>
|
||||||
|
<body>
|
||||||
|
<!--CAPA-->
|
||||||
|
<nav id="TOC">
|
||||||
|
$table-of-contents$
|
||||||
|
</nav>
|
||||||
|
$body$
|
||||||
|
</body></html>
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def face(f):
|
||||||
|
s = f"@font-face{{font-family:'{f['family']}';src:url('file://{f['src']}');"
|
||||||
|
s += f"font-weight:{f.get('weight', '100 900')};font-style:{f.get('style', 'normal')};"
|
||||||
|
if f.get("unicode_range"):
|
||||||
|
s += f"unicode-range:{f['unicode_range']};"
|
||||||
|
return s + "}"
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
ap = argparse.ArgumentParser()
|
||||||
|
ap.add_argument("src")
|
||||||
|
ap.add_argument("out")
|
||||||
|
ap.add_argument("--config", required=True)
|
||||||
|
ap.add_argument("--html")
|
||||||
|
a = ap.parse_args()
|
||||||
|
c = json.load(open(a.config, encoding="utf-8"))
|
||||||
|
|
||||||
|
md = open(a.src, encoding="utf-8").read()
|
||||||
|
md = re.sub(r"\A---\n.*?\n---\n", "", md, flags=re.S)
|
||||||
|
with tempfile.TemporaryDirectory() as tmp:
|
||||||
|
tpl = os.path.join(tmp, "tpl.html")
|
||||||
|
open(tpl, "w", encoding="utf-8").write(TPL)
|
||||||
|
body = subprocess.run(
|
||||||
|
["pandoc", "-f", "gfm+attributes", "-t", "html5", "--toc", "--toc-depth=2", "--standalone",
|
||||||
|
"--template", tpl, "--metadata", f"title={c['titulo_documento']}", "--metadata", "lang=pt-PT"],
|
||||||
|
input=md, capture_output=True, text=True, check=True).stdout
|
||||||
|
|
||||||
|
marca = c["marca"] # ex.: "Descomplicar®"
|
||||||
|
if marca.endswith("®"):
|
||||||
|
base = re.escape(marca[:-1])
|
||||||
|
body = re.sub(rf"(?<![/\w.]){base}®", f'{marca[:-1]}<sup class="reg">®</sup>', body)
|
||||||
|
body = re.sub(r"\[a validar:([^\]]*)\]", r'<span class="av">[a validar:\1]</span>', body)
|
||||||
|
|
||||||
|
T, X, FB = c["fonte_titulos"], c["fonte_texto"], c.get("fallback", "sans-serif")
|
||||||
|
k = c["cores"] # escura, clara_texto, primaria, acento_texto, suave, linha, alternada, aviso_fundo, aviso_texto
|
||||||
|
faces = "\n".join(face(f) for f in c.get("fontes", []))
|
||||||
|
css = f"""{faces}
|
||||||
|
@page{{size:A4;margin:20mm 18mm 20mm 18mm;
|
||||||
|
@bottom-left{{content:"{c['rodape']}";font:8.5pt '{X}',{FB};color:{k['texto_secundario']}}}
|
||||||
|
@bottom-right{{content:counter(page);font:600 8.5pt '{T}',{FB};color:{k['acento_texto']}}}}}
|
||||||
|
@page capa{{margin:0;@bottom-left{{content:none}}@bottom-right{{content:none}}}}
|
||||||
|
html{{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
|
||||||
|
body{{font-family:'{X}',{FB};font-size:10.2pt;line-height:1.55;color:{k['texto']};margin:0}}
|
||||||
|
sup.reg{{font-size:.45em;vertical-align:super;line-height:0;margin-left:.02em}}
|
||||||
|
.capa{{page:capa;height:297mm;width:210mm;background:{k['escura']};color:{k['clara_texto']};position:relative;break-after:page;box-sizing:border-box;padding:34mm 22mm}}
|
||||||
|
.capa svg,.capa img{{width:56mm;height:auto;display:block}}
|
||||||
|
.capa .eyebrow{{font:700 9pt '{T}',{FB};letter-spacing:.14em;text-transform:uppercase;color:{k['primaria']};margin-top:52mm}}
|
||||||
|
.capa h1{{font:300 40pt/1.05 '{T}',{FB};text-transform:uppercase;margin:6mm 0 8mm;color:{k['clara_texto']};border:0;padding:0;break-before:auto}}
|
||||||
|
.capa .slogan{{font:700 18pt '{T}',{FB};color:{k['primaria']}}}
|
||||||
|
.capa .meta{{position:absolute;left:22mm;right:22mm;bottom:24mm;border-top:1px solid {k['primaria']};padding-top:5mm;font-size:9.5pt;color:{k['clara_texto']};opacity:.75;display:flex;justify-content:space-between}}
|
||||||
|
nav#TOC{{break-after:page}}
|
||||||
|
nav#TOC::before{{content:"Índice";display:block;font:700 22pt '{T}',{FB};margin:0 0 6mm}}
|
||||||
|
nav#TOC ul{{list-style:none;padding-left:0;margin:0}}
|
||||||
|
nav#TOC > ul > li{{margin-top:3.2mm;font:700 10pt '{T}',{FB};color:{k['acento_texto']};text-transform:uppercase;letter-spacing:.05em}}
|
||||||
|
nav#TOC > ul > li > ul > li{{font:400 9.6pt '{X}',{FB};color:{k['texto']};text-transform:none;letter-spacing:0;padding-left:4mm;margin-top:.6mm}}
|
||||||
|
nav#TOC a{{color:inherit;text-decoration:none}}
|
||||||
|
h1{{font:300 26pt/1.1 '{T}',{FB};text-transform:uppercase;letter-spacing:.02em;break-before:page;margin:0 0 8mm;padding-bottom:4mm;border-bottom:3px solid {k['primaria']}}}
|
||||||
|
h2{{font:700 17pt/1.2 '{T}',{FB};margin:9mm 0 3mm;break-after:avoid}}
|
||||||
|
h3{{font:600 12.5pt/1.25 '{T}',{FB};margin:6mm 0 2mm;break-after:avoid}}
|
||||||
|
h4{{font:600 10.5pt '{T}',{FB};margin:4mm 0 1.5mm;break-after:avoid;color:{k['acento_texto']}}}
|
||||||
|
p{{margin:0 0 2.6mm;orphans:3;widows:3}}
|
||||||
|
ul,ol{{margin:0 0 3mm;padding-left:6mm}} li{{margin:.6mm 0}}
|
||||||
|
a{{color:{k['acento_texto']}}}
|
||||||
|
blockquote{{margin:3mm 0;padding:3mm 5mm;background:{k['suave']};border-left:4px solid {k['primaria']};font-size:10.6pt}}
|
||||||
|
blockquote p:last-child{{margin:0}}
|
||||||
|
table{{border-collapse:collapse;width:100%;margin:2mm 0 4mm;font-size:8.8pt}}
|
||||||
|
tr{{break-inside:avoid}}
|
||||||
|
th{{background:{k['escura']};color:{k['clara_texto']};font:600 8.4pt '{T}',{FB};text-align:left;padding:2mm 2.4mm}}
|
||||||
|
td{{border-bottom:1px solid {k['linha']};padding:1.8mm 2.4mm;vertical-align:top}}
|
||||||
|
tr:nth-child(even) td{{background:{k['alternada']}}}
|
||||||
|
code,pre{{font-size:8.4pt;background:{k['suave']};border-radius:2px}}
|
||||||
|
code{{padding:0 1mm}} pre{{padding:3mm;white-space:pre-wrap}}
|
||||||
|
hr{{border:0;border-top:1px solid {k['linha']};margin:5mm 0}}
|
||||||
|
.av{{background:{k['aviso_fundo']};color:{k['aviso_texto']};padding:0 1mm;border-radius:2px;font-size:.92em}}
|
||||||
|
"""
|
||||||
|
logo = ""
|
||||||
|
if c.get("logo_capa"):
|
||||||
|
logo = open(c["logo_capa"], encoding="utf-8").read()
|
||||||
|
logo = re.sub(r"<\?xml[^>]*>", "", logo)
|
||||||
|
capa = (f'<section class="capa"><div>{logo}</div><div class="eyebrow">{c["capa_eyebrow"]}</div>'
|
||||||
|
f'<h1>{c["capa_titulo"]}</h1><div class="slogan">{c.get("capa_slogan", "")}</div>'
|
||||||
|
f'<div class="meta"><span>{c["capa_assinatura"]}</span><span>{c["capa_data"]}</span></div></section>')
|
||||||
|
if marca.endswith("®"):
|
||||||
|
capa = capa.replace(marca, f'{marca[:-1]}<sup class="reg">®</sup>')
|
||||||
|
html = body.replace("</head>", f"<style>{css}</style></head>").replace("<!--CAPA-->", capa)
|
||||||
|
hp = a.html or os.path.join(tmp, "doc.html")
|
||||||
|
open(hp, "w", encoding="utf-8").write(html)
|
||||||
|
chrome = shutil.which("google-chrome") or shutil.which("google-chrome-stable") or shutil.which("chromium")
|
||||||
|
subprocess.run([chrome, "--headless=new", "--no-sandbox", "--disable-gpu", "--no-pdf-header-footer",
|
||||||
|
"--generate-pdf-document-outline", "--virtual-time-budget=20000",
|
||||||
|
f"--print-to-pdf={os.path.abspath(a.out)}", "file://" + os.path.abspath(hp)],
|
||||||
|
check=True, capture_output=True, timeout=600)
|
||||||
|
info = subprocess.run(["pdfinfo", a.out], capture_output=True, text=True).stdout
|
||||||
|
fonts = subprocess.run(["pdffonts", a.out], capture_output=True, text=True).stdout
|
||||||
|
print("\n".join(l for l in info.splitlines() if l.startswith(("Pages", "Page size"))))
|
||||||
|
bad = sorted({re.sub(r"^[A-Z]{6}\+", "", l.split()[0]) for l in fonts.splitlines()[2:]
|
||||||
|
if re.search(r"Liberation|DejaVuSans(?!Mono)|Nimbus", l)})
|
||||||
|
if bad:
|
||||||
|
print("AVISO: fontes de recurso do sistema no PDF:", ", ".join(bad))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: expense
|
name: expense
|
||||||
description: Gestao de despesas Desk CRM com PDF obrigatorio. Registar, categorizar e analisar despesas com verificacao de duplicados por reference_no, upload SFTP e arquivo mensal automatico.
|
description: Gestao de despesas Desk CRM com PDF obrigatorio. Registar, categorizar e analisar despesas com verificacao de duplicados por reference_no, upload SFTP e arquivo mensal automatico.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /expense - Gestao de Despesas
|
# /expense - Gestao de Despesas
|
||||||
@@ -140,4 +139,62 @@ Para protocolo completo de processamento de tickets de contabilidade: ver `refer
|
|||||||
|
|
||||||
**Categorias:**
|
**Categorias:**
|
||||||
1. Criar categoria sem listar existentes primeiro
|
1. Criar categoria sem listar existentes primeiro
|
||||||
2. Assumir qu
|
2. Assumir que categoria nao existe
|
||||||
|
3. Criar categoria com nome similar a existente
|
||||||
|
|
||||||
|
**Despesas:**
|
||||||
|
4. Criar despesa sem category_id
|
||||||
|
5. Nao validar data (formato YYYY-MM-DD)
|
||||||
|
6. Criar despesa sem verificar duplicados primeiro (3 camadas obrigatorias)
|
||||||
|
7. Criar despesa sem reference_no (chave primaria de dedup)
|
||||||
|
|
||||||
|
**Valores de PDFs:**
|
||||||
|
8. Assumir que ficheiros com nomes semelhantes tem o mesmo valor
|
||||||
|
9. SEMPRE ler CADA PDF individualmente para extrair o valor real
|
||||||
|
|
||||||
|
**Tickets:**
|
||||||
|
10. Processar ticket sem verificar anexos PDF
|
||||||
|
11. Assumir que ticket com recibo = despesa nao lancada
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist Pre-Operacao
|
||||||
|
|
||||||
|
- [ ] Listar categorias existentes
|
||||||
|
- [ ] Validar categoria correcta
|
||||||
|
- [ ] Extrair reference_no do PDF/factura
|
||||||
|
- [ ] Verificar duplicados (3 camadas)
|
||||||
|
- [ ] Confirmar dados com utilizador
|
||||||
|
- [ ] Usar formato data YYYY-MM-DD
|
||||||
|
- [ ] Incluir reference_no no create_expense
|
||||||
|
- [ ] Incluir nota descritiva
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- `references/category-mapping.md` - Mapeamento fornecedores, emails, padroes PDF, campos, moedas, SQL
|
||||||
|
- `references/ticket-processing.md` - Protocolo completo de processamento de tickets
|
||||||
|
- `references/changelog.md` - Historico de alteracoes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Self-Healing
|
||||||
|
|
||||||
|
Antes de executar, ler `~/.claude-work/healing/expense.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.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Criado:** 2026-02-05 | **Actualizado:** 2026-03-30 | Fix: dedup 3 camadas com reference_no (DES-137)
|
||||||
|
|
||||||
|
|
||||||
|
## Healing Log
|
||||||
|
<!-- Registo automático de erros e correcções nesta skill -->
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: invoice
|
name: invoice
|
||||||
description: Gestão de facturação Desk CRM. Criar facturas, converter estimates, facturar timesheets, registar pagamentos e listar facturas vencidas.
|
description: Gestão de facturação Desk CRM. Criar facturas, converter estimates, facturar timesheets, registar pagamentos e listar facturas vencidas.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /invoice v1.0 - Gestão de Facturação
|
# /invoice v1.0 - Gestão de Facturação
|
||||||
@@ -237,3 +236,32 @@ Acções:
|
|||||||
|
|
||||||
## Integração
|
## Integração
|
||||||
|
|
||||||
|
- **/crm 360:** Mostra facturas pendentes do cliente
|
||||||
|
- **/today:** Alerta de facturas vencidas
|
||||||
|
- **/report weekly:** Inclui facturação emitida/recebida
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### v1.0.0 (2026-02-05)
|
||||||
|
- Versão inicial
|
||||||
|
- Criar, enviar, pagamentos
|
||||||
|
- Facturar timesheets
|
||||||
|
- Relatório de vencidas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*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.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: orcamento
|
name: orcamento
|
||||||
description: Criação de orçamentos Descomplicar baseados nos itens oficiais do Desk CRM. Versão light para heartbeats.
|
description: Criação de orçamentos Descomplicar baseados nos itens oficiais do Desk CRM. Versão light para heartbeats.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Orçamento — Referência Rápida
|
# Orçamento — Referência Rápida
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: orcamento
|
name: orcamento
|
||||||
description: Criação sistemática de orçamentos Descomplicar baseados nos itens oficiais do Desk CRM. Suporta StarterWP, CorporateWP, CareWP, eCommerceWP, Marketing 360, Manutenção, AcceleratorX, DeskCRM e Chatbots. Variantes -MEN (mensal) e -TRI (trimestral).
|
description: Criação sistemática de orçamentos Descomplicar baseados nos itens oficiais do Desk CRM. Suporta StarterWP, CorporateWP, CareWP, eCommerceWP, Marketing 360, Manutenção, AcceleratorX, DeskCRM e Chatbots. Variantes -MEN (mensal) e -TRI (trimestral).
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill /orcamento - Criacao Sistematica de Orcamentos
|
# Skill /orcamento - Criacao Sistematica de Orcamentos
|
||||||
@@ -115,4 +114,413 @@ ANTES de executar, consultar notebooks para contexto especializado:
|
|||||||
|
|
||||||
| Notebook | ID | Consultar quando |
|
| Notebook | ID | Consultar quando |
|
||||||
|----------|-----|-----------------|
|
|----------|-----|-----------------|
|
||||||
| Estratégia e Empreendedorismo | 7
|
| Estratégia e Empreendedorismo | 79d43410 | Para enquadramento estratégico de preços |
|
||||||
|
|
||||||
|
```
|
||||||
|
mcp__notebooklm__notebook_query({
|
||||||
|
notebook_id: "79d43410-0e29-4be1-881d-84db6bdc239a",
|
||||||
|
query: "<adaptar ao contexto do pedido do utilizador>"
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
Integrar insights do NotebookLM nas recomendações e decisões.
|
||||||
|
|
||||||
|
### Procedimentos Relacionados
|
||||||
|
- `PROC-Catalogo-Codificacao-Produtos.md` — Codificação e catálogo de produtos
|
||||||
|
- `PROC-CRM-Operacoes.md` — Operações CRM padrão
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Protocolo
|
||||||
|
|
||||||
|
### Sintaxe
|
||||||
|
|
||||||
|
```
|
||||||
|
/orcamento [cliente] [tipo] [-MEN|-TRI]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Parametros:**
|
||||||
|
- `cliente` - Nome ou ID do cliente (opcional, sera solicitado se omitido)
|
||||||
|
- `tipo` - Tipo de orcamento (opcional, sera apresentado menu se omitido)
|
||||||
|
- `-MEN` - Variante mensal: usa itens com unit "mensalidade" e calcula valor/mes
|
||||||
|
- `-TRI` - Variante trimestral: usa itens com unit "trimestral" e calcula valor/trimestre
|
||||||
|
- (sem flag) - Comportamento actual: item base (Investimento/Projeto/Anual)
|
||||||
|
|
||||||
|
**Tipos disponiveis:**
|
||||||
|
| Codigo | Tipo | Grupo CRM |
|
||||||
|
|--------|------|-----------|
|
||||||
|
| `starter` | StarterWP | Websites |
|
||||||
|
| `corporate` | CorporateWP | Websites |
|
||||||
|
| `care` | CareWP (Clinicas) | Websites |
|
||||||
|
| `ecom` | eCommerceWP | Websites |
|
||||||
|
| `mkt` | Marketing Digital 360 | Marketing |
|
||||||
|
| `man` | Manutencao | Suporte |
|
||||||
|
| `deskcrm` | DeskCRM | DeskCRM |
|
||||||
|
| `chatbot` | Chatbot | Chatbots |
|
||||||
|
| `acceleratorx` | AcceleratorX | Tecnologia |
|
||||||
|
|
||||||
|
### Fase 1: Identificacao do Cliente
|
||||||
|
|
||||||
|
1. Se cliente fornecido, pesquisar no CRM:
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__search_customers query="[nome]" fields="company,vat"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Se nao encontrado ou nao fornecido, solicitar dados:
|
||||||
|
- Nome da empresa
|
||||||
|
- NIF (opcional)
|
||||||
|
- Email contacto
|
||||||
|
|
||||||
|
3. Validar cliente existe ou criar novo:
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__create_customer company="..." vat="..." ...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fase 2: Seleccao de Template
|
||||||
|
|
||||||
|
1. Se tipo fornecido, carregar template correspondente
|
||||||
|
2. Se nao fornecido, apresentar menu interactivo:
|
||||||
|
- StarterWP | CorporateWP | CareWP | eCommerceWP
|
||||||
|
- Marketing 360 | Manutencao
|
||||||
|
- DeskCRM | Chatbot | AcceleratorX
|
||||||
|
|
||||||
|
### Fase 3: Consultar Precos no CRM
|
||||||
|
|
||||||
|
**OBRIGATORIO**: Consultar precos actualizados no Desk CRM antes de calcular.
|
||||||
|
|
||||||
|
#### Sem variante (comportamento actual)
|
||||||
|
```bash
|
||||||
|
# Buscar preco do pacote base
|
||||||
|
mysql -u root ealmeida_desk24 -e "
|
||||||
|
SELECT description, rate, unit FROM tblitems
|
||||||
|
WHERE group_id = [GROUP_ID]
|
||||||
|
AND description LIKE '%[PACOTE]%'
|
||||||
|
AND unit NOT IN ('mensalidade','trimestral','anuidade')
|
||||||
|
ORDER BY description;"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Com `-MEN` (variante mensal)
|
||||||
|
```bash
|
||||||
|
# Buscar itens base (setup/pontuais - mantêm-se iguais)
|
||||||
|
mysql -u root ealmeida_desk24 -e "
|
||||||
|
SELECT description, rate, unit FROM tblitems
|
||||||
|
WHERE group_id = [GROUP_ID]
|
||||||
|
AND description LIKE '%[PACOTE]%'
|
||||||
|
AND unit NOT IN ('mensalidade','trimestral','anuidade')
|
||||||
|
ORDER BY description;"
|
||||||
|
|
||||||
|
# Buscar itens recorrentes na variante mensal
|
||||||
|
mysql -u root ealmeida_desk24 -e "
|
||||||
|
SELECT description, rate, unit FROM tblitems
|
||||||
|
WHERE group_id = [GROUP_ID]
|
||||||
|
AND description LIKE 'Mensalidade%[PACOTE]%'
|
||||||
|
ORDER BY description;"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Com `-TRI` (variante trimestral)
|
||||||
|
```bash
|
||||||
|
# Buscar itens base (setup/pontuais - mantêm-se iguais)
|
||||||
|
mysql -u root ealmeida_desk24 -e "
|
||||||
|
SELECT description, rate, unit FROM tblitems
|
||||||
|
WHERE group_id = [GROUP_ID]
|
||||||
|
AND description LIKE '%[PACOTE]%'
|
||||||
|
AND unit NOT IN ('mensalidade','trimestral','anuidade')
|
||||||
|
ORDER BY description;"
|
||||||
|
|
||||||
|
# Buscar itens recorrentes na variante trimestral
|
||||||
|
mysql -u root ealmeida_desk24 -e "
|
||||||
|
SELECT description, rate, unit FROM tblitems
|
||||||
|
WHERE group_id = [GROUP_ID]
|
||||||
|
AND description LIKE 'Trimestral%[PACOTE]%'
|
||||||
|
ORDER BY description;"
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou via MCP:
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__price_management action="get_pricing_insights" params={"group": "[GRUPO]", "search": "[PACOTE]"}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fase 4: Personalizacao
|
||||||
|
|
||||||
|
1. Apresentar questoes de personalizacao especificas do tipo
|
||||||
|
2. Adicionar funcionalidades conforme requisitos
|
||||||
|
3. Para cada funcionalidade, buscar item correspondente no CRM
|
||||||
|
|
||||||
|
### Fase 5: Geracao do Orcamento
|
||||||
|
|
||||||
|
1. Calcular valores finais:
|
||||||
|
- Subtotal por item (precos do CRM)
|
||||||
|
- IVA 23%
|
||||||
|
- Total
|
||||||
|
- Recorrencia (anuidade, trimestral ou mensal conforme variante)
|
||||||
|
|
||||||
|
2. Ajustar items conforme variante:
|
||||||
|
- **Sem flag**: Itens base + anuidade separada
|
||||||
|
- **`-MEN`**: Itens setup + itens "Mensalidade ..." do CRM (unit: "mensalidade")
|
||||||
|
- **`-TRI`**: Itens setup + itens "Trimestral ..." do CRM (unit: "trimestral")
|
||||||
|
|
||||||
|
3. Criar estimate no CRM:
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__create_estimate
|
||||||
|
client_id=[id]
|
||||||
|
date=[hoje]
|
||||||
|
expiry_date=[hoje + 30 dias]
|
||||||
|
items=[items calculados]
|
||||||
|
terms="[termos ajustados a variante]"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Termos ajustados por variante:
|
||||||
|
- **Sem flag**: "Condicoes de Pagamento: 50% na adjudicacao + 50% na entrega"
|
||||||
|
- **`-MEN`**: "Condicoes de Pagamento: Setup - 50% na adjudicacao + 50% na entrega | Recorrencia - facturacao mensal antecipada"
|
||||||
|
- **`-TRI`**: "Condicoes de Pagamento: Setup - 50% na adjudicacao + 50% na entrega | Recorrencia - facturacao trimestral antecipada"
|
||||||
|
|
||||||
|
5. Apresentar resumo ao utilizador com link para CRM
|
||||||
|
|
||||||
|
## Pacotes Principais (referencia rapida)
|
||||||
|
|
||||||
|
**Nota**: Estes valores sao referencia. Consultar SEMPRE o CRM para precos actualizados.
|
||||||
|
|
||||||
|
### Websites
|
||||||
|
| Produto | Setup | Anuidade | Prazo |
|
||||||
|
|---------|-------|----------|-------|
|
||||||
|
| StarterWP | 700 | 250 | 3-5 sem |
|
||||||
|
| CorporateWP | 900 | 299 | 4-6 sem |
|
||||||
|
| eCommerceWP | 1100 | 349 | 7-9 sem |
|
||||||
|
| ChallengeWP | 700 | 250 | 8-10 sem |
|
||||||
|
| CareWP | 1300 | 350 | 4-6 sem |
|
||||||
|
|
||||||
|
### DeskCRM
|
||||||
|
| Produto | Setup | Anuidade |
|
||||||
|
|---------|-------|----------|
|
||||||
|
| DeskCRM Starter | (ver CRM) | 400 |
|
||||||
|
| DeskCRM Profissional | (ver CRM) | 800 |
|
||||||
|
| DeskCRM Avancado | (ver CRM) | 1500 |
|
||||||
|
| DeskCRM Enterprise | (ver CRM) | 3000 |
|
||||||
|
|
||||||
|
### AcceleratorX
|
||||||
|
| Produto | Setup |
|
||||||
|
|---------|-------|
|
||||||
|
| WP ProCMS | 650 |
|
||||||
|
| e-Commerce | 750 |
|
||||||
|
| Membership | 450 |
|
||||||
|
| Booking | 450 |
|
||||||
|
| Care | 750 |
|
||||||
|
| Meet | 650 |
|
||||||
|
| School Manager | 850 |
|
||||||
|
|
||||||
|
### Chatbots
|
||||||
|
| Produto | Setup |
|
||||||
|
|---------|-------|
|
||||||
|
| Chatbot Basico | 350 |
|
||||||
|
| Chatbot Avancado | 850 |
|
||||||
|
| Chatbot Care | 850 |
|
||||||
|
|
||||||
|
### Design/Branding
|
||||||
|
| Produto | Valor |
|
||||||
|
|---------|-------|
|
||||||
|
| Branding WOW Digital | 400 |
|
||||||
|
| Branding WOW Essencial | 850 |
|
||||||
|
| Branding Completo | 1100 |
|
||||||
|
| Pack Rebranding | 1500 |
|
||||||
|
| Pack Premium 360 | 5000 |
|
||||||
|
|
||||||
|
## Estrutura de Items para API
|
||||||
|
|
||||||
|
Cada item do orcamento segue o formato:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"description": "Descricao do servico",
|
||||||
|
"qty": 1,
|
||||||
|
"rate": 700,
|
||||||
|
"unit": "un"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Unidades:**
|
||||||
|
- `un` - Unidade (projecto/item unico)
|
||||||
|
- `mes` ou `mensalidade` - Mes (servico recorrente mensal, usado com `-MEN`)
|
||||||
|
- `trimestral` - Trimestre (servico recorrente trimestral, usado com `-TRI`)
|
||||||
|
- `ano` ou `anuidade` - Ano (anuidade, comportamento por defeito)
|
||||||
|
|
||||||
|
## Termos e Condicoes Padrao
|
||||||
|
|
||||||
|
```
|
||||||
|
CONDICOES DE PAGAMENTO
|
||||||
|
|
||||||
|
1. Projectos: 50% na adjudicacao + 50% na entrega
|
||||||
|
2. Servicos recorrentes: facturacao mensal antecipada
|
||||||
|
|
||||||
|
VALIDADE
|
||||||
|
|
||||||
|
Orcamento valido por 30 dias a partir da data de emissao.
|
||||||
|
|
||||||
|
ANUIDADE
|
||||||
|
|
||||||
|
A anuidade inclui:
|
||||||
|
- Alojamento Premium SSD NVMe
|
||||||
|
- Certificado SSL
|
||||||
|
- Actualizacoes de seguranca
|
||||||
|
- Suporte tecnico basico
|
||||||
|
|
||||||
|
Descomplicar Crescimento Digital
|
||||||
|
NIF: 514 623 168 | descomplicar.pt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Checklist de Execucao
|
||||||
|
|
||||||
|
- [ ] Cliente identificado/criado no CRM
|
||||||
|
- [ ] Tipo de orcamento seleccionado
|
||||||
|
- [ ] Precos consultados no CRM (tblitems)
|
||||||
|
- [ ] Funcionalidades adicionais identificadas
|
||||||
|
- [ ] Valores calculados (subtotal + IVA)
|
||||||
|
- [ ] Recorrencia calculada (anuidade/trimestral/mensal conforme variante)
|
||||||
|
- [ ] Estimate criado no CRM (status: Draft)
|
||||||
|
- [ ] Resumo apresentado ao utilizador
|
||||||
|
|
||||||
|
## MCPs Utilizados
|
||||||
|
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__search_customers - Pesquisar cliente
|
||||||
|
mcp__desk-crm-v3__get_customer - Obter detalhes cliente
|
||||||
|
mcp__desk-crm-v3__create_customer - Criar cliente novo
|
||||||
|
mcp__desk-crm-v3__create_estimate - Criar orcamento
|
||||||
|
mcp__desk-crm-v3__get_estimates - Listar orcamentos existentes
|
||||||
|
mcp__desk-crm-v3__price_management - Consultar precos e itens
|
||||||
|
```
|
||||||
|
|
||||||
|
## Formulas de Calculo
|
||||||
|
|
||||||
|
### Website Simples
|
||||||
|
```
|
||||||
|
Total = Base + Funcionalidades + Conteudos
|
||||||
|
Anuidade = Anuidade_Base + Anuidades_Funcionalidades
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo: Website Corporativo com Agendamento (sem variante)
|
||||||
|
```
|
||||||
|
CorporateWP: 900 (item CRM: "CorporateWP")
|
||||||
|
EasyAppointment: 175 (item CRM: "EasyAppointment")
|
||||||
|
Chat da Pagina: 50 (item CRM: "Chat da Pagina")
|
||||||
|
Pixel + GTM: 50 (items CRM: "Configuracao Pixel Facebook" + "Configuracao GTM")
|
||||||
|
---------------------------------
|
||||||
|
Subtotal: 1175
|
||||||
|
IVA 23%: 270.25
|
||||||
|
TOTAL: 1445.25
|
||||||
|
|
||||||
|
Anuidade: 299 + 50 + 50 = 399 (items CRM com unit "anuidade")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo: Mesmo orcamento com `-MEN`
|
||||||
|
```
|
||||||
|
SETUP (pagamento unico):
|
||||||
|
CorporateWP: 900
|
||||||
|
EasyAppointment: 175
|
||||||
|
Chat da Pagina: 50
|
||||||
|
Pixel + GTM: 50
|
||||||
|
---------------------------------
|
||||||
|
Subtotal Setup: 1175
|
||||||
|
IVA 23%: 270.25
|
||||||
|
TOTAL Setup: 1445.25
|
||||||
|
|
||||||
|
RECORRENCIA MENSAL (items CRM com prefixo "Mensalidade"):
|
||||||
|
Mensalidade CorporateWP: 29.90 (item CRM: "Mensalidade CorporateWP")
|
||||||
|
Mensalidade EasyAppointment: 5.90 (item CRM: "Mensalidade EasyAppointment")
|
||||||
|
Mensalidade Chat da Pagina: 4.90 (item CRM: "Mensalidade Chat da Pagina")
|
||||||
|
---------------------------------
|
||||||
|
Subtotal Mensal: 40.70
|
||||||
|
IVA 23%: 9.36
|
||||||
|
TOTAL Mensal: 50.06/mes
|
||||||
|
|
||||||
|
Nota: precos mensais sao exemplificativos - consultar CRM para valores reais.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- `references/pricing-guide.md` - Tabela de precos rapida (referencia, nao fonte de verdade)
|
||||||
|
- `templates/website-corporativo.md` - Templates StarterWP, CorporateWP, CareWP
|
||||||
|
- `templates/e-commerce.md` - Template eCommerceWP
|
||||||
|
- `templates/marketing-digital.md` - Template Marketing 360
|
||||||
|
- `templates/manutencao.md` - Template Manutencao
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Datasets Dify (Consulta Complementar)
|
||||||
|
|
||||||
|
| Dataset | ID | Prioridade |
|
||||||
|
|---------|----|-----------:|
|
||||||
|
| **Servicos Descomplicar** | `bd65f36e-6004-4584-b478-129b2c21b4d2` | 1 |
|
||||||
|
| **Vendas** | `a7ba6005-517c-41ab-ac5e-da1c1a1c62ef` | 1 |
|
||||||
|
| **Marketing Digital** | `c1ec779f-4cb1-4ecf-ba11-6b39b93d4e24` | 2 |
|
||||||
|
| **Desenvolvimento de WebSites** | `c8489151-de94-42b2-8cee-c0b961cfac6d` | 2 |
|
||||||
|
|
||||||
|
### Quando Consultar
|
||||||
|
|
||||||
|
- Justificar precos ao cliente
|
||||||
|
- Comparar funcionalidades entre pacotes
|
||||||
|
- Criar proposta de valor diferenciada
|
||||||
|
- Tecnicas de negociacao e fechamento
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instrumentacao Automatica
|
||||||
|
|
||||||
|
### Baseline
|
||||||
|
|
||||||
|
| Metrica | Valor |
|
||||||
|
|---------|-------|
|
||||||
|
| Tempo baseline | 30 min |
|
||||||
|
| Tempo target | 15 min |
|
||||||
|
| Melhoria esperada | -50% |
|
||||||
|
|
||||||
|
### Query para Gravar (executar no final da skill)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
INSERT INTO tblskill_agent_metrics (
|
||||||
|
type, name, duration_ms, status, staff_id,
|
||||||
|
kb_consulted, kb_cache_hit, tool_calls, project_id
|
||||||
|
) VALUES (
|
||||||
|
'skill', '/orcamento', {DURACAO_MS}, '{STATUS}', 25,
|
||||||
|
{KB_CONSULTADO}, {CACHE_HIT}, {TOOL_CALLS}, {PROJECT_ID}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### v4.1.0 (2026-03-12)
|
||||||
|
- Suporte para variantes `-MEN` (mensal) e `-TRI` (trimestral) na sintaxe
|
||||||
|
- Fase 3 actualizada com queries especificas por variante
|
||||||
|
- Fase 5 actualizada com termos de pagamento ajustados por variante
|
||||||
|
- Mapeamento de variantes documentado (pesquisa por prefixo no CRM)
|
||||||
|
- Exemplo adicional com `-MEN` para demonstrar separacao setup/recorrencia
|
||||||
|
- Retrocompativel: sem flag = comportamento anterior (item base)
|
||||||
|
|
||||||
|
### v4.0.0 (2026-03-05)
|
||||||
|
- **BREAKING**: Fonte de verdade migrada de CSVs para Desk CRM (tblitems + tblitems_groups)
|
||||||
|
- Removidas referencias a tabela-geral.csv, items-subscricao.csv, chatbots-precos.csv, items-faturacao-deskcrm.csv
|
||||||
|
- Adicionados grupos DeskCRM, Chatbots, AcceleratorX como tipos de orcamento
|
||||||
|
- Protocolo actualizado para consultar precos via MCP/SQL em vez de CSVs
|
||||||
|
- Tabela de referencia rapida mantida mas marcada como "nao fonte de verdade"
|
||||||
|
- Adicionada documentacao de variantes de facturacao (Investimento/Anuidade/Trimestral/Mensalidade)
|
||||||
|
|
||||||
|
### v3.1.0 (2026-02-03)
|
||||||
|
- Instrumentacao automatica adicionada
|
||||||
|
- Datasets Dify integrados
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Versao**: 4.1.0 | **Data**: 2026-03-12 | **Fonte de Verdade**: Desk CRM (tblitems)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: proposal-deck
|
name: proposal-deck
|
||||||
description: Geracao de apresentacoes PPTX de propostas comerciais profissionais com branding Descomplicar. Integra dados do CRM, tabela de precos e template curado de 16 layouts.
|
description: Geracao de apresentacoes PPTX de propostas comerciais profissionais com branding Descomplicar. Integra dados do CRM, tabela de precos e template curado de 16 layouts.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill /proposal-deck - Apresentacoes de Propostas Comerciais
|
# Skill /proposal-deck - Apresentacoes de Propostas Comerciais
|
||||||
@@ -134,4 +133,284 @@ Para projectos simples, orcamentos rapidos.
|
|||||||
| 8 | encerramento | Branding Descomplicar |
|
| 8 | encerramento | Branding Descomplicar |
|
||||||
|
|
||||||
#### Proposta Standard (12 slides)
|
#### Proposta Standard (12 slides)
|
||||||
Para projectos
|
Para projectos de media complexidade (websites, marketing).
|
||||||
|
|
||||||
|
| Ordem | Layout | Conteudo |
|
||||||
|
|:-----:|--------|----------|
|
||||||
|
| 1 | capa | Titulo + cliente + ano |
|
||||||
|
| 2 | sobre-nos | Apresentacao Descomplicar |
|
||||||
|
| 3 | divisor-seccao | "Desafio" |
|
||||||
|
| 4 | objectivos | Objectivos do cliente |
|
||||||
|
| 5 | processo-3-passos | Metodologia |
|
||||||
|
| 6 | fases-3-blocos | Fases do projecto |
|
||||||
|
| 7 | divisor-seccao | "Solucao" |
|
||||||
|
| 8 | beneficios-6 | Beneficios da solucao |
|
||||||
|
| 9 | deliverables | Escopo detalhado |
|
||||||
|
| 10 | timeline-etapas | Cronograma com precos |
|
||||||
|
| 11 | contacto | Dados do gestor |
|
||||||
|
| 12 | encerramento | Branding Descomplicar |
|
||||||
|
|
||||||
|
#### Proposta Completa (16 slides)
|
||||||
|
Para projectos complexos, concursos, clientes enterprise.
|
||||||
|
|
||||||
|
Usa todos os 16 layouts na ordem numerica original.
|
||||||
|
|
||||||
|
### Fase 3: Geracao do PPTX
|
||||||
|
|
||||||
|
**Directorio de trabalho:** `~/.claude-work/proposal-[cliente-slug]/`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Criar directorio e copiar template
|
||||||
|
mkdir -p ~/.claude-work/proposal-[slug]/
|
||||||
|
cp "/media/ealmeida/Dados/Hub/90-Templates/Comercial/descomplicar-proposal-template.pptx" \
|
||||||
|
~/.claude-work/proposal-[slug]/template.pptx
|
||||||
|
|
||||||
|
# 2. Descompactar template
|
||||||
|
python3 ~/.claude/plugins/marketplaces/descomplicar-plugins/design-media/skills/pptx-generator/scripts/office/unpack.py \
|
||||||
|
~/.claude-work/proposal-[slug]/template.pptx \
|
||||||
|
~/.claude-work/proposal-[slug]/unpacked/
|
||||||
|
|
||||||
|
# 3. Editar slides XML (ver seccao "Edicao de Conteudo XML")
|
||||||
|
|
||||||
|
# 4. Remover slides nao necessarios de presentation.xml
|
||||||
|
# (alterar rIdX refs e apagar ficheiros slideN.xml correspondentes)
|
||||||
|
|
||||||
|
# 5. Limpar XMLs
|
||||||
|
python3 ~/.claude/plugins/marketplaces/descomplicar-plugins/design-media/skills/pptx-generator/scripts/clean.py \
|
||||||
|
~/.claude-work/proposal-[slug]/unpacked/
|
||||||
|
|
||||||
|
# 6. Recompactar
|
||||||
|
python3 ~/.claude/plugins/marketplaces/descomplicar-plugins/design-media/skills/pptx-generator/scripts/office/pack.py \
|
||||||
|
~/.claude-work/proposal-[slug]/unpacked/ \
|
||||||
|
~/.claude-work/proposal-[slug]/proposta-[slug].pptx \
|
||||||
|
--original ~/.claude-work/proposal-[slug]/template.pptx
|
||||||
|
```
|
||||||
|
|
||||||
|
### Edicao de Conteudo XML
|
||||||
|
|
||||||
|
Cada slide e um ficheiro `ppt/slides/slideN.xml`. Localizar placeholders pelo texto visivel e substituir:
|
||||||
|
|
||||||
|
| Placeholder | Substituir por | Exemplo |
|
||||||
|
|-------------|----------------|---------|
|
||||||
|
| `[TITULO_PROPOSTA]` | Nome do servico proposto | "Website Corporativo" |
|
||||||
|
| `[SUBTITULO]` | Nome do cliente | "Para Empresa XYZ" |
|
||||||
|
| `[ANO]` | Ano corrente | "2026" |
|
||||||
|
| `[OBJECTIVO_N]` | Objectivo N do cliente | "Aumentar presenca online" |
|
||||||
|
| `[FASE_N_TITULO]` | Titulo da fase N | "Fase 1: Descoberta" |
|
||||||
|
| `[FASE_N_DESC]` | Descricao da fase N | "Analise de requisitos..." |
|
||||||
|
| `[DELIVERABLE_N]` | Item do escopo | "Website responsivo" |
|
||||||
|
| `[PRECO]` | Valor formatado | "1.200 EUR" |
|
||||||
|
| `[PRECO_TOTAL]` | Valor total | "2.500 EUR + IVA" |
|
||||||
|
| `[TIMELINE_N]` | Etapa do cronograma | "Semana 1-2" |
|
||||||
|
| `[GESTOR_NOME]` | Nome do gestor | "Emanuel Almeida" |
|
||||||
|
| `[GESTOR_EMAIL]` | Email do gestor | "emanuel@descomplicar.pt" |
|
||||||
|
| `[GESTOR_TEL]` | Telefone | "911 510 005" |
|
||||||
|
|
||||||
|
**Tecnica XML:** Localizar `<a:t>` tags dentro de `<a:r>` runs. Substituir texto preservando formatacao:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Exemplo: substituir texto num slide
|
||||||
|
import re
|
||||||
|
|
||||||
|
def replace_placeholder(xml_content, placeholder, value):
|
||||||
|
"""Substituir placeholder preservando formatacao XML."""
|
||||||
|
# Placeholders podem estar fragmentados em multiplos <a:t> tags
|
||||||
|
# Usar regex para localizar e substituir
|
||||||
|
return xml_content.replace(placeholder, value)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Regra critica:** Nunca alterar atributos de formatacao (`<a:rPr>`, `<a:pPr>`). Apenas substituir conteudo textual dentro de `<a:t>`.
|
||||||
|
|
||||||
|
### Fase 4: Entrega
|
||||||
|
|
||||||
|
1. **Guardar PPTX final:**
|
||||||
|
```
|
||||||
|
Hub/03-Propostas/[cliente]/proposta-[servico]-[data].pptx
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Upload para Google Drive** (opcional):
|
||||||
|
```
|
||||||
|
mcp__google-workspace__drive_upload_file
|
||||||
|
file_path="~/.claude-work/proposal-[slug]/proposta-[slug].pptx"
|
||||||
|
folder_id="[pasta-cliente-drive]"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Registar no CRM** (se nao existir estimate):
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__create_estimate
|
||||||
|
client_id=[id]
|
||||||
|
date=[hoje]
|
||||||
|
expiry_date=[hoje + 30 dias]
|
||||||
|
items=[items]
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Limpar temporarios:**
|
||||||
|
```bash
|
||||||
|
rm -rf ~/.claude-work/proposal-[slug]/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exemplos de Propostas Tipicas
|
||||||
|
|
||||||
|
### Website Corporativo (CorporateWP)
|
||||||
|
|
||||||
|
**Tipo:** Standard (12 slides)
|
||||||
|
**Servico:** CorporateWP
|
||||||
|
**Slides seleccionados:** capa, sobre-nos, divisor, objectivos, processo-3-passos, fases-3-blocos, divisor, beneficios-6, deliverables, timeline-etapas, contacto, encerramento
|
||||||
|
|
||||||
|
**Conteudo tipico:**
|
||||||
|
- **Objectivos:** Presenca profissional online, geracao de leads, credibilidade digital
|
||||||
|
- **3 Passos:** Descoberta -> Desenvolvimento -> Lancamento
|
||||||
|
- **3 Fases:** Analise e Conteudo (S1-2) -> Design e Desenvolvimento (S3-5) -> Testes e Lancamento (S6)
|
||||||
|
- **6 Beneficios:** Design responsivo, SEO optimizado, painel intuitivo, SSL incluido, suporte dedicado, performance rapida
|
||||||
|
- **Deliverables:** Website responsivo, 5-8 paginas, formularios, integracao redes sociais, Google Analytics, formacao
|
||||||
|
- **Timeline:** 4-6 semanas, 900 EUR + IVA, anuidade 299 EUR
|
||||||
|
|
||||||
|
### Marketing 360
|
||||||
|
|
||||||
|
**Tipo:** Completa (16 slides)
|
||||||
|
**Servico:** Marketing Digital 360
|
||||||
|
**Slides seleccionados:** todos os 16
|
||||||
|
|
||||||
|
**Conteudo tipico:**
|
||||||
|
- **Objectivos:** Aumentar visibilidade, gerar leads qualificados, ROI mensuravel, posicionamento digital
|
||||||
|
- **4 Pilares (engrenagens):** SEO, Redes Sociais, Publicidade Online, Email Marketing
|
||||||
|
- **Processo:** Auditoria -> Estrategia -> Execucao
|
||||||
|
- **6 Beneficios:** Mais trafego, leads qualificados, brand awareness, ROI mensuravel, relatorios mensais, equipa dedicada
|
||||||
|
- **Deliverables:** Auditoria inicial, plano estrategico, gestao redes sociais, campanhas Ads, relatorios mensais, reunioes quinzenais
|
||||||
|
- **Timeline:** Ongoing, setup 500-1500 EUR, mensalidade 300-800 EUR
|
||||||
|
|
||||||
|
### SEO / Optimizacao
|
||||||
|
|
||||||
|
**Tipo:** Standard (12 slides)
|
||||||
|
**Servico:** Pack SEO
|
||||||
|
**Slides seleccionados:** capa, sobre-nos, divisor, objectivos, processo-3-passos, grid-4-cards, divisor, detalhe-servico, deliverables, pack-pricing, contacto, encerramento
|
||||||
|
|
||||||
|
**Conteudo tipico:**
|
||||||
|
- **Objectivos:** Melhorar posicionamento Google, aumentar trafego organico, ultrapassar concorrencia
|
||||||
|
- **3 Passos:** Auditoria Tecnica -> Optimizacao On-Page -> Link Building
|
||||||
|
- **4 Cards:** Pesquisa Keywords, SEO Tecnico, Conteudo Optimizado, Relatorios Mensais
|
||||||
|
- **Deliverables:** Auditoria inicial, optimizacao 10-20 paginas, blog mensal, relatorio posicoes, Google Search Console
|
||||||
|
- **Pricing:** Mensalidade 300-600 EUR conforme pack
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## MCPs Utilizados
|
||||||
|
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__search_customers - Pesquisar cliente
|
||||||
|
mcp__desk-crm-v3__get_customer - Obter detalhes cliente
|
||||||
|
mcp__desk-crm-v3__get_estimates - Verificar orcamentos existentes
|
||||||
|
mcp__desk-crm-v3__create_estimate - Registar estimate no CRM
|
||||||
|
mcp__desk-crm-v3__price_management - Consultar precos oficiais
|
||||||
|
mcp__google-workspace__drive_upload_file - Upload para Google Drive
|
||||||
|
mcp__mcp-time__current_time - Data/hora actual
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist de Execucao
|
||||||
|
|
||||||
|
- [ ] Cliente identificado no CRM
|
||||||
|
- [ ] Dados recolhidos (objectivos, servicos, precos)
|
||||||
|
- [ ] Tipo de proposta seleccionado (minima/standard/completa)
|
||||||
|
- [ ] Layouts seleccionados e conteudo definido
|
||||||
|
- [ ] Template copiado para ~/.claude-work/
|
||||||
|
- [ ] PPTX descompactado
|
||||||
|
- [ ] Slides editados com dados do cliente
|
||||||
|
- [ ] Slides desnecessarios removidos
|
||||||
|
- [ ] XMLs limpos (clean.py)
|
||||||
|
- [ ] PPTX recompactado e validado
|
||||||
|
- [ ] Ficheiro guardado em Hub/03-Propostas/[cliente]/
|
||||||
|
- [ ] Temporarios limpos
|
||||||
|
- [ ] Estimate registado no CRM (se aplicavel)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-Patterns
|
||||||
|
|
||||||
|
| Fazer | NAO Fazer |
|
||||||
|
|-------|-----------|
|
||||||
|
| Personalizar cada slide com dados reais do cliente | Usar placeholders genericos ou "Lorem ipsum" |
|
||||||
|
| Consultar CRM para precos actualizados | Inventar precos de memoria |
|
||||||
|
| Seleccionar layouts relevantes para o servico | Incluir todos os 16 slides quando 8 bastam |
|
||||||
|
| Manter branding Descomplicar (cores, fontes, logo) | Alterar formatacao XML (cores, tamanhos, posicoes) |
|
||||||
|
| Guardar em Hub/03-Propostas/ com nome descritivo | Deixar ficheiros em ~/.claude-work/ |
|
||||||
|
| Usar slug sem espacos no nome do ficheiro | Espacos ou caracteres especiais no nome |
|
||||||
|
| Verificar PPTX abre correctamente apos geracao | Entregar sem validar |
|
||||||
|
| Adaptar objectivos ao sector do cliente | Copiar objectivos genericos entre propostas |
|
||||||
|
| Incluir dados de contacto do gestor real | Dados de contacto ficticios |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Procedimentos Relacionados
|
||||||
|
|
||||||
|
- `PROC-Catalogo-Codificacao-Produtos.md` - Codificacao e catalogo de produtos
|
||||||
|
- `PROC-CRM-Operacoes.md` - Operacoes CRM padrao
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### v1.0.0 (2026-03-06)
|
||||||
|
- Versao inicial da skill /proposal-deck
|
||||||
|
- 16 layouts mapeados do template PPTX curado
|
||||||
|
- 3 niveis de complexidade: minima (8), standard (12), completa (16)
|
||||||
|
- Integracao CRM (cliente, estimates, precos)
|
||||||
|
- Workflow completo: recolha -> seleccao -> geracao -> entrega
|
||||||
|
- Exemplos para website, marketing 360, SEO
|
||||||
|
- Anti-patterns documentados
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Versao**: 1.0.0 | **Data**: 2026-03-06 | **Template**: descomplicar-proposal-template.pptx
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Media Bank (D7-MB-001)
|
||||||
|
|
||||||
|
**Quando consultar:** antes de gerar o deck da proposta — para hero da capa, backgrounds de slides de secção e imagens ilustrativas. Garante consistência visual e evita dependência de geração IA por cada proposta.
|
||||||
|
|
||||||
|
**Workflow tentativa-primeiro:**
|
||||||
|
|
||||||
|
1. Pesquisar via MCP `media-bank`:
|
||||||
|
```
|
||||||
|
mcp__media-bank__search_media(
|
||||||
|
query="<sector/serviço do cliente em EN>",
|
||||||
|
type="image",
|
||||||
|
tema="<um dos 9 temas alinhado com serviço>",
|
||||||
|
orientation="landscape",
|
||||||
|
min_quality=8, # exigência mais alta para propostas
|
||||||
|
min_width=1920,
|
||||||
|
exclude_used_in_last_days=60,
|
||||||
|
limit=5
|
||||||
|
)
|
||||||
|
```
|
||||||
|
2. Avaliar candidatos por `description_en` + `quality_score` + alinhamento com identidade visual Descomplicar.
|
||||||
|
3. Se ≥1 adequado → usar `path_local` directamente no PPTX (slide master / capa) ou compor no template.
|
||||||
|
4. Se nenhum → fallback para geração IA (Flux) ou biblioteca de stock interna.
|
||||||
|
5. Marcar uso: `mcp__media-bank__mark_used(asset_id, {type:"proposal-deck", ref:"<cliente>-<data>", date:"<YYYY-MM-DD>"})`.
|
||||||
|
|
||||||
|
**Fallback REST** (se MCP indisponível):
|
||||||
|
```bash
|
||||||
|
SK=$(grep SERVICE_KEY /media/ealmeida/Dados/Hub/05-Projectos/Banco-Imagens-Videos/scripts/.env | cut -d= -f2)
|
||||||
|
curl -s "https://mem.descomplicar.pt/rest/v1/media_bank_assets?type=eq.image&orientation=eq.landscape&quality_score=gte.8&deleted_at=is.null&order=quality_score.desc&limit=5" \
|
||||||
|
-H "apikey: $SK" -H "Authorization: Bearer $SK"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Regra inviolável:** matéria-prima local. Usar como input no template PPTX — NUNCA servir o ficheiro raw ao cliente sem integração no deck (overlays, branding, layout).
|
||||||
|
|
||||||
|
Ver `Hub/06-Operacoes/Procedimentos/D7-Tecnologia/MCP/PROC-Media-Bank.md` (D7-MB-001) 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.*
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: proposta-visual
|
name: proposta-visual
|
||||||
description: Criação completa de propostas comerciais visuais — página web (propostas.descomplicar.pt) + PDF exportável + PPTX editável. Recolhe dados CRM, gera JSON, renderiza condicionalmente e faz deploy.
|
description: Criação completa de propostas comerciais visuais — página web (propostas.descomplicar.pt) + PDF exportável + PPTX editável. Recolhe dados CRM, gera JSON, renderiza condicionalmente e faz deploy.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill /proposta-visual — Propostas Comerciais Visuais
|
# Skill /proposta-visual — Propostas Comerciais Visuais
|
||||||
@@ -118,4 +117,359 @@ Mostra: "750 EUR + IVA" + "Investimento único · prazo 1-2 semanas"
|
|||||||
| `Font.register` com fontes locais/CDN em multi-página | Falha silenciosa | Usar Helvetica/Helvetica-Bold (built-in) |
|
| `Font.register` com fontes locais/CDN em multi-página | Falha silenciosa | Usar Helvetica/Helvetica-Bold (built-in) |
|
||||||
| `href` vazio no PDFDownloadLink | PDF não gerou — verificar consola | Cache do browser — Ctrl+Shift+R |
|
| `href` vazio no PDFDownloadLink | PDF não gerou — verificar consola | Cache do browser — Ctrl+Shift+R |
|
||||||
| `width: "100%"` em bars/elementos dentro de flex container | Não resolve — fica invisível | Usar `alignSelf: "stretch"` no elemento e no container pai |
|
| `width: "100%"` em bars/elementos dentro de flex container | Não resolve — fica invisível | Usar `alignSelf: "stretch"` no elemento e no container pai |
|
||||||
| Imagens com path absoluto (`/home/...`) | react-pdf não acede ao filesystem local | Colocar em `public/assets/` e referenciar como `"assets/foto.png"` (s
|
| Imagens com path absoluto (`/home/...`) | react-pdf não acede ao filesystem local | Colocar em `public/assets/` e referenciar como `"assets/foto.png"` (sem `/` inicial) |
|
||||||
|
| `borderBottomWidth` no header + `borderTopWidth` em componente filho | Duplica a linha dourada visualmente | Usar apenas `borderTopWidth: 2` no próprio header; remover `borderBottom` |
|
||||||
|
|
||||||
|
**Hifenização:** Para desactivar em todo o PDF, adicionar ao `<Document>`:
|
||||||
|
```jsx
|
||||||
|
hyphenationCallback={(word) => [word]}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ícones no PDF:** Usar `PDFIcons.jsx` (`src/pdf/sections/`) com `Svg/Path/Circle/Line/Polyline` de `@react-pdf/renderer`. NÃO importar lucide-react nos componentes PDF — crasha o worker.
|
||||||
|
|
||||||
|
**Ícones na web:** Usar `lucide-react`. Padrão: `FALLBACK_ICONS[i % FALLBACK_ICONS.length]` para rotação automática por índice quando o JSON não tem campo `icon`.
|
||||||
|
|
||||||
|
### 6. Página 360° (service360) — contextualizar
|
||||||
|
|
||||||
|
A secção service360 no PDF usa o label "O QUE PROPOMOS" (genérico) e o título "As nossas soluções para o seu negócio". Os dados vêm do JSON `service360.areas[]`.
|
||||||
|
|
||||||
|
Para propostas que NÃO são 360°, adaptar os `areas` ao contexto:
|
||||||
|
- Migração técnica: features da migração
|
||||||
|
- Website: áreas do serviço web
|
||||||
|
- SEO: pilares do trabalho SEO
|
||||||
|
|
||||||
|
Se `service360` for `null`, a secção não aparece.
|
||||||
|
|
||||||
|
### 7. Condições comerciais — página separada no PDF
|
||||||
|
|
||||||
|
As condições estão numa página PDF separada (não na mesma que o roadmap) para evitar corte entre páginas. O componente `PDFWorkDone` retorna um Fragment com 2 Pages.
|
||||||
|
|
||||||
|
### 8. Apresentação 16:9 — PDFPresentation.jsx
|
||||||
|
|
||||||
|
Existe um segundo output PDF em formato 1920×1080 (slides), activado por um botão "Apresentação 16:9" no canto inferior direito da proposta web.
|
||||||
|
|
||||||
|
**Ficheiros envolvidos:**
|
||||||
|
- `src/pdf/PDFPresentation.jsx` — documento completo com todos os slides
|
||||||
|
- `src/pdf/sections/PDFSlide.jsx` — wrapper de slide (Page 1440×810pt, header com logo, rodapé com numeração)
|
||||||
|
|
||||||
|
**Dimensões:** 1920×1080 @ 72dpi → `[1440, 810]` em pontos (unidade do react-pdf).
|
||||||
|
|
||||||
|
**Estrutura de slides:**
|
||||||
|
|
||||||
|
| Slide | Componente | Dados |
|
||||||
|
|-------|-----------|-------|
|
||||||
|
| Capa | `SlideCover` | `data.title`, `client`, `date`, `company` |
|
||||||
|
| Diagnóstico | `SlideProblem` | `context.description`, `context.diagnosis` |
|
||||||
|
| Descomplicar 360° | `Slide360` | `educationSections` com `label:"Descomplicar 360°"` |
|
||||||
|
| Educação | `SlideEducation` | restantes `educationSections` |
|
||||||
|
| Soluções | `SlideService360` | `service360.areas` |
|
||||||
|
| Previsão de leads | `SlideLeadForecast` | `leadForecast` |
|
||||||
|
| Preços | `SlidePricing` | `plans` |
|
||||||
|
| Roadmap | `SlideRoadmap` | `roadmap` |
|
||||||
|
| Contacto | `SlideContact` | `company`, `client.contact` |
|
||||||
|
|
||||||
|
**Helper components internos (PDFPresentation.jsx):**
|
||||||
|
- `GoldLine` — linha dourada decorativa
|
||||||
|
- `Tag` — label uppercase dourado (fontSize 13)
|
||||||
|
- `SlideTitle` — título principal do slide (fontSize 52 default)
|
||||||
|
- `SlideBody` — corpo do slide (fontSize 19)
|
||||||
|
- `Card` — caixa de conteúdo com border esquerda dourada (title 16, body 14)
|
||||||
|
- `CardGrid` — wrapper flexWrap para cards
|
||||||
|
|
||||||
|
**Tamanhos de referência para legibilidade em sala:**
|
||||||
|
- Tag: 13pt | SlideTitle: 42-58pt | SlideBody: 19pt
|
||||||
|
- Card title: 16pt | Card body: 14pt
|
||||||
|
- Cover logo: height 120 (3× maior que header normal)
|
||||||
|
|
||||||
|
**Separação Slide360 vs SlideEducation:**
|
||||||
|
```jsx
|
||||||
|
const slide360 = educationSections?.find(s => s.label?.toLowerCase().includes("360"))
|
||||||
|
const otherSections = educationSections?.filter(s => !s.label?.toLowerCase().includes("360"))
|
||||||
|
```
|
||||||
|
|
||||||
|
**Botão no App.jsx:**
|
||||||
|
```jsx
|
||||||
|
<PDFDownloadLink
|
||||||
|
document={<PDFPresentation data={currentProposal} />}
|
||||||
|
fileName={`apresentacao-descomplicar-${...}.pdf`}
|
||||||
|
>
|
||||||
|
{({ loading }) => <button>Apresentação 16:9</button>}
|
||||||
|
</PDFDownloadLink>
|
||||||
|
```
|
||||||
|
|
||||||
|
**PROIBIÇÕES específicas do 16:9:**
|
||||||
|
- NÃO usar `gap` em `flexWrap` (mesmo bug do A4)
|
||||||
|
- NÃO usar `rgba()` em `borderColor`
|
||||||
|
- Manter `hyphenationCallback` no `<Document>` do PDFPresentation também
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Protocolo
|
||||||
|
|
||||||
|
### Sintaxe
|
||||||
|
|
||||||
|
```
|
||||||
|
/proposta-visual [cliente] [tipo-serviço]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fase 1: Análise do contexto
|
||||||
|
|
||||||
|
**ANTES de criar o JSON, responder a estas perguntas:**
|
||||||
|
|
||||||
|
1. **Que tipo de proposta é?** (360°, website, migração técnica, SEO, eCommerce, outro)
|
||||||
|
2. **O preço é mensal ou único?** → define `monthly` vs `price`/`priceLabel`/`priceSubtitle`
|
||||||
|
3. **Que secções se aplicam?** → define que campos preencher no JSON
|
||||||
|
4. **Há dados quantitativos?** (vendas, scores SEO, KPIs) → define `salesData`, `context.scores`
|
||||||
|
5. **Há trabalho já realizado?** → define `workDone`
|
||||||
|
6. **Quantas opções de preço?** → define `plans[]`
|
||||||
|
|
||||||
|
**Mapa de secções por tipo de proposta:**
|
||||||
|
|
||||||
|
| Secção | 360° | Website | Migração | SEO | eCommerce |
|
||||||
|
|--------|:----:|:-------:|:--------:|:---:|:---------:|
|
||||||
|
| `title` | Descomplicar 360° | Website Profissional | [contexto] | Optimização SEO | Loja Online |
|
||||||
|
| `brandStrategy` | ✓ | Opcional | — | — | Opcional |
|
||||||
|
| `salesData` | Se existir | — | — | — | Se existir |
|
||||||
|
| `scores` | ✓ (audit) | Opcional | — | ✓ (audit) | Opcional |
|
||||||
|
| `service360` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| `plans` | ✓ (3 opções) | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| `licenses` | Se aplicável | — | — | — | Se aplicável |
|
||||||
|
| `workDone` | Se existir | Se existir | ✓ | Se existir | Se existir |
|
||||||
|
| `roadmap` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| `conditions` | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
|
||||||
|
### Fase 2: Recolha de dados do CRM
|
||||||
|
|
||||||
|
```
|
||||||
|
mcp__desk-crm-v3__search_customers query="[nome]"
|
||||||
|
mcp__desk-crm-v3__get_customer customer_id=[id]
|
||||||
|
mcp__desk-crm-v3__get_estimates client_id=[id]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fase 3: Criar ficheiro JSON
|
||||||
|
|
||||||
|
**Localização:** `src/data/[slug].json`
|
||||||
|
|
||||||
|
**Gerar slug:** iniciais do cliente + tipo + hash curto. Ex: `ccv-bookeo-a3f7c1d2`
|
||||||
|
|
||||||
|
**Schema mínimo obrigatório:**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"title": "Título da Proposta",
|
||||||
|
"client": {
|
||||||
|
"name": "Nome Legal Lda.",
|
||||||
|
"brand": "Nome Comercial",
|
||||||
|
"website": "exemplo.pt",
|
||||||
|
"contact": "Nome Contacto",
|
||||||
|
"email": "email@exemplo.pt",
|
||||||
|
"phone": "+351 900 000 000"
|
||||||
|
},
|
||||||
|
"company": {
|
||||||
|
"name": "Descomplicar, Lda.",
|
||||||
|
"brand": "Descomplicar",
|
||||||
|
"nif": "514 785 691",
|
||||||
|
"email": "info@descomplicar.pt",
|
||||||
|
"phone": "911 510 005",
|
||||||
|
"website": "descomplicar.pt"
|
||||||
|
},
|
||||||
|
"date": "2026-03-23",
|
||||||
|
"validDays": 30,
|
||||||
|
"context": {
|
||||||
|
"description": "Descrição da situação...",
|
||||||
|
"diagnosis": [],
|
||||||
|
"scores": [],
|
||||||
|
"brandStrategy": null
|
||||||
|
},
|
||||||
|
"service360": null,
|
||||||
|
"plans": [],
|
||||||
|
"licenses": null,
|
||||||
|
"workDone": [],
|
||||||
|
"roadmap": [],
|
||||||
|
"conditions": [],
|
||||||
|
"salesData": [],
|
||||||
|
"salesProjection": []
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Campos opcionais para planos com preço único:**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"price": 750,
|
||||||
|
"priceLabel": "EUR + IVA",
|
||||||
|
"priceSubtitle": "Investimento único · prazo 1-2 semanas",
|
||||||
|
"monthly": null,
|
||||||
|
"hours": null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Checklist PT-PT antes de guardar o JSON:**
|
||||||
|
- [ ] Todos os textos têm acentos correctos (ã, ç, ã, é, ê, í, ó, õ, ú)
|
||||||
|
- [ ] Zero brasileirismos
|
||||||
|
- [ ] Caractere → (seta) em vez de -> nos textos visíveis
|
||||||
|
- [ ] Monetário: "EUR" ou "€" (não "R$" nem "$")
|
||||||
|
|
||||||
|
### Fase 4: Registar no App.jsx
|
||||||
|
|
||||||
|
```jsx
|
||||||
|
import novaData from "./data/[slug].json"
|
||||||
|
|
||||||
|
const proposals = {
|
||||||
|
// existentes...
|
||||||
|
"[novo-slug]": novaData,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fase 5: Verificar antes do build
|
||||||
|
|
||||||
|
**Checklist pré-build:**
|
||||||
|
- [ ] JSON válido (sem trailing commas, sem campos undefined)
|
||||||
|
- [ ] Campos null/[] para secções que não se aplicam (NÃO omitir)
|
||||||
|
- [ ] `title` definido (não depender do fallback)
|
||||||
|
- [ ] `plans[].price` OU `plans[].monthly` definido (não ambos null)
|
||||||
|
- [ ] `plans[].priceLabel` definido se preço único
|
||||||
|
- [ ] Slug registado em App.jsx
|
||||||
|
- [ ] Nenhum `flexWrap` + `gap` nos componentes PDF
|
||||||
|
- [ ] Nenhum `borderColor` com `rgba()` nos componentes PDF
|
||||||
|
|
||||||
|
### Fase 6: Build e deploy
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /media/ealmeida/Dados/Dev/Propostas
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# Limpar dist
|
||||||
|
cd dist
|
||||||
|
rm -rf assets/template-media assets/template-referencia.pptx assets/slide-referencia.svg
|
||||||
|
cd assets/brochura && ls *.{jpg,png} 2>/dev/null | grep -v image8.jpg | xargs rm -f 2>/dev/null
|
||||||
|
|
||||||
|
# Empacotar
|
||||||
|
cd /media/ealmeida/Dados/Dev/Propostas/dist
|
||||||
|
tar czf /tmp/propostas-dist.tar.gz .
|
||||||
|
|
||||||
|
# Upload + deploy
|
||||||
|
mcp__ssh-unified__sftp_upload server=easy localPath=/tmp/propostas-dist.tar.gz remotePath=/tmp/propostas-dist.tar.gz overwrite=true
|
||||||
|
mcp__ssh-unified__ssh_execute server=easy command="cd /opt/propostas && rm -rf assets/* index.html; tar xzf /tmp/propostas-dist.tar.gz && docker service update --force descomplicar_propostas && rm -f /tmp/propostas-dist.tar.gz"
|
||||||
|
|
||||||
|
# Verificar
|
||||||
|
curl -sI https://propostas.descomplicar.pt/[slug] | head -3
|
||||||
|
# Deve retornar HTTP/2 200
|
||||||
|
|
||||||
|
# Limpar
|
||||||
|
rm -f /tmp/propostas-dist.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fase 7: Testar PDF
|
||||||
|
|
||||||
|
**OBRIGATÓRIO antes de entregar:**
|
||||||
|
1. Abrir `https://propostas.descomplicar.pt/[slug]` com Ctrl+Shift+R
|
||||||
|
2. Clicar "Exportar PDF"
|
||||||
|
3. Verificar que `href` do link não está vazio (PDF gerou)
|
||||||
|
4. Abrir PDF e verificar:
|
||||||
|
- [ ] Título correcto (não "Descomplicar 360°" hardcoded)
|
||||||
|
- [ ] Preços correctos (não "€/mês" se é preço único)
|
||||||
|
- [ ] Sem borders verdes (rgba renderiza verde no react-pdf)
|
||||||
|
- [ ] Sem secções que não se aplicam (360°, vendas, licenças, scores)
|
||||||
|
- [ ] Acentos PT-PT em todo o texto
|
||||||
|
- [ ] Condições comerciais numa página inteira (sem corte)
|
||||||
|
- [ ] Todas as 3 opções de preço com layout uniforme
|
||||||
|
|
||||||
|
**Se o PDF não gera (href vazio):**
|
||||||
|
1. Verificar consola do browser (F12)
|
||||||
|
2. Causa mais provável: import de componente SVG dos infographics
|
||||||
|
3. Verificar que PDFDocument não importa de `./infographics/`
|
||||||
|
4. Verificar que não há `gap` + `flexWrap` no PDF
|
||||||
|
5. Ctrl+Shift+R e tentar novamente (cache)
|
||||||
|
|
||||||
|
### Fase 8: Entrega e registo
|
||||||
|
|
||||||
|
1. Guardar em `Hub/03-Propostas/[Cliente]/`
|
||||||
|
2. Registar estimate no CRM (se não existe)
|
||||||
|
3. Comunicar URL ao utilizador
|
||||||
|
4. Comentar tarefa CRM
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Design system ACIDA 2.0
|
||||||
|
|
||||||
|
| Token | Valor |
|
||||||
|
|-------|-------|
|
||||||
|
| Dourado | #C88900 |
|
||||||
|
| Dourado claro | #EED59F |
|
||||||
|
| Dourado border PDF | #D4A020 (usar em vez de rgba no PDF) |
|
||||||
|
| Dark | #262626 |
|
||||||
|
| Background | #F8F8F8 |
|
||||||
|
| Fonte web | Inter (Google Fonts) |
|
||||||
|
| Fonte PDF | Helvetica / Helvetica-Bold |
|
||||||
|
| Logo escuro | `/assets/logo-descomplicar.png` |
|
||||||
|
| Logo claro | `/assets/logo-descomplicar-white.png` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Propostas existentes
|
||||||
|
|
||||||
|
| Slug | Cliente | Tipo | Data |
|
||||||
|
|------|---------|------|------|
|
||||||
|
| `ljm-360-61a8aecc` | A Loja da Maria | 360° (mensal) | 2026-03-20 |
|
||||||
|
| `ccv-bookeo-a3f7c1d2` | Carvoeiro Caves | Migração técnica (único) | 2026-03-23 |
|
||||||
|
| `pbk-autoridade-local-2026` | Equipa Sérgio Oliveira e Paula Barros · KW Portugal | SEO + conteúdo hiperlocal (mensal) | 2026-04-27 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Skills relacionadas
|
||||||
|
|
||||||
|
- `/proposal-deck` — PPTX standalone (16 layouts, XML editing)
|
||||||
|
- `/orcamento` — Estimate no CRM (sem visual)
|
||||||
|
- `/lead-approach` — Estratégia de abordagem de lead
|
||||||
|
- `/crm` — Operações CRM genéricas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### v2.0.0 (2026-03-23)
|
||||||
|
- Regras críticas documentadas (7 regras)
|
||||||
|
- Renderização condicional obrigatória (ProposalView + PDFDocument)
|
||||||
|
- Título dinâmico via campo `title` no JSON
|
||||||
|
- Preços flexíveis (mensal vs único) com `price`/`priceLabel`/`priceSubtitle`
|
||||||
|
- Bugs react-pdf documentados com proibições explícitas
|
||||||
|
- Mapa de secções por tipo de proposta
|
||||||
|
- Checklist pré-build e teste PDF obrigatório
|
||||||
|
- Condições comerciais em página PDF separada
|
||||||
|
|
||||||
|
### v2.2.0 (2026-04-27)
|
||||||
|
- Formato 16:9 documentado: `PDFPresentation.jsx` + `PDFSlide.jsx`
|
||||||
|
- Regra 8 adicionada: estrutura de slides, dimensões, helper components, tamanhos de referência
|
||||||
|
- Separação Slide360 vs SlideEducation por label
|
||||||
|
- Botão "Apresentação 16:9" no App.jsx documentado
|
||||||
|
- Proibições específicas 16:9 adicionadas
|
||||||
|
|
||||||
|
### v2.1.0 (2026-04-27)
|
||||||
|
- Novos bugs react-pdf documentados: `width:"100%"` em flex, paths absolutos em imagens, `borderBottom` duplicado
|
||||||
|
- Hifenização: `hyphenationCallback` no `<Document>`
|
||||||
|
- Padrão de ícones: `PDFIcons.jsx` para PDF, lucide-react para web, fallback por índice
|
||||||
|
- Proposta `pbk-autoridade-local-2026` adicionada ao registo
|
||||||
|
- Healing Log com 5 erros reais corrigidos
|
||||||
|
|
||||||
|
### v1.0.0 (2026-03-23)
|
||||||
|
- Versão inicial
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Versão:** 2.2.0 | **Data:** 2026-04-27
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Healing Log
|
||||||
|
|
||||||
|
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||||
|
|
||||||
|
```jsonl
|
||||||
|
{"date":"2026-04-27","issue":"Barras de gráfico invisíveis no PDF","fix":"width:'100%' não funciona em flex containers — substituir por alignSelf:'stretch' no container e na barra","source":"user"}
|
||||||
|
{"date":"2026-04-27","issue":"Linha dourada duplicada no topo das páginas","fix":"PDFPage tinha borderBottomWidth no header E os componentes filhos tinham borderTopWidth — remover borderBottom do header, manter apenas borderTopWidth:2","source":"user"}
|
||||||
|
{"date":"2026-04-27","issue":"Foto do gestor de conta não aparece no PDF","fix":"react-pdf não carrega paths absolutos do filesystem — copiar para public/assets/ e referenciar sem / inicial","source":"user"}
|
||||||
|
{"date":"2026-04-27","issue":"Border verde em vez de dourado no PDF","fix":"rgba() em borderColor renderiza verde — usar hex sólido (#D4A020)","source":"user"}
|
||||||
|
{"date":"2026-04-27","issue":"Hifenização indesejada no PDF","fix":"Adicionar hyphenationCallback={(word) => [word]} ao <Document>","source":"user"}
|
||||||
|
```
|
||||||
|
|
||||||
|
*Adicionar nova linha após cada erro corrigido.*
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ description: >
|
|||||||
em PROC-D2-SUP-001 (Atendimento), SUP-002 (Ticketing Workflow) e SUP-003 (SLA Management).
|
em PROC-D2-SUP-001 (Atendimento), SUP-002 (Ticketing Workflow) e SUP-003 (SLA Management).
|
||||||
Usar para: gestão ticket, SLA check, escalar suporte, fechar ticket, atribuir prioridade.
|
Usar para: gestão ticket, SLA check, escalar suporte, fechar ticket, atribuir prioridade.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /ticket-manage v1.0 — Gestão Integrada de Suporte D2
|
# /ticket-manage v1.0 — Gestão Integrada de Suporte D2
|
||||||
@@ -147,4 +146,174 @@ Complementa `/ticket` (operações básicas) com gestão de SLA, checklist e esc
|
|||||||
- sla_limite = por prioridade (1h/2h/4h/24h para primeira resposta)
|
- sla_limite = por prioridade (1h/2h/4h/24h para primeira resposta)
|
||||||
- percentagem_usada = tempo_decorrido / sla_limite × 100
|
- percentagem_usada = tempo_decorrido / sla_limite × 100
|
||||||
3. Agrupar: VIOLADO (>100%), EM RISCO (75-100%), OK (<75%)
|
3. Agrupar: VIOLADO (>100%), EM RISCO (75-100%), OK (<75%)
|
||||||
4. Highlight P1 e P2 c
|
4. Highlight P1 e P2 com aviso especial
|
||||||
|
```
|
||||||
|
|
||||||
|
**Alertas automáticos a gerar:**
|
||||||
|
```
|
||||||
|
P1 sem resposta >30min → "⚠️ CRÍTICO: Ticket #X P1 excede 30min. Acção imediata."
|
||||||
|
P2 sem resposta >2h → "⚠️ ALERTA: Ticket #X P2 em risco. Re-atribuir?"
|
||||||
|
Qualquer ticket >48h → "⏰ Ticket #X aberto há +48h. Revisar."
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## `/ticket-manage escalate <id>` — Escalação com Protocolo
|
||||||
|
|
||||||
|
```
|
||||||
|
1. mcp__desk-crm-v3__get_ticket({ ticket_id: id })
|
||||||
|
2. Determinar destino de escalação:
|
||||||
|
- Tech complexo (WP, servidor) → D7 Tecnologia
|
||||||
|
- Billing → D3 Facturação
|
||||||
|
- Dev customizado → Project Manager
|
||||||
|
3. Criar tarefa Desk CRM com contexto completo:
|
||||||
|
mcp__desk-crm-v3__create_task({
|
||||||
|
name: "[ESCALADO] Ticket #X: [Assunto]",
|
||||||
|
description: "<h4>Escalado de Ticket #X</h4>
|
||||||
|
<p><strong>Cliente:</strong> [nome]</p>
|
||||||
|
<p><strong>Problema:</strong> [descrição]</p>
|
||||||
|
<p><strong>Tentativas anteriores:</strong> [o que foi tentado]</p>
|
||||||
|
<p><strong>SLA original:</strong> [prazo]</p>
|
||||||
|
<p><strong>Motivo escalação:</strong> [razão]</p>",
|
||||||
|
priority: 3,
|
||||||
|
assignees: [1]
|
||||||
|
})
|
||||||
|
4. Informar cliente:
|
||||||
|
mcp__desk-crm-v3__reply_ticket({
|
||||||
|
ticket_id: id,
|
||||||
|
message: "<p>Olá [Nome],</p>
|
||||||
|
<p>A situação é mais complexa e foi escalada para a equipa especialista.
|
||||||
|
Prazo estimado: 24-48h.</p>
|
||||||
|
<p>Pedimos desculpa pela demora.</p>"
|
||||||
|
})
|
||||||
|
5. Nota interna com motivo detalhado
|
||||||
|
6. Output: "Ticket #X escalado → Tarefa #Y | Dept: [destino] | ETA: [prazo]"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## `/ticket-manage close <id>` — Fecho com Checklist Obrigatória
|
||||||
|
|
||||||
|
```
|
||||||
|
1. mcp__desk-crm-v3__get_ticket({ ticket_id: id })
|
||||||
|
2. Executar checklist SUP-001 (OBRIGATÓRIO — 100% antes de fechar):
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checklist de Fecho (SUP-001)
|
||||||
|
|
||||||
|
- [ ] Solução aplicada e testada
|
||||||
|
- [ ] Explicação clara da solução enviada ao cliente
|
||||||
|
- [ ] Causa raiz identificada (não só sintoma)
|
||||||
|
- [ ] Passos de prevenção comunicados
|
||||||
|
- [ ] Cliente confirmou resolução ("Resolvido? Feedback?")
|
||||||
|
- [ ] Lições aprendidas registadas (se novo problema)
|
||||||
|
- [ ] Follow-up 3 dias agendado (se P1/P2)
|
||||||
|
|
||||||
|
```
|
||||||
|
3. Se checklist incompleta → NÃO fechar, listar pendentes
|
||||||
|
4. Se 100% → fechar:
|
||||||
|
mcp__desk-crm-v3__reply_ticket({
|
||||||
|
ticket_id: id,
|
||||||
|
message: "<p>Olá [Nome],</p>
|
||||||
|
<p>Confirmamos que a situação foi resolvida.</p>
|
||||||
|
<p><strong>Solução:</strong> [explicação]</p>
|
||||||
|
<p><strong>Prevenção:</strong> [dica]</p>
|
||||||
|
<p>Obrigado pelo contacto. Se precisar de algo, estamos disponíveis.</p>
|
||||||
|
<p>Nota 1-10 sobre o suporte?</p>"
|
||||||
|
})
|
||||||
|
mcp__desk-crm-v3__close_ticket({ ticket_id: id })
|
||||||
|
5. Output: "Ticket #X fechado ✓ | Checklist: 7/7 | [Data fecho]"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## `/ticket-manage report` — Relatório SLA Semanal (SUP-003)
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Recolher tickets dos últimos 7 dias
|
||||||
|
2. Calcular por prioridade:
|
||||||
|
- % tickets que cumpriram SLA de resposta
|
||||||
|
- % tickets que cumpriram SLA de resolução
|
||||||
|
- Tempo médio de resposta e resolução
|
||||||
|
3. Identificar violações e categorizar causas
|
||||||
|
4. Comparar com semana anterior
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output:**
|
||||||
|
```markdown
|
||||||
|
## Relatório SLA Semanal — [DD-MM-YYYY a DD-MM-YYYY]
|
||||||
|
|
||||||
|
### Cumprimento SLA (Meta: >90%)
|
||||||
|
| Prioridade | Tickets | SLA Resposta | SLA Resolução | Violações |
|
||||||
|
|-----------|---------|-------------|--------------|-----------|
|
||||||
|
| P1 Crítico | 2 | 100% ✅ | 50% ⚠️ | 1 |
|
||||||
|
| P2 Funcional | 8 | 87.5% ⚠️ | 100% ✅ | 1 |
|
||||||
|
| P3 Dúvida | 15 | 93.3% ✅ | 86.7% ⚠️ | 2 |
|
||||||
|
| P4 Melhoria | 3 | 100% ✅ | N/A | 0 |
|
||||||
|
|
||||||
|
### Top 3 Tickets Mais Lentos
|
||||||
|
1. #X — [Assunto] — P2 — 36h — causa: dependência externa D7
|
||||||
|
2. #Y — [Assunto] — P3 — 52h — causa: complexidade técnica
|
||||||
|
3. #Z — [Assunto] — P1 — 5h30 — causa: falta de informação cliente
|
||||||
|
|
||||||
|
### Acções Correctivas
|
||||||
|
- [ ] P2 cumprimento <90% → Revisão processo atribuição automática
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referências PROCs
|
||||||
|
|
||||||
|
| PROC | Ficheiro Hub |
|
||||||
|
|------|-------------|
|
||||||
|
| SUP-001 Atendimento | `Hub/06-Operacoes/Procedimentos/D2-Suporte/PROC-D2-SUP-001-Atendimento-Cliente.md` |
|
||||||
|
| SUP-002 Ticketing | `Hub/06-Operacoes/Procedimentos/D2-Suporte/PROC-D2-SUP-002-Ticketing-Workflow.md` |
|
||||||
|
| SUP-003 SLA | `Hub/06-Operacoes/Procedimentos/D2-Suporte/PROC-D2-SUP-003-SLA-Management.md` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-Patterns
|
||||||
|
|
||||||
|
- **NUNCA** fechar sem checklist 100% completa
|
||||||
|
- **NUNCA** escalar sem informar o cliente
|
||||||
|
- **NUNCA** ignorar tickets P1 >30min
|
||||||
|
- **NUNCA** resolver sintoma sem identificar causa raiz
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integração com Outras Skills
|
||||||
|
|
||||||
|
| Skill | Quando usar |
|
||||||
|
|-------|-------------|
|
||||||
|
| `/ticket` | Operações básicas (view, reply) |
|
||||||
|
| `/ticket-triage` | Triagem automática SPAM/facturas |
|
||||||
|
| `/crm` | Contexto cliente 360° |
|
||||||
|
| `/today` | Dashboard diário com SLA alerts |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### v1.0.0 (07-04-2026)
|
||||||
|
- Versão inicial baseada em SUP-001, SUP-002, SUP-003
|
||||||
|
- Dashboard SLA com alertas automáticos
|
||||||
|
- Criação com campos obrigatórios e confirmação recepção
|
||||||
|
- Checklist fecho obrigatória 7 pontos
|
||||||
|
- Protocolo escalação com contexto completo
|
||||||
|
- Relatório semanal SLA
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Skill v1.0.0 | 07-04-2026 | Descomplicar® | Baseado em PROCs D2-SUP-001/002/003*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: ticket-triage
|
name: ticket-triage
|
||||||
description: Auto-processamento de tickets abertos no Desk CRM. Fecha SPAM, identifica facturas para /auto-expense e protege notificações de sistema.
|
description: Auto-processamento de tickets abertos no Desk CRM. Fecha SPAM, identifica facturas para /auto-expense e protege notificações de sistema.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /ticket-triage v1.0
|
# /ticket-triage v1.0
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: ticket
|
name: ticket
|
||||||
description: Gestão de tickets de suporte Desk CRM. Ver, responder, fechar e escalar tickets. Inclui templates de resposta e integração com /today.
|
description: Gestão de tickets de suporte Desk CRM. Ver, responder, fechar e escalar tickets. Inclui templates de resposta e integração com /today.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /ticket v1.0 - Gestão de Suporte
|
# /ticket v1.0 - Gestão de Suporte
|
||||||
@@ -245,4 +244,55 @@ No checkup diário, mostrar tickets:
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<p>Olá [Nome],</p>
|
<p>Olá [Nome],</p>
|
||||||
<p>Para re
|
<p>Para resolver a questão, preciso de mais informações:</p>
|
||||||
|
<ul>
|
||||||
|
<li>[Pergunta 1]</li>
|
||||||
|
<li>[Pergunta 2]</li>
|
||||||
|
</ul>
|
||||||
|
<p>Aguardo o seu feedback.</p>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Resolução
|
||||||
|
|
||||||
|
```html
|
||||||
|
<p>Olá [Nome],</p>
|
||||||
|
<p>A situação foi resolvida. [Explicação breve]</p>
|
||||||
|
<p>Se tiver mais questões, não hesite em contactar.</p>
|
||||||
|
<p>Cumprimentos,<br>Emanuel Almeida</p>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-Patterns
|
||||||
|
|
||||||
|
- **NUNCA** responder sem ler histórico completo
|
||||||
|
- **NUNCA** fechar ticket sem mensagem
|
||||||
|
- **NUNCA** ignorar tickets urgentes >1h
|
||||||
|
- **NUNCA** escalar sem informar cliente
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### v1.0.0 (2026-02-05)
|
||||||
|
- Versão inicial
|
||||||
|
- Listar, ver, responder, fechar
|
||||||
|
- Escalar para tarefa
|
||||||
|
- Templates de resposta
|
||||||
|
- Integração /today
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*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.*
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ category: design
|
|||||||
model: sonnet
|
model: sonnet
|
||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- design-engine
|
- design-engine
|
||||||
recommended_mcps:
|
recommended_mcps:
|
||||||
@@ -20,7 +22,6 @@ skills:
|
|||||||
- _core
|
- _core
|
||||||
- ui-ux-pro-max
|
- ui-ux-pro-max
|
||||||
desk_task: 1518
|
desk_task: 1518
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Design Critic - Avaliacao de Qualidade
|
# Design Critic - Avaliacao de Qualidade
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ category: design
|
|||||||
model: sonnet
|
model: sonnet
|
||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- design-engine
|
- design-engine
|
||||||
- presenton
|
- presenton
|
||||||
@@ -24,7 +26,6 @@ skills:
|
|||||||
- pptx-generator
|
- pptx-generator
|
||||||
- remotion-video
|
- remotion-video
|
||||||
desk_task: 1518
|
desk_task: 1518
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Design Generator - Execucao
|
# Design Generator - Execucao
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ category: design
|
|||||||
model: sonnet
|
model: sonnet
|
||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- design-engine
|
- design-engine
|
||||||
- presenton
|
- presenton
|
||||||
@@ -26,7 +28,6 @@ skills:
|
|||||||
- ui-ux-pro-max
|
- ui-ux-pro-max
|
||||||
- pptx-generator
|
- pptx-generator
|
||||||
desk_task: 1518
|
desk_task: 1518
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Design Lead - Orquestrador de Design
|
# Design Lead - Orquestrador de Design
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ category: design
|
|||||||
model: sonnet
|
model: sonnet
|
||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- design-engine
|
- design-engine
|
||||||
- presenton
|
- presenton
|
||||||
@@ -23,7 +25,6 @@ skills:
|
|||||||
- ui-ux-pro-max
|
- ui-ux-pro-max
|
||||||
- pptx-generator
|
- pptx-generator
|
||||||
desk_task: 1518
|
desk_task: 1518
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Design Prompt Architect - Routing e Prompts
|
# Design Prompt Architect - Routing e Prompts
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ category: design
|
|||||||
model: sonnet
|
model: sonnet
|
||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- figma
|
- figma
|
||||||
- stitch
|
- stitch
|
||||||
@@ -22,7 +24,6 @@ skills:
|
|||||||
- _core
|
- _core
|
||||||
- ui-ux-pro-max
|
- ui-ux-pro-max
|
||||||
desk_task: 1518
|
desk_task: 1518
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Design Researcher - Investigador Visual
|
# Design Researcher - Investigador Visual
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- design-systems
|
- design-systems
|
||||||
@@ -26,7 +28,6 @@ skills:
|
|||||||
- frontend-design
|
- frontend-design
|
||||||
- pptx-generator
|
- pptx-generator
|
||||||
desk_task: 1518
|
desk_task: 1518
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# UI Designer Descomplicar
|
# UI Designer Descomplicar
|
||||||
@@ -130,4 +131,94 @@ Designer de interfaces responsavel por criar designs visuais apelativos, manter
|
|||||||
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
||||||
- **design-systems** - Knowledge base W3C standards, WCAG, design system best pract
|
- **design-systems** - Knowledge base W3C standards, WCAG, design system best pract
|
||||||
- **elevenlabs** - Text-to-speech, voice cloning, audio transcription
|
- **elevenlabs** - Text-to-speech, voice cloning, audio transcription
|
||||||
- **vimeo** - Video management - upload, metadata, transcr
|
- **vimeo** - Video management - upload, metadata, transcripts, analytics
|
||||||
|
|
||||||
|
### All Available (32 total)
|
||||||
|
desk-crm-v3, moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mem0, puppeteer, tavily, replicate
|
||||||
|
|
||||||
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
|
## Your Available Skills
|
||||||
|
|
||||||
|
### Primary Skills (Your Domain)
|
||||||
|
✓ **/ui-ux-pro-max** - UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts,
|
||||||
|
- Invoke: `/ui-ux-pro-max`
|
||||||
|
|
||||||
|
✓ **/frontend-design** - Create distinctive, production-grade frontend interfaces with high design qualit
|
||||||
|
- Invoke: `/frontend-design`
|
||||||
|
|
||||||
|
✓ **/pptx-generator** - Generate and edit presentation slides as PPTX files. Also create LinkedIn carous
|
||||||
|
- Invoke: `/pptx-generator`
|
||||||
|
|
||||||
|
### Recommended for design
|
||||||
|
- **/brand-voice-generator** - Generate tone-of-voice and brand-system files for use with t
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/remotion-video** - Create and edit Remotion videos with domain-specific knowled
|
||||||
|
|
||||||
|
### 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, /seo-content-optimization, /social-media, /ui-ux-pro-max-repo, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /time, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **11 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Ad Manager
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce E-commerce
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Elementor
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Graphic Design
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Next.js
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Product Manager
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce React
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Redes Sociais
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce SaaS
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce WooCommerce
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ compliance:
|
|||||||
created: '2025-01-13'
|
created: '2025-01-13'
|
||||||
updated: '2026-02-04'
|
updated: '2026-02-04'
|
||||||
author: Descomplicar®
|
author: Descomplicar®
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
# Video Production Specialist Descomplicar
|
# Video Production Specialist Descomplicar
|
||||||
|
|
||||||
@@ -129,7 +128,7 @@ mcp__notebooklm__notebook_query notebook_id:"081ca512-8279-4850-b2b9-dff09026748
|
|||||||
- **replicate** - AI models - imagem, vídeo, áudio, LLMs
|
- **replicate** - AI models - imagem, vídeo, áudio, LLMs
|
||||||
|
|
||||||
### All Available (32 total)
|
### All Available (32 total)
|
||||||
desk-crm-v3, moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, imap, wikijs, gsc, lighthouse, mcp-time, mem0, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, magic, design-systems
|
desk-crm-v3, moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, imap, gsc, lighthouse, mcp-time, mem0, puppeteer, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, magic, design-systems
|
||||||
|
|
||||||
**Discovery:** Use ToolSearch to find specific tools.
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
@@ -139,4 +138,28 @@ desk-crm-v3, moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, google-
|
|||||||
✓ **/content-marketing-pt** - Criação de conteúdo marketing em Português Europeu. Tom de voz, copywriting, est
|
✓ **/content-marketing-pt** - Criação de conteúdo marketing em Português Europeu. Tom de voz, copywriting, est
|
||||||
- Invoke: `/content-marketing-pt`
|
- Invoke: `/content-marketing-pt`
|
||||||
|
|
||||||
✓ **/video** - Criar vídeos programáticos com Remotion e React. Gera intros, promos
|
✓ **/video** - Criar vídeos programáticos com Remotion e React. Gera intros, promos, social med
|
||||||
|
- Invoke: `/video`
|
||||||
|
|
||||||
|
✓ **/youtube** - Extrair transcrições e metadados do YouTube + Estratégia crescimento canal. Supo
|
||||||
|
- Invoke: `/youtube`
|
||||||
|
|
||||||
|
### Recommended for content
|
||||||
|
- **/social-media** - Gestão e estratégia de redes sociais - Instagram, LinkedIn,
|
||||||
|
- **/remotion-video** - Create and edit Remotion videos with domain-specific knowled
|
||||||
|
- **/seo-content-optimization** - Optimização SEO técnico e conteúdo - meta tags, structured d
|
||||||
|
- **/research** - Pesquisa profunda e análise competitiva - SWOT, Porter's Fiv
|
||||||
|
|
||||||
|
### 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, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /time, /today, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- design-systems
|
- design-systems
|
||||||
@@ -26,7 +28,6 @@ skills:
|
|||||||
- frontend-design
|
- frontend-design
|
||||||
- pptx-generator
|
- pptx-generator
|
||||||
desk_task: 1519
|
desk_task: 1519
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Web Designer Descomplicar
|
# Web Designer Descomplicar
|
||||||
@@ -127,4 +128,83 @@ Designer web responsavel por criar layouts visualmente impactantes e funcionais,
|
|||||||
- **powerpoint** - Criar apresentações PowerPoint
|
- **powerpoint** - Criar apresentações PowerPoint
|
||||||
- **mcp-echarts** - Gerar gráficos Apache ECharts
|
- **mcp-echarts** - Gerar gráficos Apache ECharts
|
||||||
- **mcp-mermaid** - Gerar diagramas Mermaid (flowcharts, sequência, etc.)
|
- **mcp-mermaid** - Gerar diagramas Mermaid (flowcharts, sequência, etc.)
|
||||||
- **pixabay** - Pesqu
|
- **pixabay** - Pesquisa imagens e vídeos stock gratuitos
|
||||||
|
- **pexels** - Pesquisa imagens stock de alta qualidade
|
||||||
|
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
||||||
|
- **design-systems** - Knowledge base W3C standards, WCAG, design system best pract
|
||||||
|
- **elevenlabs** - Text-to-speech, voice cloning, audio transcription
|
||||||
|
- **vimeo** - Video management - upload, metadata, transcripts, analytics
|
||||||
|
|
||||||
|
### All Available (32 total)
|
||||||
|
desk-crm-v3, moloni, context7, gitea, n8n, cwp, filesystem, ssh-unified, google-analytics, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mem0, puppeteer, tavily, replicate
|
||||||
|
|
||||||
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
|
## Your Available Skills
|
||||||
|
|
||||||
|
### Primary Skills (Your Domain)
|
||||||
|
✓ **/ui-ux-pro-max** - UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts,
|
||||||
|
- Invoke: `/ui-ux-pro-max`
|
||||||
|
|
||||||
|
✓ **/frontend-design** - Create distinctive, production-grade frontend interfaces with high design qualit
|
||||||
|
- Invoke: `/frontend-design`
|
||||||
|
|
||||||
|
✓ **/pptx-generator** - Generate and edit presentation slides as PPTX files. Also create LinkedIn carous
|
||||||
|
- Invoke: `/pptx-generator`
|
||||||
|
|
||||||
|
### Recommended for design
|
||||||
|
- **/brand-voice-generator** - Generate tone-of-voice and brand-system files for use with t
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/remotion-video** - Create and edit Remotion videos with domain-specific knowled
|
||||||
|
|
||||||
|
### 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, /seo-content-optimization, /social-media, /ui-ux-pro-max-repo, /crm-admin, /db-design, /elementor, /mcp-dev, /nextjs, /php-dev, /react-patterns, /woocommerce, /wp-dev, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /doc-sync, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /delegate, /interview, /time, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **7 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce E-commerce
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Elementor
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Graphic Design
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Next.js
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce React
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce WooCommerce
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,109 @@
|
|||||||
|
# DRAFT — Método Design Pro (camada de processo sobre Open Design)
|
||||||
|
|
||||||
|
**Estado:** Rascunho — origem: síntese Gemini de vídeos de páginas de alta qualidade (2026-07-22), adaptado ao stack Descomplicar.
|
||||||
|
**Aplica-se a:** websites/landing pages, propostas comerciais, decks PPTX, banners, vídeo — qualquer artefacto de design.
|
||||||
|
|
||||||
|
## 0. Quem define o enquadramento (lição do teste WhatSMS, 22-07-2026)
|
||||||
|
|
||||||
|
O **enquadramento — proposta de valor, posicionamento, o que se está a vender — pertence ao dono
|
||||||
|
do produto**. Nunca se deriva de análise do agente nem de diagnóstico de subagente.
|
||||||
|
|
||||||
|
No primeiro teste real deste método, o briefing enquadrou o WhatSMS como "responder a mensagens
|
||||||
|
fora de horas" e pediu mock-ups de conversa. Resultado: uma landing page de bot de WhatsApp, quando
|
||||||
|
o produto é um sistema de automação de contacto multicanal. O design estava competente; o
|
||||||
|
enquadramento destruía o posicionamento.
|
||||||
|
|
||||||
|
Regras que daí resultam:
|
||||||
|
|
||||||
|
- **Perguntar o posicionamento, não os acessórios.** Cor e tipografia têm defaults; a proposta de
|
||||||
|
valor não tem. Perguntar sobre a segunda, nunca presumi-la.
|
||||||
|
- **"Está robótico" é um pedido de tom.** Não é licença para reescrever posicionamento nem deitar
|
||||||
|
fora copy existente. Preservar por omissão; mudar só o que foi pedido.
|
||||||
|
- **Um diagnóstico que chama "AI slop" ao copy** pode estar a apontar estilo, não substância.
|
||||||
|
Nunca converter em mandato para substituir tudo.
|
||||||
|
- **Briefing longo escrito sozinho é sinal de alarme, não de rigor.** Quanto mais completo, mais
|
||||||
|
eficazmente impede o motor de fazer as perguntas certas ao dono do produto. O Open Design
|
||||||
|
pergunta — deixá-lo perguntar em vez de pré-responder tudo.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Contrato de Entrada (Zero Rascunhos Genéricos)
|
||||||
|
|
||||||
|
O pilar 1 (objectivo/posicionamento) **recolhe-se com o dono do produto**, nunca se deduz — ver secção 0.
|
||||||
|
|
||||||
|
Proibido gerar qualquer artefacto sem os 4 pilares explícitos ou deduzidos e confirmados:
|
||||||
|
|
||||||
|
1. **Objectivo comercial** — o que o utilizador/cliente deve sentir ou fazer no fim.
|
||||||
|
2. **Layout narrativo** — ordem exacta das secções/slides e comportamento de transição (scrollytelling em web; arco narrativo em decks/propostas).
|
||||||
|
3. **Personalidade da marca** — tom de voz, paleta intencional, espaçamento generoso (editorial feel). Fonte: design system no OD (Descomplicar ou cliente).
|
||||||
|
4. **Público-alvo** — perfil exacto que justifica a conversão.
|
||||||
|
|
||||||
|
Sem os 4 pilares → perguntar/deduzir e validar. Nunca template pré-feito como resposta.
|
||||||
|
|
||||||
|
## 2. Fluxo em 4 fases (mapeado às skills OD)
|
||||||
|
|
||||||
|
| Fase | O quê | Skills OD |
|
||||||
|
|---|---|---|
|
||||||
|
| **F1 Arquitectura** | Grelha estrutural, tipografia, hierarquia de blocos (wireframe visual) | `design-consultation`, `design-brief`, design system |
|
||||||
|
| **F2 Direcção artística** | Implementação com micro-interacções, profundidade, impacto no início. Web: Next.js/TS + Tailwind + Framer Motion | `creative-director`, `high-end-visual-design`, `frontend-design`, `gsap-*`/`emilkowalski-motion` |
|
||||||
|
| **F3 Variantes (Regra do Hero)** | Secção crítica → 3-5 abordagens estruturais distintas (split / centered minimal / inset frame) para selecção antes de avançar | runs paralelos no OD, `design-shotgun` local; **Google Stitch** (`stitch-loop`, `stitch-design-taste`) para ideação rápida de variantes UI a partir de prompt/sketch/screenshot, com export Figma |
|
||||||
|
| **F4 Auditoria adversarial** | Validação crítica antes de entrega: consistência visual, tipos TS, acessibilidade, bundle, fluidez de animação, anti-AI-slop | `design-review`, `impeccable-design-polish`, `pptx-html-fidelity-audit` (decks) |
|
||||||
|
|
||||||
|
## 3. Regra de Ouro da Modificação
|
||||||
|
|
||||||
|
- **Macro** (estrutura, layout, fluxo de páginas/secções) → resolvido e validado primeiro, ao nível global.
|
||||||
|
- **Micro** (espaçamentos, CTAs, detalhes) → só depois do macro aprovado. Nunca misturar os dois níveis na mesma iteração.
|
||||||
|
|
||||||
|
## 4. Pipeline Template-First (Envato & afins)
|
||||||
|
|
||||||
|
Um template profissional pode substituir F1+F2 — entra como ponto de partida, nunca como entrega directa.
|
||||||
|
|
||||||
|
### 4.1 Duas categorias de fonte
|
||||||
|
|
||||||
|
**A. Templates com código/ficheiros (adaptáveis):**
|
||||||
|
- Envato/ThemeForest (HTML, Next.js, Elementor kits, PPTX, vídeo) — licença cobre projectos de cliente
|
||||||
|
- UI8, Craftwork (UI kits), Relume (biblioteca Figma de secções), Framer/Webflow templates
|
||||||
|
|
||||||
|
**B. Galerias de inspiração (extracção de DNA, nunca cópia):**
|
||||||
|
- Dribbble, Pageflows, Recent.design, Landingfolio, Screensdesign
|
||||||
|
- Mobbin (fluxos de apps reais), Awwwards, Godly, Land-book, Lapa Ninja, SaaSFrame
|
||||||
|
|
||||||
|
### 4.2 Fluxo de adaptação (categoria A)
|
||||||
|
|
||||||
|
1. **Seleccionar** — escolher template alinhado com o layout narrativo do Contrato de Entrada (não o contrário).
|
||||||
|
2. **Extrair** — estrutura, grelha, tokens do template (`brand-extract`, `image-to-code`, `web-clone`, análise directa dos ficheiros).
|
||||||
|
3. **Retheme** — aplicar o design system do cliente/Descomplicar sobre a estrutura (`theme-factory`, `redesign-existing-projects`). Zero cores/fontes do template sobram.
|
||||||
|
4. **Recontentar** — copy e conteúdo reais segundo os 4 pilares; remover secções que não servem o objectivo comercial (cortar > acrescentar).
|
||||||
|
5. **F4 Auditoria** — igual ao fluxo normal; atenção extra a resíduos do template (placeholders, lorem ipsum, links demo, créditos).
|
||||||
|
|
||||||
|
### 4.3 Fluxo de referência (categoria B)
|
||||||
|
|
||||||
|
1. Capturar screenshots/URLs das referências escolhidas.
|
||||||
|
2. Extrair DNA: paleta, tipografia, grelha, ritmo de secções, padrões de interacção (`design-researcher` / visão OD).
|
||||||
|
3. DNA alimenta F1/F2 como direcção de arte — o artefacto é gerado de raiz com o nosso design system.
|
||||||
|
|
||||||
|
### 4.4 Biblioteca local de templates
|
||||||
|
|
||||||
|
- Templates descarregados (Envato) arquivados em pasta própria com metadados (fonte, licença, tags de uso) — candidata: `Hub/04-Recursos/Design/templates/` — para reutilização entre projectos.
|
||||||
|
- Cada adaptação bem-sucedida regista o par template→resultado para acelerar selecções futuras.
|
||||||
|
|
||||||
|
## 5. Directrizes operacionais do agente no Open Design
|
||||||
|
|
||||||
|
Regras de execução para qualquer agente (Claude Code, Gemini CLI) a operar como motor no OD. As que repetem as secções 1–3 não se duplicam — referem-se.
|
||||||
|
|
||||||
|
1. **Contrato de Entrada** (secção 1) — os 4 pilares antes de qualquer geração.
|
||||||
|
2. **`DESIGN.md` é o contrato da marca** — todas as decisões visuais (tipografia, paleta, espaçamento, componentes) vêm do `DESIGN.md` activo do projecto OD, nunca de adivinhação. A skill define *o quê*; o `DESIGN.md` define *como fica*. Manter o `DESIGN.md` sincronizado com o design system (Descomplicar ou cliente).
|
||||||
|
3. **Declarar a skill/formato certo** — indicar explicitamente o tipo de saída (`web-prototype`, `dashboard`, `mobile-app`, `deck`) para activar a directriz OD correcta.
|
||||||
|
4. **Macro → micro** (secção 3, Regra de Ouro).
|
||||||
|
5. **Variantes antes de fechar** (secção 2, F3) — 3 a 5 variações radicalmente diferentes da secção crítica, resto igual; escolher direcção, só depois refinar.
|
||||||
|
6. **Referências visuais concretas** — screenshots via menção `@` no chat OD ou ficheiros no projecto; nunca só descrição textual quando existe referência (liga à secção 4.3).
|
||||||
|
7. **Ecossistema no mesmo projecto OD** — landing + dashboard + app do mesmo cliente vivem no mesmo projecto, para herdar `DESIGN.md`, paleta e tipografia sem deriva (handoff contínuo).
|
||||||
|
8. **Componentes externos adaptados, não recriados** — gráficos animados, tabelas complexas: importar de bibliotecas (ex: 21st.dev, shadcn/ui) e adaptar ao design system, em vez de gerar do zero.
|
||||||
|
9. **Acesso directo via MCP** — usar `mcp__open-design__*` (get_artifact, write_file, search_files, start_run) para trabalhar sobre o código vivo do projecto; nunca depender de exports estáticos/zips. Passar `project` explícito (contexto activo expira ~5 min).
|
||||||
|
10. **Código final limpo e exportável** — HTML/CSS/JS determinístico, responsivo em iframe isolado, pronto para a equipa importar para React/Next.js/Vue sem limpeza. Nada de placeholders, estilos inline órfãos ou dependências fantasma. (Web em produção segue depois PROC-DEV-STANDARD no dev container.)
|
||||||
|
|
||||||
|
## 6. Integração futura (após aprovação do SPEC v3.0.0)
|
||||||
|
|
||||||
|
- Este método torna-se o corpo da skill `design` (router) — gate de contrato + orquestração das 4 fases.
|
||||||
|
- Para websites, avaliar skill dedicada `create-pro-website` (Next.js/TS/Tailwind/Framer Motion) que empacota o output OD no nosso stack (dev container, regra 48).
|
||||||
|
- Quality gate: nenhuma entrega sem F4 com score ≥7/10 (design-critic) e zero findings bloqueantes do design-review.
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
# SPEC — Migração do plugin design-media para Open Design (OD)
|
||||||
|
|
||||||
|
**Versão alvo:** design-media v3.0.0
|
||||||
|
**Data:** 2026-07-22
|
||||||
|
**Estado:** Rascunho — aguarda aprovação
|
||||||
|
**Decisor:** Emanuel
|
||||||
|
|
||||||
|
## 1. Objectivo
|
||||||
|
|
||||||
|
O Open Design (MCP `open-design`, daemon local) passa a ser o **motor único** de design do plugin design-media. Os motores actuais (design-engine Fibo/Gemini, Presenton, Stitch, Penpot, python-pptx directo, Remotion local) deixam de ser invocados directamente — tudo passa por projectos OD, skills OD e design systems OD.
|
||||||
|
|
||||||
|
## 2. Porquê
|
||||||
|
|
||||||
|
- O OD já tem nativamente o que o plugin reimplementa: `brand-guidelines`, `brandkit`, `brand-extract`, `theme-factory`, `pptx-generator`, `pptx`, `slides`, `remotion`, `ui-ux-pro-max`, `imagegen`, `venice-*`/`fal-*` (imagem/vídeo/áudio).
|
||||||
|
- 143 design systems instalados como plugins (`design-system-*`) + suporte a design systems custom por projecto (o projecto "Banners WiP Descomplicar" já usa `designSystemId: descomplicar`).
|
||||||
|
- Permite **adaptar entre modelos disponíveis no OD** e **criar design systems por cliente** — requisito directo do Emanuel.
|
||||||
|
|
||||||
|
## 3. Âmbito
|
||||||
|
|
||||||
|
### 3.1 Design systems geridos no OD (novo pilar)
|
||||||
|
|
||||||
|
- Formalizar o design system **`descomplicar`** no OD a partir dos tokens actuais (`skills/brand-guidelines/references/descomplicar-theme.md` YAML + `color-palettes.md`).
|
||||||
|
- Fluxo **novo cliente**: skill OD `brand-extract` (site do cliente) → `theme-factory`/`brand-guidelines` → design system custom no OD, nome = slug do cliente.
|
||||||
|
- Os brand packs em `Hub/04-Recursos/Design/brands/*.json` são migrados/sincronizados para design systems OD (o JSON local mantém-se como fonte exportável, mas o OD é a fonte operacional).
|
||||||
|
- Os 4 design systems sectoriais (b2b, ecommerce, saude, solar) passam a design systems OD; as skills locais `design-{b2b,ecommerce,saude,solar}` são reduzidas a referência/routing.
|
||||||
|
|
||||||
|
### 3.2 Skills adaptadas (wrappers finos sobre OD)
|
||||||
|
|
||||||
|
| Skill local | Passa a |
|
||||||
|
|---|---|
|
||||||
|
| `design` | Router: cria/reutiliza projecto OD, aplica design system, escolhe skill OD (`imagegen`, `slides`, `poster-hero`, etc.), `start_run` → `get_run` → entrega |
|
||||||
|
| `brand-guidelines` | Gestão de design systems no OD (criar/actualizar/listar Descomplicar + clientes); mantém a norma escrita (tom, ®) |
|
||||||
|
| `pptx-generator` | Wrapper das skills OD `pptx-generator`/`pptx`/`slides` com design system aplicado; python-pptx mantido só para leitura/QA de ficheiros existentes |
|
||||||
|
| `remotion-video` | Wrapper da skill OD `remotion` (+ `venice-video`/`fal-*` quando fizer sentido) |
|
||||||
|
| `clone-style` | Substituída pela skill OD `brand-extract` (wrapper) |
|
||||||
|
| `cinematic-site` | Usa skills OD de web (`web-clone`, `frontend-design`) via projecto OD |
|
||||||
|
| `ui-ux-pro-max`, `design-b2b/ecommerce/saude/solar` | Referência local mantida; apontam para design systems OD |
|
||||||
|
|
||||||
|
### 3.3 Agents actualizados
|
||||||
|
|
||||||
|
- `design-lead`, `design-prompt-architect`, `design-generator`: MCPs alvo passam a `mcp__open-design__*`; remoção de referências a Penpot/Presenton/Stitch/design-engine como motores.
|
||||||
|
- `design-critic`, `design-researcher`, `ui-designer`, `web-designer`, `video-production-specialist`: actualizar referências de ferramentas; lógica mantém-se.
|
||||||
|
|
||||||
|
### 3.4 Fora de âmbito
|
||||||
|
|
||||||
|
- Alterar o OD em si (daemon, skills OD).
|
||||||
|
- Migrar histórico de projectos antigos Presenton/Stitch.
|
||||||
|
- Desligar os MCPs antigos da máquina (fica para limpeza posterior, decisão separada).
|
||||||
|
|
||||||
|
## 4. Critérios de aceitação
|
||||||
|
|
||||||
|
1. `/design` gera um artefacto real num projecto OD com design system `descomplicar` aplicado (prova: run `succeeded` + artefacto).
|
||||||
|
2. Design system `descomplicar` existe no OD com os tokens oficiais (cores/fontes verificadas contra `descomplicar-theme.md`).
|
||||||
|
3. Fluxo de cliente demonstrado: criar design system custom para 1 cliente de teste via `brand-extract`.
|
||||||
|
4. `pptx-generator` produz um deck via OD com brand Descomplicar.
|
||||||
|
5. `remotion-video` produz/inicia um vídeo via skill OD `remotion`.
|
||||||
|
6. Zero referências activas a Penpot/Presenton/Stitch/design-engine como motores nas skills/agents adaptados.
|
||||||
|
7. CHANGELOG.md + versão 3.0.0 + commit atómico.
|
||||||
|
|
||||||
|
## 5. Riscos
|
||||||
|
|
||||||
|
- **Paridade de export**: garantir que o OD exporta PPTX/PNG/PDF nos formatos que os fluxos actuais (propostas, LinkedIn) exigem — validar cedo (crit. 4).
|
||||||
|
- **Contexto activo OD expira ~5 min**: wrappers devem passar `project` explícito, nunca depender do contexto activo.
|
||||||
|
- **Outputs grandes do MCP** (`list_plugins` ~270KB): wrappers devem usar filtros/ids directos, nunca listagens completas no contexto (regra 62).
|
||||||
|
|
||||||
|
## 6. Faseamento
|
||||||
|
|
||||||
|
- **F1** — Design system `descomplicar` no OD + skill `brand-guidelines` adaptada.
|
||||||
|
- **F2** — `design` (router) + agents lead/architect/generator.
|
||||||
|
- **F3** — `pptx-generator` + `remotion-video` + `clone-style`→`brand-extract`.
|
||||||
|
- **F4** — Sectoriais + cinematic-site + fluxo cliente de teste + QA final + CHANGELOG/commit.
|
||||||
@@ -1,67 +1,113 @@
|
|||||||
---
|
---
|
||||||
name: brand-guidelines
|
name: brand-guidelines
|
||||||
description: Guia de identidade visual Descomplicar® — cores, tipografia, logotipo, tom de comunicacao e aplicacao por contexto (slides, docs, web, emails). Usar quando "brand descomplicar", "marca descomplicar", "cores descomplicar", "identidade visual", "branding", "paleta de cores", "guia de marca", ou qualquer material que necessite conformidade visual com a marca.
|
description: Gestão de identidade visual multi-marca (Descomplicar® e clientes) — design systems no Open Design, cores, tipografia, logótipo, tom e aplicação por contexto. O DESIGN.md de cada marca no Open Design é a fonte de verdade. Usar quando "brand", "marca", "identidade visual", "branding", "paleta de cores", "guia de marca", "design system cliente", "criar marca", ou qualquer material que necessite conformidade visual.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /brand-guidelines - Identidade Visual Descomplicar®
|
# /brand-guidelines — Gestão de Identidade Visual Multi-Marca
|
||||||
|
|
||||||
Referencia normativa da marca Descomplicar®. Aplicar em todos os materiais de comunicacao,
|
Esta skill serve **qualquer marca** — a Descomplicar® e cada cliente. A Descomplicar é apenas
|
||||||
design e desenvolvimento.
|
a marca por omissão quando nenhuma outra é indicada.
|
||||||
|
|
||||||
|
## Fonte de verdade: o Open Design
|
||||||
|
|
||||||
|
Cada marca tem o seu design system no Open Design, um por pasta:
|
||||||
|
|
||||||
|
```
|
||||||
|
~/workspace/open-design/design-systems/<marca>/DESIGN.md
|
||||||
|
```
|
||||||
|
|
||||||
|
- `descomplicar/` — a nossa marca (espelhada em detalhe abaixo)
|
||||||
|
- `<slug-do-cliente>/` — uma pasta por cliente
|
||||||
|
|
||||||
|
O `DESIGN.md` da marca activa é **normativo**.
|
||||||
|
|
||||||
|
**Regras de precedência:**
|
||||||
|
- Em caso de divergência entre qualquer documento e o `DESIGN.md` da marca, **o `DESIGN.md` ganha sempre**.
|
||||||
|
- Nunca inventar cores, fontes ou tokens de nenhuma marca. Ler o `DESIGN.md` antes de produzir.
|
||||||
|
- Alterações à identidade fazem-se no `DESIGN.md` e só depois se propagam.
|
||||||
|
|
||||||
|
> Versões anteriores desta skill documentavam uma paleta azul/laranja (`#1a365d`, `#dd6b20`) com Open Sans
|
||||||
|
> para a Descomplicar. Estava **errada** — não corresponde ao site nem ao design system. Corrigida em 22-07-2026.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Trabalhar com a marca de um cliente
|
||||||
|
|
||||||
|
**1. Verificar se já existe** — procurar a pasta do cliente em `design-systems/`. Se existir, ler o
|
||||||
|
`DESIGN.md` e usá-lo. Nunca criar um segundo design system para a mesma marca.
|
||||||
|
|
||||||
|
**2. Criar quando não existe** — extrair a identidade a partir de material real do cliente
|
||||||
|
(site, manual de marca, ficheiros fornecidos) com as skills do Open Design `brand-extract`
|
||||||
|
e `theme-factory`. O resultado é revisto com o cliente antes de se tornar normativo.
|
||||||
|
Nunca inventar a identidade de um cliente a partir do nada.
|
||||||
|
|
||||||
|
**3. Aplicar num projecto** — indicar a marca ao criar o projecto no Open Design
|
||||||
|
(`create_project` com `designSystem: "<slug>"`) para que todos os artefactos herdem
|
||||||
|
cor, tipografia e componentes sem deriva.
|
||||||
|
|
||||||
|
**4. Manter separado** — um projecto do Open Design serve uma marca só. Ecossistemas do
|
||||||
|
mesmo cliente (landing, dashboard, app) vivem no mesmo projecto para herdarem o mesmo
|
||||||
|
`DESIGN.md`; marcas diferentes nunca partilham projecto.
|
||||||
|
|
||||||
|
**Estrutura mínima de um `DESIGN.md`** (o da Descomplicar serve de modelo):
|
||||||
|
tema e atmosfera, cor, tipografia, espaçamento e grelha, layout e composição,
|
||||||
|
componentes, movimento, voz e tom, anti-padrões.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Marca por omissão: Descomplicar®
|
||||||
|
|
||||||
|
O resto deste documento espelha o `DESIGN.md` da Descomplicar, para leitura rápida fora do
|
||||||
|
Open Design. Para clientes, ler sempre o `DESIGN.md` respectivo — os valores abaixo **não se
|
||||||
|
aplicam** a marcas de clientes.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Identidade da Marca
|
## Identidade da Marca
|
||||||
|
|
||||||
**Nome oficial:** Descomplicar®
|
**Nome oficial:** Descomplicar®
|
||||||
**Slogan:** Crescimento Digital
|
|
||||||
**Website:** descomplicar.pt
|
**Website:** descomplicar.pt
|
||||||
**Tom:** Profissional mas acessivel, tecnologico sem ser frio
|
**Categoria:** agência de aceleração digital portuguesa — artigos, podcast semanal e automações de IA
|
||||||
**Valores:** Simplicidade, transparencia, resultados mensuraveis
|
**Atmosfera:** editorial profissional com acentos dourados; confiança técnica sem arrogância, clareza imediata sem frieza corporativa
|
||||||
|
**Acabamento:** plano e limpo, sem gradientes decorativos — a hierarquia faz o trabalho visual
|
||||||
|
|
||||||
> A marca registada (®) e obrigatoria na primeira ocorrencia em qualquer documento ou comunicacao.
|
> A marca registada (®) é obrigatória na primeira ocorrência em qualquer documento ou comunicação.
|
||||||
> Nas ocorrencias seguintes, pode usar-se apenas "Descomplicar".
|
> Nas ocorrências seguintes, pode usar-se apenas "Descomplicar".
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Paleta de Cores Principal
|
## Paleta de Cores
|
||||||
|
|
||||||
| Nome | Hex | RGB | Uso |
|
| Token | Hex | Uso |
|
||||||
|------|-----|-----|-----|
|
|-------|-----|-----|
|
||||||
| Azul Escuro | `#1a365d` | 26, 54, 93 | Texto principal, fundos escuros, cabecalhos |
|
| Primary (Dourado) | `#cc8d00` | CTAs, faixas de destaque, ícones, bordas activas, badges |
|
||||||
| Azul Medio | `#2b6cb0` | 43, 108, 176 | Links, acentos, botoes secundarios |
|
| Primary Light | `#f2d9a2` | Fundos secundários, hover suave, tags — **nunca para texto** |
|
||||||
| Laranja | `#dd6b20` | 221, 107, 32 | CTA, destaques, elementos de accao |
|
| Surface | `#ffffff` | Fundo de página, cards, modais |
|
||||||
| Branco | `#ffffff` | 255, 255, 255 | Fundos claros, texto sobre escuro |
|
| Text | `#000000` | Headlines, corpo principal, labels importantes |
|
||||||
| Cinza Claro | `#f7fafc` | 247, 250, 252 | Fundos secundarios, secoes alternadas |
|
| Text Muted | `#6e6e6e` | Subtítulos, metadados, placeholders |
|
||||||
| Cinza Texto | `#4a5568` | 74, 85, 104 | Texto de corpo, descricoes |
|
| Border | `#e5e5e5` | Divisórias, bordas de card, separadores |
|
||||||
|
| Surface Alt | `#f8f8f8` | Secções alternadas, blocos de código |
|
||||||
|
| Danger | `#dc2626` | Erros, alertas críticos |
|
||||||
|
| Success | `#16a34a` | Confirmações, estados de sucesso |
|
||||||
|
|
||||||
Paleta completa com variacoes de contexto: `references/color-palettes.md`
|
**Regras de uso:**
|
||||||
|
- O dourado (`#cc8d00`) é o **único acento cromático** — usar com parcimónia e intenção.
|
||||||
---
|
- Nunca mais de 3 cores simultâneas no mesmo visual.
|
||||||
|
- Fundos grandes sempre em Surface (`#ffffff`) ou Surface Alt (`#f8f8f8`).
|
||||||
## CSS Variables (Web)
|
- CTA principal: fundo dourado com texto preto.
|
||||||
|
- A secção de maior destaque usa fundo preto, texto branco e acento dourado.
|
||||||
|
|
||||||
```css
|
```css
|
||||||
:root {
|
:root {
|
||||||
/* Cores principais */
|
--color-primary: #cc8d00;
|
||||||
--color-primary: #1a365d;
|
--color-primary-light: #f2d9a2;
|
||||||
--color-secondary: #2b6cb0;
|
--color-surface: #ffffff;
|
||||||
--color-accent: #dd6b20;
|
--color-surface-alt: #f8f8f8;
|
||||||
|
--color-text: #000000;
|
||||||
/* Neutros */
|
--color-text-muted: #6e6e6e;
|
||||||
--color-white: #ffffff;
|
--color-border: #e5e5e5;
|
||||||
--color-bg-light: #f7fafc;
|
--color-danger: #dc2626;
|
||||||
--color-text-body: #4a5568;
|
--color-success: #16a34a;
|
||||||
--color-text-heading: #1a365d;
|
|
||||||
|
|
||||||
/* Estados */
|
|
||||||
--color-primary-hover: #2a4a7f;
|
|
||||||
--color-secondary-hover: #2c5282;
|
|
||||||
--color-accent-hover: #c05621;
|
|
||||||
|
|
||||||
/* Bordas e divisores */
|
|
||||||
--color-border: #e2e8f0;
|
|
||||||
--color-border-light: #edf2f7;
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -69,92 +115,192 @@ Paleta completa com variacoes de contexto: `references/color-palettes.md`
|
|||||||
|
|
||||||
## Tipografia
|
## Tipografia
|
||||||
|
|
||||||
### Hierarquia
|
| Papel | Família | Pesos |
|
||||||
|
|-------|---------|-------|
|
||||||
|
| Display | Montserrat, Poppins, system-ui, sans-serif | 700, 800 |
|
||||||
|
| Corpo | Inter, Open Sans, system-ui, sans-serif | 400, 500, 600 |
|
||||||
|
| Mono | JetBrains Mono, IBM Plex Mono, monospace | 400 |
|
||||||
|
|
||||||
| Elemento | Familia | Peso | Tamanho base |
|
### Escala
|
||||||
|----------|---------|------|--------------|
|
|
||||||
| H1 / Titulo principal | Montserrat | Extra Bold (800) | 48px / 3rem |
|
|
||||||
| H2 / Titulo secao | Montserrat | Bold (700) | 36px / 2.25rem |
|
|
||||||
| H3 / Subtitulo | Montserrat | Semi Bold (600) | 24px / 1.5rem |
|
|
||||||
| H4 / Label | Montserrat | Semi Bold (600) | 18px / 1.125rem |
|
|
||||||
| Corpo / Paragrafo | Open Sans | Regular (400) | 16px / 1rem |
|
|
||||||
| Destaque / Lead | Open Sans | Semi Bold (600) | 18px / 1.125rem |
|
|
||||||
| Legenda / Caption | Open Sans | Regular (400) | 14px / 0.875rem |
|
|
||||||
| Codigo | JetBrains Mono | Regular (400) | 14px / 0.875rem |
|
|
||||||
|
|
||||||
### CSS Tipografia
|
| Token | Tamanho | Peso | Line-height | Uso |
|
||||||
|
|-------|---------|------|-------------|-----|
|
||||||
|
| `text-5xl` | 48px | 800 | 1.1 | Hero headline |
|
||||||
|
| `text-4xl` | 36px | 700 | 1.15 | Título de página (H1) |
|
||||||
|
| `text-3xl` | 30px | 700 | 1.2 | Título de secção (H2) |
|
||||||
|
| `text-2xl` | 24px | 700 | 1.3 | Subsecção (H3) |
|
||||||
|
| `text-xl` | 20px | 600 | 1.4 | Título de card, H4 |
|
||||||
|
| `text-lg` | 18px | 500 | 1.5 | Parágrafo de entrada |
|
||||||
|
| `text-base` | 16px | 400 | 1.6 | Corpo |
|
||||||
|
| `text-sm` | 14px | 400 | 1.5 | Legendas, labels, UI |
|
||||||
|
| `text-xs` | 12px | 500 | 1.4 | Tags, badges, micro-copy |
|
||||||
|
|
||||||
|
**Regras:**
|
||||||
|
- Montserrat exclusivamente para títulos — nunca em parágrafos longos.
|
||||||
|
- Inter para tudo o que é lido em detalhe.
|
||||||
|
- `letter-spacing: 0.02em` em labels e badges em maiúsculas.
|
||||||
|
- Sem itálico decorativo — usar peso e tamanho para hierarquia.
|
||||||
|
|
||||||
```css
|
```css
|
||||||
:root {
|
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@700;800&family=Inter:wght@400;500;600&family=JetBrains+Mono&display=swap');
|
||||||
--font-heading: 'Montserrat', 'Arial Black', sans-serif;
|
|
||||||
--font-body: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
|
|
||||||
--font-code: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;
|
|
||||||
|
|
||||||
--line-height-heading: 1.2;
|
|
||||||
--line-height-body: 1.6;
|
|
||||||
--letter-spacing-heading: -0.025em;
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Fallbacks de Sistema
|
---
|
||||||
|
|
||||||
- **Montserrat** indisponivel: `'Arial Black', 'Impact', sans-serif`
|
## Espaçamento, Grelha e Raios
|
||||||
- **Open Sans** indisponivel: `'Helvetica Neue', Arial, sans-serif`
|
|
||||||
- **JetBrains Mono** indisponivel: `'Fira Code', 'Courier New', monospace`
|
Escala base de 4px: `space-1` 4px, `space-2` 8px, `space-3` 12px, `space-4` 16px, `space-6` 24px, `space-8` 32px, `space-12` 48px, `space-16` 64px, `space-24` 96px.
|
||||||
|
|
||||||
|
**Grelha:** 12 colunas, gutter 24px, conteúdo centrado com max-width 1280px (960px em artigos, 760px em texto corrido com line-height 1.7).
|
||||||
|
**Breakpoints:** mobile ≤768px, tablet 769–1024px, desktop >1024px.
|
||||||
|
**Padding lateral:** 16px mobile, 32px tablet, 48px desktop.
|
||||||
|
**Raios:** `sm` 4px (inputs, badges), `md` 8px (cards, botões), `lg` 12px (modais), `full` 9999px (pills, avatares).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Componentes
|
||||||
|
|
||||||
|
**Botão** — Primary: fundo `#cc8d00`, texto `#000000`, Montserrat SemiBold, raio 8px. Secondary: transparente, borda 2px dourada, texto dourado. Ghost: transparente, texto preto, sublinhado no hover. Alturas: sm 32px, md 40px, lg 48px.
|
||||||
|
|
||||||
|
**Badge** — Default: fundo `#f8f8f8`, texto `#6e6e6e`, maiúsculas, 12px, tracking alargado. Primary: fundo `#f2d9a2`, texto `#7a5500`.
|
||||||
|
|
||||||
|
**Card** — Fundo branco, borda 1px `#e5e5e5`, raio 8px, padding 24px, imagem 16:9 no topo. Sombra no hover: `0 4px 16px rgba(0,0,0,0.1)`.
|
||||||
|
|
||||||
|
**Input** — Borda 1px `#e5e5e5`, raio 8px, padding 12px 16px. Focus: borda 2px dourada, sem outline. Erro: borda 2px `#dc2626` com mensagem abaixo. Label em Inter SemiBold 14px maiúsculas.
|
||||||
|
|
||||||
|
**Navbar** — Fundo preto, logótipo à esquerda, links brancos, CTA dourado à direita, sticky com `backdrop-filter: blur(8px)`.
|
||||||
|
|
||||||
|
**Rodapé** — Fundo preto, texto branco/cinza, links com hover dourado, 3 colunas (marca, navegação, contacto) e copyright em `text-xs`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Movimento
|
||||||
|
|
||||||
|
O movimento **confirma acções, nunca decora**.
|
||||||
|
|
||||||
|
- 150ms em micro-interacções (hover, focus); 250ms em transições de estado.
|
||||||
|
- `ease-out` nas entradas, `ease-in-out` nas transições bidireccionais.
|
||||||
|
- Cards no hover: `translateY(-2px)` mais sombra, 200ms.
|
||||||
|
- Transições de página: fade simples 200ms.
|
||||||
|
- Estados de carregamento: skeleton em `#f8f8f8` com shimmer subtil.
|
||||||
|
- Sem parallax, sem animações de entrada elaboradas, sem auto-play.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Logótipo
|
## Logótipo
|
||||||
|
|
||||||
### Regras de Uso
|
| Regra | Descrição |
|
||||||
|
|
||||||
| Regra | Descricao |
|
|
||||||
|-------|-----------|
|
|-------|-----------|
|
||||||
| Espaco minimo | Margem de pelo menos 2x a altura da letra "D" em todos os lados |
|
| Espaço mínimo | Margem de pelo menos 2x a altura da letra "D" em todos os lados |
|
||||||
| Tamanho minimo | 120px de largura em digital; 30mm em impressao |
|
| Tamanho mínimo | 120px de largura em digital; 30mm em impressão |
|
||||||
| Fundo permitido | Branco `#ffffff`, Azul Escuro `#1a365d`, Cinza Claro `#f7fafc` |
|
| Fundos permitidos | Branco `#ffffff`, preto `#000000`, cinza claro `#f8f8f8` |
|
||||||
| Fundo proibido | Qualquer fundo com baixo contraste, fotografias sem overlay |
|
| Fundos proibidos | Baixo contraste, fotografias sem overlay |
|
||||||
| Distorcao | Nunca esticar, rodar ou alterar proporcoes |
|
| Proibido | Esticar, rodar, alterar proporções, alterar cores, sobrepor texto |
|
||||||
| Cores proibidas | Nunca alterar as cores do logótipo original |
|
|
||||||
| Texto junto | Nunca sobrepor texto ao logótipo |
|
|
||||||
|
|
||||||
### Variantes Disponiveis
|
**Variantes:** principal (horizontal), compacta, monocromática escura, monocromática clara, ícone isolado (favicon, avatar).
|
||||||
|
|
||||||
| Variante | Quando usar |
|
**Ficheiros:** `Hub/04-Recursos/Design/brands/descomplicar/`
|
||||||
|----------|-------------|
|
|
||||||
| Principal (horizontal) | Uso geral, cabecalhos, documentos |
|
|
||||||
| Compacta (icone + nome vertical) | Espacos reduzidos, avatares |
|
|
||||||
| Monocromatica escura | Documentos a preto e branco, impressao simples |
|
|
||||||
| Monocromatica clara | Sobre fundos escuros, rodapes |
|
|
||||||
| Icone isolado | Favicon, app icon, redes sociais (foto de perfil) |
|
|
||||||
|
|
||||||
### Ficheiros Logótipo
|
|
||||||
|
|
||||||
```
|
|
||||||
Hub/04-Recursos/Design/brands/descomplicar/
|
|
||||||
logo-principal.svg
|
|
||||||
logo-compacto.svg
|
|
||||||
logo-mono-escuro.svg
|
|
||||||
logo-mono-claro.svg
|
|
||||||
favicon.png
|
|
||||||
favicon.svg
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Aplicacao por Contexto
|
## Aplicação por Contexto
|
||||||
|
|
||||||
### Apresentacoes e Slides
|
**Apresentações e slides** — Capa e secções de destaque com fundo preto, título Montserrat ExtraBold branco, acento dourado. Slides de conteúdo com fundo branco ou `#f8f8f8`, corpo em Inter `#000000`, destaques e números em dourado.
|
||||||
|
|
||||||
```
|
**Documentos e propostas** — Cabeçalho preto com logótipo claro; corpo branco com texto preto; títulos de secção em Montserrat; callouts com fundo `#f8f8f8` e borda esquerda dourada; rodapé `#f8f8f8` com borda superior `#e5e5e5`.
|
||||||
Fundo slides: #1a365d (escuro) ou #ffffff (claro)
|
|
||||||
Titulo slide: Montserrat Extra Bold, #ffffff (sobre escuro) / #1a365d (sobre claro)
|
**Web e landing pages** — Hero claro ou escuro conforme a variante escolhida; CTA primário dourado com texto preto; secções alternadas em `#f8f8f8`; cards brancos com borda `#e5e5e5`.
|
||||||
Corpo texto: Open Sans Regular, #ffffff ou #4a5568
|
|
||||||
Destaques/CTA: #dd6b20
|
**Emails e newsletter** — Pré-header preto, corpo branco com texto preto, cabeçalhos Montserrat, botão CTA dourado com texto preto e raio 8px, rodapé `#f8f8f8`.
|
||||||
Divisores: #2b6cb0
|
|
||||||
Slide titulo (capa): fundo #1a365d, logótipo variante clara
|
**Redes sociais** — Fundo preto ou branco, elemento de marca em dourado, texto sem emojis.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tom de Comunicação
|
||||||
|
|
||||||
|
**Tom:** profissional mas acessível, directo, orientado à acção, confiante sem arrogância.
|
||||||
|
|
||||||
|
**Princípios de copy:**
|
||||||
|
- PT-PT estrito — "utilizador" não "usuário", "transferir" não "baixar", "ecrã" não "tela", "equipa" não "time".
|
||||||
|
- Frases curtas, verbo no início nos CTAs: "Saber mais", "Ver guia", "Falar connosco".
|
||||||
|
- Títulos assertivos, sem interrogações desnecessárias.
|
||||||
|
- Dados concretos: "400+ artigos", não "muitos artigos".
|
||||||
|
- Sem emojis e sem exclamações excessivas em qualquer contexto de marca.
|
||||||
|
|
||||||
|
**Headlines** — Directas e específicas: "SEO para PMEs que funciona" em vez de "Descubra como o SEO pode transformar o seu negócio".
|
||||||
|
|
||||||
|
**CTAs correctos:** "Ver todos os guias", "Pedir auditoria gratuita", "Subscrever newsletter".
|
||||||
|
**CTAs incorrectos:** "Clique aqui!", "Saiba Mais!!!", qualquer CTA com emoji.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Iconografia e Imagens
|
||||||
|
|
||||||
|
**Ícones:** lineares, peso 1.5–2px, cantos ligeiramente arredondados. Lucide, Heroicons ou Phosphor. Tamanhos 16/20/24/32px. Cor herdada do contexto ou dourada.
|
||||||
|
|
||||||
|
**Fotografia:** profissional e luminosa, pessoas reais em contexto. Overlay preto (20–40%) quando houver texto por cima. **Proibidas** stock photos genéricas — pessoas a sorrir para portáteis, apertos de mão corporativos.
|
||||||
|
|
||||||
|
**Ilustrações e gráficos:** flat, linhas limpas, paleta restrita à marca; destaques a dourado.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Acessibilidade
|
||||||
|
|
||||||
|
| Par de cores | Rácio | Nível |
|
||||||
|
|--------------|-------|-------|
|
||||||
|
| Preto sobre branco | 21:1 | AAA |
|
||||||
|
| Preto sobre dourado `#cc8d00` | ~7.4:1 | AAA |
|
||||||
|
| Dourado `#cc8d00` sobre preto | ~7.4:1 | AAA |
|
||||||
|
| Text Muted `#6e6e6e` sobre branco | ~5.1:1 | AA |
|
||||||
|
| **Branco sobre dourado** | **~2.9:1** | **falha — proibido** |
|
||||||
|
|
||||||
|
Texto de corpo requer no mínimo AA (4.5:1). Todos os botões precisam de estados hover, focus e disabled explícitos.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-padrões (proibido)
|
||||||
|
|
||||||
|
- Gradientes multicolor ou agressivos em elementos de marca
|
||||||
|
- Mais de 3 cores simultâneas num visual
|
||||||
|
- Stock photos genéricas
|
||||||
|
- Emojis em qualquer contexto de marca
|
||||||
|
- Tipografia decorativa além de Montserrat e Inter
|
||||||
|
- Sombras pesadas ou neumorfismo
|
||||||
|
- Animações que distraem (rotações, bounces, pulse contínuo)
|
||||||
|
- Texto branco sobre dourado — contraste insuficiente
|
||||||
|
- Primary Light (`#f2d9a2`) como cor de texto
|
||||||
|
- Layouts com mais de 4 colunas de conteúdo editorial
|
||||||
|
- Botões sem estados hover, focus e disabled
|
||||||
|
- Português do Brasil — sempre PT-PT com acentuação completa
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist de Conformidade
|
||||||
|
|
||||||
|
- [ ] `DESIGN.md` do Open Design consultado antes de produzir
|
||||||
|
- [ ] Apenas cores da paleta oficial; dourado como único acento
|
||||||
|
- [ ] Montserrat nos títulos, Inter no corpo
|
||||||
|
- [ ] Logótipo com espaço de respiro e fundo permitido
|
||||||
|
- [ ] Marca registada (®) na primeira ocorrência
|
||||||
|
- [ ] Contraste mínimo AA; nunca branco sobre dourado
|
||||||
|
- [ ] Espaçamento em múltiplos de 4px
|
||||||
|
- [ ] PT-PT sem brasileirismos e sem emojis
|
||||||
|
- [ ] Nenhum anti-padrão presente
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Versão**: 2.0.0 | **Data**: 22-07-2026 | **Autor**: Descomplicar®
|
||||||
|
*Fonte normativa: `~/workspace/open-design/design-systems/descomplicar/DESIGN.md`*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Healing Log
|
||||||
|
|
||||||
|
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
|
||||||
|
|
||||||
|
```jsonl
|
||||||
|
{"date":"2026-07-22","issue":"Skill documentava paleta azul/laranja (#1a365d, #dd6b20) e Open Sans, divergente do design system e do site real","fix":"Reescrita para espelhar o DESIGN.md do Open Design (dourado #cc8d00 sobre preto/branco, Montserrat + Inter) e declarar precedencia da fonte de verdade","source":"user"}
|
||||||
```
|
```
|
||||||
|
|
||||||
Modelo: `/design presentation --brand descomplicar`
|
*Adicionar nova linha após cada erro corrigido.*
|
||||||
|
|
||||||
##
|
|
||||||
|
|||||||
@@ -1,155 +1,123 @@
|
|||||||
---
|
---
|
||||||
name: "Descomplicar Digital"
|
name: "Descomplicar"
|
||||||
description: "Professional technology consulting theme with warm accents"
|
description: "Tokens da marca Descomplicar® — espelho legível por máquina do DESIGN.md no Open Design"
|
||||||
version: "1.0.0"
|
version: "2.0.0"
|
||||||
updated: "2026-03-10"
|
updated: "2026-07-22"
|
||||||
layer: wiki
|
source: "~/workspace/open-design/design-systems/descomplicar/DESIGN.md"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Tema Descomplicar Digital
|
# Tokens — Descomplicar®
|
||||||
|
|
||||||
Tema oficial Descomplicar® para uso em apresentações, relatórios, designs e qualquer material de comunicação.
|
> **Fonte de verdade:** `~/workspace/open-design/design-systems/descomplicar/DESIGN.md`
|
||||||
|
> Este ficheiro é um espelho para consumo automático (geradores, templates, scripts).
|
||||||
|
> Se divergir do `DESIGN.md`, o `DESIGN.md` ganha e este ficheiro deve ser corrigido.
|
||||||
|
>
|
||||||
|
> **Para marcas de clientes**, não usar estes valores — ler o `DESIGN.md` da marca respectiva
|
||||||
|
> em `design-systems/<slug-do-cliente>/`.
|
||||||
|
|
||||||
---
|
## Cores
|
||||||
|
|
||||||
## Paleta de Cores
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
colors:
|
colors:
|
||||||
primary: "#1a365d" # Azul escuro — headers, fundos principais
|
primary: "#cc8d00" # Dourado — CTAs, destaques, ícones, bordas activas
|
||||||
secondary: "#2b6cb0" # Azul médio — links, sub-headers
|
primary_light: "#f2d9a2" # Fundos secundários, hover suave, tags (nunca texto)
|
||||||
accent: "#dd6b20" # Laranja — CTAs, destaques, números
|
surface: "#ffffff" # Fundo de página, cards, modais
|
||||||
background: "#ffffff" # Branco — fundo principal
|
surface_alt: "#f8f8f8" # Secções alternadas, blocos de código
|
||||||
surface: "#f7fafc" # Cinza muito claro — secções alternadas
|
text: "#000000" # Headlines, corpo principal
|
||||||
text_primary: "#2d3748" # Cinza escuro — texto corpo
|
text_muted: "#6e6e6e" # Subtítulos, metadados, placeholders
|
||||||
text_secondary: "#4a5568" # Cinza médio — subtítulos, legendas
|
border: "#e5e5e5" # Divisórias, bordas de card
|
||||||
border: "#e2e8f0" # Cinza claro — bordas, separadores
|
danger: "#dc2626" # Erros, alertas críticos
|
||||||
success: "#38a169" # Verde — confirmações
|
success: "#16a34a" # Confirmações
|
||||||
warning: "#d69e2e" # Amarelo — avisos
|
|
||||||
error: "#e53e3e" # Vermelho — erros
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Referência Visual
|
**Regras:** dourado é o único acento cromático; máximo 3 cores por visual; fundos grandes em
|
||||||
|
`surface` ou `surface_alt`; CTA com fundo dourado e texto preto; nunca texto branco sobre dourado.
|
||||||
| Token | Hex | Uso |
|
|
||||||
|-------|-----|-----|
|
|
||||||
| `primary` | `#1a365d` | Headers H1/H2, fundos de navegação, capa de apresentação |
|
|
||||||
| `secondary` | `#2b6cb0` | Links, H3/H4, badges, ícones activos |
|
|
||||||
| `accent` | `#dd6b20` | Botões CTA, números em destaque, linhas de separação principais |
|
|
||||||
| `background` | `#ffffff` | Fundo padrão de slides e páginas |
|
|
||||||
| `surface` | `#f7fafc` | Slides alternados, tabelas linha par, painéis laterais |
|
|
||||||
| `text_primary` | `#2d3748` | Corpo de texto, parágrafos, listas |
|
|
||||||
| `text_secondary` | `#4a5568` | Subtítulos, legendas, texto auxiliar |
|
|
||||||
| `border` | `#e2e8f0` | Bordas de tabela, separadores horizontais, cards |
|
|
||||||
| `success` | `#38a169` | Confirmações, métricas positivas, status "concluído" |
|
|
||||||
| `warning` | `#d69e2e` | Avisos, métricas de atenção, status "em risco" |
|
|
||||||
| `error` | `#e53e3e` | Erros, métricas negativas, status "crítico" |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Tipografia
|
## Tipografia
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
fonts:
|
fonts:
|
||||||
heading: "Montserrat"
|
display: "Montserrat"
|
||||||
heading_weight: "700, 800"
|
display_fallback: "Poppins, system-ui, sans-serif"
|
||||||
heading_fallback: "Arial, sans-serif"
|
display_weights: [700, 800]
|
||||||
body: "Open Sans"
|
body: "Inter"
|
||||||
body_weight: "400, 600"
|
body_fallback: "Open Sans, system-ui, sans-serif"
|
||||||
body_fallback: "Helvetica, sans-serif"
|
body_weights: [400, 500, 600]
|
||||||
code: "JetBrains Mono"
|
mono: "JetBrains Mono"
|
||||||
code_fallback: "Consolas, monospace"
|
mono_fallback: "IBM Plex Mono, monospace"
|
||||||
|
mono_weights: [400]
|
||||||
|
|
||||||
|
scale:
|
||||||
|
text_5xl: { size: 48, weight: 800, line_height: 1.1 } # Hero headline
|
||||||
|
text_4xl: { size: 36, weight: 700, line_height: 1.15 } # H1
|
||||||
|
text_3xl: { size: 30, weight: 700, line_height: 1.2 } # H2
|
||||||
|
text_2xl: { size: 24, weight: 700, line_height: 1.3 } # H3
|
||||||
|
text_xl: { size: 20, weight: 600, line_height: 1.4 } # H4, título de card
|
||||||
|
text_lg: { size: 18, weight: 500, line_height: 1.5 } # Parágrafo de entrada
|
||||||
|
text_base:{ size: 16, weight: 400, line_height: 1.6 } # Corpo
|
||||||
|
text_sm: { size: 14, weight: 400, line_height: 1.5 } # Legendas, UI
|
||||||
|
text_xs: { size: 12, weight: 500, line_height: 1.4 } # Tags, badges
|
||||||
```
|
```
|
||||||
|
|
||||||
### Hierarquia Tipográfica
|
|
||||||
|
|
||||||
| Nível | Fonte | Peso | Tamanho (slides) | Tamanho (docs) |
|
|
||||||
|-------|-------|------|-----------------|----------------|
|
|
||||||
| H1 — Título principal | Montserrat | 800 | 40-48px | 32px |
|
|
||||||
| H2 — Título secção | Montserrat | 700 | 28-36px | 24px |
|
|
||||||
| H3 — Subtítulo | Montserrat | 700 | 22-26px | 20px |
|
|
||||||
| H4 — Label | Open Sans | 600 | 18-20px | 16px |
|
|
||||||
| Corpo | Open Sans | 400 | 16-18px | 14-16px |
|
|
||||||
| Caption | Open Sans | 400 | 12-14px | 12px |
|
|
||||||
| Código | JetBrains Mono | 400 | 14-16px | 13px |
|
|
||||||
|
|
||||||
### Google Fonts — Import
|
|
||||||
|
|
||||||
```css
|
```css
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@700;800&family=Open+Sans:wght@400;600&family=JetBrains+Mono&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@700;800&family=Inter:wght@400;500;600&family=JetBrains+Mono&display=swap');
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
## Espaçamento, grelha e raios
|
||||||
|
|
||||||
## Regras de Uso
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
usage_notes:
|
spacing: # base 4px
|
||||||
- Usar laranja com moderação (apenas CTAs e destaques-chave)
|
space_1: 4
|
||||||
- Azul escuro para headers e elementos de navegação
|
space_2: 8
|
||||||
- Fundos alternados branco/cinza para secções longas
|
space_3: 12
|
||||||
- Nunca usar mais de 3 cores numa slide
|
space_4: 16
|
||||||
- Manter contraste WCAG AA em todos os textos
|
space_6: 24
|
||||||
|
space_8: 32
|
||||||
|
space_12: 48
|
||||||
|
space_16: 64
|
||||||
|
space_24: 96
|
||||||
|
|
||||||
|
grid:
|
||||||
|
columns: 12
|
||||||
|
gutter: 24
|
||||||
|
max_width: 1280 # conteúdo geral
|
||||||
|
max_width_article: 960 # artigos
|
||||||
|
max_width_prose: 760 # texto corrido (line-height 1.7)
|
||||||
|
padding_x: { mobile: 16, tablet: 32, desktop: 48 }
|
||||||
|
|
||||||
|
breakpoints:
|
||||||
|
mobile: "<=768"
|
||||||
|
tablet: "769-1024"
|
||||||
|
desktop: ">1024"
|
||||||
|
|
||||||
|
radius:
|
||||||
|
sm: 4 # inputs, badges
|
||||||
|
md: 8 # cards, botões
|
||||||
|
lg: 12 # modais
|
||||||
|
full: 9999 # pills, avatares
|
||||||
```
|
```
|
||||||
|
|
||||||
### Regras Expandidas
|
## Movimento
|
||||||
|
|
||||||
**Cores**
|
```yaml
|
||||||
- O laranja (`accent`) é reservado para no máximo 1-2 elementos por slide/página
|
motion:
|
||||||
- Nunca usar `primary` e `accent` em simultâneo em texto — garante legibilidade
|
micro: 150 # hover, focus (ms)
|
||||||
- Fundo `surface` em slides alternados cria ritmo visual sem poluição
|
transition: 250 # mudanças de estado (ms)
|
||||||
- Combinação permitida em texto: `primary` fundo + `background` texto, ou `background` fundo + `primary` texto
|
page_fade: 200 # transições de página (ms)
|
||||||
|
easing_in: "ease-out"
|
||||||
**Tipografia**
|
easing_both: "ease-in-out"
|
||||||
- Nunca misturar Montserrat com outra fonte de títulos no mesmo documento
|
card_hover: "translateY(-2px) + sombra 0 4px 16px rgba(0,0,0,0.1)"
|
||||||
- Open Sans é a única fonte de corpo permitida
|
proibido: ["parallax", "auto-play", "animações de entrada elaboradas"]
|
||||||
- Código inline e blocos de código: sempre JetBrains Mono
|
|
||||||
- Não usar itálico em títulos — usar peso (bold) para ênfase
|
|
||||||
|
|
||||||
**Contraste WCAG AA**
|
|
||||||
- `text_primary` (#2d3748) sobre `background` (#ffffff): rácio 12.6:1 — aprovado
|
|
||||||
- `text_secondary` (#4a5568) sobre `background` (#ffffff): rácio 7.4:1 — aprovado
|
|
||||||
- `accent` (#dd6b20) sobre `background` (#ffffff): rácio 3.8:1 — aprovado para texto grande (>18px bold)
|
|
||||||
- `background` (#ffffff) sobre `primary` (#1a365d): rácio 12.6:1 — aprovado
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Aplicação em Slides
|
|
||||||
|
|
||||||
### Layout Tipo Capa
|
|
||||||
|
|
||||||
```
|
|
||||||
[Fundo: primary #1a365d]
|
|
||||||
[Logo Descomplicar — branco, topo esquerdo]
|
|
||||||
[H1: Montserrat 800, branco]
|
|
||||||
[H2: Montserrat 700, accent #dd6b20]
|
|
||||||
[Rodapé: Open Sans 400, text_secondary, separador border]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Layout Tipo Conteúdo
|
## Acessibilidade
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
contrast:
|
||||||
|
preto_sobre_branco: 21.0 # AAA
|
||||||
|
preto_sobre_dourado: 7.4 # AAA
|
||||||
|
dourado_sobre_preto: 7.4 # AAA
|
||||||
|
muted_sobre_branco: 5.1 # AA
|
||||||
|
branco_sobre_dourado: 2.9 # FALHA — proibido
|
||||||
|
minimo_corpo: 4.5 # AA
|
||||||
```
|
```
|
||||||
[Fundo: background #ffffff]
|
|
||||||
[Header barra: primary #1a365d, 8px altura]
|
|
||||||
[H2: primary #1a365d, Montserrat 700]
|
|
||||||
[Corpo: text_primary #2d3748, Open Sans 400]
|
|
||||||
[Sidebar ou destaque: surface #f7fafc]
|
|
||||||
[CTA ou número chave: accent #dd6b20, Montserrat 800]
|
|
||||||
```
|
|
||||||
|
|
||||||
### Layout Tipo Dados / Métricas
|
|
||||||
|
|
||||||
```
|
|
||||||
[Fundo alternado: surface #f7fafc]
|
|
||||||
[Número grande: accent #dd6b20, Montserrat 800, 60-80px]
|
|
||||||
[Label: text_secondary #4a5568, Open Sans 600, 14px]
|
|
||||||
[Ícone: secondary #2b6cb0]
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Aplicação em HTML (Desk CRM / Relatórios)
|
|
||||||
|
|
||||||
```css
|
|
||||||
:root {
|
|
||||||
--c
|
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
# Gestão de Design Systems Multi-Marca no Open Design
|
||||||
|
|
||||||
|
Referência operacional para criar e manter a identidade visual de **qualquer marca** — a
|
||||||
|
Descomplicar® e cada cliente — dentro do Open Design.
|
||||||
|
|
||||||
|
> Substituiu `color-palettes.md` em 22-07-2026. Esse ficheiro continha escalas de cor derivadas
|
||||||
|
> de uma paleta incorrecta (azul/laranja) que nunca foi a identidade da Descomplicar.
|
||||||
|
> Escalas de cor não se inventam aqui — vivem no `DESIGN.md` de cada marca.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Onde vivem
|
||||||
|
|
||||||
|
```
|
||||||
|
~/workspace/open-design/design-systems/
|
||||||
|
descomplicar/DESIGN.md # a nossa marca
|
||||||
|
<slug-cliente>/DESIGN.md # uma pasta por cliente
|
||||||
|
```
|
||||||
|
|
||||||
|
O Open Design traz ainda mais de 140 design systems de referência instalados como plugins
|
||||||
|
(`design-system-apple`, `design-system-swiss`, `design-system-bento`, …). Servem de **referência
|
||||||
|
e ponto de partida** — nunca se entrega material de cliente com a identidade de outra marca.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Criar o design system de um cliente
|
||||||
|
|
||||||
|
**1. Verificar duplicados** — procurar a pasta do cliente em `design-systems/`. Se já existir,
|
||||||
|
usar essa. Nunca criar um segundo design system para a mesma marca.
|
||||||
|
|
||||||
|
**2. Recolher material real** — site do cliente, manual de marca, logótipos, materiais impressos.
|
||||||
|
Sem material não há extracção: a identidade de um cliente **nunca se inventa**.
|
||||||
|
|
||||||
|
**3. Extrair** — skill `brand-extract` do Open Design sobre o site ou os ficheiros fornecidos.
|
||||||
|
Devolve cor, tipografia e padrões observados.
|
||||||
|
|
||||||
|
**4. Estruturar** — skill `theme-factory` ou redacção directa do `DESIGN.md`, seguindo a mesma
|
||||||
|
estrutura do da Descomplicar:
|
||||||
|
|
||||||
|
| Secção | Conteúdo |
|
||||||
|
|--------|----------|
|
||||||
|
| 1. Tema e atmosfera | Categoria, estilo visual, postura cromática, mood, acabamento |
|
||||||
|
| 2. Cor | Tokens com hex e uso; regras de aplicação |
|
||||||
|
| 3. Tipografia | Famílias, pesos, escala com tamanho/peso/line-height |
|
||||||
|
| 4. Espaçamento e grelha | Escala base, colunas, gutter, max-width, breakpoints, raios |
|
||||||
|
| 5. Layout e composição | Hierarquia, padrões de layout frequentes |
|
||||||
|
| 6. Componentes | Botões, badges, cards, inputs, navbar, rodapé |
|
||||||
|
| 7. Movimento | Durações, easing, o que é proibido |
|
||||||
|
| 8. Voz e marca | Tom, princípios de copy, exemplos certos e errados |
|
||||||
|
| 9. Anti-padrões | Lista explícita do que nunca fazer |
|
||||||
|
|
||||||
|
**5. Validar com o cliente** antes de tornar normativo. Um `DESIGN.md` por aprovar não deve
|
||||||
|
gerar material final.
|
||||||
|
|
||||||
|
**6. Registar** — anotar a marca e a origem do material no projecto ou tarefa correspondente.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Aplicar numa produção
|
||||||
|
|
||||||
|
```
|
||||||
|
create_project(name: "<projecto>", designSystem: "<slug-da-marca>")
|
||||||
|
```
|
||||||
|
|
||||||
|
- Um projecto do Open Design serve **uma marca só**.
|
||||||
|
- Ecossistemas do mesmo cliente (landing, dashboard, app, deck) ficam **no mesmo projecto**,
|
||||||
|
para herdarem o mesmo `DESIGN.md` sem deriva entre artefactos.
|
||||||
|
- Marcas diferentes nunca partilham projecto.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Manter
|
||||||
|
|
||||||
|
- Alterações de identidade fazem-se **no `DESIGN.md`** e só depois se propagam para espelhos
|
||||||
|
(skill `brand-guidelines`, `descomplicar-theme.md`, materiais no Hub).
|
||||||
|
- Ao detectar divergência entre um espelho e o `DESIGN.md`, corrigir o espelho — nunca o inverso.
|
||||||
|
- Rebranding de cliente: actualizar o `DESIGN.md` e regenerar os artefactos afectados, em vez de
|
||||||
|
corrigir peça a peça.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Acessibilidade — verificação obrigatória
|
||||||
|
|
||||||
|
Independentemente da marca, validar antes de entregar:
|
||||||
|
|
||||||
|
- Texto de corpo com contraste mínimo AA (4.5:1); títulos grandes 3:1.
|
||||||
|
- Nenhum par de cores da marca usado abaixo do mínimo, mesmo que o cliente o use hoje —
|
||||||
|
quando o material de origem falha contraste, sinalizar ao cliente em vez de replicar o erro.
|
||||||
|
- Estados hover, focus e disabled explícitos em todos os elementos interactivos.
|
||||||
@@ -5,7 +5,6 @@ description: "Constroi websites cinematograficos a partir de um site existente.
|
|||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
created: 2026-04-07
|
created: 2026-04-07
|
||||||
tools: [Bash, Read, Write, mcp__claude-in-chrome__read_page, mcp__claude-in-chrome__tabs_create_mcp, mcp__chrome-devtools__take_screenshot]
|
tools: [Bash, Read, Write, mcp__claude-in-chrome__read_page, mcp__claude-in-chrome__tabs_create_mcp, mcp__chrome-devtools__take_screenshot]
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill: /cinematic-site
|
# Skill: /cinematic-site
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: clone-style
|
name: clone-style
|
||||||
description: Clona o estilo visual de um site ou apresentação extraindo design tokens (cores, tipografia, espaçamento, raios, sombras) e gerando JSON compatível com Stitch, design-engine e pptx-generator. Usar quando "clonar estilo", "clone style", "extrair design", "copiar visual", "tokens design", "clone web", "clone slides", "design tokens".
|
description: Clona o estilo visual de um site ou apresentação extraindo design tokens (cores, tipografia, espaçamento, raios, sombras) e gerando JSON compatível com Stitch, design-engine e pptx-generator. Usar quando "clonar estilo", "clone style", "extrair design", "copiar visual", "tokens design", "clone web", "clone slides", "design tokens".
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /clone-style — Extrair Design Tokens de Sites e Slides
|
# /clone-style — Extrair Design Tokens de Sites e Slides
|
||||||
@@ -117,4 +116,163 @@ Recebe `tokens.json` e aplica numa das 3 ferramentas:
|
|||||||
|
|
||||||
**Limitação importante:** Stitch só aceita um conjunto restrito de tokens (ver schema `mcp__stitch__create_design_system`):
|
**Limitação importante:** Stitch só aceita um conjunto restrito de tokens (ver schema `mcp__stitch__create_design_system`):
|
||||||
- 1 `customColor` (seed) + opcionais `overridePrimaryColor`/`overrideSecondaryColor`/`overrideTertiaryColor`/`overrideNeutralColor`
|
- 1 `customColor` (seed) + opcionais `overridePrimaryColor`/`overrideSecondaryColor`/`overrideTertiaryColor`/`overrideNeutralColor`
|
||||||
-
|
- `headlineFont` / `bodyFont` / `labelFont` de **enum fixo** (29 Google Fonts: INTER, ROBOTO, MANROPE, GEIST, etc.)
|
||||||
|
- `roundness`: ROUND_4 / ROUND_8 / ROUND_12 / ROUND_FULL
|
||||||
|
- `colorMode`: LIGHT / DARK
|
||||||
|
- `designMd`: markdown livre para tudo o que não cabe nos campos acima
|
||||||
|
|
||||||
|
**Mapeamento Stitch:**
|
||||||
|
|
||||||
|
```
|
||||||
|
tokens.colors.dominant → customColor (seed)
|
||||||
|
tokens.colors.top[1..3] → overridePrimary/Secondary/Tertiary
|
||||||
|
tokens.colors.neutral → overrideNeutralColor
|
||||||
|
|
||||||
|
tokens.fonts.headline.family
|
||||||
|
→ match com enum Stitch (fuzzy: "Helvetica" → INTER, "Söhne" → INTER, etc.)
|
||||||
|
→ headlineFont
|
||||||
|
|
||||||
|
tokens.fonts.body.family
|
||||||
|
→ match enum → bodyFont
|
||||||
|
|
||||||
|
tokens.borderRadius.dominant
|
||||||
|
→ 4px → ROUND_4
|
||||||
|
→ 8-10px → ROUND_8
|
||||||
|
→ 12-14px → ROUND_12
|
||||||
|
→ ≥16px ou full → ROUND_FULL
|
||||||
|
|
||||||
|
tokens.background.dark? → colorMode: DARK, else LIGHT
|
||||||
|
|
||||||
|
# Tudo o resto vai para designMd:
|
||||||
|
designMd: |
|
||||||
|
## Estilo extraído de <fonte>
|
||||||
|
|
||||||
|
### Tipografia adicional
|
||||||
|
- Display: <font> <size> <weight>
|
||||||
|
- Caption: <font> <size> <weight>
|
||||||
|
|
||||||
|
### Espaçamento
|
||||||
|
Grid base: <Npx>
|
||||||
|
Escala: 4, 8, 16, 24, 32, 48, 64
|
||||||
|
|
||||||
|
### Sombras
|
||||||
|
- sm: <box-shadow>
|
||||||
|
- md: <box-shadow>
|
||||||
|
- lg: <box-shadow>
|
||||||
|
|
||||||
|
### Tom visual
|
||||||
|
<descrição em prosa: minimalista, denso, colorido, monocromático, etc.>
|
||||||
|
```
|
||||||
|
|
||||||
|
Depois chama `mcp__stitch__create_design_system` com este payload.
|
||||||
|
|
||||||
|
### B) design-engine (brand pack)
|
||||||
|
|
||||||
|
Cria um JSON brand pack em `/media/ealmeida/Dados/Hub/04-Recursos/Design/brands/<nome>.json` com formato:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "<nome>",
|
||||||
|
"source": "cloned from <url|pptx>",
|
||||||
|
"extracted_at": "2026-04-07",
|
||||||
|
"colors": { "primary": "#...", "secondary": "#...", "neutral": "#...", "accent": "#..." },
|
||||||
|
"fonts": { "headline": "Inter", "body": "Inter" },
|
||||||
|
"borderRadius": "8px",
|
||||||
|
"tone": "minimalista, profissional, denso"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Depois `mcp__design-engine__brand_load(<nome>)` para usar em `generate_image`.
|
||||||
|
|
||||||
|
### C) pptx-generator (slides)
|
||||||
|
|
||||||
|
Aplica os tokens via XML manipulation no template Descomplicar (ver `/pptx-generator`). Substitui:
|
||||||
|
- Cores accent1-6 do `theme1.xml` pelos extraídos
|
||||||
|
- Fontes major/minor pelas extraídas
|
||||||
|
- Mantém layouts/positioning do template Descomplicar (não copia layouts da fonte original — só estilo)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mapeamento de fontes (fuzzy → Stitch enum)
|
||||||
|
|
||||||
|
Quando `tokens.fonts.headline.family` não está no enum Stitch, mapear:
|
||||||
|
|
||||||
|
| Família detectada | Stitch enum |
|
||||||
|
|---|---|
|
||||||
|
| Helvetica, Helvetica Neue, Arial, sans-serif genérico | INTER |
|
||||||
|
| Söhne, Inter, system-ui | INTER |
|
||||||
|
| Roboto, Roboto Flex | (não existe — usar INTER) |
|
||||||
|
| SF Pro, -apple-system | INTER |
|
||||||
|
| GT Walsheim, Geist, Mona Sans | GEIST |
|
||||||
|
| Manrope | MANROPE |
|
||||||
|
| Plus Jakarta, Jakarta | PLUS_JAKARTA_SANS |
|
||||||
|
| DM Sans | DM_SANS |
|
||||||
|
| IBM Plex Sans | IBM_PLEX_SANS |
|
||||||
|
| Sora | SORA |
|
||||||
|
| Times, serif genérico | NEWSREADER |
|
||||||
|
| Garamond, EB Garamond | EB_GARAMOND |
|
||||||
|
| Playfair, Domine | DOMINE |
|
||||||
|
|
||||||
|
Se nenhum match óbvio, **default INTER** (mais neutro). Adicionar nota em `designMd` com a fonte original detectada.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-patterns
|
||||||
|
|
||||||
|
| Não fazer | Razão |
|
||||||
|
|---|---|
|
||||||
|
| Tentar reproduzir layout pixel a pixel | Impossível e gera "AI slop" |
|
||||||
|
| Usar `cssstats.com` ou scrapers HTML estáticos | Falham em sites JS-rendered (Next.js, React, etc.) |
|
||||||
|
| Importar HTML inteiro como Stitch screen | Stitch não importa HTML; gera de prompt+tokens |
|
||||||
|
| Aplicar Stitch design-system sem `customColor` válido | Validation error — `customColor` é obrigatório |
|
||||||
|
| Esquecer de usar `designMd` para tokens fora do enum | Perde-se 50% da informação extraída |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Validação (critérios para "OK")
|
||||||
|
|
||||||
|
Antes de declarar a clonagem completa:
|
||||||
|
1. ✅ `tokens.json` existe e tem `colors`, `fonts`, `borderRadius` no mínimo
|
||||||
|
2. ✅ Pelo menos 1 screenshot guardado
|
||||||
|
3. ✅ Mapeamento Stitch produz `customColor` válido (hex format)
|
||||||
|
4. ✅ Pelo menos 1 fonte mapeada para enum Stitch
|
||||||
|
5. ✅ `designMd` tem ≥3 secções (tipografia, espaçamento, tom)
|
||||||
|
6. ✅ Se modo `apply`: validação visual pelo utilizador antes de marcar "concluído"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exemplos práticos
|
||||||
|
|
||||||
|
### Clonar Linear
|
||||||
|
|
||||||
|
```
|
||||||
|
/clone-style web https://linear.app
|
||||||
|
```
|
||||||
|
Esperado: paleta dominante azul/roxo, fontes Inter ou similar, raios 6-8px, dark mode default.
|
||||||
|
|
||||||
|
### Clonar template cliente
|
||||||
|
|
||||||
|
```
|
||||||
|
/clone-style slides ~/Downloads/cliente-deck.pptx
|
||||||
|
```
|
||||||
|
Esperado: cores accent do tema PPTX, fontes major/minor, proposta de paleta unificada.
|
||||||
|
|
||||||
|
### Aplicar a novo projecto Stitch
|
||||||
|
|
||||||
|
```
|
||||||
|
/clone-style apply ~/.claude-work/clone-style/linear-app-20260407/tokens.json
|
||||||
|
```
|
||||||
|
Cria design system Stitch + brand pack design-engine.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referências internas
|
||||||
|
|
||||||
|
- `references/extract-web-tokens.js` — script JS de extracção CSS computado
|
||||||
|
- `references/extract-pptx-theme.py` — script Python para parsear theme1.xml
|
||||||
|
- `~/.claude-work/clone-style/` — cache de extracções (timestamped)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Versão:** 1.0.0 | **Data:** 2026-04-07 | **Autor:** Descomplicar (sessão 5)
|
||||||
|
**Origem:** Necessidade real — clonagem de estilos em propostas comerciais. Substitui tentativas falhadas com Penpot, scrapers HTML, screenshots+AI, Figma import.
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ description: >
|
|||||||
Propostas visuais, landing pages, apresentações e materiais para decisores PT.
|
Propostas visuais, landing pages, apresentações e materiais para decisores PT.
|
||||||
Usar quando: proposta comercial, landing page serviço B2B, apresentação cliente,
|
Usar quando: proposta comercial, landing page serviço B2B, apresentação cliente,
|
||||||
one-pager, ou qualquer material visual para audiência empresarial portuguesa.
|
one-pager, ou qualquer material visual para audiência empresarial portuguesa.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /design-b2b — Design System Serviços B2B
|
# /design-b2b — Design System Serviços B2B
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ description: >
|
|||||||
Optimização conversão, layouts loja, UX checkout e elementos de confiança.
|
Optimização conversão, layouts loja, UX checkout e elementos de confiança.
|
||||||
Usar quando: criar ou optimizar loja WooCommerce, página produto, carrinho,
|
Usar quando: criar ou optimizar loja WooCommerce, página produto, carrinho,
|
||||||
checkout, ou qualquer elemento visual de e-commerce para mercado português.
|
checkout, ou qualquer elemento visual de e-commerce para mercado português.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /design-ecommerce — Design System E-commerce
|
# /design-ecommerce — Design System E-commerce
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ description: >
|
|||||||
Paleta, tipografia, CTAs e layouts optimizados para contexto clínico PT.
|
Paleta, tipografia, CTAs e layouts optimizados para contexto clínico PT.
|
||||||
Usar quando: criar landing page de clínica, página de serviços médicos,
|
Usar quando: criar landing page de clínica, página de serviços médicos,
|
||||||
agendamento online, ou qualquer material visual para clientes saúde.
|
agendamento online, ou qualquer material visual para clientes saúde.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /design-saude — Design System Saúde
|
# /design-saude — Design System Saúde
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ description: >
|
|||||||
Paleta, calculadoras, propostas visuais e layouts para sector energias renováveis PT.
|
Paleta, calculadoras, propostas visuais e layouts para sector energias renováveis PT.
|
||||||
Usar quando: landing page solar, proposta instalação FV, calculadora poupança,
|
Usar quando: landing page solar, proposta instalação FV, calculadora poupança,
|
||||||
ou material visual para clientes energia solar.
|
ou material visual para clientes energia solar.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /design-solar — Design System Solar/FV
|
# /design-solar — Design System Solar/FV
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: design
|
name: design
|
||||||
description: Motor de design profissional multi-marca. Gera apresentações, infográficos, logos, social media, web pages e identidade visual.
|
description: Motor de design profissional multi-marca. Gera apresentações, infográficos, logos, social media, web pages e identidade visual.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /design - Motor de Design Profissional
|
# /design - Motor de Design Profissional
|
||||||
@@ -144,4 +143,28 @@ Formato: `{nome}.json` com cores, fontes, logos, voz, estilo.
|
|||||||
| Instagram Post | 1:1 | 1080x1080 |
|
| Instagram Post | 1:1 | 1080x1080 |
|
||||||
| Instagram Story | 9:16 | 1080x1920 |
|
| Instagram Story | 9:16 | 1080x1920 |
|
||||||
| LinkedIn Post | ~2:1 | 1200x628 |
|
| LinkedIn Post | ~2:1 | 1200x628 |
|
||||||
| YouTube Thumbnail | 1
|
| YouTube Thumbnail | 16:9 | 1280x720 |
|
||||||
|
| OG Image | ~2:1 | 1200x630 |
|
||||||
|
| Facebook Cover | ~3:1 | 820x312 |
|
||||||
|
|
||||||
|
## Qualidade
|
||||||
|
|
||||||
|
Todos os outputs passam pelo design-critic com score minimo 7/10 em 5 dimensoes:
|
||||||
|
fidelidade, concisao visual, legibilidade, profissionalismo, brand compliance.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Versao**: 2.1.0 | **Data**: 2026-04-07 | **Autor**: Descomplicar
|
||||||
|
**v2.1.0:** Penpot removido como motor activo (substituído por Stitch para web/ui e design-engine para imagens/social/infográficos). Workflow simplificado.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ def criar_pricing(c: canvas.Canvas, planos: list[dict]):
|
|||||||
| Controlo | Pixel-perfect | Aproximado |
|
| Controlo | Pixel-perfect | Aproximado |
|
||||||
| Fontes custom | Suporte completo | Limitado |
|
| Fontes custom | Suporte completo | Limitado |
|
||||||
| Melhor para | Proposta final PDF | Template editável pelo cliente |
|
| Melhor para | Proposta final PDF | Template editável pelo cliente |
|
||||||
| Ambiente | Servidor dev (`/root/Dev`) | Servidor dev ou local |
|
| Ambiente | Desktop local (`/media/ealmeida/Dados/Dev`) | Desktop local |
|
||||||
|
|
||||||
**Recomendação:** usar reportlab para proposta final; pptxgenjs se o cliente precisar de editar.
|
**Recomendação:** usar reportlab para proposta final; pptxgenjs se o cliente precisar de editar.
|
||||||
|
|
||||||
@@ -254,8 +254,8 @@ pip install reportlab Pillow
|
|||||||
# Registar fontes Nexa
|
# Registar fontes Nexa
|
||||||
from reportlab.pdfbase import pdfmetrics
|
from reportlab.pdfbase import pdfmetrics
|
||||||
from reportlab.pdfbase.ttfonts import TTFont
|
from reportlab.pdfbase.ttfonts import TTFont
|
||||||
pdfmetrics.registerFont(TTFont("Nexa-Bold", "/root/Dev/assets/fonts/Nexa-Bold.ttf"))
|
pdfmetrics.registerFont(TTFont("Nexa-Bold", "/media/ealmeida/Dados/Dev/assets/fonts/Nexa-Bold.ttf"))
|
||||||
pdfmetrics.registerFont(TTFont("Nexa-Light", "/root/Dev/assets/fonts/Nexa-Light.ttf"))
|
pdfmetrics.registerFont(TTFont("Nexa-Light", "/media/ealmeida/Dados/Dev/assets/fonts/Nexa-Light.ttf"))
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
/home/ealmeida/.claude/skills/second-brain-repo/.claude/skills/pptx-generator
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
/home/ealmeida/.claude/skills/second-brain-repo/.claude/skills/remotion
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
/home/ealmeida/.claude/skills/ui-ux-pro-max-repo/.claude/skills/ui-ux-pro-max
|
||||||
@@ -7,6 +7,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- ssh-unified
|
- ssh-unified
|
||||||
@@ -43,7 +45,6 @@ collaborates_with:
|
|||||||
created: "2025-01-13"
|
created: "2025-01-13"
|
||||||
updated: "2026-02-04"
|
updated: "2026-02-04"
|
||||||
author: "Descomplicar®"
|
author: "Descomplicar®"
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Database Design Specialist Descomplicar
|
# Database Design Specialist Descomplicar
|
||||||
@@ -145,12 +146,12 @@ Especialista em arquitectura de bases de dados, entregando solucoes eficientes,
|
|||||||
- **n8n** - Workflows automation
|
- **n8n** - Workflows automation
|
||||||
- **filesystem** - Ficheiros locais
|
- **filesystem** - Ficheiros locais
|
||||||
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
||||||
- **mem0** - Memória longo prazo
|
- **mem0** - Mem0 (Tier 2, `mcp__mem0__*`) + IJFW (Tier 1, automático via hooks)
|
||||||
- **cwp** - CentOS Web Panel
|
- **cwp** - CentOS Web Panel
|
||||||
- **puppeteer** - Browser automation
|
- **puppeteer** - Browser automation
|
||||||
|
|
||||||
### All Available (32 total)
|
### All Available (32 total)
|
||||||
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
||||||
|
|
||||||
**Discovery:** Use ToolSearch to find specific tools.
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
@@ -160,4 +161,66 @@ moloni, google-analytics, google-workspace, imap, outline-api, youtube-research,
|
|||||||
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
||||||
- Invoke: `/wp-dev`
|
- Invoke: `/wp-dev`
|
||||||
|
|
||||||
✓ **/php-dev** -
|
✓ **/php-dev** - Desenvolvimento PHP fullstack - Laravel, Symfony, APIs RESTful, arquitectura bac
|
||||||
|
- Invoke: `/php-dev`
|
||||||
|
|
||||||
|
✓ **/db-design** - Design de bases de dados - schema, optimização queries, MySQL/PostgreSQL, arquit
|
||||||
|
- Invoke: `/db-design`
|
||||||
|
|
||||||
|
✓ **/mcp-dev** - Desenvolvimento de servidores MCP - criar, configurar, testar e documentar MCPs
|
||||||
|
- Invoke: `/mcp-dev`
|
||||||
|
|
||||||
|
### Recommended for dev
|
||||||
|
- **/react-patterns** - Padrões React modernos - Hooks, Server Components, State Man
|
||||||
|
- **/nextjs** - Desenvolvimento Next.js moderno com App Router, Server Compo
|
||||||
|
- **/elementor** - Desenvolvimento avançado com Elementor Pro e Crocoblock - wi
|
||||||
|
- **/woocommerce** - Desenvolvimento e optimização de lojas WooCommerce - checkou
|
||||||
|
- **/crm-admin** - Administração e desenvolvimento Perfex CRM - gestão dados, m
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/delegate** - Delegar tarefas dev para outros chats Claude com workflow co
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **5 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Bases de Dados
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce DeskDev
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Gestão Administrativa e Financeira
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce SaaS
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- gitea
|
- gitea
|
||||||
@@ -47,7 +49,6 @@ escalates_to:
|
|||||||
created: "2025-01-13"
|
created: "2025-01-13"
|
||||||
updated: "2026-02-14"
|
updated: "2026-02-14"
|
||||||
author: "Descomplicar®"
|
author: "Descomplicar®"
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Dev Helper Descomplicar
|
# Dev Helper Descomplicar
|
||||||
@@ -185,4 +186,119 @@ OBRIGATÓRIO antes de git commit:
|
|||||||
5. Decisão
|
5. Decisão
|
||||||
- 0 vulnerabilidades → ✅ Commit safe
|
- 0 vulnerabilidades → ✅ Commit safe
|
||||||
- Vulnerabilidades transitivas → Usar pnpm.overrides
|
- Vulnerabilidades transitivas → Usar pnpm.overrides
|
||||||
- Vulnerabilidades críticas → Corrigir o
|
- Vulnerabilidades críticas → Corrigir ou invocar /dep-audit
|
||||||
|
|
||||||
|
6. Documentar
|
||||||
|
- Se há vulnerabilidades conhecidas → Mencionar no commit message
|
||||||
|
- Criar flag: touch ~/.claude-work/.last-security-audit
|
||||||
|
|
||||||
|
NUNCA fazer commit sem executar este workflow.
|
||||||
|
Ver: PROC-DEV-SEC-001 no Hub para detalhes completos.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Princípios SOLID
|
||||||
|
|
||||||
|
| Princípio | Descrição | Exemplo Anti-Pattern |
|
||||||
|
|-----------|-----------|----------------------|
|
||||||
|
| **S**ingle Responsibility | Uma classe/função = uma responsabilidade | Classe User que envia emails |
|
||||||
|
| **O**pen/Closed | Aberto extensão, fechado modificação | Modificar código existente para adicionar feature |
|
||||||
|
| **L**iskov Substitution | Subclasses devem ser substituíveis | Override que muda comportamento drasticamente |
|
||||||
|
| **I**nterface Segregation | Interfaces específicas > interfaces gerais | Interface com métodos não usados |
|
||||||
|
| **D**ependency Inversion | Depender de abstracções | Instanciar dependências directamente |
|
||||||
|
|
||||||
|
## Code Smells Comuns
|
||||||
|
|
||||||
|
- **Duplicação**: Copy-paste code → Extrair função/classe
|
||||||
|
- **Função Longa**: >20 linhas → Quebrar em funções menores
|
||||||
|
- **Classe Grande**: Muitas responsabilidades → Separar em classes
|
||||||
|
- **Lista Parâmetros**: >3 parâmetros → Usar objecto config
|
||||||
|
- **Nomes Vagos**: `data`, `temp`, `x` → Nomes descritivos
|
||||||
|
- **Comentários Excessivos**: Código deve ser auto-explicativo
|
||||||
|
|
||||||
|
## Knowledge Sources (Consultar SEMPRE)
|
||||||
|
|
||||||
|
### NotebookLM (Primario - usar PRIMEIRO)
|
||||||
|
|
||||||
|
```
|
||||||
|
mcp__notebooklm__notebook_query notebook_id:"24947ffa-0019-448a-a340-2f4a275d2eb1" query:"boas praticas SOLID clean code"
|
||||||
|
mcp__notebooklm__notebook_query notebook_id:"f9a79b5a-649f-4443-afaf-7ff562b6c2e7" query:"debugging arquitectura troubleshooting"
|
||||||
|
mcp__notebooklm__notebook_query notebook_id:"2876d1fe-5cea-4d98-8140-b0e1a81c6bc4" query:"desenvolvimento assistente workflow"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Your Available MCPs
|
||||||
|
|
||||||
|
### Recommended for dev
|
||||||
|
- **ssh-unified** - SSH, SFTP, servidor management
|
||||||
|
- **gitea** - Repositórios Git, issues, PRs
|
||||||
|
- **context7** - Context documentation
|
||||||
|
- **n8n** - Workflows automation
|
||||||
|
- **filesystem** - Ficheiros locais
|
||||||
|
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
||||||
|
- **** - Knowledge base AI
|
||||||
|
- **mem0** - Mem0 (Tier 2, `mcp__mem0__*`) + IJFW (Tier 1, automático via hooks)
|
||||||
|
- **cwp** - CentOS Web Panel
|
||||||
|
- **puppeteer** - Browser automation
|
||||||
|
|
||||||
|
### All Available (32 total)
|
||||||
|
desk-crm-v3, moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, 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)
|
||||||
|
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
||||||
|
- Invoke: `/wp-dev`
|
||||||
|
|
||||||
|
✓ **/php-dev** - Desenvolvimento PHP fullstack - Laravel, Symfony, APIs RESTful, arquitectura bac
|
||||||
|
- Invoke: `/php-dev`
|
||||||
|
|
||||||
|
✓ **/db-design** - Design de bases de dados - schema, optimização queries, MySQL/PostgreSQL, arquit
|
||||||
|
- Invoke: `/db-design`
|
||||||
|
|
||||||
|
✓ **/mcp-dev** - Desenvolvimento de servidores MCP - criar, configurar, testar e documentar MCPs
|
||||||
|
- Invoke: `/mcp-dev`
|
||||||
|
|
||||||
|
### Recommended for dev
|
||||||
|
- **/react-patterns** - Padrões React modernos - Hooks, Server Components, State Man
|
||||||
|
- **/nextjs** - Desenvolvimento Next.js moderno com App Router, Server Compo
|
||||||
|
- **/elementor** - Desenvolvimento avançado com Elementor Pro e Crocoblock - wi
|
||||||
|
- **/woocommerce** - Desenvolvimento e optimização de lojas WooCommerce - checkou
|
||||||
|
- **/crm-admin** - Administração e desenvolvimento Perfex CRM - gestão dados, m
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/delegate** - Delegar tarefas dev para outros chats Claude com workflow co
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Colaboração
|
||||||
|
|
||||||
|
- **Reports to**: Development Lead
|
||||||
|
- **Colabora com**: Todos os development specialists, System Architects, Database Design Specialist, Security Compliance Specialist
|
||||||
|
- **Escalar para**: Development Lead (decisões arquitectura complexas), Security Compliance Specialist (vulnerabilidades críticas)
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **1 TaskForce** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- gitea
|
- gitea
|
||||||
@@ -44,7 +46,6 @@ collaborates_with:
|
|||||||
created: "2025-01-13"
|
created: "2025-01-13"
|
||||||
updated: "2026-02-04"
|
updated: "2026-02-04"
|
||||||
author: "Descomplicar®"
|
author: "Descomplicar®"
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Development Lead Descomplicar
|
# Development Lead Descomplicar
|
||||||
@@ -144,7 +145,7 @@ Lider de desenvolvimento responsavel por liderar equipas, garantir qualidade de
|
|||||||
|
|
||||||
✓ **mem0** (system)
|
✓ **mem0** (system)
|
||||||
- Memória longo prazo
|
- Memória longo prazo
|
||||||
- Usage: `mcp__mem_*`
|
- Usage: `mcp__mem0__*`
|
||||||
|
|
||||||
### Recommended for dev
|
### Recommended for dev
|
||||||
- **ssh-unified** - SSH, SFTP, servidor management
|
- **ssh-unified** - SSH, SFTP, servidor management
|
||||||
@@ -156,10 +157,63 @@ Lider de desenvolvimento responsavel por liderar equipas, garantir qualidade de
|
|||||||
- **puppeteer** - Browser automation
|
- **puppeteer** - Browser automation
|
||||||
|
|
||||||
### All Available (32 total)
|
### All Available (32 total)
|
||||||
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
||||||
|
|
||||||
**Discovery:** Use ToolSearch to find specific tools.
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
## Your Available Skills
|
## Your Available Skills
|
||||||
|
|
||||||
### Primary Ski
|
### Primary Skills (Your Domain)
|
||||||
|
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
||||||
|
- Invoke: `/wp-dev`
|
||||||
|
|
||||||
|
✓ **/php-dev** - Desenvolvimento PHP fullstack - Laravel, Symfony, APIs RESTful, arquitectura bac
|
||||||
|
- Invoke: `/php-dev`
|
||||||
|
|
||||||
|
✓ **/db-design** - Design de bases de dados - schema, optimização queries, MySQL/PostgreSQL, arquit
|
||||||
|
- Invoke: `/db-design`
|
||||||
|
|
||||||
|
✓ **/mcp-dev** - Desenvolvimento de servidores MCP - criar, configurar, testar e documentar MCPs
|
||||||
|
- Invoke: `/mcp-dev`
|
||||||
|
|
||||||
|
### Recommended for dev
|
||||||
|
- **/react-patterns** - Padrões React modernos - Hooks, Server Components, State Man
|
||||||
|
- **/nextjs** - Desenvolvimento Next.js moderno com App Router, Server Compo
|
||||||
|
- **/elementor** - Desenvolvimento avançado com Elementor Pro e Crocoblock - wi
|
||||||
|
- **/woocommerce** - Desenvolvimento e optimização de lojas WooCommerce - checkou
|
||||||
|
- **/crm-admin** - Administração e desenvolvimento Perfex CRM - gestão dados, m
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/delegate** - Delegar tarefas dev para outros chats Claude com workflow co
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **2 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Product Manager
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Segurança e Autenticação
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- gitea
|
- gitea
|
||||||
@@ -38,7 +40,6 @@ compliance:
|
|||||||
created: '2025-01-13'
|
created: '2025-01-13'
|
||||||
updated: '2026-02-04'
|
updated: '2026-02-04'
|
||||||
author: Descomplicar®
|
author: Descomplicar®
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
# JavaScript Fullstack Specialist Descomplicar
|
# JavaScript Fullstack Specialist Descomplicar
|
||||||
|
|
||||||
@@ -134,7 +135,7 @@ Especialista em desenvolvimento JavaScript fullstack, coordenando frontend e bac
|
|||||||
|
|
||||||
✓ **mem0** (system)
|
✓ **mem0** (system)
|
||||||
- Memória longo prazo
|
- Memória longo prazo
|
||||||
- Usage: `mcp__mem_*`
|
- Usage: `mcp__mem0__*`
|
||||||
|
|
||||||
### Recommended for dev
|
### Recommended for dev
|
||||||
- **ssh-unified** - SSH, SFTP, servidor management
|
- **ssh-unified** - SSH, SFTP, servidor management
|
||||||
@@ -146,7 +147,7 @@ Especialista em desenvolvimento JavaScript fullstack, coordenando frontend e bac
|
|||||||
- **puppeteer** - Browser automation
|
- **puppeteer** - Browser automation
|
||||||
|
|
||||||
### All Available (32 total)
|
### All Available (32 total)
|
||||||
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, wikijs, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, vimeo, design-systems, replicate
|
||||||
|
|
||||||
**Discovery:** Use ToolSearch to find specific tools.
|
**Discovery:** Use ToolSearch to find specific tools.
|
||||||
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
**Example:** `ToolSearch("ssh upload")` finds SSH upload tools.
|
||||||
@@ -156,4 +157,74 @@ moloni, google-analytics, google-workspace, imap, outline-api, youtube-research,
|
|||||||
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
||||||
- Invoke: `/wp-dev`
|
- Invoke: `/wp-dev`
|
||||||
|
|
||||||
✓ **/php-dev** - Desenvolvimento PHP fullstack - L
|
✓ **/php-dev** - Desenvolvimento PHP fullstack - Laravel, Symfony, APIs RESTful, arquitectura bac
|
||||||
|
- Invoke: `/php-dev`
|
||||||
|
|
||||||
|
✓ **/db-design** - Design de bases de dados - schema, optimização queries, MySQL/PostgreSQL, arquit
|
||||||
|
- Invoke: `/db-design`
|
||||||
|
|
||||||
|
✓ **/mcp-dev** - Desenvolvimento de servidores MCP - criar, configurar, testar e documentar MCPs
|
||||||
|
- Invoke: `/mcp-dev`
|
||||||
|
|
||||||
|
### Recommended for dev
|
||||||
|
- **/react-patterns** - Padrões React modernos - Hooks, Server Components, State Man
|
||||||
|
- **/nextjs** - Desenvolvimento Next.js moderno com App Router, Server Compo
|
||||||
|
- **/elementor** - Desenvolvimento avançado com Elementor Pro e Crocoblock - wi
|
||||||
|
- **/woocommerce** - Desenvolvimento e optimização de lojas WooCommerce - checkou
|
||||||
|
- **/crm-admin** - Administração e desenvolvimento Perfex CRM - gestão dados, m
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/delegate** - Delegar tarefas dev para outros chats Claude com workflow co
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
## Your Team & Responsibilities
|
||||||
|
|
||||||
|
You are part of **6 SDKs** (TaskForce teams):
|
||||||
|
|
||||||
|
### TaskForce Bases de Dados
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce Claude Agents
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
### TaskForce Dashboard
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Your responsibilities in this TaskForce:**
|
||||||
|
|
||||||
|
- **TaskForce interno para criar dashboards profissionais rapidamente. Design system Descomplicar com glassmorphism, bento grid e animações Framer Motion.**: NULL
|
||||||
|
|
||||||
|
### TaskForce Next.js
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce React
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
### TaskForce SaaS
|
||||||
|
|
||||||
|
**Purpose:** NULL
|
||||||
|
|
||||||
|
**Collaboration:**
|
||||||
|
- Work with other agents in your TaskForce teams
|
||||||
|
- Share knowledge and context across team members
|
||||||
|
- Leverage team-specific skills and MCPs
|
||||||
|
- Contribute to team goals and deliverables
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ model: sonnet
|
|||||||
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
tools: Read, Write, Edit, Bash, Glob, Grep, ToolSearch
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3
|
- desk-crm-v3
|
||||||
- gitea
|
- gitea
|
||||||
@@ -43,7 +45,6 @@ collaborates_with:
|
|||||||
created: "2025-01-13"
|
created: "2025-01-13"
|
||||||
updated: "2026-02-04"
|
updated: "2026-02-04"
|
||||||
author: "Descomplicar®"
|
author: "Descomplicar®"
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Next.js Specialist
|
# Next.js Specialist
|
||||||
@@ -176,4 +177,56 @@ Especialista em desenvolvimento Next.js moderno com App Router, React Server Com
|
|||||||
|
|
||||||
### Recommended for dev
|
### Recommended for dev
|
||||||
- **ssh-unified** - SSH, SFTP, servidor management
|
- **ssh-unified** - SSH, SFTP, servidor management
|
||||||
- **gitea** - Repositórios Git, issues, P
|
- **gitea** - Repositórios Git, issues, PRs
|
||||||
|
- **context7** - Context documentation
|
||||||
|
- **n8n** - Workflows automation
|
||||||
|
- **filesystem** - Ficheiros locais
|
||||||
|
- **magic** - AI-powered UI component generation (tipo v0.dev)
|
||||||
|
- **** - Knowledge base AI
|
||||||
|
- **mem0** - Mem0 (Tier 2, `mcp__mem0__*`) + IJFW (Tier 1, automático via hooks)
|
||||||
|
- **cwp** - CentOS Web Panel
|
||||||
|
- **puppeteer** - Browser automation
|
||||||
|
|
||||||
|
### All Available (32 total)
|
||||||
|
desk-crm-v3, moloni, google-analytics, google-workspace, imap, outline-api, youtube-research, youtube-uploader, gsc, lighthouse, mcp-time, mcp-mermaid, mcp-echarts, powerpoint, penpot, pixabay, pexels, tavily, elevenlabs, 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)
|
||||||
|
✓ **/wp-dev** - Desenvolvimento WordPress especializado - plugins, temas, WooCommerce. Usar para
|
||||||
|
- Invoke: `/wp-dev`
|
||||||
|
|
||||||
|
✓ **/php-dev** - Desenvolvimento PHP fullstack - Laravel, Symfony, APIs RESTful, arquitectura bac
|
||||||
|
- Invoke: `/php-dev`
|
||||||
|
|
||||||
|
✓ **/db-design** - Design de bases de dados - schema, optimização queries, MySQL/PostgreSQL, arquit
|
||||||
|
- Invoke: `/db-design`
|
||||||
|
|
||||||
|
✓ **/mcp-dev** - Desenvolvimento de servidores MCP - criar, configurar, testar e documentar MCPs
|
||||||
|
- Invoke: `/mcp-dev`
|
||||||
|
|
||||||
|
### Recommended for dev
|
||||||
|
- **/react-patterns** - Padrões React modernos - Hooks, Server Components, State Man
|
||||||
|
- **/nextjs** - Desenvolvimento Next.js moderno com App Router, Server Compo
|
||||||
|
- **/elementor** - Desenvolvimento avançado com Elementor Pro e Crocoblock - wi
|
||||||
|
- **/woocommerce** - Desenvolvimento e optimização de lojas WooCommerce - checkou
|
||||||
|
- **/crm-admin** - Administração e desenvolvimento Perfex CRM - gestão dados, m
|
||||||
|
- **/video** - Criar vídeos programáticos com Remotion e React. Gera intros
|
||||||
|
- **/doc-sync** - Sincronização automática de documentação Stack/Vault. Garant
|
||||||
|
- **/delegate** - Delegar tarefas dev para outros chats Claude com workflow co
|
||||||
|
- **/time** - Time tracking integrado com Desk CRM. Inicia e para timers e
|
||||||
|
|
||||||
|
### 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, /ui-ux-pro-max-repo, /brand-voice-generator, /frontend-design, /pptx-generator, /ui-ux-pro-max, /backup-strategies, /security-audit, /server-health, /wp-performance, /wp-update, /second-brain-repo, /ads, /marketing-strategy, /product, /skill-creator, /sop-creator, /calendar-manager, /interview, /today, /research, /youtube, /seo-audit, /seo-report, /archive, /metrics, /sdk
|
||||||
|
|
||||||
|
**Discovery:** Use the Skill tool to invoke skills.
|
||||||
|
**Example:** `Skill("skill-name")` invokes the skill.
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ user_invocable: true
|
|||||||
tier: 1
|
tier: 1
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
# Nota: MCPs como desk-crm-v3, moloni, easypanel, lighthouse, authentik, spaceship e youtube
|
||||||
|
# estão desligados por omissão — pedir activação via /mcp (regra 57) antes de os usar.
|
||||||
primary_mcps:
|
primary_mcps:
|
||||||
- desk-crm-v3 # Business operations
|
- desk-crm-v3 # Business operations
|
||||||
- gitea # Version control
|
- gitea # Version control
|
||||||
@@ -27,7 +29,7 @@ recommended_mcps:
|
|||||||
- n8n # Workflow automation
|
- n8n # Workflow automation
|
||||||
- filesystem # Local file operations
|
- filesystem # Local file operations
|
||||||
- magic # UI component generation
|
- magic # UI component generation
|
||||||
- mem0 # Long-term memory
|
- mem0 # Memória longo prazo (Tier 2) via Mem0
|
||||||
- cwp # Server management
|
- cwp # Server management
|
||||||
- puppeteer # Browser automation
|
- puppeteer # Browser automation
|
||||||
|
|
||||||
@@ -81,7 +83,6 @@ collaborations:
|
|||||||
created: 2026-02-04
|
created: 2026-02-04
|
||||||
last_updated: 2026-02-04
|
last_updated: 2026-02-04
|
||||||
quality_score: 85
|
quality_score: 85
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# PHP Fullstack Engineer Descomplicar
|
# PHP Fullstack Engineer Descomplicar
|
||||||
@@ -146,4 +147,7 @@ Especialista senior em desenvolvimento PHP fullstack com expertise em frameworks
|
|||||||
### Workflow 3: Performance Optimization
|
### Workflow 3: Performance Optimization
|
||||||
1. Audit queries (Query Monitor, Debug Bar)
|
1. Audit queries (Query Monitor, Debug Bar)
|
||||||
2. Implement caching (Redis/Memcached)
|
2. Implement caching (Redis/Memcached)
|
||||||
3. Lazy loading e eager lo
|
3. Lazy loading e eager loading (N+1)
|
||||||
|
4. Queue jobs pesados (Laravel Queue)
|
||||||
|
5. CDN para assets
|
||||||
|
6. Profiling com Xdebug/Blackfire
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ description: >
|
|||||||
Mede Core Web Vitals e performance antes/depois de alterações. Detecta regressões.
|
Mede Core Web Vitals e performance antes/depois de alterações. Detecta regressões.
|
||||||
Usar antes e depois de qualquer alteração a WP, WooCommerce, Next.js ou infra.
|
Usar antes e depois de qualquer alteração a WP, WooCommerce, Next.js ou infra.
|
||||||
Baseado no gstack /benchmark. Eixo 2B.
|
Baseado no gstack /benchmark. Eixo 2B.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /benchmark — Performance Antes/Depois
|
# /benchmark — Performance Antes/Depois
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ description: >
|
|||||||
Monitorização pós-deploy — detecta regressões em produção. Verifica que o deploy
|
Monitorização pós-deploy — detecta regressões em produção. Verifica que o deploy
|
||||||
não quebrou nada crítico nos 15min seguintes. Baseado no gstack /canary. Eixo 2B.
|
não quebrou nada crítico nos 15min seguintes. Baseado no gstack /canary. Eixo 2B.
|
||||||
Usar após qualquer deploy em produção.
|
Usar após qualquer deploy em produção.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /canary — Monitorização Pós-Deploy
|
# /canary — Monitorização Pós-Deploy
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: chrome
|
name: chrome
|
||||||
description: Integração com Chrome para automação browser — navegar páginas, preencher formulários, debug de consola, extracção de dados, testes e screenshots.
|
description: Integração com Chrome para automação browser — navegar páginas, preencher formulários, debug de consola, extracção de dados, testes e screenshots.
|
||||||
allowed-tools: Bash, Read, Write, Glob
|
allowed-tools: Bash, Read, Write, Glob
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /chrome - Chrome Browser Integration
|
# /chrome - Chrome Browser Integration
|
||||||
@@ -155,4 +154,162 @@ crm.example.com, clica "Adicionar Contacto" e preenche nome, email e telefone.
|
|||||||
### Escrever em Google Docs
|
### Escrever em Google Docs
|
||||||
```
|
```
|
||||||
Escreve um resumo do projecto baseado nos commits recentes
|
Escreve um resumo do projecto baseado nos commits recentes
|
||||||
no Google D
|
no Google Doc docs.google.com/document/d/abc123
|
||||||
|
```
|
||||||
|
|
||||||
|
### Extrair dados de paginas
|
||||||
|
```
|
||||||
|
Vai a pagina de produtos e extrai nome, preco e disponibilidade
|
||||||
|
de cada item. Guarda como CSV.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Workflow multi-site
|
||||||
|
```
|
||||||
|
Verifica o meu calendario para reunioes amanha, depois para cada
|
||||||
|
reuniao com participante externo, pesquisa o site da empresa.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gravar demo GIF (Chrome extensao)
|
||||||
|
```
|
||||||
|
Grava um GIF mostrando o fluxo de checkout, desde adicionar item
|
||||||
|
ao carrinho ate a pagina de confirmacao.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Performance audit (DevTools MCP)
|
||||||
|
```
|
||||||
|
Abre a pagina example.com, grava um performance trace durante 5 segundos
|
||||||
|
e analisa LCP, TBT e CLS. Sugere melhorias.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debug network (DevTools MCP)
|
||||||
|
```
|
||||||
|
Abre a pagina do dashboard, monitoriza os requests de API
|
||||||
|
e identifica quais estao a falhar ou demorar mais de 2 segundos.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Inspeccionar acessibilidade (DevTools MCP)
|
||||||
|
```
|
||||||
|
Abre a pagina de contacto e verifica a arvore de acessibilidade.
|
||||||
|
Identifica elementos sem labels ou roles ARIA incorrectos.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debug CSS (DevTools MCP)
|
||||||
|
```
|
||||||
|
Abre a landing page e inspecciona os estilos computados do hero section.
|
||||||
|
Verifica se o layout esta correcto em diferentes larguras.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Comparacao de Backends
|
||||||
|
|
||||||
|
| Feature | Chrome Extensao | DevTools MCP | Puppeteer MCP | WebFetch |
|
||||||
|
|---------|----------------|--------------|---------------|----------|
|
||||||
|
| Sessoes autenticadas | Sim | Sim (se Chrome aberto) | Nao | Nao |
|
||||||
|
| Janela visivel | Sim | Sim | Opcional | N/A |
|
||||||
|
| Sites privados | Sim (se logado) | Sim (se logado) | Nao | Nao |
|
||||||
|
| Headless | Nao | Opcional | Sim | Sim |
|
||||||
|
| Interaccao UI | Completa | Completa | Completa | Nao |
|
||||||
|
| Screenshots | Sim | Sim | Sim | Nao |
|
||||||
|
| Gravar GIF | Sim | Nao | Nao | Nao |
|
||||||
|
| Console logs | Sim | Sim (filtrados) | Sim | Nao |
|
||||||
|
| Network requests | Nao | Sim (detalhado) | Limitado | Nao |
|
||||||
|
| Performance traces | Nao | Sim (LCP/TBT/CLS) | Nao | Nao |
|
||||||
|
| Acessibilidade | Nao | Sim (a11y tree) | Nao | Nao |
|
||||||
|
| DOM/CSS inspection | Basico | Completo | Basico | Nao |
|
||||||
|
| Storage inspection | Nao | Sim (cookies/LS) | Nao | Nao |
|
||||||
|
| Requer extensao | Sim | Nao | Nao | Nao |
|
||||||
|
| Requer Chrome aberto | Sim | Sim (porta 9222) | Nao | Nao |
|
||||||
|
| Context usage | Alto | Medio | Medio | Baixo |
|
||||||
|
|
||||||
|
**Regra de decisao:**
|
||||||
|
- Precisa de login/sessao + GIF? -> **Chrome Extensao**
|
||||||
|
- Debug/performance/network? -> **DevTools MCP**
|
||||||
|
- Automacao headless CI/CD? -> **Puppeteer MCP**
|
||||||
|
- Apenas ler conteudo publico? -> **WebFetch**
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### DevTools MCP nao conecta
|
||||||
|
1. Verificar Chrome lancado com `--remote-debugging-port=9222`
|
||||||
|
2. Testar: `curl http://localhost:9222/json/version`
|
||||||
|
3. Verificar MCP registado: `claude mcp list`
|
||||||
|
4. Reiniciar sessao Claude Code
|
||||||
|
|
||||||
|
### DevTools MCP sem ferramentas
|
||||||
|
1. Verificar: `claude mcp list | grep chrome-devtools`
|
||||||
|
2. Se nao aparece: `claude mcp add chrome-devtools --scope user -- npx -y chrome-devtools-mcp@latest`
|
||||||
|
3. Reiniciar sessao Claude Code
|
||||||
|
|
||||||
|
### Extensao nao detectada (Chrome extensao)
|
||||||
|
1. Verificar extensao em `chrome://extensions`
|
||||||
|
2. Verificar versao Claude Code: `claude --version` (>= 2.0.73)
|
||||||
|
3. Confirmar Chrome aberto
|
||||||
|
4. `/chrome` -> "Reconnect extension"
|
||||||
|
5. Reiniciar Chrome E Claude Code
|
||||||
|
|
||||||
|
### Browser nao responde
|
||||||
|
1. Verificar se modal dialog esta a bloquear (alert/confirm/prompt)
|
||||||
|
2. Dispensar dialog manualmente, depois continuar
|
||||||
|
3. Pedir nova tab
|
||||||
|
4. Desactivar/reactivar extensao em `chrome://extensions`
|
||||||
|
|
||||||
|
### Conexao cai em sessoes longas
|
||||||
|
- Service worker do Chrome pode ficar idle
|
||||||
|
- Solucao: `/chrome` -> "Reconnect extension"
|
||||||
|
|
||||||
|
### Erros comuns
|
||||||
|
|
||||||
|
| Erro | Causa | Solucao |
|
||||||
|
|------|-------|---------|
|
||||||
|
| "Browser extension is not connected" | Native host nao alcanca extensao | Reiniciar Chrome + Claude, `/chrome` reconnect |
|
||||||
|
| "Extension not detected" | Extensao nao instalada/desactivada | Instalar/activar em `chrome://extensions` |
|
||||||
|
| "No tab available" | Accao antes de tab pronta | Pedir nova tab e retry |
|
||||||
|
| "Receiving end does not exist" | Service worker idle | `/chrome` -> "Reconnect extension" |
|
||||||
|
|
||||||
|
### Verificar instalacao
|
||||||
|
```bash
|
||||||
|
# Chrome instalado?
|
||||||
|
google-chrome --version
|
||||||
|
|
||||||
|
# Claude Code compativel?
|
||||||
|
claude --version
|
||||||
|
|
||||||
|
# --- DevTools MCP ---
|
||||||
|
# MCP registado?
|
||||||
|
claude mcp list | grep chrome-devtools
|
||||||
|
|
||||||
|
# Chrome com debugging activo?
|
||||||
|
curl -s http://localhost:9222/json/version | head -5
|
||||||
|
|
||||||
|
# --- Chrome Extensao ---
|
||||||
|
# Native host configurado?
|
||||||
|
cat ~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json
|
||||||
|
|
||||||
|
# Host script existe?
|
||||||
|
ls -la ~/.claude/chrome/chrome-native-host
|
||||||
|
```
|
||||||
|
|
||||||
|
## Permissoes de Sites
|
||||||
|
|
||||||
|
Permissoes por site sao geridas na **extensao Chrome** (nao no Claude Code):
|
||||||
|
- Abrir extensao Claude in Chrome -> Settings
|
||||||
|
- Configurar quais sites podem ser acedidos
|
||||||
|
- Bloqueios aplicam-se a todas as sessoes
|
||||||
|
|
||||||
|
## Nota de Performance
|
||||||
|
|
||||||
|
Activar Chrome por defeito **aumenta consumo de context window** porque as ferramentas browser ficam sempre carregadas. Se notar degradacao:
|
||||||
|
1. Desactivar default: `/chrome` -> desactivar
|
||||||
|
2. Usar `claude --chrome` apenas quando necessario
|
||||||
|
3. Preferir WebFetch para leituras simples de paginas publicas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: db-design
|
name: db-design
|
||||||
description: Design e optimização de schemas de base de dados — normalização, índices, planos de migração e particionamento.
|
description: Design e optimização de schemas de base de dados — normalização, índices, planos de migração e particionamento.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Database Design Specialist
|
# Database Design Specialist
|
||||||
@@ -20,8 +19,8 @@ Skill para design e optimização de bases de dados seguindo padrões Descomplic
|
|||||||
|
|
||||||
### 1. Pesquisa Inicial
|
### 1. Pesquisa Inicial
|
||||||
```
|
```
|
||||||
mcp__mem_search_memories "database [projecto]"
|
mcp__mem0__search_memories "database [projecto]"
|
||||||
mcp__wikijs__search_pages "database schema [sistema]"
|
/knowledge (router Hub QR/PROC) + mcp__mem0__search_memories "database schema [sistema]"
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Verificar Schema Existente
|
### 2. Verificar Schema Existente
|
||||||
@@ -189,4 +188,68 @@ Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes data
|
|||||||
### Como Consultar
|
### Como Consultar
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// Pesquisar optimiza
|
// Pesquisar optimização MySQL
|
||||||
|
mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments({
|
||||||
|
dataset_id: "7f63ec0c-6321-488c-b107-980140199850",
|
||||||
|
query: "mysql index optimization slow query"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Padrões de design de bases de dados
|
||||||
|
mcp__dify-kb__dify_kb_retrieve_segments({
|
||||||
|
dataset_id: "e7c7decc-0ded-4351-ab14-b110b3c38ec9",
|
||||||
|
query: "database schema design patterns"
|
||||||
|
})
|
||||||
|
|
||||||
|
// RDS e bases de dados AWS
|
||||||
|
mcp__dify-kb__dify_kb_retrieve_segments({
|
||||||
|
dataset_id: "cc7f000a-ad86-49b6-b59b-179e65f8a229",
|
||||||
|
query: "RDS aurora postgresql"
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Quando Consultar
|
||||||
|
|
||||||
|
- Antes de desenhar novo schema
|
||||||
|
- Ao optimizar queries lentas
|
||||||
|
- Para escolher tipo de índice adequado
|
||||||
|
- Decidir entre MySQL/PostgreSQL
|
||||||
|
- Configurar bases de dados em cloud
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versão**: 1.0.0 | **Autor**: 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
|
||||||
|
|
||||||
|
|
||||||
|
## 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 nova linha após cada erro corrigido.*
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
name: dep-audit
|
name: dep-audit
|
||||||
description: Auditoria de dependencias para projectos Node.js e PHP — vulnerabilidades, pacotes desactualizados, seguranca de ambiente e verificacao de tipos. Obrigatoria antes de commits.
|
description: Auditoria de dependencias para projectos Node.js e PHP — vulnerabilidades, pacotes desactualizados, seguranca de ambiente e verificacao de tipos. Obrigatoria antes de commits.
|
||||||
disable-model-invocation: true
|
disable-model-invocation: true
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /dep-audit - Dependency Security Audit Pre-Commit
|
# /dep-audit - Dependency Security Audit Pre-Commit
|
||||||
@@ -211,4 +210,266 @@ Mitigation: [explanation]
|
|||||||
Fix critical/high vulnerabilities first. See PROC-DEV-SEC-001 for guidance.
|
Fix critical/high vulnerabilities first. See PROC-DEV-SEC-001 for guidance.
|
||||||
```
|
```
|
||||||
|
|
||||||
### 8. Criar F
|
### 8. Criar Flag
|
||||||
|
|
||||||
|
```bash
|
||||||
|
touch ~/.claude-work/.last-security-audit
|
||||||
|
```
|
||||||
|
|
||||||
|
**Propósito:** Hook pre-git-commit verifica esta flag. Se existe e < 1h, permite commit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Recomendações Específicas
|
||||||
|
|
||||||
|
### Para Vulnerabilidades Transitivas
|
||||||
|
|
||||||
|
**Exemplo: form-data via together-ai**
|
||||||
|
|
||||||
|
```json
|
||||||
|
// package.json
|
||||||
|
{
|
||||||
|
"pnpm": {
|
||||||
|
"overrides": {
|
||||||
|
"form-data": ">=4.0.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Depois:
|
||||||
|
```bash
|
||||||
|
pnpm install
|
||||||
|
pnpm audit # Verificar se resolveu
|
||||||
|
```
|
||||||
|
|
||||||
|
### Para Dependências Incompatíveis
|
||||||
|
|
||||||
|
**Exemplo: @langchain/core desactualizado**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# langchain pina versão antiga
|
||||||
|
# Solução: instalar como dependência explícita
|
||||||
|
pnpm add @langchain/core@latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Para Vulnerabilidades Críticas
|
||||||
|
|
||||||
|
**Workflow:**
|
||||||
|
1. Verificar se há fix disponível
|
||||||
|
2. Se sim: actualizar
|
||||||
|
3. Se não: avaliar alternativas ao package
|
||||||
|
4. Se nenhuma: escalar para Security Compliance Specialist
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Output Examples
|
||||||
|
|
||||||
|
### Exemplo 1: Clean (0 vulnerabilities)
|
||||||
|
|
||||||
|
```
|
||||||
|
## Security Audit Report
|
||||||
|
|
||||||
|
**Status:** ✅ SAFE
|
||||||
|
**Data:** 2026-02-14 03:00
|
||||||
|
|
||||||
|
| Category | Status |
|
||||||
|
|----------|--------|
|
||||||
|
| Vulnerabilities | 0 (all categories) ✅ |
|
||||||
|
| Outdated Packages | 3 (1 major) |
|
||||||
|
| Environment Safety | ✅ Placeholders only |
|
||||||
|
| Type Safety | ✅ 0 errors |
|
||||||
|
|
||||||
|
### Outdated Packages
|
||||||
|
|
||||||
|
**Framework:**
|
||||||
|
- next: 16.1.6 → 16.2.0 (minor)
|
||||||
|
|
||||||
|
**Action Required:** Optional - update at convenience
|
||||||
|
|
||||||
|
### Safe to Commit?
|
||||||
|
|
||||||
|
✅ **YES** - No security issues found
|
||||||
|
|
||||||
|
Created flag: ~/.claude-work/.last-security-audit
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo 2: Transitivas (precisa overrides)
|
||||||
|
|
||||||
|
```
|
||||||
|
## Security Audit Report
|
||||||
|
|
||||||
|
**Status:** ⚠️ ISSUES FOUND (transitivas)
|
||||||
|
**Data:** 2026-02-14 03:00
|
||||||
|
|
||||||
|
| Category | Status |
|
||||||
|
|----------|--------|
|
||||||
|
| Vulnerabilities | 0 critical, 0 high, 2 moderate, 1 low |
|
||||||
|
| Outdated Packages | 5 (2 major) |
|
||||||
|
| Environment Safety | ✅ Placeholders only |
|
||||||
|
| Type Safety | ✅ 0 errors |
|
||||||
|
|
||||||
|
### Vulnerabilities Detail
|
||||||
|
|
||||||
|
#### Moderate (2)
|
||||||
|
- lodash@4.17.21 (via @platejs/ai)
|
||||||
|
- **Issue:** Prototype pollution
|
||||||
|
- **Patched:** >=4.17.23
|
||||||
|
- **Action:** Override
|
||||||
|
|
||||||
|
- undici@6.22.0 (via @platejs/juice → cheerio)
|
||||||
|
- **Issue:** Resource exhaustion
|
||||||
|
- **Patched:** >=6.23.0
|
||||||
|
- **Action:** Override
|
||||||
|
|
||||||
|
#### Low (1)
|
||||||
|
- cookie@0.6.0 (via @auth/core)
|
||||||
|
- **Issue:** Out of bounds characters
|
||||||
|
- **Patched:** >=0.7.0
|
||||||
|
- **Action:** Override
|
||||||
|
|
||||||
|
### Recommended Fix
|
||||||
|
|
||||||
|
Add to package.json:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"pnpm": {
|
||||||
|
"overrides": {
|
||||||
|
"lodash": ">=4.17.23",
|
||||||
|
"undici": ">=6.23.0",
|
||||||
|
"cookie": ">=0.7.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run: `pnpm install && pnpm audit`
|
||||||
|
|
||||||
|
### Safe to Commit?
|
||||||
|
|
||||||
|
⚠️ **YES (with documentation)**
|
||||||
|
|
||||||
|
Document in commit message:
|
||||||
|
- 3 moderate/low vulnerabilities (all transitivas)
|
||||||
|
- Fixed with pnpm.overrides
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemplo 3: Critical (bloquear commit)
|
||||||
|
|
||||||
|
```
|
||||||
|
## Security Audit Report
|
||||||
|
|
||||||
|
**Status:** ❌ CRITICAL
|
||||||
|
**Data:** 2026-02-14 03:00
|
||||||
|
|
||||||
|
| Category | Status |
|
||||||
|
|----------|--------|
|
||||||
|
| Vulnerabilities | 1 critical, 0 high, 0 moderate, 0 low |
|
||||||
|
| Outdated Packages | 8 (3 major) |
|
||||||
|
| Environment Safety | ✅ Placeholders only |
|
||||||
|
| Type Safety | ✅ 0 errors |
|
||||||
|
|
||||||
|
### Vulnerabilities Detail
|
||||||
|
|
||||||
|
#### Critical (1)
|
||||||
|
- form-data@4.0.3 (via together-ai → @types/node-fetch)
|
||||||
|
- **Issue:** Unsafe random function in boundary selection
|
||||||
|
- **Patched:** >=4.0.4
|
||||||
|
- **Action:** Override OR replace together-ai
|
||||||
|
|
||||||
|
### Immediate Action Required
|
||||||
|
|
||||||
|
**Option 1: Override (quick fix)**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"pnpm": {
|
||||||
|
"overrides": {
|
||||||
|
"form-data": ">=4.0.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Option 2: Evaluate alternatives**
|
||||||
|
- Check if together-ai is essential
|
||||||
|
- Evaluate alternative AI SDKs
|
||||||
|
- Contact Security Compliance Specialist
|
||||||
|
|
||||||
|
### Safe to Commit?
|
||||||
|
|
||||||
|
❌ **NO** - Fix critical vulnerability first
|
||||||
|
|
||||||
|
DO NOT create flag. DO NOT commit.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integration
|
||||||
|
|
||||||
|
### Com Hook pre-git-commit
|
||||||
|
|
||||||
|
Hook verifica:
|
||||||
|
```bash
|
||||||
|
~/.claude-work/.last-security-audit
|
||||||
|
```
|
||||||
|
|
||||||
|
Se ficheiro existe e < 1h → permite commit
|
||||||
|
Se não existe ou > 1h → **BLOQUEIA** commit
|
||||||
|
|
||||||
|
### Com /time
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Workflow típico
|
||||||
|
/time start 1446 # Tarefa Desk
|
||||||
|
# ... fazer alterações ...
|
||||||
|
/dep-audit # Antes de commit
|
||||||
|
git commit
|
||||||
|
/time stop
|
||||||
|
```
|
||||||
|
|
||||||
|
### Com /worklog
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# No worklog, mencionar se audit foi executado
|
||||||
|
/worklog
|
||||||
|
# → Incluirá "Security audit: ✅ 0 vulnerabilities"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Escalação
|
||||||
|
|
||||||
|
| Situação | Escalar Para |
|
||||||
|
|----------|--------------|
|
||||||
|
| Vulnerabilidades críticas não corrigíveis | Security Compliance Specialist |
|
||||||
|
| Dúvidas sobre overrides | Development Lead |
|
||||||
|
| Múltiplas vulnerabilidades altas | /dep-audit + manual review |
|
||||||
|
| Alternativas a packages | Research Analyst |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referências
|
||||||
|
|
||||||
|
- [CLAUDE.md Regra #47](/home/ealmeida/.claude/CLAUDE.md)
|
||||||
|
- [PROC-DEV-SEC-001](/media/ealmeida/Dados/Hub/06-Operacoes/Procedimentos/D7-Tecnologia/Seguranca/PROC-DEV-SEC-001-Security-Audit.md)
|
||||||
|
- [Agent dev-helper v2.1](/home/ealmeida/.claude/plugins/marketplaces/descomplicar-plugins/dev-tools/agents/dev-helper.md)
|
||||||
|
- [NPM Audit](https://docs.npmjs.com/cli/v10/commands/npm-audit)
|
||||||
|
- [PNPM Audit](https://pnpm.io/cli/audit)
|
||||||
|
- [Composer Audit](https://getcomposer.org/doc/03-cli.md#audit)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Skill v1.1** | 12-03-2026 | Descomplicar® | Renomeado de /security-check para /dep-audit
|
||||||
|
**Security First** - Zero vulnerabilities ou documentadas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ description: "Gera diagramas de arquitectura, fluxo, ER e sequência em três fo
|
|||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
created: 2026-04-04
|
created: 2026-04-04
|
||||||
tools: [mcp__claude_ai_Excalidraw__export_to_excalidraw, mcp__mcp-mermaid__generate, Write, Bash]
|
tools: [mcp__claude_ai_Excalidraw__export_to_excalidraw, mcp__mcp-mermaid__generate, Write, Bash]
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill: /diagrama
|
# Skill: /diagrama
|
||||||
@@ -150,4 +149,119 @@ Usar o MCP `mcp__claude_ai_Excalidraw__export_to_excalidraw` para diagramas no e
|
|||||||
|
|
||||||
## Geração Mermaid
|
## Geração Mermaid
|
||||||
|
|
||||||
Usar o MCP `mcp__mcp-mermaid__generate`
|
Usar o MCP `mcp__mcp-mermaid__generate` para diagramas como código.
|
||||||
|
|
||||||
|
### Tipos suportados
|
||||||
|
|
||||||
|
**Fluxograma:**
|
||||||
|
```
|
||||||
|
flowchart TD
|
||||||
|
A[Início] --> B{Condição}
|
||||||
|
B -->|Sim| C[Acção]
|
||||||
|
B -->|Não| D[Fim]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Sequência:**
|
||||||
|
```
|
||||||
|
sequenceDiagram
|
||||||
|
participant U as Utilizador
|
||||||
|
participant A as Claude Code
|
||||||
|
participant N as n8n
|
||||||
|
U->>A: Pedido
|
||||||
|
A->>N: Trigger workflow
|
||||||
|
N-->>A: Resultado
|
||||||
|
A-->>U: Resposta
|
||||||
|
```
|
||||||
|
|
||||||
|
**ER:**
|
||||||
|
```
|
||||||
|
erDiagram
|
||||||
|
CLIENTE ||--o{ PROJECTO : tem
|
||||||
|
PROJECTO ||--o{ TAREFA : contém
|
||||||
|
TAREFA {
|
||||||
|
int id
|
||||||
|
string nome
|
||||||
|
string estado
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Arquitectura de componentes (C4):**
|
||||||
|
```
|
||||||
|
C4Context
|
||||||
|
title Stack Descomplicar
|
||||||
|
Person(eal, "Emanuel", "Utilizador principal")
|
||||||
|
System(cc, "Claude Code", "Interface interactiva")
|
||||||
|
System(clip, "Paperclip", "Agentes autónomos")
|
||||||
|
System(n8n, "n8n", "Automação determinística")
|
||||||
|
Rel(eal, cc, "usa directamente")
|
||||||
|
Rel(cc, clip, "delega tarefas complexas")
|
||||||
|
Rel(cc, n8n, "activa workflows")
|
||||||
|
```
|
||||||
|
|
||||||
|
### Guardar output
|
||||||
|
|
||||||
|
Guardar o código Mermaid em `/media/ealmeida/Dados/Hub/tmp/diagramas/NOME.mmd` e renderizar para SVG/PNG via MCP.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Templates prontos por contexto
|
||||||
|
|
||||||
|
### Arquitectura StackDescomplicar
|
||||||
|
|
||||||
|
Gerar diagrama com as três camadas do stack:
|
||||||
|
- **Camada 1:** Claude Code (trabalho interactivo)
|
||||||
|
- **Camada 2:** n8n (automação determinística)
|
||||||
|
- **Camada 3:** Paperclip (raciocínio autónomo)
|
||||||
|
|
||||||
|
### Proposta comercial
|
||||||
|
|
||||||
|
Diagrama da solução para o cliente com:
|
||||||
|
- Infra-estrutura actual (antes)
|
||||||
|
- Solução proposta (depois)
|
||||||
|
- Componentes e integrações
|
||||||
|
|
||||||
|
### Pipeline de dados
|
||||||
|
|
||||||
|
Diagrama de fluxo com:
|
||||||
|
- Fonte → Processamento → Destino
|
||||||
|
- Triggers, transformações, outputs
|
||||||
|
|
||||||
|
### Diagrama ER Desk CRM
|
||||||
|
|
||||||
|
Entidades principais: Lead → Customer → Estimate → Invoice → Payment
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Boas práticas
|
||||||
|
|
||||||
|
- **Máx. 10-15 elementos** por diagrama (mais → dividir em sub-diagramas)
|
||||||
|
- **Labels curtos:** 2-4 palavras por elemento
|
||||||
|
- **Setas com label** quando o fluxo não é óbvio
|
||||||
|
- **Cor consistente** por tipo de componente (seguir paleta Descomplicar)
|
||||||
|
- **Nome descritivo** no ficheiro (não "diagrama1.drawio")
|
||||||
|
- **Guardar em Hub/tmp/diagramas/** para fácil acesso
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Instalar draw.io MCP (opcional, para funcionalidades avançadas)
|
||||||
|
|
||||||
|
O vídeo #210 do Stack_Pesquisa_Videos.md demonstra um MCP draw.io com geração automática a partir de análise de código. Para instalar:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Verificar se há MCP draw.io disponível no gateway
|
||||||
|
# Ver: Hub/04-Stack/claude-code-context-hygiene.md → secção MCPs
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternativa: usar draw.io via browser em https://app.diagrams.net (gratuito, sem instalação) e importar o `.drawio` gerado.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: docx
|
name: docx
|
||||||
description: "Criação, edição e análise de documentos Word (.docx). Versão light para heartbeats."
|
description: "Criação, edição e análise de documentos Word (.docx). Versão light para heartbeats."
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# DOCX — Referência Rápida
|
# DOCX — Referência Rápida
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: docx
|
name: docx
|
||||||
description: "Criacao, edicao e analise de documentos Word (.docx). Usar quando o utilizador mencionar \"Word\", \".docx\", ou pedir documentos profissionais com formatacao (indices, cabecalhos, numeracao de paginas, letterheads). Inclui extracao de conteudo, insercao/substituicao de imagens, find-and-replace, tracked changes, comentarios, e conversao de conteudo para Word. Aplica-se a relatorios, memorandos, cartas, templates e propostas em formato .docx. NAO usar para PDFs, folhas de calculo, Google Docs, ou tarefas de codigo nao relacionadas."
|
description: "Criacao, edicao e analise de documentos Word (.docx). Usar quando o utilizador mencionar \"Word\", \".docx\", ou pedir documentos profissionais com formatacao (indices, cabecalhos, numeracao de paginas, letterheads). Inclui extracao de conteudo, insercao/substituicao de imagens, find-and-replace, tracked changes, comentarios, e conversao de conteudo para Word. Aplica-se a relatorios, memorandos, cartas, templates e propostas em formato .docx. NAO usar para PDFs, folhas de calculo, Google Docs, ou tarefas de codigo nao relacionadas."
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Criacao, edicao e analise de documentos DOCX
|
# Criacao, edicao e analise de documentos DOCX
|
||||||
@@ -142,4 +141,384 @@ const doc = new Document({
|
|||||||
```javascript
|
```javascript
|
||||||
// ERRADO - nunca inserir caracteres de bullet manualmente
|
// ERRADO - nunca inserir caracteres de bullet manualmente
|
||||||
new Paragraph({ children: [new TextRun("* Item")] }) // MAU
|
new Paragraph({ children: [new TextRun("* Item")] }) // MAU
|
||||||
new Paragraph({ children: [new TextRun("\u2022 Item")]
|
new Paragraph({ children: [new TextRun("\u2022 Item")] }) // MAU
|
||||||
|
|
||||||
|
// CORRECTO - usar config numbering com LevelFormat.BULLET
|
||||||
|
const doc = new Document({
|
||||||
|
numbering: {
|
||||||
|
config: [
|
||||||
|
{ reference: "bullets",
|
||||||
|
levels: [{ level: 0, format: LevelFormat.BULLET, text: "\u2022", alignment: AlignmentType.LEFT,
|
||||||
|
style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
|
||||||
|
{ reference: "numbers",
|
||||||
|
levels: [{ level: 0, format: LevelFormat.DECIMAL, text: "%1.", alignment: AlignmentType.LEFT,
|
||||||
|
style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
sections: [{
|
||||||
|
children: [
|
||||||
|
new Paragraph({ numbering: { reference: "bullets", level: 0 },
|
||||||
|
children: [new TextRun("Item com bullet")] }),
|
||||||
|
new Paragraph({ numbering: { reference: "numbers", level: 0 },
|
||||||
|
children: [new TextRun("Item numerado")] }),
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
|
||||||
|
// ATENCAO: Cada reference cria numeracao INDEPENDENTE
|
||||||
|
// Mesma reference = continua (1,2,3 depois 4,5,6)
|
||||||
|
// Reference diferente = reinicia (1,2,3 depois 1,2,3)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tabelas
|
||||||
|
|
||||||
|
**CRITICO: Tabelas precisam de larguras duplas** - definir tanto `columnWidths` na tabela COMO `width` em cada celula. Sem ambos, tabelas renderizam incorrectamente em algumas plataformas.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// CRITICO: Definir sempre largura da tabela para renderizacao consistente
|
||||||
|
// CRITICO: Usar ShadingType.CLEAR (nao SOLID) para evitar fundos pretos
|
||||||
|
const border = { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" };
|
||||||
|
const borders = { top: border, bottom: border, left: border, right: border };
|
||||||
|
|
||||||
|
new Table({
|
||||||
|
width: { size: 9026, type: WidthType.DXA }, // Sempre usar DXA (percentagens quebram no Google Docs)
|
||||||
|
columnWidths: [4513, 4513], // Deve somar a largura da tabela (DXA: 1440 = 1 polegada)
|
||||||
|
rows: [
|
||||||
|
new TableRow({
|
||||||
|
children: [
|
||||||
|
new TableCell({
|
||||||
|
borders,
|
||||||
|
width: { size: 4513, type: WidthType.DXA }, // Tambem definir em cada celula
|
||||||
|
shading: { fill: "D5E8F0", type: ShadingType.CLEAR }, // CLEAR e nao SOLID
|
||||||
|
margins: { top: 80, bottom: 80, left: 120, right: 120 }, // Padding da celula (interno, nao adicionado a largura)
|
||||||
|
children: [new Paragraph({ children: [new TextRun("Celula")] })]
|
||||||
|
})
|
||||||
|
]
|
||||||
|
})
|
||||||
|
]
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
**Calculo de largura da tabela:**
|
||||||
|
|
||||||
|
Usar sempre `WidthType.DXA` — `WidthType.PERCENTAGE` quebra no Google Docs.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Largura da tabela = soma de columnWidths = largura do conteudo
|
||||||
|
// A4 com margens de 1": 11906 - 2880 = 9026 DXA
|
||||||
|
width: { size: 9026, type: WidthType.DXA },
|
||||||
|
columnWidths: [7000, 2026] // Deve somar a largura da tabela
|
||||||
|
```
|
||||||
|
|
||||||
|
**Regras de largura:**
|
||||||
|
- **Usar sempre `WidthType.DXA`** — nunca `WidthType.PERCENTAGE` (incompativel com Google Docs)
|
||||||
|
- Largura da tabela deve igualar a soma de `columnWidths`
|
||||||
|
- `width` da celula deve corresponder ao respectivo `columnWidth`
|
||||||
|
- `margins` da celula sao padding interno - reduzem a area de conteudo, nao adicionam a largura
|
||||||
|
- Para tabelas full-width: usar largura de conteudo (largura pagina menos margens esquerda e direita)
|
||||||
|
|
||||||
|
### Imagens
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// CRITICO: parametro type e OBRIGATORIO
|
||||||
|
new Paragraph({
|
||||||
|
children: [new ImageRun({
|
||||||
|
type: "png", // Obrigatorio: png, jpg, jpeg, gif, bmp, svg
|
||||||
|
data: fs.readFileSync("image.png"),
|
||||||
|
transformation: { width: 200, height: 150 },
|
||||||
|
altText: { title: "Titulo", description: "Desc", name: "Nome" } // Os tres sao obrigatorios
|
||||||
|
})]
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Quebras de pagina
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// CRITICO: PageBreak deve estar dentro de um Paragraph
|
||||||
|
new Paragraph({ children: [new PageBreak()] })
|
||||||
|
|
||||||
|
// Ou usar pageBreakBefore
|
||||||
|
new Paragraph({ pageBreakBefore: true, children: [new TextRun("Nova pagina")] })
|
||||||
|
```
|
||||||
|
|
||||||
|
### Indice (Table of Contents)
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// CRITICO: Headings devem usar HeadingLevel APENAS - sem estilos custom
|
||||||
|
new TableOfContents("Indice", { hyperlink: true, headingStyleRange: "1-3" })
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cabecalhos/Rodapes
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
sections: [{
|
||||||
|
properties: {
|
||||||
|
page: { margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } } // 1440 = 1 polegada
|
||||||
|
},
|
||||||
|
headers: {
|
||||||
|
default: new Header({ children: [new Paragraph({ children: [new TextRun("Cabecalho")] })] })
|
||||||
|
},
|
||||||
|
footers: {
|
||||||
|
default: new Footer({ children: [new Paragraph({
|
||||||
|
children: [new TextRun("Pagina "), new TextRun({ children: [PageNumber.CURRENT] })]
|
||||||
|
})] })
|
||||||
|
},
|
||||||
|
children: [/* conteudo */]
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Regras criticas para docx-js
|
||||||
|
|
||||||
|
- **Definir tamanho de pagina explicitamente** - docx-js assume A4; para documentos PT/EU, A4 (11906 x 16838 DXA) e o padrao correcto
|
||||||
|
- **Paisagem: passar dimensoes retrato** - docx-js troca largura/altura internamente; passar lado curto como `width`, lado longo como `height`, e definir `orientation: PageOrientation.LANDSCAPE`
|
||||||
|
- **Nunca usar `\n`** - usar elementos Paragraph separados
|
||||||
|
- **Nunca usar bullets unicode** - usar `LevelFormat.BULLET` com config numbering
|
||||||
|
- **PageBreak deve estar em Paragraph** - standalone cria XML invalido
|
||||||
|
- **ImageRun requer `type`** - especificar sempre png/jpg/etc
|
||||||
|
- **Definir sempre `width` da tabela com DXA** - nunca usar `WidthType.PERCENTAGE` (quebra no Google Docs)
|
||||||
|
- **Tabelas precisam de larguras duplas** - array `columnWidths` E `width` da celula, ambos devem corresponder
|
||||||
|
- **Largura tabela = soma de columnWidths** - para DXA, garantir que somam exactamente
|
||||||
|
- **Adicionar sempre margins nas celulas** - usar `margins: { top: 80, bottom: 80, left: 120, right: 120 }` para padding legivel
|
||||||
|
- **Usar `ShadingType.CLEAR`** - nunca SOLID para shading de tabelas
|
||||||
|
- **TOC requer HeadingLevel apenas** - sem estilos custom nos paragrafos de heading
|
||||||
|
- **Override built-in styles** - usar IDs exactos: "Heading1", "Heading2", etc.
|
||||||
|
- **Incluir `outlineLevel`** - necessario para TOC (0 para H1, 1 para H2, etc.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Editar documentos existentes
|
||||||
|
|
||||||
|
**Seguir os 3 passos por ordem.**
|
||||||
|
|
||||||
|
### Passo 1: Descompactar
|
||||||
|
```bash
|
||||||
|
python scripts/office/unpack.py document.docx unpacked/
|
||||||
|
```
|
||||||
|
Extrai XML, pretty-prints, funde runs adjacentes e converte smart quotes para entidades XML (`“` etc.) para sobreviverem a edicao. Usar `--merge-runs false` para saltar a fusao de runs.
|
||||||
|
|
||||||
|
### Passo 2: Editar XML
|
||||||
|
|
||||||
|
Editar ficheiros em `unpacked/word/`. Ver Referencia XML abaixo para padroes.
|
||||||
|
|
||||||
|
**Usar "Claude" como autor** para tracked changes e comentarios, salvo se o utilizador pedir outro nome.
|
||||||
|
|
||||||
|
**Usar a ferramenta Edit directamente para substituicao de strings. Nao escrever scripts Python.** Scripts introduzem complexidade desnecessaria. A ferramenta Edit mostra exactamente o que esta a ser substituido.
|
||||||
|
|
||||||
|
**CRITICO: Usar smart quotes para novo conteudo.** Ao adicionar texto com apostrofos ou aspas, usar entidades XML para produzir smart quotes:
|
||||||
|
```xml
|
||||||
|
<!-- Usar estas entidades para tipografia profissional -->
|
||||||
|
<w:t>Here’s a quote: “Hello”</w:t>
|
||||||
|
```
|
||||||
|
| Entidade | Caractere |
|
||||||
|
|----------|-----------|
|
||||||
|
| `‘` | ' (aspas simples esquerda) |
|
||||||
|
| `’` | ' (aspas simples direita / apostrofo) |
|
||||||
|
| `“` | " (aspas duplas esquerda) |
|
||||||
|
| `”` | " (aspas duplas direita) |
|
||||||
|
|
||||||
|
**Adicionar comentarios:** Usar `comment.py` para tratar boilerplate em multiplos ficheiros XML (texto deve ser XML pre-escaped):
|
||||||
|
```bash
|
||||||
|
python scripts/comment.py unpacked/ 0 "Texto do comentario com & e ’"
|
||||||
|
python scripts/comment.py unpacked/ 1 "Texto de resposta" --parent 0 # resposta ao comentario 0
|
||||||
|
python scripts/comment.py unpacked/ 0 "Texto" --author "Autor Custom" # nome de autor custom
|
||||||
|
```
|
||||||
|
Depois adicionar marcadores ao document.xml (ver Comentarios na Referencia XML).
|
||||||
|
|
||||||
|
### Passo 3: Recompactar
|
||||||
|
```bash
|
||||||
|
python scripts/office/pack.py unpacked/ output.docx --original document.docx
|
||||||
|
```
|
||||||
|
Valida com auto-reparacao, condensa XML e cria DOCX. Usar `--validate false` para saltar.
|
||||||
|
|
||||||
|
**Auto-reparacao corrige:**
|
||||||
|
- `durableId` >= 0x7FFFFFFF (regenera ID valido)
|
||||||
|
- `xml:space="preserve"` em falta em `<w:t>` com whitespace
|
||||||
|
|
||||||
|
**Auto-reparacao nao corrige:**
|
||||||
|
- XML malformado, nesting de elementos invalido, relacoes em falta, violacoes de schema
|
||||||
|
|
||||||
|
### Erros comuns
|
||||||
|
|
||||||
|
- **Substituir elementos `<w:r>` inteiros**: Ao adicionar tracked changes, substituir o bloco `<w:r>...</w:r>` completo com `<w:del>...<w:ins>...` como siblings. Nao injectar tags de tracked change dentro de um run.
|
||||||
|
- **Preservar formatacao `<w:rPr>`**: Copiar o bloco `<w:rPr>` do run original para os runs de tracked change para manter bold, tamanho de fonte, etc.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencia XML
|
||||||
|
|
||||||
|
### Conformidade com schema
|
||||||
|
|
||||||
|
- **Ordem de elementos em `<w:pPr>`**: `<w:pStyle>`, `<w:numPr>`, `<w:spacing>`, `<w:ind>`, `<w:jc>`, `<w:rPr>` por ultimo
|
||||||
|
- **Whitespace**: Adicionar `xml:space="preserve"` a `<w:t>` com espacos no inicio/fim
|
||||||
|
- **RSIDs**: Devem ser hex de 8 digitos (ex: `00AB1234`)
|
||||||
|
|
||||||
|
### Tracked Changes
|
||||||
|
|
||||||
|
**Insercao:**
|
||||||
|
```xml
|
||||||
|
<w:ins w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z">
|
||||||
|
<w:r><w:t>texto inserido</w:t></w:r>
|
||||||
|
</w:ins>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Eliminacao:**
|
||||||
|
```xml
|
||||||
|
<w:del w:id="2" w:author="Claude" w:date="2025-01-01T00:00:00Z">
|
||||||
|
<w:r><w:delText>texto eliminado</w:delText></w:r>
|
||||||
|
</w:del>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Dentro de `<w:del>`**: Usar `<w:delText>` em vez de `<w:t>`, e `<w:delInstrText>` em vez de `<w:instrText>`.
|
||||||
|
|
||||||
|
**Edicoes minimas** - marcar apenas o que muda:
|
||||||
|
```xml
|
||||||
|
<!-- Alterar "30 dias" para "60 dias" -->
|
||||||
|
<w:r><w:t>O prazo e de </w:t></w:r>
|
||||||
|
<w:del w:id="1" w:author="Claude" w:date="...">
|
||||||
|
<w:r><w:delText>30</w:delText></w:r>
|
||||||
|
</w:del>
|
||||||
|
<w:ins w:id="2" w:author="Claude" w:date="...">
|
||||||
|
<w:r><w:t>60</w:t></w:r>
|
||||||
|
</w:ins>
|
||||||
|
<w:r><w:t> dias.</w:t></w:r>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Eliminar paragrafos/itens de lista inteiros** - ao remover TODO o conteudo de um paragrafo, marcar tambem o paragraph mark como eliminado para fundir com o proximo paragrafo. Adicionar `<w:del/>` dentro de `<w:pPr><w:rPr>`:
|
||||||
|
```xml
|
||||||
|
<w:p>
|
||||||
|
<w:pPr>
|
||||||
|
<w:numPr>...</w:numPr> <!-- numeracao de lista se presente -->
|
||||||
|
<w:rPr>
|
||||||
|
<w:del w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z"/>
|
||||||
|
</w:rPr>
|
||||||
|
</w:pPr>
|
||||||
|
<w:del w:id="2" w:author="Claude" w:date="2025-01-01T00:00:00Z">
|
||||||
|
<w:r><w:delText>Conteudo inteiro do paragrafo a ser eliminado...</w:delText></w:r>
|
||||||
|
</w:del>
|
||||||
|
</w:p>
|
||||||
|
```
|
||||||
|
Sem o `<w:del/>` em `<w:pPr><w:rPr>`, aceitar alteracoes deixa um paragrafo/item de lista vazio.
|
||||||
|
|
||||||
|
**Rejeitar insercao de outro autor** - aninhar eliminacao dentro da insercao:
|
||||||
|
```xml
|
||||||
|
<w:ins w:author="Maria" w:id="5">
|
||||||
|
<w:del w:author="Claude" w:id="10">
|
||||||
|
<w:r><w:delText>texto inserido por ela</w:delText></w:r>
|
||||||
|
</w:del>
|
||||||
|
</w:ins>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Restaurar eliminacao de outro autor** - adicionar insercao depois (nao modificar a eliminacao):
|
||||||
|
```xml
|
||||||
|
<w:del w:author="Maria" w:id="5">
|
||||||
|
<w:r><w:delText>texto eliminado</w:delText></w:r>
|
||||||
|
</w:del>
|
||||||
|
<w:ins w:author="Claude" w:id="10">
|
||||||
|
<w:r><w:t>texto eliminado</w:t></w:r>
|
||||||
|
</w:ins>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Comentarios
|
||||||
|
|
||||||
|
Apos executar `comment.py` (ver Passo 2), adicionar marcadores ao document.xml. Para respostas, usar flag `--parent` e aninhar marcadores dentro dos do pai.
|
||||||
|
|
||||||
|
**CRITICO: `<w:commentRangeStart>` e `<w:commentRangeEnd>` sao siblings de `<w:r>`, nunca dentro de `<w:r>`.**
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<!-- Marcadores de comentario sao filhos directos de w:p, nunca dentro de w:r -->
|
||||||
|
<w:commentRangeStart w:id="0"/>
|
||||||
|
<w:del w:id="1" w:author="Claude" w:date="2025-01-01T00:00:00Z">
|
||||||
|
<w:r><w:delText>eliminado</w:delText></w:r>
|
||||||
|
</w:del>
|
||||||
|
<w:r><w:t> mais texto</w:t></w:r>
|
||||||
|
<w:commentRangeEnd w:id="0"/>
|
||||||
|
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="0"/></w:r>
|
||||||
|
|
||||||
|
<!-- Comentario 0 com resposta 1 aninhada dentro -->
|
||||||
|
<w:commentRangeStart w:id="0"/>
|
||||||
|
<w:commentRangeStart w:id="1"/>
|
||||||
|
<w:r><w:t>texto</w:t></w:r>
|
||||||
|
<w:commentRangeEnd w:id="1"/>
|
||||||
|
<w:commentRangeEnd w:id="0"/>
|
||||||
|
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="0"/></w:r>
|
||||||
|
<w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="1"/></w:r>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Imagens
|
||||||
|
|
||||||
|
1. Adicionar ficheiro de imagem a `word/media/`
|
||||||
|
2. Adicionar relacao a `word/_rels/document.xml.rels`:
|
||||||
|
```xml
|
||||||
|
<Relationship Id="rId5" Type=".../image" Target="media/image1.png"/>
|
||||||
|
```
|
||||||
|
3. Adicionar content type a `[Content_Types].xml`:
|
||||||
|
```xml
|
||||||
|
<Default Extension="png" ContentType="image/png"/>
|
||||||
|
```
|
||||||
|
4. Referenciar no document.xml:
|
||||||
|
```xml
|
||||||
|
<w:drawing>
|
||||||
|
<wp:inline>
|
||||||
|
<wp:extent cx="914400" cy="914400"/> <!-- EMUs: 914400 = 1 polegada -->
|
||||||
|
<a:graphic>
|
||||||
|
<a:graphicData uri=".../picture">
|
||||||
|
<pic:pic>
|
||||||
|
<pic:blipFill><a:blip r:embed="rId5"/></pic:blipFill>
|
||||||
|
</pic:pic>
|
||||||
|
</a:graphicData>
|
||||||
|
</a:graphic>
|
||||||
|
</wp:inline>
|
||||||
|
</w:drawing>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dependencias
|
||||||
|
|
||||||
|
- **pandoc**: Extracao de texto
|
||||||
|
- **docx**: `npm install -g docx` (novos documentos)
|
||||||
|
- **LibreOffice**: Conversao PDF (auto-configurado para ambientes sandbox via `scripts/office/soffice.py`)
|
||||||
|
- **Poppler**: `pdftoppm` para imagens
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integracao Descomplicar
|
||||||
|
|
||||||
|
### MCPs disponiveis
|
||||||
|
|
||||||
|
| MCP | Uso |
|
||||||
|
|-----|-----|
|
||||||
|
| `mcp__filesystem__*` | Ler/escrever ficheiros .docx locais, listar directorios |
|
||||||
|
| `mcp__google-workspace__*` | Upload para Google Drive, conversao para Google Docs |
|
||||||
|
| `mcp__ssh-unified__*` | Operacoes em ficheiros .docx em servidores remotos |
|
||||||
|
|
||||||
|
### Workflow tipico
|
||||||
|
|
||||||
|
1. **Criar documento** com docx-js conforme instrucoes acima
|
||||||
|
2. **Validar** com `scripts/office/validate.py`
|
||||||
|
3. **Guardar** via `mcp__filesystem__write_file` ou directamente no path do projecto
|
||||||
|
4. **Upload** (opcional) via `mcp__google-workspace__drive_upload_file` para partilha com cliente
|
||||||
|
|
||||||
|
### Convencoes Descomplicar
|
||||||
|
|
||||||
|
- **Formato de data** em documentos: DD-MM-YYYY (ex: 06-03-2026)
|
||||||
|
- **Formato monetario**: 1.234,56 EUR (separador milhar ponto, decimal virgula)
|
||||||
|
- **Fonte padrao**: Arial 12pt
|
||||||
|
- **Tamanho pagina padrao**: A4 (11906 x 16838 DXA)
|
||||||
|
- **Autor para tracked changes**: "Claude" (salvo indicacao contraria)
|
||||||
|
- **Idioma do documento**: PT-PT salvo indicacao contraria
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versao**: 1.0.0 | **Autor**: 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.*
|
||||||
|
|||||||
Symlink
+1
@@ -0,0 +1 @@
|
|||||||
|
/home/ealmeida/.claude/plugins/anthropic-claude-code/plugins/frontend-design/skills/frontend-design
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: nextjs
|
name: nextjs
|
||||||
description: Desenvolvimento Next.js moderno (13+) com App Router, Server Components, rotas API e deployment seguindo padroes Descomplicar.
|
description: Desenvolvimento Next.js moderno (13+) com App Router, Server Components, rotas API e deployment seguindo padroes Descomplicar.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /nextjs - Next.js Development
|
# /nextjs - Next.js Development
|
||||||
@@ -23,20 +22,18 @@ mcp__notebooklm__notebook_query({
|
|||||||
|
|
||||||
## Regra #48 - Dev Container (OBRIGATÓRIO)
|
## Regra #48 - Dev Container (OBRIGATÓRIO)
|
||||||
|
|
||||||
**TODOS os projectos Next.js devem ser desenvolvidos no container dev.**
|
**TODOS os projectos Next.js são desenvolvidos LOCALMENTE no desktop (regra 48 — CT 102 extinto em 20-04-2026).**
|
||||||
|
|
||||||
```
|
```
|
||||||
SSH: server="dev" (mcp__ssh-unified__ssh_execute)
|
Ambiente: Bash local no desktop (sem SSH)
|
||||||
Path: /root/Dev/<projecto>
|
Path: /media/ealmeida/Dados/Dev/<projecto>
|
||||||
Sync: auto -> /media/ealmeida/Dados/Dev/<projecto> (Syncthing)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Workflow:**
|
**Workflow:**
|
||||||
1. `mcp__ssh-unified__ssh_execute server:"dev" command:"mkdir -p /root/Dev/<projecto>"`
|
1. `mkdir -p /media/ealmeida/Dados/Dev/<projecto>` (Bash local)
|
||||||
2. Desenvolver e testar no container
|
2. Desenvolver e testar no container
|
||||||
3. `npm run build` no container antes de deploy
|
3. `npm run build` no container antes de deploy
|
||||||
4. Deploy via EasyPanel
|
4. Deploy via EasyPanel
|
||||||
5. Syncthing propaga automaticamente
|
|
||||||
|
|
||||||
**NUNCA:** `npx create-next-app` directamente no PC local para projectos colaborativos.
|
**NUNCA:** `npx create-next-app` directamente no PC local para projectos colaborativos.
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: pdf
|
name: pdf
|
||||||
description: Processamento de ficheiros PDF — leitura, extracção, merge, split, OCR, formulários. Versão light para heartbeats.
|
description: Processamento de ficheiros PDF — leitura, extracção, merge, split, OCR, formulários. Versão light para heartbeats.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# PDF — Referência Rápida
|
# PDF — Referência Rápida
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: pdf
|
name: pdf
|
||||||
description: Processamento completo de ficheiros PDF — leitura, extraccao de texto/tabelas, merge, split, watermarks, encriptacao, OCR, criacao e preenchimento de formularios.
|
description: Processamento completo de ficheiros PDF — leitura, extraccao de texto/tabelas, merge, split, watermarks, encriptacao, OCR, criacao e preenchimento de formularios.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# PDF Processing Guide
|
# PDF Processing Guide
|
||||||
@@ -194,4 +193,616 @@ Para texto desenhado com canvas (nao Paragraph), ajustar manualmente o tamanho d
|
|||||||
pdftotext input.pdf output.txt
|
pdftotext input.pdf output.txt
|
||||||
|
|
||||||
# Extract text preserving layout
|
# Extract text preserving layout
|
||||||
pdftotext -layout
|
pdftotext -layout input.pdf output.txt
|
||||||
|
|
||||||
|
# Extract specific pages
|
||||||
|
pdftotext -f 1 -l 5 input.pdf output.txt # Pages 1-5
|
||||||
|
```
|
||||||
|
|
||||||
|
### qpdf
|
||||||
|
```bash
|
||||||
|
# Merge PDFs
|
||||||
|
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
|
||||||
|
|
||||||
|
# Split pages
|
||||||
|
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
|
||||||
|
qpdf input.pdf --pages . 6-10 -- pages6-10.pdf
|
||||||
|
|
||||||
|
# Rotate pages
|
||||||
|
qpdf input.pdf output.pdf --rotate=+90:1 # Rotate page 1 by 90 degrees
|
||||||
|
|
||||||
|
# Remove password
|
||||||
|
qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
### pdftk (if available)
|
||||||
|
```bash
|
||||||
|
# Merge
|
||||||
|
pdftk file1.pdf file2.pdf cat output merged.pdf
|
||||||
|
|
||||||
|
# Split
|
||||||
|
pdftk input.pdf burst
|
||||||
|
|
||||||
|
# Rotate
|
||||||
|
pdftk input.pdf rotate 1east output rotated.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tarefas comuns
|
||||||
|
|
||||||
|
### Extrair texto de PDFs digitalizados (OCR)
|
||||||
|
```python
|
||||||
|
# Requires: pip install pytesseract pdf2image
|
||||||
|
import pytesseract
|
||||||
|
from pdf2image import convert_from_path
|
||||||
|
|
||||||
|
# Convert PDF to images
|
||||||
|
images = convert_from_path('scanned.pdf')
|
||||||
|
|
||||||
|
# OCR each page
|
||||||
|
text = ""
|
||||||
|
for i, image in enumerate(images):
|
||||||
|
text += f"Page {i+1}:\n"
|
||||||
|
text += pytesseract.image_to_string(image)
|
||||||
|
text += "\n\n"
|
||||||
|
|
||||||
|
print(text)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adicionar watermark
|
||||||
|
```python
|
||||||
|
from pypdf import PdfReader, PdfWriter
|
||||||
|
|
||||||
|
# Create watermark (or load existing)
|
||||||
|
watermark = PdfReader("watermark.pdf").pages[0]
|
||||||
|
|
||||||
|
# Apply to all pages
|
||||||
|
reader = PdfReader("document.pdf")
|
||||||
|
writer = PdfWriter()
|
||||||
|
|
||||||
|
for page in reader.pages:
|
||||||
|
page.merge_page(watermark)
|
||||||
|
writer.add_page(page)
|
||||||
|
|
||||||
|
with open("watermarked.pdf", "wb") as output:
|
||||||
|
writer.write(output)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Extrair imagens
|
||||||
|
```bash
|
||||||
|
# Using pdfimages (poppler-utils)
|
||||||
|
pdfimages -j input.pdf output_prefix
|
||||||
|
|
||||||
|
# This extracts all images as output_prefix-000.jpg, output_prefix-001.jpg, etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Proteccao por password
|
||||||
|
```python
|
||||||
|
from pypdf import PdfReader, PdfWriter
|
||||||
|
|
||||||
|
reader = PdfReader("input.pdf")
|
||||||
|
writer = PdfWriter()
|
||||||
|
|
||||||
|
for page in reader.pages:
|
||||||
|
writer.add_page(page)
|
||||||
|
|
||||||
|
# Add password
|
||||||
|
writer.encrypt("userpassword", "ownerpassword")
|
||||||
|
|
||||||
|
with open("encrypted.pdf", "wb") as output:
|
||||||
|
writer.write(output)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Referencia rapida
|
||||||
|
|
||||||
|
| Tarefa | Melhor ferramenta | Comando/codigo |
|
||||||
|
|--------|-------------------|----------------|
|
||||||
|
| Merge PDFs | pypdf | `writer.add_page(page)` |
|
||||||
|
| Split PDFs | pypdf | One page per file |
|
||||||
|
| Extrair texto | pdfplumber | `page.extract_text()` |
|
||||||
|
| Extrair tabelas | pdfplumber | `page.extract_tables()` |
|
||||||
|
| Criar PDFs | reportlab | Canvas or Platypus |
|
||||||
|
| Merge CLI | qpdf | `qpdf --empty --pages ...` |
|
||||||
|
| OCR scanned PDFs | pytesseract | Convert to image first |
|
||||||
|
| Preencher formularios | pypdf ou annotations | Ver seccao abaixo |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Preenchimento de formularios
|
||||||
|
|
||||||
|
**Obrigatorio: seguir estes passos por ordem. Nao saltar para codigo directamente.**
|
||||||
|
|
||||||
|
Primeiro verificar se o PDF tem campos preenchíveis. Executar a partir da pasta de scripts desta skill:
|
||||||
|
`python scripts/check_fillable_fields.py <file.pdf>`
|
||||||
|
|
||||||
|
Consoante o resultado, seguir a seccao "Campos preenchíveis" ou "Campos nao preenchíveis".
|
||||||
|
|
||||||
|
### Campos preenchíveis
|
||||||
|
|
||||||
|
Se o PDF tiver campos de formulario nativos:
|
||||||
|
|
||||||
|
1. Extrair informacao dos campos:
|
||||||
|
`python scripts/extract_form_field_info.py <input.pdf> <field_info.json>`
|
||||||
|
|
||||||
|
O JSON resultante contem campos com esta estrutura:
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"field_id": "(ID unico do campo)",
|
||||||
|
"page": "(numero da pagina, 1-based)",
|
||||||
|
"rect": "[left, bottom, right, top]",
|
||||||
|
"type": "text | checkbox | radio_group | choice"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Para **checkboxes**: propriedades `checked_value` e `unchecked_value`.
|
||||||
|
Para **radio groups**: lista `radio_options` com `value` e `rect`.
|
||||||
|
Para **choice fields**: lista `choice_options` com `value` e `text`.
|
||||||
|
|
||||||
|
2. Converter PDF para imagens para analise visual:
|
||||||
|
`python scripts/convert_pdf_to_images.py <file.pdf> <output_directory>`
|
||||||
|
Analisar as imagens para determinar o proposito de cada campo.
|
||||||
|
|
||||||
|
3. Criar `field_values.json`:
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"field_id": "last_name",
|
||||||
|
"description": "Apelido do utilizador",
|
||||||
|
"page": 1,
|
||||||
|
"value": "Silva"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field_id": "Checkbox12",
|
||||||
|
"description": "Checkbox para maiores de 18",
|
||||||
|
"page": 1,
|
||||||
|
"value": "/On"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Preencher:
|
||||||
|
`python scripts/fill_fillable_fields.py <input.pdf> <field_values.json> <output.pdf>`
|
||||||
|
|
||||||
|
### Campos nao preenchíveis
|
||||||
|
|
||||||
|
Se o PDF nao tiver campos nativos, usar anotacoes de texto. Tentar primeiro extraccao por estrutura (mais preciso), depois estimativa visual como fallback.
|
||||||
|
|
||||||
|
#### Passo 1: extraccao por estrutura
|
||||||
|
|
||||||
|
`python scripts/extract_form_structure.py <input.pdf> form_structure.json`
|
||||||
|
|
||||||
|
Extrai labels de texto, linhas horizontais e checkboxes com coordenadas exactas.
|
||||||
|
|
||||||
|
**Se form_structure.json tiver labels significativos** -> usar abordagem A (estrutura).
|
||||||
|
**Se o PDF for digitalizado/imagem** -> usar abordagem B (visual).
|
||||||
|
|
||||||
|
#### Abordagem A: coordenadas por estrutura (preferida)
|
||||||
|
|
||||||
|
Analisar form_structure.json e identificar:
|
||||||
|
- **Label groups**: elementos de texto adjacentes que formam um label
|
||||||
|
- **Row structure**: labels com `top` similar estao na mesma linha
|
||||||
|
- **Field columns**: areas de entrada comecam apos o label (x0 = label.x1 + gap)
|
||||||
|
- **Checkboxes**: usar coordenadas directamente do JSON
|
||||||
|
|
||||||
|
Criar fields.json com `pdf_width`/`pdf_height`:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"pages": [
|
||||||
|
{"page_number": 1, "pdf_width": 612, "pdf_height": 792}
|
||||||
|
],
|
||||||
|
"form_fields": [
|
||||||
|
{
|
||||||
|
"page_number": 1,
|
||||||
|
"description": "Campo apelido",
|
||||||
|
"field_label": "Apelido",
|
||||||
|
"label_bounding_box": [43, 63, 87, 73],
|
||||||
|
"entry_bounding_box": [92, 63, 260, 79],
|
||||||
|
"entry_text": {"text": "Silva", "font_size": 10}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Abordagem B: estimativa visual (fallback)
|
||||||
|
|
||||||
|
1. Converter PDF para imagens:
|
||||||
|
`python scripts/convert_pdf_to_images.py <input.pdf> <images_dir/>`
|
||||||
|
|
||||||
|
2. Identificar campos e posicoes aproximadas nas imagens.
|
||||||
|
|
||||||
|
3. Refinar com zoom (ImageMagick):
|
||||||
|
```bash
|
||||||
|
magick <page_image> -crop <width>x<height>+<x>+<y> +repage <crop_output.png>
|
||||||
|
```
|
||||||
|
|
||||||
|
Converter coordenadas do crop de volta para coordenadas da imagem completa:
|
||||||
|
- full_x = crop_x + crop_offset_x
|
||||||
|
- full_y = crop_y + crop_offset_y
|
||||||
|
|
||||||
|
4. Criar fields.json com `image_width`/`image_height`.
|
||||||
|
|
||||||
|
#### Abordagem hibrida
|
||||||
|
|
||||||
|
Quando a extraccao por estrutura funciona para a maioria dos campos mas falta alguns:
|
||||||
|
1. Usar abordagem A para campos detectados
|
||||||
|
2. Usar abordagem B para campos em falta
|
||||||
|
3. Converter todas as coordenadas para PDF:
|
||||||
|
- pdf_x = image_x * (pdf_width / image_width)
|
||||||
|
- pdf_y = image_y * (pdf_height / image_height)
|
||||||
|
4. Usar sistema de coordenadas unico com `pdf_width`/`pdf_height`
|
||||||
|
|
||||||
|
#### Validacao e preenchimento
|
||||||
|
|
||||||
|
Validar bounding boxes antes de preencher:
|
||||||
|
`python scripts/check_bounding_boxes.py fields.json`
|
||||||
|
|
||||||
|
Preencher o formulario:
|
||||||
|
`python scripts/fill_pdf_form_with_annotations.py <input.pdf> fields.json <output.pdf>`
|
||||||
|
|
||||||
|
Verificar resultado:
|
||||||
|
`python scripts/convert_pdf_to_images.py <output.pdf> <verify_images/>`
|
||||||
|
|
||||||
|
Criar imagem de validacao com bounding boxes sobrepostas:
|
||||||
|
`python scripts/create_validation_image.py <page_number> <fields.json> <input_image> <output_image>`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencia avancada
|
||||||
|
|
||||||
|
### pypdfium2 — rendering rapido
|
||||||
|
|
||||||
|
```python
|
||||||
|
import pypdfium2 as pdfium
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
# Load PDF
|
||||||
|
pdf = pdfium.PdfDocument("document.pdf")
|
||||||
|
|
||||||
|
# Render page to image
|
||||||
|
page = pdf[0]
|
||||||
|
bitmap = page.render(scale=2.0, rotation=0)
|
||||||
|
img = bitmap.to_pil()
|
||||||
|
img.save("page_1.png", "PNG")
|
||||||
|
|
||||||
|
# Process multiple pages
|
||||||
|
for i, page in enumerate(pdf):
|
||||||
|
bitmap = page.render(scale=1.5)
|
||||||
|
img = bitmap.to_pil()
|
||||||
|
img.save(f"page_{i+1}.jpg", "JPEG", quality=90)
|
||||||
|
```
|
||||||
|
|
||||||
|
### pdfplumber — funcionalidades avancadas
|
||||||
|
|
||||||
|
#### Texto com coordenadas precisas
|
||||||
|
```python
|
||||||
|
import pdfplumber
|
||||||
|
|
||||||
|
with pdfplumber.open("document.pdf") as pdf:
|
||||||
|
page = pdf.pages[0]
|
||||||
|
|
||||||
|
# Extract all text with coordinates
|
||||||
|
chars = page.chars
|
||||||
|
for char in chars[:10]:
|
||||||
|
print(f"Char: '{char['text']}' at x:{char['x0']:.1f} y:{char['y0']:.1f}")
|
||||||
|
|
||||||
|
# Extract text by bounding box (left, top, right, bottom)
|
||||||
|
bbox_text = page.within_bbox((100, 100, 400, 200)).extract_text()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Tabelas complexas com settings customizados
|
||||||
|
```python
|
||||||
|
import pdfplumber
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
with pdfplumber.open("complex_table.pdf") as pdf:
|
||||||
|
page = pdf.pages[0]
|
||||||
|
|
||||||
|
table_settings = {
|
||||||
|
"vertical_strategy": "lines",
|
||||||
|
"horizontal_strategy": "lines",
|
||||||
|
"snap_tolerance": 3,
|
||||||
|
"intersection_tolerance": 15
|
||||||
|
}
|
||||||
|
tables = page.extract_tables(table_settings)
|
||||||
|
|
||||||
|
# Visual debugging for table extraction
|
||||||
|
img = page.to_image(resolution=150)
|
||||||
|
img.save("debug_layout.png")
|
||||||
|
```
|
||||||
|
|
||||||
|
### reportlab — relatorios profissionais com tabelas
|
||||||
|
|
||||||
|
```python
|
||||||
|
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
|
||||||
|
from reportlab.lib.styles import getSampleStyleSheet
|
||||||
|
from reportlab.lib import colors
|
||||||
|
|
||||||
|
data = [
|
||||||
|
['Produto', 'Q1', 'Q2', 'Q3', 'Q4'],
|
||||||
|
['Widgets', '120', '135', '142', '158'],
|
||||||
|
['Gadgets', '85', '92', '98', '105']
|
||||||
|
]
|
||||||
|
|
||||||
|
doc = SimpleDocTemplate("report.pdf")
|
||||||
|
elements = []
|
||||||
|
|
||||||
|
styles = getSampleStyleSheet()
|
||||||
|
title = Paragraph("Relatorio Trimestral de Vendas", styles['Title'])
|
||||||
|
elements.append(title)
|
||||||
|
|
||||||
|
table = Table(data)
|
||||||
|
table.setStyle(TableStyle([
|
||||||
|
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
|
||||||
|
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
|
||||||
|
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
|
||||||
|
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
|
||||||
|
('FONTSIZE', (0, 0), (-1, 0), 14),
|
||||||
|
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
|
||||||
|
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
|
||||||
|
('GRID', (0, 0), (-1, -1), 1, colors.black)
|
||||||
|
]))
|
||||||
|
elements.append(table)
|
||||||
|
|
||||||
|
doc.build(elements)
|
||||||
|
```
|
||||||
|
|
||||||
|
### JavaScript — pdf-lib (criacao e modificacao)
|
||||||
|
|
||||||
|
#### Load and Manipulate Existing PDF
|
||||||
|
```javascript
|
||||||
|
import { PDFDocument } from 'pdf-lib';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
|
async function manipulatePDF() {
|
||||||
|
const existingPdfBytes = fs.readFileSync('input.pdf');
|
||||||
|
const pdfDoc = await PDFDocument.load(existingPdfBytes);
|
||||||
|
|
||||||
|
const pageCount = pdfDoc.getPageCount();
|
||||||
|
const newPage = pdfDoc.addPage([600, 400]);
|
||||||
|
newPage.drawText('Added by pdf-lib', { x: 100, y: 300, size: 16 });
|
||||||
|
|
||||||
|
const pdfBytes = await pdfDoc.save();
|
||||||
|
fs.writeFileSync('modified.pdf', pdfBytes);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Advanced Merge and Split
|
||||||
|
```javascript
|
||||||
|
import { PDFDocument } from 'pdf-lib';
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
|
async function mergePDFs() {
|
||||||
|
const mergedPdf = await PDFDocument.create();
|
||||||
|
|
||||||
|
const pdf1 = await PDFDocument.load(fs.readFileSync('doc1.pdf'));
|
||||||
|
const pdf2 = await PDFDocument.load(fs.readFileSync('doc2.pdf'));
|
||||||
|
|
||||||
|
const pdf1Pages = await mergedPdf.copyPages(pdf1, pdf1.getPageIndices());
|
||||||
|
pdf1Pages.forEach(page => mergedPdf.addPage(page));
|
||||||
|
|
||||||
|
const pdf2Pages = await mergedPdf.copyPages(pdf2, [0, 2, 4]);
|
||||||
|
pdf2Pages.forEach(page => mergedPdf.addPage(page));
|
||||||
|
|
||||||
|
fs.writeFileSync('merged.pdf', await mergedPdf.save());
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Operacoes avancadas CLI
|
||||||
|
|
||||||
|
#### poppler-utils
|
||||||
|
```bash
|
||||||
|
# Text with bounding box coordinates
|
||||||
|
pdftotext -bbox-layout document.pdf output.xml
|
||||||
|
|
||||||
|
# High-resolution PNG conversion
|
||||||
|
pdftoppm -png -r 300 document.pdf output_prefix
|
||||||
|
|
||||||
|
# Specific page range with high resolution
|
||||||
|
pdftoppm -png -r 600 -f 1 -l 3 document.pdf high_res_pages
|
||||||
|
|
||||||
|
# Extract all embedded images with metadata
|
||||||
|
pdfimages -j -p document.pdf page_images
|
||||||
|
|
||||||
|
# List image info without extracting
|
||||||
|
pdfimages -list document.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
#### qpdf avancado
|
||||||
|
```bash
|
||||||
|
# Split PDF into groups of pages
|
||||||
|
qpdf --split-pages=3 input.pdf output_group_%02d.pdf
|
||||||
|
|
||||||
|
# Complex page ranges from multiple PDFs
|
||||||
|
qpdf --empty --pages doc1.pdf 1-3 doc2.pdf 5-7 doc3.pdf 2,4 -- combined.pdf
|
||||||
|
|
||||||
|
# Optimize for web (linearize)
|
||||||
|
qpdf --linearize input.pdf optimized.pdf
|
||||||
|
|
||||||
|
# Repair corrupted PDF
|
||||||
|
qpdf --check input.pdf
|
||||||
|
qpdf --fix-qdf damaged.pdf repaired.pdf
|
||||||
|
|
||||||
|
# Advanced encryption with permissions
|
||||||
|
qpdf --encrypt user_pass owner_pass 256 --print=none --modify=none -- input.pdf encrypted.pdf
|
||||||
|
|
||||||
|
# Check encryption status
|
||||||
|
qpdf --show-encryption encrypted.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
### Processamento em lote com error handling
|
||||||
|
|
||||||
|
```python
|
||||||
|
import os
|
||||||
|
import glob
|
||||||
|
from pypdf import PdfReader, PdfWriter
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def batch_process_pdfs(input_dir, operation='merge'):
|
||||||
|
pdf_files = glob.glob(os.path.join(input_dir, "*.pdf"))
|
||||||
|
|
||||||
|
if operation == 'merge':
|
||||||
|
writer = PdfWriter()
|
||||||
|
for pdf_file in pdf_files:
|
||||||
|
try:
|
||||||
|
reader = PdfReader(pdf_file)
|
||||||
|
for page in reader.pages:
|
||||||
|
writer.add_page(page)
|
||||||
|
logger.info(f"Processed: {pdf_file}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to process {pdf_file}: {e}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
with open("batch_merged.pdf", "wb") as output:
|
||||||
|
writer.write(output)
|
||||||
|
|
||||||
|
elif operation == 'extract_text':
|
||||||
|
for pdf_file in pdf_files:
|
||||||
|
try:
|
||||||
|
reader = PdfReader(pdf_file)
|
||||||
|
text = ""
|
||||||
|
for page in reader.pages:
|
||||||
|
text += page.extract_text()
|
||||||
|
|
||||||
|
output_file = pdf_file.replace('.pdf', '.txt')
|
||||||
|
with open(output_file, 'w', encoding='utf-8') as f:
|
||||||
|
f.write(text)
|
||||||
|
logger.info(f"Extracted text from: {pdf_file}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to extract text from {pdf_file}: {e}")
|
||||||
|
continue
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cropping avancado
|
||||||
|
|
||||||
|
```python
|
||||||
|
from pypdf import PdfWriter, PdfReader
|
||||||
|
|
||||||
|
reader = PdfReader("input.pdf")
|
||||||
|
writer = PdfWriter()
|
||||||
|
|
||||||
|
page = reader.pages[0]
|
||||||
|
page.mediabox.left = 50
|
||||||
|
page.mediabox.bottom = 50
|
||||||
|
page.mediabox.right = 550
|
||||||
|
page.mediabox.top = 750
|
||||||
|
|
||||||
|
writer.add_page(page)
|
||||||
|
with open("cropped.pdf", "wb") as output:
|
||||||
|
writer.write(output)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gestao de memoria para PDFs grandes
|
||||||
|
|
||||||
|
```python
|
||||||
|
def process_large_pdf(pdf_path, chunk_size=10):
|
||||||
|
reader = PdfReader(pdf_path)
|
||||||
|
total_pages = len(reader.pages)
|
||||||
|
|
||||||
|
for start_idx in range(0, total_pages, chunk_size):
|
||||||
|
end_idx = min(start_idx + chunk_size, total_pages)
|
||||||
|
writer = PdfWriter()
|
||||||
|
|
||||||
|
for i in range(start_idx, end_idx):
|
||||||
|
writer.add_page(reader.pages[i])
|
||||||
|
|
||||||
|
with open(f"chunk_{start_idx//chunk_size}.pdf", "wb") as output:
|
||||||
|
writer.write(output)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### PDFs encriptados
|
||||||
|
```python
|
||||||
|
from pypdf import PdfReader
|
||||||
|
|
||||||
|
try:
|
||||||
|
reader = PdfReader("encrypted.pdf")
|
||||||
|
if reader.is_encrypted:
|
||||||
|
reader.decrypt("password")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Failed to decrypt: {e}")
|
||||||
|
```
|
||||||
|
|
||||||
|
### PDFs corrompidos
|
||||||
|
```bash
|
||||||
|
qpdf --check corrupted.pdf
|
||||||
|
qpdf --replace-input corrupted.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
### Falha na extraccao de texto (fallback para OCR)
|
||||||
|
```python
|
||||||
|
import pytesseract
|
||||||
|
from pdf2image import convert_from_path
|
||||||
|
|
||||||
|
def extract_text_with_ocr(pdf_path):
|
||||||
|
images = convert_from_path(pdf_path)
|
||||||
|
text = ""
|
||||||
|
for i, image in enumerate(images):
|
||||||
|
text += pytesseract.image_to_string(image)
|
||||||
|
return text
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dicas de performance
|
||||||
|
|
||||||
|
1. **PDFs grandes**: usar streaming em vez de carregar tudo em memoria; `qpdf --split-pages` para dividir
|
||||||
|
2. **Extraccao de texto**: `pdftotext -bbox-layout` e o mais rapido; pdfplumber para tabelas
|
||||||
|
3. **Extraccao de imagens**: `pdfimages` e muito mais rapido que rendering de paginas
|
||||||
|
4. **Preenchimento de formularios**: pdf-lib mantem melhor a estrutura do formulario
|
||||||
|
5. **Memoria**: processar paginas individualmente com pypdfium2 para documentos grandes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integracao Descomplicar
|
||||||
|
|
||||||
|
### Caminhos frequentes para PDFs
|
||||||
|
|
||||||
|
| Localizacao | Caminho |
|
||||||
|
|-------------|---------|
|
||||||
|
| Documentos empresa | `/media/ealmeida/Dados/GDrive/Cloud/Descomplicar/` |
|
||||||
|
| Propostas | `/media/ealmeida/Dados/Hub/03-Propostas/` |
|
||||||
|
| Arquivo clientes | `/media/ealmeida/Dados/GDrive/Arquivo_de_Clientes/` |
|
||||||
|
| Knowledge Base | `/media/ealmeida/Dados/Hub/06-Operacoes/Knowledge-Base/PDFs/` |
|
||||||
|
| Backups | `/media/ealmeida/Externo/LocalBackups/` (espelhado p/ GDrive via rclone) |
|
||||||
|
| Temporarios | `~/.claude-work/` (limpar ao concluir) |
|
||||||
|
|
||||||
|
### MCPs relevantes
|
||||||
|
|
||||||
|
- **mcp__filesystem__read_file** / **write_file**: ler e escrever PDFs locais
|
||||||
|
- **mcp__filesystem__search_files**: encontrar PDFs no sistema
|
||||||
|
- **mcp__google-workspace__drive_search_files**: encontrar PDFs no Google Drive
|
||||||
|
- **mcp__google-workspace__drive_read_file_content**: ler conteudo de ficheiros no Drive
|
||||||
|
- **mcp__google-workspace__drive_upload_file**: enviar PDFs processados para o Drive
|
||||||
|
|
||||||
|
### Workflow tipico Descomplicar
|
||||||
|
|
||||||
|
1. Localizar PDF (filesystem ou Google Drive)
|
||||||
|
2. Descarregar para `~/.claude-work/` se necessario
|
||||||
|
3. Processar (extrair, merge, split, OCR, etc.)
|
||||||
|
4. Guardar resultado no destino final
|
||||||
|
5. Limpar temporarios de `~/.claude-work/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Licencas das bibliotecas
|
||||||
|
|
||||||
|
- **pypdf**: BSD | **pdfplumber**: MIT | **pypdfium2**: Apache/BSD | **reportlab**: BSD
|
||||||
|
- **poppler-utils**: GPL-2 | **qpdf**: Apache | **pdf-lib**: MIT | **pdfjs-dist**: Apache
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versao**: 1.0.0 | **Autor**: 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.*
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: php-dev
|
name: php-dev
|
||||||
description: Desenvolvimento PHP moderno com Laravel, Symfony e APIs RESTful — autenticação (JWT, OAuth, Sanctum), service classes e refactorização de código legacy seguindo padrões PSR.
|
description: Desenvolvimento PHP moderno com Laravel, Symfony e APIs RESTful — autenticação (JWT, OAuth, Sanctum), service classes e refactorização de código legacy seguindo padrões PSR.
|
||||||
allowed-tools: Read, Write, Edit, Bash, mcp__mem_search_memories, mcp__context7__get-library-docs, mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments
|
allowed-tools: Read, Write, Edit, Bash, mcp__mem0__search_memories, mcp__context7__get-library-docs, mcp__notebooklm__notebook_query, mcp__dify-kb__dify_kb_retrieve_segments
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# PHP Fullstack Engineer
|
# PHP Fullstack Engineer
|
||||||
@@ -34,7 +33,7 @@ mcp__notebooklm__notebook_query({
|
|||||||
|
|
||||||
Integrar insights do NotebookLM nas recomendações e decisões.
|
Integrar insights do NotebookLM nas recomendações e decisões.
|
||||||
|
|
||||||
> **Regra #48:** Projectos PHP/Laravel/Symfony devem ser desenvolvidos no **container dev** (`server:"dev"`, path `/root/Dev/<projecto>`). Sincroniza automaticamente com o PC local via Syncthing.
|
> **Regra #48:** Projectos PHP/Laravel/Symfony são desenvolvidos **localmente no desktop** em `/media/ealmeida/Dados/Dev/<projecto>` (Bash local, sem SSH — CT 102 extinto em 20-04-2026).
|
||||||
|
|
||||||
## Quando Usar
|
## Quando Usar
|
||||||
|
|
||||||
@@ -48,8 +47,8 @@ Integrar insights do NotebookLM nas recomendações e decisões.
|
|||||||
|
|
||||||
### 1. Pesquisa Inicial
|
### 1. Pesquisa Inicial
|
||||||
```
|
```
|
||||||
mcp__mem_search_memories "[keywords php/laravel]"
|
mcp__mem0__search_memories "[keywords php/laravel]"
|
||||||
mcp__wikijs__search_pages "[framework] best practices"
|
/knowledge (router Hub QR/PROC) + mcp__mem0__search_memories "[framework] best practices"
|
||||||
mcp__context7__get-library-docs para documentação actualizada
|
mcp__context7__get-library-docs para documentação actualizada
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -202,3 +201,206 @@ class ProductService
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function create(array $data): Product
|
public function create(array $data): Product
|
||||||
|
{
|
||||||
|
return $this->repository->create($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Repository
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Repositories;
|
||||||
|
|
||||||
|
use App\Models\Product;
|
||||||
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ProductRepository - Acesso a dados Produtos
|
||||||
|
*
|
||||||
|
* @author Descomplicar® Crescimento Digital
|
||||||
|
* @link https://descomplicar.pt
|
||||||
|
* @copyright 2025 Descomplicar®
|
||||||
|
*/
|
||||||
|
class ProductRepository
|
||||||
|
{
|
||||||
|
public function paginate(array $filters = []): LengthAwarePaginator
|
||||||
|
{
|
||||||
|
return Product::query()
|
||||||
|
->when($filters['category'] ?? null, fn($q, $cat) => $q->where('category_id', $cat))
|
||||||
|
->when($filters['active'] ?? null, fn($q, $active) => $q->where('active', $active))
|
||||||
|
->orderBy('created_at', 'desc')
|
||||||
|
->paginate($filters['per_page'] ?? 15);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create(array $data): Product
|
||||||
|
{
|
||||||
|
return Product::create($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Debugging PHP
|
||||||
|
|
||||||
|
### Xdebug
|
||||||
|
|
||||||
|
```php
|
||||||
|
// php.ini
|
||||||
|
zend_extension=xdebug.so
|
||||||
|
xdebug.mode=debug
|
||||||
|
xdebug.start_with_request=yes
|
||||||
|
xdebug.client_host=127.0.0.1
|
||||||
|
xdebug.client_port=9003
|
||||||
|
```
|
||||||
|
|
||||||
|
### Logging
|
||||||
|
|
||||||
|
```php
|
||||||
|
// Monolog exemplo
|
||||||
|
use Monolog\Logger;
|
||||||
|
use Monolog\Handler\StreamHandler;
|
||||||
|
|
||||||
|
$log = new Logger('app');
|
||||||
|
$log->pushHandler(new StreamHandler('logs/app.log', Logger::DEBUG));
|
||||||
|
|
||||||
|
$log->info('User logged in', ['user_id' => $userId]);
|
||||||
|
$log->error('Database error', ['exception' => $e->getMessage()]);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Profiling
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Com Blackfire
|
||||||
|
blackfire run php script.php
|
||||||
|
|
||||||
|
# Com Xhprof
|
||||||
|
php -d extension=xhprof.so script.php
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testes Unitários
|
||||||
|
|
||||||
|
### PHPUnit
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class ProductServiceTest extends TestCase
|
||||||
|
{
|
||||||
|
private ProductService $service;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
$this->service = new ProductService(
|
||||||
|
new InMemoryProductRepository()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_create_product(): void
|
||||||
|
{
|
||||||
|
$product = $this->service->create([
|
||||||
|
'name' => 'Test Product',
|
||||||
|
'price' => 99.99
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertInstanceOf(Product::class, $product);
|
||||||
|
$this->assertEquals('Test Product', $product->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pest (alternativa moderna)
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
test('creates product', function () {
|
||||||
|
$product = app(ProductService::class)->create([
|
||||||
|
'name' => 'Test',
|
||||||
|
'price' => 99.99
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect($product)
|
||||||
|
->toBeInstanceOf(Product::class)
|
||||||
|
->name->toBe('Test');
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Checklist Entrega
|
||||||
|
|
||||||
|
- [ ] Assinatura Descomplicar® em todos os ficheiros
|
||||||
|
- [ ] php -l sem erros
|
||||||
|
- [ ] PHPDoc em funções públicas
|
||||||
|
- [ ] Type hints completos
|
||||||
|
- [ ] PSR-12 compliant
|
||||||
|
- [ ] Segurança validada (injection, XSS)
|
||||||
|
- [ ] Se API: documentação endpoints
|
||||||
|
- [ ] Testes unitários (cobertura >70%)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Datasets Dify (Consulta Obrigatória)
|
||||||
|
|
||||||
|
Em caso de dúvidas ou para aprofundar conhecimento, consultar os seguintes datasets via MCP:
|
||||||
|
|
||||||
|
| Dataset | ID | Prioridade |
|
||||||
|
|---------|----|-----------:|
|
||||||
|
| **TI (Tecnologia da Informação)** | `7f63ec0c-6321-488c-b107-980140199850` | 1 |
|
||||||
|
| **Desenvolvimento de Software** | `e7c7decc-0ded-4351-ab14-b110b3c38ec9` | 1 |
|
||||||
|
| **Wordpress** | `9da0b2b9-5051-4b99-b9f6-20bf35067092` | 2 |
|
||||||
|
| **PerfexCRM** | `43354eb6-f0b2-40cc-aa53-44e375ab347c` | 3 |
|
||||||
|
|
||||||
|
### Como Consultar
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
# PRIMARIO: NotebookLM (Gemini 2.5 RAG)
|
||||||
|
# mcp__notebooklm__notebook_query({notebook_id: "2876d1fe-5cea-4d98-8140-b0e1a81c6bc4", query: "<tema>"}) // Claude Code
|
||||||
|
# mcp__notebooklm__notebook_query({notebook_id: "73102308-70ef-403e-9be9-eae0cfc62d55", query: "<tema>"}) // Desenvolvimento de MCPs
|
||||||
|
# mcp__notebooklm__notebook_query({notebook_id: "57d9c6c9-48ba-4d83-8f71-cc890f348a53", query: "<tema>"}) // AI Code Editors
|
||||||
|
# mcp__notebooklm__notebook_query({notebook_id: "24947ffa-0019-448a-a340-2f4a275d2eb1", query: "<tema>"}) // Programacao
|
||||||
|
# mcp__notebooklm__notebook_query({notebook_id: "ebee9fe1-78fd-4f85-8938-f19f3ea32131", query: "<tema>"}) // Obsidian + Claude
|
||||||
|
# FALLBACK: Dify KB (se NotebookLM insuficiente)
|
||||||
|
|
||||||
|
// Pesquisar padrões Laravel
|
||||||
|
mcp__dify-kb__dify_kb_retrieve_segments({
|
||||||
|
dataset_id: "e7c7decc-0ded-4351-ab14-b110b3c38ec9",
|
||||||
|
query: "laravel service repository pattern"
|
||||||
|
})
|
||||||
|
|
||||||
|
// APIs e autenticação
|
||||||
|
mcp__dify-kb__dify_kb_retrieve_segments({
|
||||||
|
dataset_id: "7f63ec0c-6321-488c-b107-980140199850",
|
||||||
|
query: "api rest jwt sanctum"
|
||||||
|
})
|
||||||
|
|
||||||
|
// Desenvolvimento Perfex
|
||||||
|
mcp__dify-kb__dify_kb_retrieve_segments({
|
||||||
|
dataset_id: "43354eb6-f0b2-40cc-aa53-44e375ab347c",
|
||||||
|
query: "module development hooks"
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Quando Consultar
|
||||||
|
|
||||||
|
- Implementar padrões de arquitectura
|
||||||
|
- Desenvolver APIs RESTful
|
||||||
|
- Integrar sistemas de autenticação
|
||||||
|
- Criar módulos Perfex CRM
|
||||||
|
- Refactorizar código legacy
|
||||||
|
|
||||||
|
---
|
||||||
|
**Versão**: 1.0.0 | **Autor**: 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.*
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: prompt-refine
|
name: prompt-refine
|
||||||
description: Transforma um pedido vago em prompt de excelência — especificação detalhada, inequívoca e estruturada para agentes de IA. Usar quando "refinar prompt", "melhorar prompt", "engenharia de prompts", "prompt para agente", "estruturar instrução IA", "prompt engineering".
|
description: Transforma um pedido vago em prompt de excelência — especificação detalhada, inequívoca e estruturada para agentes de IA. Usar quando "refinar prompt", "melhorar prompt", "engenharia de prompts", "prompt para agente", "estruturar instrução IA", "prompt engineering".
|
||||||
allowed-tools: Read, Write, mcp__mem_search_memories
|
allowed-tools: Read, Write, mcp__mem0__search_memories
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# /prompt-refine — Engenharia de Prompts
|
# /prompt-refine — Engenharia de Prompts
|
||||||
@@ -21,7 +20,7 @@ Transforma um pedido em linguagem natural num **prompt de excelência** pronto p
|
|||||||
### 1. Pesquisar contexto relevante
|
### 1. Pesquisar contexto relevante
|
||||||
|
|
||||||
```
|
```
|
||||||
mcp__mem_search_memories "<palavras-chave do pedido>"
|
mcp__mem0__search_memories "<palavras-chave do pedido>"
|
||||||
```
|
```
|
||||||
|
|
||||||
Verificar se há padrões ou decisões anteriores relacionadas.
|
Verificar se há padrões ou decisões anteriores relacionadas.
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: react-patterns
|
name: react-patterns
|
||||||
description: Padroes modernos React (18+/19) -- hooks, context, composicao, memoizacao, lazy loading e Server Components.
|
description: Padroes modernos React (18+/19) -- hooks, context, composicao, memoizacao, lazy loading e Server Components.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# React Patterns
|
# React Patterns
|
||||||
@@ -23,7 +22,7 @@ mcp__notebooklm__notebook_query({
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Regra #48:** Projectos React devem ser desenvolvidos no **container dev** (`server:"dev"`, path `/root/Dev/<projecto>`). Sincroniza via Syncthing.
|
> **Regra #48:** Projectos React são desenvolvidos **localmente no desktop** em `/media/ealmeida/Dados/Dev/<projecto>` (Bash local, sem SSH — CT 102 extinto em 20-04-2026).
|
||||||
|
|
||||||
## Quando Usar
|
## Quando Usar
|
||||||
|
|
||||||
@@ -178,4 +177,27 @@ components/
|
|||||||
ui/ # Componentes base (Button, Input, Card)
|
ui/ # Componentes base (Button, Input, Card)
|
||||||
features/ # Componentes feature-specific
|
features/ # Componentes feature-specific
|
||||||
layouts/ # Layout components
|
layouts/ # Layout components
|
||||||
providers/ # Context
|
providers/ # Context providers
|
||||||
|
|
||||||
|
hooks/
|
||||||
|
useAuth.ts
|
||||||
|
useLocalStorage.ts
|
||||||
|
useDebounce.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- `references/composition-patterns.md` - Compound components, providers, dependency injection (Vercel Engineering)
|
||||||
|
- `references/custom-hooks.md` - useDebounce, useLocalStorage, useFetch com codigo completo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: skill-creator
|
name: skill-creator
|
||||||
description: Criar, melhorar e empacotar skills para o sistema de plugins Descomplicar. Usar quando o utilizador pede para criar uma nova skill, actualizar uma skill existente, ou quando é necessário estruturar conhecimento especializado em formato skill. Inclui padrões Anthropic oficiais (progressive disclosure, graus de liberdade) adaptados ao ecossistema Descomplicar com PT-PT estrito.
|
description: Criar, melhorar e empacotar skills para o sistema de plugins Descomplicar. Usar quando o utilizador pede para criar uma nova skill, actualizar uma skill existente, ou quando é necessário estruturar conhecimento especializado em formato skill. Inclui padrões Anthropic oficiais (progressive disclosure, graus de liberdade) adaptados ao ecossistema Descomplicar com PT-PT estrito.
|
||||||
layer: wiki
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Skill Creator
|
# Skill Creator
|
||||||
@@ -137,4 +136,65 @@ Calibrar o nível de especificidade ao risco da tarefa:
|
|||||||
- [ ] Scripts testados (se incluídos)
|
- [ ] Scripts testados (se incluídos)
|
||||||
- [ ] Sem ficheiros auxiliares (README.md, CHANGELOG.md, etc.)
|
- [ ] Sem ficheiros auxiliares (README.md, CHANGELOG.md, etc.)
|
||||||
|
|
||||||
**Padrões Descompl
|
**Padrões Descomplicar:**
|
||||||
|
- [ ] Assinatura Descomplicar® no código (quando aplicável)
|
||||||
|
- [ ] MCPs relevantes referenciados
|
||||||
|
- [ ] Monetário em EUR sem casas decimais desnecessárias
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Passo 6: Empacotar
|
||||||
|
|
||||||
|
**Script de packaging Anthropic** (quando disponível):
|
||||||
|
```bash
|
||||||
|
python scripts/package_skill.py <path/para/pasta-skill>
|
||||||
|
# ou com output directory:
|
||||||
|
python scripts/package_skill.py <path/para/pasta-skill> ./dist
|
||||||
|
```
|
||||||
|
|
||||||
|
O script valida frontmatter, naming conventions, estrutura de directórios, e gera ficheiro `.skill` (zip com extensão .skill).
|
||||||
|
|
||||||
|
Se não estiver disponível, verificar manualmente com o checklist do Passo 5.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anti-Padrões a Evitar
|
||||||
|
|
||||||
|
**Má skill (demasiado vaga):**
|
||||||
|
```yaml
|
||||||
|
description: Ajuda com PHP.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Má skill (conteúdo duplicado em references e SKILL.md):**
|
||||||
|
Documentar a mesma informação em dois locais — viola o princípio progressive disclosure.
|
||||||
|
|
||||||
|
**Má skill (ficheiros auxiliares):**
|
||||||
|
Criar README.md, CHANGELOG.md, INSTALLATION_GUIDE.md — não devem existir numa skill.
|
||||||
|
|
||||||
|
**Boa skill:**
|
||||||
|
```yaml
|
||||||
|
description: >
|
||||||
|
Desenvolvimento PHP moderno com Laravel e Symfony — autenticação JWT/OAuth,
|
||||||
|
service classes, refactorização legacy. Usar quando: (1) criar APIs RESTful,
|
||||||
|
(2) implementar autenticação, (3) desenvolver service classes, (4) refactorizar
|
||||||
|
código PHP existente.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exemplos Concretos: Bom vs Mau
|
||||||
|
|
||||||
|
Ver `references/anthropic-patterns.md` para exemplos detalhados de progressive disclosure.
|
||||||
|
Ver `references/descomplicar-standards.md` para exemplos de skills Descomplicar bem estruturadas.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.*
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user