Notas de reunião local-first · pt-BR, EN e ES · código aberto

Sua reunião vira ata, sem sair da máquina

O Ata grava a call em duas faixas (o que você ouve e o que você fala), transcreve na sua máquina com GPU ou CPU e entrega a nota com cada fala por pessoa, resumo, decisões e ações. Sem bot na call, sem conta, sem API paga.

Ata: sua reunião vira ata
O que é

Um notetaker de reuniões que fala português e respeita sua privacidade

Projeto aberto do INEMA (MIT), inspirado nas ideias do CrunchLog, de Christian Landsteiner. É uma implementação independente: nenhuma linha de código dele foi usada. A diferença está em português, inglês e espanhol de primeira classe, Linux como plataforma principal, uso da GPU, resumo local e modo ao vivo sem serviço pago.

Recursos do Ata: duas faixas, português, inglês e espanhol, GPU ou CPU, resumo local, busca e MCP, modo ao vivo

🎧 Duas faixas, "o microfone é você"

A saída de som (Meet, Zoom, Teams) e o microfone são gravados separados. Tudo o que vem do microfone é "Eu"; o gate tira o eco da caixa de som e a separação de falantes só atua do outro lado.

🇧🇷 Português, inglês e espanhol

Motor, limpeza de vícios de fala ("né", "tipo"; "um", "uh"; "este", "o sea"), nota, resumo, demo e preparação mudam com o idioma da reunião. Rótulos: Eu / Pessoa 2, Me / Speaker 2, Yo / Persona 2.

🔒 Local por padrão

Transcrição (NeMo-Speech.cpp na GPU ou onnx na CPU), resumo (Ollama), busca e modo ao vivo rodam na sua máquina. Claude ou Codex pela assinatura são opcionais e só recebem texto, nunca áudio.

Como funciona

Da tecla à ata, num caminho só

Cada reunião vira uma pasta (o bundle ata/1) com far.wav, mic.wav e meta.json. Tudo o que vem depois (palavras, falas, resumo, nota, índice) é derivado e pode ser refeito.

ata toggle→ far.wav + mic.wav→ transcrição por faixa e idioma→ gate tira o eco→ quem falou (+ vozes conhecidas)→ falas + limpeza→ resumo JSON→ nota + busca + segundo cérebro

Gravação nos 3 sistemas

Linux: PipeWire (pw-record, com alinhamento das faixas pelo eco). Windows: WASAPI loopback. macOS 14.2+: helper Swift com process tap (código-fonte incluído).

Motores trocáveis

Principal: NeMo-Speech.cpp (Parakeet v3, Nemotron 3.5 streaming e Nemotron 3 Diarization; CUDA no DGX Spark/GB10, Metal no Mac). Reserva: onnx-asr + sherpa-onnx na CPU. Se o principal falhar, cai na reserva e registra isso na nota.

Lê o CrunchLog

Gravações do CrunchLog (bundle_version: 2) são lidas e processadas como cópia, sem tocar no original. Serve para migrar e para comparar resultados.

Pré-requisitos

O que você precisa

Python 3.12 vem pelo uv. Para resumo local, o Ollama; para a gravação no Linux, o PipeWire.

uv

Gerenciador de Python da Astral.

# Linux / macOS
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Ollama (resumo local)

O padrão é qwen3.6:35b-a3b; dá para trocar no config.toml.

ollama pull qwen3.6:35b-a3b
ollama pull qwen3-embedding:0.6b

Opcionais

ffmpeg (importar mp3/mp4), Piper (voz do demo), Claude Code ou Codex logados (resumo pela assinatura).

which pw-record ffmpeg piper claude codex
Guia de uso · passo a passo

Da instalação à primeira ata

Comandos reais do Ata 0.1.0.

1

Instale

Os extras trazem o MCP, o modo ao vivo e o motor de CPU. Use ".[all]" para tudo, inclusive a captura no Windows.

