RecordCueAutomateGuideFAQSupport

Automate / Obsidian

Meeting notes into Obsidian, automatically and locally.

Front matter, the transcript, an optional summary, and a link from the daily note. Nothing leaves the Mac unless you add the one line that sends it.

Every call you record with RecordCue can become a note in your Obsidian vault a minute or two after it ends, without a plugin, a cloud service, or an account: a shell script reads the on-device transcript from ~/Movies/RecordCue and writes a Markdown file into the vault. The note carries YAML front matter (date, service, minutes, the path to the recording, a meeting tag), the full transcript with its Mic: and System: labels, and, if you turn it on, five bullets from Claude Code. The day's daily note gets a [[link]] to it. RecordCue and Obsidian agree on the important thing — plain files you keep — so this is a small script, not a bridge between two databases.

What you get

One note per recording in a folder of your choosing, named 2026-09-08 Google Meet.md. The transcript lines are the ones RecordCue wrote, header removed, so search in Obsidian finds the exact words and the timestamps still point into the recording. With SUMMARISE=0, the default, the Summary section is simply absent and the whole recipe is AI-free.

Meetings/2026-09-08 Google Meet.md

---
date: 2026-09-08
service: "Google Meet"
minutes: 54
media: "/Users/you/Movies/RecordCue/Google Meet/2026-09-08 18.07-19.01 Google Meet.m4a"
tags: [meeting]
---

## Summary
- Decided: 1.3 ships on the 19th; the pricing page waits for the release after.
- Action: Mika sends the updated onboarding copy by Thursday.
- Action: you file the App Store screenshots ticket today.
- Open: whether the trial stays at 14 days.
- Open: who reviews the Japanese localisation.

## Transcript
[0:04] System: Can everyone see the roadmap doc?
[0:09] Mic: Yes. Let's start with the release date.
[0:15] System: We said the nineteenth last time, and I still think that holds.
[0:22] Both: (crosstalk)
[0:24] Mic: Fine by me. Then the pricing page moves to the next one.
…
Daily/2026-09-08.md

…
- [[2026-09-08 Google Meet]]

The media field is a path, not an embed: the recording stays in ~/Movies/RecordCue, and Obsidian on the Mac can open it from the property. When there is no transcript — automatic transcription off, or a recording macOS could not transcribe — the note is still written, with the front matter and a “No transcript for this recording” line in place of the text, and the action reports done.

Prerequisites

The action

Save as ~/.config/recordcue/actions/40-obsidian.sh and set the four variables at the top. DAILY_NOTE must match Obsidian's own daily-note settings, which are configurable — Settings → Daily notes sets the folder and the date format; the default is the vault root and YYYY-MM-DD, which the RC_DATE variable already is.

#!/bin/zsh
# ~/.config/recordcue/actions/40-obsidian.sh
# One Markdown note per finished recording, in the vault, plus a link from
# the day's note. Local files in, local files out.
set -u

VAULT="$HOME/Documents/Vault"          # your vault's folder
NOTES="$VAULT/Meetings"                # where the meeting notes go
DAILY_NOTE="$VAULT/Daily/$RC_DATE.md"  # Settings → Daily notes → folder and date format
SUMMARISE=0                            # 1 = ask Claude Code for five bullets (sends the transcript)

# Note name: "2026-09-08 Google Meet". A second call on the same service
# that day gets its start time as well. A retry finds its own note by the
# media path and overwrites it.
name="$RC_DATE $RC_SERVICE"
note="$NOTES/$name.md"
if [[ -e "$note" ]] && ! grep -qF -- "$RC_MEDIA" "$note"; then
  name="${RC_WHEN/:/.} $RC_SERVICE"
  note="$NOTES/$name.md"
fi

summary=""
if [[ "$SUMMARISE" == 1 && -n "$RC_TRANSCRIPT" ]]; then
  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   # no summary: fail, and the hook retries next minute
fi

mkdir -p "$NOTES"
{
  cat <<EOF
---
date: $RC_DATE
service: "$RC_SERVICE"
minutes: $RC_MINUTES
media: "$RC_MEDIA"
tags: [meeting]
---

EOF
  if [[ -n "$summary" ]]; then
    printf '## Summary\n%s\n\n' "$summary"
  fi
  print -r -- '## Transcript'
  if [[ -n "$RC_TRANSCRIPT" ]]; then
    sed '1,/^$/d' "$RC_TRANSCRIPT"   # the lines as RecordCue wrote them, header removed
  else
    print -r -- 'No transcript for this recording.'
  fi
} > "$note"

