Abstract wavy lines on dark background
Ops Tutorial

How to Build a Meeting Ops Agent That Actually Does Things

Every meeting gets an agenda 2 hours before. Every meeting gets actions within 30 minutes after. Tasks created, deals updated, follow-ups sent. Not just a transcript. An operator.

Amodal TeamApril 12, 202622 min read

Meetings are broken in the same way everywhere

Your org runs 200 meetings a week. Maybe 20 have an agenda. Maybe 10 produce written action items. Maybe 5 of those actions actually get tracked somewhere. The rest evaporate into "I think we said we'd do X?" in a Slack thread three days later.

The tools exist. Otter, Fireflies, Grain, Google Meet's built-in AI, Zoom AI Companion. They capture transcripts. They generate summaries. Some of them are good at it.

The problem is they stop there
A transcript summary is read-only. It tells you what happened. It doesn't create the Jira tickets. It doesn't update the deal in Salesforce. It doesn't send the follow-up email. It doesn't generate next week's agenda from this week's actions. The summary is step one. The five steps after it are where the actual work happens, and nobody automates them.

The meeting ops agent doesn't replace Zoom or Google Meet. It connects to them. It reads the transcript they already produce. Then it does the 5 things that no transcript tool does: generates agendas, extracts actions, creates tasks, updates systems, and sends follow-ups.

Capability
Otter / Zoom AI
Meeting agent
Record and transcribe
✓ (reads their output)
Generate summary
Pull context from last meeting's actions
Auto-generate agenda from cross-system context
Create Jira/Linear tasks from action items
Update Salesforce deal after customer meeting
Send follow-up email to external attendees
Post action summary to Slack with @mentions
Generate next meeting's agenda from this one
Learn meeting patterns and suggest improvements
Part 1

Connect the meeting stack

1

Connect 7 systems

terminal
$ mkdir acme-meeting-ops && cd acme-meeting-ops
$ npx amodal init
✓ Project initialized
$ amodal connect google-calendar
✓ Connected. 1,247 events this month, 42 recurring series.
$ amodal connect zoom
✓ Connected. Transcripts, recordings, participant data.
$ amodal connect slack
✓ Connected. 124 channels, message search, DMs.
$ amodal connect google-docs
✓ Connected. Create, read, update docs and folders.
$ amodal connect linear
✓ Connected. Teams, projects, issues, cycles.
$ amodal connect salesforce
✓ Connected. 847 opportunities, contacts, activities.
$ amodal connect gmail
✓ Connected. Send, draft, search emails.
Part 2

Write the meeting ops skill

2

The meeting lifecycle skill

skills/meeting-ops/SKILL.md
# Skill: Meeting Ops
## Pre-meeting (2 hours before)
For every meeting on the calendar:
1. **Identify meeting type:** 1:1, standup, pipeline review,
customer call, all-hands, ad-hoc. Use title + attendees + recurrence.
2. **Gather context based on type:**
- **Recurring:** Pull last meeting's transcript summary + actions.
Check which actions are done (Linear: closed), open, or blocked.
- **Customer call:** Pull deal context from Salesforce (stage, amount,
last activity, contacts). Check recent email threads with the customer.
Check Slack for recent mentions of the account.
- **1:1:** Pull last 1:1 summary + open actions. Check if the person
has any blocked Linear tickets. Check recent Slack kudos or concerns.
- **Ad-hoc:** Search for email threads and Slack messages between
attendees in the last 7 days. Infer the likely topic.
3. **Generate agenda** as a Google Doc. Link it in the calendar event.
4. **Post agenda link** to the relevant Slack channel or DM.
## Post-meeting (30 minutes after)
1. **Read the transcript** from Zoom.
2. **Generate summary:** 3-5 bullet points of key decisions.
3. **Extract action items** with owner, due date, and context.
If no due date mentioned, default to 1 week.
If no owner mentioned, assign to the meeting organizer.
4. **Create Linear tickets** for each action item.
5. **Update the agenda doc** with summary + actions.
6. **Post to Slack:** summary + actions with @mentions for owners.
7. **If customer meeting:** Update Salesforce activity log.
If risks mentioned (budget concerns, timeline slippage,
competitor mentions), flag the deal.
8. **If follow-up email needed:** Draft in Gmail, ready to send.
## Rules
- Never send an email without human confirmation.
- Never create tasks without human confirmation on bulk (>3).
- Internal meetings: post summary to Slack channel only.
- Customer meetings: also draft follow-up email to external attendees.
- 1:1s: post summary as DM to both participants only. Never to a channel.
- If transcript is unavailable, skip post-meeting actions.
Don't guess from the calendar event alone.
3

