Meeting
Usage
/meeting {title}— Create a meeting note with the given title and today's date./meeting {title} folder={subfolder}— Create in a specific subfolder underMeetings/./meeting(no args) — List today's Google Calendar events and let the user pick one. (Requiresgws+ Calendar — see SETUP.md and google-workspace-cli.)/meeting wrap <path>— Wrap up an existing meeting by running/mail-transcripts,/cache-notes,/fill-participants, and/followup-todosin sequence, with a single commit at the end./meeting wrap pending [<dates>]— Find meetings missing any wrap step and wrap them in sequence. Optional date filter (see Mode D).
File Naming
Format: {Title} - YYYY-MM-DD.md
Examples:
Engineering - Weekly check-in - 2026-02-18.mdJane x Alex Sync - 2026-02-23.mdAlert System Brainstorm and Requirement Gathering - 2026-02-06.md
Exception — Scrum dailies in Meetings/Engineering/Scrum/ use just YYYY-MM-DD.md.
Frontmatter
Every meeting note starts with YAML frontmatter:
---
Notes:
created: YYYY-MM-DDTHH:MM:SS±HH:MM
---
Notes:is left empty (populated later with Google Docs / Otter links).created:uses the current local timestamp in ISO 8601 with timezone offset.Participants:is intentionally omitted at creation time (filled later by/fill-participants).modified:is managed by Obsidian automatically — do NOT set it.
Mode A: Manual Creation
Input: /meeting {title} with optional folder={subfolder}
Workflow
- Parse arguments: Extract the title and optional folder.
- Determine folder: If
folder=is provided, useMeetings/{subfolder}/. Otherwise, ask the user which subfolder to use. List existing subfolders for convenience. - Generate filename:
{Title} - YYYY-MM-DD.mdusing today's date. - Check for duplicates: If a file with the same name already exists, warn the user and ask how to proceed.
- Create the file with frontmatter. If a matching template exists in
Templates/, ask the user if they want to apply it as the note body. - Confirm by printing the created file path.
Subfolder Shorthand
Accept common abbreviations when provided inline:
| Shorthand | Resolves to |
|---|---|
eng |
Engineering |
scrum |
Engineering/Scrum |
1on1, 1:1 |
One-on-ones |
syncs |
Tech Syncs |
qa |
QA |
hire, hiring |
Interviews |
onboard |
Onboarding |
inbox |
_inbox |
Case-insensitive matching. If no shorthand matches and the folder doesn't exist, ask before creating it.
Mode B: Google Calendar Selection
Requires: Google Workspace CLI (
gws) with Calendar access (read-only). See SETUP.md and google-workspace-cli.
Input: /meeting (no arguments)
Workflow
- Fetch today's events from Google Calendar by running
gwsin the terminal (e.g.gws calendar +agenda --today --format json). See google-workspace-cli. - Present a numbered list of today's meetings (title, time, attendees).
- User picks one (or types a number).
- Derive the title from the calendar event name.
- Infer the subfolder from attendees or event title:
- If all attendees are from one team, suggest that team's folder.
- If it's a 1:1 (2 attendees), suggest
One-on-ones/orTech Syncs/. - Otherwise, ask the user.
- Create the file following the same steps as Mode A (steps 3-6).
- Pre-fill Participants from calendar attendees. See people-resolver for name matching rules. Flag any unmatched attendees.
Mode C: Wrap Up (/meeting wrap)
Input: /meeting wrap <path> — path to an existing meeting note (e.g. Meetings/One-on-ones/Jane x Alex Sync - 2026-02-25.md)
If <path> is omitted, list today's meeting files under Meetings/ and let the user pick one.
Workflow
This is a sequenced workflow — sub-skills skip their individual commit steps.
/mail-transcripts— Drain the Gemini transcript inbox first soNotes:may be populated before caching. Runs vault-wide (not scoped to<path>)./cache-notes <path>— IfNotes:is still empty after mail-transcripts, prompt the user to paste external resource URLs. Then fetch and cache AI transcripts./fill-participants <path>— Resolve and fill theParticipants:frontmatter if missing. If already filled, skip silently./followup-todos <path>— Extract action items and propose plain bullet follow-ups (no Tasks checkboxes) from the now-cached content and manual notes.- Commit — See /commit. Stage all files modified across the sub-skills. Commit message:
update: /meeting wrap <path>.
Between each sub-skill, re-read the file (or re-check frontmatter via obsidian property:read) to pick up changes from the previous step.
Mode D: Wrap Pending (/meeting wrap pending)
Input: /meeting wrap pending [<dates>]
Finds all meetings under Meetings/ that haven't been fully wrapped and runs the wrap sequence (Mode C) on each.
Pending Detection & Selection
After inbox triage (steps 1–1.5 below), delegate to /note-status pending. That skill handles discovery, frontmatter checks, filtering, presentation, and user selection in one step.
Date Filtering
See date-filter for the full syntax and date parsing rules.
When <dates> is provided, pass it through to /note-status pending. Default (omitted): all pending meetings (/note-status pending).
Workflow
/mail-transcripts— Drain the Gemini transcript inbox so newly linked or auto-created notes haveNotes:populated./organize-meetings— TriageMeetings/_inbox/so auto-created stubs land in the right subfolder before the pending scan. Use--autoonly when the user confirms high-confidence moves are acceptable.- Run
/note-status pending [<dates>]— Discovers meeting files, filters to notes with any missing step, presents the status table, and prompts the user to select which meetings to wrap. Returns the selected file paths. - For each selected meeting, run the Mode C wrap sequence starting at step 2 (
/cache-notes→/fill-participants→/followup-todos). Skip repeating/mail-transcriptsper file. Pause between meetings for user input (URLs, todo confirmation, etc.). - Commit once at the end — stage all files modified across all wrapped meetings (including any inbox moves from step 2). Commit message:
update: /meeting wrap pending — N meetings.
Batch Behavior
- Process meetings oldest first (by date from filename).
- Between each meeting, print a separator with the current file and progress (e.g.
[2/5] Wrapping: Meetings/Engineering/...). - If a meeting fails mid-wrap (e.g. Google Docs API error), report the error, skip it, and continue with the next.
Offer to Commit
See /commit. Applies to Mode A and Mode B only — Modes C and D handle their own commits at the end of the sequence.
Important Notes
- Always use the Write tool to create new files — never shell commands.
- Use today's date from the system (do not hardcode).
- Use the user's local timezone offset in
created:(see USER.md if configured). - If the user provides a full date in the title (e.g., "Sync 2026-03-01"), use that date instead of today's.