sonichi/sutando/skills/meeting-scheduler/SKILL.md
meeting-scheduler
Schedule a small meeting end-to-end: resolve attendee emails, check the owner's calendar for the slot, dedup-check, then create + email the Google Calendar invite. The mechanical core only — cross-person availability negotiation stays interactive.
- Source repository stars
- 359
- Declared platforms
- 0
- Static risk flags
- 2
- Last source update
- 2026-07-28
- Source checked
- 2026-07-28
Decision brief
What it does—and where it fits
Encapsulates the 10 manual steps of "set up a quick meeting" into one command: resolve attendee emails → check the owner's calendar for the slot → dedup-check → create the event + send invites → report the link.
Not for
- Natural-language dates are intentionally minimal — ISO 8601 and
- Free/busy is checked on the owner's calendar only — attendee availability is
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/sonichi/sutando --skill "skills/meeting-scheduler"Inspect the Agent Skill "meeting-scheduler" from https://github.com/sonichi/sutando/blob/6a8f0fccd32e5aa620a3572c8885544f144bb6fe/skills/meeting-scheduler/SKILL.md at commit 6a8f0fccd32e5aa620a3572c8885544f144bb6fe. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Scope (read first)
This skill handles the mechanical core only. It does NOT negotiate availability across people — proposing times, collecting "does 3pm work?", juggling everyone's free/busy stays an interactive conversation you have with the owner (and, if asked, the attendees). Once a concrete s…
This skill handles the mechanical core only. It does NOT negotiate availability across people — proposing times, collecting "does 3pm work?", juggling everyone's free/busy stays an interactive conversation you have with…Authority note. Creating and sending a calendar invite is an owner action. Run the create+send step only when the owner has invoked this skill for a concrete meeting. Never auto-send speculatively — default to a dry-run… - 02
Inputs
Emails must come from a Gmail lookup — the identity map (workspace/.claude-sutando/projects//memory/referenceidentitymap.md) resolves a name to a person (and their Discord/GitHub ids) but does not store email addresses. Use the map to disambiguate who is meant; get the address f…
Emails must come from a Gmail lookup — the identity map (workspace/.claude-sutando/projects//memory/referenceidentitymap.md) resolves a name to a person (and their Discord/GitHub ids) but does not store email addresses.… - 03
Run order
Everything below is done by scripts/schedulemeeting.py, which shells out to the gws (Google Workspace) CLI. You can run it directly, or perform the steps by hand with the gws commands shown.
Everything below is done by scripts/schedulemeeting.py, which shells out to the gws (Google Workspace) CLI. You can run it directly, or perform the steps by hand with the gws commands shown.For each name, search recent mail and read From/To headers to extract the address:bash gws gmail users messages list --params '{"userId":"me","q":"\"Alice\" newerthan:365d","maxResults":10}' - 04
1. Resolve attendee emails (names → emails via Gmail)
For each name, search recent mail and read From/To headers to extract the address:
For each name, search recent mail and read From/To headers to extract the address:bash gws gmail users messages list --params '{"userId":"me","q":"\"Alice\" newerthan:365d","maxResults":10}' - 05
then, per hit id:
gws gmail users messages get --params '{"userId":"me","id":"","format":"metadata","metadataHeaders":["From","To","Cc"]}' bash gws calendar events list --params '{"calendarId":"primary","timeMin":"2026-07-25T00:00:00-07:00","timeMax":"2026-07-26T00:00:00-07:00","singleEvents":tru…
gws gmail users messages get --params '{"userId":"me","id":"","format":"metadata","metadataHeaders":["From","To","Cc"]}' bash gws calendar events list --params '{"calendarId":"primary","timeMin":"2026-07-25T00:00:00-07:…
Permission review
Static risk signals and limitations
Runs scripts
The documentation asks the agent to run terminal commands or scripts.
python3 skills/meeting-scheduler/scripts/schedule_meeting.py \Runs scripts
The documentation asks the agent to run terminal commands or scripts.
python3 skills/meeting-scheduler/scripts/schedule_meeting.py \Network access
The documentation includes network, browsing, or remote request actions.
-attendees "a@x.com,b@y.com" --location "https://meet.google.com/xxx" --sendEvidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 74/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 359 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- sonichi/sutando
- Skill path
- skills/meeting-scheduler/SKILL.md
- Commit
- 6a8f0fccd32e5aa620a3572c8885544f144bb6fe
- License
- MIT
- Collected
- 2026-07-28
- Default branch
- main
View the original SKILL.md
Meeting Scheduler
Encapsulates the ~10 manual steps of "set up a quick meeting" into one command: resolve attendee emails → check the owner's calendar for the slot → dedup-check → create the event + send invites → report the link.
Usage: /meeting-scheduler [what to schedule]
ARGUMENTS: $ARGUMENTS
Scope (read first)
This skill handles the mechanical core only. It does NOT negotiate availability across people — proposing times, collecting "does 3pm work?", juggling everyone's free/busy stays an interactive conversation you have with the owner (and, if asked, the attendees). Once a concrete slot is chosen, this skill does the rote work.
Authority note. Creating and sending a calendar invite is an owner action.
Run the create+send step only when the owner has invoked this skill for a concrete
meeting. Never auto-send speculatively — default to a dry-run and show the plan
first. The helper enforces this: it defaults to --dry-run and only creates with
an explicit --send.
Inputs
| Input | Required | Notes |
|---|---|---|
| title | yes | Event summary, e.g. "Sutando sync" |
| attendees | yes | Either explicit emails (--attendees) or names to resolve (--resolve) |
| when | yes | Start time — ISO 8601 (2026-07-25T15:00) or today/tomorrow HH[:MM][am/pm] |
| duration | no | Minutes; default 30 |
| location | no | Room, address, or a video link |
| description | no | Agenda / notes |
Emails must come from a Gmail lookup — the identity map
(workspace/.claude-sutando/projects/<slug>/memory/reference_identity_map.md)
resolves a name to a person (and their Discord/GitHub ids) but does not
store email addresses. Use the map to disambiguate who is meant; get the address
from Gmail.
Run order
Everything below is done by scripts/schedule_meeting.py, which shells out to the
gws (Google Workspace) CLI. You can run it directly, or perform the steps by
hand with the gws commands shown.
1. Resolve attendee emails (names → emails via Gmail)
For each name, search recent mail and read From/To headers to extract the address:
gws gmail users messages list --params '{"userId":"me","q":"\"Alice\" newer_than:365d","maxResults":10}'
# then, per hit id:
gws gmail users messages get --params '{"userId":"me","id":"<id>","format":"metadata","metadataHeaders":["From","To","Cc"]}'
Strip any line containing keyring from gws output before parsing JSON. For the
ag2.ai account, set GOOGLE_WORKSPACE_CLI_CONFIG_DIR=$HOME/.config/gws-ag2
(the helper's --account ag2 does this). If a name is ambiguous, confirm with the
owner rather than guessing.
2. Check the OWNER's calendar for the slot
Read the owner's events across that day and flag anything whose busy time overlaps
[start, end) (back-to-back is not a conflict; transparency:transparent /
all-day events don't block):
gws calendar events list --params '{"calendarId":"primary","timeMin":"2026-07-25T00:00:00-07:00","timeMax":"2026-07-26T00:00:00-07:00","singleEvents":true,"orderBy":"startTime"}'
3. Dedup-check
From the same day's events, refuse if one already has the same title (case/space-insensitive, ignoring cancelled ones) — prevents a double-booked duplicate invite.
4. Create the event + send invites
Only on explicit owner action (--send). sendUpdates=all makes Google email the
invitations:
gws calendar events insert \
--params '{"calendarId":"primary","sendUpdates":"all"}' \
--json '{"summary":"Sutando sync","location":"Meet link","description":"...","start":{"dateTime":"2026-07-25T15:00:00","timeZone":"America/Los_Angeles"},"end":{"dateTime":"2026-07-25T15:30:00","timeZone":"America/Los_Angeles"},"attendees":[{"email":"a@x.com"},{"email":"b@y.com"}]}'
5. Report the event link
Print the htmlLink from the insert response back to the owner.
The helper script
# Dry-run (default) — resolve, check, dedup, report. NO changes:
python3 skills/meeting-scheduler/scripts/schedule_meeting.py \
--title "Sutando sync" --when 2026-07-25T15:00 --duration-min 30 \
--resolve "Alice, Bob"
# Create + email invites (owner action):
python3 skills/meeting-scheduler/scripts/schedule_meeting.py \
--title "Sutando sync" --when 2026-07-25T15:00 --duration-min 30 \
--attendees "a@x.com,b@y.com" --location "https://meet.google.com/xxx" --send
# Override a detected conflict/duplicate (owner's explicit call):
# ... --send --force
Flags: --title --when --duration-min --attendees --resolve --location --description --calendar (default primary) --timezone --account {default,ag2} --gmail-lookback --send/--dry-run --force --self-check --verbose.
Fail-safe behavior:
- Defaults to
--dry-run— nothing is created or emailed without--send. - On a conflict or a same-title duplicate, it refuses to create even with
--send, unless--forceis also given (the owner's explicit override). - If no attendee email is present (none given, none resolved), it stops.
Offline self-check
The pure logic (when-parsing, conflict overlap, dedup, email-pick) is unit-tested without the network:
python3 skills/meeting-scheduler/scripts/schedule_meeting.py --self-check
python3 tests/meeting-scheduler.test.py
Notes / limitations
- Natural-language dates are intentionally minimal — ISO 8601 and
today/tomorrow HH[:MM][am/pm]only. For "next Tuesday afternoon" etc., resolve it to a concrete ISO time (the owner picks the slot) before calling the helper. - Free/busy is checked on the owner's calendar only — attendee availability is the interactive part this skill deliberately leaves out.
- Timezone defaults to the host's IANA zone (falls back to
America/Los_Angeles); override with--timezone.
Alternatives
Compare before choosing
coreyhaines31/marketingskills
ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
coreyhaines31/marketingskills
churn-prevention
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o
event4u-app/agent-config
design-review
Use when the user says "review the design", "check the UI", or wants a comprehensive UI/UX review. Uses a 7-phase methodology covering interaction, responsiveness, accessibility, and more.
K-Dense-AI/scientific-agent-skills
dask
Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.