Set up the automations

terminal
$ amodal install automation pre-meeting-agenda
Trigger: 2 hours before any calendar event with 2+ attendees
$ amodal install automation post-meeting-actions
Trigger: Zoom meeting ended (webhook) → wait 10 min for transcript → process
Part 3

A 1:1 meeting lifecycle

Tuesday 2pm: Sarah's weekly 1:1 with her manager Kevin.

4

12:00pm — Auto-generated agenda

2 hours before the 1:1, the agent fires:

Google Docs — auto-created by agent
Sarah ↔ Kevin 1:1 — March 25
Auto-generated from last meeting + current context. Edit freely before the meeting.
Carryover from last week
Finalize Q2 OKRs (LIN-4521 — closed March 20)
Review candidate portfolio for senior eng role (LIN-4518 — still open, due Friday)
!Resolve API rate limit issue with vendor (LIN-4515 — blocked, waiting on vendor response since March 18)
Suggested topics (from recent activity)
Sprint velocity: Sarah's team completed 34 points last sprint (avg: 28). Worth discussing what went well.
Blocked ticket: LIN-4530 has been in review for 5 days. Assigned to Mike, who's been out. May need reassignment.
Kudos: Sarah was mentioned positively in #engineering by the product team for the API migration. Might want to acknowledge.
Standing topic: Career development check-in (last discussed Feb 11).
Open space
Add your own topics here before the meeting.
Slack DM — to Sarah and Kevin, 12:00pm
A
Amodal 12:00 PM
Agenda ready for your 2pm 1:1: Sarah ↔ Kevin 1:1 — March 25
3 carryovers (1 done, 1 open, 1 blocked). 4 suggested topics from recent activity. Edit the doc before the meeting if you want to add anything.
Where the context came from
The agent pulled last week's 1:1 transcript summary (Zoom), checked action item status (Linear), looked at sprint velocity (Linear), found a blocked ticket (Linear), found a Slack kudos mention (Slack), and checked when career development was last discussed (previous 1:1 transcript). 6 queries across 3 systems. The agenda wrote itself.
5

2:00pm — The meeting happens

Sarah and Kevin meet on Zoom. They discuss the blocked vendor issue, the sprint velocity, reassign Mike's review ticket, and talk about Sarah's interest in a tech lead role. Zoom records and transcribes automatically. The agent isn't in the meeting. It reads the transcript after.

6

2:35pm — Actions extracted and dispatched

The meeting ended at 2:28pm. Zoom processes the transcript. At 2:35pm, the agent reads it and takes action:

Slack DM — to Sarah and Kevin, 2:35pm
A
Amodal 2:35 PM
Sarah ↔ Kevin 1:1 — Summary + Actions
Decisions
• Escalate the vendor API rate limit issue — Kevin will email their VP of Engineering directly
• Reassign LIN-4530 (API review) from Mike to Dana while Mike is out
• Sarah will put together a tech lead growth plan by next 1:1
Action items
Action
Owner
Due
Email vendor VP re: rate limit escalation
Kevin
March 26
Reassign LIN-4530 to Dana
Sarah
Today
Draft tech lead growth plan
Sarah
April 1
Schedule skip-level with CTO re: Sarah's growth
Kevin
April 4
Pending confirmation (4 write actions)
1. Linear: Create 3 tickets (escalation, growth plan, skip-level)
2. Linear: Reassign LIN-4530 from Mike → Dana
3. Google Docs: Update agenda doc with summary + actions
4. Gmail: Draft vendor escalation email for Kevin to review
K
Kevin Park 2:36 PM
[Confirmed all 4]
A
Amodal 2:36 PM
✓ Linear: 3 tickets created (LIN-4547, LIN-4548, LIN-4549)
✓ Linear: LIN-4530 reassigned Mike → Dana
✓ Google Docs: agenda doc updated with summary and actions
✓ Gmail: draft ready for Kevin — "Re: API Rate Limit Escalation"

