Happy Path Works
Document Ops · setup guide · last updated November 3, 2026

Meeting minutes

Writes the minutes of a meeting from its notes or a text transcript, as a Word document in your brand: attendance, discussion, decisions, deferred items, actions and the next meeting. Every fact names the line of the notes it came from. It writes minutes, not agendas.

Before you start

A Claude plan with code execution turned on (Setup, step 1), the brand setup run once, and the meeting’s notes or transcript as text: pasted into the chat, or attached as a .txt, .md or .docx file.

Add the skill

In the Claude web or desktop app, select Customize, then Skills › Add › Upload skill, and upload minutes-builder.skill from your download. A .skill file is a zip under another name; if it is not accepted, rename it to minutes-builder.zip and upload again. Setup walks through the screens.

Where the pack runs: see compatibility.

Ask for minutes

Start a message with minutes: and paste the notes, or attach them. “Write up the minutes from these notes” works too. If the brand setup gave you brand.json and logo.png to keep, attach both, with their names unchanged.

Send the notes as they were written. It keeps them word for word, typos included, because every line of the minutes is checked against them.

If the notes leave out the meeting’s name, its date or year, who owns an action, or the next meeting’s date, it asks for them in one go rather than filling them in. Anything you supply after the meeting is marked with an asterisk in the minutes.

Send audio, a caption file, a photo or a scan, and it asks for the notes as text: a transcription it made itself would not be your notes. Ask for an agenda and it points you to meeting agendas. Only the action items, as a one-page list, is the free action items list’s job, and minutes as a PDF, a spreadsheet or slides is another skill’s.

What comes back

A Word file with the meeting date in its name, such as KVPL_ADMIN_Collections_Committee_MINUTES_2026-10-14.docx. Decisions carry the mover, the seconder and the result where the notes record them. Anything the meeting left open sits under its own heading, “Deferred - not decided”.

When the notes name the next meeting, it also writes that meeting’s agenda as far as these minutes decide it: approval of these minutes, the open actions and the open items. The agenda skill builds it as it is, or after you edit it. In the same reply Claude says which brand it used, or that it used the neutral colors, and lists every value you supplied after the meeting.

Worked example

Kestrel Valley Public Library is an invented library. These are the notes of its Collections Committee meeting on October 14, 2026, the same meeting as the agenda on the Document Ops page, and the minutes the skill built from them with the library’s brand kit.

The notes

Collections Committee - meeting notes Wednesday, October 14, 2026, 4:00 - 5:30 PM, Riverside Branch, Meeting Room B Present: Carol Jensen (chair), Greg Hollis, Dana Whitaker, Ron Tidwell Absent: Amy Kessler Guest: Janet Burke from Finance, for item 4 1. September minutes - Dana moved to approve the September 9 minutes, Greg seconded. Approved unanimously. 2. Open action items - Dana said the large-print audit at Riverside is done, 212 titles moved to the new end-cap. - Greg still has only one RFID retrofit quote. Second vendor promised theirs by end of October. 3. Damaged item check-in, first month - Greg reported 38 items held for review in September, 31 cleared inside five working days. - Two pest stops, both at Main. Dana confirmed the desk kit was restocked after each one. - Three patron disputes went to supervisors. Two charges waived, one upheld. - Dana will add the tote turnaround to the monthly circulation report starting November. 4. Replacement charge waivers - Janet walked through the numbers. A single $25 threshold costs about $4,100 a year in replacement budget. - Ron moved to adopt a single $25 waiver threshold at all branches starting January 1. Greg seconded. Approved 3-1, Dana opposed. - Janet will build the $25 threshold into the FY27 replacement budget by October 31. 5. Adult nonfiction weeding plan - Greg presented the two-phase plan for the 300s and 600s at Main. - Phase 1 approved by consensus, starting November 2. - No decision on Phase 2. Carol wants the January inventory numbers first. Revisit in February. Consent agenda - Gift-book intake log and 2027 periodicals renewal list approved as a block. Nothing pulled. Next meeting: November 11, 4:00 PM, Riverside Branch, Meeting Room B.

The file: KVPL_ADMIN_Collections_Committee_MINUTES_2026-10-14.docx, 2 pages. Phase 2 of the weeding plan, which the notes leave open, is under Deferred, not Decisions. The 3-1 vote stays 3-1, with Dana opposed.

