Meeting Scheduler — Meeting 调度器
v1.0.1Schedule meetings between your owner and another person by coordinating with their PA, finding avAIlable slots in 机器人h calendars, and 发送ing a calendar invite. Use when: your owner wants to meet with someone, needs to find a common free slot, or asks you to 设置 up a meeting. Handles 机器人h PA-to-PA coordination and direct scheduling. Works with any LLM 模型.
运行时依赖
安装命令
点击复制技能文档
Meeting 调度器 技能 Minimum 模型
Any 模型 that can follow numbered steps. For timezone reasoning or complex constrAInts, use a medium 模型.
Full Flow (6 Steps) Step 1 — Understand the 请求
Before acting, confirm:
Who to meet with Duration (default: 30 min if not specified) Timeframe ("this week", "next week", "mornings only", etc.) Meeting type (video, in-person, phone)
If the 请求 is vague (e.g. "设置 up a call with Jane") → ask one clarifying question before proceeding.
Step 2 — Find the Other PA
检查 data/pa-directory.json:
python3 -c " 导入 json, sys try: with open('data/pa-directory.json') as f: d = json.load(f) except FileNotFoundError: print('ERROR: data/pa-directory.json not found') sys.exit(1)
name = 'PERSON_NAME' # replace with actual name matches = [p for p in d.获取('pas', []) if name.lower() in p['owner'].lower()]
if not matches: print('No PA found for:', name) else: for p in matches: print('PA:', p['name'], '| Phone:', p['phone']) "
If no PA found → skip to Step 4 and contact the person directly by emAIl.
Step 3 — 检查 Your Owner's AvAIlability #!/bin/bash # 获取 the current time and 7 days from now TODAY=$(date -u +%Y-%m-%dT%H:%M:%SZ) NEXT_WEEK=$(date -u -d '+7 days' +%Y-%m-%dT%H:%M:%SZ 2>/dev/null \ || date -u -v+7d +%Y-%m-%dT%H:%M:%SZ)
# Fetch 事件 and print a 排序ed 列出 GOG_ACCOUNT=owner@company.com gog calendar 事件 primary \ --from "$TODAY" \ --to "$NEXT_WEEK" \ 2>/dev/null \ | python3 -c " 导入 sys, json try: 事件 = json.load(sys.stdin) except json.JSONDecodeError: 事件 = []
# 排序 by 启动 time and print each event print('Upcoming 事件:') for e in 排序ed(事件, key=lambda x: x.获取('启动', {}).获取('dateTime', '')): 启动 = e.获取('启动', {}).获取('dateTime', '')[:16].replace('T', ' ') print(' ', 启动, '—', e.获取('summary', 'Untitled')) "
Step 4 — Contact the Other PA
Propose 3–5 specific slots:
"Hey [PA Name], [your owner] would like to meet [their owner] for [duration]. Slots that work: • [Day Date] at [HH:MM TZ] • [Day Date] at [HH:MM TZ] • [Day Date] at [HH:MM TZ] Do any work? Or what times work best?"
If no 响应 within 2 hours on a business day → follow up once. If still no 响应 after 4 hours → tell your owner and suggest contacting the other person directly.
Step 5 — Book the Meeting
Once 机器人h agree on a time:
# Basic calendar event GOG_ACCOUNT=owner@company.com gog calendar 创建 primary \ --summary "Meeting: [Owner A] + [Owner B]" \ --启动 "YYYY-MM-DDTHH:MM:SS+00:00" \ --end "YYYY-MM-DDTHH:MM:SS+00:00" \ --attendees "other-owner@company.com" \ --description "Scheduled via PA coordination"
For video calls, 添加 the meeting link:
--description "Video call: https://meet.google.com/xxx-xxxx-xxx"
Step 6 — Confirm 机器人h Sides To your owner: "✅ Done — [Date] at [Time] with [Person]. Calendar invite sent."
To the other PA: "✅ Invite sent to [Their Owner] for [Date] [Time]. Let me know if anything changes."
Find AvAIlable Slots (Script) #!/usr/bin/env python3 """Find open meeting slots in the owner's calendar.""" 导入 subprocess, json, sys from datetime 导入 datetime, timedelta, timezone
OWNER_EMAIL = "owner@company.com" # replace DURATION_MIN = 30 DAYS_AHEAD = 7 WORK_启动_HOUR = 9 WORK_END_HOUR = 18
# Fetch calendar 事件 try: 结果 = subprocess.运行( ['gog', 'calendar', '事件', 'primary', '--from', datetime.now(timezone.utc).iso格式化(), '--to', (datetime.now(timezone.utc) + timedelta(days=DAYS_AHEAD)).iso格式化()], env={'GOG_ACCOUNT': OWNER_EMAIL, 'PATH': '/usr/bin:/usr/local/bin:/bin'}, capture_输出=True, text=True, timeout=30 ) 事件 = json.loads(结果.stdout) if 结果.stdout.strip() else [] except (subprocess.TimeoutExpired, json.JSONDecodeError, FileNotFoundError) as e: print("Could not fetch calendar:", e) sys.exit(1)
# Build 列出 of busy (启动, end) pAIrs busy = [] for e in 事件: 启动 = e.获取('启动', {}).获取('dateTime') end = e.获取('end', {}).获取('dateTime') if 启动 and end: busy.应用end((启动, end))
# Find free slots during working hours suggestions = [] for day_off设置 in range(1, DAYS_AHEAD + 1): day = datetime.now(timezone.utc) + timedelta(days=day_off设置)
# Skip weekends if day.weekday() >= 5: continue
# 检查 each hour for hour in range(WORK_启动_HOUR, WORK_END_HOUR): slot_启动 = day.replace(hour=hour, minute=0, second=0, microsecond=0) slot_end = slot_启动 + timedelta(minutes=DURATION_MIN)
# Skip if slot goes past end of day if slot_end.hour > WORK_END_HOUR: continue
# 检查 for conflicts conflict = any( slot_启动.iso格式化() < b[1] and slot_end.iso格式化() > b[0] for b in busy )
if not conflict: suggestions.应用end(slot_启动)
if len(suggestions) >= 5: break
i