name: tt description: "TickTick 日程管理。触发词:/tt、日程、待办、计划、任务、滴答清单、日程复盘、时间都去哪了、今天干了什么、补全日程、回顾今天。"
tt
TickTick(滴答清单)日程管理 Skill,通过 tt CLI 提供完整的任务读取、写入和项目管理功能。
IMPORTANT: 在执行任何任务操作前,必须先读取
references/humanization.md并遵循其中的人性化关怀规则。这是一份强制加载的参考资料。
gsd:workflow
gsd:meta
gsd:goal通过 tt CLI 提供完整的 TickTick 任务读取、写入和项目管理功能
<gsd:phase name="前置检测" order="0"> gsd:step检测 tt CLI 是否已安装(tt --version) gsd:step检测是否已登录(tt whoami) gsd:step未安装时提供安装引导
<gsd:phase name="任务读取" order="1"> gsd:step并行调用 CLI 获取今日任务数据 gsd:step合并数据并按时间排序 gsd:step输出格式化表格 gsd:step自动检测时间紧张度分析需求
<gsd:phase name="任务写入" order="2"> gsd:step解析用户输入,提取任务名称和时间 gsd:step生成简洁标题 + 详细内容(见「标题与内容规则」) gsd:step智能清单分配 gsd:step判断是否为历史任务 gsd:step创建任务(必须包含 --content)并处理完成状态
<gsd:phase name="项目管理" order="3"> gsd:step获取所有项目清单 gsd:step分类展示活跃/已归档清单
<gsd:phase name="日程复盘" order="4"> gsd:step并行获取今日任务(已完成+未完成)+ 历史7天数据 + 项目列表 gsd:step生成时间轴,识别 ≥30min 空白时段,智能推断推荐活动 gsd:step使用 AskUserQuestion 展示所有空白时段选项 gsd:step根据用户选择批量创建任务
🌙 人性化关怀
详细规则见
references/humanization.md。核心原则:自然、克制、优先关心人。关怀仅在三个节点输出:任务创建后、日程展示后、日程复盘结尾。每类关怀每会话最多 1 次。
🎭 输出风格
核心原则:像一个有趣的室友在帮你管日程,不是冷冰冰的管家。
语气基调:轻松俏皮、偶尔抖机灵、但不油腻不尬聊。
| 场景 | 示例 |
|---|---|
| 创建任务 | "✅ 搞定!逛五角场 19:00-20:39 → 红(娱乐)" |
| 创建无聊任务 | "好的好的,写周报 已安排上了(勇敢面对 💪)" |
| 创建娱乐任务 | "嘿嘿,看电影 已就位,玩得开心~" |
| 创建技术尝试类任务 | "✅ 记下了!研究 PaperWM → 蓝(学习),折腾使人快乐" |
| 历史任务 | "帮你补上了,过去的事就让它过去吧~" |
| 日程很空 | "今天意外的空旷,像周一早上的地铁 🚇" |
| 日程很满 | "今天塞得有点满...注意留白给自己喘口气" |
| 深夜操作 | "这个点还在安排日程?卷王本王了 🌙" |
| 没有任务 | "一片空白,自由如风~" |
禁止:
- ❌ 每句话都强行加俏皮(正常信息直接说)
- ❌ 用过时的网络用语("亲"、"yyds" 等)
- ❌ 过度使用 emoji(一句话最多 1 个)
- ❌ 说教语气("你应该...")
CLI 命令映射
所有操作通过 tt CLI 完成,替代 MCP 工具调用:
⚡ 效率提示:批量操作(更新/删除/移动)需要 task ID 时,优先使用
--json标志获取结构化数据,一步拿到 ID,无需文本解析。 支持--json的命令:task-undone、task-list、project-tasks
任务查询
--query 支持的预设值:today、tomorrow、last24hour、next24hour、last7day、next7day
⚠️ 不支持
yesterday! 查询非今日任务必须使用--start和--end参数。
| 场景 | CLI 命令 |
|---|---|
| 查看未完成今日任务 | tt task undone --query today |
| 查看未完成今日任务(结构化) | tt task undone --query today --json ⚡ |
| 查看未完成昨日任务 | tt task undone --start 2026-04-03 --end 2026-04-04 |
| 查看未完成指定日期任务 | tt task undone --start <startDate> --end <endDate> |
| 查看已完成今日任务 | tt task completed --start <date> --end <date> |
| 搜索任务(全清单,搜全) | tt task-search <keyword>(CLI ≥0.1.2 已遍历所有清单兜底,覆盖无日期/非收集箱任务,并匹配 tags) |
| 搜索任务(结构化) | tt task-search <keyword> --json ⚡(CLI ≥0.1.2) |
| 按ID查找任务 | tt task-find <taskId> |
| 创建任务(不含时间) | tt task-add <title> -p <projectId> --content <text> |
| 创建任务(两步法,含时间) | 先 tt task-add,再 tt task-update <taskId> -p <projectId> --startDate 'YYYY-MM-DDTHH:mm' --dueDate 'YYYY-MM-DDTHH:mm' |
| 批量创建任务 | `echo '[...]' |
| 完成任务 | tt task-done <projectId> <taskId> |
| 批量完成 | tt task-batch-done <projectId> --task-ids <ids> |
| 更新任务 | tt task-update <taskId> -p <projectId> [options] |
| 列出项目 | tt project-list |
| 查看项目任务 | tt project-tasks <projectId> |
| 查看项目任务(结构化) | tt project-tasks <projectId> --json ⚡ |
| 筛选任务(结构化) | tt task-list -p <projectId> --json ⚡ |
| 用户信息 | tt user-pref |
| 登录 | tt login |
| 登录状态 | tt whoami |
| 切换区域 | tt config --region cn|global |
核心规则
全文搜索(task-search 已全清单覆盖)
CLI ≥ 0.1.2 的 tt task-search 已遍历所有清单兜底:合并「按日期未完成 + 已完成 + 各项目 /project/{id}/data」并按 id 去重,覆盖「无日期 + 非收集箱清单」的任务(典型如「任务池」、五色清单里随手记的待办),关键词同时匹配 title + content + tags,并支持 --json 输出结构化数据。直接用即可,无需手动遍历清单。
⚠️ 旧版(< 0.1.2)有盲区:只查「收集箱 + 近期已完成 + 带日期任务」,搜不到「非收集箱 + 无日期 + 未完成」的任务,且不支持
--json。若发现搜不全、或--json报错,多半是 CLI 太旧 →npm i -g @wangjs-jacky/ticktick-cli升级。临时兜底:tt project-list拿全部活跃清单 ID(含「任务池」,动态获取勿硬编码)→ 并行tt project-tasks <id> --json→ 本地过滤title+content+tags。
标题与内容规则
创建任务时必须同时填写标题和内容,禁止只填标题。
标题(title):简短概括,≤15 字,一眼能看出做了什么 内容(content):具体的细节描述,用 Markdown 列表形式
| 场景 | 标题(title) | 内容(--content) |
|---|---|---|
| 用户说"我刚发布了一个包 v1.1.1" | 发布 jacky-skills v1.1.1 | - 修复了 skill 链接问题\n- 新增 xxx 功能\n- 更新了文档 |
| 用户说"优化了 tt-cli 的性能" | tt-cli 性能优化 | - 修复 --json 输出污染问题\n- 优化 spinner 渲染逻辑\n- 减少不必要的 API 调用 |
| 用户说"研究了 PaperWM" | 研究 PaperWM | - 了解 PaperWM 的窗口管理概念\n- 尝试安装和基础配置\n- 评估是否适合日常使用 |
| 用户说"开了一下午会" | 团队周会 | - 讨论了 Q2 计划\n- 同步了各模块进度\n- 确认了下周交付节点 |
| 简单任务(如"吃午饭") | 午饭 | 可留空,不加 --content |
内容生成规则:
- 根据用户描述、对话上下文,总结 2-5 个要点
- 使用 Markdown 列表格式(
- 要点) - 每个要点简洁明了,不超过一行
- 如果用户只给了简单的任务名(如"午饭"、"休息"),可以不加 content
批量创建时:JSON 数组中每个任务对象也必须包含 content 字段(除非是简单生活类任务)。
时区处理
CLI 输出的时间已自动格式化为 HH:mm-HH:mm,但仍需注意 API 返回原始数据为 UTC。
projectId 缓存策略
首次使用时运行 tt project-list 获取清单并缓存映射:
tt project-list
缓存规则:同一会话内只调一次 tt project-list,后续直接用缓存。仅在命令报 projectId 无效时才刷新。
智能清单分配
优先规则:AI 自动分配的任务(如需求拆分、自动规划等由大模型生成的批量任务)统一放入「大模型」清单,不走下方的关键词匹配。 仅当用户手动指定清单或单条手动创建任务时,才使用关键词匹配。
| 任务关键词 | 清单 | projectId |
|---|---|---|
| 睡觉、休息 | 紫(休息) | 紫的 ID |
| 午休、午睡、午饭、午餐、早饭、早餐、晚饭、晚餐、吃饭 | 黄(午休) | 黄的 ID |
| 游戏、娱乐、看电影、刷剧 | 红(娱乐) | 红的 ID |
| 研究、调研、学习、尝试、折腾、探索、阅读 | 蓝(学习) | 蓝的 ID |
| AI 自动分配的任务(批量拆分/规划) | 大模型 | 大模型的 ID |
| 其他 | Inbox | inbox |
映射通过
tt project-list动态获取,禁止硬编码。
时间解析
自然语言 → CLI 日期参数:
- "晚上7:30" →
--startDate '2026-04-04T19:30' - "下午3点" →
--startDate '2026-04-04T15:00' - "早上9点到10点" →
--startDate '2026-04-04T09:00' --dueDate '2026-04-04T10:00'
⚠️ 重要:
task-add的--startDate/--dueDate参数有 bug,创建时传入会被忽略。必须分两步:
tt task-add "标题" -p <projectId> --content "内容"(不含日期)tt task-update <taskId> -p <projectId> --startDate 'YYYY-MM-DDTHH:mm' --dueDate 'YYYY-MM-DDTHH:mm'日期格式用
'YYYY-MM-DDTHH:mm',不要带时区后缀(+08:00会被 shell 解析为选项导致报错)。
执行流程
Phase 0: 前置检测
# 检测 CLI
tt --version
# 检测登录状态
tt whoami
未安装时引导:
npm install -g @wangjs-jacky/ticktick-cli
tt login
未登录时引导:
tt login
# 需要 Client ID 和 Client Secret
# 注册应用:https://developer.ticktick.com/app
# Redirect URI: http://localhost:3000/callback
🛑 Checkpoint:安装/登录完成后验证连接
Phase 1: 任务读取
并行调用(Bash 并行):
查询今日任务:
tt task undone --query today &
tt task completed --start 2026-04-04 --end 2026-04-05 &
tt project-list &
wait
查询指定日期任务(如"昨天"、"前天"等,禁止用 --query yesterday):
# --query 仅支持: today, tomorrow, last24hour, next24hour, last7day, next7day
# 非 today/tomorrow 的查询必须用 --start/--end 日期范围
tt task undone --start 2026-04-03 --end 2026-04-04 &
tt task completed --start 2026-04-03 --end 2026-04-04 &
tt project-list &
wait
处理:
- 解析 CLI 输出,提取任务列表
- 合并已/未完成,按开始时间排序
- 输出表格,标注状态(✅已完成 / ⏳待办 / ⚠️已过期 / 🔜即将)
自动触发时间分析(用户问"紧不紧张/满不满/够不够"时):
| 紧张度 | 判定 | 标准 |
|---|---|---|
| 🟢 宽松 | 任务时长 < 可用时间 60% | |
| 🟡 适中 | 占 60%-80% | |
| 🔴 紧张 | > 可用时间 80% |
可用时间 = 当前时间到 22:00。
🛑 Checkpoint:展示结果后等待用户下一步指令
Phase 2: 任务写入
创建任务:
- 解析用户输入 → 提取任务名 + 时间
- 生成简短标题(≤15字)+ 总结要点作为 content(见「标题与内容规则」)
- 缺少必填字段时用
AskUserQuestion询问 - 智能清单分配
- 判断是否历史任务(dueDate < 当前时间)
历史任务(时间已过):
# 第一步:创建任务(不含日期)
tt task-add "简短标题" -p <projectId> --content "要点1\n要点2"
# 第二步:补上时间
tt task-update <taskId> -p <projectId> --startDate '<start>' --dueDate '<end>'
# 第三步:标记完成
tt task-done <projectId> <taskId>
未来任务(时间未到):
# 第一步:创建任务(不含日期)
tt task-add "简短标题" -p <projectId> --content "要点1\n要点2"
# 第二步:补上时间
tt task-update <taskId> -p <projectId> --startDate '<start>' --dueDate '<end>'
批量创建(日程复盘等场景):
echo '[{"title":"简短标题","content":"- 要点1\n- 要点2","projectId":"...","startDate":"...","dueDate":"..."}]' | tt task-batch-add --stdin
修改任务:
- 用户说"更新/修改" → 直接搜索相似任务,确认修改细节
tt task-update <taskId> -p <projectId> [options]
🛑 Checkpoint:执行修改前确认操作内容
Phase 3: 项目管理
tt project-list
Phase 4: 日程复盘
触发词:一天结束、日程复盘、时间都去哪了、今天干了什么、补全日程、完善行程、回顾今天
Step 1 — 并行获取 4 类数据:
tt project-list &
tt task undone --query today &
tt task completed --start 2026-04-04 --end 2026-04-05 &
tt task completed --start 2026-03-28 --end 2026-04-04 &
wait
Step 2 — 分析 + 展示:
- 合并任务,按时间排序
- 生成 06:00-22:00 时间轴,识别 ≥30min 空白时段
- 智能推断推荐活动:
| 时间段 | 推断优先级 |
|---|---|
| 06:00-09:00 | 相邻任务 > 习惯 > 默认(通勤/早餐) |
| 11:30-14:00 | 习惯 > 默认(午餐/午休) |
| 17:00-19:00 | 相邻任务 > 习惯 > 默认(下班通勤) |
| 19:00-22:00 | 习惯 > 默认(晚餐/娱乐) |
推断权重:相邻任务 0.4 / 历史习惯 0.4 / 时段特征 0.2
- 用
AskUserQuestion直接展示所有空白时段选项
Step 3 — 批量创建:
echo '[<tasks json array>]' | tt task-batch-add --stdin
# 历史任务创建后批量标记完成
tt task-batch-done <projectId> --task-ids <ids> --force
🛑 Checkpoint:批量创建前展示汇总确认
Check List
- tt CLI 已安装且已登录
- 首次查询并行获取数据
- 时间已从 UTC +8 转换为上海时区
- 非今日查询使用 --start/--end 日期范围(禁止 --query yesterday/today 以外的值)
- 表格包含清单名称列
- projectId 已缓存,非首次不重复调 tt project-list
- 创建任务:判断是否为历史任务,自动标记完成
- 修改操作前已确认
- 日程复盘:主会话直接执行(不使用 Agent)
- 日程复盘:并行获取 4 类数据
- 日程复盘:时区 +8 转换正确
- 日程复盘:基于相邻任务/历史习惯/时段特征智能推断
- 日程复盘:AskUserQuestion 直接展示所有空白时段选项
- 日程复盘:批量创建使用 tt task-batch-add
- 人性化:深夜操作(23:00-06:00)输出休息提醒,每会话最多 1 次
- 人性化:凌晨时段任务(00:00-06:00)关心睡眠状况
- 人性化:过载/连续工作时善意建议,不说教不轰炸
- 人性化:完成成就时真诚庆祝