Strategic planning meeting agenda template

Last updated: · Reviewed quarterly

A planning meeting decides what an organisation does next and, by omission, everything it will not do. The decision usually gets written down. The argument that produced it almost never does, which is why a reversal six months later looks like drift rather than a choice. 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 strategic planning meeting agenda template

Two blocks here that no other template in this pillar has. A rejected-options block, because the option not taken is the part that makes a later change of course a decision rather than a wobble. And a review date, because a bet with no date to check it is a wish.

markdown
# <Planning cycle> planning, <date>

**Present:**
**Absent:**
**Decision owner:**

## Where we are
<the honest starting position: numbers, constraints, what did and did not work last cycle>

## What we are choosing between
### Option: <name>
<what it is, what it costs, what it gets us, who argued for it>

## What we chose, and why
<the bet, in one paragraph, in the words of whoever made the call>

## What we rejected, and why
| Option | Rejected because | Would revisit if |
| --- | --- | --- |

## Objectives and key results
### Objective: <the qualitative statement>
| Key result | Baseline | Target | Owner |
| --- | --- | --- | --- |

## What we are explicitly not doing
- <thing a reasonable person would expect us to do this cycle, and we are not>

## What this needs
<people, money, or a decision from somebody not in this room>

## Assumptions this rests on
<each one with how we would know it was wrong>

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

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

## Review date
<when we look at this again, and what would make us change it before then>

"Would revisit if" is the column that earns the table. A rejected option with a trigger attached is a decision that can be reopened deliberately; one without is an argument that will simply be had again from the beginning, with the same people and less patience.

What has to survive a planning meeting

What it decides. The allocation: what gets people and money next cycle and what does not. It is the highest-consequence, lowest-frequency meeting most organisations run, which is a bad combination for institutional memory.

Who is in it. Whoever can commit resources, plus the people who will have to execute. The record is for the person asking in month five why the company is doing this, and for the same room next cycle, which will otherwise start from a blank page. What product managers keep covers the roadmap-review version of the same problem at a shorter cadence.

What must survive it. The option that was not taken and the reason, which is the single most valuable and least recorded artefact of any planning session. The numeric target with a named owner, rather than a target the whole leadership team owns and therefore nobody does. And the assumption the bet rests on, written with a way to tell that it has broken.

What a planning record needs that others do not. The rejected options, with triggers. An explicit not-doing list, which is different from the rejected options: those were considered and declined, these are things everyone would assume are happening. And a review date, so the plan has a scheduled encounter with reality rather than an annual one.

Writing the key results themselves is a craft this page does not cover: OKR and SMART goals is about what makes a target survive the quarter, and what a planning record has to preserve is a different question from what a good objective looks like. Offsites use this same template, usually with a much longer "where we are" block and a decision that lands on the second afternoon.

What the deck leaves out

Planning produces the best-attended writing of the year: a deck, a one-pager, a set of objectives copied into whatever tracks them. All of it records the conclusion.

The room, meanwhile, spent most of its time on the two options that lost, and on the twenty minutes where somebody said the thing about the market that changed everyone's mind. None of that is in the deck, because a deck presents a plan and does not argue for it. Six months later the plan needs changing, nobody can reconstruct which assumption it rested on, and the discussion restarts from first principles with a room that has partly turned over.

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 planning session or offsite is usually a single long calendar event, which makes it one span rather than several, and worth splitting on the timeline if the day covered genuinely separate decisions. 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, and 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, with ~/notes/planning as the directory:

markdown
Write this planning session up as a new markdown file in this directory, named
<yyyy>-<cycle>-planning.md.

Use exactly these sections: Where we are, What we are choosing between, What we chose and
why, What we rejected and why, Objectives and key results, What we are explicitly not
doing, What this needs, Assumptions this rests on, Decisions, Actions, Review date.

Record every option the room seriously discussed under "What we are choosing between",
including the ones dismissed quickly, and name who argued for each.

"What we rejected and why" must use the reason actually given in the room, not a reason
that sounds better. Fill "Would revisit if" only when the room stated a trigger; leave it
blank otherwise rather than inventing one.

Quote the decision owner directly for "What we chose, and why".

A key result goes in only with a named owner. If the room assigned it to a team or to
everyone, record it with the owner blank and note who was named.

Under "Assumptions this rests on", include anything the discussion treated as settled
without checking, even if nobody called it an assumption.

The last instruction is the one that does something a human note-taker rarely manages. Assumptions are invisible in the room precisely because everybody shares them, and a pass over the transcript looking for what was treated as settled catches things nobody thought to write on the whiteboard.

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 planning the destination is a page per objective and a page per bet, each carrying the argument that produced it and every subsequent thing that pushed against it, so next cycle's session opens with what was actually believed last time rather than with a blank page.

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/planning. Never edit them.

Maintain one page per objective in ~/wiki/objectives/. Each page: the objective, its key
results with owners and current status, the argument that produced it, the rejected
alternatives with their triggers, and the assumptions with a status of unchecked,
confirmed or broken.

Maintain ~/wiki/bets.md as one entry per bet: what was chosen, what was rejected, the
date, and the review date. Append only. When a bet is reversed, add the reversal with its
date and link both write-ups. Never delete the original.

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

When a later source shows an assumption has broken, mark it broken with the date and keep
the original wording. A broken assumption beside the bet it supported is the most useful
thing on the page.

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 with launchctl bootstrap gui/$(id -u) and the path to that file. Or, if you already keep a crontab, one line instead:

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.

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. Next cycle the objectives pages are the pre-read, and the meeting starts from what was believed last time and what has happened to it since.

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

Frequently asked questions

Is there a free strategic planning meeting agenda template?

The one above. It is complete, there is no email gate and nothing to sign up for. If you cut it down, keep the rejected-options table and the review date; those are the two blocks that no other document in the planning cycle will contain.

Can I use this as an offsite meeting agenda template?

Yes, and it is the same shape. An offsite differs in pacing rather than in content: a much longer "where we are" block, options explored over a morning rather than a slot, and the decision landing late on the second day. The one addition worth making is a short block at the end recording what people agreed to tell their own teams, because that is the part of an offsite that reliably goes wrong.

What is the difference between a planning meeting and an OKR-setting meeting?

In practice the second is the last hour of the first, and separating them tends to produce objectives disconnected from the argument that justified them. This template runs them together for that reason: the bet gets chosen, then it gets expressed as objectives with owners and targets, in the same record.

How long should a planning session be?

Long enough to lose an argument in. The failure mode of a short planning meeting is that the first plausible option wins because there is no time to examine the second, which is exactly the situation the rejected-options block is meant to make visible. If the session produces no rejected options, it was a briefing.

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.