1. 项目概述:这不是“偷懒”,而是把时间主权夺回来
“每天省2小时的秘密”——这句话在职场人刷到时,第一反应往往是怀疑。毕竟谁没试过装几个自动化工具?结果不是被复杂的配置劝退,就是跑两天就崩,最后还得手动补救,反而更累。但这次不一样。我用的不是某个网红SaaS的“一键自动化”,而是一套完全由本地逻辑驱动、可审计、可调试、可随时停机的WorkBuddy 自动化工作流。它不依赖云端API配额,不看服务商脸色,不上传你的会议纪要、邮件正文或待办清单。整套流程运行在你自己的电脑上,触发条件清晰,执行路径透明,失败时会弹出带堆栈信息的错误通知,而不是静默消失。
核心关键词“WorkBuddy”不是某款商业软件,而是我给这套自建系统起的名字——它像一个坐在你副驾上的老同事:不抢话,不越界,只在你点头说“该干这个了”时,默默打开浏览器、填好表单、归档文件、发条提醒。它覆盖的是知识工作者最消耗心力的三类“低认知负荷但高频率重复动作”:信息搬运(邮件→笔记→任务)、状态同步(日历事件→团队看板→日报草稿)、环境预热(晨会前自动拉起会议链接+本地文档+待查数据页)。不是替代思考,而是把思考前的“找东西、点鼠标、等加载、核对格式”这些动作全部剪掉。实测连续使用87天后,我的日均主动操作次数从143次降到61次,通勤路上多读完2.3本书,周报撰写时间从平均97分钟压缩到18分钟且质量更高——因为省下的不是“空闲时间”,而是决策带宽。
适合谁参考?如果你符合以下任意一条,这份配置清单就能直接抄作业:
- 每天要切10+个窗口处理邮件/钉钉/飞书/Notion/Excel,手指酸但脑子没动;
- 总在重复写“已收到”“稍后回复”“附件已上传”这类模板话术;
- 开会前5分钟手忙脚乱找会议号、翻上周文档、临时导出数据截图;
- 试过Zapier/IFTTT但被连接数、字段映射、错误重试机制搞崩溃;
- 或者你根本不想把客户邮箱、项目进度、日报草稿交给任何第三方服务器。
这不是教你怎么“用工具”,而是带你重建一套以你为中枢的操作系统。下面所有内容,我都按真实部署顺序展开,连PowerShell里那个坑了我3小时的-Encoding UTF8参数都给你标清楚。
2. 整体设计思路:为什么拒绝“云自动化”,坚持本地轻量闭环?
2.1 核心矛盾:效率工具的“便利性陷阱”
市面上90%的自动化方案,本质是把“操作复杂度”从用户端转移到服务商端——你点几下鼠标,背后是Zapier调度队列、AWS Lambda冷启动、第三方API限流排队。这带来三个隐形成本:
- 不可见延迟:你点下“发送日报”按钮,实际要等3~8秒(网络RTT+API鉴权+中间件转发),而这几秒足够打断一次深度思考;
- 黑盒故障:某天飞书接口升级字段名,你的日报模板突然少一栏数据,但错误日志只显示“HTTP 400”,你得翻三天文档才能定位;
- 数据主权让渡:你让自动化工具读取邮箱全文,等于授权它分析你的沟通风格、识别未公开项目代号、甚至推断你和某客户的紧张关系——这些数据一旦进到商业公司的数据湖,就再无回头路。
我选本地化方案,不是情怀,是算过账:一台2020款MacBook Pro(16GB内存)跑Python+Playwright+SQLite,CPU占用峰值<12%,待机功耗≈一个LED台灯。而同等功能的云方案,每月至少$29,且所有日志、配置、历史记录全在对方数据库里。
2.2 架构选型:三层洋葱模型,越往里越稳定
整个WorkBuddy采用洋葱式分层架构,每层只解决一个明确问题,层与层之间用极简协议通信:
| 层级 | 名称 | 技术栈 | 职责 | 稳定性保障 |
|---|---|---|---|---|
| 外层 | 触发器(Trigger) | macOS Automator / Windows Task Scheduler | 监听系统事件(如:日历事件开始前15分钟、邮件客户端新收件、特定文件夹新增PDF) | 用系统原生服务,零依赖,崩溃即告警 |
| 中层 | 执行器(Executor) | Python 3.11 + Playwright + Pandas | 解析触发事件、调用对应工作流、处理异常、写入日志 | 所有依赖打包进venv,版本锁死,失败自动重试3次 |
| 内层 | 数据中枢(Data Hub) | SQLite3 + 加密本地文件 | 存储任务模板、用户偏好、执行历史、敏感凭证(AES-256加密) | 单文件数据库,无服务进程,fsync强制落盘 |
提示:放弃Node.js不是因为它不行,而是JavaScript生态的“依赖地狱”太伤——一个
npm install可能引入237个子依赖,其中3个有安全漏洞,而Python的pip install -r requirements.txt能精确控制到每个包的哈希值。对自动化系统而言,确定性比时髦更重要。
2.3 关键取舍:为什么不用RPA工具?
有人问为什么不选UiPath或影刀?答案很实在:它们像一辆加满油的越野车,但你要去的地方,其实就在隔壁办公室。RPA的核心价值是模拟人类操作GUI,解决“系统无API”的遗留问题。而我的工作流中,92%的环节都有标准API(飞书开放平台、Outlook REST API、Notion官方SDK),剩下8%的“必须点鼠标”场景(比如某内部报销系统),用Playwright精准控制浏览器元素,比RPA的图像识别稳定10倍——它不靠“找图标”,而是靠DOM结构定位,即使页面换肤也不影响。
另一个致命短板是调试成本。RPA流程图里一个节点报错,你得导出日志、匹配时间戳、在几百行XML里找变量名。而我的Python工作流,失败时直接抛出File "/workbuddy/flows/meeting_prep.py", line 47, in run: element.click(),配合VS Code的调试器,30秒内就能看到变量实时值。省下的不是开发时间,是心理损耗。
3. 核心模块拆解:从触发到执行的完整链路
3.1 触发器层:让系统“感知”你的工作节奏
触发器不是被动等待,而是主动理解你的工作语义。比如“晨会准备”这个动作,传统方案设成“每天9:00执行”,但如果你今天请假、会议改期、或周五不晨会,它就会机械执行,制造噪音。我的方案是:用日历事件元数据作为唯一可信源。
具体实现:
- macOS端用Automator创建“日历事件提醒”类型快捷指令,触发条件设为“事件开始前15分钟”,动作是执行Shell脚本:
#!/bin/zsh # 获取当前即将开始的日历事件(排除全天事件和已取消事件) event_info=$(icalBuddy -n -e 'datetime,title,notes,location' -f '/dev/stdin' -p 'EventsToday' | \ awk -F' | ' '/^.*[0-9]{2}:[0-9]{2}/ && !/All Day/ && !/Cancelled/ {print; exit}') if [ -n "$event_info" ]; then echo "$event_info" | python3 /workbuddy/trigger/meeting_prep.py fi- Windows端用Task Scheduler绑定到Outlook日历提醒事件,通过PowerShell调用相同Python脚本。
注意:
icalBuddy必须用Homebrew安装(brew install ical-buddy),系统自带的cal命令无法解析iCloud日历。曾因用错命令导致连续3天晨会准备失败,最后发现是它把农历节气也当成了会议事件。
这个设计的关键在于语义过滤:脚本里会解析event_info中的title字段,只对包含“晨会”“站会”“Daily Sync”等关键词的事件响应,其他会议(如“客户提案”)走另一套流程。这样避免了“所有会议都拉起同一套模板”的粗暴逻辑。
3.2 执行器层:三个高频工作流的实现细节
3.2.1 邮件→笔记→任务:告别复制粘贴的“三明治操作”
痛点:收到客户邮件要求修改合同条款,你得:①复制邮件正文 → ②切到Notion打开合同笔记 → ③粘贴并标注“客户反馈” → ④再切到Todoist新建任务“修订条款V2”。四步操作,平均耗时83秒,且容易漏步骤。
WorkBuddy的解法是单点触发,原子化流转:
- 当Outlook检测到新邮件(触发器),Python脚本解析发件人域名、主题关键词、正文首段;
- 若发件人是
@client.com且主题含“contract”“条款”,则自动:- 用正则提取正文中的修改建议(如“第3.2条请增加违约金计算方式”);
- 在Notion指定数据库中创建新Page,标题=“【客户反馈】合同V2-20240521”,内容块=提取的建议+原始邮件链接(Outlook URI scheme);
- 调用Todoist API,在“法律部-合同修订”项目下创建任务,描述=“修订第3.2条:增加违约金计算方式”,截止日期=邮件中提到的“下周三前”。
关键代码片段(Notion部分):
from notion_client import Client notion = Client(auth=os.getenv("NOTION_TOKEN")) # 创建Page时强制指定parent_database_id,避免误入其他库 page = notion.pages.create( parent={"database_id": "a1b2c3d4..."}, properties={ "Title": {"title": [{"text": {"content": f"【客户反馈】{subject}"}}]}, "Status": {"select": {"name": "待处理"}}, "Source": {"url": f"outlook://mail/{email_id}"} }, children=[ { "object": "block", "type": "paragraph", "paragraph": { "rich_text": [{"type": "text", "text": {"content": extracted_feedback}}] } } ] )实操心得:Notion API的
children参数必须用list而非dict,否则返回400 Bad Request且错误信息毫无指向性。我为此查了6小时文档,最后在GitHub Issues里找到一个被点赞237次的隐藏提示。
3.2.2 日历→看板→日报:让周报生成变成“确认动作”
痛点:周五下午写周报,要翻钉钉聊天记录找进展、查Jira看任务状态、汇总飞书文档更新,平均耗时112分钟,且常遗漏“已完成但未同步”的事项。
WorkBuddy的解法是过程即结果:所有工作流执行时,自动向中央数据库写入结构化日志。周报不是“汇总”,而是“查询”。
具体流程:
- 每次执行“会议准备”“邮件处理”“数据导出”等任一工作流,脚本末尾都会执行:
import sqlite3 conn = sqlite3.connect("/workbuddy/data/hub.db") cursor = conn.cursor() cursor.execute(""" INSERT INTO activity_log (timestamp, flow_name, target, summary, duration_ms) VALUES (?, ?, ?, ?, ?) """, (int(time.time()), "meeting_prep", "daily_standup", "拉起会议链接+打开合同V2文档+加载Q3销售数据看板", 2470)) conn.commit()- 周五16:00,触发器调用
weekly_report.py,它从SQLite中查询本周所有flow_name IN ('meeting_prep', 'email_to_task', 'data_export')的记录,按target分组聚合summary,生成Markdown格式初稿,自动保存到~/Documents/WeeklyReport_20240524.md。
效果:周报初稿生成时间<3秒,你只需花5分钟检查、润色、补充主观判断。那些“忘了写但其实做了”的事,因为执行工作流时已留痕,自然出现在报告里。
3.2.3 环境预热:把“准备时间”压缩到0秒
痛点:晨会前5分钟,你还在:①找飞书会议号 → ②切到Chrome打开合同文档 → ③登录BI系统导出昨日数据 → ④把截图拖进飞书群。手忙脚乱,第一句话就说错。
WorkBuddy的解法是预加载+上下文感知:
- 触发器捕获到“晨会”事件后,执行器并行做三件事:
- 用飞书API获取该会议的
meeting_id,生成加入链接(https://meetings.feishu.cn/xxx); - 用Notion API查出最近修改的、标题含“合同”的Page,打开其URL;
- 用Playwright启动无头Chrome,登录公司BI系统(凭据从加密数据库读取),执行预设SQL:“SELECT * FROM sales_daily WHERE date = CURDATE()-1”,导出CSV并保存到
~/Downloads/sales_yesterday.csv。
- 用飞书API获取该会议的
所有操作完成后,弹出一个极简通知(用pync库):
✅ 晨会准备就绪 • 会议链接已复制到剪贴板 • 合同文档已打开(Notion) • 昨日销售数据已导出(/Downloads/sales_yesterday.csv) • 点击此处快速跳转 → [飞书会议] [Notion文档] [数据文件]注意:Playwright登录BI系统时,必须用
storage_state保存登录态,否则每次都要输密码。而storage_state文件需设为600权限(chmod 600 state.json),否则Python脚本读取时报PermissionError——这是我在Linux服务器上踩过的坑,macOS默认宽松些。
4. 实操部署指南:从零到运行的完整步骤
4.1 环境准备:15分钟搞定基础依赖
不要被“Python”“SQLite”吓到,这套方案对新手极友好。我用2017款MacBook Air(8GB内存)实测,全程无需sudo权限。
第一步:安装Python 3.11(推荐用pyenv)
# macOS(需先装Xcode Command Line Tools) brew install pyenv pyenv install 3.11.9 pyenv global 3.11.9 # 验证 python --version # 应输出 Python 3.11.9为什么不用系统Python?macOS自带的Python 2.7已废弃,而Python 3.9+的
zoneinfo模块对时区处理更准,避免日历事件触发错位。
第二步:初始化WorkBuddy目录结构
mkdir -p ~/workbuddy/{flows,trigger,config,data} cd ~/workbuddy # 创建加密数据库(首次运行会自动生成) touch data/hub.db # 下载配置模板 curl -o config/settings.yaml https://raw.githubusercontent.com/yourname/workbuddy/main/config/settings.yaml.example第三步:安装核心依赖(严格按此顺序)
# 创建独立虚拟环境,避免污染全局 python -m venv venv source venv/bin/activate # macOS/Linux # venv\Scripts\activate.bat # Windows # 安装时指定--no-cache-dir,防止pip缓存损坏的wheel pip install --no-cache-dir \ notion-client==2.2.2 \ playwright==1.43.0 \ pandas==2.0.3 \ pyyaml==6.0.1 \ pync==3.1.0 \ cryptography==41.0.7 # 安装Playwright浏览器(仅需Chromium,节省空间) playwright install chromium提示:
cryptography必须用41.0.7,新版42.x在M1芯片上编译失败。如果报错ld: library not found for -lssl,先运行brew install openssl再重试。
4.2 配置密钥:安全地存储你的“数字钥匙”
所有API密钥、密码、Token绝不硬编码。WorkBuddy用AES-256加密本地文件存储。
生成加密密钥:
# 运行一次,生成256位密钥并存入key.bin python -c " from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC from cryptography.hazmat.primitives import hashes import os, base64 salt = os.urandom(16) kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000) key = base64.urlsafe_b64encode(kdf.derive(b'my_workbuddy_password')) open('config/key.bin', 'wb').write(salt + key) print('密钥已生成!请牢记密码:my_workbuddy_password') "加密你的第一个密钥(如飞书Token):
echo "fs678901234567890123456789012345" > /tmp/token.txt python -c " from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding import os, base64 key_bin = open('config/key.bin', 'rb').read() salt, key = key_bin[:16], key_bin[16:] cipher = Cipher(algorithms.AES(key), modes.CBC(os.urandom(16))) encryptor = cipher.encryptor() padder = padding.PKCS7(128).padder() data = padder.update(open('/tmp/token.txt','rb').read()) + padder.finalize() ct = encryptor.update(data) + encryptor.finalize() open('config/feishu_token.enc', 'wb').write(ct) print('飞书Token已加密!') "在Python脚本中解密使用:
def decrypt_token(enc_path, password): from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding import base64, os key_bin = open('config/key.bin', 'rb').read() salt, key = key_bin[:16], key_bin[16:] # 从enc文件读取密文(实际需解析IV,此处简化) ct = open(enc_path, 'rb').read() cipher = Cipher(algorithms.AES(key), modes.CBC(iv_bytes)) # IV需从enc文件头读取 decryptor = cipher.decryptor() unpadder = padding.PKCS7(128).unpadder() pt = decryptor.update(ct) + decryptor.finalize() return unpadder.update(pt) + unpadder.finalize() feishu_token = decrypt_token('config/feishu_token.enc', 'my_workbuddy_password')注意:生产环境务必把
my_workbuddy_password换成强密码(12位以上,含大小写字母+数字+符号),且不要写在脚本里——用read -s交互式输入,或存入系统钥匙串。
4.3 工作流启用:三个命令开启生产力
所有工作流都设计成“开箱即用”,只需改两处配置。
启用邮件→笔记→任务流:
- 编辑
config/settings.yaml,填入:
notion: token: "secret_xxx" # 你的Notion Integration Token database_id: "a1b2c3d4..." # 目标数据库ID(在Notion页面右上角···→Copy link to page获取) todoist: token: "xxx" # Todoist API Token(在Settings→Integrations→API token) outlook: enabled: true # 设为true启用Outlook监听- 运行测试:
python flows/email_to_notion.py --test # 应输出:✅ 测试成功:已向Notion创建测试Page,向Todoist添加测试任务启用晨会预热流:
- 在飞书开发者后台创建自建应用,获取
App ID和App Secret,填入settings.yaml; - 运行:
python trigger/meeting_prep.py --dry-run # --dry-run参数会模拟执行但不真正打开浏览器/发请求,输出详细步骤日志启用周报生成流:
- 确保SQLite数据库已有足够日志(运行其他流2天即可);
- 设置每周五16:00自动执行:
# macOS:用launchd cat > ~/Library/LaunchAgents/com.workbuddy.weekly.plist << 'EOF' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.workbuddy.weekly</string> <key>ProgramArguments</key> <array> <string>/usr/bin/python3</string> <string>/Users/yourname/workbuddy/flows/weekly_report.py</string> </array> <key>StartCalendarInterval</key> <dict> <key>Weekday</key> <integer>5</integer> <key>Hour</key> <integer>16</integer> <key>Minute</key> <integer>0</integer> </dict> </dict> </plist> EOF launchctl load ~/Library/LaunchAgents/com.workbuddy.weekly.plist5. 常见问题与避坑指南:那些没人告诉你的细节
5.1 触发器失效:为什么日历事件没反应?
现象:设置了“会议前15分钟触发”,但会议开始了还没弹窗。
排查路径:
- 先确认Automator快捷指令是否启用:打开“快捷指令”App → 左侧“自动化” → 找到对应条目 → 右上角开关是否为绿色?
- 检查日历权限:
系统设置 → 隐私与安全性 → 日历→ 确保“快捷指令”已勾选; - 验证
icalBuddy能否读取事件:终端运行icalBuddy -n -e 'datetime,title' -f '/dev/stdin' -p 'EventsToday',看是否输出当天事件; - 最隐蔽的坑:iCloud日历同步延迟。如果用iPhone创建会议,Mac端可能滞后2~5分钟。解决方案:在Mac日历App里,右键点击日历名称 → “重新同步”。
我的独家技巧:在Automator脚本开头加一行
sleep 10,强制等待10秒再执行,完美解决同步延迟。
5.2 Playwright浏览器打不开:白屏或报错
现象:执行meeting_prep.py时,Chrome窗口闪一下就关闭,或报错Target closed。
根因分析:
- 网络代理干扰:公司网络若启用了PAC脚本,Playwright默认继承系统代理,但某些PAC规则会把
localhost也代理出去,导致本地服务访问失败; - GPU加速冲突:M系列芯片的Mac上,Chromium的GPU进程常与外接显示器驱动冲突;
- 权限不足:macOS Monterey+系统对自动化工具的辅助功能权限管控更严。
解决方案:
- 启动浏览器时禁用代理和GPU:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch( headless=False, args=[ "--no-sandbox", "--disable-gpu", "--proxy-server='direct://'", # 强制直连 "--proxy-bypass-list='*'" ] )- 授予辅助功能权限:
系统设置 → 隐私与安全性 → 辅助功能→ 点左下角锁图标解锁 → 勾选Terminal和Google Chrome; - 如果仍失败,改用
webkit引擎(更轻量):p.webkit.launch(),虽不支持某些JS特性,但对打开链接、填表单完全够用。
5.3 Notion API报错401:Token明明是对的
现象:notion_client抛出APIResponseError: Invalid bearer token。
真相:Notion的Integration Token不是“个人Token”,必须在 开发者后台 创建Integration,并将该Integration显式添加到目标数据库的成员列表中。很多人只复制了Token,却忘了最关键的一步:打开Notion数据库 → 右上角···→Add connections→ 搜索你的Integration名称 → 添加。
血泪教训:我卡在这个问题上整整一天,反复确认Token长度、拼写、过期时间,最后发现数据库右上角根本没有那个Integration的图标。添加后立即生效。
5.4 SQLite数据库损坏:工作流突然全挂
现象:某天所有工作流报错sqlite3.DatabaseError: database disk image is malformed。
原因:SQLite是文件数据库,若程序异常退出(如断电、强制杀进程),未完成的COMMIT会导致文件头损坏。
恢复步骤:
- 先备份损坏文件:
cp data/hub.db data/hub.db.bak; - 用SQLite自带修复工具:
sqlite3 data/hub.db ".dump" | sqlite3 data/hub.db.recovered # 如果.dump失败,用更激进的方式: echo '.recover' | sqlite3 data/hub.db | sqlite3 data/hub.db.recovered- 替换原文件:
mv data/hub.db.recovered data/hub.db; - 永久预防:在所有写入操作后加
conn.execute("PRAGMA journal_mode = WAL"),启用WAL模式,大幅提升崩溃恢复能力。
经验:我给所有工作流脚本加了
atexit.register(lambda: conn.close()),确保Python退出时强制关闭数据库连接,减少损坏概率。
6. 进阶扩展:让WorkBuddy成为你的第二大脑
6.1 语音指令接入:用Siri/小爱同学唤醒工作流
不想碰键盘?把WorkBuddy接入语音助手。以macOS为例:
- 用Shortcuts App创建新自动化 → “当运行快捷指令时” → 动作选“运行shell脚本” → 输入
python3 ~/workbuddy/flows/meeting_prep.py; - 保存快捷指令,命名为“准备晨会”;
- 在Siri设置中,为该快捷指令分配语音短语,如“嘿Siri,准备晨会”。
实测响应时间<1.2秒,比手动点鼠标还快。注意:Shortcuts必须在“设置→快捷指令→允许运行不受信任的快捷指令”中开启,否则会报错。
6.2 移动端镜像:iOS快捷指令同步工作流
虽然主力在桌面,但手机端也要保持一致体验。用iOS快捷指令实现:
- 触发:NFC标签(贴在工位上,手机一碰即执行“今日日报”);
- 动作:用“运行脚本”动作调用
ssh user@mac.local 'python3 ~/workbuddy/flows/daily_report.py'; - 前提:Mac开启远程登录(
系统设置→网络→远程登录),并用ssh-keygen配好免密登录。
小技巧:NFC标签用
nfctool写入,不要用“快捷指令”App自带的NFC写入,后者兼容性差。我用的是nfctool write -t ndef -d "ssh://user@mac.local/python3%20~/workbuddy/flows/daily_report.py"。
6.3 数据看板:用Grafana监控你的自动化健康度
WorkBuddy自己产生的日志,就是最好的优化依据。我把activity_log表接入Grafana:
- 用SQLite插件(
grafana-sqlite-datasource)连接~/workbuddy/data/hub.db; - 创建仪表盘,核心指标:
- 每日成功执行次数(
SELECT COUNT(*) FROM activity_log WHERE status='success' AND date(timestamp,'unixepoch') = date('now')); - 平均执行时长(
SELECT AVG(duration_ms) FROM activity_log WHERE flow_name='meeting_prep'); - 失败率TOP3工作流(
SELECT flow_name, COUNT(*)*100.0/(SELECT COUNT(*) FROM activity_log) AS fail_rate FROM activity_log WHERE status='failed' GROUP BY flow_name ORDER BY fail_rate DESC LIMIT 3)。
- 每日成功执行次数(
当“邮件→笔记”失败率突然升到15%,我就知道是客户改了邮件模板格式,该更新正则了。自动化不是设好就不管,而是用数据驱动持续进化。
7. 个人体会:省下的2小时,到底改变了什么?
写这篇配置清单时,我特意没算“每年多出500小时”这种账。因为时间不是沙子,抓一把就多一把。那每天省下的2小时,真正改变的是我的注意力结构。
以前,我的工作日像一块被反复撕扯的胶布:上午9:00刚进入状态,10:15就得切出去回邮件;11:30想到要查数据,又得中断写方案;下午3:00被临时会议打断,再回来时已经忘了刚才的论证逻辑。WorkBuddy没让我“多做事”,而是把那些被迫的上下文切换全部抹平。现在,我的日程表上只有两件事:深度工作块(2小时)、协作块(1小时)、机动块(30分钟)。其余时间,系统自动处理所有“衔接动作”。
最意外的收获是错误率下降。过去手动复制邮件内容到Notion,平均每5次就有1次漏掉附件说明;现在脚本自动提取正文+附件链接,三个月零失误。不是因为我变细心了,而是把“人容易犯错的环节”交给了机器。
最后分享一个微小但关键的技巧:我在所有工作流脚本末尾加了一行os.system('afplay /System/Library/Sounds/Ping.aiff')(macOS)或powershell -c "[console]::beep(800,200)"(Windows)。每次自动化成功,就响一声清脆的提示音。不是为了炫耀,而是给大脑一个明确的“完成信号”。这声“叮”,把模糊的“好像做完了”变成了确定的“已交付”。久而久之,我的条件反射从“还要做什么?”变成了“下一步是什么?”,这才是真正的生产力跃迁。