Page 1 of the Collections Committee minutes those notes produced Page 2 of the Collections Committee minutes those notes produced

Pages 1 and 2 of what came back.

The same notes, written up wrong

A second copy of the minutes, with four mistakes planted of the kind a model makes without the skill: Phase 2 written as approved, the 3-1 vote written as unanimous, an owner the notes never name for the second RFID quote, and Amy Kessler, who was absent, listed as present. The check refused it and wrote no document:

minutes_check — minutes-bad.json (notes: notes.txt) brand kit: brand.json WARN due.unquoted action 3 (notes line 13): due "October 31" is not in the quoted source; confirm the notes state it FAIL attendee.unsourced attendance.present[4] "Amy Kessler": the name is not in its quoted source (notes line 4). List only people the notes name, as they name them. FAIL attendee.conflict attendance.absent[0] "Amy Kessler" is also listed under present. A person is present, absent or a guest, not two of them. FAIL motion.unsourced decision #2 (notes line 23): result "Approved unanimously" is not in its quoted source. Record a motion, a second or a result only as the notes write it. FAIL decision.undecided decision #5 (notes line 29): its source says "No decision", so the meeting did not decide it. Record it under deferred, not as a decision. FAIL text.unsourced decision #5 (notes line 29): the text says "approved", which its quoted source does not. A vote or an approval is recorded only where the notes record one. FAIL deferred.uncited notes line 29 says "No decision": "- No decision on Phase 2. Carol wants the January inventory numbers first. Revisit in February.". The meeting left that open, and no deferred item cites it. Add it under deferred, quoting that line. FAIL owner.unsourced action 3 (notes line 13): owner "Greg" is not named in the quoted source. If the notes name the owner nearby, widen the quote to include the name. If they do not, ask who owns it; set "ownerAssigned": true only on that answer. FAIL — 7 violations. No document is written. Not checked: what the notes mean. See NOT_CHECKED.md beside this file.

What gets checked

Before you get the file, the skill checks it. The file goes out only when every check passes:

  • every attendee, discussion point, decision, deferred item and action quotes a line of the notes, and the quote is really there;
  • an item the notes leave open, with words such as “no decision”, “tabled” or “revisit”, is under Deferred, never written as a decision, and every such line of the notes is cited there;
  • every action has an owner the notes name, or one you gave it when asked;
  • a mover, a seconder, a vote or an approval appears only where the notes record one;
  • nobody is listed whom the notes do not name, and nobody is both present and absent;
  • the next meeting falls after this one;
  • once built, the file name, both printed dates, the page and every table’s width.

What no check can tell you: whether a line of the minutes means what its quote says, and whether the notes are complete. A decision nobody wrote down is not in the minutes. Read each decision against its line before you send them.

If it looks wrong

It asked questions before writing anything. That is on purpose: the notes left out a name, a date or an owner. Answer them; the minutes mark each answer with an asterisk.

It is in plain colors, not your brand. The skill did not find your brand. Attach brand.json and logo.png and ask again.

It asked for the notes as text. It does not transcribe audio or read a scan. Paste the notes or a text transcript.

Claude answered like a normal chat. Start the message with minutes:. If it still does not start, see Setup, “When it doesn’t work”.

Using Claude Code instead

Extract the .skill file into your skills folder: ~/.claude/skills/ for every project, or .claude/skills/ inside one. A skill in that folder does not reach your claude.ai account, and one on your account does not reach that folder.

Needs Node 20 or newer on the machine. Nothing else to install: the one library the skill uses ships inside it.

The skill reads your brand from brand.json and logo.png, looking in this order and stopping at the first hit: the path in HPW_BRAND_KIT, the folder you build from, any folder above it, then the neutral defaults.

The minutes come with a .next-agenda.json file beside them when the notes name the next meeting. It is the agenda skill’s own content format, ready to build or to edit first.

To confirm the install, run this from the folder you will build in. Exit 0 means every file is present:

$ node <skill folder>/check_deps.js

To prove it end to end, build the shipped sample from a folder outside the skill. It builds the sample and checks it; expect PASS:

$ node <skill folder>/examples/minutes-sample/build_sample_minutes.js