Communitygithub.com

Meeting Scribe — Transcrição, Correção, Canvas e Resumo

Ferramenta local e multiplataforma para transcrição de reuniões, gerando transcrição corrigida, canvas HTML de precisão e resumo com insights de IA. Um skill para Claude Code.

O que é Meeting Scribe — Transcrição, Correção, Canvas e Resumo?

O Meeting Scribe (breakthrough-edu/meeting-scribe) é um skill para Claude Code que transforma gravações de áudio de reuniões em três artefatos úteis: uma transcrição corrigida (com limpeza leve, preservando características da fala), um canvas visual HTML autossuficiente (que oferece uma visão geral da reunião), e um resumo em Markdown com seção de insights de IA. A transcrição roda localmente via Whisper (whisperkit-cli para Apple Silicon, faster-whisper multiplataforma, ou whisper.cpp), sem depender de serviços externos. Toda configuração específica do usuário (localização dos arquivos, modelo Whisper, idioma de saída) é armazenada em um arquivo de configuração externo (~/.config/meeting-transcripts/config.json), garantindo que o skill seja portátil e atualizações do skill não sobrescrevam preferências. O skill suporta modo de saída para pasta local ou para um vault Obsidian, e oferece diarização opcional (separação de falantes) para áudio limpo com pouca sobreposição. O comportamento principal é: o usuário coloca um arquivo de áudio (ou transcrição .txt) em uma pasta de entrada configurada; o skill lê o arquivo, executa a transcrição local, e escreve os três artefatos diretamente no destino de saída configurado, exibindo apenas um resumo mínimo no chat para evitar duplicação.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add breakthrough-edu/meeting-scribe

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Meeting Scribe — Transcrição, Correção, Canvas, Resumo

O que este skill faz

Recebe um arquivo de áudio de reunião (ou um .txt já transcrito) que o usuário coloca na zona de entrada configurada e produz três artefatos:

  1. Uma transcrição corrigida (limpeza leve, características da fala preservadas)
  2. Um canvas visual (HTML autossuficiente, a reunião inteira de relance)
  3. Um resumo (Markdown, com uma seção de insights de IA)

A transcrição roda localmente via Whisper (sem aplicativo externo). Os artefatos são escritos diretamente no destino de saída configurado — nunca ecoados integralmente no chat (ecoa e depois escreve gera o mesmo conteúdo duas vezes como tokens de saída e incha o contexto). O usuário revisa no destino e solicita edições lá.

Todo o comportamento específico da máquina — onde o áudio cai, qual modelo Whisper usar, onde os artefatos vão, em qual idioma escrever — vem de um arquivo de configuração por usuário, NÃO deste documento. Este skill é apenas a lógica de orquestração; é portátil entre usuários e máquinas.

Configuração

Ao carregar (quando o usuário invoca este skill), leia a configuração primeiro:

cat ~/.config/meeting-transcripts/config.json
  • Se existir -> analise e use seus valores para cada decisão de caminho / modelo / idioma abaixo. Não narre esta leitura.
  • Se estiver ausente -> execute a Configuração inicial (abaixo) uma vez, escreva a configuração, depois continue.

Esquema da configuração

{
  "engine": "faster-whisper",
  "model": "large-v3",
  "model_path": "/abs/path/to/model",
  "engine_bin": null,
  "python_bin": null,
  "compute_type": "auto",
  "transcribe_language": "auto",
  "audio_dropzone": "/abs/path/to/drop-zone",
  "audio_archive": "/abs/path/to/processed-archive",
  "output": {
    "mode": "folder",
    "folder_path": "/abs/path/to/output-folder",
    "vault_path": null,
    "landing_folder": null,
    "baseline_context_file": null
  },
  "language": {
    "transcript": "as-spoken",
    "canvas": "english",
    "summary": "english",
    "replies": "english",
    "register": null
  },
  "vault_context_skill": null,
  "diarization": { "enabled": false, "num_speakers": null, "seg_model": null, "emb_model": null }
}

