牛马闹钟 · 今天你犁了几亩
把番茄工作法翻译成牛马世界观:干活叫犁地,一段专注 = 一亩;短休息 = 吃料;长休息 = 松绑。
对话端(命令行)与网页面板读写同一份 data/state.json,在任何一端开始的计时都会落进同一套账本。
环境约定
PY = C:/Users/acgbu/.workbuddy/binaries/python/versions/3.13.12/python.exe
CLI = C:/Users/acgbu/.workbuddy/skills/pomodoro-clock/scripts/pomodoro.py
面板 = C:/Users/acgbu/.workbuddy/skills/pomodoro-clock/assets/pomodoro.html
数据 = C:/Users/acgbu/.workbuddy/skills/pomodoro-clock/data/state.json
命令速查
| 意图 | 命令 |
|---|---|
| 下地开犁(默认一亩 25 分钟) | $PY $CLI start --cat 工作 --task "写季度报告" |
| 自定义一亩时长 | $PY $CLI start --minutes 45 --cat 学习 --task "刷题" |
| 吃料 / 松绑 | $PY $CLI start --mode short(吃料)/ --mode long(松绑) |
| 查看进度 | $PY $CLI status |
| 提前收工并计入亩数 | $PY $CLI done |
| 撂犁(不计入亩数) | $PY $CLI cancel |
| 看犁地账本 | $PY $CLI stats --period week(day/week/month/year/all) |
| 习惯打卡 | $PY $CLI habit done 早起 / habit add 喝水 / habit list |
| 改设置 | $PY $CLI config --set focus=30 long_every=4 |
| 导出 / 合并数据 | $PY $CLI export / $PY $CLI import <file> |
| 打开网页面板 | $PY $CLI serve --port 8733 |
技术字段仍是 focus/short/long,只改文案不改接口,数据向后兼容。
对话意图处理
回复用户时统一用牛马口径(犁地/亩/吃料/松绑),带点干活的糙劲但别过火。
下地开犁 —— 从用户的话里推断分类和任务名,再执行 start。
- 分类默认取六大类之一:工作、学习、思考、协作、运动、阅读;传入新分类会自动追加到分类表。
- 用户说「专注半小时」→ --minutes 30;说「刷两套题」→ --cat 学习 --task "刷两套题"。
- 执行后回复示例:「已下地,这亩 25 分钟,约 11:05 收犁,到点弹通知叫你吃料。」
- 不要再额外创建 automation/定时任务——start 已启动后台守护进程,到点自动弹 Windows 通知并写入统计。
查看进度 —— 执行 status,把剩余时间和今日亩数说清楚。
收工 / 撂犁 —— 用户说「做完了」「收工」用 done;说「不想干了」「撂犁」「打断一下」用 cancel。
看账本 —— 默认 stats --period week。汇报时给出:犁完几亩、犁地分钟数、完成率、分类分布、卖力时段,并给一句简短点评(如「上午 10 点最能犁,硬活排这个时段」)。
习惯打卡 —— habit done <名称>;取消今日打卡 habit undo <名称>;新建 habit add <名称>。
改一亩时长 —— config --set focus=30;可改 focus / short / long / long_every / auto_next / sound。
打开面板 —— 用户要看图表、听白噪音或用可视化面板时:
1. 后台启动 $PY $CLI serve --port 8733(用 Bash 的后台运行方式,不要加 --no-open)。
2. 用 present_files 打开 http://127.0.0.1:8733/pomodoro.html。
3. 面板每 5 秒与数据文件同步;在面板点击「下地开犁」会调用同一套 CLI,结束同样弹桌面通知。
工作机制(排查问题时参考)
start会写入state.running并派生一个脱离控制台的守护进程(PID 记在data/timer.pid)。- 守护进程睡到结束时间 → 调用
scripts/notify.ps1弹 Windows 通知(WinRT Toast,失败回退托盘气泡、再回退蜂鸣)→ 把本次记录写入sessions并清空running。 - 同一时刻只允许一段计时;已有计时在跑时再次
start会提示先收工或撂犁。 done计入亩数,cancel记一条completed:false用于计算完成率。- 面板与 CLI 的数据一致性由
scripts/serve.py保证:/api/start、/api/done、/api/cancel直接调用 CLI,网页只负责展示。 - 详细字段定义与实现说明见
references/implementation.md。
注意
- 电脑休眠或重启后守护进程会丢失,此时用
status确认;必要时重新start。 - 通知脚本需要 PowerShell,执行策略受限时已用
-ExecutionPolicy Bypass绕过。 - 不要在计时进行中直接编辑
data/state.json,用 CLI 子命令操作。