Kevin opens Gmail and sees the draft:

Gmail — Draft (auto-generated by agent)
To: jennifer.wu@vendor.com
Subject: API Rate Limit Escalation — Acme Corp
Hi Jennifer,
We've been hitting the 1,000 req/min rate limit consistently for the past 3 weeks, and it's blocking our Q2 integration work. Our team submitted a support ticket (VENDOR-8847) on March 18 but we haven't received a response.
Could we schedule a quick call this week to discuss either a limit increase or a batch endpoint that would reduce our call volume? Happy to share our usage patterns.
Best,
Kevin Park
VP Engineering, Acme Corp
Agent note: drafted from 1:1 context. Kevin mentioned wanting to "email their VP directly." Vendor contact pulled from Salesforce account record. Support ticket # from Jira.
From meeting to execution in 8 minutes
Meeting ended at 2:28. By 2:36: summary posted, 3 Linear tickets created, 1 ticket reassigned, agenda doc updated, follow-up email drafted. Kevin reviews the email, hits send. The meeting's outputs are in the systems where work actually gets tracked. Not in someone's head. Not in a note-taking app that nobody checks.
Part 4

A customer meeting lifecycle

Wednesday 10am: Discovery call with DataFlow (prospect, $120K deal).

7

8:00am — Pre-meeting briefing with deal context

