1. 为什么日报周报月报总在重复劳动:openclaw 与 Notion 自动化管理系统要解决的真实问题
先说结论:openclaw + Notion 的工作日报/周报/月报自动化管理系统,本质是把「收集素材 → 生成结构化文本 → 写入数据库 → 定时触发」这条链路交给 AI 和调度器,人只负责在 Notion 里看结果。它适合每天有 Git 提交、又在 Notion 里记活动日志的开发者,尤其是那种「明明干了不少活,写周报时却想不起来」的人。
我自己的痛点是:一天下来提交了七八次代码,Notion 里也记了几条笔记,但到了晚上十点要写日报,脑子里只剩「今天好像挺忙」。手动翻 Git log、翻 Notion 页面、再组织语言,一套下来二十分钟起步。周报更痛苦,要把五天的日报再读一遍,去重、归类、提炼。月报基本靠回忆,写出来自己都不信。
这套系统的思路很直接:让 Claude Code 通过 Skill 读取 Git 提交记录和 Notion 活动日志,生成结构化报告,再通过 Notion MCP Server 写回数据库。openclaw 负责定时调度,用自然语言就能设置「每周一到周六晚上十点执行日报」。整个链路里,唯一需要人工维护的是config.json里的仓库路径和数据库 ID。
但真正落地时,很多人卡在同一个地方:多工具调用时鉴权分散、endpoint 不统一。Claude Code 要调模型,Notion MCP 要调 Notion API,openclaw 触发时又要保证环境变量一致。如果每个工具各配一套 Key、各写一个 Base URL,改起来就是灾难。这篇就从这个配置入口切入,把 settings 改到 TaoToken 统一通道,给出可复制的配置片段,并附一次日报生成链路的完整验证。
核心检索词先摆出来:openclaw 定时调度、Notion 数据库写入、Claude Code Skills、自动化管理系统、settings 配置。这几个词贯穿全文,你搜到这篇大概率就是被其中某个卡住了。
2. TaoToken 前置:把 Claude Code 与 Notion MCP 的鉴权收口到统一通道
在讲具体配置之前,得先把「为什么要统一通道」说清楚。这套自动化系统里,至少有三个地方会发起外部请求:
第一,Claude Code 本身要调用大模型生成报告内容。第二,Notion MCP Server 要调用 Notion API 读写数据库。第三,openclaw 在触发claude -p "/daily-report"时,需要保证子进程能拿到正确的环境变量。
如果 Claude Code 走一个 endpoint、Notion MCP 走另一个、openclaw 又继承了一套旧的 shell 环境,那排查问题时你会面对三个不同的报错来源。我试过最离谱的一次:终端里手动跑claude -p "/daily-report"完全正常,但 openclaw 定时触发就报 401,查了半天发现是调度器启动时的环境变量没加载.zshrc。
TaoToken 在这里的角色是统一 API 通道。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api 。你需要做的,是把 Claude Code 的模型请求指向这个统一 Base URL,用同一个 Key 管理。这样无论手动执行还是定时触发,鉴权来源只有一个,出问题也只需要查一处。
具体操作上,先去控制台创建 API Key。控制台地址带归因参数: https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建完 Key 之后,在 API Keys 页面可以管理: https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
这里有个关键点:Claude Code 的配置文件和 Notion MCP 的配置文件是分开的,但两者都可以通过环境变量读取同一个 Key。我建议的做法是,在 shell 的 profile 里 export 一个TAOTOKEN_API_KEY,然后 Claude Code 的 settings 和 MCP 的 env 都引用这个变量。这样改 Key 只需要改一处。
如果你还没装 Claude Code,接入文档在这里: https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。文档里有完整的 Base URL 和 Model ID 对照。对于这套日报系统,模型建议选支持长上下文和结构化输出的,因为报告生成需要读取多天的日志并去重。
另外提一句,如果你打算长期跑这套自动化,甚至后续扩展成 Agent 工作流,可以看看 Coding Plan: https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。它更适合高频、长期的编码和自动化场景,比按次调用更省心。
前置工作做完,你应该手上有三样东西:一个可用的 API Key、确认过的 Base URL、以及 Claude Code CLI 能正常启动。接下来进入配置环节。
3. 可复制配置:settings.json、.mcp.json 与 config.json 三件套
这一节是全文最核心的部分,直接给可复制的片段。路径和原文保持一致,你照着改就行。
3.1 Claude Code settings 改到 TaoToken
Claude Code 的配置文件通常在~/.claude/settings.json。如果你之前用的是默认配置,需要把模型请求的 Base URL 和 Key 改到 TaoToken 统一通道。可复制的 JSON 片段如下:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoTokenKey", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" }, "permissions": { "allow": [ "Bash(git log:*)", "Bash(bash scripts/gather-git-logs.sh:*)", "Read(~/.claude/skills/**)" ] } }这里三个字段必须写全:Base URL、Key、Model ID。Base URL 用https://taotoken.net/api,不要加 UTM 参数,那是给网页用的。Model ID 按你实际可用的填,接入文档里有对照表。permissions.allow里放的是这套日报系统需要执行的命令,git log和收集脚本必须放行,否则 Skill 执行到一半会被权限拦截。
如果你不想把 Key 明文写在 settings.json 里,可以改成引用环境变量:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "${TAOTOKEN_API_KEY}", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }然后在~/.zshrc或~/.bashrc里加一行export TAOTOKEN_API_KEY="sk-你的Key"。注意,openclaw 定时触发时如果读不到这个变量,就会报 401,后面排障章节会细说。
3.2 Notion MCP Server 配置
Notion MCP 的配置在~/.claude/.mcp.json。原文给的是标准写法,我把它和 TaoToken 的环境变量体系对齐一下:
{ "mcpServers": { "notion": { "command": "npx", "args": ["-y", "@notionhq/notion-mcp-server"], "env": { "OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer 你的NotionIntegrationToken\",\"Notion-Version\":\"2022-06-28\"}" } } } }注意这里的 Token 是 Notion Integration Token,不是 TaoToken 的 Key,两者不要混。Notion Token 的获取方式是:去 Notion Integrations 创建一个 Integration,拿到 Internal Integration Token,然后把目标数据库页面关联给这个 Integration。没关联的话,MCP 写入会报 404 或权限错误。
3.3 config.json 集中管理
项目根目录的config.json管理所有数据库 ID 和仓库路径:
{ "github": { "repos": [ "/Users/你的用户名/Documents/GitHub/你的项目" ] }, "notion": { "databases": { "activity_logs": "你的活动记录数据库ID", "daily_report": "你的日报数据库ID", "weekly_report": "你的周报数据库ID", "monthly_report": "你的月报数据库ID" } } }Notion 数据库 ID 的获取:打开数据库页面,URL 里notion.so/后面、?v=前面的 32 位字符串就是。四个数据库都要建好,字段结构参考项目模板。
配置改完后,必须运行bash test.sh。这个脚本会把config.json里的数据库 ID 通过 sed 替换同步到.claude/skills/*/SKILL.md.tpl模板,再生成最终的SKILL.md。如果你跳过这一步,Skill 文件里还是{{DAILY_REPORT_DB_ID}}这样的占位符,执行时必然失败。
三件套配完,你的目录结构应该是这样:
auto-daily-report/ ├── config.json ├── test.sh ├── .claude/ │ └── skills/ │ ├── daily-report/ │ │ ├── SKILL.md │ │ └── SKILL.md.tpl │ ├── weekly-report/ │ └── monthly-report/ ├── scripts/ │ └── gather-git-logs.sh └── logs/4. 验证请求:跑通一次日报生成链路并确认 Notion 写入
配置写完不代表能用,必须手动验证一次完整链路。这一步的目的是把「Claude Code 调用模型 → 读取 Git 日志 → 查询 Notion 活动记录 → 生成日报 → 写入 Notion 数据库」整条路走通,确认没有断点。
4.1 先跑自检
cd /path/to/auto-daily-report bash test.sh全部通过会输出「全部检查通过!」。如果报「配置文件不存在」,检查当前目录有没有config.json。如果 Skill 文件里还有{{xxx}}占位符,说明同步没执行成功,重新跑一次。
4.2 手动执行日报 Skill
claude -p "/daily-report"这条命令是非交互模式,适合验证。执行过程中你可以观察终端输出,正常会看到它先调gather-git-logs.sh收集提交,再通过 Notion MCP 查询活动日志,然后生成结构化日报,最后写入日报数据库。
如果这一步报 401,大概率是ANTHROPIC_API_KEY没生效。先在当前 shell 里echo $TAOTOKEN_API_KEY确认变量存在,再确认 settings.json 里的引用写法正确。
如果报local proxy failed或连接超时,检查 Base URL 是不是写成了带 UTM 的网页地址。API 地址就是https://taotoken.net/api,不要多加路径。
如果报reading choices之类的解析错误,通常是模型返回格式不符合 Skill 预期。可以先把 Model ID 换成一个更稳定的版本重试,或者检查 Skill 模板里的输出格式约束。
4.3 确认 Notion 写入
执行成功后,打开 Notion 的日报数据库,应该能看到一条新记录,包含日期、今日完成、进行中、阻塞项等字段。如果 Claude Code 终端显示成功但 Notion 里没有,检查两件事:一是 Integration 有没有关联到该数据库页面,二是数据库 ID 有没有填错。
4.4 验证 openclaw 定时触发
手动跑通后,再验证定时链路。在 openclaw 里用自然语言设置:
每周一到周六晚上 10 点,执行 /daily-report 技能 每周日晚上 10 点,执行 /weekly-report 技能 每月最后一天晚上 11 点,执行 /monthly-report 技能openclaw 会把这些转换成定时任务。设置完后,可以临时改一个近一点的时间点,观察是否自动触发。触发后去logs/目录看日志:
tail -50 logs/daily-report-$(date +%Y%m%d).log日志里会记录本次执行的完整过程。如果定时没触发,先确认 openclaw 进程在运行,再检查调度配置。
验证模型本身是否正常,可以走模型对话页面: https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。在那里发一条测试消息,确认 Key 和通道没问题,再回来排查 Claude Code 配置。
5. 本篇常见错排查:401、local proxy failed、reading choices 与 OAuth
这一节按真实报错来对照。你遇到的现象、可能原因、解决方法,直接查表。
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 401 Unauthorized | API Key 未生效或环境变量未加载 | 确认TAOTOKEN_API_KEY已 export,settings.json 引用正确 |
| local proxy failed | Base URL 写错或网络不通 | 改为https://taotoken.net/api,去掉多余路径 |
| reading choices 解析错误 | 模型返回格式不符合 Skill 预期 | 换稳定 Model ID,检查 Skill 模板输出约束 |
| OAuth 相关报错 | Claude Code 走了旧登录态 | 清理旧凭据,改用 API Key 模式 |
| Notion 写入 404 | Integration 未关联数据库 | 在 Notion 页面把 Integration 加为连接 |
| Skill 占位符未替换 | 未运行 test.sh | 执行bash test.sh同步配置 |
| openclaw 定时不触发 | 调度器环境变量缺失 | 在调度配置里显式注入 Key 和 Base URL |
| Claude CLI 启动失败 | CLI 未安装或不在 PATH | which claude确认,重装或加 PATH |
重点说三个高频的。
401 在定时任务里出现,手动执行却正常。这是最典型的。原因是 openclaw 触发子进程时,继承的环境变量和你交互式 shell 不一样。解决方法是在 openclaw 的任务配置里显式指定环境变量,或者把 export 写进调度器会加载的 profile 文件。不要依赖.zshrc,很多调度器不读它。
local proxy failed。这个报错通常意味着请求根本没到达 TaoToken。检查 Base URL 是不是被其他工具的代理配置覆盖了。如果你之前配过别的 endpoint,settings.json 里的ANTHROPIC_BASE_URL优先级要确认。另外,公司网络如果有出口限制,也可能导致连接失败,这种情况换网络环境测试。
reading choices。这个报错说明模型返回的内容结构不对,Skill 解析不了。常见于模型版本切换后输出格式变化。解决方法是固定一个 Model ID,不要用latest这类浮动标签。同时检查 Skill 模板里对 JSON 输出的约束是否足够明确。
关于 OAuth:Claude Code 早期版本可能走 OAuth 登录态,如果你混用了登录态和 API Key,会出现鉴权冲突。建议统一用 API Key 模式,清理~/.claude下的旧凭据文件。
排障时如果拿不准 Key 是否有效,去 API Keys 页面重新生成一个测试: https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。接入细节查文档: https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
6. 把配置收口之后:这套自动化管理系统还能怎么扩展
配置收口到 TaoToken 统一通道之后,最大的好处不是省了几行配置,而是排查路径变短了。以前出问题要在 Claude Code、Notion MCP、openclaw 三个地方分别查 Key 和 endpoint,现在模型请求这一层只有一个来源,401 就是 Key 问题,超时就是网络问题,格式错误就是模型问题,边界清晰。
这套系统跑顺之后,我实际用下来的感受是:日报基本不用管了,晚上十点自动生成;周报周日聚合,跨天去重确实省事;月报的里程碑识别偶尔需要手动补两句,但框架已经在了。真正花时间的反而是前期把 Notion 数据库字段设计好,字段设计合理,生成的报告可读性高很多。
如果你想继续扩展,几个方向可以参考。一是把config.json里的仓库列表加多,支持远程 URL 自动 clone 到.repo-cache/,这样多项目也能统一收集。二是改SKILL.md.tpl模板,调整报告的输出结构和语气,改完记得重新跑test.sh。三是把 openclaw 的触发时间调成符合自己作息的,不必卡在晚上十点。
长期跑自动化任务的话,Coding Plan 会比按次调用更合适: https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。尤其是你打算把日报系统扩展成更复杂的 Agent 工作流时,稳定的调用额度比什么都重要。
最后留一个实用技巧:每次改完config.json或 Skill 模板,先跑bash test.sh,再手动claude -p "/daily-report"验证一次,确认没问题再交给 openclaw 定时。不要改完直接等定时触发,出了问题你连日志都来不及看。日志保留最近 30 天,出问题时先tail -50看最近一次执行,比盲目改配置快得多。