从零跑通一套 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.git
Set-Location hermes-auto-workflow
python --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 `
--start 2026-08-01 `
--end 2026-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。这样每次只增加一个外部变量,报错时也更容易知道问题出在哪一层。
更多推荐



所有评论(0)