Skip to content

Schemingboy/claude-watchdog

Repository files navigation

Claude 守护器 (Claude Watchdog)

让 Claude Code 长任务不半途而废、崩溃能自恢复的 Windows 守护工具。纯 PowerShell,无外部依赖。

解决什么问题

Claude Code 跑长任务时有两种「掉链子」:

  1. 活着但提前停 —— 任务没做完就结束了当前回合,需要人到场敲「继续」。
  2. 进程崩了 —— 终端意外退出,会话上下文还在,但没人重新拉起。

守护器用两层机制分别兜住:

  • 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 解压。两点注意:

  1. 放到一个固定目录再用——受管会话的 Hook 配置里写的是脚本绝对路径,移动目录后老会话的 Hook 会失效(新启动的会话会自动用新路径,无需手改)。
  2. ZIP 解压的文件可能被 Windows 标记「已阻止」:右键每个 .ps1/.vbs → 属性 → 勾「解除阻止」,或在解压目录跑一次 dir -Recurse | Unblock-File

快速上手

  1. 双击 打开 Claude 守护器.vbs(静默启动,无控制台闪现;旧的 .cmd 仍可用作兜底)
  2. 点「启动受管 Claude」,选工作目录 —— 弹出一个受守护的 Claude Code 终端
  3. 以后主要从这个面板启动 Claude,才能获得完整守护

关闭面板不会停后台守护。要停时点「停止守护」或双击 停止守护.cmd

完整操作说明见 docs/使用说明.md

受管 vs 外部会话

受管会话 外部会话
来源 从本工具面板启动 普通 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);然后删除整个目录。工具不写注册表、不装服务。

License

MIT

About

🛡️ Claude Code 长期守护器 — 崩溃自恢复 + 完成态检测,覆盖小时级任务

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages