RecordCueAutomateGuideFAQSupport

Automate / Action items

Turn meeting recordings into action items, automatically.

One script: the transcript goes to Claude Code with a strict prompt, and every line that comes back becomes an Apple Reminder with an owner and a due date.

To get action items from a meeting automatically on a Mac, record the call with RecordCue, let macOS transcribe it on the device, and have a hook pipe the transcript into claude -p with a prompt that asks for one line per item: owner | task | due. A loop then creates one reminder per line in a Reminders list called Meetings — task as the title, owner and the call in the note, due date set when one was agreed. It runs a few minutes after you hang up, without a bot in the call, and it works the same for Zoom, Google Meet, Teams, Slack huddles and every other call RecordCue notices. The model decides what counts as an action item, so the list is a draft to skim, not a record to trust blindly.

What you get

The model's whole answer is a few lines, which is what makes it safe to loop over:

$ claude -p "List the action items…" < "2026-09-08 18.07-19.01 Google Meet.txt"
Priya | Send the revised pricing deck to Marco | 2026-09-10
me | Book the follow-up with the Berlin team | -
Marco | Confirm the launch date with legal | 2026-09-15

And in Reminders, a minute later:

Reminders › Meetings

[ ] Send the revised pricing deck to Marco        Wed 10 Sep, 09:00
    Owner: Priya · from Google Meet 2026-09-08 18:07
[ ] Book the follow-up with the Berlin team
    Owner: me · from Google Meet 2026-09-08 18:07
[ ] Confirm the launch date with legal            Mon 15 Sep, 09:00
    Owner: Marco · from Google Meet 2026-09-08 18:07

me is whoever was on the microphone side of the transcript. Items with a date get 09:00 on that day as their due time; the rest have none. The note on each reminder names the owner and the call, so a task still makes sense a week later, and so you can find every task from one meeting with a search.

Prerequisites

The action

Save it as ~/.config/recordcue/actions/30-tasks.sh. It exits 0 straight away when there is no transcript, and again when the model returns no lines, so a recording with nothing to do is marked done and never retried. If claude itself fails — not signed in, no network — it exits 1 and the runner tries again next minute. A single reminder that cannot be created is written to hooks.log and skipped, so a retry never duplicates the ones that worked.

#!/bin/zsh
# ~/.config/recordcue/actions/30-tasks.sh
# Action items from the transcript, one Apple Reminder each, in a list "Meetings".
[[ -n "$RC_TRANSCRIPT" ]] || exit 0

