1. 为什么要在 VPS 上给 Claude Code 加一个深夜复盘任务Claude Code 用久了你会发现一个尴尬现象白天踩过的坑第二天换个会话它照样踩。不是模型不行而是每次新会话都是失忆开局它不知道你昨天在哪个依赖版本上卡了两小时也不知道你团队那条禁止直接改 migration的潜规则。想让协作效率产生复利就得给它建一个能落盘的记忆闭环——每天固定时间自动回顾当天交互把踩坑结论写回项目上下文文件第二天加载时直接生效。这件事放在本地做有两个硬伤。一是你得整夜开机笔记本合盖就断二是长连接跑 API 时网络抖动会让复盘中途失败重跑又得重新喂上下文。所以更稳的做法是把运行环境放到一台 24 小时在线的 VPS 上用 Cron Job 在凌晨低峰期触发 Claude Code让它读取当天的会话日志、执行复盘 Skill、把结论追加到agents.md或全局上下文里。本文就按这个思路给出可复制的 crontab 配置、Skill 文件骨架以及通过 TaoToken 统一 Key 和 API 通道的settings.json片段最后说明怎么验证任务真的跑通、输出真的落盘。适合谁看已经在用 Claude Code 做日常开发、手里有一台 VPS、想让 Agent 越用越懂自己项目的人。不需要你懂运维会改配置文件、会看日志就行。2. TaoToken 前置统一 Key 与 API 通道在 VPS 上跑 Claude Code最烦的是 Key 管理。本地一套、服务器一套换模型还得改环境变量。我的做法是统一走 TaoToken 的 API 通道一个 Key 覆盖对话和编码场景settings.json里只维护一份配置Cron 触发的非交互式调用和本地交互式调用共用同一套凭证省得两边对不上。先拿 Key。打开控制台登录后进 API Keys 页面创建建议给 VPS 上的复盘任务单独建一个 Key命名成vps-cron-review之类方便日后按用途排查或轮换。创建后立刻复制页面刷新就看不到了。控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteAPI 基地址用https://taotoken.net/api注意这个地址不带任何查询参数直接填进配置即可。如果你用的是 Claude Code 的 Anthropic 兼容模式接入说明在 https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentClaudeCodeAnthropicutm_campaignrewrite 这份文档里照着填 base_url 和 auth 字段就行。注意Key 只存在 VPS 的环境变量或配置文件里别提交进 Git 仓库。Cron 任务读取的是服务器本地环境和你的开发机隔离这也是放 VPS 的一个附带好处。3. 可复制配置settings.json、Skill 骨架与 crontab这一节是全文的核心三块配置拼起来就是完整的深夜复盘闭环。建议按顺序操作先配settings.json让 Claude Code 能连上通道再写 Skill 定义复盘任务最后挂 crontab 定时触发。3.1 settings.json 配置片段Claude Code 的配置文件一般放在~/.claude/settings.json。在 VPS 上给运行 Cron 的用户单独配一份内容如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的TaoToken密钥, ANTHROPIC_MODEL: claude-sonnet-4-5 }, permissions: { allow: [ Read, Write, Edit, Bash(git:*) ] }, includeCoAuthoredBy: false }几个关键点说明。ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址ANTHROPIC_AUTH_TOKEN填你刚创建的 Key。permissions.allow里放开 Read/Write/Edit 和 git 命令是因为复盘任务需要读日志、写上下文文件、可能还要提交一次变更但别放开全部 BashCron 场景下权限收紧一点更安全。includeCoAuthoredBy关掉避免自动提交时带上多余的署名信息。如果你不想把 Key 明文写进文件可以改成读环境变量export ANTHROPIC_AUTH_TOKENsk-你的TaoToken密钥然后在settings.json里省略ANTHROPIC_AUTH_TOKEN字段Claude Code 会自动读环境变量。Cron 任务里记得在脚本开头 source 一下你的环境文件。3.2 Skill 文件骨架Skill 是 Claude Code 里定义可复用任务的方式。在项目根目录建.claude/skills/review-past-performance/SKILL.md骨架如下--- name: review-past-performance description: 复盘过去24小时的开发交互输出避坑指南并写回上下文文件 --- # 复盘任务 ## 输入 - 读取 ~/.claude/logs/ 下最近 24 小时的会话记录 - 读取项目根目录的 agents.md若不存在则创建 ## 执行步骤 1. 扫描会话记录找出以下三类问题 - 反复出现的报错或误判 - 无意义的工具调用同一命令重复执行、无效重试 - 上下文缺失导致的返工 2. 针对每类问题提炼一条可执行的避坑规则 3. 将规则追加到 agents.md 的「避坑指南」章节去重后写入 4. 若发现高频重复操作在 .claude/skills/ 下生成新的 Skill 草稿 ## 输出格式 - 复盘摘要写入 ~/.claude/logs/review-YYYY-MM-DD.md - 避坑规则写入 agents.md - 控制台打印本次新增规则条数这个骨架把读什么、怎么分析、写到哪都定死了Cron 触发时不需要再传复杂参数直接调用 Skill 名即可。agents.md是 Claude Code 每次启动会加载的上下文文件复盘结论写进去第二天新会话就能读到闭环就成立了。3.3 crontab 配置先写一个触发脚本放在/opt/claude-review/run.sh#!/bin/bash set -e source /opt/claude-review/env.sh cd /srv/your-project claude --skill review-past-performance \ --output-format json \ /var/log/claude-review/$(date %F).log 21给脚本执行权限chmod x /opt/claude-review/run.sh mkdir -p /var/log/claude-review然后编辑 crontabcrontab -e加入这一行每天凌晨 2 点触发0 2 * * * /opt/claude-review/run.sh0 2 * * *表示每天 02:00 执行。如果你在多个时区的服务器上跑注意 VPS 的系统时区用timedatectl确认一下避免复盘时间落在你的工作时段造成资源争抢。4. 验证请求与成功结果配置完别等到第二天先手动跑一次确认链路通。直接执行脚本/opt/claude-review/run.sh如果一切正常你会看到类似输出{ skill: review-past-performance, status: completed, insights_added: 3, output_file: /root/.claude/logs/review-2025-01-15.md }同时检查三个落盘位置。第一复盘摘要文件cat ~/.claude/logs/review-$(date %F).md第二项目里的agents.md是否新增了避坑规则tail -20 /srv/your-project/agents.md第三Cron 日志有没有报错tail -50 /var/log/claude-review/$(date %F).log确认手动跑通后再验证 Cron 是否真的会触发。把时间临时改成几分钟后比如当前是 14:30就设成32 14 * * *等两分钟看日志有没有新内容。验证完记得改回凌晨 2 点。这一步我踩过坑一开始没注意脚本里的cd路径Cron 执行时工作目录不对Skill 找不到项目文件日志里全是路径报错。所以脚本里一定要写绝对路径。想快速验证模型通道本身是否正常可以先用模型对话页面发一条测试消息确认 Key 和通道没问题再排查脚本层https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite5. 本篇常见错排查报错一ANTHROPIC_AUTH_TOKEN无效或 401。多半是 Key 复制时带了空格或者settings.json里的字段名拼错。检查env块里三个变量名是否和文档一致Key 前后不要有引号外的空白。如果用的是环境变量方式确认 Cron 脚本里 source 了正确的 env 文件——Cron 的环境和登录 shell 不一样不会自动加载.bashrc。报错二Skill 找不到。检查.claude/skills/review-past-performance/SKILL.md路径是否正确以及脚本里的cd是否切到了项目根目录。Skill 是按项目加载的工作目录不对就找不到。报错三复盘输出为空。说明会话日志目录没有内容或者日志格式和 Skill 里写的解析逻辑对不上。先确认~/.claude/logs/下确实有当天的会话记录再检查 Skill 里的读取路径。如果日志是 JSONL 格式解析逻辑要相应调整。报错四Cron 任务没触发。用grep CRON /var/log/syslog看 Cron 有没有执行记录。如果完全没有检查 crontab 是否保存成功、用户是否有权限。如果有执行记录但脚本没跑多半是脚本权限或 shebang 问题确认chmod x和首行#!/bin/bash都在。报错五写入agents.md时权限不足。Cron 以当前用户身份运行如果项目目录属于其他用户写文件会失败。要么调整目录权限要么把复盘任务换成有写权限的用户执行。6. 长期编码与 Agent 协作的下一步单次复盘跑通只是起点。真正让 Agent 越用越顺的是把这套机制沉淀成长期习惯复盘产出的避坑规则会逐渐积累成你项目的专属上下文新会话加载agents.md后直接继承历史经验重复错误率会肉眼可见地下降。如果你同时跑多个 Agent 做并行任务建议给每个 Agent 配独立的 Skill 和日志目录复盘时按 Agent 维度分别输出避免上下文串味。对于需要长期跑编码任务、多 Agent 协同的场景可以了解下 Coding Plan它更适合把这类定时复盘、持续迭代的工作流固定下来https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入过程中如果遇到通道配置或 Key 的问题直接翻接入文档最快https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite最后留一个实操建议第一次跑通后别急着把复盘频率设成每天。先观察一周的输出质量如果避坑规则开始重复或变得空泛说明 Skill 里的分析维度需要收窄把找出所有问题改成只找重复出现两次以上的问题输出会精准得多。
