Communitygithub.com

Ações de Itens → Todoist + Rascunhos de E-mail

Extrair itens de ação das reuniões de hoje do Granola/Grain, criar tarefas no Todoist, concluir tarefas cumpridas e rascunhar e-mails de acompanhamento acionados por reuniões. Use ao executar o cron de itens de ação diário, cron pós-reunião ou quando o usuário pedir para processar itens de ação de reuniões. NÃO para rascunho geral de e-mails sem contexto de reunião.

O que é Ações de Itens → Todoist + Rascunhos de E-mail?

Esta skill automatiza o fluxo de trabalho de itens de ação após reuniões, integrando reuniões do Granola ou Grain com o Todoist e o Gmail. Ela primeiro verifica os compromissos do dia em ambos os calendários (pessoal e de trabalho) para estabelecer o que esperar, depois obtém as reuniões reais do Granola. A skill extrai apenas os itens de ação pessoais do usuário, ignorando compromissos de terceiros, e cria tarefas no Todoist com descrições detalhadas (nome da reunião, data/hora, contexto). Também verifica se tarefas existentes no Todoist foram cumpridas durante as reuniões de hoje, completando-as automaticamente para manter a lista limpa. Além disso, rascunha e-mails de acompanhamento (como intros, follow-ups com VCs ou envio de documentos), seguindo regras estritas de estilo e formato, incluindo a anexação de decks específicos quando relevante. A skill suporta Claude Code e depende de ferramentas de linha de comando como `gog` (para calendário), `mcporter` (para Granola), `todoist-cli` e scripts de logging Python. Sua principal força é a deduplicação rigorosa em dois níveis (nível de reunião e nível de tarefa) para evitar processamento duplicado, mesmo com múltiplos crons disparando para a mesma reunião.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SamuelChien/mega-skills-collection/tree/HEAD/action-items-todoist

Perguntar na sua IA favorita

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

Documentação

O que Ações de Itens → Todoist + Rascunhos de E-mail faz?

Configuração — leia antes de começar

Leia ../config/user.json (resolve para ~/executive-assistant-skills/config/user.json). Extraia e use ao longo de todo o processo:

  • name, full_name — para identificar seus itens de ação nas notas da reunião (ex.: "Gonto (Martin)")
  • whatsapp — para entrega de resultados
  • workspace — caminho absoluto para o workspace do OpenClaw

Não prossiga até ter esses valores.

Log de Depuração (OBRIGATÓRIO)

Leia ../config/DEBUG_LOGGING.md para a convenção completa. Use python3 {user.workspace}/scripts/skill_log.py action-items <level> "<mensagem>" ['<detalhes>'] a cada passo chave. Faça log ANTES e DEPOIS de cada chamada externa (gog, mcporter, todoist-cli). Em caso de erro, registre o comando completo e stderr antes de continuar.

Passos

0. Verifique a agenda de hoje para reuniões (AMBAS as contas)

Antes de consultar o Granola, obtenha as reuniões reais de hoje de AMBOS os calendários para saber o que esperar:

python3 {user.workspace}/scripts/skill_log.py action-items INFO "Iniciando execução de itens de ação"

# Obter data de hoje no formato YYYY-MM-DD e de amanhã
TODAY=$(date -u -d "$(TZ=America/Argentina/Buenos_Aires date +%Y-%m-%d)" +%Y-%m-%d)
TOMORROW=$(date -u -d "$(TZ=America/Argentina/Buenos_Aires date -d '+1 day' +%Y-%m-%d)" +%Y-%m-%d)

# Verificar AMBOS os calendários
gog --account {user.primary_email} --no-input calendar list primary --from "${TODAY}T00:00:00-03:00" --to "${TOMORROW}T00:00:00-03:00" --json 2>&1
gog --account {user.work_email} --no-input calendar list primary --from "${TODAY}T00:00:00-03:00" --to "${TOMORROW}T00:00:00-03:00" --json 2>&1

Registre os resultados: python3 {user.workspace}/scripts/skill_log.py action-items DEBUG "Eventos de calendário encontrados" '{"primary": N, "work": M, "total": N+M}'

Mescle eventos de ambos os calendários. Filtre por reuniões com participantes (pule eventos solo/pessoais). Isso fornece a verdade básica de quais reuniões ocorreram hoje — use para cruzar com os resultados do Granola e capturar quaisquer reuniões que o Granola perdeu.

SINTAXE CRÍTICA de data: Use datas ISO8601 explícitas com fuso -03:00. NÃO use expressões relativas como +1 day, today ou tomorrow nas flags do gog — elas podem não ser suportadas. Sempre calcule as strings de data reais.

