Rotulagem Automática do Gmail
Objetivo
Buscar e-mails da caixa de entrada, classificá-los via subagentes paralelos em Ação Requerida / Aguardando Resposta / Referência e aplicar as etiquetas em lote pela API do Gmail.
Scripts
./scripts/gmail_label_fetch.py- Buscar resumos de e-mails como JSON compacto./scripts/gmail_label_split.py- Dividir e-mails em N partes para classificação paralela./scripts/gmail_label_merge.py- Mesclar partes classificadas em um único labels.json./scripts/gmail_label_apply.py- Aplicar classificações de etiquetas em lote
Subagente
email-classifier— definido em.claude/agents/email-classifier.md- Modelo: Sonnet 4.5 (classificação rápida e econômica)
- Cada subagente lê uma parte e escreve um arquivo de saída classificado
Fluxo (Paralelo — padrão)
Etapa 1: Buscar e-mails
python3 .claude/skills/gmail-label/scripts/gmail_label_fetch.py \
--account CONTA --query "in:inbox" --limit 100 --output .tmp/emails.json
Etapa 2: Dividir em partes
python3 .claude/skills/gmail-label/scripts/gmail_label_split.py \
--input .tmp/emails.json --chunks 10 --output-dir .tmp/chunks
Etapa 3: Classificar em paralelo (criar 10 subagentes)
Crie 10 subagentes email-classifier em segundo plano, um por parte. Cada subagente:
- Lê
.tmp/chunks/chunk_N.json - Classifica cada e-mail
- Escreve
.tmp/chunks/classified_N.json
Use a ferramenta Task com run_in_background: true e model: "sonnet". Crie TODOS os 10 em uma única mensagem para paralelismo real:
Para cada parte 0-9, crie uma Task com:
subagent_type: "email-classifier"
model: "sonnet"
run_in_background: true
prompt: "Leia /caminho/absoluto/.tmp/chunks/chunk_N.json, classifique cada e-mail, escreva os resultados em /caminho/absoluto/.tmp/chunks/classified_N.json"
CRÍTICO: NÃO use TaskOutput para ler resultados dos subagentes. Os subagentes escrevem seus resultados em arquivos — o agente principal nunca precisa ver os dados de classificação. Ler TaskOutput inundará a janela de contexto e causará erros de "prompt muito longo" com lotes grandes (500+ e-mails).
Em vez disso, aguarde a existência dos arquivos:
# Aguarde até que todos os arquivos classificados existam (timeout após 120s)
for i in $(seq 0 9); do
while [ ! -f ".tmp/chunks/classified_$i.json" ]; do sleep 2; done
done
Em seguida, prossiga diretamente para a Etapa 4 (mesclagem).
Etapa 4: Mesclar classificações
python3 .claude/skills/gmail-label/scripts/gmail_label_merge.py \
--input-dir .tmp/chunks --output .tmp/labels.json
Etapa 5: Aplicar etiquetas
python3 .claude/skills/gmail-label/scripts/gmail_label_apply.py \
--account CONTA --input .tmp/labels.json
Diretrizes de Classificação
Ação Requerida:
- Alertas de segurança que precisam de verificação
- Cartões de crédito com vencimento / renovações de domínio com prazos
- Menções @ no Slack fazendo perguntas
- Novos membros da equipe para cumprimentar (notificações de entrada no Slack)
- E-mails de clientes que precisam de resposta
- Atualizações de listagens de negócios (Google Business Profile, Bing Places)
- Notificações de ação necessária do Stripe
Aguardando Resposta:
- E-mails de vendas enviados aguardando resposta
- Tickets de suporte aguardando resolução
- Propostas enviadas, pendentes de resposta
Referência:
- Newsletters de marketing (DigitalMarketer, etc.)
- Newsletters de caridade/ONGs (RAPS, etc.)
- Relatórios de desempenho do Google Business Profile
- Ofertas promocionais (Blinkist, promoções, etc.)
- Notificações de atualização de plataforma (Google Play, Apify, etc.)
- Códigos de confirmação (já usados)
- Newsletters imobiliárias (Westbank, etc.)
- E-mails de contas de jogos (Riot Games, etc.)
- Alertas informativos de segurança (2FA ativado, etc.)
- Avisos de saúde
- Notificações de atualizações legais/políticas
Registro de Contas
As contas são armazenadas em gmail_accounts.json na raiz do espaço de trabalho. Cada conta precisa de:
email- Endereço de e-mail do Gmailtoken_file- Caminho para o token OAuth
Adicionar Novas Contas
python3 .claude/skills/gmail-inbox/scripts/gmail_multi_auth.py --account NOME_DA_CONTA --email EMAIL
Desempenho
- Fluxo serial: ~36s para 100 e-mails (busca 1s + classificação 34s + aplicação 1s)
- Fluxo paralelo: ~30s para 100 e-mails (classificação 19s + mesclagem <1s + aplicação ~10s)
- A classificação é o gargalo; 10 subagentes paralelos reduzem de 34s para 19s (~1,8x de aceleração)
- A sobrecarga de inicialização do agente (~4s de atraso) limita os ganhos teóricos
- A etapa de aplicação pode variar devido à limitação da API do Gmail
Esquema
Entradas
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
account | string | Sim | Nome da conta Gmail no registro |
query | string | Não | Consulta de pesquisa do Gmail (padrão: 'in:inbox') |
limit | integer | Não | Máximo de e-mails para classificar (padrão: 100) |
chunks | integer | Não | Partes de classificação paralela (padrão: 10) |
Saídas
| Nome | Tipo | Descrição |
|---|---|---|
labels_applied | object | Contagem por categoria: Ação Requerida, Aguardando Resposta, Referência |
Credenciais
| Nome | Fonte |
|---|---|
credentials.json | arquivo |
token_*.json | arquivo (gerado automaticamente) |
Combinável Com
Skills que se encadeiam bem com esta: gmail-inbox
Custo
API Claude Sonnet para classificação