Skip to content
Development
Skill

/meeting-notes

NOTE: paste-text fallback works without MCPs, but ~~docs MCPs (Notion, Confluence, Granola) are typically only connected in Cowork — the Cowork variant has better fidelity for MCP-sourced meetings. Fold a meeting transcript or notes into structured intake. Use when user says

From plugin
aria-knowledge
1740 skills1 command12 MCP
Install
$ npx -y skills add mikeprasad/aria-knowledge --skill meeting-notes --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/meeting-notes

Context preview

The summary Claude sees to decide when to auto-load this skill.

NOTE: paste-text fallback works without MCPs, but ~~docs MCPs (Notion, Confluence, Granola) are typically only connected in Cowork — the Cowork variant has better fidelity for MCP-sourced meetings. Fold a meeting transcript or notes into structured intake. Use when user says

SKILL.md

meeting-notes.SKILL.md
description: "NOTE: paste-text fallback works without MCPs, but ~~docs MCPs (Notion, Confluence, Granola) are typically only connected in Cowork — the Cowork variant has better fidelity for MCP-sourced meetings. Fold a meeting transcript or notes into structured intake. Use when user says '/meeting-notes', 'capture meeting notes', 'fold this meeting transcript', 'process this Granola export', 'archive this standup'. Accepts a ~~docs URL (Notion meeting page, Confluence) OR pasted transcript text — unique among MCP-consuming skills in offering a paste fallback when no ~~docs MCP is connected. (Code port — ADR-094.)"

/meeting-notes — Capture Meeting Transcript to Intake

Save a meeting transcript or notes to `intake/meetings/{YYYY-MM-DD}-{slug}.md` with structured participants / topics / action items / decisions sections. Source can be a `~~docs` MCP (Notion meeting page, Confluence meeting doc) OR pasted transcript text (Granola export, raw transcript, hand-written notes).

Step 0: Resolve Config

Read `~/.gemini/antigravity/aria-knowledge.local.md` and extract `knowledge_folder`. If the file doesn't exist, stop: "aria-knowledge is not configured. Run /setup to get started."

Verify `{knowledge_folder}/intake/meetings/` exists. If not, create it (lazy creation for first-time use of this skill).

Step 1: Probe Connected MCPs (with paste fallback)

Check Claude's available tool list for `~~docs` MCPs:

  • **`~~docs`** (notion, atlassian, box, egnyte, google docs): if connected, available for MCP-sourced meeting docs.

**Branching logic** (this skill diverges from other MCP-consuming skills here — see ADR-015 (`{knowledge_folder}/projects/aria-cowork/decisions/015-capability-probe-pattern.md`) §"Application across the 5 MCP-consuming skills"):

  • **If `~~docs` IS connected AND input looks like a URL/ID:** route through MCP fetch (Step 2 MCP branch).
  • **If `~~docs` IS NOT connected OR input is `paste` (or empty):** offer paste fallback (Step 2 paste branch).
  • **If input is `paste` even with `~~docs` connected:** respect the explicit paste choice; skip MCP fetch.

Unlike `/intake extract`, `/intake thread`, `/digest`, and `/sync-decisions`, this skill does NOT hard-stop when no `~~docs` MCP is present. Meeting transcripts often arrive via paste (from Granola, from a meeting tool's export button, from hand-typed notes) — closing that path would defeat the skill's primary use case.

Step 2 (MCP branch): Parse + Fetch from ~~docs

Same as `/intake extract` (MCP-doc path) Step 2-3. Routing table:

| Input shape | Routes to | |---|---| | Contains `notion.so` | notion (`~~docs`) | | Contains `atlassian.net/wiki` | atlassian (`~~docs`) | | Contains `docs.google.com/document` | google docs (`~~docs`) | | Bare ID + known MCP | use the connected one |

Fetch the doc body. Proceed to Step 3.

Step 2 (paste branch): Prompt for transcript

If no MCP fetch is possible (or the user passed `paste`), prompt:

Paste the meeting transcript or notes below. End with a blank line + `---END---` on its own line. Common sources:

- Granola export (Markdown)
- Slack thread copy-paste
- Hand-typed notes
- Zoom / Teams / Meet auto-transcript export
- Any plaintext or Markdown

I'll structure it into participants / topics / action items / decisions.

Wait for the paste. Read the content until `---END---` marker. Proceed to Step 3.

Step 3: Structure the Transcript

Parse the transcript body to identify these sections (Claude infers from content; this is NOT a strict parser — handle informal transcripts):

1. **Participants** — names + roles if present. Look for lists at the top, "@" mentions, speaker labels. 2. **Date + duration** — if not explicit, ask user or default to today. 3. **Topics discussed** — section headings, bullet points, "we talked about" markers. 4. **Action items** — "TODO", "[ ]", "@person will", "action:" markers. Extract assignee + description + due date if present. 5. **Decisions** — "we decided", "agreed to", "going with X over Y" patterns. Extract the decision + rationale if stated. 6. **Open questions** — "?", "unresolved", "follow-up", "need to figure out" markers. 7. **Topic-level summary** — 1-2 sentences per major topic.

Be conservative: if a section can't be reliably extracted, mark it `(none identified)` rather than fabricating.

Step 4: Compose Meeting Note

Slug-ify the meeting title for the filename (from input arg, or extracted from first heading, or "meeting" as fallback). Lowercase, hyphen-separated, ASCII-only, max ~50 chars.

Filename: `intake/meetings/{YYYY-MM-DD}-{slug}.md`. If a file with that name exists, append `-2`, `-3` to deduplicate.

Body template:

---
date: <YYYY-MM-DD>
title: <meeting title>
source: <doc-url OR "pasted transcript">
source_type: <notion|atlassian|box|egnyte|google docs|paste>
participants: [<name list>]
duration: <if known>
tags: [meeting, <project-tag-if-inferable>]
---

# <Meeting title>

## Context

- **Date:** <YYYY-MM-DD>
- **Source:** <doc-url OR "pasted transcript">
- **Participants:** <comma-separated list>
- **Duration:** <if known, else omit>

## Topics

<for each major topic, with 1-2 sentence summary:>

### <Topic name>

<summary>

## Action Items

<for each action item:>

- [ ] **<assignee>** — <action description> <(due: <date> if present)>

<or: "(none identified)" if section is empty>

## Decisions

<for each decision:>

- **<decision>** — <rationale if stated, else "no rationale captured">

<or: "(none identified)">

## Open Questions

- <question>

<or: "(none identified)">

## Raw Transcript

<the original transcript body, preserved verbatim for reference. If from MCP fetch, include source-doc URL at top of this section.>

---

## Reaction

<intentionally left empty — the user's reaction / why this meeting is worth keeping in knowledge. /audit knowledge surfaces this for review.>

Step 5: Write + Report

Write the composed meeting note to `{knowledge_folder}/intake/meetings/{date

Read more
Ships witharia-knowledge

Agent Memory · Context Engineering · Planning & Reasoning · Human-in-the-Loop Governance ARIA is the missing infrastructure layer for production AI coding agents: persistent memory that survives context compaction, deliberate context engineering that loads

Get the whole plugin

Other skills on aria-knowledge.