Dida Workflow — 滴答清单工作流
用滴答清单管理日常工作任务:待办清单 + 计划工时。
首次使用先看 §前置:安装 dida CLI。skill 依赖
@suibiji/dida-cli,未装则一切命令都跑不通。
前置:安装 dida CLI(首次使用)
本 skill 依赖官方 @suibiji/dida-cli。若终端里跑 dida --version 报 command not found,先装:
1. 装 Node.js(LTS 版本,https://nodejs.org)
2. 全局安装 CLI:
npm install -g @suibiji/dida-cli
dida --version # 验证
3. 登录(二选一):
# 方式 A:浏览器 OAuth(推荐)
dida auth login
# 方式 B:手动 token(无法开浏览器时用)
# 网页版滴答清单 → 头像 → 设置 → 账户与安全 → API 口令,创建后复制
dida auth token <YOUR_TOKEN>
4. 确认:dida auth status
PATH 问题:npm install -g 后仍然 dida: command not found,跑 npm bin -g 拿全局 bin 路径,加到 shell rc(.zshrc / .bashrc)或 Windows 环境变量。
官方文档:https://help.dida365.com/articles/7464976698707017728
何时启动
以下任一条件命中就走本 skill:
- 用户提到 TickTick / 滴答清单 / dida
- 用户说"开始 XX 任务" / "完成 XX" / "新建任务" / "查看今日待办"
- 用户说"统计工时" / "本周工时" / "上周工时" / "本月工时" / 具体日期区间
- 会话开始时用户表明进入工作模式(如"开始今天的工作")
前置检查(每次会话首次调用)
CLI 已装、账号已登录的前提下,每个新会话首次触发本 skill 时跑一次:
dida auth status
command not found→ 引用户看 §前置:安装 dida CLI- 未登录/过期 → 提示用户跑
dida auth login(不代跑,OAuth 交互只能用户自己做)
projectId 获取:
- 如果用户在本会话或项目 CLAUDE.md 中已告知 projectId,直接用
- 未告知则跑
dida project list --json,让用户挑一个(或默认"收件箱") - 记住这次会话选的 projectId,后续复用
核心规则
1. TickTick 只当任务状态机
TickTick 记录任务标题、截止、状态、一行指针。规划、根因、讨论、猜想不进 TickTick—— 那些属于 doc / commit message / 聊天。
2. 任务 content 只记两类东西
- ✅ 实际产出点:做了 XX / 交付 XX / commit XX / 部署到 XX
- ✅ 下一步计划:后续要做 XX / 待跟进 YY / 阻塞在 ZZ
- ❌ 规划过程、根因分析、讨论记录、猜想(这些进 doc / commit message / 聊天)
content 超过 5 行的信号:说明该信息应该挪到 doc 里,TickTick 里只留指针("详见 doc/xxx.md")。
3. 会话开始主动拉一次未完成清单
用户进入工作模式时,拉当前 projectId 的未完成任务当 to-do bar:
dida task filter --projects <id> --status 0 --json
只拉标题层,别把每条 content 都读进上下文——按需 dida task get 拉详情。
CLI 速查
# 清单
dida project list --json # 所有清单
dida task filter --projects <id> --status 0 --json # 未完成
dida task filter --projects <id> --status 2 --json # 已完成
dida task filter --projects <id> --status 0,2 \
--start-date YYYY-MM-DD --end-date YYYY-MM-DD --json # 按截止日区间过滤
# 单条
dida task get <projectId> <taskId> # 详情(含 startDate/dueDate/completedTime)
# 创建
dida task create --project <id> --title "..." # 新建
dida task create --project <id> --parent-id <pid> \
--title "..." # 子任务
# 更新
dida task update <taskId> --id <taskId> --project <id> \
--title "..." --content "..." # 注意:同时要位置参数和 --id
# 完成
dida task complete <projectId> <taskId>
工时统计
触发词
"统计工时" / "本周工时" / "上周工时" / "本月工时" / "统计 YYYY-MM-DD ~ YYYY-MM-DD 工时"
口径
- 计划工时 =
dueDate - startDate(不用实际完成时间,稳定) - 1 人天 = 7h(若有加班一周 > 5 人天,实报即可)
- 只统计已完成任务
- 前缀分组:正则抽
【XXX】,无前缀归"无前缀"组 - 分组顺序:工时降序
执行
python <skill 目录>/scripts/worktime_report.py \
--project <id> --start YYYY-MM-DD --end YYYY-MM-DD
脚本输出 markdown 报告到 stdout,直接贴给用户。日期区间的语义是"截止日 dueDate 落在 [start, end] 内"(含首尾)。
未完成任务的追问
脚本会在报告尾部列出同区间内未完成的任务。skill 侧根据用户回复决定:
y→ 循环dida task complete <projectId> <taskId>后重跑脚本n→ 保持现状,报告已出完- 具体 taskId → 只对这几条 complete,然后重跑
异常
脚本会单列以下情况(不计入主统计,只做提示):
- 缺
startDate的任务 startDate与dueDate不在同一天的任务(跨天)
反模式
- ❌ 代跑
dida auth login(OAuth 只能用户操作) - ❌ 用 TickTick comment 当工作日志(commit message 是工作日志)
- ❌ 假设 TickTick 状态实时——
update/complete前必要时先get一次防冲突 - ❌ 把根因分析、设计决策、猜想塞进 task content
- ❌ 手动累加工时——总用脚本,避免人肉出错
- ❌ 把已完成任务的 close 当"项目记账"(真账本是 commit / doc / 修正库)
token 过期处理
dida auth status
过期就让用户跑 dida auth login,Claude 不尝试任何认证操作。