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_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
- API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
API 基地址用https://taotoken.net/api,注意这个地址不带任何查询参数,直接填进配置即可。如果你用的是 Claude Code 的 Anthropic 兼容模式,接入说明在 https://taotoken.net/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=ClaudeCodeAnthropic&utm_campaign=rewrite 这份文档里,照着填 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 命令,是因为复盘任务需要读日志、写上下文文件、可能还要提交一次变更;但别放开全部 Bash,Cron 场景下权限收紧一点更安全。includeCoAuthoredBy关掉,避免自动提交时带上多余的署名信息。
如果你不想把 Key 明文写进文件,可以改成读环境变量:
export ANTHROPIC_AUTH_TOKEN="sk-你的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 2>&1给脚本执行权限:
chmod +x /opt/claude-review/run.sh mkdir -p /var/log/claude-review然后编辑 crontab:
crontab -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_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite
5. 本篇常见错排查
报错一: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_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
接入过程中如果遇到通道配置或 Key 的问题,直接翻接入文档最快:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
最后留一个实操建议:第一次跑通后,别急着把复盘频率设成每天。先观察一周的输出质量,如果避坑规则开始重复或变得空泛,说明 Skill 里的分析维度需要收窄,把"找出所有问题"改成"只找重复出现两次以上的问题",输出会精准得多。