Slack DM — to Marcus Rivera (AE), 8:00am
A
Amodal 8:00 AM
Prep for your 10am with DataFlow
Deal context (Salesforce)
DataFlow — $120K, Discovery stage, created March 10
Contacts: Rachel Torres (VP Ops), James Wu (Director Eng)
Both attending tomorrow. No prior meetings recorded.
Recent context
• Rachel downloaded the "AI for Ops" whitepaper March 14
• James visited the /for-builders page 3 times last week
• Email thread (4 messages): Rachel asked about multi-system integrations and pricing
• DataFlow is a 200-person SaaS company (project management). Series B.
Suggested agenda
1. Their current stack and pain points (Rachel mentioned integrations)
2. Technical deep-dive for James (he's the builder — show amodal dev)
3. Multi-system use case: connect their PM tool + Slack + Jira
4. Pricing discussion (Rachel asked in email)
5. Next steps and timeline
Agenda doc created and linked in the calendar event.

The agent pulled deal data from Salesforce, website behavior from the marketing agent's lead scoring, the email thread from Gmail, and company info from the connection. Marcus walks into the call knowing exactly who he's talking to and what they care about.

8

10:45am — Post-meeting: deal updated, follow-up drafted

The call went well. Rachel wants a technical POC. James wants to try the CLI. They mentioned a competitor (Torq) is also in the evaluation. The agent reads the transcript:

Slack DM — to Marcus Rivera, 10:45am
A
Amodal 10:45 AM
DataFlow Discovery Call — Summary + Actions
Key outcomes
• Rachel wants a technical POC: connect their PM tool (Asana) + Slack + Jira
• James will try the CLI this week. Wants access to the GitHub repo.
Competitor alert: Torq is also evaluating. Rachel mentioned "similar demo last week."
• Timeline: decision by end of April. Budget approved for Q2.
• Rachel asked about pricing for 5 agents (team plan).
Pending confirmation (5 write actions)
1. Salesforce: Move DataFlow to "Evaluation" stage. Add competitor: Torq. Update close date: April 30. Log activity with call summary.
2. Salesforce: Add note: "Budget approved for Q2. Rachel is champion. James is technical evaluator."
3. Linear: Create ticket: "Set up DataFlow POC environment (Asana + Slack + Jira connections)" — assign to SE team
4. Gmail: Draft follow-up to Rachel and James with POC timeline + GitHub access link
5. Slack #sales: Post deal update: "DataFlow moving to eval, Torq competing, POC this week"
M
Marcus Rivera 10:46 AM
[Confirmed all 5]
A
Amodal 10:46 AM
✓ Salesforce: DataFlow → Evaluation stage, competitor added, close date updated, activity logged
✓ Salesforce: Champion and evaluator roles noted
✓ Linear: POC setup ticket created (LIN-4560), assigned to SE team
✓ Gmail: Follow-up draft ready — "DataFlow POC Next Steps"
✓ Slack #sales: Deal update posted
The CRM updates itself
Marcus didn't open Salesforce. He didn't update the stage. He didn't add the competitor. He didn't log the activity. The agent did all of it from the call transcript. Marcus confirmed with one click. The deal record is accurate for the first time because updating it required zero effort.
Part 5

A weekly pipeline review lifecycle

Monday 9am: the sales team's weekly pipeline meeting.

9

7:00am — Auto-generated pipeline agenda

Google Docs — auto-created Monday 7am
Pipeline Review — March 31
Auto-generated from last week's actions + current pipeline state.
Last week's actions: status check
Marcus: send DataFlow POC proposal (done March 26)
Lisa: follow up with Acme Corp on renewal (done March 27)
Alex: schedule demo for CloudFirst — not done, no activity
! Dana: negotiate MegaCorp pricing — blocked, MegaCorp went dark March 24
Pipeline changes this week
+ 3 new opps: DataFlow ($120K, Eval), StartupCo ($45K, Discovery), TechCorp ($200K, Qualification)
2 stage changes: DataFlow Discovery→Eval, Acme Corp Negotiation→Proposal (backwards)
1 closed-lost: SmallCo ($30K, lost to internal build)
! 4 deals stale (>14 days no activity): MegaCorp, OldCo, LegacyCo, SlowCo
Suggested discussion topics
1. Acme Corp moved backwards (Negotiation→Proposal). What happened?
2. MegaCorp has gone dark. Dana's pricing negotiation is stalled. Escalate?
3. DataFlow POC is live. Update from Marcus on technical eval.
4. TechCorp is new and big ($200K). Who's the champion? What's the timeline?
10

9:30am — Post-meeting actions dispatched

After the pipeline review, the agent reads the transcript and creates actions:

#sales — 9:35am
A
Amodal 9:35 AM
Pipeline Review — Actions
1. @marcus DataFlow: share CLI docs with James by Wednesday
2. @dana MegaCorp: VP Kevin will email their CRO directly. Wait 48 hours, then follow up.
3. @alex CloudFirst demo overdue. Schedule by end of day or escalate.
4. @lisa Acme Corp moved backward. Lisa to call the champion today and get the real story.
5. @marcus TechCorp: set up intro call with their VP Eng. Kevin wants to be on it.
Pending confirmation (6 write actions)
1. Linear: Create 5 action items with owners and due dates
2. Salesforce: Add note to MegaCorp: "Escalated to VP-CRO. 48hr response window."
3. Salesforce: Flag Acme Corp deal: "Stage regression — champion call needed"
4. Gmail: Draft Kevin→MegaCorp CRO email
5. Google Calendar: Schedule TechCorp intro call (suggest 3 times this week)
6. Google Docs: Update pipeline review doc with summary + actions
Part 6

The action timeline: nothing falls through the cracks

The agent has the full history of every action across every meeting. It knows when things were first mentioned, re-discussed, and whether they ever got done.

11

"What's been stuck the longest?"

It's April 15. Kevin asks a question that no tool in the world currently answers well:

#leadership — April 15, 9:30 AM
K
Kevin Park (VP Eng) 9:30 AM
@amodal what action items have been open the longest? Show me anything that was assigned more than 30 days ago and isn't done.
A
Amodal 9:30 AM
Queried: Meeting transcripts (89 meetings, 14 weeks), Linear (all open tickets from meeting actions), Salesforce (deal actions)
7 actions older than 30 days still open
Action timeline (weeks)
JanFebMarApr
Set up CustomerX POC env
Dana · first: Jan 5 · 6 meetings
Vendor API rate limit fix
Kevin · first: Jan 22 · 4 meetings
Migrate auth to new SSO
Mike · first: Feb 10 · 3 meetings
Hire senior backend eng
Kevin · first: Feb 18 · 5 meetings
Update onboarding docs
Sarah · first: Mar 3 · 2 meetings
Evaluate Datadog alternative
Alex · first: Mar 10 · 2 meetings
Finalize Q2 roadmap preso
Lisa · first: Mar 14 · 3 meetings
101 days open
"Set up CustomerX POC environment" — assigned to Dana on Jan 5. Discussed in 6 meetings (Jan 12, Jan 19, Feb 2, Feb 16, Mar 3, Mar 17). Each time: "still working on it." Linear ticket LIN-4102 has been in "In Progress" since January 8.
This has been re-discussed in more meetings than any other action this quarter.
84 days open
"Vendor API rate limit fix" — assigned to Kevin on Jan 22. Kevin emailed the vendor VP on March 25 (from a previous 1:1 action). Vendor responded March 28 with "reviewing internally." No follow-up since.
65 days open
"Migrate auth to new SSO" — assigned to Mike on Feb 10. Mike was out for 2 weeks in March. Picked back up March 24. Last update in standup: "80% done, blocked on IdP config." Linear ticket shows active commits.
Likely to close this week based on commit activity.
Where did this data come from?
No single system has this view. Linear has the ticket but doesn't know it was discussed in 6 meetings. The meeting transcripts have the discussions but don't track the ticket. Gmail has the vendor follow-up but doesn't connect it to the 1:1 action. The agent correlated across meeting transcripts (Zoom), task status (Linear), email threads (Gmail), and calendar events (Google Calendar) to build a timeline that spans 14 weeks and 89 meetings.
12

Kevin takes action on the stuck items

#leadership — 9:32 AM (continued)
K
Kevin Park (VP Eng) 9:32 AM
The CustomerX POC has been open since January. That's embarrassing. Reassign it to Alex — Dana clearly can't get to it. And send the vendor a follow-up on the rate limit, it's been 3 weeks since they said "reviewing internally."
A
Amodal 9:32 AM
Confirmation required (3 actions)
1.
Linear: Reassign LIN-4102 "Set up CustomerX POC environment" from Dana → Alex. Add comment: "Reassigned by Kevin — needs to be completed this sprint."
2.
Slack: DM Alex with context: "You're taking over the CustomerX POC setup. Here's what Dana had in progress: [link to LIN-4102]. Kevin wants this done this sprint."
3.
Gmail: Draft follow-up to vendor: "Hi Jennifer, following up on the rate limit review you mentioned on March 28. It's been 3 weeks — could we get an update this week?"
K
Kevin Park (VP Eng) 9:33 AM
[Confirmed all 3]
A
Amodal 9:33 AM
✓ Linear: LIN-4102 reassigned Dana → Alex, comment added
✓ Slack: DM sent to Alex with handoff context
✓ Gmail: Vendor follow-up draft ready for Kevin
13

The accountability dashboard

The admin UI surfaces the action timeline across all meetings:

Admin UI → Meeting Ops → Action Timeline
247
Actions created (14 weeks)
71%
Completed on time
18%
Completed late
11%
Still open (27 items)
Repeat offenders (actions discussed in 3+ meetings without closing)
101d
Set up CustomerX POC
Dana → Alex
6 meetings
57d
Hire senior backend eng
Kevin
5 meetings
84d
Vendor rate limit fix
Kevin
4 meetings
32d
Finalize Q2 roadmap preso
Lisa
3 meetings
Completion rate by person
Sarah
89%
Alex
82%
Lisa
75%
Kevin
68%
Mike
61%
Dana
54%
Accountability from data, not micromanagement
Nobody built this dashboard. Nobody maintained a spreadsheet. The agent extracted every action item from every meeting transcript, tracked them in Linear, and correlated completion with time. The "repeat offenders" list — actions discussed in 3+ meetings without closing — is the single most valuable view for any VP. It shows where the org is stuck, not where it's busy.
Part 7

The agent learns meeting patterns

14

Knowledge proposals after a month

Admin UI → Knowledge Proposals
Proposed by agent · from 124 meetings analyzed

"Action items from Monday meetings have an 82% completion rate. Friday meetings: 41%. Meetings before noon complete actions at 2x the rate of afternoon meetings. Consider moving decision-making meetings to Monday-Wednesday mornings."

Proposed by agent

"Kevin's 1:1s average 42 minutes (scheduled for 30). The top topic is always blocked tickets. Consider making 1:1s 45 minutes or adding a standing 'Blockers' section to the agenda template."

Proposed by agent

"Customer calls that include the SE (solution engineer) advance to Evaluation stage 3x faster than calls without. The SE attended 40% of discovery calls last month. Consider requiring SE attendance for all discovery calls on deals >$50K."

Proposed by agent

"34% of meetings this month had no agenda. Meetings with an auto-generated agenda had 2.1x more documented action items than meetings without. The agenda generation is working — consider making it the default for all meetings, not just recurring ones."

The agent is a meeting consultant
After 124 meetings, the agent knows things no one in the org would think to measure. Which days produce better follow-through. Which meeting formats need more time. Which sales call configurations close faster. Which meetings even need to exist. These aren't opinions. They're patterns from data across Calendar, Zoom, Linear, and Salesforce.
Part 8

The meeting ops dashboard

15

Operational visibility

Admin UI → Meeting Ops Dashboard
47
Meetings this week
43
Agendas generated
89
Actions extracted
71%
Actions completed
$18.40
Agent cost
Action completion by meeting type
Pipeline review
88%
1:1s
79%
Customer calls
74%
Standups
65%
All-hands
42%
This week's write actions
34
Linear tickets created
12
Salesforce updates
8
Follow-up emails drafted
43
Agendas generated

$18.40/month to manage 47 meetings. 89 action items extracted and tracked. 43 agendas auto-generated. 34 Linear tickets created. 12 Salesforce updates. 8 follow-up emails drafted. All confirmed by humans. None of this existed before the agent.

What you built

7
systems connected
2
automations (pre + post)
$18
per month
97
write actions per week
Meeting type
Pre-meeting (read + write)
Post-meeting (read + write)
1:1
Pull last transcript + open actions + recent activity → generate agenda doc → post link to DM
Extract actions → create Linear tickets → reassign blocked items → update agenda doc → draft follow-up emails
Customer call
Pull deal context + email threads + website behavior → generate prep briefing → create agenda
Summarize → update Salesforce stage + contacts + competitor + activity → create SE tasks → draft follow-up email → post to #sales
Pipeline review
Pull last week's actions + pipeline changes + stale deals → generate discussion agenda
Extract new actions → create Linear tickets → update deal records → draft escalation emails → schedule follow-up calls
Standup
Pull sprint status + blocked tickets + yesterday's actions
Extract blockers → reassign if needed → flag to manager
Not a transcription tool. An operator.
Otter gives you a transcript. The meeting agent gives you a transcript AND creates 34 Linear tickets, updates 12 Salesforce records, drafts 8 follow-up emails, generates 43 agendas from cross-system context, and learns which meeting patterns produce better outcomes. The transcript is the input. The actions are the output.

7 connections. 1 skill. 2 automations. The agent reads transcripts from your existing meeting tools and does the 5 things they don't: agendas, actions, tasks, updates, follow-ups.