RecordCueAutomateGuideFAQSupport

Automate / Slack

Post meeting summaries to Slack, with no bot in the call.

Decisions, action items with owners, open questions — in a channel a few minutes after you hang up. Nothing joined the meeting.

To get a meeting summary into Slack without a bot in the call, record the call on your own Mac and post the summary afterwards. RecordCue records both sides locally and transcribes on the device; the script on this page summarises that transcript with Claude Code and posts the result to a Slack incoming webhook. No participant is added, no “Notetaker has joined” line appears, and the other side never sees anything. The same script works for Slack huddles, which RecordCue detects on its own, so a huddle can end with its summary already in the channel.

What you get

One message per recording, from whatever name and icon you gave the webhook. The first line says which call it was; the rest is the model's summary in Slack mrkdwn; the footer says where the full text lives, on your Mac.

*Google Meet · 2026-09-08 18:07 · 54 min*

*Decisions*
• Ship the pricing change on the 22nd, not the 15th.
• Keep the free tier at 10 minutes per recording.
• Drop the annual plan from the launch; revisit in Q4.

*Action items*
• Mika: draft the release note by Thursday.
• Sam: confirm App Store review timing before the 18th.
• me: send the updated one-pager to the design partners.

*Open questions*
• Does the pricing page need a Japanese version at launch?
• Who owns the changelog once the docs move?

Full transcript on this Mac: /Users/you/Movies/RecordCue/Google Meet/2026-09-08 18.07-19.01 Google Meet.txt

“me” is the microphone side of the transcript — the person who recorded. The model uses names where the conversation makes them clear and falls back to that otherwise. The summary is only as good as the transcript: macOS transcription is fine for decisions and tasks and weaker on names and jargon, so read the message once before you rely on an owner it assigned.

Prerequisites

mkdir -p ~/.config/recordcue/actions
# Paste the URL Slack gave you (it starts with https://hooks.slack.com/services/).
printf '%s' 'https://hooks.slack.com/services/T000/B000/XXXX' \
  > ~/.config/recordcue/slack-webhook
chmod 600 ~/.config/recordcue/slack-webhook

The action

Save as ~/.config/recordcue/actions/20-slack.sh. It does three things in order: bail out when there is no transcript, ask Claude for the summary, post it. An empty RC_TRANSCRIPT means transcription was off or failed for that recording; the script exits 0 so the runner marks it done and moves on.

#!/bin/zsh
# ~/.config/recordcue/actions/20-slack.sh
# Summarise a finished call with Claude Code and post it to a Slack channel
# through an incoming webhook. Runs after the call, from the hook at
# https://www.recordcue.app/automate/hooks/ — nothing here is in the call.
set -eu

# No transcript, nothing to summarise. Exit 0 so the runner does not retry.
[[ -n "${RC_TRANSCRIPT:-}" ]] || exit 0

webhook=$(cat ~/.config/recordcue/slack-webhook)

