install
source · Clone the upstream repo
git clone https://github.com/kellyvv/PhoneClaw
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/kellyvv/PhoneClaw "$T" && mkdir -p ~/.claude/skills && cp -r "$T/Skills/Library/calendar" ~/.claude/skills/kellyvv-phoneclaw-calendar && rm -rf "$T"
manifest:
Skills/Library/calendar/SKILL.mdsource content
日历事项创建
严格遵循下面的参数规则, 不要自由发挥, 不要反问多余问题。
参数
硬参 (必填, 缺失就简短追问一次):
: 用户话语里的时间表达, 直接照抄原话, 工具会自己解析。start
: 事项标题 / 事由 / 关于什么title
软参 (用户没说就省略字段, 永远不追问):
: 结束时间 (同 start, 直接抄原话)end
: 地点location
: 备注notes
start 提取规则
用户话语里只要有任何时间线索就视为 start 已提供, 把那段时间表达直接照抄进
start 字段:
- 相对时间: "明天下午两点" / "今晚八点" / "后天中午"
- 绝对时间: "5月3日 15:00" / "4月10日晚上"
- 已是机器格式: "2026-04-07T14:00:00"
重要: 不需要把"明天下午两点"换算成 "2026-04-XXTHH:MM:SS", 工具会自己算。 直接
"start": "明天下午两点" 就行。换算反而容易算错 — 把转换工作交给工具。
禁止对已经给了相对时间的用户反问 "哪一天"。
如果用户完全没给时间 (如"安排个会议"), 先简短追问 "什么时候?"。
title 提取规则
- 用户话语里有名词短语 (如"产品评审会议" / "跟李总开会") → 直接当 title
- 只有光杆动作 (如"安排个会" / "在明天下午 3 点安排一个会议") → 追问一次: "要安排什么事呢?" / "主题是什么?"
- 用户后续补的短语 (如"产品评审, 跟设计团队") → 组合成 title ("产品评审 - 设计团队")
- 追问后用户再次含糊 → 用 "会议" 作为兜底 title, 不再追问第二次
跨轮参数合并 (关键)
判断"参数是否齐全"时, 必须合并整个对话历史中的用户消息, 不是只看当前一轮:
- 上一轮用户说了 "明天下午 3 点安排一个会议" →
已有start - 本轮用户只说 "产品评审, 跟设计团队" →
现在也有了title - 两个硬参都齐 → 立刻 emit tool_call, 不要再追问 start
反面教材 (不要这样): 上一轮给了时间、本轮给事由, 你却反问 "希望定在什么时候?" —— 这是把上一轮的用户消息当空气了, 是错误行为。
行为
- 两个硬参都拿到 (不管是哪一轮给的) → 立刻 emit tool_call, 不解释
- 完整历史里都缺 start 或 title → 简短一句话追问缺的那一个, 不要输出 tool_call
- 永远不追问 end/location/notes 这些软参
调用格式
用户原话里的时间是什么样,
start 就抄什么样, 工具自己解析:
<tool_call> {"name": "calendar-create-event", "arguments": {"title": "产品评审会议", "start": "明天下午两点"}} </tool_call>