Automação
Comente RESUMO no Instagram @gastaomatos

Resumo de Reunião com IA (Áudio para Markdown)

Ata manual nunca funciona porque ninguém quer parar pra escrever. Você grava, deixa a IA transcrever e resumir, e recebe um markdown com contexto, decisão e responsável. 5 minutos depois da reunião terminar.

Por que ata manual nunca funciona

  • Quem anota fica de fora da conversa, perde o contexto
  • Ata feita depois é só lembrança parcial, perde 60% do que importou
  • Decisão fica difusa, não vira tarefa
  • Responsável fica implícito, ninguém se sente dono
  • Próxima reunião começa sem alinhamento do que ficou da anterior

Stack

  • Python 3.12 ou Node.js 22 com TypeScript
  • faster-whisper local (modelo medium ou large-v3) para transcrição rápida sem custo de API
  • Anthropic Claude API para gerar o resumo estruturado
  • Notion API ou Linear API para entregar o resultado direto
  • CLI simples ou interface web Next.js conforme preferência
  • ffmpeg pra normalizar áudio antes da transcrição

Prompt completo para Claude Code

Cole no Claude Code dentro de uma pasta vazia:

prompt
Crie uma ferramenta de resumo de reunião em Python 3.12.

Estrutura:
src/
  transcribe.py       // wrapper do faster-whisper
  summarize.py        // chama Claude com prompt de resumo estruturado
  exporters/notion.py // envia pro Notion
  exporters/linear.py // envia pro Linear
  exporters/file.py   // salva como .md local
  cli.py              // entrada principal

Dependências (requirements.txt):
faster-whisper==1.0.3
anthropic==0.34.0
notion-client==2.2.1
ffmpeg-python==0.2.0
python-dotenv==1.0.1
click==8.1.7

Fluxo CLI:
$ python -m src.cli resumir reuniao.mp4 --destino notion

1. ffmpeg extrai áudio mono 16kHz do arquivo de entrada
2. faster-whisper transcreve em pedaços de 30s
   Modelo: "medium" pra português (boa relação qualidade/velocidade)
   Idioma: forçar "pt"
   Inclui timestamps por sentença
   Output: texto plano + lista [{ start, end, speaker?, text }]

3. summarize.py chama Claude:

   prompt = f"""Você gera resumos de reuniões para times de produto e operação.

   Transcrição:
   {transcricao_completa}

   Gere um resumo em markdown nesta estrutura exata:

   # Resumo da reunião
   **Data:** {data}
   **Duração:** {duracao}

   ## Contexto
   2 a 3 linhas sobre o motivo da reunião e o cenário discutido.

   ## Pontos discutidos
   - Tópico 1, em 1 linha
   - Tópico 2, em 1 linha
   (no máximo 6 pontos)

   ## Decisões
   - **Decisão 1:** o que ficou decidido (sem 'foi decidido que', vai direto)
   - **Decisão 2:** idem
   (no máximo 5)

   ## Responsabilidades
   - **[Nome]:** o que ficou de fazer + prazo se mencionado
   - **[Nome]:** idem
   (extraia só o que foi atribuído explicitamente, não invente)

   ## Próximos passos
   - 1 linha por passo
   (no máximo 4)

   Regras:
   - Português, direto, sem jargão
   - Sem 'foi discutido', 'foi falado', 'foi decidido'. Vai direto ao ponto.
   - Se algo não ficou claro na transcrição, escreva '(não definido)'
   - Nunca invente nome de pessoa, prazo ou número
   """

   Retorna o markdown puro.

4. exporters/notion.py:
   - Cria nova página na database configurada (NOTION_DATABASE_ID)
   - Title = "Reunião {data}"
   - Body = markdown convertido pra blocos Notion (notion-client faz)

5. exporters/linear.py:
   - Cria 1 issue por linha em Responsabilidades
   - Issue.title = a tarefa, Issue.assignee = nome mapeado pro user_id

6. exporters/file.py:
   - Salva como reunioes/{data}.md

