Use when a meeting just ended and a transcript or rough notes must become a record the absent can act on — decisions with their why, actions with an owner and a real date, open questions, a recap inside 24–48h — or to clean an AI-notetaker draft that invented tasks or swapped speakers. NOT the durable ADR with alternatives weighed (that is decision-records).
npx skills add https://github.com/ericrisco/rsc-harness --skill meeting-notes
*The meeting just ended. Pull the decisions and the why, assign the actions with owners and real dates, flag what's still open, and ship a record someone who missed it can act on.*
You own the point-in-time meeting record: take a transcript or raw notes, separate signal from noise, and emit a curated artifact — decisions (with rationale), action items (owner + due date), open questions, and a one-screen TL;DR. The output is human-readable judgment, not a code file.
| If the ask is… | Route to |
|---|---|
| The durable decision record — full rationale, alternatives weighed, reversibility argued, review cadence | decision-records. This skill *captures* a decision in its meeting context and hands the heavy ADR off; it does not maintain the long-lived artifact |
| A reusable step-by-step procedure / runbook | sop-builder. A SOP is a repeatable how-to; meeting notes are a point-in-time record |
| Tracking the emitted tasks across a board / sprint | project-ops. This skill *emits* action items; their lifecycle is not its job |
| Scheduling the meeting, finding a slot, sending the invite | calendar-scheduling |
| Building the integration that pushes notes into Notion/Slack/a tracker | notion-connector / automation-flows |
| Summarizing an arbitrary document that is not a meeting | document-processing |
This is the spine. Six steps, in order:
Your first move depends on the source. Branch here:
| You have… | First move | Why |
|---|---|---|
| A live meeting / you're the note-taker | Capture in real time, then verbal-confirm each owner before close | Memory decays fast; the room is the cheapest place to fix attribution |
| An AI-notetaker transcript (Otter, Fireflies, Granola…) | Verify *first* — speakers, hallucinated tasks, quotes vs. source — before you trust any line | AI drafts misattribute speakers and invent tasks; a clean-looking draft is the trap |
| Raw bullet notes someone typed | Sort signal from noise, then chase the gaps (missing owners/dates) | The notes already filtered; your job is structure + completeness |
Curated record, not a transcript (don't dump the conversation flow). Canonical sections, in this order:
# <Meeting> — <Date>
**Attendees:** Ana, Marc, Júlia (note-taker: Ana) · **Purpose:** decide Q3 launch scope
## TL;DR
One screen the absent can act on: we cut feature X from the launch, Marc owns the
go/no-go by Jun 12, payments integration is still open.
## Decisions
- Cut feature X from the Q3 launch. *Why:* QA can't cover it in time; ships in Q4.
*Reversibility:* partially-reversible (re-add in Q4). Dissent: Júlia wanted a flag.
## Action items
- [ ] Spike the Stripe webhook retry — Marc — by Tue Jun 9
- [ ] Send revised launch scope to stakeholders — Ana — by Thu Jun 11
## Open questions
- Who signs off on the payments contract? (raised by Marc, unresolved)
## Parking lot
- Revisit pricing tiers next sync (not in scope today)
Four filled versions of this skeleton — decision meeting, standup/sync, retro, 1:1 — plus copy-paste action-item and decision rows are in references/templates.md.
A complete action item is verb, owner, by <real date>: verb-first ("Draft…", "Spike…", "Send…", "Confirm…"), one named person — not "the team", not "we", since shared ownership means nobody owns it — and a real date ("by Tue Jun 9", never "next week", "soon", or "ASAP"). Explicit dates and named owners raise completion and ownership. (Umbrex, accessed 2026-06-02.)
Bad → Good:
| Bad | Good |
|---|---|
| "Look into the API stuff — team — soon" | "Spike the Stripe webhook retry path — María — by Tue Jun 9" |
| "Follow up on the contract" | "Send the signed vendor contract to legal — Marc — by Thu Jun 11" |
| "Everyone review the doc" | "Leave inline comments on the launch doc — Ana, Júlia — by Mon Jun 8" |
Verbal-confirm before the meeting ends. Ask each owner to confirm they accept the task while everyone is still present. (Umbrex, accessed 2026-06-02.) An unaccepted task is a wish.
Add a status field ( ] open / [~] in progress / [x] done) so the same record can be re-read as a tracker until the tasks migrate to [project-ops.
Add RACI only when ownership is genuinely contested — a cross-team decision with unclear accountability. Don't bolt a Responsible/Accountable/Consulted/Informed grid onto a five-person standup; it's overhead nobody reads.
For each real decision capture three things:
Tag each decision by reversibility — reversible / partially-reversible / irreversible — as a single field. Reversible calls can be made fast on imperfect info; irreversible ones warrant slowing down and recording more context, and the tag helps later review. (fs.blog / Reflect OS, accessed 2026-06-02.)
Bad → Good:
| Bad | Good |
|---|---|
| "Decided to use Postgres." | "Adopt Postgres over DynamoDB for the events store. *Why:* relational queries we need; team already knows it. *Reversibility:* partially-reversible. Dissent: none." |
When a decision needs the full ADR — alternatives weighed, reversibility argued, a review date — that is decision-records' job. Capture it here in context, then hand it off. Don't grow an ADR inside the meeting notes.
AI transcripts hallucinate and misattribute speakers, and even strong ASR is not error-free — Whisper reports ~2.5–3% word error on clean read speech (LibriSpeech test-clean) and ~4.7% on TED talks (TED-LIUM), and real meeting audio with crosstalk and accents is worse. A human verification pass is mandatory before any task or quote ships. (OpenAI Whisper, *Robust Speech Recognition via Large-Scale Weak Supervision*, arXiv 2212.04356, https://cdn.openai.com/papers/whisper.pdf, accessed 2026-06-02.) Never let an AI-extracted action item or quote go out unverified against the source.
Run three checks before you trust a draft:
When a line is suspect, flag it for verification rather than asserting it — and never invent a missing owner or date. The full checklist is in references/templates.md.
Recording a conversation carries real legal and confidentiality exposure. (Justia, *Recording Phone Calls and Conversations — 50-State Survey*, https://www.justia.com/50-state-surveys/recording-phone-calls-and-conversations/, accessed 2026-06-02; ABA GPSolo eReport "AI and You", Sept 2025.)
Ship within 24–48h while memory is fresh. (VoiceType / Wrike, accessed 2026-06-02.)
Then route, don't fork. Action items → a tracker via project-ops (or pushed by automation-flows / notion-connector). Durable decisions → decision-records. Keep one canonical home for the record and link to it — don't paste three diverging copies into Slack, Notion, and email.
| Anti-pattern | Why it fails | Do instead |
|---|---|---|
| Paste the whole transcript as "the notes" | Nobody re-reads a wall of dialogue; the decisions drown | Curate to decisions, actions, open questions + a TL;DR |
| Action item with no owner ("the team will…") | Shared ownership = nobody owns it; it dies | One named person per task |
| Owner but no real date ("soon", "next week") | Not a deadline; can't be tracked or chased | verb, owner, by <real date> |
| Ship the AI draft unverified | Hallucinated tasks and swapped speakers go out as fact | Run the 3 verification checks first |
| Auto-record a sensitive/privileged meeting | Consent and privilege exposure; can waive privilege | Announce + consent; hand-note sensitive meetings |
| Decision with no why | Rots — re-litigated when nobody recalls the trade-off | One sentence of rationale per decision |
| Send the recap a week later | Memory's gone; corrections are guesses; team already drifted | Draft within 24–48h, invite corrections, finalize |
| Fork the notes into three places | Versions diverge; people act on the stale one | One canonical home, link don't copy |
| Invent a missing owner or date | A fabricated commitment is worse than a flagged gap | Flag it as "needs confirmation" — never guess |
| Bolt RACI onto a standup | Overhead nobody reads; slows a simple sync | RACI only when ownership is genuinely contested |
Take ericrisco/meeting-notes from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.