Prompt file imported from RobertDS07/brain-starter (
.claude/commands/brain/meeting.md). Copyright stays with the author.
description: Importa um transcript de reunião de ~/Downloads para o brain (convertendo para .md quando necessário) e extrai contexto + pendências. Args: termos para identificar a reunião (ex: "checkpoint produto", "discovery onboarding"). Faz fuzzy match no nome do arquivo, converte para .md (via textutil quando .docx) preservando o texto literal, e reporta o que importa.
brain:meeting
Importa o transcript bruto de ~/Downloads/ para meetings/ no brain sempre como .md (convertendo de .docx via textutil quando necessário, preservando texto literal), depois lê o conteúdo e extrai contexto + pendências para o usuário.
regra obrigatória: NUNCA reescrever a transcrição. A conversão
.docx → .mdé extração mecânica viatextutil -convert txt— preserva timestamps, falas e quebras de speaker como o transcript original entregou. Geração de reminders só quando houver pendência real.por que sempre
.md: a collectionqmd brainindexa só**/*.md. Transcript em.docxfica invisível noqmd search— o que viola a regra "transcript é fonte de verdade" doCLAUDE.md.
1. validar argumentos
Os argumentos são termos descritivos da reunião (ex: checkpoint produto, discovery onboarding).
Se vazio → parar e pedir: "qual reunião? me dá um nome/tema".
TERMS = lista de termos (split por whitespace, lowercased).
2. buscar transcript em ~/Downloads
Listar candidatos com extensões de transcript e filtrar por todos os termos (AND, case-insensitive):
python3 <<'PY'
import os, glob
terms = """__TERMS__""".lower().split()
downloads = os.path.expanduser("~/Downloads")
exts = (".docx", ".txt", ".md", ".vtt", ".srt", ".pdf")
candidates = []
for path in glob.glob(os.path.join(downloads, "*")):
if not path.lower().endswith(exts):
continue
name = os.path.basename(path).lower()
if all(t in name for t in terms):
candidates.append(path)
candidates.sort(key=lambda p: os.path.getmtime(p), reverse=True)
for p in candidates:
print(p)
PY
- zero matches → reportar e parar
- um match → seguir
- múltiplos matches → exibir lista numerada com data de modificação e perguntar qual
3. extrair data e tema do nome
Padrão Google Meet (Gemini Notes): <tema> - YYYY_MM_DD HH_MM GMT-XX_XX - Anotações do Gemini.docx.
Outros formatos comuns (Otter, Read.AI, Fathom): geralmente trazem data no nome do arquivo — adaptar regex conforme necessário.
python3 <<'PY'
import os, re
filename = os.path.basename("""__FILE__""")
m = re.search(r"(\d{4})_(\d{2})_(\d{2})", filename) or re.search(r"(\d{4})-(\d{2})-(\d{2})", filename)
date_iso = f"{m.group(1)}-{m.group(2)}-{m.group(3)}" if m else ""
theme = re.split(r"\s*-\s*\d{4}[_-]\d{2}[_-]\d{2}", filename)[0]
theme = re.sub(r"\s*-\s*Anota[çc][õo]es do Gemini.*", "", theme, flags=re.IGNORECASE).strip()
theme = re.sub(r"\.(docx|txt|md|vtt|srt|pdf)$", "", theme, flags=re.IGNORECASE).strip(" -")
print(f"DATE={date_iso}")
print(f"THEME={theme}")
PY
Se a data não veio do nome → perguntar ao usuário. Não inventar.
SLUG = THEME em kebab-case minúsculo, sem acentos, ~50 chars.
SRC_EXT = extensão original do arquivo (usada só para decidir o método de importação).
DEST = <path-do-brain>/meetings/transcript-<DATE>-<SLUG>.md (sempre .md).
4. checar duplicata
ls <path-do-brain>/meetings/transcript-<DATE>-<SLUG>.md 2>/dev/null
Se já existir → perguntar: sobrescreve, renomeia (sufixo -2) ou aborta.
5. importar como .md
Sempre gerar <DEST> em .md. O método depende do SRC_EXT:
| origem | comando |
|---|---|
.docx |
textutil -convert txt -output "<DEST>" "<FILE_PATH>" (macOS) |
.txt / .md / .vtt / .srt |
cp "<FILE_PATH>" "<DEST>" |
.pdf |
usar a tool Read para extrair texto, salvar via Write em <DEST> (preservar texto literal — sem reescrever) |
A conversão é extração mecânica do texto. Não gerar frontmatter, não adicionar resumo, não criar índice — o .md resultante é o transcript literal com a mesma estrutura que o ferramenta original entregou.
6. ler conteúdo para análise
A leitura é necessária para extrair contexto/pendências. Não escrever o conteúdo lido em nenhum arquivo — só usar em memória.
Para transcripts longos (>200KB), ler com Read paginado em blocos de ~2000 linhas usando os parâmetros offset e limit.
7. analisar e reportar ao usuário
A partir do conteúdo lido, gerar um relatório no chat (não em arquivo) com:
a. resumo do encontro (4–6 bullets)
do que falaram, principais decisões, mudanças de direção.
b. compromissos do usuário
- o que ele se comprometeu a fazer
- prazos mencionados
- pessoas envolvidas
c. compromissos de terceiros com o usuário
- o que outras pessoas vão fazer e quando
- dependências que ele precisa cobrar
d. pendências detectadas — candidatas a reminder
para cada pendência:
- título curto
- contexto mínimo (1–2 linhas)
- ação concreta
- proposta de slug:
<slug>.md
e. conexões com o que já existe no brain
rodar qmd search -c brain "<termos do tema>" e listar 2–4 arquivos relevantes (reminders, projects, work, outros transcripts).
f. ata estruturada (opcional)
ao final, perguntar: "quer que eu gere meetings/<DATE>-<SLUG>.md com a ata curada (decisões + ações)? síntese, não cópia."
8. criar reminders das pendências (só com confirmação)
Para cada pendência que o usuário confirmar:
- criar
reminders/<slug>.mdseguindo a estrutura obrigatória doCLAUDE.mddo brain - adicionar entrada em
reminders/active.mdna seção apropriada - incluir
## conexõesapontando parameetings/transcript-<DATE>-<SLUG>.md
Não criar reminder automaticamente. Sempre confirmar.
9. commit + push + qmd update
cd <path-do-brain>
git add meetings/transcript-<DATE>-<SLUG>.md
# adicionar reminders criados, se houver:
# git add reminders/<slug>.md reminders/active.md
git commit -m "add: transcript <tema> <DATE>"
git push origin main
qmd update
10. mensagem final curta
transcript importado: meetings/transcript-<DATE>-<SLUG>.md
- <N> reminders criados: <lista>
- ata estruturada: <criada | não pedida>