CLI com Click:
@click.command()
@click.argument('arquivo')
@click.option('--destino', default='file', type=click.Choice(['file', 'notion', 'linear']))
@click.option('--modelo', default='medium')
def resumir(arquivo, destino, modelo):
    audio = transcribe.extrair_audio(arquivo)
    texto = transcribe.transcrever(audio, modelo=modelo)
    md = summarize.gerar_resumo(texto)
    if destino == 'notion':
        exporters.notion.enviar(md)
    elif destino == 'linear':
        exporters.linear.criar_issues(md)
    else:
        exporters.file.salvar(md)

Variáveis de ambiente (.env):
ANTHROPIC_API_KEY
NOTION_TOKEN
NOTION_DATABASE_ID
LINEAR_API_KEY
LINEAR_TEAM_ID

Instalação:
pip install -r requirements.txt
brew install ffmpeg  # macOS
winget install ffmpeg  # Windows

Uso:
python -m src.cli resumir reuniao.mp4 --destino notion

Como gravar (Meet, Zoom, WhatsApp áudio)

  • Google Meet: aperta gravar (precisa Workspace), arquivo cai no Drive como MP4
  • Zoom: gravação local salva MP4 + transcrição automática, use o MP4
  • WhatsApp: áudios da chamada não gravam, mas você pode gravar áudio do celular separado
  • Reunião presencial: app gravador do celular salva como .m4a
  • Plataforma de telefonia: a maioria exporta .wav direto

Estrutura do resumo

  • Contexto (2 a 3 linhas): por que a reunião aconteceu
  • Pontos discutidos (até 6 bullets): só tópicos, sem floreio
  • Decisões (até 5 bullets): o que ficou definido em letras claras
  • Responsabilidades (lista): nome + ação + prazo, extraído da fala
  • Próximos passos (até 4): o que vem depois desta reunião

Integração com Notion ou Linear

  • Notion: cria página nova numa database de Reuniões com o markdown como blocos
  • Linear: cria 1 issue por responsabilidade, assignee mapeado pelo nome
  • File: salva localmente em reunioes/2026-05-27.md pra commitar no repo
  • Você escolhe o destino na linha de comando: --destino notion, --destino linear ou padrão file
  • Pode rodar os 3 em sequência se quiser ter o markdown salvo e replicado

Perguntas frequentes

Preciso pagar pelo Whisper?

Não. O faster-whisper roda local na sua máquina, sem custo. O modelo medium ocupa 1.5GB e roda em CPU comum, mas fica bem mais rápido com GPU (qualquer placa com 4GB+ de VRAM serve). O modelo large-v3 acerta mais, ocupa 3GB.

Quanto tempo demora pra processar 1h de reunião?

Em CPU comum, cerca de 8 a 12 minutos pro medium. Em GPU de notebook (GTX 1650 e acima), 2 a 4 minutos. O passo do Claude (resumo) leva mais 10 a 20 segundos. Bem mais rápido que rever a reunião.

A IA identifica quem disse o quê?

O faster-whisper sozinho não faz speaker diarization (separar vozes). Pra isso você adiciona o pyannote.audio ou similar, que cruza com o Whisper. Custo: 1 modelo extra de 500MB. Sem isso, o resumo agrupa por contexto e infere o responsável pelo que falou cada um.

Funciona com reunião em inglês ou só português?

Funciona com qualquer idioma suportado pelo Whisper (99 idiomas). Você só muda o language="pt" pra "en", "es" etc. O Claude também resume em qualquer idioma, basta ajustar o prompt pra "em português" virar "em inglês".

Posso rodar isso direto do celular sem computador?

Dá pra fazer uma versão web simples com upload no Vercel chamando o faster-whisper via serverless, mas o tempo de execução estoura o limite de função do Vercel pra reuniões longas. O mais robusto é um worker no Railway que recebe o arquivo e responde quando termina.

Quer implementar isso?

Me chama no WhatsApp. Ajudo você a configurar ou implemento pra você.

Quero ajuda no WhatsApp
DT

Gastão Matos

@gastaomatos