用WorkBuddy写了个番茄钟,它写得很快,这三个坑得我自己填

0 阅读5分钟

我是快乐IT。

先交代一下:这个番茄钟我已经用了两周,没删。所以下面这些不是“AI 能写代码”的又一次惊呼,而是一份带着账单和坑的复盘。

市面上的番茄钟我下过七八个。有的塞了白噪音、任务看板、团队协作,我就想要个 25 分钟倒计时,它给我弹一个“升级专业版解锁统计”。有的倒是干净,但数据要同步到它服务器,我看着那个隐私协议就退了。

我的需求其实就四句话:托盘常驻、25 分钟一响、能看统计、数据留在我自己电脑上。

于是让 WorkBuddy Code Agent 从零写了一个。过程不算顺利,中间有三次我想把会话直接关掉。

以下是最终成果
img_v3_0215j_03e695046d204f5a877a2619b2b7848g.jpg

最后跑下来是什么样

42 个文件、4114 行代码、39 个单元测试全绿。单文件 exe 2.2 MB,拷到任何一台装了 .NET 8 桌面包的机器上双击就能跑。数据存在本地 SQLite,不上云。

成本:46.62 积分。

说实话,比我预想的便宜。但省下的钱,基本都变成了我跟 Agent 来回掰扯的时间。

AI 干得快的部分,确实快

需求澄清那一段,我大概只说了五分钟。它给我列了一版功能清单:计时、暂停、跳过、统计、托盘、深色主题。我删掉两个用不上的,补了一个“关闭窗口时最小化到托盘”,就开始生成了。

第一版代码出来得很快。项目结构是标准的 WPF + MVVM,ViewModel、Service、Converter 分得清清楚楚。单测也顺手生成了 20 多个,跑了一遍,大部分是绿的。

那个瞬间我确实觉得:以后小工具可以自己写了。

然后就开始还债了。

坑一:托盘常驻,AI 写成了“托盘消失”

我说“托盘常驻”,AI 在代码里加了一个 NotifyIcon。但它把主窗口的 Closing 事件直接绑到了 Application.Current.Shutdown()

也就是说,我点右上角关闭,程序直接退了,托盘图标跟着消失。

我跟它说:关闭按钮应该是隐藏窗口,不是退出。它改了,把 Closing 事件里加了 e.Cancel = trueHide()。结果窗口关不掉了,点关闭没反应,托盘图标还在,但主窗口也调不出来。

改到第三轮,它才把逻辑理顺:Closing 里取消默认关闭,调用 Hide(),托盘菜单里单独放“退出”。但托盘菜单它只生成了一个“退出”,没有“暂停/继续”。我又补了状态同步——托盘图标要跟着计时状态变,暂停时是灰色,运行时是红色。

人的决策点: AI 理解“托盘常驻”就是“有个图标”,但用户真正要的是“窗口关了,程序还在,且我能随时叫回来”。这个预期差,AI 不会主动补。

坑二:计时逻辑和 UI 刷新耦合,暂停后进度条还在走

第二版更隐蔽。

AI 把 DispatcherTimer 直接写在 MainWindow.xaml.cs 里,每 100 毫秒更新一次进度条。暂停的时候,它停了计时器,但进度条动画用的是 WPF 的 DoubleAnimation,没跟暂停状态绑定。

结果就是:数字停了,环形进度条还在往前爬。

我盯着屏幕看了十秒,确认不是自己眼花。然后让 Agent 把计时逻辑抽出来。它说“可以”,生成了一版 PomodoroTimer 类。但单测跑不过,因为 DispatcherTimer 在单测里没有 UI 线程,直接抛异常。

最后我让它把计时逻辑改成纯 System.Timers.Timer,UI 只订阅事件,不碰内部状态。那 39 个单测,大部分是这时候补的——测暂停、测恢复、测跳过、测 25 分钟到点触发。

人的决策点: AI 的“最小实现”会把逻辑和界面揉在一起,能跑,但不好测、不好改。要不要解耦,得人来判断。AI 不会告诉你“这里以后会埋雷”。

坑三:单文件 exe,AI 说“加一行就行”

打包的时候,AI 说在 .csproj 里加 <PublishSingleFile>true</PublishSingleFile> 就行。

我信了。发布出来一个 200 多 MB 的文件夹,里面一堆 dll。exe 是能跑,但根本不是单文件。

后来查文档才知道,.NET 8 的 WPF 单文件发布还要加 IncludeNativeLibrariesForSelfExtractEnableCompressionInSingleFile,否则原生库还是散在外面。AI 没提这些,它只给了最基础的那一行。

补上配置之后,最终 exe 2.2 MB。拷到另一台机器,双击,能跑。

人的决策点: AI 给的“可以”经常是“理论上可以”。真实环境里的依赖、打包、分发,它不会替你想全。

46.62 积分花在哪了

我翻了下 WorkBuddy 的消耗记录,大概是这样:

  • 需求澄清和第一版生成:约 12 积分
  • 托盘常驻来回改:约 9 积分
  • 计时逻辑解耦 + 补单测:约 15 积分
  • 单文件打包配置:约 5 积分
  • 剩下是零碎的样式调整和统计页:约 5.62 积分

合计 46.62。

番茄钟的部分功能截图

番茄钟完成统计
img_v3_0215j_9fae91ae99884cc9bc9f7ffc31694f4g.jpg

番茄钟设置

img_v3_0215j_f267f5b6c13e4ce9b159efee8d5319dg.jpg

整体上,成本低,出来的效果还不错,需要使用番茄钟来专注工作、学习的伙伴可以下载试试

使用AI番茄钟过程中,如有问题或想法也欢迎与我沟通

番茄钟下载地址:ly845nzkic.feishu.cn/docx/KT4xdV…