Automate / Claude Code
Ask Claude Code or Codex what happened in your last meeting.
Install the Agent Skill once. Then a call is something you ask about, not something you search for in Finder.
Claude Code and Codex can write meeting notes from a RecordCue recording because the transcript is a plain text file on your Mac, and a local agent can run a command and read a file. With the RecordCue Agent Skill installed you type “what did we decide in my last Google Meet call?”; the agent runs the Skill's wrapper to find the newest finished recording, reads its transcript, and answers with the decisions and action items. RecordCue has no AI of its own: the model is the one your agent already uses, under your own account, and the transcript reaches it only when the agent reads the file and sends it. This page is the interactive path. The hook is for when you want it to happen without asking.
What you get
One question, one answer, with the minute marks the transcript carries so you can check any line against the recording:
$ claude
> What did we decide in my last Google Meet call?
Bash(~/.claude/skills/recordcue/scripts/recordcue latest --json)
{ "service": "Google Meet", "startedAt": "2026-09-08T09:07:01Z",
"durationMs": 3257886,
"transcript": { "path": "…/Google Meet/2026-09-08 18.07-19.01 Google Meet.txt" }, … }
Read(~/Movies/RecordCue/Google Meet/2026-09-08 18.07-19.01 Google Meet.txt)
Read 212 lines
Your 18:07 Google Meet call, 54 minutes. Decisions:
- 1.3 ships on the 22nd; the pricing-page change waits for 1.4 [31:40].
- No annual plan. One-time purchase stays the only option [38:05].
Action items:
- You: send Dana the revised onboarding copy by Thursday.
- Dana: confirm the App Store screenshot sizes.
Open question: keep the free limit at 10 minutes, or move it to 15 [47:12].Codex looks the same: the wrapper lives at ~/.agents/skills/recordcue/scripts/recordcue and the question is the same. The transcript is Apple's on-device recognition, labelled Mic: for you and System: for the other side. It is rough on names, jargon and mixed languages, and good enough for decisions and action items; the Whisper recipe is there for the calls that need better.
Prerequisites
- RecordCue with automatic transcription on in Settings, so a
.txtlands beside each recording. A finished recording without one can be transcribed later from the menu bar. - Claude Code or Codex running on this Mac — the CLI, the IDE extension, or ChatGPT desktop in a local Codex workspace. A session on a remote machine or in a browser has no path to the files.
- The Agent Skill, installed once. In RecordCue, open Settings → AI tools and press Copy setup request; paste it into the agent. It proposes four plain-text files under
~/.claude/skills/recordcue(Claude Code) or~/.agents/skills/recordcue(Codex): the Skill, a wrapper that finds the app's built-in CLI, a CLI reference and a manifest. Read them, approve, done. The file list, the ZIP alternative and the fallback for agents without a Skill folder are on the Skill page. - No hook, no launchd, no
jq. Nothing on this page runs until you ask.
Check the wrapper before asking anything:
# Claude Code ~/.claude/skills/recordcue/scripts/recordcue latest --json # Codex ~/.agents/skills/recordcue/scripts/recordcue latest --json # Exit 0 and JSON: ready. Exit 3: no finished recording yet — make one. # Exit 127: the wrapper could not find RecordCue.app.
Things to ask
The Skill tells the agent which subcommand fits which question; you just ask. What it does underneath is noted so you know what to expect.
The latest call
- “Summarise my last call in five bullets: decisions, action items with owners, open questions.” —
latest, then the transcript. - “Draft the follow-up email for the call I just finished. I will send it myself.” — the same; the Skill will not send it for you.
A named or older call
- “What did we agree in the Zoom call on Tuesday?” —
list --since 7d, pick the Zoom recording by date, theninspect <path>for its transcript. - “Find last week's Teams call with Dana and list what I promised her.” — the same, filtered by the transcript's contents; the CLI does not know who was on the call, only which service it was.
Across calls
- “Go through everything we said about pricing this month.” —
list --since 30d, then every transcript that has one, quoted with its[m:ss]marks. Thirty transcripts is a lot of text to send; the agent will usually tell you how many it is about to read. - “List every call this week with its length, and which ones have no transcript yet.” — metadata only; no transcript is read and nothing is sent beyond the JSON.
How you spoke
- “Did I talk too much in that call?” — the
speakerActivitytimeline in the same JSON: which side was louder, in 100 ms buckets, for the whole call. The agent decodes it (the format and a decoder) and gives you a share. It knows which signal was louder, not who a voice belonged to. - “Where were we talking over each other?” — the same timeline, looking for the stretches marked both.
The recording itself
- “Listen to the recording itself and tell me how the pricing discussion sounded.” —
media.pathinstead of the transcript. The agent then processes the whole audio file, which is far larger and more sensitive than the text, and the Skill only does this when you say so in those words. If the agent cannot handle audio, the Skill tells it to say that rather than quietly fall back to the transcript.
Scripting it
The same thing without a conversation: find the transcript with the CLI, pipe it into the agent on standard input, keep the answer. Both commands are verified; the prompt is the one used by every recipe on this site, so change it once and everywhere.
# Where the newest transcript is. Empty until transcription has finished.
rc='/Applications/RecordCue.app/Contents/MacOS/RecordCue'
transcript=$("$rc" --agent-cli latest --json | jq -r '.transcript.path // empty')
[[ -n "$transcript" ]] || { echo "no transcript yet"; exit 0; }
# Claude Code, non-interactive. The transcript goes in on stdin, so the
# session needs no file-read permission and reads nothing else.
claude -p "Summarise this call transcript in five bullets: decisions, \
action items with owners, open questions. Plain text, no preamble." \
< "$transcript"
# Codex. Stdin is appended to the prompt as a <stdin> block; -o writes the
# last message to a file instead of the terminal.
codex exec -o summary.txt "Summarise this call transcript in five bullets: \
decisions, action items with owners, open questions. Plain text, no preamble." \
< "$transcript"
cat summary.txtA hook action is this script with the lookup removed, because the runner has already done it and put the path in RC_TRANSCRIPT. The smallest version writes the summary beside the recording:
#!/bin/zsh
# ~/.config/recordcue/actions/15-summary.sh
# A plain-text summary beside each recording, minutes after it ends.
# Needs the runner from /automate/hooks/ and Claude Code on this Mac.
[[ -n "$RC_TRANSCRIPT" ]] || exit 0 # no text: nothing to do, done
out="${RC_TRANSCRIPT%.txt} (summary).txt"
[[ -e "$out" ]] && exit 0 # already written on an earlier run
summary=$(claude -p "Summarise this call transcript in five bullets: decisions, \
action items with owners, open questions. Plain text, no preamble." \
< "$RC_TRANSCRIPT") || exit 1 # failed: retried next minute
[[ -n "$summary" ]] || exit 1
printf '%s\n\n%s\n' "$RC_SERVICE · $RC_WHEN · $RC_MINUTES min" "$summary" > "$out"chmod +x it, make a recording, wait for the transcript, and a (summary).txt appears next to it. Exit 0 with no transcript means “done, nothing to do”; a failed claude call exits 1 and is retried the next minute. The Slack recipe is the same action with a webhook at the end instead of a file; Obsidian and action items swap the destination again.
Let the agent build your automation
Every recipe under /automate/ is written to be executed, not only read: real paths, complete files, a test at the end. An agent that can fetch a page and run a shell on this Mac can follow one. Tell it to show you each file before it writes anything; the recipes ask it to, and so does this request. Start with this page, or paste the same sentence with another recipe's address.
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/claude-code/ and set it up on this Mac exactly as that page describes: install the RecordCue Agent Skill from https://www.recordcue.app/agent/ if it is not already installed, then answer "What did we decide in my last call?" from the transcript of my newest finished recording. Show me every file before writing it, then run the test and show me the result.
Other agents
Gemini CLI, OpenCode, Aider-style tools, and anything else that can run a shell command and read a file work the same way: the Skill's wrapper is a short zsh script that finds RecordCue.app and calls its read-only CLI, so an agent that has no Skill folder can be handed the path to recordcue/SKILL.md and told to follow it. The wrapper needs nothing installed beyond the app. What does not work is any chat that runs only in a browser: ChatGPT web, Claude.ai and their mobile apps cannot see the files at all.
Nothing leaves the Mac at all
The model does not have to be remote. With Ollama on the Mac, the same transcript on standard input gives a summary that never crosses the network:
ollama run llama3.2 "Summarise this call transcript in five bullets: decisions, \ action items with owners, open questions. Plain text, no preamble." < "$transcript"
A local model is slower and less careful than the frontier ones, and fine for five bullets. The one-line swap works in the action above too.
What leaves the Mac, and when
RecordCue sends nothing. It makes no network requests, has no account and no server; the recording, the transcript and the JSON are files in ~/Movies/RecordCue. The transcript goes to a model provider at exactly one moment: when the agent reads the file and sends it as part of your question — under the account and the permissions you already gave that agent, to the provider you chose when you installed it. With Claude Code that is Anthropic; with Codex, OpenAI; with Ollama, nobody. The recording itself goes nowhere unless you ask for it by name.
The Skill also tells the agent not to forward a transcript or a result to Slack, email, Notion, a CRM or anywhere else unless you ask for that in so many words. Permission to summarise a call is not permission to post it. If you want the posting, the Slack recipe does it in a script you can read.
Questions
- Can Claude Code summarise a meeting transcript?
- Yes, when the transcript is a file on the Mac where Claude Code runs. RecordCue writes one beside each recording when automatic transcription is on, labelled Mic and System so the model knows which side said what. With the Agent Skill installed, "summarise my last call" is enough: the agent finds the file itself. Without it, claude -p "Summarise this transcript" < file.txt does the same job for one file.
- Does this work with ChatGPT or Claude.ai in the browser?
- No. A browser chat cannot run a command or read a file on your Mac, so it cannot find a recording. Claude Code, Codex CLI and other local agents can. You can still drag a transcript into a web chat by hand; that is a manual upload, which is the point.
- Are these AI meeting notes local, or does the transcript leave my Mac?
- Recording, transcription and filing are local: RecordCue makes no network requests. The summary is made by whatever model your agent uses. With Claude Code or Codex that is a cloud model under your own account, and the transcript reaches it the moment the agent reads the file and sends it. For notes that never leave the Mac, pipe the same transcript into a local model with Ollama.
- Will the agent summarise every call automatically?
- Not from the Skill. It runs only when you ask, in the session you ask in. To have a summary made minutes after every call without asking, put the same one-line claude -p command in a hook action; the hooks recipe shows the runner, and the Slack recipe is that action in full.