# The transcript goes to Claude on standard input, so no file permissions
# are needed. This is the moment it leaves the Mac, under your account.
summary=$(claude -p "Summarise this call transcript for a Slack channel.
Lines marked Mic: are the person who recorded; System: is everyone else.
Use names when the transcript makes them clear, otherwise 'me' and 'they'.
Write three sections in Slack mrkdwn, each headed with a bold line:
*Decisions*, *Action items* (one per line, owner first), *Open questions*.
Bullets as '•'. Plain text, no preamble, no closing remark." < "$RC_TRANSCRIPT")

text=$(printf '*%s · %s · %s min*\n\n%s\n\nFull transcript on this Mac: %s' \
  "$RC_SERVICE" "$RC_WHEN" "$RC_MINUTES" "$summary" "$RC_TRANSCRIPT")

# -f turns an HTTP error into a non-zero exit, so the runner retries next
# minute. -o /dev/null keeps Slack's "ok" out of hooks.log.
jq -n --arg text "$text" '{text: $text}' |
  curl -sf -o /dev/null -X POST -H 'Content-Type: application/json' \
    -d @- "$webhook"

What leaves the Mac, and when: the transcript, at the claude -p line, to Anthropic under your own account; then the summary, at the curl line, to Slack. RecordCue sends neither. If Claude fails or Slack answers with an HTTP error, the action exits non-zero and the runner tries again next minute — that one action only, without repeating the others.

Test it

Point the webhook at a test channel, or a channel with only you in it, before the first run. Both steps post for real.

chmod +x ~/.config/recordcue/actions/20-slack.sh

# 1. The webhook alone, no model involved:
jq -n '{text: "RecordCue: webhook works"}' | curl -sf -o /dev/null -X POST \
  -H 'Content-Type: application/json' -d @- "$(cat ~/.config/recordcue/slack-webhook)" && echo posted

# 2. The whole action, against your latest transcript:
r=$('/Applications/RecordCue.app/Contents/MacOS/RecordCue' --agent-cli latest --json)
RC_TRANSCRIPT=$(jq -r '.transcript.path // empty' <<<"$r") \
RC_SERVICE=$(jq -r '.service // "Recording"' <<<"$r") RC_WHEN=test \
RC_MINUTES=$(jq -r '(.durationMs / 60000) | round' <<<"$r") \
  ~/.config/recordcue/actions/20-slack.sh && echo posted

The second step needs a recording that already has a transcript; if the last one has none, the action exits quietly and prints nothing. From here on the hook does it alone: record a call, stop, and the message appears once the transcript is ready. Anything that fails is in ~/.config/recordcue/hooks.log with the recording's name.

Variations

Codex instead of Claude Code

Replace the summary= block. codex exec appends standard input to the prompt and -o writes its last message to a file:

out=$(mktemp)
codex exec -o "$out" "Summarise this call transcript for a Slack channel. \
Lines marked Mic: are the person who recorded; System: is everyone else. \
Three sections in Slack mrkdwn, bold headings: *Decisions*, *Action items* \
(one per line, owner first), *Open questions*. Bullets as '•'. \
Plain text, no preamble." < "$RC_TRANSCRIPT"
summary=$(cat "$out"); rm -f "$out"

Fully local with Ollama

The “nothing leaves the Mac but the summary” version. One line, with ollama installed and a model pulled; the summary is rougher, the transcript stays home:

summary=$(ollama run llama3.2 "Summarise this call transcript in three sections: Decisions, Action items with owners, Open questions. Bullets, plain text, no preamble." < "$RC_TRANSCRIPT")

Do not post the transcript itself

It is tempting to attach the .txt as a file so the channel has everything. Do not. The transcript is the whole conversation, both sides, including the minutes before the meeting properly started and anything said in confidence. The summary is what the channel needs; the footer line says where the full text is, on your Mac, and anyone who needs more can ask you. If the footer is too much for a shared channel, delete that line from the printf.

A bot token, when you cannot create webhooks

Some workspaces let admins alone create apps and webhooks. If you have, or can be given, a bot token with the chat:write scope, keep it in ~/.config/recordcue/slack-token and post to https://slack.com/api/chat.postMessage instead: the same JSON with a channel field added, and an Authorization: Bearer header from $(cat ~/.config/recordcue/slack-token). The bot must be invited to the channel first. One difference matters for retries: that API answers HTTP 200 even when it refuses, so pipe the response through jq -e .ok rather than relying on curl's -f.

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/slack/ 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 get meeting summaries into Slack without adding a bot to the call?
Record the call on your own Mac and post the summary afterwards. RecordCue records both sides locally and transcribes on the device; a short script then summarises the transcript with Claude Code and posts the result to an incoming webhook. Nobody in the meeting sees a bot join, because nothing does. The channel gets the summary a few minutes after you hang up.
Can I get a summary of a Slack huddle posted to a channel?
Yes. RecordCue notices a huddle starting in the Slack app and shows its cue; press once to record. When the huddle ends and the transcript is ready, this action posts the summary to whichever channel the webhook points at, headed "Slack · date · minutes". The huddle itself had no bot in it.
Does the transcript leave my Mac?
Twice, and both times because the script sends it. The transcript goes to Claude when the script runs claude -p, under your own account; the summary then goes to Slack. RecordCue itself makes no network requests. Swap in Ollama and only the summary leaves the Mac.
Can the summary go to a different channel per meeting?
An incoming webhook is tied to one channel when you create it. Make a second webhook for a second channel and choose between them in the script, for example on RC_SERVICE. With a bot token and chat.postMessage the channel is a field in the request instead.