DESK · THEORY
The Workflow · May 26, 2026

Team todos from meetings: stop chasing follow-up

Action items from every meeting land in each owner's Slack DM minutes later. They have their list. You stop chasing.

What you'll have when you're done

A small piece of automation that runs after each new [Granola][1] transcript lands: extracts every action item, groups them by owner, and posts each person their list to Slack DM (or email, your choice). The owner sees what they committed to with the verbatim quote. They reply, push back, or just get on with it. You don't show up anywhere in the loop.

No standup recap. No shared doc your team has to maintain. No founder-in-the-loop chasing.

The chase tax

My VP says she'll send the analysis by Friday. I nod. I trust her. I move on. Then Friday comes. Then I notice the doc isn't there. Then I have to ask. Then I get an apology. Then I have to ask again the following Tuesday. By the third ask, the trust costs more than the analysis would have. Multiply that by twelve commitments per leadership sync, three syncs a week, and the math gets ugly. I'd become the unpaid project manager for promises my team made to themselves.

I tried every system. Asana boards I updated myself after each meeting (became a job I hated). A shared Notion page where everyone was supposed to log their action items (became a graveyard of stale rows by week two). A Slack bot that pinged everyone every Friday asking for updates (got muted by week three). None of them worked (and the failure mode was always the same: the system depended on someone, usually me, remembering to do the capture).

Team todos closes the leak from the team side. The transcript is the source of truth. The agent extracts every action item by owner. Each person gets their list in their Slack DM within minutes of the meeting ending. I never have to ask. They never have to remember to log. The system runs on the same meeting library that powers every other workflow in this stack.

Pairs with [the commitment ledger][2] (which is yours, for you). Together: nothing falls through the cracks on either side of any meeting you run.

What you need first

Step-by-step

Step 1Tell your team this is coming, before you build anything

This is the step that makes or breaks the rollout. Skip it and your team discovers the workflow by getting a Slack DM from "your AI" with action items they didn't know were being captured. That reads as surveillance. The workflow dies. So: have the conversation first.

In your next leadership sync or a quick all-hands note, tell them three things.

  1. What you're building. "After every meeting, an agent is going to read the transcript, pull out the action items by owner, and DM each person their list."
  2. Why. "I'm tired of being the unpaid project manager for things you committed to. This removes me from the chase loop and gives you back the autonomy you want."
  3. What they can push back on. "If something gets attributed to you that you don't think you committed to, just reply in the thread. The source quote will be right there for both of us to look at."

Three minutes of meeting time. Saves you weeks of awkward rollout.

Step 2Write the roster file

Open your terminal and create the roster:

touch ~/team.md

Open it in your editor and write one line per team member, in this shape:

- Priya Patel · priya@yourcompany.com · @priya · roles: VP Product, founder
- Diego Hernandez · diego@yourcompany.com · @diego · roles: Head of Sales
- Sam Lin · sam@yourcompany.com · @samlin · roles: Senior Designer

Claude reads this to map first names in transcripts to email addresses and Slack handles. Keep it short. One screen. Add new hires as they join.

Step 3Write the extraction prompt

The prompt is the load-bearing block. Save it once so every meeting can use the same logic.

mkdir -p ~/.claude/prompts
touch ~/.claude/prompts/team-todos.md

Paste the prompt below into that file.

Extract action items from this meeting transcript: {transcript_path}.

Read ~/team.md to resolve first names to email addresses and Slack handles.

Output JSON in this exact shape:

{
  "meeting": "{filename}",
  "assignments": [
    {
      "owner_email": "person@company.com",
      "owner_slack": "@handle",
      "items": [
        {
          "task": "one-sentence description of what they committed to",
          "due_date": "YYYY-MM-DD or 'unspecified'",
          "source_quote": "verbatim sentence(s) from the transcript"
        }
      ]
    }
  ],
  "unassigned": [
    {
      "task": "...",
      "source_quote": "...",
      "reason_unassigned": "couldn't identify owner / multiple candidates / ..."
    }
  ]
}

Rules:
- Only include explicit commitments. "I'll think about it" is NOT an action item.
  "I'll send you the deck by Friday" IS.
