Skip to content
Beta Multi-model support (OpenAI, Gemini, and more) launching soon.

meeting-transcript-parse

Installable Ships in meeting-to-action — or copy the raw skill below.
Open Claude.ai

Paste into Claude Code, Claude.ai, the desktop app, or the browser extension — ⌘/Ctrl+V.

ExperimentalNo security review

Meeting Transcript Parse

Transform raw meeting transcripts and rough notes into a clean, normalized meeting record. The output is a structured markdown document that serves as the source of truth for every downstream artifact: decision log, action register, follow-up email, and Jira push.

When this skill applies

  • User pastes a Teams/Zoom auto-caption export, a recording transcript, or a rough notes document
  • User provides a file path to a .txt, .docx, .md, or .vtt transcript
  • User asks to "pull actions," "clean up the meeting notes," "write a summary," or "who owned what"
  • After any client status call, sprint review, steering committee, or internal planning session

Skip when the user already has a clean normalized record — go directly to decision-log-builder, action-item-tracker, or jira-confluence-push.

Workflow

Step 1 — Load and orient

Read all provided files or pasted content. Identify:

  • Meeting type: Status call / steering committee / sprint review / discovery workshop / internal / other
  • Date and time (extract from transcript metadata or participant timestamps; ask if absent)
  • Duration (compute from first/last timestamp if available)
  • Participants: extract all named speakers; deduplicate by person, not by message
  • Platform context: detect references to Sitecore, Optimizely, Umbraco, Azure DevOps, Jira, Confluence, or specific project names — flag these for downstream use

Confirm participant list and meeting type with the user before proceeding if either is ambiguous.

Step 2 — Segment the transcript

Break the raw content into logical conversation segments. Each segment corresponds to one agenda item, topic shift, or distinct discussion thread. Label each:

[SEGMENT: <topic label>] [<start timestamp or position>]

If no timestamps exist, infer topic boundaries from conversational signals ("moving on," "next item," "let's talk about," "before we close").

Step 3 — Extract and tag content

Within each segment, tag every substantive contribution:

Tag Use when
[DECISION] A conclusion was reached and stated (even informally — "ok, we'll go with option B")
[ACTION] A task was assigned or self-assigned with at least an implied owner
[QUESTION] A question was raised that was not answered in this meeting
[RISK] A concern, blocker, or dependency was flagged
[PARKING LOT] Topic was deferred explicitly or implicitly to a future meeting
[INFO] Context, background, or update shared — no action or decision required

Every [DECISION] must capture: what was decided, who decided it (role, not personal name for client notes), and any conditions or caveats.

Every [ACTION] must capture: what task, who owns it (name + role), and target date (explicit or inferred — flag as [DATE TBD] if absent).

Step 4 — Build the normalized record

Produce the structured meeting record using the template in templates.md. Sections in order:

  1. Meeting header — type, date, duration, attendees (name + role + org)
  2. Agenda items covered — bulleted list; mark items not reached as [NOT REACHED]
  3. Discussion summary — one paragraph per segment; factual, past-tense, no editorializing
  4. Decisions — numbered list; each entry: decision text, decision-maker role, conditions
  5. Action items — table: # | Action | Owner | Due Date | Status (Open)
  6. Unresolved questions — numbered list; each entry: question text, who raised it, what's needed to resolve
  7. Parking lot — bulleted list; each entry: topic, why deferred, suggested next meeting slot
  8. Risks and blockers flagged — numbered list; each entry: risk description, raised by role, current status

Step 5 — Self-check

Before returning:

  • Every [DECISION] has a decision-maker role (not just "the group")
  • Every [ACTION] has an owner name and a due date (or [DATE TBD])
  • No participant is identified by personal name in sections that will be shared with clients; roles are used instead (or first name only for internal-only outputs)
  • Parking-lot items are not silently dropped — they appear explicitly
  • The action table is sortable by owner (alphabetical by last name or role)

Return the normalized record as a markdown block. Remind the user which downstream skills can consume it: decision-log-builder, action-item-tracker, meeting-followup-draft, jira-confluence-push.

Meeting type adapter notes

Meeting type Special handling
Status call Flag any scope change signals — even casual ("we might add...") — as [RISK]
Steering committee Elevate [DECISION] entries — these are formal governance decisions; include quorum note if detectable
Sprint review Link accepted/rejected items to sprint goal if mentioned; flag velocity signals
Discovery workshop See discovery-synthesizer plugin for deeper synthesis; this skill produces the raw record only
Internal Relax client-anonymization rules; names can appear in action table

Reference files

  • templates.md — full section templates with placeholder guidance and formatting examples
Technical details
Plugin
meeting-to-action
Author
Dakota Smith
Skill name
meeting-transcript-parse
Maturity
experimental
Security review
No security review
Owners
  • delivery
Argument hint
[paste transcript or @file-path] [--type status-call|steering-committee|sprint-review|discovery|internal] [--platform sitecore|optimizely|umbraco|azure|agnostic] [--output markdown|json]
Allowed tools
  • Read
  • Write
  • Glob
Source
plugins/meeting-to-action/skills/meeting-transcript-parse/SKILL.md

Edit this skill on GitHub — opens GitHub's web editor. No git knowledge needed.