git clone https://github.com/inematds/ata && cd ata
uv tool install --python 3.12 ".[mcp,live,onnx]"
ata --version          # ata 0.1.0
2

Configure

Idioma padrão, pastas e quem faz o resumo. Escolher claude ou codex liga o nível de privacidade 1 e avisa que o texto sai da máquina.

ata setup --lang pt-BR --summary ollama
# pastas padrão: ~/Ata/gravacoes e ~/Ata/notas · config: ~/.config/ata/config.toml
3

Instale e ligue o motor de transcrição

O install detecta o hardware: cuda13 no GB10, metal no Mac, cpu nos demais. O motor roda só em 127.0.0.1 e, no Linux, com teto de memória.

ata engine install --dry-run              # mostra o que vai baixar
ata engine install --allow-unverified     # 0.1.0: hashes ainda não fixados
ata engine start
ata engine status
ata doctor                                # [ok]/[warn]/[fail] por item; exit 0 = pronto
4

Primeira ata: o demo

Uma reunião inventada, com roteiro próprio em cada idioma (3 pessoas, números, uma decisão, duas ações e uma pergunta aberta), passa pelo pipeline real. Com o Piper, as vozes são sintetizadas; com --no-tts, o áudio é sintético e serve para testar sem modelo.

ata demo --lang pt-BR
ata demo --lang en --no-tts
# note: ~/Ata/notas/2026-10-05-2111-revisao-do-mare-app-de-hortas.md
5

Grave uma reunião de verdade

Ligue ata toggle a uma tecla (GNOME/KDE, PowerToys/AutoHotkey, Atalhos do macOS, Stream Deck). No Linux, outras placas de som: ATA_FAR_TARGET e ATA_MIC_TARGET com o node.name do wpctl status.

ata toggle                                         # começa
ata toggle                                         # para e escreve a ata
ata start --title "Kickoff Acme" --speakers 3 --lang pt-BR
ata status --json
6

Importe o que já existe

Áudio ou vídeo de qualquer formato (passa pelo ffmpeg) vira uma reunião só com a faixa "far". Gravações do CrunchLog também entram.

ata import entrevista.mp4 --lang es --title "Entrevista Lucía"
ata process --dry-run ~/CrunchLog/recordings/2026-10-05-1642-demo
# bundle crunchlog/2 lido: 2 tracks, offsets={"far": 0.0, "mic": 0.0}
7

Ajuste a ata

Dê nomes, reprocesse com o número certo de pessoas, exporte legendas. Suas anotações vão no my-notes.md da pasta da reunião e entram no resumo.

ata speakers latest "Pessoa 2=Ana" "Pessoa 3=Bruno"
ata process latest --speakers 4
ata rerender latest
ata export latest --format srt          # srt|vtt|txt|json|md|csv
8

Busque e pergunte em todas as reuniões

O índice SQLite junta busca por palavra (FTS5) e por significado (vetores do Ollama). Cada trecho vem com [reunião, mm:ss].

ata search "data de lançamento" --since 30d
ata ask "o que decidimos sobre o lançamento?"
# [Revisão do Maré app de hortas, 01:00] Eu: ...ficou definido que lançamos a versão dois no dia 14 de novembro
ata actions --owner Ana              # ações em aberto entre reuniões
ata actions --done <id>               # marca como feita (id do --json)
9

Prepare a próxima reunião

A pauta junta ações em aberto, decisões e perguntas das reuniões com aquele cliente. Os itens (qN) se marcam sozinhos quando a reunião seguinte responde a eles, inclusive ao vivo.

ata prep "acme" --calendar "Qui 14h, Ana e Bruno"
# ~/Ata/notas/2026-10-06-acme-preparacao.md
10

Modo ao vivo

Durante a gravação, transcreve as duas faixas em tempo real pelo Nemotron 3.5 streaming local, grava as falas em live/turns.jsonl e marca a pauta. Nada de serviço pago.

ata start --title "Acme semanal"
ata live start
ata live tail                           # mostra as falas chegando
11

Reconheça vozes (opcional)

