macOS Calendar Assistant

👤 bryant24hao 📦 v1.0.0 ⭐ 4.5 ⬇️ 1.3K 下载
📄 办公效率 免费

📖 技能介绍


name: macos-calendar-assistant description: Manage macOS Calendar with OpenClaw in IM-first workflows (Telegram/Discord/Feishu/iMessage/Slack), including screenshot-to-schedule extraction, idempotent create/update, move/extend/reschedule, reminders, conflict checks, daily review sync, and duplicate cleanup. Use when users ask to add/edit/move/postpone events, parse schedule screenshots/chat messages, adjust weekly plans into daily execution, or keep calendar and review notes in sync.


macos-calendar-assistant

Use bundled scripts for reliable Calendar.app operations.

Workflow

  1. Extract title, start/end, timezone, calendar, location, notes, alarm.
  2. Check conflicts before writing:
  3. scripts/list_events.swift <start_iso> <end_iso>
  4. Prefer idempotent writes:
  5. scripts/upsert_event.py (create/update/skip)
  6. Apply alarm if requested:
  7. scripts/set_alarm.py --uid <event_uid> --alarm-minutes <n>
  8. For hygiene, run duplicate scan:
  9. scripts/calendar_clean.py --start <iso> --end <iso>

Calendar routing defaults

  • Workout / Run / Training → Training
  • Work / Meeting / Client → Work
  • Product / Development / Building → Product
  • Personal / Social / Travel → Life
  • If unspecified: prefer writable iCloud/CalDAV calendars over local calendars.

Note: Calendar names vary by user setup. Map the intent to the closest local calendar name before writing.

7w4.net提供免费和付费技能下载。

Commands

List calendars

swift scripts/list_calendars.swift

List events in range

swift scripts/list_events.swift "2026-03-06T00:00:00+08:00" "2026-03-06T23:59:59+08:00"

Output includes uid for follow-up alarm/edit operations.

python3 scripts/upsert_event.py \
  --title "Team sync" \
  --start "2026-03-06T19:00:00+08:00" \
  --end "2026-03-06T20:00:00+08:00" \
  --calendar "Work" \
  --notes "Agenda" \
  --location "Online" \
  --alarm-minutes 15

Result is one of: CREATED, UPDATED, SKIPPED. Use --dry-run for preview.

Legacy direct add (always creates)

python3 scripts/add_event.py --title "..." --start "..." --end "..."

Set alarm by UID

python3 scripts/set_alarm.py --uid "EVENT_UID" --alarm-minutes 15

Move event (legacy utility)

swift scripts/move_event.swift "Team sync" "Work" "2026-03-07T10:00:00+08:00" 60 --search-days 7
# optional precise match:
# --original-start "2026-03-06T10:00:00+08:00"

Prefer upsert_event.py for most rescheduling flows; use move_event.swift for direct title-based move when needed.

Duplicate scan / cleanup

python3 scripts/calendar_clean.py --start "2026-03-01T00:00:00+08:00" --end "2026-03-08T23:59:59+08:00"
python3 scripts/calendar_clean.py --start "..." --end "..." --apply --confirm yes --snapshot-out ./delete-plan.json

Upcoming events (within 2 hours)

python3 scripts/within_2h.py

Environment + tests

python3 scripts/env_check.py
python3 scripts/regression_test.py
scripts/smoke_test.sh

Daily auto-check notifier

scripts/install.sh     # run env check + install cron from config.json
scripts/uninstall.sh   # remove cron

Extraction & scheduling heuristics (from real usage)

  1. Speaker ownership from chat screenshots
  2. Treat the user's message bubble as primary intent.
  3. Treat counterpart bubbles as constraints (availability/travel window), not direct auto-create tasks.

  4. Conflict policy

  5. If user explicitly says "override" (for example, "replace this slot"), allow replacing an existing slot and reschedule the displaced event.
  6. If not explicit, warn and ask for a choice before overwriting.

  7. Time-window intent parsing

  8. Phrases like "4–6 PM for the other person" should first be interpreted as an availability window.
  9. Convert to a formal event only after user confirmation.

  10. Reschedule priority

  11. Prefer moving flexible events (workouts/optional blocks) before strategic P0 work blocks.
  12. Do not auto-move P0 items unless user explicitly requests.

  13. Confirmation prompt template

  14. Use: "I identified X as your intent and Y as counterpart constraints. I will apply Z. Confirm?"
  15. Keep it short; avoid over-confirming when intent is explicit.

Constraints

  • macOS only (EventKit + Calendar permission required)
  • Default timezone comes from config.json.timezone (fallback Asia/Shanghai) when user does not specify
  • Use --apply only after reviewing dry-run output

🤖 AI 评测

这个 Skill 质量不错,做得很实用。它能智能地在日历里创建或更新事件,不会重复添加让人头疼的重复条目,还有专门的工具来清理重复的日程。文档写得很清楚,有截图有例子,用起来应该不难。主要小问题是配置文件需要自己复制一份改名才能用,另外如果遇到日历权限问题提示可能不够友好。总体来说是个靠谱的日历管理助手,适合需要频繁通过聊天工具管理日程的用户。

📊 多维度评分

适应性4.2
规范性4.2
有效性4.8
可靠性4.2
可信度4.9

📁 包含文件 (20 个)

📄 README.md 10.5 KB
📄 SKILL.md 4.4 KB
📄 _meta.json 143 B
📄 config.example.json 317 B
📄 scripts/add_event.py 3.7 KB
📄 scripts/calendar_clean.py 6.6 KB
📄 scripts/calendar_clean_notify.sh 2.8 KB
📄 scripts/config_utils.py 1.4 KB
📄 scripts/env_check.py 1.7 KB
📄 scripts/install.sh 1.2 KB
📄 scripts/list_calendars.py 493 B
📄 scripts/list_calendars.swift 2.1 KB
📄 scripts/list_events.swift 2.3 KB
📄 scripts/move_event.swift 3.3 KB
📄 scripts/regression_test.py 4.9 KB
📄 scripts/set_alarm.py 1.4 KB
📄 scripts/smoke_test.sh 2.3 KB
📄 scripts/uninstall.sh 260 B
📄 scripts/upsert_event.py 5.5 KB
📄 scripts/within_2h.py 1.2 KB