1. Obtenha as reuniões de hoje do Granola

Nota de fuso horário: O Granola armazena horários de reuniões em UTC. Para ART (UTC-3), consultar "hoje" significa usar a data de hoje E a data de amanhã em UTC. Ex.: para 3 de março ART, consulte custom_start: "2026-03-03" e custom_end: "2026-03-04" para capturar todas as reuniões do dia ART.

mcporter call granola list_meetings --args '{"time_range": "custom", "custom_start": "<hoje YYYY-MM-DD>", "custom_end": "<amanhã YYYY-MM-DD>"}'

Colete IDs e títulos das reuniões. Registre: python3 {user.workspace}/scripts/skill_log.py action-items INFO "Reuniões do Granola encontradas" '{"count": N, "titles": [...]}'

Cruze com o calendário: Compare as reuniões do Granola com os eventos do calendário do Passo 0. Se uma reunião do calendário com participantes não tiver correspondência no Granola (por sobreposição de horário dentro de 15 min), registre um aviso — ela pode não ter sido gravada. Prossiga com o que o Granola tem, mas observe as reuniões não correspondidas na saída.

Pule se não houver reuniões (nem do Granola nem do calendário).

2. Consulte o Granola por MEUS itens de ação + gatilhos de e-mail

mcporter call granola query_granola_meetings --args '{"query": "Quais são todos os itens de ação pessoais, follow-ups e compromissos de {user.name} ({user.full_name}) destas reuniões? Apenas coisas que ELE precisa fazer, não o que outros se comprometeram. Para cada item, inclua a pessoa, empresa, projeto ou nome de candidato específico envolvido — nunca use referências genéricas. Também identifique: quaisquer promessas de fazer ALGO por e-mail (intros, follow-ups, envio de documentos, compartilhamento de informações, conectar pessoas, etc.), e se cada reunião foi um PRIMEIRO contato com aquela pessoa/empresa ou um follow-up.", "document_ids": ["<id1>", "<id2>", ...]}'

Passe TODOS os IDs de reunião. Preserve os links de citação.

3. Crie tarefas no Todoist

Nota: Carregue o env no mesmo comando — cada chamada de shell é uma sessão nova.

Leia {user.workspace}/skills/todoist-api/SKILL.md para uso da CLI. Para cada item de ação:

source {user.workspace}/.env && todoist-cli add "<título acionável>" --description "<contexto: nome da reunião, data/hora da reunião, quem solicitou, link do Granola>" --priority <1-4> --labels "<relevante>"

A descrição da tarefa DEVE incluir:

  • Nome da reunião (ex.: "Braintrust Weekly")
  • Data e hora da reunião (ex.: "Qua 5 Mar, 15:00 ART")
  • Quem solicitou / contexto
  • Link de citação do Granola

Regras:

  • Apenas suas ações: Os resumos do Granola frequentemente listam "próximos passos" sem proprietário claro. Seja cético — se a ação puder pertencer a outra pessoa (ex.: "digerir o próprio conteúdo", "verificar disponibilidade", "retornar a nós"), NÃO crie uma tarefa. Em caso de dúvida, crie uma tarefa de FOLLOW-UP ("Pingar X sobre Y") em vez de uma tarefa de propriedade.
  • Capture compromissos de outros: Se a outra pessoa disse que faria algo (ex.: "Volto em 2 dias"), crie uma tarefa de follow-up/ping com a data de vencimento apropriada, não uma tarefa para fazer a coisa você mesmo.
  • Especificidade: Toda tarefa DEVE incluir o nome específico da pessoa/empresa/projeto.
  • Datas de vencimento: Se houver prazo implícito, use --due com linguagem natural.
  • Labels: Marque: intro, follow-up, email, urgent conforme apropriado.
  • Prioridade: 4=urgente/sensível ao tempo, 3=entregas prometidas, 2=follow-ups gerais, 1=normal.

Sem divisão de tarefas para etapas sequenciais (OBRIGATÓRIO)

Nunca crie tarefas separadas para etapas que fazem parte do mesmo fluxo de trabalho. Se a ação é "preparar X e depois enviar X" — é UMA tarefa, não duas. Exemplos:

  • ❌ "Elaborar proposta" + "Enviar proposta" → ✅ "Elaborar e enviar proposta"
  • ❌ "Escrever rascunho" + "Enviar e-mail" → ✅ "Rascunhar e enviar e-mail para X"
  • ❌ "Revisar deck" + "Compartilhar deck" → ✅ "Revisar e compartilhar deck com X"

