One-on-one meeting agenda template

Last updated: · Reviewed quarterly

A 1:1 is the only recurring meeting whose value is cumulative: what makes it work is the thread across months, not what happens in any single one. That thread is also the first thing to break, because nobody writes up a conversation they will have again next week. The template is below, free and complete. After it, how to stop typing it out: your day is already recorded on your device, and an agent writes this template from the transcript into a file you keep.

The one-on-one meeting agenda template

Two blocks here that a status meeting does not need: what was carried over from last time, and career, touched every few weeks rather than every week. And one block that exists to keep something out of the file, because a 1:1 is the one meeting in this pillar where part of what was said must not be written down.

markdown
# 1:1, <name>, <date>

**Present:** you, <name>
**Cadence:** weekly / fortnightly
**Last 1:1:** <link to the previous file>

## Carried over from last time
- [ ] <commitment made last time, and what happened to it>

## Their agenda
<what they brought. Theirs comes first, deliberately.>

## My agenda
<what you brought: feedback, context, a decision you need>

## Feedback exchanged
**Given:**
**Received:**

## Career and growth
<touched every few weeks, not every week. Note when it was last discussed.>

## Decisions
| Decision | Owner | Date |
| --- | --- | --- |

## Actions
| Action | Owner | Due |
| --- | --- | --- |

## Not for the record
<what was said in confidence and stays out of the file. Name the category, not the content.>

## Next 1:1

Their agenda before yours is not politeness. A 1:1 that opens with your list becomes a status meeting with a friendlier name, and the thing you were hoping to hear gets crowded out by the thing you came to say.

What has to survive a one-on-one

What it decides. Formally, nothing. That is the point and it is also the problem. A 1:1 produces commitments, feedback and context, none of which lands in a tracker, so the only record is what the two of you remember, and the two of you will remember it differently in whichever direction suits.

Who is in it. Two people, and the record is for those two only. It is not a status report to anyone above either of them. The ## Not for the record block exists to make that boundary explicit rather than assumed, which matters because the same file is the one an agent will later read.

What must survive it. Three things, each with a predictable failure. The commitment made six weeks ago, remembered by whichever of you it favours. The feedback given once and never referenced again, which is why it did not change anything. And the career conversation, which nobody can date and which therefore gets re-had from the start every few months. Fifteen 1:1s a week, held for a year, is the record a rating is supposed to rest on, and what people managers keep covers what that costs when it is reconstructed from memory instead.

What a 1:1's notes need that others do not. A pointer to the previous one, so the series is a chain rather than twenty unrelated files. An explicit carried-over block, so a commitment has somewhere to be checked. And a boundary block, so the file can be complete without being a transcript of everything.

A performance review is close enough to this shape to use the same template: it is a 1:1 whose entire content is the carried-over block, drawn from a year of the ordinary ones. A skip-level is not, despite looking like one. It runs on a promise that the substance travels and the source does not, and a verbatim record is the opposite of that, so it is the one meeting on this site we suggest you keep no record of at all. Skip-level meetings covers the method, the four failure modes, and why the notes belong on a wall rather than in a file.

Where the thread breaks

Notes get written for the first three 1:1s with a new report and then they stop. Six months later the review conversation is reconstructed from memory, which is the exact failure the meeting existed to prevent.

Caring is not the variable. Twenty minutes of writing, forty times a quarter, after the conversation is over and the next one is starting, is not a thing a calendar makes room for. So the series that most needs a record, the one that has been running longest, is precisely the one whose notes ran out in March.

Writing it from the recording

This half is a product feature. Exactly what it does, in four steps:

  1. 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.
  2. You mark the meeting once it is over. Select the range on the timeline and save it as a meeting. A recurring 1:1 on a connected calendar names and bounds its own span, which is what makes a year of them accumulate without anyone maintaining anything. Calendar connection has the detail.
  3. 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. The meeting and its transcript are attached to the prompt for you, as resources, so the preset itself is just the instruction.
  4. 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. Settings → Templates, one for all your reports or one each, with ~/notes/1-1s as the directory:

markdown
Write this 1:1 up as a new markdown file in this directory, named
<yyyy-mm-dd>-<their-first-name>.md.

Use exactly these sections: Carried over from last time, Their agenda, My agenda,
Feedback exchanged, Career and growth, Decisions, Actions, Next 1:1.

Read the most recent previous file for this person in this directory first, and open
"Carried over from last time" with each open commitment from it and what was said about
it today. Link that file.

Attribute a commitment only when someone said out loud who owns it. If ownership was not
stated, put the line under Actions with the owner left blank rather than guessing.

Leave "Career and growth" out entirely if it did not come up.

If anything was explicitly said to be in confidence, do not write it down. Note only that
a confidential item was raised.

That last instruction is the one worth copying carefully. It is the boundary block from the template expressed as a rule the agent follows, and it is the reason a 1:1 needs a preset of its own rather than a generic request for a summary.

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 itself and from what was said to what you know is the five-stage pipeline a meeting travels along it. For a 1:1 the destination is one page per person, and it is the strongest case in this whole pillar: nothing in any single file answers "what have I actually said to this person about promotion, and when", and the compiled page does.

Keep the ingest instructions in a file so a scheduled run and a manual one read the same one. ~/wiki/INGEST.md:

markdown
Sources are the markdown files in ~/notes/1-1s. Never edit them.

Maintain one page per person in ~/wiki/people/. Each page: current focus, open commitments
with dates, feedback given and when, career conversations with dates, and a dated log of
everything superseded rather than deleted.

Every claim carries the date of the write-up it came from and links that file.

When a new write-up contradicts the page, keep both with their dates and mark which
supersedes. Never overwrite silently.

Never copy anything a write-up marked confidential.

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
<?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:

shell
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.yourname.wiki-ingest.plist

Or, if you already keep a crontab, one line at half past seven on weekdays:

shell
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, which is worth checking before you conclude the prompt is wrong.

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. After a quarter the person page answers questions no single file contains, and its primary sources are your own conversations rather than someone's blog.

What this does not do

  • No speaker labels. There is no diarisation, so nothing in the transcript says who said which sentence. A 1:1 has two voices in it and the transcript labels neither. 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, and the preset above turns that limit into a rule rather than a hope.
  • 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. 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

Frequently asked questions

Is a one-on-one meeting agenda the same thing as the notes?

On this page, deliberately yes. The template above is one file that starts as an agenda and ends as the record, because a 1:1 whose agenda lives somewhere separate from its notes is a 1:1 with two half-abandoned documents. You fill in the two agenda blocks before, and everything below them fills in after.

Is there a free one-on-one meeting agenda template I can just copy?

The one above. It is complete, there is no email gate and nothing to sign up for, and copying it out of the page and pasting it into whatever you already write in is the intended use. If you take it and never install anything, this page did its job.

What should a first 1:1 with a new report cover?

Their agenda, mostly. Use the template with the carried-over block empty, and spend the time on how they want to work, what they want next and what they need from you, rather than on status you could have read. Fill in the cadence line and then hold it, because a 1:1 that moves twice stops existing.

How do I keep a 1:1 record without it becoming a performance file?

The ## Not for the record block, and the preset instruction that backs it. Name the category rather than the content, so the file can be honest about there being something it does not contain. Everything else in the template is a commitment, a decision or feedback that was said out loud, which is the part both of you should be able to reread.

Does this record my report without telling them?

Earkeep announces itself to nobody: there is no bot in the participant list and no banner on anyone's screen, so telling them 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 or HR system gets a copy. Telling people you're recording covers how to say it, and our privacy page covers what the app itself sends, which is a licence check and nothing else.

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.