apple-smart-schedule · v0.1.0 · 2026-08-04 · sha256 8bd2ba35771b11eb
apple-smart-schedule v0.1.0A
Immutable. This exact content never changes and is served at /api/v1/blob/8bd2ba35771b11eb.
--- name: apple-smart-schedule homepage: https://github.com/cat-xierluo/legal-skills author: 杨卫薪律师(微信ywxlaw) version: "0.1.0" license: MIT description: 把一句自然语言(机票/高铁/开庭/会议/截止日期/聚会/看病等)或一张票据截图,自动变成苹果「日历」事件 + 一串按事件类型智能提前的「提醒事项」。在 macOS 上运行、经 iCloud 同步到 iPhone/iPad。当用户说「帮我加个日程/提醒」「机票 MU5137 8:30 起飞提醒我」「下周三下午开庭提前提醒」「G1234 高铁」「上诉期 15 号截止」「提前 2 小时提醒我」「把这个行程加到日历」等任何要把时间安排写进苹果日历或提醒事项的场景,都必须用本 skill。仅 macOS。 --- # apple-smart-schedule · 苹果智能日程提醒 ## ⚠️ 平台限制(先读) 本 skill **仅在 macOS 上运行**:它通过 `osascript`/`remindctl` 调用 Mac 自带的「日历」和「提醒事项」App 来创建日程。 - ✅ 创建结果经 **iCloud 自动同步**到你登录同一 Apple ID 的 iPhone / iPad。 - ❌ 不能直接在 Windows / Android / Linux 上用,也不能在 iPhone 上直接运行这些脚本。 - **授权(重要)**:首次运行脚本时,macOS 会弹出「xxx 想要控制「日历」/「提醒事项」」对话框,**点「好」即可**(只此一次)。**每换一个终端 App 或新环境首次用,都会再弹一次**——因为授权是按"调用的终端 App"分别记录的(Terminal 授权了不代表 iTerm 也授权了);点过就好,无需去设置里找。只有当弹窗没出现、或曾经点过"不允许"时,才去「系统设置 › 隐私与安全性 › 自动化」把对应终端的 Calendar / Reminders 开关手动打开。 ## 它做什么 用户用大白话说一件事(或发张截图),本 skill: 1. 解析出 **事件标题、开始时间、结束时间(可选)、地点、事件类型**; 2. 按事件类型套用 **默认提前量**(飞机/高铁/开庭/会议/截止/社交 各不同); 3. 在苹果日历建 **1 个事件**,在提醒事项建 **一串提前提醒**; 4. 回执告诉用户建了什么。 通用场景(同一套逻辑,不限于出行): | 类型 | 示例输入 | 智能默认提前量 | |---|---|---| | ✈️ 航班 | "东航 MU5137 7/20 8:30 浦东起飞" | 前1天9点 + 前3h + 前1h | | 🚄 高铁 | "G1234 北京南→上海虹桥 8/1 14:00" | 前1h + 前30min | | ⚖️ 开庭 | "下周三 14:00 开庭" | 前1天9点 + 前3h + 前1h | | 💼 会议 | "明天上午 10 点开会" | 前1天9点 + 前1h | | ⏰ 期限 | "15 号上诉期截止" | 前3天 + 前1天 + 当天9点 | | 🍻 社交 | "周五晚和张总吃饭" | 前1天9点 + 前2h | | 🎯 其他 | "后天上午去体检" | 前1h | ## 核心流程(AI 执行步骤) ### 第 0 步:读配置(每次都要) 读 `$SKILL_DIR/config/config.json`,拿到:时区、默认日历名 `default_calendar`、默认提醒清单名 `default_reminder_list`、各类事件提前量 `lead_times`。 再读 `$SKILL_DIR/references/lead-times.md`,掌握**事件类型判断规则**和**提前量计算方法**。 ### 第 1 步:解析输入 - **文字输入**:直接从用户消息提取 时间(日期+时分)、事件、地点、航班号/车次 等。 - **截图输入**(机票确认页、12306、微信邀约等):用视觉能力读出上述字段。 - 时间按 `config.timezone`(默认 Asia/Shanghai)理解。含糊时(如"下周三"未指定时区、只说"下午"),按最常见理解并**在回执里点明你的理解**,让用户一眼能纠正。 - 没给结束时间 → 事件默认时长 60 分钟(会议/社交够用;航班/高铁若能推断时长更好)。 ### 第 2 步:判断事件类型 按 `references/lead-times.md` 的关键词表归类到 `flight / train / court / meeting / deadline / social / default` 之一。一条消息可能含多个事件(如出差=航班+到达后会议),分别处理。 ### 第 3 步:算出每条提醒的绝对时间 从 `config.lead_times[类型]` 取数组,按 `lead-times.md` 的格式规则把每条换算成**绝对时间**(ISO,Asia/Shanghai)。 **用户当次覆盖优先**:若用户明说"提前 X 小时""只提醒一次",则当次只用用户指定的,忽略默认。 ### 第 4 步:创建 调用脚本(路径用 `$SKILL_DIR/scripts/`): ``` # 建 1 个日历事件 $SKILL_DIR/scripts/create_event.sh "<标题>" "<default_calendar>" "<开始ISO>" ["<结束ISO>"] ["<地点>"] ["<备注>"] # 对每个提前量,建一条提醒 $SKILL_DIR/scripts/create_reminder.sh "<标题>" "<default_reminder_list>" "<提醒绝对ISO>" ``` - 日历事件标题示例:`✈️ MU5137 上海浦东→北京首都` - **航班/出行录关键字段**:参照 `references/lead-times.md` 的「航班详细字段录入模板」,把 航司/舱位/机型/飞行时长 整理进事件**备注**(create_event.sh 第6参数),航站楼进**地点**(第5参数)。**不录**乘客/机票号/订单号(没必要、有隐私顾虑)。 - 提醒标题加区分后缀,让用户在清单里一眼看清:`✈️ MU5137 值机打包(前1天)`、`🚄 G1234 该去车站了(前1h)`、`⚖️ 开庭准备(前3h)`。 - 脚本会自动降级:未装 `remindctl` 时用 `osascript`(提醒仍能创建,只是不能查/改/删)。 ### 第 5 步:回执 给用户一个简短清单,例如: ``` 已为你安排 ✈️ MU5137(2026-07-20 08:30,上海浦东 T2) 📅 日历事件已建 →「个人」日历 ⏰ 提醒事项已建 3 条: • 07-19 09:00 值机打包(前1天) • 07-20 05:30 该去机场了(前3h) • 07-20 07:30 开始登机(前1h) (经 iCloud 同步到你的 iPhone/iPad,稍等片刻可在手机上看到) ``` ## 首次使用配置(重要) 1. 若 `config/config.json` 还不存在,从模板复制一份: ``` cp config/config.example.json config/config.json ``` 2. 跑自检,拿到你机器上真实的日历名和提醒清单名: ``` bash $SKILL_DIR/scripts/setup_check.sh ``` 3. 把输出里的**日历名**填进 `config.json` 的 `default_calendar`,**清单名**填进 `default_reminder_list`。填错不会报错——脚本会兜底落到第一个日历/默认清单,但名字对才会落到你想要的地方。 > `config.json` 是你的本地配置(被 .gitignore 忽略、不提交);`config.example.json` 是入库的默认模板。 想调整各类事件的提前量,直接改 `config.json` 的 `lead_times`(格式见 `references/lead-times.md`)。 ## 安装更强后端(可选) 提醒事项默认用 `osascript`(只能创建)。装上 `remindctl` 后还能查/改/删: ``` brew install steipete/tap/remindctl ``` 装不装不影响创建功能,本 skill 会自动探测。 ## 脚本参考 | 脚本 | 作用 | |---|---| | `scripts/create_event.sh` | 建日历事件(osascript) | | `scripts/create_reminder.sh` | 建提醒(remindctl 优先,降级 osascript) | | `scripts/list_calendars.sh` | 列出所有日历名 | | `scripts/list_reminder_lists.sh` | 列出所有提醒清单 | | `scripts/setup_check.sh` | 首次自检:依赖、权限、日历/清单名 | ## 注意 - 这是改用户个人日历/提醒的操作。**创建**是安全的、可逆的(用户可在 App 里删);但如本 skill 未来扩展删除/批量操作,务必先和用户确认目标。 - 提醒数据是个人隐私,不要把日历/提醒内容发到网络或第三方服务。解析只在本地完成。 - 若用户其实想要的是飞书/钉钉/Outlook 等非苹果日历,本 skill 不适用——那些需要各自的工具。