Uma tarefa por intenção. O usuário naturalmente executará as etapas em ordem.

Deduplicação de tarefas (OBRIGATÓRIO)

Antes de criar uma tarefa, execute uma verificação de duplicidade contra tarefas abertas do Todoist:

  1. Normalize o título proposto (minúsculas, remova pontuação, colapse espaços em branco).
  2. Pesquise tarefas abertas (source {user.workspace}/.env && todoist-cli list --filter "!completed") e compare o conteúdo normalizado.
  3. Trate tarefas de intro quase idênticas como duplicatas (ex.: "Intro David ao Marcos" vs "Intro David (n8n) ao Marcos Nils").
  4. Se existir duplicata: NÃO crie uma nova tarefa; anexe o contexto da reunião à descrição da tarefa existente quando útil.
  5. Na saída, relate as decisões de deduplicação sob Pulados como duplicatas:.

4. Rascunhe e-mails de acompanhamento

Para QUALQUER e-mail que precise ser rascunhado (intros, follow-ups, respostas a VCs, envio de documentos, etc.):

  • Leia e siga ~/executive-assistant-skills/email-drafting/SKILL.md — é a única fonte de verdade para todas as regras de rascunho, estilo, modelos, humanização e entrega.
  • Identifique gatilhos de rascunho a partir das notas da reunião:
    • Intros ou follow-ups prometidos
    • Documentos/PDFs/decks prometidos
    • Primeira ligação com um VC ou novo lead
    • Qualquer promessa de enviar e-mail para alguém
  • Em caso de dúvida sobre rascunhar → RASCUNHE.
  • Exceção: A regra de compromisso apenas de proposta abaixo substitui esta. Se o compromisso é elaborar uma proposta primeiro, NÃO rascunhe — crie apenas uma tarefa no Todoist.
  • HGP Deck: {user.workspace}/assets/HGP_Deck_2025.pdf — anexe via --attach {user.workspace}/assets/HGP_Deck_2025.pdf. Diga "deck da Hypergrowth Partners" no corpo do e-mail (não "panfleto" ou "nosso deck").
  • Ao rascunhar intros para contatos conhecidos: pesquise e-mails enviados em busca de intros anteriores para eles, use o mesmo formato, tom e descrição.

Requisitos específicos para intros (OBRIGATÓRIO)

Se os itens de ação incluírem intros, siga exatamente:

  1. Crie um rascunho de intro separado por par de intro (nunca mescle múltiplas intros em um e-mail de acompanhamento genérico).
  2. O assunto deve ser explícito: Intro: <Pessoa A> <> <Pessoa B>.
  3. O corpo deve incluir:
    • uma linha sobre quem cada pessoa é,
    • uma linha de contexto sobre por que esta intro está acontecendo,
    • feche com Deixo com vocês a partir daqui. e {user.signature}.
  4. Nunca substitua rascunhos de intro por um e-mail de resumo genérico como "Ótima reunião hoje" quando intros foram prometidas.
  5. Se os e-mails dos destinatários forem conhecidos, crie rascunhos no Gmail imediatamente; se algum e-mail estiver faltando, ainda gere o texto completo do rascunho e reporte FALTANDO_EMAIL: <nome>.
  6. No resultado do WhatsApp, inclua uma seção Rascunhos de intro criados: listando cada par de intro e se foi rascunhado no Gmail ou bloqueado por e-mail faltante.

Primeiro follow-up de chamada com VC / primeiro dealflow (OBRIGATÓRIO)

Quando a reunião for um PRIMEIRO contato com um VC ou empresa de dealflow:

  1. Crie um rascunho de follow-up da primeira reunião (a menos que bloqueado pela regra de apenas proposta abaixo).
  2. Use contexto específico da reunião no corpo (o que foi discutido, próximos passos explícitos, ofertas concretas), não gentilezas genéricas.
  3. Inclua seu posicionamento (como você trabalha) e anexe {user.workspace}/assets/HGP_Deck_2025.pdf quando relevante.
  4. Permitido usar "Ótima reunião hoje" apenas para esta classe de follow-up de primeira reunião.

Regra de compromisso apenas de proposta (OBRIGATÓRIO)

Se você se comprometeu a "elaborar uma proposta" (ou equivalente: proposta/deck/escopo a preparar primeiro):

  • NÃO rascunhe um e-mail de saída ainda.
  • Crie uma única tarefa no Todoist para elaborar E enviar a proposta — ex.: "Elaborar e enviar proposta de consultoria para Gabriel (BairesDev)".
  • NÃO crie tarefas separadas para "elaborar" e "enviar" — é redundante. Uma tarefa cobre o ciclo de vida completo.

