rapture-watch
Act on Rapture's triaged Markdown notes. Read each new .md note's frontmatter, take the action for its type, optionally send a summary via Telegram.
SKILL.mdexamples/hermes/SKILL.md
GitHubRapture watcher
Runs from a Hermes cron job. Acts on any new Markdown notes Rapture for Mac has triaged into your notes folder since the last run.
Rapture classifies every capture itself the moment it lands: each one becomes a .md note with YAML frontmatter (captured, type, optional source and raw_media), auto-titled YYYY-MM-DD <Title>.md, filed under Notes/ (voice notes), Links/ (YouTube/article links), and — when the user's AI tier is on — Tasks/, Ideas/, Journal/. This skill does no classifying. It reads the frontmatter and acts.
Resolving the notes folder
At every invocation, resolve $NOTES_FOLDER in this order:
- If
~/Library/Application Support/Rapture for Mac/output-folder.pathexists and is readable, use its contents (one absolute path, possibly with trailing newline — trim whitespace). - Otherwise default to
~/Documents/Rapture Notes/.
This lets users change their notes folder in Rapture's Settings → General without re-creating the cron job or editing the skill.
When to use
When a Hermes cron job invokes this skill against the resolved $NOTES_FOLDER.
Procedure
- List
*.mdin the top level of each triaged subfolder:Notes/,Links/,Tasks/,Ideas/,Journal/. Don't recurse intoLinks/Media/— those are fetched transcript/article artifacts, not notes. - Skip any
*.tmpfiles (Rapture's in-flight atomic writes) and skip any note whose folder-relative path already appears in$NOTES_FOLDER/processed-log.md(grep it; that log is the watermark — notes stay where the app filed them). - For each remaining note, ordered by mtime ascending:
- Read it. The frontmatter's
type(voice-note,youtube-link,article-link,task,idea,journal) is the app's classification; use it directly.capturedis the UTC dictation instant. If the body has a## Rawsection, that's the verbatim dictation; quote from it when exact wording matters. - Take the action for its type (below).
- Append the note's relative path to
$NOTES_FOLDER/processed-log.mdwith a shell>>append.
- Read it. The frontmatter's
- Send a single summary message via the cron job's configured delivery channel:
📥 Processed N notes: <task: 3, journal: 1, ...>. Suppress when N = 0. (Hermes' delivery default islocal/ CLI; the cron job must pass--deliver telegramor similar for the summary to reach a messaging channel.)
Actions by type
- task: append to
$NOTES_FOLDER/inbox/todos.mdas a Markdown checkbox:- [ ] <text> (captured <iso-ts>). If the note mentions a date, prepend it. - idea: append a one-line pointer to
$NOTES_FOLDER/inbox/ideas.md:- <filename> — <one-sentence gist> (captured <iso-ts>). - journal: nothing per-note. Count it in the summary.
- youtube-link / article-link: if the note body has a
Media:link, Rapture's link enrichment already fetched the transcript/readable text intoLinks/Media/— summarize from that artifact if the summary channel wants substance; don't re-fetch. If there's noMedia:link, include the note title and URL in the summary so the user can follow up. - voice-note: if clearly actionable ("email Sarah about the deck"), treat as a task. Otherwise just log it; it's already filed and searchable.
Pitfalls
- Don't process
*.tmpfiles. Skip them. - Don't process root
*.txtfiles. In the default mode, Rapture converts any.txtat the folder root to a Markdown note within seconds and deletes it — racing that conversion loses. - Don't edit, move, rename, or delete the triaged
.mdnotes. The log entry, not a move, marks a note handled. - If
$NOTES_FOLDERdoesn't exist, exit cleanly with a message in the summary. - If the sidecar exists but contains an unreadable / nonexistent path, fall back to the default.
- Rapture for Mac already sends the
✅ Savedconfirmation in the iMessage thread when each capture lands, so this skill's delivery channel is for the processing summary, not the per-capture acknowledgement.
Raw mode
If the user has flipped Rapture's Settings → Triage → Filing to "Raw text files, no triage", the triaged subfolders don't fill: captures are <ISO-timestamp>.txt files at the folder root, never converted. Only in that mode, fall back to the old contract: list root *.txt, classify each yourself, take the equivalent action, and move the source to $NOTES_FOLDER/processed/YYYY-MM/<original-filename>.
Verification
After install + cron setup, dictate a Siri test note to yourself. Within the next cron tick (5 minutes by default), you should see a Telegram message summarizing one processed note, and the corresponding .md note (e.g. Notes/2026-07-13 <Title>.md) should be listed in processed-log.md.