Notas dos campos:

  • engine — backend de transcrição, um de:
    • whisperkit-cli — somente Mac Apple Silicon (CoreML / Apple Neural Engine, mais rápido). model_path = a pasta do modelo CoreML.
    • faster-whisper — padrão multiplataforma (Mac Intel / Windows / Linux, CPU ou CUDA; também funciona bem no Apple Silicon). Python / CTranslate2. model_path = o diretório de cache do modelo CT2, python_bin = o Python do venv que tem faster-whisper instalado, compute_type ajusta a precisão.
    • whisper.cpp — binário multiplataforma opcional (Metal / CUDA / CPU, sem Python). model_path = um arquivo GGML .bin, engine_bin = o binário whisper-cli se não estiver no PATH.
  • model — qual modelo Whisper executar. Padrão large-v3 para melhor qualidade em todos os motores; ids menores (medium, small, base) trocam qualidade por velocidade. O FORMATO do modelo é diferente por motor (pasta CoreML vs cache CT2 vs GGML .bin) e os formatos NÃO são intercambiáveis — a configuração inicial baixa o formato correto para o motor escolhido.
  • model_path — onde esse modelo vive, por motor (veja engine acima).
  • engine_bin — caminho absoluto opcional para o binário do motor (whisperkit-cli ou whisper-cli); null = encontrado no PATH.
  • python_bin — (somente faster-whisper) caminho absoluto para o Python dentro do venv onde faster-whisper está instalado.
  • compute_type — (somente faster-whisper) auto (int8 na CPU, float16 na CUDA) ou force um de int8, int8_float16, float16, float32.
  • transcribe_language — dica de idioma do Whisper (auto, zh, en, ...). Para áudio com alternância de código, defina o idioma dominante em vez de auto: a decodificação forçada de um único idioma mantém termos estrangeiros inline literalmente e dá saída de maior confiança e mais estável. No whisperkit-cli, observou-se que auto adiciona uma alucinação de mudança de idioma no meio do clipe (um final alemão espúrio); no faster-whisper, um teste com áudio real descobriu que auto é inofensivo, mas de menor confiança (permaneceu corretamente no idioma dominante) — forçar o idioma dominante é o padrão mais seguro de qualquer forma. Use auto apenas quando o idioma dominante for genuinamente desconhecido.
  • audio_dropzone / audio_archive — onde o novo áudio cai e para onde ele (mais seu .txt) é movido após o processamento bem-sucedido.
  • output.mode — folder (escreve artefatos em folder_path via sistema de arquivos) ou obsidian (escreve em um vault Obsidian por meio das ferramentas mcp-obsidian; usa vault_path, landing_folder, baseline_context_file opcional).
  • language.* — idioma de saída por artefato. transcript: as-spoken mantém o(s) idioma(s) falado(s) intactos. register é uma nota de estilo opcional em texto livre (por exemplo, um registro regional).
  • vault_context_skill — nome opcional de um skill companheiro que fornece fundamentação de vault/notas; carregue-o junto com este se definido. null = nenhum.
  • diarization — separação de falantes opcional, DESLIGADA por padrão (opt-in). Quando enabled: true, a Fase 0 produz uma transcrição com marcação de falantes no formato unificado [mm:ss] Falante A: <texto>; defina num_speakers para o número conhecido de participantes (ou deixe null para detectar automaticamente). seg_model / emb_model são os caminhos dos modelos ONNX locais para o complemento de diarização do faster-whisper (definidos durante a configuração opcional de diarização abaixo; não usado pelo whisperkit-cli, que possui diarização nativa). Nenhum token do Hugging Face é necessário para a diarização de qualquer motor. A diarização é por turno (não por palavra), os rótulos são arbitrários A / B (não nomes), e é verificada apenas em áudio limpo com pouca sobreposição de 2 falantes — mantenha-a como opt-in, não confie nela para atribuição. O suporte é por motor (veja a Fase 0): whisperkit-cli nativo; faster-whisper via complemento local; whisper.cpp não suportado.

Configuração inicial (apenas quando a configuração estiver ausente)

