让 Claude Code 长任务不半途而废、崩溃能自恢复的 Windows 守护工具。纯 PowerShell,无外部依赖。
Claude Code 跑长任务时有两种「掉链子」:
- 活着但提前停 —— 任务没做完就结束了当前回合,需要人到场敲「继续」。
- 进程崩了 —— 终端意外退出,会话上下文还在,但没人重新拉起。
守护器用两层机制分别兜住:
- Stop Hook:回合结束时检查是否有完成标记,没有就打回让它继续(上限 20 次 / 2 小时;连续 2 回合无有效输出判为渠道故障,转交用户)。
- Watchdog 后台进程:每 5 秒扫描一次,会话失联 90 秒后按原
sessionId恢复(崩溃时若有未跑完的后台命令,礼让最多 240 秒)。
- Windows 10 / 11(依赖 Windows PowerShell 5.1,系统自带,无需安装 PowerShell 7)
- Claude Code 已安装且
claude在 PATH(claude --version能出版本号即可) - 无其他依赖:不需要 Python / Node 工具链,仓库即程序
git clone https://github.com/Schemingboy/claude-watchdog.git或 Code → Download ZIP 解压。两点注意:
- 放到一个固定目录再用——受管会话的 Hook 配置里写的是脚本绝对路径,移动目录后老会话的 Hook 会失效(新启动的会话会自动用新路径,无需手改)。
- ZIP 解压的文件可能被 Windows 标记「已阻止」:右键每个
.ps1/.vbs→ 属性 → 勾「解除阻止」,或在解压目录跑一次dir -Recurse | Unblock-File。
- 双击
打开 Claude 守护器.vbs(静默启动,无控制台闪现;旧的.cmd仍可用作兜底) - 点「启动受管 Claude」,选工作目录 —— 弹出一个受守护的 Claude Code 终端
- 以后主要从这个面板启动 Claude,才能获得完整守护
关闭面板不会停后台守护。要停时点「停止守护」或双击 停止守护.cmd。
完整操作说明见 docs/使用说明.md。
| 受管会话 | 外部会话 | |
|---|---|---|
| 来源 | 从本工具面板启动 | 普通 CMD 自行启动 |
| 提前停 | Stop Hook 逼继续 | 不干预 |
| 崩溃 | 按原 sessionId 自动恢复 | 只观察,不恢复 |
| 转化 | 右键「关闭窗口」停止守护 | 右键「加入受管」重启纳管 |
外部会话不恢复,是因为工具无法区分「你主动关掉」和「它崩了」,误恢复会把你刚中止的工作重跑一遍。想把外部会话纳入守护,右键那一行「加入受管」——因为运行中的进程无法补挂 Hook,纳管靠结束旧会话进程、用同一 sessionId 重开一个受守护窗口来完成。
| 文件 | 作用 |
|---|---|
ClaudeWatchdog.ps1 |
守护主逻辑(扫描、判活、恢复) |
ManagedStopHook.ps1 |
Stop / UserPromptSubmit Hook,管「活着但提前停」 |
ClaudeGuard.ps1 |
控制面板 GUI |
managed-system-prompt.txt |
注入受管会话的守护协议提示 |
watchdog-settings.json |
运行时生成:仅受管 Claude 使用的 Hook 设置(含本机绝对路径,不入库) |
watchdog-state.json / managed-state/ |
运行状态(勿手动编辑) |
watchdog.log |
追加式运行日志 |
docs/ |
设计、使用说明、验收报告、ISSUES |
tests/*.Tests.ps1 |
决策逻辑与 Hook 的单元测试 |
全部逻辑本地运行,不联网、不上报。工具自身只记录会话元数据(sessionId、PID、目录、状态、时间),不复制任务正文;Hook 只读取本会话转写里最后的助手文本用于判断完成标记。运行状态文件都在本目录内,删目录即删干净。
两个 *.Tests.ps1 是纯断言脚本,不要用 Invoke-Pester(它们不含 Describe/It,Pester 会报「0 用例」且退出码 0,看着通过其实一条没跑)。直接执行:
.\ClaudeWatchdog.ps1 -SelfTest
powershell -NoProfile -File .\tests\ManagedStopHook.Tests.ps1
powershell -NoProfile -File .\tests\ClaudeGuard.Layout.Tests.ps1覆盖小时级任务:单任务续行封顶 20 次 / 2 小时,加上同会话上下文膨胀。天级任务仍走「计划落盘 + 新会话冷启动」的 SOP,两者互补不替代。首次在新目录启动可能需人工点一次目录信任框。
「无人值守」勾选框免不掉你在全局 permissions.ask 里显式声明的规则(详见 docs/使用说明.md)。
面板点「停止守护」;装过「安装自启」的再点「移除自启」(或 schtasks /Delete /TN "Claude Guard Watchdog" /F);然后删除整个目录。工具不写注册表、不装服务。