Source profileQuality 74/100Review permissions

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.

Best for

    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

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    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.

    Source-detected install commandSource
    npx skills add https://github.com/sonichi/sutando --skill "skills/meeting-scheduler"
    Safe inspection promptEditorial

    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

    1. 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…
    2. 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.…
    3. 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}'
    4. 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}'
    5. 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

    medium · line 98

    The documentation asks the agent to run terminal commands or scripts.

    python3 skills/meeting-scheduler/scripts/schedule_meeting.py \

    Runs scripts

    medium · line 103

    The documentation asks the agent to run terminal commands or scripts.

    python3 skills/meeting-scheduler/scripts/schedule_meeting.py \

    Network access

    medium · line 105

    The documentation includes network, browsing, or remote request actions.

    -attendees "a@x.com,b@y.com" --location "https://meet.google.com/xxx" --send

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score74/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars359SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated 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

    InputRequiredNotes
    titleyesEvent summary, e.g. "Sutando sync"
    attendeesyesEither explicit emails (--attendees) or names to resolve (--resolve)
    whenyesStart time — ISO 8601 (2026-07-25T15:00) or today/tomorrow HH[:MM][am/pm]
    durationnoMinutes; default 30
    locationnoRoom, address, or a video link
    descriptionnoAgenda / 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 --force is 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

    Computed 10042,015

    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

    Computed 10042,015

    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

    Computed 997

    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.

    Computed 9831,966

    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.