5. Verifique se tarefas existentes do Todoist foram cumpridas nas reuniões de hoje

Após processar itens de ação, também verifique se alguma tarefa aberta existente do Todoist foi abordada/concluída durante as reuniões de hoje:

  1. Liste tarefas abertas: source {user.workspace}/.env && todoist-cli list.
  2. Para cada reunião, verifique se a discussão cobriu ou cumpriu alguma tarefa aberta (ex.: "Compartilhar estratégia de IA com Colin" → discutiu estratégia de IA diretamente com Colin na chamada).
  3. Se uma tarefa foi claramente cumprida na reunião, complete-a: source {user.workspace}/.env && todoist-cli complete <task_id>.
  4. Relate tarefas concluídas na saída: "✅ Concluída: [tarefa] — cumprida durante [nome da reunião]".

Isso garante que o Todoist permaneça limpo e reflita o que realmente aconteceu.

Tratamento de erros

  • Se gog calendar falhar: registre o erro com o comando completo + stderr (python3 {user.workspace}/scripts/skill_log.py action-items ERROR "gog calendar falhou" '{"command": "...", "stderr": "..."}'), continue com a outra conta e/ou apenas Granola.
  • Se mcporter call granola falhar com erros de autenticação: relate "⚠️ Autenticação do Granola expirou, execute mcporter auth granola --reset" e pare.
  • Se todoist-cli falhar: verifique se .env foi carregado e o token é válido. Relate o erro.
  • Se o Grain MCP estiver indisponível: prossiga com extração apenas do Granola, anote na saída "⚠️ Grain indisponível, resultados são apenas do Granola."
  • Se qualquer etapa falhar, continue com as etapas restantes quando possível — não aborte toda a execução por uma falha.

Deduplicação (CRÍTICO — evita tarefas duplicadas)

Deduplicação em nível de reunião

  • PRIMEIRO PASSO antes de qualquer processamento: Leia {user.workspace}/state/processed-meetings-YYYY-MM-DD.json (se existir — array de IDs de reunião do Granola).
  • Pule quaisquer reuniões cujo ID já esteja nessa lista — NÃO as reprocesse.
  • Imediatamente após processar cada reunião (antes de passar para a próxima), anexe seu ID de reunião do Granola ao arquivo. NÃO espere até o final — escreva após cada reunião para evitar condições de corrida com outros crons.
  • Este arquivo é a única fonte de verdade para "esta reunião já foi processada hoje?"

Nota: Títulos são frágeis para reuniões recorrentes que compartilham o mesmo nome. Sempre deduplique pelo ID da reunião do Granola.

Deduplicação em nível de tarefa

  • Antes de criar QUALQUER tarefa, verifique TANTO tarefas abertas QUANTO concluídas recentemente por quase duplicatas:
    1. Busque tarefas abertas: source {user.workspace}/.env && todoist-cli list.
    2. Busque tarefas concluídas hoje: use a API Sync do Todoist completed/get_all com since=<hoje 00:00 UTC> ou source {user.workspace}/.env && todoist-cli list --filter "completed today" se suportado.
    • Mesma pessoa + mesma intenção de ação = duplicata (ex.: "Mandar mensagem para Morgane sobre Hank" e "Mandar mensagem para Morgane (Braintrust) após chamada com Hank").
    • Normalize: minúsculas, remova parênteses, colapse espaços em branco.
    • Se duplicata existir em QUALQUER um (aberto ou concluído) → PULE, não crie.
  • Relate duplicatas puladas na saída: "⏭️ Pulada (já existe): [tarefa]".
  • Por que verificar tarefas concluídas: O usuário pode já ter concluído uma tarefa criada por um cron pós-reunião mais cedo hoje. Recriá-la é errado — o trabalho está feito.

Por que ambas as camadas são importantes

Crons pós-reunião disparam por reunião. O cron diário de fim de dia processa TODAS as reuniões. Sem deduplicação em nível de reunião, a mesma reunião é processada duas vezes. Sem deduplicação em nível de tarefa, mesmo que a reunião seja reprocessada (ex.: falha na escrita do arquivo), tarefas individuais não serão duplicadas.

Deduplicação é INEGOCIÁVEL

Se uma reunião aparecer em processed-meetings-YYYY-MM-DD.json, NÃO a processe novamente em hipótese alguma — mesmo que você ache que o cron pós-reunião "pode ter perdido algo". O cron pós-reunião já cuidou dela. Se houve problemas, o usuário pedirá uma reexecução manual.

