协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
smart-calendar【开发与工程】基于 macOS / iOS 苹果生态的智能日程与待办事项管理 skill。将非结构化输入(口语描述、聊天截图、邮件截图)自动解析为结构化任务,经用户确认后写入 Apple 日历 / 提醒事项,支持标签管理(工作 / 生活 / 自定义)、时间冲突检测、后续更新删除,以及按项目制自动生成工作周报(项目 - 进展 - 待办三级结构)。语言风格定位为专业正式书面语,也适用于其他需要专业书面表达的知识工作场景。单机版:每台 Mac 独立运行,数据本地存储,不做多端同步。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
单机版。每台 Mac 独立维护一份本地任务数据库(~/.smart-calendar/tasks.json)。日历事件和提醒事项本身会通过你已有的 iCloud 账号自动同步到其他 Apple 设备,但本 skill 的元数据(formal_title / 标签 / 项目 / 任务类型等)不跨机同步。如需跨设备保留完整上下文,请在同一台 Mac 上集中管理任务,或参考多机协同改造方案另行设计。
用户在以下场景触发:
Apple Calendar / Reminders 是真源,本 skill 的
tasks.json是本地缓存。
[写入]
用户 / agent ─────────────────────────► Apple Reminders / Calendar
│
│ 列表名 = 主标签的物理载体
│ description / body 末尾 = metadata block
│(project, task_type, aux_tags, formal_title)
│
iCloud 跨设备同步 ◄──┘
│
[读取 / sync] ▼
tasks.json ◄─────────────────────── Mac / iPhone
(本地缓存,可重建)
核心规则:
--tag-major work|life → 自动写入对应列表 / 日历sync 命令随时从 Apple 真源重建 tasks.jsonharness 让 agent 能干活,loop 让"同步 + 周报"被持续调度、验证、记录。默认不启用。
两个心跳命令(手动可跑,也可挂 launchd 自动跑 — 见 README「启用自动 loop」节):
python3 .../task_manager.py loop-tick --mode daily # 每日 sync
python3 .../task_manager.py loop-tick --mode weekly # sync + 出周报
python3 .../task_manager.py loop-status # 查看 loop 健康
A+B minimum viable loop:automation(launchd)+ skill(本 skill)+ state file(loop-state.json,含 30 条 history 滚动)+ gate(结构性断言:SYNC_DONE + tasks.json 可解析 + 报告 size>800 + 含必需段落;失败弹 Basso 通知 + 写 last_error + exit 1)。
设计原则:确定性机械操作用结构性断言 gate,不引 maker/checker;cron 单跑天然 hard-stop;失败必显式上报。判断类工作(哪些算重点、对外投递)不进 loop。
首次使用时 skill 会自动创建默认配置(~/.smart-calendar/config.json)。建议确认 / 修改以下字段:
周报标题与团队名(默认标题为"个人工作周报",team_name 为空):
# 个人使用:默认即"个人工作周报",无需配置;如需改名再 set-config
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py set-config \
--key weekly_report.report_title --value "重点项目周报"
# 团队 / 小组场景:设置 team_name,标题变成 "{team_name}{report_title}"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py set-config \
--key weekly_report.team_name --value "项目组"
最终周报标题 = {team_name}{report_title};team_name 为空时只用 report_title。
周报输出目录(必须设置,否则周报只能输出到控制台):
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py set-config \
--key weekly_report.output_dir \
--value "/path/to/your/weekly/report/folder"
查看当前配置:
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py get-config
可选:自定义数据目录(指向 iCloud Drive 或其他位置,用于测试隔离):
export SMART_CALENDAR_DATA_DIR="$HOME/Library/Mobile Documents/com~apple~CloudDocs/smart-calendar"
⚠️ 注意:iCloud Drive 跨机同步不是事务性的,两端同时写会产生 .conflicted 文件。单机版不建议把 DATA_DIR 放 iCloud Drive,仅作测试用途。
--meta-aux-tags 写入 reminder body / event description 末尾的 metadata blockpython3 ~/.claude/skills/smart-calendar/scripts/task_manager.py add-tag "紧急"
标签别名说明:内部规范用中文标签(工作 / 生活)。agent 用英文写入 work / Work / WORK / life / Life / LIFE 会自动归一化为对应中文。--tag-major 同样接受这些别名。
将提取的结构化信息展示给用户:
📋 识别到的任务信息
──────────────────────────────
任务标题:[提取的标题]
任务类型:[类型]
所属项目:[项目名]
截止时间:[日期 时间]
优先级:[高/中/低]
标签:[工作/生活/自定义]
相关人员:[人员列表]
备注:[备注]
──────────────────────────────
🎯 将创建:提醒事项 / 日历事件 / 两者
用户确认后生成正式用语(专业书面语):
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py check-conflict \
--date "YYYY-MM-DD" [--time "HH:MM"] [--duration 60]
--time 时按 [time, time + duration) 区间做真正的重叠判断--time 时返回当天全部事件⚠️ 时间冲突提示
该时段已有以下日程:
- 14:00-15:30 A 项目内部讨论会
是否继续创建?
根据任务特征智能路由:
执行写入(v4.0:用 --tag-major + --meta-* 参数):
# 创建提醒事项(不指定 --list 时自动按 --tag-major 选「工作」/「生活」列表)
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py create-reminder \
--title "正式标题" \
--tag-major work \
--due "YYYY-MM-DD HH:MM" \
--notes "正式备注" \
--priority [1|2|3] \
--meta-project "项目名" \
--meta-task-type "文件审阅" \
--meta-aux-tags "紧急,待审" \
--meta-formal-title "正式标题"
# 创建日历事件(同理,不指定 --calendar 时自动按 --tag-major 选)
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py create-event \
--title "正式标题" \
--tag-major work \
--start "YYYY-MM-DD HH:MM" \
--end "YYYY-MM-DD HH:MM" \
--notes "正式备注" \
--meta-project "项目名" \
--meta-task-type "会议"
--tag-major 接受 work / life / 工作 / 生活,自动归一化。
metadata block 会被追加到 reminder body / event description 末尾,跨机同步、跨端可读。
sync 命令可随时从 Apple 重建 tasks.json。但如果想立即更新本地索引(避免下次跑 search 时漏掉刚创建的任务),可显式保存:
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py save-task \
--task-id "auto-generated-uuid" \
--user-input "原始输入" \
--parsed-json '{...}' \
--formal-title "..." \
--formal-notes "..." \
--calendar-event-id "..." \
--reminder-id "..." \
--project "项目名" \
--task-type "类型" \
--major-tag work \
--aux-tags "紧急"
sync 命令 — 从 Apple 真源重建 tasks.json(推荐定期跑,尤其在 iPhone 手动加任务后):
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py sync
# 可选参数:
# --months-back 6 / --months-forward 3 日历事件扫描范围
# --dry-run 只 print 不写盘
sync 行为:
work_lists + life_lists)的未完成 reminderswork_calendars + life_calendars)的指定时间范围内事件tasks.json.bak~/.smart-calendar/tasks.json(可通过 SMART_CALENDAR_DATA_DIR 环境变量覆盖)python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py search "关键词"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py update \
--task-id "xxx" --field "title" --value "新标题"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py delete \
--task-id "xxx"
# 输出到控制台
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py weekly-report
# 写入文件(使用配置的输出目录)
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py weekly-report \
--output-dir "/path/to/output"
{team_name}{report_title}(YYYY-MM-DD).md(默认 个人工作周报(YYYY-MM-DD).md)YYYY-MM-DD HH:MM:SS 格式。created_at / updated_at 落盘时带本地时区,周报范围判断已做 timezone-aware 处理。--tag-major work 写入「工作」列表 / 「工作」日历,不要手写 --list "提醒事项" 或 --calendar "Work"(v3 旧法,会落到错误列表)。如需 override 列表名,确认目标真实存在,并通过 work_lists / life_lists / work_calendars / life_calendars 配置白名单(允许多名共存)。第一次写入前可用 list-calendars / list-reminder-lists 验证。tasks.json 是本地文件。Apple 日历 / 提醒本身会跨设备同步,但脱离本 skill 的元数据上下文。如需多机协同,请按用户需求定制改造。list-recent --limit 5 查看最近创建的记录list-tags 查看标签列表每个任务以 JSON 对象存储在 ~/.smart-calendar/tasks.json:
{
"task_id": "uuid-v4",
"user_input": "用户原始输入",
"parsed": {
"title": "提取标题",
"task_type": "文件审阅|反馈|调研|文书撰写|会议|其他",
"project": "项目名",
"deadline_date": "2026-05-22",
"deadline_time": "17:00",
"start_datetime": null,
"end_datetime": null,
"priority": "高|中|低",
"related_people": ["人员1", "人员2"],
"notes": "额外上下文"
},
"formal_title": "正式用语标题",
"formal_notes": "正式用语备注",
"calendar_event_id": "Apple Event UID 或 null",
"reminder_id": "Apple Reminder ID 或 null",
"tags": ["工作"],
"created_at": "2026-05-20T14:30:00+08:00",
"updated_at": "2026-05-20T14:30:00+08:00",
"status": "active|completed|cancelled"
}
~/.smart-calendar/config.json:
{
"tags": ["工作", "生活"],
"weekly_report": {
"enabled": true,
"output_dir": "",
"generate_day": "friday",
"generate_time": "17:00",
"team_name": "",
"report_title": "个人工作周报"
},
"first_run": true
}
# 日历 / 提醒操作(v4.0:用 --tag-major + --meta-*)
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py list-calendars
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py list-reminder-lists
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py create-event \
--title "..." --tag-major work --start "YYYY-MM-DD HH:MM" --end "YYYY-MM-DD HH:MM" \
--meta-project "..." --meta-task-type "..."
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py create-reminder \
--title "..." --tag-major work --due "YYYY-MM-DD HH:MM" \
--meta-project "..." --meta-aux-tags "紧急" --meta-formal-title "..."
# v4.0:从 Apple 真源重建 tasks.json
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py sync
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py sync --dry-run
# 任务管理
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py save-task \
--task-id "..." --parsed-json '{...}' --tags "工作"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py search "关键词"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py update \
--task-id "xxx" --field "status" --value "completed"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py delete --task-id "xxx"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py list-recent --limit 10
# 标签管理
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py list-tags
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py add-tag "紧急"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py remove-tag "紧急"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py set-task-tags \
--task-id "xxx" --tags "工作,紧急"
# 冲突检测
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py check-conflict \
--date "YYYY-MM-DD" --time "HH:MM" --duration 60
# 周报
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py weekly-report
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py weekly-report \
--output-dir "/path/to/output"
# 配置
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py get-config
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py set-config \
--key weekly_report.team_name --value "项目组"
python3 ~/.claude/skills/smart-calendar/scripts/task_manager.py set-config \
--key weekly_report.output_dir --value "/path"
~/.claude/skills/smart-calendar/
├── SKILL.md # 本文件
├── README.md # 安装与定位说明
├── scripts/
│ ├── task_manager.py # Python 核心控制器
│ └── smoke_test.py # 冒烟测试
├── references/
│ └── applescript_api.md # AppleScript API 参考
└── templates/
└── weekly_report.md # 周报模板(参考用,当前由代码直接拼装)
~/.smart-calendar/ # 数据目录(运行时自动创建)
├── tasks.json # 任务数据库
├── config.json # 配置文件
└── tmp_*.scpt # 临时 AppleScript 文件(用完自动清理)
v4.0 已实现方向 B(Apple 真源 + metadata block + sync),单机版上限大致到这里。剩余边界:
sync 重建本地缓存