Desligado por padrão, porque voz é dado biométrico. Com [voices] enabled = true, cadastre uma voz e o "Pessoa 2" vira "Ana" nas próximas reuniões. Fica só na sua máquina e pode ser apagado.

ata voices enroll Ana latest "Pessoa 2"
ata voices list
ata voices forget --all
12

Dashboard

Gravar e parar, ouvir as faixas, transcrição clicável, renomear falantes, busca e modo ao vivo, em PT, EN ou ES. Só escuta em 127.0.0.1; a primeira visita usa o link com o token.

ata dashboard              # http://127.0.0.1:47530/
Agentes e segundo cérebro

Suas reuniões viram memória dos seus agentes

O Ata foi pensado para agentes: o servidor MCP, as skills e o Markdown são interfaces de primeira classe.

🔌 MCP (19 ferramentas)

ata_status, ata_list, ata_read, ata_search, ata_ask, ata_actions, ata_decisions, ata_prep, ata_person, ata_record_start/stop/toggle, ata_process, ata_job, ata_rename_speakers, ata_export, ata_reindex, ata_doctor, ata_action_done.

claude mcp add --scope user ata -- ata mcp

🧠 Segundo cérebro

Cada reunião vira fontes/AAAA-MM-DD-slug.md (tipo fonte, subtipo reunião) e as decisões entram em decisoes/registro.md. Arquivos que você editou nunca são sobrescritos.

ata connect cerebro --dir ~/meu-cerebro
ata connect obsidian --vault ~/Obsidian

🧩 Skills e plugin

Cinco skills para Claude Code e Codex: meeting-notes, action-items, meeting-prep, ask-meetings, meeting-to-wiki. O plugin está em .claude-plugin/. Agentic OS de Jack Roberts também é suportado (opcional).

ata connect agentic-os --dry-run
Telas reais

O dashboard com as reuniões do demo

Capturas da versão 0.1.0 com as três reuniões de demonstração (pt-BR, en, es).

Visão geral com gravar e parar e as últimas reuniões
Visão geral: gravar e parar, estado do gravador e últimas reuniões.
Reunião aberta com resumo, decisões, ações e transcrição
Reunião: resumo, tópicos, decisões, ações com responsável, perguntas, falantes renomeáveis e transcrição clicável.
Lista de reuniões com filtro
Reuniões: lista com filtro por título, duração e número de falas.
Busca em todas as reuniões
Busca: o que foi dito sobre um assunto, em todas as reuniões, com o momento exato.
Página do modo ao vivo
Ao vivo: as falas chegando durante a reunião.
Configurações
Configurações: idioma, motores, resumo e privacidade.
Estado e privacidade

O que está pronto e o que falta medir

Transparência sobre a versão 0.1.0.

Pronto
Todas as fases implementadasGravação nos 3 sistemas, pipeline, nota trilíngue, resumo, busca, perguntas, pauta, ações, vozes, conexões, MCP, dashboard, modo ao vivo, demo, doctor e bench. Mais de 450 testes automáticos, sem rede e sem modelos.
Testado
Gravação real no LinuxCaptura pelo PipeWire testada de verdade num DGX Spark (GB10, ARM64).
A medir
Motores reaisNeMo-Speech.cpp, onnx e Ollama estão implementados mas ainda não foram medidos nesta versão. O formato da API do NeMo-Speech.cpp segue o que está documentado em src/ata/engines/nemo.py, e os hashes dos downloads ainda não estão fixados (por isso o --allow-unverified).
A testar
Windows e macOSA captura no Windows está implementada; o helper do macOS vem como código-fonte Swift, ainda não compilado.
Nível 0
Privacidade padrão: nada sai da máquinaTranscrição, resumo pelo Ollama, busca e modo ao vivo são todos locais. O nível 1 (Claude ou Codex pela assinatura) envia só texto, com as ferramentas desligadas. Logs nunca contêm texto de reunião. ata privacy <reunião> mostra quem tocou cada gravação.