AgentStack
SKILL verified MIT Self-run

Meeting Summarizer

skill-jlaska-obsidian-claude-plugins-meeting-summarizer · by jlaska

Summarize a meeting from transcript artifacts and inject "## Notes by Claude" into an Obsidian meeting file

No reviews yet
0 installs
17 views
0.0% view→install

Install

$ agentstack add skill-jlaska-obsidian-claude-plugins-meeting-summarizer

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Meeting Summarizer? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Meeting Summarizer

Reads a meeting transcript (VTT, TXT, SRT) and optional agenda/prep notes, then generates a structured "## Notes by Claude" summary and injects it into the corresponding Obsidian meeting file.

When to Use

Invoke /meeting-summarizer when you want to:

  • Summarize a recorded meeting from a transcript file
  • Add or refresh AI-generated notes in an existing meeting Obsidian file
  • Replace a ## Notes by Gemini section with ## Notes by Claude

Workflow

Step 1 — Discover Vault Root

Read Obsidian configuration to find the active vault:

cat ~/Library/Application\ Support/obsidian/obsidian.json

Parse the JSON to find the vault with "open": true. Extract vault_root.

Step 2 — Identify the Meeting File

If invoked with an argument (e.g., /meeting-summarizer 2026-04-09), use it to locate the meeting file:

find "/MEETINGS" -name "*.md" | head -5

If multiple matches or no argument: use AskUserQuestion to let the user select or provide the meeting file path. Show the matched file and confirm before proceeding.

Step 3 — Collect Artifacts

Ask the user to provide (or confirm auto-discovered paths):

  • Transcript (.vtt, .txt, .srt) — required
  • Agenda / prep notes (.md) — optional, used only as framing context
  • Recording (.m4a, .m4v) — noted in the summary output but not processed

Auto-discovery: check ~/Projects/coaching/sessions// where the date matches the meeting file date. Show any found artifacts and ask the user to confirm.

Step 4 — Parse the Transcript

Read the transcript file. Strip VTT formatting if needed:

# For .vtt files: strip timestamp lines (00:00:00.000 --> 00:00:01.040)
# and sequence numbers, keeping Speaker: text lines only

Use this Python snippet (via uv) to parse VTT into clean diarised text:

uv run --with webvtt-py python3 - "

If .txt format: read directly.

Output: clean text with speaker labels preserved (e.g., JP: Smart.\nJames L: Continue feeding...).

Step 5 — Confirm Speakers

  1. Extract unique speaker labels from the transcript (prefix before first : on each line).
  2. Display the found labels to the user.
  3. Use AskUserQuestion: "Map speaker labels to PEOPLE/ notes?"
  • If yes: search PEOPLE/*.md for name candidates (check aliases: frontmatter)
  • Present candidates per label; user confirms match or selects "keep as-is"
  • On confirmed match: add the VTT label as an alias in the PEOPLE note's frontmatter
  • Build a speaker map: {"JP": "John Poelstra", "James L": "James Laska"}
  1. Apply the speaker map to the clean transcript text before summarization.
  2. Always show the confirmed speaker list and ask for final confirmation before generating.

Step 6 — Read Agenda (if provided)

Read the agenda/prep notes file. Use this as framing context in the summary prompt (it helps identify expected topics and decision points) but do NOT quote it directly in the "## Notes by Claude" output — the summary must be grounded in the transcript.

Step 7 — Generate "## Notes by Claude"

Generate the summary using the full transcript text (with resolved speaker names) and optional agenda as context. Follow the intellectronica Task 2 structure:

## Notes by Claude

### Summary

### Key Discussion Points
#### 
- Specific detail or sub-point
- _"Verbatim quote from transcript"_ — Speaker Name

#### 
- ...

### Decisions Made
- Concrete decision reached (or "None recorded" if none)

### Action Items
- **Task description** — Owner — Deadline (if mentioned)
(or "None recorded" if none explicitly stated)

### Key Quotes
- _"Verbatim quote that captures a key moment"_ — Speaker Name

Formatting rules:

  • Use ## for the section heading, ### for sub-sections, #### for topic headings
  • Integrate verbatim quotes (italicised, attributed) within Key Discussion Points
  • Keep Key Quotes to 3-5 standout moments
  • Action items: bold the task, name the owner, include deadline only if explicitly stated
  • If a section has nothing to report, write "None recorded."

Step 8 — Inject into Meeting File

Read the current meeting file content and inject the generated section:

  • If ## Notes by Claude already exists → replace it (idempotent re-runs)
  • If ## Notes by Gemini exists → replace it with ## Notes by Claude
  • Otherwise → append at the end of the file

Use the Edit tool to make the change.

Step 9 — Confirm to User

Report:

  • Meeting file updated (path relative to vault root)
  • Speaker mapping used
  • First few lines of the generated summary

Output Format Reference

## Notes by Claude

### Summary
James Laska and John Poelstra met for their bi-weekly coaching session, focusing
on [primary topics]. Key outcomes included [decisions/commitments].

### Key Discussion Points
#### Leadership & Org Changes
- Appointed Deepika as lead for a new engineering team
- _"This is you leading. Not grinding, not shoveling."_ — John Poelstra

#### Career & Networking
- LinkedIn outreach still deferred; June remains the soft deadline
- _"You don't need the resume to be amazing. It just has to be good enough."_ — John Poelstra

### Decisions Made
- None recorded.

### Action Items
- **Schedule LinkedIn/resume work block** — James Laska — Thursday April 16, 2-5pm
- **Follow up with Tailscale contacts** — James Laska

### Key Quotes
- _"What's the life you want to live?"_ — John Poelstra
- _"June is still the soft deadline. It's April 9. That's 8 weeks."_ — John Poelstra

Related Skills

  • obsidian-vault-discovery: Used to discover vault configuration
  • meeting-planner: Creates and hydrates meeting files from Google Calendar
  • daily-planner: Orchestrates daily note creation and meeting file hydration

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.