从零跑通一套 AI Agent 自动复盘工作流
我平时把任务记在滴答清单里,长一点的复盘放进 Notion,真正执行时还会调用 AI Agent。信息分散以后,每天最麻烦的部分变成了复制和整理。我后来把定时触发、任务读取、复盘生成和 Notion 写入接成了一条工作流。
这篇文章带你跑通一个经过脱敏的公开版本。第一次运行不需要滴答 token,也不会写入 Notion。确认本地输出正常以后,再逐步接入真实服务。
项目源码 飞书项目案例 完整作品集
跑完以后能得到什么
你会先在终端生成一份周复盘 Markdown,随后可以选择接入滴答清单和 Notion。公开仓库提供四个 Python 脚本、环境变量模板、定时任务结构样例、合成输出和排错文档。
数据按下面的顺序流动。
定时触发 ↓ 读取未完成任务或已完成任务 ↓ AI Agent 整理任务数据 ↓ 生成复盘 Markdown ↓ 人工检查 dry-run ↓ 可选写入 Notion运行前准备
| 项目 | 要求 | 第一次运行是否必需 |
|---|---|---|
| Python | 3.10 或更高版本 | 是 |
| Git | 用于克隆仓库 | 是 |
| 滴答清单 CLI | 读取未完成任务时使用 | 否 |
| 滴答官方 MCP token | 读取已完成任务时使用 | 否 |
| Notion Integration | 写入真实页面时使用 | 否 |
下面以 Windows PowerShell 为例。Linux 和 macOS 的脚本参数相同,只需要改环境变量写法。
先克隆仓库并进入目录。
git clone https://github.com/2268499465q-beep/hermes-auto-workflow.gitSet-Locationhermes-auto-workflowpython--version第一步先做零凭据检查
先检查四个脚本能否被 Python 编译。
python-m compileall-q scripts如果当前目录不允许生成__pycache__,可以把缓存临时放进系统临时目录。
$env:PYTHONPYCACHEPREFIX =Join-Path$env:TEMP"hermes-auto-workflow-pycache"python-m compileall-q scripts随后检查命令入口。运行--help不需要任何 token。
python scripts/dida_undone.py--help python scripts/dida_completed_mcp.py--help python scripts/notion_api.py--help python scripts/notion_bridge.py--help四条命令都能显示帮助信息,说明 Python 入口和模块导入已经正常。此时还没有访问滴答或 Notion。
第二步生成第一份周复盘
下面这条命令只生成 Markdown,不发出网络请求。
python scripts/notion_bridge.py weekly `--date 2026-08-08 `--highlights"完成接口联调|补充异常处理"`--challenges"测试数据不足"`--actions"补齐边界用例|复查输出"`--dry-run我在公开仓库中实际运行后得到下面的输出。
# 周复盘 2026-08-08 ## 本周完成 - 完成接口联调 - 补充异常处理 ## 主要阻塞 - 测试数据不足 ## 下周行动 - 补齐边界用例 - 复查输出参数中的多条内容用竖线分隔。--dry-run存在时,脚本打印 Markdown 后退出,不检查 Notion 凭据,也不会创建页面。
第三步接入滴答清单
公开脚本不会自动读取.env。仓库里的.env.example只是变量清单,真实值需要进入当前进程的环境变量,不能写回代码。
读取未完成任务
先把项目 ID 和显示名写进DIDA_PROJECTS_JSON。下面只有占位符。
$env:DIDA_PROJECTS_JSON ='[{"id":"<PROJECT_ID>","name":"示例清单"}]'$env:DIDA_CLI_PATH ="dida"如果滴答 CLI 不在 PATH 中,把DIDA_CLI_PATH改成可执行文件的完整路径。随后读取指定清单。
python scripts/dida_undone.py `--project-names"示例清单"`--redact-titles--redact-titles会把真实标题改成Task 1、Task 2。调试截图和公开演示建议一直保留这个参数。输出结构类似下面这样,数量取决于你的清单。
== 示例清单 (2) == [TASK] Task 1 [HIGH] Task 2 TOTAL incomplete: 2读取已完成任务
已完成任务通过滴答官方 MCP 读取。token 仍然只放进当前进程。
$env:DIDA_API_TOKEN ="<YOUR_DIDA_API_TOKEN>"$env:WORKFLOW_TIMEZONE_OFFSET ="+08:00"python scripts/dida_completed_mcp.py `--start2026-08-01 `--end2026-08-08 `--redact-titles脚本会逐日查询,再解析每条任务的completedTime。它会按本地时间窗口过滤,并用任务 ID 去重。日期接口返回成功,不代表每条数据都落在目标日期内,这一步二次过滤不能省。
第四步写入 Notion 测试页面
先在 Notion 创建一个测试页面和 Integration,再把 Integration 加入测试页面的共享范围。token 有效但页面没有授权时,接口仍会返回 403。
周、月、年复盘需要下面三个变量中的前两个。日复盘使用第三个页面 ID。
$env:NOTION_API_KEY ="<YOUR_NOTION_API_KEY>"$env:NOTION_PARENT_PAGE_ID ="<PARENT_PAGE_ID>"$env:NOTION_DIARY_PAGE_ID ="<DIARY_PAGE_ID>"先保留--dry-run检查日期和正文。确认输出以后,再去掉这个参数。
python scripts/notion_bridge.py weekly `--date 2026-08-08 `--highlights"完成接口联调|补充异常处理"`--challenges"测试数据不足"`--actions"补齐边界用例|复查输出"写入成功时,终端会显示新页面 ID。
Created review page: <PAGE_ID>建议第一次只写测试页面。确认标题、层级和列表都正常以后,再换成正式父页面 ID。
第五步加入定时触发
仓库中的examples/cron-jobs.example.json提供了两类任务结构。
{"name":"周复盘草稿示例","schedule":"0 9 * * 6","timezone":"Asia/Shanghai","enabled":false,"command":"python scripts/notion_bridge.py weekly --date <DATE> --dry-run"}<DATE>需要由你的调度器或 Agent 替换为运行日期,不能原样复制执行。第一次创建任务时保持enabled为false,手动触发一次并检查退出码。确认 dry-run 输出以后,再启用正式时间表和外部写入。
Windows 任务计划程序需要特别检查三个位置。
- 程序填写实际的
python.exe路径。 - 参数填写脚本路径和参数。
- 起始目录填写仓库根目录。
定时环境通常不会完整继承交互式终端的 PATH。终端里能运行,定时任务里找不到命令时,先检查 Python、滴答 CLI 和工作目录的完整路径。
常见失败怎样定位
| 现象 | 常见原因 | 处理办法 |
|---|---|---|
ModuleNotFoundError | Python 运行时没有正确加入脚本目录 | 拉取最新仓库版本,再运行四条--help |
无法创建__pycache__ | 当前目录只读或权限受限 | 设置PYTHONPYCACHEPREFIX到临时目录 |
| 未完成任务为零 | 项目名不匹配或 CLI 未登录 | 检查DIDA_PROJECTS_JSON和--project-names |
| 已完成任务数量偏多 | 时间窗口或时区不符合预期 | 检查起止日期和WORKFLOW_TIMEZONE_OFFSET |
| Notion 返回 401 | token 无效或没有进入当前进程 | 重新设置环境变量,不要打印 token 排查 |
| Notion 返回 403 | Integration 没有目标页面权限 | 在测试页面的共享设置中添加 Integration |
| 定时任务找不到命令 | PATH 和工作目录不同 | 使用 Python 与 CLI 的完整路径 |
公开版本保留了哪些边界
这个仓库来自真实运行过的个人工作流,公开版没有携带生产 token、项目 ID、页面 ID、原始任务、运行日志和个人提示词。三个示例文件都是合成内容。
我没有逐句清洗生产日志后再上传。日志会同时暴露任务标题、时间、分类和失败命令,删掉一两个名字仍然可能还原个人信息。公开示例从零编写,风险更可控。
如果你准备把自己的自动化脚本放到 GitHub,至少检查源码、配置、数据库、日志、运行输出和文档元数据。代码里看不到 token,只能说明第一层检查通过。
后续从哪里继续
完整脚本、环境变量模板、架构图和排错文档放在 GitHub 仓库。项目为什么这样拆分、哪些部分由我完成、公开时删掉了什么,放在 飞书项目案例页。
建议先跑通第二步的 dry-run,再决定是否接入真实任务和 Notion。这样每次只增加一个外部变量,报错时也更容易知道问题出在哪一层。