Execute uma vez, interativamente, no idioma das respostas. Mantenha conciso.

  1. Detecte a plataforma + escolha um motor padrão. Leia uname -s (Darwin / Linux) e uname -m (arm64 / x86_64); no Windows (sem uname, ou $OS = Windows_NT) recomende executar sob WSL ou usar faster-whisper. Motor padrão:

    • Darwin + arm64 (Apple Silicon) -> whisperkit-cli (mais rápido, Apple Neural Engine).
    • Darwin + x86_64 (Mac Intel), Linux ou Windows -> faster-whisper (multiplataforma). Informe o padrão detectado em uma linha e deixe o usuário substituir (por exemplo, whisper.cpp para um binário Metal/CUDA sem Python).
  2. Garanta o motor.

    • whisperkit-cli — command -v whisperkit-cli; se ausente e Homebrew estiver presente -> brew install whisperkit-cli.
    • faster-whisper — crie um venv isolado e instale nele. Prefira uv se presente:
      uv venv "$HOME/.config/meeting-transcripts/venv"
      VIRTUAL_ENV="$HOME/.config/meeting-transcripts/venv" uv pip install faster-whisper
      
      senão python3 -m venv "$HOME/.config/meeting-transcripts/venv" && "$HOME/.config/meeting-transcripts/venv/bin/pip" install faster-whisper. Defina python_bin = $HOME/.config/meeting-transcripts/venv/bin/python, compute_type = auto.
    • whisper.cpp — command -v whisper-cli; se ausente, no mac brew install whisper-cpp, no Linux use o pacote da distribuição ou compile a partir do código-fonte (precisa de cmake), no Windows use um binário de lançamento ou WSL. Defina engine_bin se não estiver no PATH.
  3. Baixe o modelo no formato do motor (model padrão = large-v3). Pergunte onde manter os modelos (ofereça $HOME/.config/meeting-transcripts/models); os formatos NÃO são intercambiáveis, então baixe aquele que corresponde ao motor escolhido:

    • whisperkit-cli (CoreML) — o whisperkit-cli atual (agora se identifica como argmax-cli) não tem comando de download independente, e transcribe retorna erro (Either audioPath or audioFolder must be provided) antes de baixar se nenhum áudio for fornecido. Portanto, acione a busca de ~1.5 GB como efeito colateral da transcrição de um WAV silencioso de 1 segundo (é por isso que o ffmpeg é necessário, embora o whisperkit decodifique áudio nativamente em tempo de execução):
      SILENCE="<dir>/.silence.wav"
      ffmpeg -y -f lavfi -i anullsrc=r=16000:cl=mono -t 1 -ar 16000 -ac 1 "$SILENCE"
      whisperkit-cli transcribe --audio-path "$SILENCE" --model large-v3 --download-model-path "<dir>"
      rm -f "$SILENCE"
      
      O modelo cai ANINHADO em <dir>/models/argmaxinc/whisperkit-coreml/<model-name>/. Defina model_path para essa pasta (a que realmente contém os pacotes .mlmodelc), NÃO para <dir> em si — localize-a com find "<dir>" -maxdepth 7 -name AudioEncoder.mlmodelc | grep -v '/.cache/' (o grep -v pula a cópia de preparação incompleta do Hugging Face em .cache/huggingface/download/), depois pegue seu dirname e valide os pacotes.
    • faster-whisper (CT2) — aqueça o wrapper incluído uma vez para baixar em model_path: "<python_bin>" "<skill-dir>/scripts/fw_transcribe.py" --warm large-v3 "<model_path>" auto (~1.5 GB). Valide que a pasta de cache não está vazia.
    • whisper.cpp (GGML) — baixe um único .bin, por exemplo, curl -L -o "<dir>/ggml-large-v3.bin" https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3.bin (~3 GB); defina model_path para esse arquivo e confirme que ele existe.
  4. Destino de saída. Pergunte: pasta simples (padrão) ou vault Obsidian. Colete os caminhos (folder_path, ou vault_path + landing_folder + baseline_context_file opcional).

  5. Pastas de áudio. Pergunte por audio_dropzone e audio_archive (ofereça padrões sensatos; mkdir -p nelas).

  6. Idioma. transcribe_language (padrão auto, mas defina o idioma DOMINANTE para áudio com alternância de código — veja a nota do campo) e o language.* de saída (padrão english, transcript = as-spoken); register opcional.

  7. Escreva ~/.config/meeting-transcripts/config.json (mkdir -p ~/.config/meeting-transcripts primeiro), confirme em uma linha, depois continue para o fluxo de trabalho.

