Meeting
SkillDocs & knowledgeCreate or wrap meeting notes. Args: {title} [folder=X], wrap <path>, wrap pending [today|this week|dates]. No args = pick from Google Calendar.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Meeting skill
What this skill tells your AI
The instructions your AI receives, as published by benoror/obsidianos_work in .agents/skills/meeting/SKILL.md and read by ahel’s review.
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.
Signals
- GitHub stars
- 165
- Forks
- 13
- Last commit
- Jun 2026
Advanced
- Catalog kind
- skill
- Gateway key
meeting- Source
- github.com/benoror/obsidianos_work