为ADHD开发者打造的低刺激专注工作流:i-have-adhd项目实践
“i-have-adhd”这个名字最早是我给自己一个本地代码仓库起的。当时我刚从一场几乎把我耗尽的大型项目里退出来带着大量注意力涣散的记录决定认真解决一个问题为什么别人一天能干的活我要磨三天而且每次都觉得精神透支。查了很多资料、做了正规评估之后我接受了“注意力缺陷多动障碍”这个判断。不是懒不是意志力差情况比想象中更普遍尤其是做软件开发的人群里——工作本身要求长时间维持注意却正好撞上这种神经发育特点最不擅长的环节。于是我把“i-have-adhd”做成了一套辅助系统包含浏览器扩展、IDE插件和一份工作流手册目的很简单既然大脑不擅长“自己稳住”那就把规则放到环境里让外部工具帮我稳住。这套系统我自己用了一年多单次专注时长中位数从十几分钟提升到了稳定在28分钟左右任务切换次数大幅下降。如果你也有类似的困扰无论是确诊还是只是怀疑这篇文章值得看完。1. 项目概述与构思背景1.1 这个项目到底是什么“i-have-adhd”不是一个商业效率软件也不是某个大厂出品的专注工具它是我给自己、也开放给同类人群设计的一套完整工作流方案。项目由三部分组成分别是浏览器端的干扰阻断扩展、IDE环境里的低刺激插件、以及一份用Markdown书写的工作流规则手册。在动手之前我给自己定了非常苛刻的原则这个系统只做减法不做加法。ADHD人群的核心困境是信息过载和选择困难如果工具本身还需要大量配置、维护和学习成本那它本身就是一种新的干扰源。所以最后的实现形态极度克制浏览器扩展只做三件事IDE插件只显示两个数值工作流手册只有一套固定模板。所有需要用户“想一想怎么用”的设计全都被砍掉了。这个项目解决的痛点非常具体工作时间里无意识地打开资讯站点、在多个任务标签间反复横跳、因为任务拆得太粗导致大脑无法形成明确的执行意图、以及每次被打断之后长时间无法回到专注状态。1.2 做这个项目的直接起因触发我做这件事的是一次接近崩溃的迭代排期。当时我独立负责一个商城模块的一段关键功能功能本身不复杂但实际耗时比预估多了整整三倍。我一开始以为是能力问题后来发现根本不是——每次写代码进入状态不到二十分钟就会被某个念头带走去查一下邮箱、看一眼即时消息、翻一下技术社区然后回来时发现自己已经忘了刚才改到哪个函数。最让我警醒的是一个细节我开始用最简单的文本表格记录每天的注意力走向包括什么时间、因为什么事情、丢了多少分钟。两周的数据下来非常扎眼。一个工作日里真正稳定写代码的时间加起来只有两到三小时其余时间被零碎地消耗在十几次注意力转移和漫长的“重新进入状态”过程里。那时候我意识到这不是态度问题是我的注意力系统天生就不太支持“长时间紧盯同一件事”这个操作。与其强迫自己硬扛不如给外部环境加装一套辅助系统让环境替我的大脑做判断。1.3 这套方案适合谁说实话这个项目适合的人群范围比预期广很多。首先是已经被确诊为ADHD的开发者尤其是中轻度的症状类型其次是没有确诊但明显受注意力问题困扰的人比如一分钟不看手机就焦虑、切换任务后很难想起原本要做什么、工作日报写得一团糟的人。一个更简单的判断标准是如果你进入心流状态的成本非常高并且一旦被打断就很难恢复那么这套思路大概率对你有帮助。反过来如果你的问题是“进入状态很容易但停不下来”那这个项目的适用性会低一些因为那属于过度专注的另一类问题需要完全不同的规则来应对。2. 技术方案选型与整体架构2.1 为什么放弃独立应用方案最初我做的是一版独立的桌面应用用Electron写的功能齐全得可怕任务看板、番茄钟、白噪音、每日报告、可视化统计应有尽有。但用了不到两周就果断弃掉了。原因说起来挺讽刺的独立应用本身就是一种打断。ADHD人群对任何一种“需要刻意打开并使用”的工具都会有天然抵触因为专注于任务本身已经很难了再让我额外切换到一个叫“专注工具”的应用里操作这对自己来说就是一种变相的分心。第二版彻底换思路将核心功能直接嵌入日用场景把干扰阻断做成了浏览器扩展让它在网页加载时直接起作用把专注状态显示做成IDE插件嵌在编辑器角落任务管理和复盘规则回归到Markdown文件和命令行。这样用户不需要思考“现在应该打开哪个软件”所有东西都在原有工作环境里自动出现。提示如果你的目标是“减少使用者的动作数”工具形态必须贴近日常使用路径独立应用反而是负担。这是整个项目里最重要的设计取舍之一。2.2 三条链路的整体架构整个项目的技术栈非常简单但没有一条链路是拍脑袋决定的浏览器扩展基于Manifest V3使用Content Script和Background Service Worker。功能集中在三个模块站点屏蔽、标签页温和抑制、任务状态可视化。IDE插件用TypeScript编写基于VS Code Extension API。在状态栏显示当前代码块的剩余时间和今日有效输入分钟数并在长时间未输入时给出低频提醒。工作流规则用JSON统一配置每天的日程、任务卡片和复盘模板。每天开工前打开一个Markdown文件按固定格式填写当日计划后浏览器扩展和IDE插件会自动读取配置生成当天的执行骨架。直接用本地文件giting管理没有引入数据库。这个决定经过深思熟虑一套轻量级个人工作流的数据量用文件系统完全足够引入数据库反而会让配置和迁移成本剧增。这个架构跑了一年多稳定性和可靠性都经受住了考验。2.3 关键技术取舍把“安静”当作第一优先级整个项目里最重要的一次设计转向是认识到工具必须站在“注意力经济”的对立面。现在绝大多数产品都在争夺注意力弹窗、红点、成就体系、连续打卡这些机制对ADHD群体简直是灾难。它们提供的不是帮助而是一条又一条把注意力拽走的钩子。因此“i-have-adhd”的设计原则非常反主流屏蔽站点后没有任何庆祝效果任务完成只是把字体颜色变暗没有音效没有动画时间块结束时的提醒是一段低频短音甚至不弹窗口。这里有一个特别反直觉的经验对ADHD人群来说激励动画和音效会制造新的兴奋点大脑被情绪刺激后反而会更难回到专注状态所谓的“奖励反馈”反而变成干扰源。所以这个项目里一切反馈都在追求更少、更轻、更可预期。3. 核心功能拆解与实操实现3.1 浏览器端的干扰阻断模块浏览器扩展的核心机制是一套站点评分系统。我给每个常用网站打了三个维度的分内容质量、干扰频率、情感唤起强度。前两者比较好理解第三个维度很关键——有些网站内容本身不算“坏”但会强烈刺激情绪比如充满争议性信息或高密度爽感的页面这类门户哪怕不算严格意义的资讯站也必须列入工作阻断名单。实现细节上Content Script会在页面Document开始加载时检查当前域名。如果是阻断名单内的站点就直接把body替换成遮罩层。默认遮罩是深绿色背景中央只有一行白字“此站点在专注时段不可访问”。没有倒计时、没有进度条、没有任何动态元素。倒计时被去掉是第二版才想明白的。一开始我在遮罩上加了剩余时间的倒计时数字结果发现这反而成了一个巨大的分心源——人会无意识盯着倒计时反复计算还有多久能访问注意力完全被钉在屏蔽页上而不是回到工作本身。3.2 标签页温和抑制与等级制阻断除了直接阻断网站浏览器扩展还有一个“标签页温和抑制”功能。在设计初期我尝试过一种强硬模式检测到用户切换到干扰站点时强制切回最近的工作标签页。但实际上这种强制行为会造成强烈的控制感和抵触情绪用了几次就想卸载掉自己的扩展。后来我改成了一种“温和抑制”策略不强制切换但在干扰标签页上覆盖一层半透明警示层同时启动一个120秒的倒计时。倒计时结束如果用户依然没有切回工作页扩展会主动关闭这个标签页并在日志里记录一条“带情绪化访问被终止”的事件。这个设计经过了多次迭代核心逻辑是给大脑一个缓冲区间允许走神但不让走神变成无限循环。实际体验下来温和抑制的效果远比强制切断好因为它不会激发“抢回控制权”的反感而是把规则交给时间本身。3.3 任务标签染色与状态可视化任务标签染色是我自己非常喜欢的一个设计。在任务管理Markdown文件里每天的计划固定写作如下格式- [ ] #feature 实现订单导出模块的接口封装 - [ ] #bugfix 修复支付状态机异常跳转 - [ ] #refactor 拆分购物车优惠计算逻辑通过读取前缀标签浏览器扩展会在地址栏旁绘制三个彩色圆点分别对应“正在做”“接下来做”和“待排期”。这个功能看起来简单实际上解决了一个很大的问题ADHD患者常常在选择“接下来做什么”的时候卡住大脑在多个选项之间来回切换产生高额决策成本。现在只需要看颜色不需要重新思考优先级。值得一提的是这个功能要求“任务分类在配置文件里固定顺序”而不是在运行时动态调整。因为动态调整意味着要反复打开配置界面又是一种打断。3.4 IDE插件与低刺激编辑环境IDE插件的设计目标非常聚焦降低编程环境的刺激密度。代码编辑器本质上是高信息流界面有语法高亮、文件树、活动栏、MiniMap、补全提示、Git状态提示这些元素每一个都在向视觉系统发送信号。对ADHD人群来说信息密度越高大脑越容易脱离主线。默认设置做了以下几件事关闭代码主题中的冷光配色自动折叠活动栏文件树默认隐藏MiniMap显示范围从整个文件集缩小到仅当前文件代码补全提示延迟到400毫秒后才出现光标闪烁频率减半。其中延迟补全提示是最反直觉但效果最好的一个调整。原本补全提示是即时弹出的对ADHD人群来说每弹出一行候选列表就相当于向大脑投递一条新刺激。延迟400毫秒之后大脑先专注于当前输入的内容本身不会因为提示的出现而频繁切换上下文。实测下来代码错误率反而降低了因为减少了选错候选函数的现象。IDE插件在状态栏只显示两个数值当前代码块的剩余时间和今日有效输入分钟数。有效输入的计算方法很直接每五秒采集一次光标位置和文件修改时间如果两次采集之间文件内容发生变化就累计为有效输入超过120秒没有变化则停止计时。3.5 工作流手册“五拆三锁”框架如果只能保留这个项目的一部分我肯定会保留工作流手册。整套规则用四句话概括五拆把一整天拆成上午一个时间块、下午一个时间块每个时间块拆成两段45分钟的核心编码时间每段核心编码时间里再拆出一个具体可感知的任务和一个验收标准。三锁锁定开始动作、锁定结束动作、锁定检查频率。开始动作必须是物理性的比如打开某个指定的文件或站在书架前深呼吸结束动作必须是写一行日志备注检查频率固定为每次切分支前。初看之下这个框架有点像简化版番茄工作法但本质上完全不同。番茄钟是以时间来定义工作但“五拆三锁”围绕的是任务颗粒度的控制。ADHD人群的失败往往不是因为时间不够而是因为任务拆得太粗。如果任务清单里写“实现支付模块”大脑会因为定义不够具体而无法生成执行意图。但换成“定义PaymentService接口并实现checkout方法”之后大脑就有了一个可以直接消费的动作单元。4. 实操过程与真实效果4.1 一个典型工作日的完整流程我以某一天的真实工作为例完整展示这套系统的运行过程。早上9点20分坐到工位打开工作流Markdown文件看到的是前一晚准备好的今日计划今日任务09-23 上午核心块145分钟#feature 实现订单导出Excel接口封装 验收标准POST /export/orders 返回文件流且前端能正常接收 开始动作打开接口定义文件 结束动作在任务日志中写下“接口封装完成自测通过” 下午核心块245分钟#refactor 拆分支付状态机浏览器扩展自动识别到当前处于专注时段把所有资讯类站点替换成遮罩。IDE插件状态栏显示今日目标输入分钟数和当前实时进度。我唯一要做的“仪式动作”是在开始执行前把手从鼠标上松开做三次深呼吸——这个呼吸动作是给大脑一个明确的启动信号告诉它“现在开始往后的45分钟都要专注这件事”。每段45分钟结束后IDE插件的短音响起我把代码改动提交到本地git分支写一行完成备注然后站起来去倒水。整个上午会经历三次典型的“进入、专注、退出”循环。下午一样但时长不变。傍晚统一做当天的复盘统计。4.2 数据日志与周复盘机制日志模块是这个项目里最不起眼但价值最大的部分。浏览器扩展、IDE插件和任务文件都会向同一个日志目录写JSON行格式统一内容分别是事件类型、时间戳、涉及的对象和关联的任务标签。每周五下午我会运行一个简单的脚本来统计本周数据有效编码时间总量、被阻断的站点访问次数、任务切换次数、平均单次专注块时长。这组数据让我发现了非常有意思的规律变化。使用这套系统前我的单次最长专注时长约为35分钟但一周里只有两次能够达到这个数字多数时间都在8到20分钟之间反复横跳。用了三个月后单次专注时长的中位数稳定在28分钟最长偶尔能到67分钟。更夸张的是被阻断站点访问次数从每周87次降到了平均9次。注意如果你要复制这套方案衡量指标的重点并不应该是“把专注时间拉得越长越好”而是缩短“被打断后重新进入状态”的恢复时长。日志里最值得盯住的永远是“恢复时长”这个指标。4.3 效果边界和适用场景边界我必须诚实地说这套方案不是万能的。它极其适合认知型、输出型工作比如独立编码、写方案、做技术调研。但在大量与人协作的场景里这套规则几乎全盘失效因为沟通本身就会不断打断工作状态。于是我把工作日分成“团队协作日”和“独立编码日”两种模式。协作日只保留站点评分系统关闭标签页抑制和时间块提醒给自己留出弹性独立编码日则完全按照“五拆三锁”规则执行。这个区分带来的改善很大让我不再因为规则被打破而自责。另一个必须强调的边界是这套工具绝对不能替代正规治疗。如果怀疑自己有ADHD应该先去医院做完整的专业评估判断是否需要药物干预以及适合哪类干预方案。工具和规则能调节的是工作环境但无法改变神经层面的基础状况。如果注意力问题已经严重影响生活请先寻求专业帮助折腾任何工具都是次要的。5. 常见问题与排查技巧实战5.1 扩展在工作时段不生效这是整个项目里最容易踩的坑。第一版浏览器扩展用chrome.storage存储工作时段配置结果发现有时修改了配置之后扩展不重新加载第二天打开浏览器时整个拦截功能形同虚设。排查后发现根源在Manifest V3的Service Worker生命周期上。每次浏览器重启后Service Worker会进入休眠状态如果此时Content Script已经触发渲染检查扩展内部状态还没初始化就会跳过阻断逻辑。我的解决方案分两层第一Content Script每次加载页面时主动向后台发送“当前域名检查请求”而不是依赖扩展内部维护的状态副本第二工作时段配置不存储在扩展里改为在服务端只负责从工作流Markdown文件读取时间段配置。这样扩展完全依赖外部文件的配置不再维护内部状态同步问题彻底消失。5.2 站点屏蔽误伤正常页面最初的阻断域名列表写得比较粗很多工作必需的页面也被误伤包括代码仓库的PR页面和某些技术文档站。因为很多技术站点首页也是有资讯流和推荐机制的。后来我加了一个“内容签名”机制Content Script不再单纯用域名判断而是检查页面中特定区域的文本特征。资讯页面的典型特征包括“热榜”“推荐”“猜你喜欢”这些区块而代码仓库的PR页面完全没有这些文本用内容签名来判断就能精准区分。但这个机制也有误判的时候后来我补充了一个手动标记按钮快捷键AltW可以把当前页面临时加入“今日允许列表”10分钟内不会再次阻断。这个应急出口非常重要避免在需要查资料时被工具卡住。5.3 长期使用后的规则疲劳用了大概三四个月后出现了一个隐蔽的问题我发现自己对这套规则产生了“习惯性无视”。工作时段开始时自动点掉遮罩层有时会故意绕开浏览器打开手机刷内容IDE插件的短音提醒也成了背景音经常响完也不理会。这个现象的根源在于规则被内化成了条件反射失去了自我监督的意义。我的处理方式很笨但有效每隔一个月做一次“重新初始化”替换工作流手册的配色、顺序、文案同时换一个任务管理文件的存放位置。这种变化让大脑重新对这套流程产生新鲜感和敬畏感不再落入机械执行的惯性。5.4 快速排查速查表症状表现可能原因处理方式扩展不阻断站点配置路径错误或Service Worker未加载检查Markdown配置路径手动重启扩展IDE插件计时不准光标监听间隔过短调整采集频率到5秒以上通知弹窗太多忘记开启静默模式在配置里设“静默模式”全量关闭弹窗任务文件被覆盖多个编辑器同时打开统一用命令行工具追加不使用GUI编辑器日志数据缺失同步冲突为日志目录开启git自动提交状态圆点不更新配置文件标签格式错误检查标签前缀是否包含#feature等关键字5.5 意想不到的小技巧最后分享一个细节在本地配置里我用不同颜色的终端提示符来标识“专注状态”和“休息状态”。专注状态时终端提示符是蓝色休息状态是绿色。一开始这个设计只是为了好玩后来发现它对心理暗示有非常大的作用。只要眼角余光扫到蓝色大脑就会自动意识到“现在不是开小差时间”不需要主动提醒自己。6. 项目沉淀与后续规划“i-have-adhd”从最初的自救工具慢慢变成了一套可以复制的模板。目前所有代码和维护脚本都放在本地git仓库开源版本正在整理中。如果任何人想在自己的环境里复刻这套方案有一件事必须先想清楚这是一个需要“调校”的系统不是一个开箱即用的产品。不同ADHD患者的表现差异很大注意力的薄弱环节不同抄配置、抄界面、抄规则意义不大真正有价值的是把记录、拆分、阻断、复盘这套循环跑起来再根据数据不断调整。后续的规划里我想把内容签名机制做得更细增加对搜索历史的情感唤起评估同时尝试把“五拆三锁”规则做成一个独立的Web流程页面让非程序员群体也能使用。我个人运行这套系统一年多后最大的感受不是“效率提高了多少”而是我终于不再因为做不到普通人的专注节奏而责怪自己。ADHD带来的困难是真实存在的但承认它之后很多问题就变成了工程问题调整环境、简化流程、记录反馈、迭代规则。这条路上没有万能药但一套适合自己的辅助系统确实能把自己从“我不够努力”的自我否定中解放出来。如果你也在经历类似的挣扎不妨从最简单的记录开始先只写一周的注意力日志再决定下一步怎么走。