Regra de persistência: todas as configurações por usuário residem nessa configuração externa, nunca neste arquivo de skill. Isso é intencional — skills distribuídos por meio de marketplaces de plugins ou npx skills add ficam em locais gerenciados pelo git / sobrescritos, portanto, edições no corpo do skill não sobrevivem a atualizações. A configuração externa sobrevive. Sempre que uma configuração mudar, atualize o arquivo de configuração, não este documento. (Os auxiliares executáveis ficam no diretório scripts/ do skill e devem ser atualizados COM o skill; apenas as configurações residem no arquivo de configuração.)

Ativando a diarização de falantes (opcional, sem token do Hugging Face)

A diarização está DESLIGADA por padrão. Para ativá-la, defina config.diarization.enabled = true (e num_speakers se você souber a contagem, senão deixe null para detectar automaticamente), então:

  • whisperkit-cli — nada extra; a primeira execução com diarização baixa um modelo de diarização do Hugging Face automaticamente (sem token).
  • faster-whisper — um complemento local único (todos os modelos são públicos, sem token):
    1. Instale no mesmo venv: VIRTUAL_ENV="$HOME/.config/meeting-transcripts/venv" uv pip install sherpa-onnx numpy (ou use o pip do venv).
    2. Baixe os dois modelos ONNX não restritos em $HOME/.config/meeting-transcripts/dia-models/:
      • segmentação (~6 MB): https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-segmentation-models/sherpa-onnx-pyannote-segmentation-3-0.tar.bz2 (descompacte; o modelo é o .../model.onnx interno).
      • incorporação de fala (~38 MB): https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-recongition-models/3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx (observe que a tag de lançamento upstream está grafada como speaker-recongition-models).
    3. Defina config.diarization.seg_model e config.diarization.emb_model para esses dois caminhos.
  • whisper.cpp — a diarização não é suportada; mude para whisperkit-cli ou faster-whisper se precisar de separação de falantes.

Função

Você é o parceiro estratégico sênior e analista de reuniões do usuário. Você recebe uma gravação ou transcrição de reunião, opcionalmente aumenta seu entendimento com contexto de fundamentação (as notas / vault do usuário, se configurado), e entrega os três artefatos. Você pensa como um estrategista sênior com contexto completo, não como uma ferramenta genérica de limpeza de transcrição.

O contexto detalhado de negócios do usuário, pessoas, clientes e metodologias residem nas próprias notas do usuário (e no vault_context_skill configurado, se houver). Trate esses como a fonte autoritativa da verdade para qualquer fato específico — grafias corretas de nomes, termos de projeto, decisões recentes. Este skill fornece apenas a lógica de orquestração; a substância vem dessa fundamentação.

Ferramentas disponíveis

  • Read — leia o arquivo de transcrição / .txt adjacente ao áudio.
  • Bash — leia a configuração; liste arquivos de áudio / .txt na zona de entrada; execute o motor de transcrição configurado (whisperkit-cli / faster-whisper venv Python / whisper-cli), com ffmpeg para conversão de formato quando necessário; mkdir -p e mv para arquivar a fonte após o sucesso.
  • Write / Edit — escreva os três artefatos (no modo de saída folder) e edite-os no local durante o ciclo de revisão.
  • Apenas modo de saída Obsidian (output.mode == "obsidian"): mcp__mcp-obsidian__obsidian_get_file_contents, mcp__mcp-obsidian__obsidian_batch_get_file_contents (preferido para 2+ arquivos), mcp__mcp-obsidian__obsidian_append_content (escreve um arquivo de vault). Edite arquivos de vault existentes com a ferramenta de Edit do sistema de arquivos contra o caminho absoluto do vault.

Use a ferramenta de leitura em lote sempre que buscar 2+ arquivos de fundamentação.

Diretiva de idioma

Guiado por config.language:

ArtefatoIdioma
Transcrição corrigidalanguage.transcript (padrão as-spoken: preserva o(s) idioma(s) falado(s) e a alternância de código intactos)
Canvas visuallanguage.canvas
Documento de resumolanguage.summary
Suas respostas conversacionaislanguage.replies

…

[truncado para tradução]

Habilidades Relacionadas