Staff meeting agenda template
Last updated: · Reviewed quarterly
A staff meeting is where a manager and the people reporting to them square what each area is doing against what the organisation has just decided it wants. You attend more of these than you run, and the part that matters is the two minutes about your area and whatever you agreed to in front of your peers. The template is below, free and complete. After it, how to stop typing it out: the meeting is already recorded on your device, and an agent writes this template from the transcript into a file you keep.
The staff meeting agenda template
Two blocks here that a team meeting does not need. Escalations get a status rather than a description, because a staff meeting is where something either goes up a level or quietly does not. And what you owe upward is separated out, because that is the part you will be held to and the part you will otherwise reconstruct from memory on the morning of the next one.
# <Department> staff meeting, <date>
**Present:**
**Absent:**
**Chair:**
## Since last time
- [ ] <commitment from the last meeting, and what happened to it>
## The numbers
<whatever this room runs on: pipeline, headcount, throughput, spend. As stated, with the date they are current to.>
## What changed above us
<priority, budget, org or date changes handed down. Note who said it, so it can be checked.>
## Round the areas
### <area or manager>
<what moved, what is at risk, what they need from the room>
## Escalations
| Raised | By | Taken up? | Who now owns it |
| --- | --- | --- | --- |
## Decisions
| Decision | Owner | Date |
| --- | --- | --- |
## Actions
| Action | Owner | Due |
| --- | --- | --- |
## What I owe upward
<what you said, in front of your peers, that you will do or deliver. Quote yourself.>
## Next meeting
"Taken up?" is a yes or a no, not a paragraph. An escalation that leaves a staff meeting without that column filled in has not been escalated, it has been mentioned, and the difference only becomes visible six weeks later.
What has to survive a staff meeting
What it decides. Priority and resource calls that cross areas, and which problem gets carried up a level. Very little of it is minuted anywhere, because each item is somebody else's area and therefore somebody else's problem to write down, which means nobody does.
Who is in it. A manager and their direct reports, who are often managers themselves. The record is for you, the attendee, not for the chair: it is the only meeting in this pillar whose notes exist mainly so that one person in the room can act correctly afterwards. What executives keep covers the version of this room where the areas are functions and the numbers are the company's.
What must survive it. Three things. What you committed to in front of your peers, in your own words, because a paraphrase is not something you can hold yourself to. The priority that changed and the reason actually given for it, which is the part that goes missing and leaves your team asking why. And the escalation you raised, together with whether it was picked up, which is the single fact that decides whether raising things in this room is worth doing.
What a staff meeting's notes need that others do not. A separation between the record of the room and the record of your own area, because you will reread the second one and skim the first. An escalation block with a status column. And an upward-commitment block, quoted rather than summarised.
"Staff meeting" covers a lot of rooms. The same shape holds for a school office, a clinic or a small business, but the conversation about recording does not. The fewer of the people in the room report to you, the more the disclosure matters, and telling people you're recording is the page for that part.
Why the chair's minutes are not yours
You attend six of these a month and take notes in none of them, because for fifty of the sixty minutes you are listening for the two that concern your area. Then, a month later, somebody quotes what you agreed to and you have nothing to check it against.
The chair does not solve this for you either. Where a staff meeting has minutes at all, they are the chair's minutes: written for the chair's purposes, circulated late, and silent on the sentence you said about your own team's dates. The record you actually need is a different document from the one that occasionally gets produced, which is why the fix has to be yours rather than a request to somebody else.
Writing it from the recording
This half is a product feature. Exactly what it does, in four steps:
- The day is already recorded. Earkeep captures your microphone and your system audio continuously and transcribes on your device, and the audio is never written to disk at all. There is no start button and no bot joining the call. Always-on capture covers why, and private by design covers where the audio goes, which is nowhere.
- You mark the meeting once it is over. Select the range on the timeline and save it as a meeting. A standing weekly on a connected calendar names and bounds its own span, so a year of them accumulates without anyone maintaining anything. Calendar connection has the detail.
- You pick a saved template in the composer. Settings → Templates holds instruction presets, each with a name, an agent, a working directory and the prompt text. Opening the agent panel on a saved meeting offers them, and the meeting and its transcript are attached to the prompt for you, as resources, so the preset itself is just the instruction.
- The agent writes the file. It runs on your machine, as your own CLI, with your own key, in the directory the preset names. Agents and MCP explains how that works.
The "one click" is picking the preset. Nothing fires a template because a meeting's title matched a pattern; Earkeep has no such matching.
The preset for this page, with ~/notes/staff as the directory:
Write this staff meeting up as a new markdown file in this directory, named
<yyyy-mm-dd>-staff.md.
Use exactly these sections: Since last time, The numbers, What changed above us,
Round the areas, Escalations, Decisions, Actions, What I owe upward, Next meeting.
Read the most recent previous file in this directory first. Open "Since last time" with
every commitment from it and what was said about it today, or "not mentioned" if it did
not come up.
Under "What I owe upward", record only things I said myself, and quote the sentence
rather than summarising it. If I committed to nothing, say so.
In the Escalations table, fill "Taken up?" only from what was actually said. If the room
moved on without answering, write "not answered" rather than inferring.
Any number goes in with the date it was said to be current to. If that was not stated,
mark it undated.
Leave a section out entirely if nothing in the meeting belongs in it.
The instruction to quote rather than summarise is the one that matters. A summary of a commitment is an interpretation of it, and the whole reason to keep this block is that your interpretation and your manager's will drift apart in exactly the way the meeting was supposed to prevent.
Cross-linking a year of them, on your own schedule
Earkeep has no scheduler. There is no nightly job to switch on, no "run this agent every week" setting, and there is not one hidden in a menu either. What it has instead is a directory of plain markdown files and a read-only MCP server on loopback, which is everything a scheduler you already own needs.
The pattern on top of that is a compiled wiki: raw sources stay immutable, an agent writes one page per concept from them, and a schema file states the rules. The LLM Wiki is the pattern and from what was said to what you know is the pipeline a meeting travels along it. For a staff meeting the destination is a page per area plus a running file of what you have promised upward, because the question a year of these answers is not what happened in any one of them, it is whether the thing you keep raising has ever once been picked up.
Keep the ingest instructions in a file so a scheduled run and a manual one read the same one. ~/wiki/INGEST.md:
Sources are the markdown files in ~/notes/staff. Never edit them.
Maintain one page per area in ~/wiki/areas/. Each page: current state, the numbers with
their dates, what changed and when, and who owns it now.
Maintain ~/wiki/owed-upward.md as one dated row per commitment I made, with the quoted
sentence, the date, and a link to the write-up. Mark a row done only when a later
write-up says it was, and link that one too.
Maintain ~/wiki/escalations.md the same way: what was raised, when, and whether it was
taken up. Never delete a row. A thing raised four times and never taken up is the most
useful line in this wiki.
Every claim carries the date of the write-up it came from and links that file.
When a new write-up contradicts a page, keep both with their dates and mark which
supersedes. Never overwrite silently.
Then the schedule, which is yours. On macOS a LaunchAgent is the supported mechanism and it survives the laptop being asleep at the appointed minute, where a cron job simply misses it. Save this as ~/Library/LaunchAgents/com.yourname.wiki-ingest.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.yourname.wiki-ingest</string>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>-lc</string>
<string>cd ~/wiki && /opt/homebrew/bin/claude -p "$(cat INGEST.md)"</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>19</integer>
<key>Minute</key><integer>30</integer>
</dict>
<key>StandardOutPath</key>
<string>/tmp/wiki-ingest.log</string>
<key>StandardErrorPath</key>
<string>/tmp/wiki-ingest.err</string>
</dict>
</plist>
Load it once with launchctl bootstrap gui/$(id -u) and the path to that file. Or, if you already keep a crontab, one line instead:
30 19 * * 1-5 cd $HOME/wiki && /opt/homebrew/bin/claude -p "$(cat INGEST.md)" >> /tmp/wiki-ingest.log 2>&1
Two things bite about that line. Cron runs with a minimal PATH, so the agent binary needs its absolute path or the job fails silently. And on current macOS a cron job that reads directories under ~/Documents or ~/Desktop needs Full Disk Access granted to /usr/sbin/cron in System Settings.
The join between a meeting and its write-up is the filename convention you chose, and nothing else: there is no field on a saved meeting recording where its notes landed. A quarter in, the escalations file is the one to read before deciding whether to raise something in the room again or go around it.
What this does not do
- No speaker labels. There is no diarisation, so nothing in the transcript says who said which sentence, and the minutes cannot attribute a line to a person from the audio. Attribution comes from what was said out loud ("Sam will take the migration"), from a connected calendar's attendee list, or from you typing the names. The
**Present:**line is a line you fill in. - macOS only. macOS 13 or later. The Windows audio path is designed and not released, and the scheduling half of this page is macOS-specific by construction.
- The agent is yours. It runs as your own CLI with your own key. Earkeep does not resell model access and there is no per-meeting AI fee, which is what makes it €39 once. What the agent does with the context after Earkeep hands it over is a property of the agent you chose, not of Earkeep. Setting up Claude Code covers installing and signing in to one of them.
- Nothing writes back. The MCP server is read-only, with exactly two tools, so a scheduled agent can read your meetings and cannot create or edit a meeting, a note or a file through it. The wiki is a one-way derivative of the record.
Related
- One-on-one meeting agenda template: where most of what a staff meeting raises actually gets resolved, one person at a time.
- Team meeting agenda template: the meeting you run afterwards, where what changed above you has to be passed on.
- Telling people you're recording: what to say in a room where not everyone reports to you.
- All meeting minutes templates.
Frequently asked questions
Is there a free staff meeting agenda template I can copy?
The one above. It is complete, there is no email gate and nothing to sign up for. Copy it, delete the blocks that do not apply to your room, and keep the rest. If you take it and never install anything, this page did its job.
What is the difference between a staff meeting and a team meeting?
Who is in the room and which way the information travels. A team meeting is a group coordinating work with each other, and its record is mostly for whoever was absent. A staff meeting is a manager and their reports reconciling several areas against a direction handed down, and its record is mostly for each attendee's own area. The templates differ in exactly those two places: the team meeting template has an unowned-blocker block where this one has escalations and what you owe upward.
How often should a staff meeting run?
Weekly is the usual answer and fortnightly is often the better one, because the round-the-areas block is what makes these meetings long and half the areas have nothing new after seven days. The test is whether the round produces decisions or only reports; if it is only reports, the meeting is a document and meeting overload covers how to work out what to do about that.
Does this record the meeting without telling anyone?
Earkeep announces itself to nobody: there is no bot in the participant list and no banner on anyone's screen, so telling the room is yours to do and you should. What it changes is what you can honestly say when you do, because nothing leaves your device and no IT system gets a copy. Telling people you're recording covers how to say it in a sentence, and our privacy page covers what the app itself sends.
Can I get the minutes without letting an AI read the transcript?
Yes. The transcript is a plain text file on your own disk and the template above is a template: open one, fill in the other, and no model is involved at any point. The agent step is a convenience for people who do not want to type, not a dependency. Private by design covers what stays local either way.