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.

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 "..."

7w4.net小蔥技能站收錄全網優質技能,值得收藏。

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