当用户要对真实日历数据做查询或增删改时触发:看今天/本周安排、查冲突、建会议、改时间、删日程。典型说法"我明天几点开会"、"帮我约 xx"、"schedule a meeting"。**不用于**:对话里口头提到时间或倒计时(→直接回答)、周期性后台任务如"每天 9 点跑脚本"(→schedule-ops-skill)。
69
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
| 工具 | 职责 | 只读 |
|---|---|---|
CalendarQuery | 查询日历源 / 日程项目(mode: list-sources / list-items / get-event 等) | 是 |
CalendarMutate | 创建 / 更新 / 删除日程(kind: event 或 reminder) | 否 |
加载:全部为 deferred 工具,调用前须先
ToolSearch(names: "CalendarQuery,CalendarMutate")激活 schema。
Bash 执行 date '+%Y-%m-%dT%H:%M:%S%z' 获取当前时刻和时区。
为什么?因为"今天""下周二"这类相对时间必须锚定到具体时区才有意义——"上午 10 点"对北京和纽约的人是完全不同的时刻,ISO 8601 不带时区偏移会导致静默错位。CalendarQuery(mode: list-items),传入 rangeStart / rangeEnd(ISO 8601 必须带时区偏移,如 +08:00)。
如果用户只说"看看今天的安排",范围就是今天 00:00:00 到 23:59:59;如果说"这周有什么",范围扩展到整周。宁可查宽一点也不要漏掉边界上的事件。sourceIds 过滤特定日历,避免混入不相关的日程(如节假日日历)。为什么创建前必须检测冲突?因为双重预订浪费所有人的时间,还让用户显得不专业。
CalendarQuery(mode: list-sources)拿到可用日历源列表。
为什么?创建时 sourceId 是必填字段,凭空猜测 ID 必定失败。如果对话上文已经获取过 sourceId 且确信仍有效,可以复用。CalendarQuery(mode: list-items)查目标时间段是否已有安排。CalendarMutate(action: create)创建。
kind 二选一:event(有明确开始/结束时间的日程)或 reminder(提醒事项,更适合待办性质的内容)。CalendarQuery(mode: list-items)搜索,确认 itemId。
为什么?用户说"把下午的会改到 3 点",你需要先精确定位到具体哪条日程,模糊匹配可能改错条目。CalendarMutate(action: update),传 itemId + 要改的字段。只传需要改的字段,不要把所有字段重新提交。itemId。CalendarMutate(action: delete)。
删除不可逆,必须让用户明确同意。如果有多条相似日程,列出候选让用户选择。用 CalendarMutate(action: toggle-completed),传 itemId + completed 布尔值。主要适用于 reminder 类型的日程项。
所有时间必须使用 ISO 8601 且带时区偏移(如 +08:00、-05:00)。永远先用 Bash 执行 date 确定当前时间和时区,不要假设 UTC 或任何默认值。一个不带偏移的 2026-03-20T10:00:00 会被不同系统解读为不同时刻,导致日程出现在错误的时间。
"下周二""后天下午""这个月底"——先用 Bash 执行 date 获取当前时间,再自己计算出绝对时间。注意"下周二"在周一和周三说出来指的是不同的日期;跨月、跨年边界也容易算错。遇到含糊表达时主动向用户确认。
CalendarMutate 的 create 动作要求 sourceId。不先调 list-sources 就创建 = 必然报错。用户可能有多个日历源(工作、个人、共享),要选对目标日历。
全天事件需要设置 allDay: true。起止时间仍需提供,用当天 00:00:00 到 23:59:59(带时区偏移)。
用户说"最近有什么安排"时不要只查当天。根据语境适当扩大范围(未来 3-7 天),然后按日分组展示,让用户一目了然。
用户说"删掉那个会议"但查询结果有多条匹配时,必须列出候选让用户选择,不要猜测。猜错删错的代价远高于多问一句。修改场景同理。
用户说"帮我约个会"但没说时间、地点、参会人——不要用默认值填充,主动追问缺失的关键字段。一个不完整的日程比没有日程更容易造成混乱。
| 工具 | 用途 |
|---|---|
CalendarQuery | 两种模式:list-sources 查日历源列表、list-items 按时间范围查日程项 |
CalendarMutate | 四种动作:create 创建、update 修改、delete 删除、toggle-completed 切换完成 |
CalendarMutate 创建时的 kind 字段:event(日程事件)或 reminder(提醒事项)。
a1ab5be
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.