- Include a verbatim source quote for every item. The owner needs to verify.
- Group strictly by owner. Don't infer. If unclear, put it in unassigned and flag.
- Skip items I committed to. Those belong in my own ledger (a separate workflow).
- If a deadline isn't stated, set due_date to "unspecified". Don't invent one.

Step 4Run a manual test on one transcript

Open Claude Code in your notes folder:

cd ~/notes
claude

Pick one recent meeting transcript. Paste the prompt from Step 3, replacing {transcript_path} with the real file path. Claude reads the transcript and returns the JSON.

Read the JSON before you trust it. Three checks:

If anything looks off, refine the prompt and re-run. Tuning happens here, before any DMs leave your laptop.

Step 5Get Claude to write the delivery script

You don't have to write the Slack or email integration yourself. Open Claude Code and ask:

Write a small script that takes the JSON output from ~/.claude/prompts/team-todos.md
and posts each assignee's items to them as a Slack DM. Use the Slack Web API and
the bot token at ~/.config/slack-bot-token. Format each DM as:

"Hey {first_name}, action items from {meeting_name}:
1. {task} (by {due_date})
   Source: '{source_quote}'
2. ..."

Save the script to ~/scripts/team-todos-deliver.py and make it executable.

Claude writes the script. You add your Slack bot token to the file path it asks for, then run it once against the JSON from Step 4 to confirm the DM arrives. The whole thing takes about twenty minutes.

If you prefer email, swap the prompt: "Use Gmail SMTP and send from my@email.com to each owner."

Step 6Wire up the automatic trigger

Two paths:

Option A · Manual trigger after each meeting (lowest effort). After Granola finishes a transcript, you run one command:

~/scripts/team-todos-deliver.py ~/notes/granola/{latest-transcript}.md

Ten seconds. Most CEOs live here for the first month while they're tuning the prompt.

Option B · A Claude Code Routine (fully automated). Open Claude Code and create a new Routine:

When a new file appears in ~/notes/granola/:

Run the prompt at ~/.claude/prompts/team-todos.md against the new file.
Then run ~/scripts/team-todos-deliver.py to ship the DMs.

Trigger: filesystem watch on ~/notes/granola/.

Once that's running, action items land in DMs within five minutes of every meeting ending. You see none of it. The team sees their list.

Step 7The first week is the real rollout

Even with Step 1 done well, the first week of real DMs is where the workflow either lands or doesn't. Three moves that help:

By week two, the system should be running cleanly and your 1:1s should already feel different.

How you'll know it's working

  1. The first DM lands with a real action item and a verbatim source quote. Your VP opens it, sees what she said, and either confirms or pushes back. Either response is a win, because the conversation is now grounded in the transcript instead of in two people's hazy memories.
  2. A team member replies, confirming or correcting. This is the signal the workflow is trusted. People only engage when the source quotes match reality.
  3. By week two, your 1:1s change. You stop asking "did you do X?" because they already know what X is, and they've either done it or have a reason. The chase tax disappears.

When it breaks

Where this fits in your harness

This is the team-facing half of the accountability layer in your [harness][4]. The [Granola → markdown pipeline][5] made every conversation searchable. [The commitment ledger][6] is the personal half: your view of what you owe and what's owed to you. Team todos is the team half: your team's view of what they owe each other and you. Same meeting library, two complementary outputs.

Together, they're the difference between a CEO who runs the company by chasing and a CEO who runs the company by reading. See the [Granola pillar][7] for the full pipeline and the other workflows that compound on top.

[1]: /workflows/what-is-granola [2]: /workflows/commitment-ledger [3]: /workflows/granola-to-markdown [4]: /workflows/what-is-a-harness [5]: /workflows/granola-to-markdown [6]: /workflows/commitment-ledger [7]: /blog/granola-for-ceos-highest-roi-ai-install

The Thursday 3

Get three workflows like this every Thursday

The Thursday 3 is a free weekly email. Three workflows that put you in the top 1% of CEOs. 90-second read. Every card links back to a step-by-step guide like this one.

Get the newsletter →
The Desk Theory books

The architecture behind this workflow.

Two operator's manuals for the same job, run two different ways. OpenCLAW for the always-on agent harness; Claude Code for the focused-work CLI. Pick one, or get the bundle for $149.

Browse the books · $99 each