items=$(claude -p "List the action items from this call transcript, one per line, exactly as:
owner | task | due
Owner is a first name, or 'me' for the person marked Mic. Due is YYYY-MM-DD when a
date was agreed, otherwise -. No header, no numbering, no other text. Output
nothing if there are no action items." < "$RC_TRANSCRIPT") || exit 1

print -r -- "$items" | grep -F '|' | sed 's/\*//g; s/ *| */|/g; s/^[- ]*//; s/ *$//' |
while IFS='|' read -r owner task due; do
  [[ -n "$task" ]] || continue
  [[ "$due" == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]] || due=-
  body="Owner: ${owner:-?} · from $RC_SERVICE $RC_WHEN"
  osascript - "$task" "$body" "$due" <<'EOF' || print -u2 "30-tasks: could not add: $task"
on run argv
  set {taskName, taskBody, dueText} to argv
  tell application "Reminders"
    if not (exists list "Meetings") then make new list with properties {name:"Meetings"}
    set r to make new reminder in list "Meetings" with properties {name:taskName, body:taskBody}
    if dueText is not "-" then
      set d to current date
      set day of d to 1
      set year of d to (text 1 thru 4 of dueText) as integer
      set month of d to (text 6 thru 7 of dueText) as integer
      set day of d to (text 9 thru 10 of dueText) as integer
      set time of d to 9 * hours
      set due date of r to d
    end if
  end tell
end run
EOF
done
exit 0

Two lines deserve a look. The claude -p line is the moment the transcript leaves the Mac: it goes to Anthropic, under your account, because you sent it. RecordCue itself makes no network requests. And the osascript - line passes the task and note as arguments rather than splicing them into the AppleScript, so a task containing a quote, an apostrophe or a dollar sign cannot break the script or run as code.

Test it

chmod +x ~/.config/recordcue/actions/30-tasks.sh

# Try it on your last transcribed recording, without waiting for the hook:
rc='/Applications/RecordCue.app/Contents/MacOS/RecordCue'
export RC_TRANSCRIPT=$("$rc" --agent-cli latest --json | jq -r '.transcript.path // empty')
export RC_SERVICE=Test RC_WHEN=$(date '+%F %H:%M')
~/.config/recordcue/actions/30-tasks.sh && open -a Reminders

Running it from Terminal once is also where macOS asks whether the script may control Reminders; allow it. If a later run from launchd logs “Not authorized to send Apple events”, macOS wants the same permission for that route: System Settings → Privacy & Security → Automation lists what asked, and one switch there allows it. Recordings that finished before the hook was installed are never replayed, so this test does not cause duplicates later.

Variations

GitHub issues instead of reminders

For work that lives in a repository, gh can open one issue per item. Filtering the lines with grep before the loop keeps it to your own commitments; without the filter, everyone's items become issues, which is what a team repo usually wants.

# In place of the osascript block. Keep only the items whose owner is you:
print -r -- "$items" | grep -i '^ *me *|' | sed 's/ *| */|/g; s/ *$//' |
while IFS='|' read -r owner task due; do
  [[ -n "$task" ]] || continue
  gh issue create -R org/repo -t "$task" \
    -b "From $RC_SERVICE $RC_WHEN. Due: $due"
done
# Drop the grep for everyone's items; add -l meeting or -a "$owner" as you like.

Things 3

Things is scriptable too, but its URL scheme is the shorter route. jq -sRr @uri percent-encodes the title and note; when takes the ISO date the model already produces.

# In place of the osascript block. Things 3 and jq (brew install jq).
enc() { printf '%s' "$1" | jq -sRr @uri }
when=; [[ "$due" == "-" ]] || when="&when=$due"
open "things:///add?title=$(enc "$task")&notes=$(enc "$body")$when"

Todoist

Todoist's quick-add endpoint parses a task the way the app's own quick-add box does, so one curl per line is enough: keep your API token in ~/.config/recordcue/todoist, read it with $(cat …) into an Authorization: Bearer header, and post {"text": "…"} to https://api.todoist.com/api/v1/tasks/quick with the task, the date and a #Meetings project in the text. Todoist works out the due date and the project from the words. Check the endpoint against Todoist's current API reference; it has moved before.

A model that never leaves the Mac

Replace the claude -p line with a local model and nothing about this recipe touches the network:

items=$(ollama run llama3.2 "List the action items… (the same prompt)" < "$RC_TRANSCRIPT") || exit 1

Smaller models follow the owner | task | due format less strictly; the grep -F '|' in the pipeline is what keeps a stray sentence from becoming a reminder. Codex works too: codex exec -o out.txt "…" < "$RC_TRANSCRIPT" and read out.txt.

Have your agent set it up

Paste into Claude Code, Codex or any local agent that can fetch a page and run a shell on this Mac.

Read https://www.recordcue.app/automate/action-items/ and set it up on this Mac exactly as that page describes. Show me every file before writing it, then run the test and show me the result.

Questions

How do I extract action items from a meeting transcript automatically on a Mac?
Record the call with RecordCue and turn on automatic transcription. A launchd hook then runs a script for every finished recording; the script pipes the transcript into Claude Code with a fixed prompt that asks for one line per action item, owner | task | due, and creates an Apple Reminder for each line. No bot joins the call and nothing runs until a recording you started has ended.
How reliable are the action items?
As reliable as the transcript and the model. The on-device transcript is rough on names and jargon, and the model decides what counts as a commitment, so it will sometimes miss one or invent an owner. Treat the Meetings list as a draft to skim right after the call, not as a record. Deleting a wrong reminder takes a second; remembering a forgotten one does not.
Does the transcript leave my Mac?
Yes, at one line of the script: the claude -p call sends the transcript to Anthropic under your own account, because you chose to. RecordCue itself makes no network requests. Swap that line for ollama run and the whole recipe stays on the Mac; the prompt is the same.
Can the action items go to Todoist, Things or GitHub instead of Reminders?
Yes. The script produces plain lines of owner | task | due; only the last step decides where each line goes. The variations below show the replacement for GitHub issues with gh, Things 3 through its URL scheme, and Todoist through its quick-add endpoint with curl.