Saída

  • Tarefas criadas ou rascunhos compostos → liste tarefas com breve resumo.
  • Tarefas concluídas (cumpridas em reuniões) → liste com ✅.
  • Sempre nomeie as reuniões específicas processadas (ex.: "da chamada com Fyxer, Braintrust weekly, HGP Staff") — nunca diga "das reuniões de hoje".
  • Nenhuma reunião ou nenhum item de ação → NO_REPLY.

Cruzamento com Grain (ATIVO — verificação em nível de transcrição)

O Grain MCP está disponível com acesso completo à transcrição. Após extrair itens de ação do Granola:

  1. Encontre a reunião no Grain: mcporter call grain.list_attended_meetings --args '{}' Nota: O schema do Grain não suporta filtros start_date/end_date. Chame com args vazios e filtre os resultados manualmente por start_datetime para corresponder ao intervalo de datas de hoje.
  2. Busque a transcrição: mcporter call grain.fetch_me ... [truncado para tradução]

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

SamuelChien/mega-skills-collection

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

SamuelChien/mega-skills-collection

Arquitecto de Soluciones Principal y Consultor Tecnológico de Andru.ia. Diagnostica y traza la hoja de ruta óptima para proyectos de IA en español.

SamuelChien/mega-skills-collection

Ingeniero de Sistemas de Andru.ia. Diseña, redacta y despliega nuevas habilidades (skills) dentro del repositorio siguiendo el Estándar de Diamante.

SamuelChien/mega-skills-collection

Estratega de Inteligencia de Dominio de Andru.ia. Analiza el nicho específico de un proyecto para inyectar conocimientos, regulaciones y estándares únicos del sector. Actívalo tras definir el nicho.

SamuelChien/mega-skills-collection

2D game development principles. Sprites, tilemaps, physics, camera.

SamuelChien/mega-skills-collection

3D game development principles. Rendering, shaders, physics, cameras.

SamuelChien/mega-skills-collection

Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences.

SamuelChien/mega-skills-collection

Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases. Use when auditing accessibility, fixing a11y violations, checking color contrast, generating compliance reports, or integrating accessibility checks into CI/CD pipelines.

SamuelChien/mega-skills-collection

Ab Test Analyzer - Auto-activating skill for Data Analytics. Triggers on: ab test analyzer, ab test analyzer Part of the Data Analytics skill category.

SamuelChien/mega-skills-collection

A B Test Config Creator - Auto-activating skill for ML Deployment. Triggers on: a b test config creator, a b test config creator Part of the ML Deployment skill category.

SamuelChien/mega-skills-collection

When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "conversion experiment," "statistical significance," or "test this." For tracking implementation, see analytics-tracking.

SamuelChien/mega-skills-collection

Acceptance Criteria Creator - Auto-activating skill for Enterprise Workflows. Triggers on: acceptance criteria creator, acceptance criteria creator Part of the Enterprise Workflows skill category.

SamuelChien/mega-skills-collection

Use when a coding task should be driven end-to-end from issue intake through implementation, review, deployment, and acceptance verification with minimal human re-intervention.

SamuelChien/mega-skills-collection

Accessibility Audit Runner - Auto-activating skill for Frontend Development. Triggers on: accessibility audit runner, accessibility audit runner Part of the Frontend Development skill category.

SamuelChien/mega-skills-collection

You are an accessibility expert specializing in WCAG compliance, inclusive design, and assistive technology compatibility. Conduct audits, identify barriers, and provide remediation guidance.

SamuelChien/mega-skills-collection

Web accessibility patterns for WCAG 2.2 compliance including ARIA, keyboard navigation, screen readers, and testing

SamuelChien/mega-skills-collection

Manage Discord channel access — approve pairings, edit allowlists, set DM/group policy. Use when the user asks to pair, approve someone, check who's allowed, or change policy for the Discord channel.

SamuelChien/mega-skills-collection

Create unified specification packages across Business, Development, and Design teams. Staged elaboration (L0 Vision → L1 Requirements → L2 Team Detail → L3 Acceptance Criteria) to build shared understanding. Does not write code.

SamuelChien/mega-skills-collection

Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM. Trigger with "research [company]", "look up [person]", "intel on [prospect]", "who is [name] at [company]", or "tell me about [company]".

SamuelChien/mega-skills-collection

Validate messaging consistency across website, GitHub repos, and local documentation generating read-only discrepancy reports. Use when checking content alignment or finding mixed messaging. Trigger with phrases like "check consistency", "validate documentation", or "audit messaging".

Habilidades Relacionadas