# The day's note gets one link, once.
line="- [[$name]]"
mkdir -p "${DAILY_NOTE:h}"
if [[ -e "$DAILY_NOTE" ]]; then
  grep -qxF -- "$line" "$DAILY_NOTE" && exit 0
  tail -c1 "$DAILY_NOTE" | read -r _ || print >> "$DAILY_NOTE"   # start on a fresh line
fi
print -r -- "$line" >> "$DAILY_NOTE"

Two lines to read before trusting it. The claude -p line is the only network request in the recipe, and it runs only when SUMMARISE=1: the transcript goes to Anthropic because you sent it, under your own account, and the five bullets come back as plain text. And sed '1,/^$/d' drops RecordCue's few header lines and keeps every timestamped line as it is; Obsidian's reading view shows one line per line by default (turn on Strict line breaks in Settings → Editor and they would run together, so leave it off or add two trailing spaces per line with one more sed).

The script is safe to run twice. A retry finds the note it wrote earlier by the media path and overwrites it; the daily-note line is added only if it is not already there. A second call on the same service the same day gets the start time in its name, 2026-09-08 18.07 Google Meet.md, rather than replacing the first.

Test it

chmod +x ~/.config/recordcue/actions/40-obsidian.sh

# Once by hand with made-up values, then look in the vault:
RC_DATE=2026-09-08 RC_WHEN='2026-09-08 18:07' RC_SERVICE=Test RC_MINUTES=1 \
RC_MEDIA=/dev/null RC_TRANSCRIPT= ~/.config/recordcue/actions/40-obsidian.sh
# Expect Meetings/2026-09-08 Test.md (with the "No transcript" line) and a
# link in Daily/2026-09-08.md. Delete both.

# Then for real: record a call, stop it, wait for the transcript.
launchctl kickstart -k gui/$(id -u)/app.recordcue.hooks

Variations

Logseq instead of Obsidian

Same script, three variables. Logseq keeps pages in pages/ and the day's page in journals/ with underscores in the name, and the - [[link]] line is already a Logseq block:

VAULT="$HOME/Logseq/graph"
NOTES="$VAULT/pages"
DAILY_NOTE="$VAULT/journals/${RC_DATE//-/_}.md"   # Logseq names journals 2026_09_08.md

All of this week's meetings, with Dataview

The front matter is there to be queried. With the Dataview plugin, this block anywhere in the vault lists the week's calls with their length, newest first:

```dataview
TABLE service, minutes
FROM #meeting
WHERE date >= date(sow) AND date <= date(eow)
SORT date DESC
```

Notion instead of a vault

The same action can create a page in a Notion database with a single curl to api.notion.com/v1/pages: an internal integration token kept in ~/.config/recordcue/notion-token and read with $(cat …), the database id as the parent, the front matter fields as properties, and the transcript split into paragraph blocks of under 2,000 characters, which is the API's limit per block. It works, but it is a different recipe in one respect: the transcript leaves the Mac, to Notion, the moment that curl runs, whether or not you summarise. The Obsidian version leaves nothing.

Not recommended: the vault as the RecordCue save folder

It is tempting to point RecordCue's save folder at the vault so the .m4a sits next to the note. Do not. An hour of audio is tens of megabytes, Obsidian Sync and iCloud would carry every one of them to every device, and Obsidian indexes the folder. Keep recordings in ~/Movies/RecordCue and let the media path in the front matter do the linking; the file is one click away on the Mac, and the vault stays a few kilobytes per meeting.

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/obsidian/ 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

Can Obsidian record and transcribe a meeting by itself?
Not usefully. Obsidian’s core Audio recorder captures the microphone only, so the other side of a call is missing, and it produces no text. RecordCue records both sides into one file, transcribes it on the Mac with Apple’s speech recognition, and the script on this page writes the result into the vault as an ordinary note.
Does the meeting transcript leave my Mac?
Not unless you ask it to. With SUMMARISE left at 0 the script reads two local files and writes two local files; there is no network request anywhere in the chain. Setting SUMMARISE=1 sends the transcript to Claude Code for a five-bullet summary, to Anthropic, under your own account, and that one line is the only place it happens.
Will the notes sync to my phone with Obsidian Sync or iCloud?
Yes. The note is plain Markdown, so it syncs like any other. The media field is a path on the Mac, which is a link that works on the Mac and not on the phone. That is deliberate: keep the recordings in ~/Movies/RecordCue and out of the vault so sync stays small.
Does this respect my daily-note template?
The script appends one line to the day’s note and creates a bare file if there is none yet. Obsidian will not apply your daily-note template to a file that already exists, so if the template matters, open the day’s note before your first call, or move the link-appending step out of the script.