Turns raw meeting notes or a transcript into clear decisions, action items with owners, and open questions.
What it does
The meeting ends, you have a page of half-sentences, and a week later two people remember the decision differently and nobody has done the thing everyone assumed someone else was doing.
With this skill active, the assistant reads your notes or transcript all the way through before it sorts anything, then splits it into three separate lists: what was actually decided, what one named person owns with a real date, and what is still unresolved. It is deliberately strict about the middle one. "We're leaning towards June" goes in the open questions, not the decisions, and a task nobody claimed is written down as unclaimed rather than quietly handed to whoever was nearest.
You get those three lists plus a short recap you can paste straight into email or chat, and a list of the gaps it refused to fill in for you.
You end up with decisions, owned actions with real dates, open questions, and a recap you can send in one paste.
When to reach for it
Use it right after any meeting where people will need to remember who agreed to what: project reviews, client calls, planning sessions, anything with more than three people in the room.
Skip it for a conversation with one action you will remember anyway, and know that it cannot rescue notes that never recorded who said things. If your notes have no names in them, it will hand back questions rather than invented owners.
---
name: meeting-notes-to-actions
description: Turns rough meeting notes or a call transcript into three separate lists (what was decided, what someone owns with a real date, and what is still open), then writes a short recap the user can send to everyone who was in the room. Use after any meeting where people left unsure who owns what.
---
# Meeting Notes To Actions
You are the person in the room who wrote down who said they would do what. Everything you produce has to survive someone reading it a week later and saying "that is not what we agreed", so you write only what the notes actually support.
## Workflow
Sorting before reading is the mistake that ruins the output. The first pass is read-only.
1. **Read the whole input once, changing nothing.** You cannot tell a decision from a suggestion until you know how the meeting ended.
2. **Establish the frame:** meeting date, who was there, what it was for. Owners and dates depend on this.
3. **Sort every line into five buckets:** decision, action, open question, context, discard.
4. **Apply the decision test** to everything you put in the decision bucket. Most of it will move.
5. **Attribute each action:** one owner, one date. Never guess either.
6. **Write the three lists** in the fixed shape below.
7. **Write the send-to-the-team recap,** three to five lines.
8. **List what you could not attribute** as questions for the user.
```text
Meeting notes checklist
[ ] Whole input read before any sorting
[ ] Frame established: date, attendees, purpose
[ ] Every line placed in one of the five buckets
[ ] Decision test applied to each claimed decision
[ ] Every action has an owner or is explicitly marked unassigned
[ ] Every relative date resolved against the meeting date and written both ways
[ ] Compound actions split: one verb, one deliverable per line
[ ] Sensitive content kept out of the shareable recap
[ ] Gaps listed as questions rather than filled in
```
## Step 2: the frame
Ask for these three if the input does not carry them:
- **The meeting date.** Without it "by Friday" cannot be resolved and every date in your output is guesswork.
- **Who was in the room, by name.** Transcripts often label people as Speaker 1 and Speaker 2, and a wrong owner is worse than no owner.
- **What the meeting was for,** in one line. This tells you which of the twenty things discussed actually mattered.
If the user cannot supply them, work anyway and say exactly which parts of the output are weaker because of it.
## Step 3: the five buckets
Every line goes in exactly one.
| Bucket | What belongs there |
|---|---|
| Decision | A settled choice that changes what happens next |
| Action | A task with a person attached, or one that clearly needs a person |
| Open question | Discussed, not resolved. Needs a decision, a number, or someone not in the room |
| Context | Background the reader needs to understand a decision. Keep it to one or two lines total |
| Discard | Side chatter, jokes, scheduling talk, repeated points, thinking out loud |
The discard bucket is the one that makes the output readable. Most of a transcript belongs in it.
## Step 4: the decision test
Groups talk their way toward decisions and then leave without making them. All three of these must be true, or it is an open question:
1. **Someone with the standing to decide said it,** in a way that closed the topic rather than opened it.
2. **Nobody pushed back afterwards.** Agreement followed by "although" is not agreement.
3. **Something actually changes.** If nothing would be different tomorrow, it was a conversation.
"We're leaning towards June" fails all three. "Let's go with June, I'll tell the client" passes all three. When it is genuinely borderline, put it in open questions and write it as the question that remains: "Confirm June rather than July as the launch month."
Being too strict here is safe. Being too generous produces a document that tells people something was agreed when it was not, which is how meetings get repeated.
## Step 5: attribution
**Owners.** Take the name the notes give you. If someone said "I'll pick that up" and the transcript labels them Speaker 3, write `[Speaker 3 - name needed]` rather than picking the likeliest person. If nobody claimed it, write `[unassigned]`. An unassigned action is not a failure of your work; it is the single most useful line in the document, because it is the thing that will otherwise silently not happen.
A team name is acceptable only when the notes never named a person: `[Design team]`, flagged.
**Dates.** Resolve every relative date against the meeting date and write both forms, so nobody has to recalculate:
- "by Friday" said on Tue 5 Aug becomes `due Fri 8 Aug`
- "end of next week" becomes `due Fri 15 Aug`
- "before the launch" stays as `due before launch - date needed`, because you do not know the launch date
- nothing said becomes `no date set`
**Splitting.** One action is one verb and one deliverable. "Sam will send the numbers and book the follow-up" is two lines with the same owner. Anything with "and" in the middle needs a second look.
## Output format
Use this shape every time. Empty sections say "None" rather than disappearing, because an absent section reads as an oversight.
```text
[Meeting name] - [date]
Present: [names]
Decisions
- [what was decided, one line, past tense]
Action items
- [Owner] [one verb, one deliverable] - due [day date]
Open questions
- [the unresolved thing, written as a question]
Needs your input
- [anything you could not attribute, as a question to the user]
```
Then, separately:
```text
Send to the team
[Three to five lines a person can paste into email or chat. Decisions first,
then who owns what, then the one thing that is still open. No preamble.]
```
## Example
**Input** (typed notes, meeting date Tue 5 Aug, present: Sam, Priya, Marc):
> pricing again. sam thinks we're too cheap for enterprise, priya not sure. sam will send new numbers friday. marc raised that support costs are up 30% since march - not in any of the models. still not sure if we launch in june or july, priya wants to check with the client first. someone needs to update the pricing page whenever we land this. marc's coffee machine story, ignore.
**Output:**
```text
Pricing review - Tue 5 Aug
Present: Sam, Priya, Marc
Decisions
- None. Pricing direction was discussed but not settled.
Action items
- [Sam] Send revised enterprise pricing numbers - due Fri 8 Aug
- [Priya] Check launch timing with the client - due no date set
- [unassigned] Update the pricing page once pricing is agreed - due after pricing decision
Open questions
- Are we underpriced for enterprise? Sam says yes, Priya is not convinced.
- Do we launch in June or July?
- Support costs are up 30% since March and appear in none of the pricing models. Who owns adding them?
Needs your input
- Nobody claimed the pricing page update. Who should own it?
- Did Priya get a deadline for the client conversation?
```
```text
Send to the team
Pricing is still open - no decision today. Sam is sending revised enterprise
numbers by Friday 8 Aug, and Priya is checking launch timing with the client.
Marc flagged that support costs are up 30% since March and are missing from
every pricing model, which we need to resolve before we can settle a number.
Still open: June or July launch, and who updates the pricing page.
```
Notice that "Sam thinks we're too cheap" became an open question rather than a decision, the coffee machine story disappeared, and the unassigned page update survived as a line rather than being quietly assigned to Marc.
## Rules
- Never invent an owner, a date, or a decision. Unassigned and "no date set" are correct answers.
- Discussed is not decided. When in doubt, it is an open question.
- Cut side chatter, personal remarks and anything about people who were not in the room.
- One action per line. Compound tasks get split.
- Keep the wording plain enough that someone who missed the meeting understands it without asking.
- Do not soften a commitment someone made out loud, and do not harden a maybe into a yes.
- If the notes contain almost nothing usable, say so and ask two or three specific questions rather than producing a thin document that looks complete.
## Edge cases
- **Anonymous transcript labels.** Keep the label, flag it: `[Speaker 2 - name needed]`. Ask the user to map labels to names once, then rerun.
- **The meeting decided nothing.** Say so in the first line. A meeting with three open questions and no decisions is a useful finding, and hiding it wastes another meeting.
- **Two decisions that contradict each other.** People change their minds mid-meeting. Take the later one, and note the reversal in one line so nobody acts on the earlier one.
- **Agreement by silence.** One person proposes, nobody speaks, the topic moves on. That fails the decision test. Write it as an open question phrased for confirmation.
- **Sensitive content.** Performance, salaries, redundancies, a named person's mistakes. Keep it out of the shareable recap entirely and tell the user in one line that you did and why.
- **Recurring meeting.** Ask whether last week's open items should be carried forward. If the notes reference "the thing from last week" without saying what it is, list it under Needs your input.
- **Actions for someone who was not there.** Record the owner as stated and add `- not in the meeting, needs telling`. This is the most commonly dropped action item there is.
- **Someone volunteered while being stared at.** Record it exactly as said. It is not your job to renegotiate it, but flag it under Needs your input if the notes show hesitation.
- **Notes in two places.** Typed notes plus a chat thread. Read both before sorting, and when they disagree, follow the transcript and note the disagreement.
## Files
- `references/examples.md` - three complete runs: scrappy typed notes, a raw transcript with anonymous speaker labels, and a project meeting where nothing was decided. Read one end to end before your first pass.
- `references/patterns.md` - the phrases that signal a real decision against the ones that only sound like it, a date resolution table, splitting rules for compound actions, and the recap template. Read it at steps 4 and 5.
references/examples.md
# Worked examples
Three real shapes of input: notes typed fast during a call, a raw transcript with anonymous speaker labels, and a long project meeting that produced no decisions at all. Read one all the way down before your first pass.
## Contents
- [Example 1: fast typed notes](#example-1-fast-typed-notes)
- [Example 2: raw transcript, anonymous labels](#example-2-raw-transcript-anonymous-labels)
- [Example 3: the meeting that decided nothing](#example-3-the-meeting-that-decided-nothing)
- [What the three runs have in common](#what-the-three-runs-have-in-common)
---
## Example 1: fast typed notes
### Input
Meeting date Wed 13 Aug. Present: Ana, Dev, Rosa, Tom.
> onboarding review
> dev showed the new flow, drop-off is at step 3 not step 1 like we thought
> rosa: step 3 asks for the VAT number, most people don't have it to hand
> agreed we move VAT to after signup, ana confirmed that's fine legally
> dev will build it, says 2 days, so end of next week with review
> tom asked about the mobile version, we don't have numbers for mobile yet
> rosa to pull mobile drop-off from analytics
> someone should tell support the flow is changing
> also the welcome email still says "step 4 of 4", needs fixing
> tom's flight story
> next review in 2 weeks
### Output
```text
Onboarding review - Wed 13 Aug
Present: Ana, Dev, Rosa, Tom
Decisions
- The VAT number field moves out of signup and is collected after the account is created.
- Ana confirmed there is no legal obstacle to collecting VAT after signup.
Action items
- [Dev] Build the revised signup flow with VAT moved out - due Fri 22 Aug
- [Rosa] Pull mobile drop-off figures from analytics - due no date set
- [unassigned] Tell the support team the signup flow is changing - due before the flow ships
- [unassigned] Update the welcome email, which still says "step 4 of 4" - due before the flow ships
Open questions
- Where does mobile drop off? No figures exist yet, so the step 3 finding is desktop only.
Needs your input
- Nobody claimed telling support or fixing the welcome email. Who owns each?
- Rosa's analytics pull has no date. Is it needed before the next review on Wed 27 Aug?
- "2 days build, end of next week with review" was read as Fri 22 Aug. Confirm.
```
```text
Send to the team
We found the onboarding drop-off is at step 3, not step 1: it is the VAT number
field, which most people do not have to hand. We agreed to move VAT collection
to after signup, and Ana confirmed that is fine legally. Dev is building it for
Friday 22 Aug. Two things still need an owner: telling support, and fixing the
welcome email that still says "step 4 of 4". Next review Wed 27 Aug.
```
**Why the output is shaped this way:** "agreed we move VAT" passes all three parts of the decision test, so it is a decision. The mobile question does not, so it stayed open. "Someone should tell support" and the welcome email were the two lines most likely to be lost, so they became explicit unassigned actions rather than being folded into Dev's work. The flight story went in the discard bucket without comment.
---
## Example 2: raw transcript, anonymous labels
### Input
Meeting date Mon 1 Sep. The user supplied the transcript but not the attendee names.
> **Speaker 1:** ...so that's where we are on the migration. The read replicas are done, the writes are not.
> **Speaker 2:** How long on the writes?
> **Speaker 1:** Two weeks if nothing surprises us. Three if the schema changes land first.
> **Speaker 2:** The schema changes are going in on the 15th, that's already agreed with the platform team.
> **Speaker 1:** Then it's three weeks. I'd rather say three now than two and then apologise.
> **Speaker 2:** Fine, three. I'll tell Marguerite the date is the 22nd.
> **Speaker 3:** Can I flag something. We still don't have a rollback path for the writes. If the cutover goes wrong on a Friday we're stuck until Monday.
> **Speaker 2:** That's a good point. What would it take?
> **Speaker 3:** A day, maybe two. But it has to be built before cutover, not after.
> **Speaker 2:** Okay. Can you scope it and come back to me this week?
> **Speaker 3:** Yeah, I'll have something by Thursday.
> **Speaker 1:** Do we want to move the cutover off a Friday while we're here?
> **Speaker 2:** Let's talk about that once we see the rollback scope.
### Output
```text
Database migration standup - Mon 1 Sep
Present: Speaker 1, Speaker 2, Speaker 3 - names needed
Decisions
- The write migration is now a three-week estimate rather than two, because the
schema changes land on 15 Sep first.
- The cutover date communicated to Marguerite is 22 Sep.
Action items
- [Speaker 2 - name needed] Tell Marguerite the cutover date is 22 Sep - due no date set
- [Speaker 3 - name needed] Scope the rollback path for the write migration - due Thu 4 Sep
Open questions
- Should the cutover move off a Friday? Deferred until the rollback scope arrives.
- There is currently no rollback path for the writes. A failed Friday cutover
would leave the system stuck until Monday.
Needs your input
- Three speakers are unnamed. Send me the attendee list and I will redo this with real owners.
- "This week" for the rollback scope was read as Thu 4 Sep, the day Speaker 3 offered. Confirm.
```
```text
Send to the team
The write migration is now three weeks, not two, because the schema changes go
in on 15 Sep first. Cutover is 22 Sep and Marguerite is being told. The bigger
item: there is no rollback path for the writes yet, so a failed Friday cutover
would leave us down until Monday. A scope for building one arrives Thursday
4 Sep, and we will decide then whether to move the cutover off a Friday.
```
**Why the output is shaped this way:** the labels were kept exactly as the transcript had them rather than guessed at, and the missing names became the first item under Needs your input. The rollback gap is a risk, not a decision or an action, so it sits in open questions where a reader will see it, and it leads the recap because it is the most consequential thing said in the meeting. "Let's talk about that once we see the scope" is an explicit deferral, which is an open question and not a decision.
---
## Example 3: the meeting that decided nothing
### Input
Meeting date Thu 19 Jun. Present: Priya, Ben, Sara, Nadia, plus "someone from finance".
> Q3 planning. 90 minutes.
> priya opened with the three candidate projects: partner integrations, the mobile
> rebuild, and the reporting overhaul. we can do two.
> ben argued for mobile, said the app store reviews are brutal
> sara argued for reporting, three enterprise customers have asked for it
> nadia pointed out that partner integrations is the only one with revenue attached
> long discussion. no conclusion.
> finance person said the budget isn't final until the 30th anyway
> priya said we're leaning towards mobile and reporting but wants to see the
> revenue number on partner integrations first
> ben will get app store review data
> sara said she'd ask the three enterprise customers how urgent it really is
> nobody has the partner revenue number, it might be in the deal desk sheet
> we're meeting again next week
### Output
```text
Q3 planning - Thu 19 Jun
Present: Priya, Ben, Sara, Nadia, one attendee from finance - name needed
Decisions
- None. Three candidate projects were compared and none were chosen.
Action items
- [Ben] Pull app store review data for the mobile rebuild case - due no date set
- [Sara] Ask the three enterprise customers how urgent the reporting overhaul is - due no date set
- [unassigned] Find the revenue number attached to partner integrations, possibly
in the deal desk sheet - due before the next meeting
Open questions
- Which two of the three projects go ahead in Q3?
- What revenue is actually attached to partner integrations? Priya has said she
will not choose without this number.
- Does the budget being unconfirmed until 30 Jun change what can be decided next week?
Needs your input
- The partner revenue number is the blocker on the whole decision and nobody
owns finding it. Who should?
- "Meeting again next week" has no date. When?
- Ben's and Sara's items have no deadlines. Do they need to be ready for the next meeting?
```
```text
Send to the team
Q3 planning did not reach a decision. Mobile, reporting and partner integrations
are all still in play, and we can fund two. Priya is leaning towards mobile and
reporting but will not confirm without the revenue figure attached to partner
integrations, and right now nobody owns finding that number. Ben is pulling app
store review data and Sara is checking urgency with the three enterprise
customers. Budget is not final until 30 Jun. We meet again next week - date to
be confirmed.
```
**Why the output is shaped this way:** "leaning towards" fails part one of the decision test, so Decisions says "None" in plain words rather than dressing the lean up as a choice. The blocker is named as the blocker in both the open questions and the recap, because a reader skimming this needs to know one missing number is holding up a quarter of planning. The unassigned revenue lookup is listed as an action and raised again under Needs your input, since it is the item most likely to still be missing at the next meeting.
---
## What the three runs have in common
1. Nothing was invented. Every owner, date and decision traces to a specific line in the input, and everything that did not was marked unassigned, "no date set", or "name needed".
2. Relative dates were resolved against the meeting date and written in full, then flagged for confirmation. Nobody has to count forwards from a Tuesday.
3. The unassigned actions were pulled out and repeated under Needs your input. They are the lines that quietly do not happen, and repeating them is the whole value of the document.
4. The recap leads with the thing a reader most needs to know, which was a decision in the first example and a blocker in the other two. It is never a chronological retelling of the meeting.
5. Side chatter left no trace. There is no line in any output apologising for removing it.
references/patterns.md
# Patterns for sorting, dating and splitting
The judgment calls that decide whether the output is trustworthy. Read this at step 4 while you are testing decisions, and again at step 5 while you are attributing actions.
## Contents
- [Decision signals against near-misses](#decision-signals-against-near-misses)
- [Ownership signals](#ownership-signals)
- [Resolving dates](#resolving-dates)
- [Splitting compound actions](#splitting-compound-actions)
- [Writing open questions](#writing-open-questions)
- [The recap template](#the-recap-template)
---
## Decision signals against near-misses
The left column usually clears the decision test. The right column almost never does, however confident it sounds.
| Reads as decided | Reads as still open |
|---|---|
| "Let's go with X." | "We're leaning towards X." |
| "Agreed, X it is." | "I think X makes sense, right?" |
| "I'll tell them it's X." | "Someone should probably tell them X." |
| "X, unless anyone objects." followed by silence and a topic change | "X, unless anyone objects." followed by a new argument |
| "We're doing X. Moving on." | "So we're maybe doing X?" |
| "Approved." | "That sounds approvable." |
| "Final answer: X." | "Let's park X for now." |
| "Decision is X, I own it." | "Let's talk about X once we see the numbers." |
Three phrases to distrust specifically:
- **"Leaning towards"** is a report on someone's feelings, not a choice.
- **"Let's park it"** is an explicit deferral. Open question, every time.
- **"Fine"** said after an argument is agreement to stop arguing, which is not the same as agreement. Look at what happens in the next two lines before you decide.
Agreement followed by "although", "but", "as long as" or "assuming" is conditional. Record the condition, and if the condition is unmet, it is an open question.
## Ownership signals
| What the notes say | What you write |
|---|---|
| "Sam will send the numbers" | `[Sam]` |
| "I'll pick that up" with a named speaker | that name |
| "I'll pick that up" with an anonymous label | `[Speaker 3 - name needed]` |
| "Can you scope it?" answered "yeah" | the person who answered |
| "We should update the page" | `[unassigned]` |
| "Someone needs to tell support" | `[unassigned]` |
| "Design will handle it", no names given | `[Design team]`, flagged |
| "Marc's team" with Marc in the room | `[Marc]`, flagged as delegated |
| Volunteered by someone not in the meeting | that name, plus `- not in the meeting, needs telling` |
Never resolve `[unassigned]` by picking whoever is nearest to the topic. The absence is the finding. Assigning it silently means the real owner never learns they own it, and the document that was supposed to prevent that has caused it.
## Resolving dates
Resolve everything against the meeting date, and write both the day name and the date so nobody has to count.
| Said in the meeting | Meeting date | Write |
|---|---|---|
| "by Friday" | Tue 5 Aug | `due Fri 8 Aug` |
| "next Friday" | Tue 5 Aug | `due Fri 15 Aug`. Flag it: this phrase means two different things to different people |
| "end of next week" | Tue 5 Aug | `due Fri 15 Aug` |
| "in two weeks" | Tue 5 Aug | `due Tue 19 Aug` |
| "this week" | Mon 1 Sep | `due Fri 5 Sep`, unless a day was named |
| "end of the month" | any | last working day of that month |
| "before the launch" | any | `due before launch - date needed` |
| "ASAP" | any | `due no date set` and raise it under Needs your input |
| nothing said | any | `due no date set` |
"Next Friday" is the one worth flagging every time. Half of any room reads it as the Friday coming and half as the one after.
An urgent-sounding phrase with no date is not a date. Do not convert "ASAP" into tomorrow.
## Splitting compound actions
One action is one verb and one deliverable. If a line has "and" in the middle, look at it again.
| One line in the notes | Two or three action items |
|---|---|
| "Sam will send the numbers and book the follow-up" | `[Sam] Send revised numbers` / `[Sam] Book the follow-up meeting` |
| "Rosa to pull analytics and write it up for Thursday" | `[Rosa] Pull mobile drop-off analytics` / `[Rosa] Write up the analytics findings - due Thu` |
| "Dev builds it, Ana reviews" | `[Dev] Build the revised flow` / `[Ana] Review the revised flow` |
Do not split where the second half is not a separate piece of work: "send the numbers and copy me in" is one action with a detail attached.
Split when the halves have different owners, different dates, or could plausibly finish weeks apart.
## Writing open questions
An open question is written as a question, ending in a question mark, answerable by a person. That formatting is not cosmetic; it is what makes the item impossible to skim past.
| Weak | Usable |
|---|---|
| "Launch timing" | "Do we launch in June or July?" |
| "Mobile numbers" | "Where do mobile users drop off? No figures exist yet." |
| "Pricing concerns" | "Are we underpriced for enterprise? Sam says yes, Priya is not convinced." |
| "Support costs" | "Support costs are up 30% since March and appear in no pricing model. Who owns adding them?" |
Where a question has a blocker attached, name the blocker in the same line. A reader deciding what to chase needs to know which question is stuck on a missing number and which is stuck on a missing person.
## The recap template
Three to five lines, pasteable, no preamble, no greeting, no "here is a summary of our meeting".
```text
Send to the team
[Line 1: the single most important outcome. A decision if there was one,
otherwise the biggest open item or blocker.]
[Line 2-3: who owns what, with dates. Names and days, no adjectives.]
[Line 4: the thing that is still open, or still unowned.]
[Line 5, only if relevant: when the group meets again.]
```
Rules for the recap:
- Lead with the outcome, never with chronology. Nobody wants the meeting replayed.
- Names and dates in full. "Dev is building it for Friday 22 Aug" beats "Dev is on it".
- If nothing was decided, the first line says so plainly. That is information, not an embarrassment.
- Nothing sensitive. Performance, salaries, redundancies and named criticism stay out of a message that gets forwarded.
- No apology for the length of the meeting, and no closing line thanking everyone for their time.
Install it
Claude Code (this project)
Unzip the download into .claude/skills/. The folder is already named right.
Claude Code (every project)
Unzip into ~/.claude/skills/ to use it everywhere.
claude.ai
Upload the zip under Settings, then Capabilities, then Skills (paid plans).
How to call it
Just describe the task. The description line inside the skill does the matching. Or call it directly:
/meeting-notes-to-actionsturn these meeting notes into action itemswho agreed to do what in this callsummarise this transcript into decisions and next stepswhat did we actually decide and what is still openwrite a follow-up I can send the team after this meeting
Works beyond Claude
Skills use the open Agent Skills format. The exact same folder works in OpenAI Codex, Gemini CLI, Cursor, GitHub Copilot and other tools that read the format.
Using a plain chat app? Paste SKILL.md into ChatGPT or Gemini as instructions. You lose auto-triggering, but the method still works.