🤖 tool-humanizer (50+ AI tells documentados, scoring 0-10)
Deteta padrões de escrita IA num texto e devolve score 0-10 (10 = humano puro) + reescrita com sugestões. É a defesa final contra outputs "suspeitosamente IA".
AI-tell patterns que deteta (50+ documentados)
delve, leverage, in conclusion, navigate, unlock, embark, tapestry, realm, foster
"Let me know if...", "I hope this helps", "It's important to note that"
Bullet point com emoji a abrir cada um, headers + sub-bullets simétricos
"may potentially", "could possibly", excesso de "I think"
"X, Y, and Z" repetido 3+ vezes consecutivas em parágrafos curtos
"Moreover", "Furthermore", "Additionally" 3+ vezes no mesmo texto
📊 Modos de uso
- Standalone: colas texto, dizes "humaniza isto" ou "tira o tom AI". Devolve score + reescrita comentada.
- Pipeline: invocada por outra skill com JSON
{text, context}. Devolve JSON estruturado para gate decision. - Dentro do verifier: tool-output-verifier inclui-a como um dos seus 4 checks.
✅ tool-output-verifier (gate 4 checks obrigatório)
O último guardião antes de entregar. Todas as skills marketing-* o invocam no último passo. 4 dimensões ortogonais, score 0-10 final, pass/fail.
Humanizer score
Delega em tool-humanizer. Score 0-10 sobre padrões AI. Peso típico no agregado: 30%.
Brand voice match
Lê brand-context/voice/voice-profile.md + register esperado. Compara vocabulário, ritmo, formalidade. Peso: 30%.
Length per platform
LinkedIn 300-800w · X 280 chars · email 150-700w · landing section 50-200w. Fora do range → flag. Peso: 20%.
Factuality flags
Deteta números, datas, nomes próprios, claims auditáveis. Não verifica — sinaliza para tu confirmares. Peso: 20%.
Exemplo de output JSON
{
"verdict": "pass-with-warnings",
"score": 7.6,
"checks": {
"humanizer": 8,
"voice_match": 7,
"length": 9,
"factuality_flags": ["3 claims auditáveis", "1 número não-cited"]
},
"suggestions": [
"Voice: muito uso de 'importante notar' — não é do teu registo B",
"Confirmar: 'crescemos 40% YoY' (de onde sai este número?)"
]
}
🚪 Pass / fail criteria
- pass: score >=8 e zero flags críticas
- pass-with-warnings: score 6-7.99 ou flags não-críticas (entrega mas avisa)
- fail: score <6 ou flag crítica (factuality em número específico) → volta para refinamento
🔥 tool-firecrawl-scraper (wrapper com fallback graceful)
Wrapper de Firecrawl API para scraping sem bot blockers. Lê FIRECRAWL_API_KEY do .env; se faltar, degrada para WebFetch nativo e avisa. É a fonte de "dados frescos" do OS.
Process em 3 passos
- Verificar API key — lê
.env. Se existe, usahttps://api.firecrawl.dev/v1/scrape. Se não, degrada para WebFetch built-in e avisa. - Validar input — URL válido, scheme http/https, sem auth requerido. Rejeita ficheiros locais.
- Extrair markdown — Firecrawl devolve markdown limpo (sem ads, sem nav, sem footer). Cache local de 24h para evitar reqs duplicados.
Skills que dependem dele
- →
marketing-brand-voice— extrai voice samples de web/LinkedIn - →
marketing-positioning— analisa concorrentes - →
marketing-content-repurposing— lê blog posts longos - →
welcome-quick-win— extrai conteúdo do URL público do operador - →
strategy-web-research— múltiplos URLs em paralelo
💸 500 créditos grátis
Regista-te em firecrawl.dev (500 créditos grátis, ~500 páginas). Adiciona FIRECRAWL_API_KEY=fc-xxx em .env do repo. Para uso pesado: $19/mês cobre 3.000 páginas.
⚠️ Degradação graceful
Se a API key falta, a skill não bloqueia — tenta WebFetch nativo. Mas avisa: "Sem Firecrawl API key. Algumas webs com bot-blockers (LinkedIn, sites com Cloudflare agressivo) vão falhar. Considera ativar."
🎨 tool-visual-explainer (HTML autocontido para WhatsApp)
Gera HTML5 autocontido (1 ficheiro, sem dependências externas, mobile-first) para partilhar análises, comparativos, recaps. Paleta sóbria com acento laranja iAmasters. Pequeno o suficiente para caber em DM, WhatsApp, email attach.
✓ Quando usar
- Outras skills fecham com análise para partilhar
- "Faz-me HTML disto", "põe bonito"
- Apresentar a cliente, sócio, conselheiro
- Tabelas longas (4+ linhas, 3+ colunas)
- Quick-win, six-hats output, positioning
✗ Quando NÃO usar
- Outputs internos (só o Claude lê)
- Já estás em ferramenta visual (Notion, Figma)
- Output <200 palavras (markdown chega)
- Conteúdo dinâmico que muda diariamente
- Quando o cliente quer texto plano para copiar
Características técnicas
- 1 ficheiro HTML com CSS + JS inline (sem CDN exceto Tailwind opcional)
- Mobile-first — funciona em ecrã 360px
- Paleta: dark mode default (slate 900), acento laranja iAmasters (#FACC15), toggle light/dark
- Tipografia: Inter via Google Fonts (única dependência externa)
- Tamanho típico: 30-80 KB. Cabe em DM, WhatsApp, email attach.
- Acessibilidade: contraste AA mínimo, headers hierárquicos, labels em forms
📤 Output path
Salva em projects/visual/YYYY-MM-DD-titulo-curto/index.html. Operador depois copia para onde quiser (Drive, Notion attach, S3, GitHub Pages).
🎚️ Threshold por plataforma (humanizer ≥8 email, ≥7 LinkedIn, ≥6 WhatsApp)
Não há um threshold único para humanizer. Cada plataforma tem tolerância diferente a padrões IA. Email cold a desconhecido exige score >=8; WhatsApp a amigo aguenta 6. Calibrar isto evita gates desnecessários (bloquear "demasiado" em casos onde não importa).
| Plataforma | Threshold | Porquê |
|---|---|---|
| Email cold (B2B) | ≥8 | Receptor crítico, deteta IA imediatamente |
| Email premium (C-level) | ≥9 | Zero tolerância a fluff |
| Proposta comercial | ≥8 | Investimento alto, escrutínio alto |
| LinkedIn post | ≥7 | Audiência alguma tolerância, mas tells visíveis |
| Blog post | ≥7 | Leitor escolheu ler, mais paciente |
| Newsletter | ≥7 | Subscritor já confia, mas baixa atenção |
| X thread | ≥7 | Plataforma sensível a tells |
| WhatsApp / DM | ≥6 | Conversação informal aguenta fricção |
| Resposta comentário | ≥6 | Espera-se rapidez, não polimento |
| Notas internas | N/A | Sem leitor externo, gate desativado |
💡 Conceito principal
Threshold uniforme produz dois problemas: (1) bloqueia outputs WhatsApp por "demasiado AI" quando ninguém vai reparar, (2) deixa passar emails frios com score 7 que vão para o spam mental imediatamente. Calibragem por plataforma reflete o custo real de falso positivo vs falso negativo em cada canal.
💡 Dica prática · ajusta ao teu ICP
Os thresholds acima são padrão geral. Se o teu ICP são desenvolvedores ou marketers (alta sensibilidade a IA), sobe todos 1 ponto. Se o teu ICP são executivos não-técnicos, podes descer 1 em LinkedIn/blog. Documenta a tua calibração específica em brand-context/voice/audit-prompt.md.
🔗 Patterns de skill collaboration entre tools
As 4 tools cobertas neste módulo compõem-se em padrões repetidos. Reconhecer os patterns acelera debug e permite-te construir as tuas próprias skills compostas.
Pattern 1 · Gate composto (verifier compõe humanizer)
O verifier não é uma skill autónoma — é um composer que orquestra humanizer + voice match + length + factuality. Cada check pode ser invocado isolado, ou todos juntos pelo verifier.
verifier(text) ├── humanizer(text) → score ├── voice_match(text, register) → score ├── length_check(text, platform) → flag └── factuality_scan(text) → flags[] → aggregate → verdict
Pattern 2 · Source → Skill → Visual (firecrawl → analysis → explainer)
Para análises partilháveis (positioning competitivo, brand audit, market research), padrão típico: firecrawl extrai dados, skill marketing analisa, visual-explainer empacota.
URLs[] → firecrawl → markdown[]
↓
marketing-positioning analysis
↓
tool-visual-explainer → HTML standalone
↓
projects/visual/YYYY-MM-DD-titulo/
Pattern 3 · Fallback graceful (firecrawl → WebFetch → manual)
Para tornar skills resilientes, padrão de degradação: tentar API premium → tentar nativo → pedir input manual. Nunca bloquear o fluxo.
if FIRECRAWL_API_KEY exists: use firecrawl scrape else if URL is fetchable: use built-in WebFetch + warn else: ask user to paste content manually
📊 Pattern 4 · Loop com sanity break
Quando humanizer-score <threshold, verifier devolve para refinamento. Mas há um contador interno: ao fim de 3 iterações sem chegar ao threshold, devolve o melhor output com aviso ("não consegui chegar a score 8, entrego com 7.4 e estas notas"). Evita loops infinitos.
💡 Dica prática · debug por JSON
Quando algo no pipeline falha, pede ao agente: "mostra-me o JSON passado entre cada skill". Ele expõe o objeto em cada hop. 90% dos problemas resolvem-se ao ver: voice não carregada (campo voice_loaded: false), platform errada, register não passado.
✅ Resumo do Módulo
Próxima Trilha:
Trilha 5 — Multi-cliente: como gerir N clientes em simultâneo com brand-context próprio, templates verticais (freelance-ia, agência, formador, consultor), isolamento e workflows.