1. 项目概述:你的AI原生个人工作副驾
最近在折腾一个挺有意思的开源项目,叫DoWhat(做啥)。这玩意儿不是什么普通的待办清单或者时间追踪器,它更像是一个住在你电脑里的“数字双胞胎”,一个真正意义上的AI原生个人工作代理。简单来说,它通过每15秒自动截取一次屏幕,利用AI视觉模型来分析你正在做什么,然后自动帮你整理工作活动、提取待办任务,甚至还能通过内置的OpenClaw代理去帮你执行一些自动化任务。整个过程你几乎不用管它,它就默默地在后台观察、理解、规划,帮你把一天的工作脉络理得清清楚楚。
我自己用了快一个月,最大的感受是:它确实帮我省去了大量手动记录和复盘的时间。以前一天下来,经常想不起自己到底在几个会议、几段代码、几份文档之间切换了多少次,时间都花哪儿了。现在打开DoWhat的仪表盘,AI已经把活动按15分钟一个时段归纳好了,还生成了摘要,哪些是有效产出,哪些是沟通协调,一目了然。对于追求效率、希望量化自己工作状态,或者单纯想拥有一个“第二大脑”来辅助记忆和规划的开发者、知识工作者来说,这工具值得一试。
它的核心价值在于“被动感知”和“主动代理”。被动感知是指它不打扰你,通过屏幕内容理解你的意图;主动代理则是它能将识别出的任务,通过集成的OpenClaw去连接即时通讯工具(如微信、飞书)并尝试自动化执行。所有数据都存储在本地,隐私性有保障,只需要你提供一个OpenAI兼容的API密钥来驱动AI分析。接下来,我就从设计思路、实操部署、核心功能使用到深度定制,带你完整地走一遍。
2. 核心设计思路与架构拆解
2.1 为什么是“屏幕感知”而非“手动记录”?
市面上时间管理工具很多,但大多需要你主动去点击“开始”、“停止”或者手动输入任务描述。这本身就构成了一个巨大的“摩擦成本”——当你沉浸在心流状态时,打断自己去记录,本身就是一种效率损耗。DoWhat的设计哲学是反其道而行之:完全被动,完全自动化。
它的理论基础是,你的屏幕内容是你工作意图最直接、最丰富的载体。你正在使用的IDE、打开的浏览器标签、终端里的命令、文档里的光标位置,所有这些像素信息,对于现代的多模态大语言模型(LLM)来说,是可以被“理解”的。通过周期性地捕捉屏幕快照并发送给视觉模型(如GPT-4o),AI可以推断出你当前的核心活动(例如:“正在VSCode中调试userService.ts文件的第45行”、“正在Chrome中阅读关于Rust所有权机制的博客”),并自动打上标签(#编程、#调研)。
这种方式的优势显而易见:
- 零认知负担:你完全不需要改变现有工作流。
- 上下文丰富:截图包含了应用窗口、部分文本、界面布局等丰富信息,比手动输入的几个关键词包含更多细节。
- 客观真实:记录的是你实际做了什么,而不是你计划做什么或事后回忆做了什么,避免了记忆偏差。
当然,挑战也存在:对隐私的担忧、API调用的成本、以及AI理解的准确性。DoWhat通过“本地存储+可配置API”的方式回应了前两点,而准确性则随着视觉模型能力的提升在不断改善。
2.2 技术栈选型背后的考量
DoWhat是一个Electron桌面应用,这选择非常务实。我们来看看主要技术选型的原因:
- Electron (v39): 核心框架。选择Electron意味着可以用Web技术(HTML/CSS/JS)快速构建跨平台(macOS、Windows、Linux)的桌面应用。对于DoWhat这种需要调用操作系统原生截屏API、访问本地文件系统、并常驻后台的应用来说,Electron提供了完美的平衡——开发效率高,且能获得足够的系统权限。相比用Python的Tkinter或PyQt,Electron的生态和现代前端工具链更成熟。
- React (v19) + TypeScript: 前端层。React的组件化非常适合构建DoWhat这种拥有多个视图(仪表盘、待办列表、统计、设置)的复杂交互界面。TypeScript的静态类型检查对于维护一个涉及IPC(进程间通信)、数据库操作和AI API调用的项目至关重要,能极大减少运行时错误。
- SQLite (better-sqlite3): 数据存储。所有截图、分析结果、任务数据都需要持久化。SQLite是一个轻量级、无服务器的嵌入式数据库,它将数据库作为一个文件存储在本地(如
~/Library/Application Support/DoWhat/dowhat.db),完美契合“本地优先”和隐私保护的理念。better-sqlite3是Node.js中一个性能优异的同步SQLite驱动,比默认的异步驱动在某些场景下更简单高效。 - Tailwind CSS: 样式方案。用于快速构建美观、响应式的UI。对于个人或小团队项目,使用这种功能类优先的CSS框架能避免在样式设计上耗费过多时间。
- OpenAI SDK & 兼容API: AI能力引擎。项目没有绑定死OpenAI一家,而是设计为兼容任何提供OpenAI格式接口的服务(如Azure OpenAI、Ollama本地模型、Cloudflare Workers AI等)。这给了用户最大的灵活性和成本控制空间。
- OpenClaw集成: 代理执行层。这是DoWhat从“记录仪”升级为“代理”的关键。OpenClaw是一个开源AI智能体框架,可以连接IM工具并执行自动化任务。DoWhat将其内置,使得从“识别任务”到“执行任务”的闭环成为可能。
整个架构是典型的主进程-渲染进程分离的Electron应用。主进程(Node.js环境)负责“脏活累活”:定时截屏、调用AI API、读写数据库、管理OpenClaw子进程。渲染进程(Chromium环境)则负责展示漂亮的React界面。两者通过Electron的IPC机制进行通信。
注意:由于涉及频繁的屏幕捕获和图像处理,虽然Electron应用本身不算特别轻量,但DoWhat的优化重点放在了后台逻辑的效率上,比如使用
sharp库可能对截图进行压缩,以及合理的数据库索引,以确保长期运行不卡顿。
3. 从零开始部署与深度配置指南
3.1 方案选择:直接安装 vs 源码构建
对于绝大多数用户,我强烈推荐直接从项目的GitHub Releases页面下载预编译的安装包。这是最快捷、最无痛的方式,尤其适合非开发者用户。目前(根据项目README),v1.0.0版本提供了macOS(Apple Silicon)的DMG安装包和便携式ZIP包。Windows和Linux的版本在v1.1.0中会提供。
对于macOS用户,安装后如果遇到“无法打开,因为开发者身份无法验证”或“App已损坏”的提示,这是macOS Gatekeeper安全机制导致的。别慌,不需要去系统设置里降低安全等级。更优雅的解决方法是打开终端(Terminal),输入以下命令:
sudo xattr -cr /Applications/DoWhat.app然后输入密码。这个命令会清除应用扩展属性中的一些可能引发警告的标签,之后就能正常打开了。
如果你是一名开发者,或者想体验最新功能、进行二次开发,那么从源码构建是更好的选择。这需要你本地有Node.js 18+的环境。
3.2 源码构建与开发环境搭建
首先,把代码克隆到本地:
git clone https://github.com/Laworigin/DoWhat.git cd DoWhat安装项目依赖。这里有个小坑需要注意:因为项目依赖了better-sqlite3这样的原生Node模块(需要编译),所以确保你的系统有Python和C++编译工具链。在macOS上,通常安装了Xcode Command Line Tools就行。
npm install如果npm install过程中编译better-sqlite3失败,可以尝试先全局安装node-gyp,或者检查Python版本是否为3.x。
安装完成后,运行开发模式:
npm run dev这会同时启动Electron主进程和Vite开发服务器,并开启热重载。你会看到应用窗口弹出。
如果要打包成可分发应用,则运行对应的构建命令:
npm run build:mac # 构建macOS应用 # 或 npm run build:win, npm run build:linux3.3 核心配置详解:让AI开始理解你
首次启动DoWhat,最关键的一步是配置AI。点击侧边栏的齿轮图标进入设置(Settings)页面。这里有几个核心配置项:
API Key & Base URL:这是DoWhat的“大脑”接入点。
- API Key:填入你的OpenAI API密钥,或者任何兼容OpenAI API的服务的密钥(例如,如果你用Azure OpenAI,这里的格式通常是
你的密钥)。 - Base URL:这是API端点地址。
- 对于官方OpenAI,留空或填写
https://api.openai.com/v1。 - 对于Azure OpenAI,格式类似
https://你的资源名.openai.azure.com/openai/deployments/你的部署名。 - 如果你在本地用Ollama运行了视觉模型(如
llava),可以设置为http://localhost:11434/v1。
- 对于官方OpenAI,留空或填写
- 重要提示:费用发生在这一环。每次截图分析都会消耗AI API的token。选择
gpt-4o-mini会比gpt-4o便宜很多,且对于屏幕内容理解任务,gpt-4o-mini通常已经足够。务必关注你的API用量和费用。
- API Key:填入你的OpenAI API密钥,或者任何兼容OpenAI API的服务的密钥(例如,如果你用Azure OpenAI,这里的格式通常是
Vision Model:选择用于分析截图的视觉模型。
gpt-4o和gpt-4o-mini是目前OpenAI官方支持视觉输入的主力模型。确保你选择的模型支持视觉功能。Capture Interval (Seconds):截屏间隔,默认15秒。这个值需要权衡:
- 间隔太短(如5秒):记录更细腻,但API调用频率激增,成本高,且可能产生大量冗余信息(比如你盯着同一段代码思考的10秒内,截图都差不多)。
- 间隔太长(如60秒):可能错过一些快速的任务切换。
- 我的经验:对于以代码、写作等深度工作为主的场景,25-30秒是一个不错的平衡点,既能捕捉到任务切换,成本也可控。对于会议、沟通等场景,15秒默认值可能更合适。你可以根据一天的工作类型动态调整。
Data Directory:所有数据(截图、数据库)的存储路径。默认在系统的用户应用支持目录下,不建议修改,除非你有特别的存储规划。
配置完成后,回到主界面,点击左下角的“Start AI Sensing”按钮。你会看到状态指示器开始闪烁,这意味着DoWhat已经开始在后台默默观察和记录了。
实操心得:在首次配置后,可以先让DoWhat运行半天,然后去设置里的“Stats”页面查看Token消耗和成本估算。这能帮你快速建立对使用成本的直观感受,从而调整截屏间隔或更换为更经济的模型。
4. 核心功能实战与日常使用流
4.1 主仪表盘:你的工作“时光机”
DoWhat的主界面是其价值最直观的体现。它主要由三部分组成:
- 时间线(Timeline):位于顶部,以条形图形式展示你过去24小时的活动密度。颜色越深,表示该时间段内的活动越集中(截图数量多或AI判断的任务切换频繁)。点击条形图上的任何区域,下方的主区域会快速定位到那个时间点。
- 活动快照网格(Snapshot Grid):这是核心区域。屏幕被划分为以15分钟为单位的“时间槽”(Slot)。每个槽显示一张该时间段内AI认为最具代表性的截图缩略图,以及AI生成的一段简短摘要(例如:“Reviewing pull request #42 in GitHub and responding to comments”)。
- 双击任何一个时间槽,可以展开查看该15分钟内所有的原始截图,按时间顺序排列。这是复盘细节的神器,你能精确看到自己在某个问题上的思考路径。
- AI生成的摘要质量取决于提示词(Prompt)和模型能力。DoWhat内置的聚合提示词会要求模型总结该时间段内的“主要意图”和“关键产出”,而不是简单描述画面。
- 当前意图卡片(Current Intent Card):实时显示AI对你最近一次截图的解读,告诉你它认为你“正在做什么”。这是一个有趣的实时反馈,你可以检验AI的理解是否准确。
使用技巧:不要试图去“美化”你的时间线。它的价值在于真实反映你的工作状态。如果你发现某个下午时间线很“稀疏”,那可能正是你效率低下或频繁分心的时刻,这正是需要复盘和改进的地方。
4.2 待办清单与智能流水线
这是DoWhat从“记录”走向“管理”的关键模块。它分为两个面板:
- 待办事项(Backlog):一个简单的清单列表。神奇之处在于,这里的任务很多是AI自动提取并添加进来的。当AI分析截图时,如果从你的屏幕内容中识别出类似任务的信息(例如:IDE中打开的TODO注释、文档中提到的“下一步需要完成XX”、聊天窗口中承诺的“我晚点发你”),它就会尝试将其结构化,作为一个待办项添加到Backlog中。你也可以手动添加任务。
- 今日流水线(Today‘s Pipeline):这里展示的是从Backlog中筛选出来,AI认为你今天应该关注或优先处理的任务。AI会根据任务的创建时间、上下文关联度以及一些简单的启发式规则(比如,从你正在写的代码文件中提取的任务优先级更高)来进行排序。
操作流:
- 接收任务:你基本不用管,AI会自动填充Backlog。
- 处理任务:当你开始处理某个任务时,由于DoWhat在持续截图,AI可能会检测到你的屏幕内容与Backlog中的某个任务描述匹配,从而在界面上给出微妙的提示(比如高亮相关任务)。
- 完成任务:你手动勾选Backlog或Pipeline中的任务,将其标记为完成。这个动作也会被记录,形成“任务-活动”的闭环。
注意事项:AI自动提取任务目前还处于早期阶段,准确率并非100%。有时它会误将一些参考信息或过往对话记录当作待办项。因此,定期花一两分钟快速浏览和清理Backlog是必要的,删除那些无效条目,或者将AI提取的模糊描述(如“完成那个功能”)手动编辑成更明确的任务(如“实现用户登录模块的密码重置接口”)。
4.3 统计与复盘:量化你的工作
“Stats”视图提供了数据化的复盘工具:
- 每日摘要:总结当天总工作时长、活动时段分布、API调用次数和估算成本。
- 活动分类:基于AI打上的标签(
#编程,#会议,#文档等),以图表形式展示你在不同类型活动上的时间投入。 - AI洞察:这里会显示一些由AI生成的、关于你工作模式的文本性观察。例如:“你今天下午有连续2小时的深度编程时间,效率很高”,或者“上午在会议和邮件间切换频繁,上下文切换成本可能较高”。这些洞察虽然简单,但能提供一个外部的、数据驱动的视角。
我的复盘流程:每天下班前,我会花5分钟做三件事:
- 快速扫一眼时间线,回顾一天的整体节奏。
- 检查Backlog,把已完成的任务勾掉,把明天要做的任务拖到Pipeline或做好标记。
- 看一眼Stats里的AI洞察,作为一个反思的引子。
这个过程本身也是一种仪式感,帮助大脑从工作状态切换到休息状态。
5. 进阶玩法:集成OpenClaw实现任务自动化
DoWhat最令人兴奋的部分,莫过于与OpenClaw的深度集成。这将它从一个“观察者”和“记录者”,变成了一个潜在的“执行者”。
5.1 OpenClaw是什么?它能做什么?
OpenClaw是一个开源的AI智能体框架,它最大的特点是能作为“中间人”连接你的AI(比如GPT)和常见的即时通讯软件(如微信、飞书)。通过自然语言,你可以向OpenClaw下达指令,它能够理解并操作这些IM软件来完成一些任务,比如:
- “把今天下午3点的会议纪要发到‘项目群’里。”
- “问一下张三,他昨天说的那个API文档链接是什么?”
- “在飞书群里收集大家对方案A和B的投票。”
在DoWhat中集成OpenClaw,意味着Backlog里的任务,有可能被自动委托给OpenClaw去执行。例如,AI从你的聊天记录中提取出任务“需要把项目进度同步给李四”,这个任务进入Backlog后,你可以一键将其发送给OpenClaw,由它去操作你的微信给李四发消息。
5.2 在DoWhat中配置与使用OpenClaw
配置出奇地简单,因为DoWhat已经帮你做好了大部分集成工作:
- 启动OpenClaw:在DoWhat侧边栏点击“OpenClaw”图标。首次进入时,DoWhat会自动检查并引导你完成OpenClaw的初始化。它会复用你在Settings里配置的AI API Key和Base URL。
- 连接IM工具:根据OpenClaw界面提示,你需要扫码登录你的微信或飞书账号。请注意,此操作存在一定风险,务必使用小号或工作专用账号进行测试,并了解相关平台的使用条款。所有操作都在你本地电脑上完成,理论上比一些云机器人服务更安全,但仍需谨慎。
- 委托任务:在Backlog视图中,对于一个合适的任务(通常是沟通、信息收集类),你会看到多出一个“发送至OpenClaw”的按钮或选项。点击后,你可以用自然语言进一步编辑指令,然后发送。
- 监控执行:在OpenClaw视图内,你可以看到任务队列和执行日志。OpenClaw会尝试理解指令,操作IM界面去完成任务,并将结果反馈回来。
重要限制与风险提示:
- 能力边界:OpenClaw并非万能。它通过模拟用户操作(点击、输入)来工作,对于复杂的、需要深度逻辑判断或跨多个非标准应用的任务,成功率有限。最适合的是标准化、重复性的IM内操作。
- 隐私与安全:你需要将IM账号的权限授予一个自动化程序。务必在可控的环境下使用,并密切关注其行为。
- 平台风险:频繁的自动化操作可能违反微信、飞书等平台的使用协议,导致账号被限制。请绝对不要用于营销、刷屏等灰色用途,仅作为个人效率工具小范围使用。
尽管有这些限制,将任务识别与任务执行尝试连接起来,这个思路代表了AI智能体发展的一个方向。即使你暂时不用OpenClaw的自动执行功能,把它当作一个通过自然语言操作IM的快捷工具,也很有价值。
6. 常见问题排查与性能优化实录
在实际使用中,你可能会遇到一些问题。以下是我和社区里遇到的一些典型情况及其解决方法。
6.1 AI相关问题
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
| 截图一直显示“等待分析”或分析失败 | 1. API密钥或Base URL错误。 2. 网络问题,无法访问API端点。 3. 账户余额不足或额度用完。 4. 所选模型不支持视觉输入。 | 1.检查设置:确认API Key无误,Base URL格式正确(特别是Azure的URL格式复杂,容易出错)。 2.测试连通性:在终端用 curl命令测试你的API端点是否可访问。3.检查额度:登录OpenAI或你的API提供商后台,查看用量和余额。 4.更换模型:尝试切换到确认支持视觉的模型,如 gpt-4o-mini。 |
| AI生成的摘要或意图识别完全不准确 | 1. 截图内容模糊或过于杂乱。 2. 当前活动超出模型常见训练数据范围(如非常小众的专业软件)。 3. 提示词(Prompt)可能对某些场景不友好。 | 1.质量检查:展开时间槽,查看原始截图是否清晰可辨。确保屏幕分辨率设置正常。 2.提供上下文:对于专业软件,AI可能不认识。可以尝试在任务描述中手动添加更明确的标签来辅助。 3.反馈循环:目前DoWhat不支持自定义聚合提示词,但这是一个未来的优化方向。你可以将不准确的案例反馈给项目开发者。 |
| API调用费用过高 | 截屏间隔太短,或使用了昂贵的模型(如gpt-4o)。 | 1.调整间隔:在Settings中将“Capture Interval”从15秒调整为30秒或更长。这是控制成本最有效的手段。 2.降级模型:对于日常记录, gpt-4o-mini的性价比高很多。3.使用本地模型:如果你有足够的GPU资源,可以搭建本地视觉模型服务(如Ollama + LLaVA),并将DoWhat的Base URL指向本地服务,实现零API成本。 |
6.2 应用性能与稳定性问题
| 问题现象 | 可能原因 | 排查与解决步骤 |
|---|---|---|
| 应用运行一段时间后变卡顿,内存占用高 | 1. 截图累积过多,未自动清理。 2. 数据库文件( dowhat.db)膨胀。3. Electron应用本身的内存泄漏(较罕见)。 | 1.清理旧数据:DoWhat目前似乎没有自动清理截图的功能。可以定期手动清理~/Library/Application Support/DoWhat/snapshots/目录下的旧图片文件(比如保留最近7天的)。操作前请备份!2.优化数据库:可以尝试使用SQLite命令对数据库进行 VACUUM操作来压缩空间,但这需要一定的数据库操作知识。3.重启应用:最简单的临时解决方法。 |
| 无法启动或启动后立即崩溃 | 1. 原生模块(如better-sqlite3)在系统升级后不兼容。2. 配置文件损坏。 3. 权限问题,无法写入数据目录。 | 1.重装依赖:如果是源码运行,尝试删除node_modules和package-lock.json,重新npm install。2.重置配置:退出应用,重命名或移走 ~/Library/Application Support/DoWhat/目录(再次提醒备份!),然后重新启动应用,会生成全新配置。3.检查权限:确保当前用户对应用的数据目录有读写权限。 |
| 截屏功能在特定应用(如全屏游戏、视频播放器)中失效 | 这是操作系统层面的隐私保护机制。macOS等系统会禁止普通应用截取某些安全窗口或全屏窗口的内容。 | 1.检查系统权限:在macOS的“系统设置”->“隐私与安全性”->“屏幕录制”中,确保已授予DoWhat权限。 2.接受局限:对于受保护的内容,截屏可能只能得到黑屏或空白。这是正常现象,出于安全考虑,通常无法解决。 |
6.3 隐私与安全考量
这是所有屏幕记录工具无法回避的问题。DoWhat采取了“本地优先”的策略来应对:
- 数据本地存储:所有截图和数据库文件都在你的电脑上,除非你主动分享,否则不会离开。
- API调用可控:截图只发送给你配置的AI服务提供商。如果你使用OpenAI的官方API,那么图像数据会传输到他们的服务器进行处理。如果你对此敏感,有两条路:
- 使用本地模型:如前所述,搭建Ollama等本地服务,数据不出局域网。
- 选择可信的替代API:一些提供OpenAI兼容接口的厂商可能承诺数据不出境或更严格的隐私条款,可以酌情选择。
- 开源透明:代码完全开源,你可以审查它到底做了什么,有没有偷偷上传数据。
给你的建议:在使用前,花点时间阅读项目的隐私说明。首次使用时,可以先在非工作环境下(比如用个人电脑浏览一些非敏感信息)试用一段时间,观察其行为和资源占用,建立信任感后再用于正式工作场景。
7. 自定义与二次开发探索
如果你不满足于现有功能,DoWhat的开源特性给了你很大的折腾空间。
7.1 修改提示词(Prompts)
AI生成摘要和提取任务的质量,很大程度上取决于发送给模型的提示词。DoWhat的提示词模板位于源码的src/main/prompts/目录下。例如,aggregation提示词负责生成15分钟时间槽的摘要,pipeline_optimization提示词负责从上下文中提取和优化任务。
你可以修改这些提示词文件,来让AI更符合你的语言习惯或关注重点。比如,你希望摘要更侧重于“遇到了什么困难”而不是“做了什么”,就可以调整提示词的侧重点。
修改步骤:
- 找到
src/main/prompts/aggregation.ts(或类似文件)。 - 修改
system或user角色的提示文本。注意保持JSON结构。 - 重新打包或运行开发模式,使修改生效。
提示:修改提示词是一门艺术。建议每次只做小的调整,然后观察一段时间内AI输出的变化,逐步迭代。
7.2 扩展数据存储与分析
DoWhat使用SQLite存储所有数据。数据库结构相对清晰,你可以直接使用SQLite浏览器工具(如DB Browser for SQLite)打开dowhat.db文件,进行自定义查询和分析。
例如,你可以写SQL查询:
- 过去一周,每天在
#编程标签上花费的平均时间。 - 哪个时间段(上午、下午、晚上)你的任务完成率最高。
- AI提取的任务中,最终被标记为完成的比例。
这些自定义分析能给你带来比内置Stats视图更深入的洞察。
7.3 贡献代码与功能
如果你有新的功能想法或发现了Bug,欢迎向项目提交Pull Request。项目结构清晰,主要逻辑在src/main/capturer.ts(截屏与分析循环)、src/main/database.ts(数据操作)和src/renderer/src/components/views/(各个前端视图)中。
一些可能的贡献方向:
- 实现截图自动清理策略:比如只保留最近30天的截图。
- 增加更多图表类型:在Stats视图里加入每周趋势图。
- 支持更多IM平台:为OpenClaw集成添加更多适配。
- 开发插件系统:让社区可以贡献自定义的分析器或导出器。
参与开源项目不仅是贡献,也是深入学习一个优秀项目架构的绝佳机会。
经过这一番深度探索,DoWhat对我来说已经从一个新奇玩具,变成了一个融入日常工作流的得力助手。它不会替你工作,但它像一面冷静的镜子,让你更清晰地看到自己的时间流向和工作模式;它集成的自动化潜力,又为未来的人机协作打开了一扇窗。任何工具的价值都取决于你如何使用它。我的建议是,不要追求100%的自动化或准确率,而是把它当作一个“增强感知”的副驾驶,利用它提供的数据和提醒,来辅助你做出更好的决策和调整。