VS Code扩展,让Claude Code等Agent在独立Git worktree中通宵工作,产出经审核后再合并,规避夜间无人值守风险。
我每天都在用 Claude Code 和 Codex。一直有个同样的需求:晚上把任务交给 Agent——升级依赖、更新 changelog、修复不稳定的测试——第二天早上喝着咖啡审查结果就行了。
市面上的调度器都能让 Agent 在指定时间运行。问题在于它跑在哪儿。
你在下午两点盯着看的时候,在工作目录跑 Agent 没问题。但凌晨三点你睡着的时候跑就不一样了:Agent 要是出了问题,它是在你的代码上、在你明天要打开的分支上出的错。
我想要的不是"一个无人值守运行的 Agent",而是"一个夜间工作成果可隔离、可审查的 Agent"。
思路是:每次运行一个 worktree,早上统一收件箱
所以我写了一个小的 VS Code 扩展叫 TaskKeeper。每次定时任务都基于确定的基准 commit,在一个全新的 Git worktree 里运行。Agent 在一个用完即弃的副本上工作,你的 checkout 不会被触碰。运行结束后,结果进入审查收件箱:diff、修改的文件、花费的成本,还有两个按钮——接受(本地 merge,不会 push)或丢弃(worktree 和分支全部删除,什么都不留)。

整个设计就赌这一句话:如果凌晨三点出了问题,那是在一份副本上出问题——早上由你决定。
你看到的不是一堵 JSON,而是一份可读的对话记录,带摘要头——成本、轮次、修改的文件、哪个 worktree——以及具体的操作都在里面。

接受就在本地 merge。拒绝就删除 worktree 及其分支。不管哪种方式,没有任何东西会自己离开你的机器。
一个任务本质上是两个独立的选择:哪个对话(新会话 / 继续 / 分支)和在哪里工作(隔离的 worktree,或直接在仓库里)。扩展没有让你去琢磨这些,而是从意图出发打开面板——在某个对话中,或在某个仓库里的隔离任务——然后自动填好剩下的部分。有一个小型模板目录(升级依赖、撰写 changelog、lint 扫一遍、修复失败的测试)可以从这里起步。

没有什么我的守护进程蹲在你的托盘区。每个任务都是操作系统自己的调度器里的一条记录——Windows 任务计划程序或 macOS launchd。到了预定时间,一个短命的 worker 启动、获取机器级别的槽位、创建 worktree、启动 Agent,然后把所有内容记录到一个本地 SQLite 数据库里。扩展只读那个数据库。只要你的机器开着,任务就会跑;在 Windows 上它甚至可以唤醒机器。
有两件事我坚决不打算含糊带过:
每次运行独立的权限配置文件。 每次运行会获得两个明确配置文件中的一个——审计(只读)或隔离变更——通过一个受控的设置配置文件施加,你的个人 Claude 配置无法扩大权限范围。一个只读任务始终是只读的,哪怕你交互式使用时配置是宽松的。
本地优先。 没有遥测、没有账号、扩展本身不发出任何网络请求。看起来像 token 的密钥会从存储的日志中脱敏。
任何调度器最可怕的故障模式不是任务报错——你能看到那些。最可怕的是任务因为 OS 触发器被注销而悄无声息地停止运行了。所以有一个"昨夜摘要":你在睡觉时跑了什么,还有一个健康检查——如果触发器丢失了就把任务标红,而不是让它悄无声息地再也不会运行。

通宵跑 Agent 要花钱,所以有一个月度上限,由 runner 本身强制执行——一旦当月达到上限,下一个任务在花费之前就被跳过。有一个面板按天和按任务拆解了当月花费。

(成本数据由 Claude 反馈;Codex 不反馈,表格里会注明。)
依赖升级: 每周一次,升级到最新兼容版本并运行测试。我审查 diff,不用盯着升级过程。
Changelog: 只读,把这周的 commit 总结成一条草稿条目。
不稳定的测试: 通宵跑,找到失败的测试让它通过——不改变原本意图——然后我判断这个修复是不是真的。
扩展完全免费、本地优先、无需账号。支持 Windows 和 macOS(macOS 二进制文件已签名)。
Marketplace: https://marketplace.visualstudio.com/items?itemName=argalla.taskkeeper
Open VSX: https://open-vsx.org/extension/argalla/taskkeeper
与 Anthropic 或 OpenAI 没有附属关系——它启动的就是你已经用着的那些 CLI。
我最感兴趣的是别人怎么处理无人值守的 Agent 运行:worktree、容器、用完即弃的分支,还是别的什么?什么东西真正经得起验证?