关于 job-babysitter
job-babysitter 是用于监控长时间后台任务的 Claude Code 技能,减少反复手动检查。它结合任务类型启发式判断完成、停滞或等待超时,并给出状态和下一条命令。
主要功能
- 01后台任务监控器
- 02PID、文件和日志信号
- 03平台期与卡滞检测
- 04含后续步骤的判定 JSON
- 05安全恢复与通知指引
适用场景
- 01监控媒体编码或转码
- 02跟踪嵌入与索引构建
- 03监视批量 Agent 或大模型流程
- 04检测浏览器或抓取守护进程卡住
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ glebis/ claude-skills --skill job-babysitter安装后在 Claude Code 中输入/job-babysitter确认已加载。
附带文件references/playbook.mdscripts/watch_job.py
详细介绍
Job Babysitter
用途
不再手动轮询长时间运行的后台任务。无需在猜测任务何时完成的同时,执行几十到上百次
ls -lh / ps 检查,只需启动一个后台监视器,通过平台期启发式检测任务的最终状态,然后给出判定——
已完成、需要关注或已阻塞——以及准确的下一条命令。
后台任务的夜班护士:定时检查运行状态,只有确实出现问题时才会升级处理。
适用场景
当任务运行时间较长、手动看护会分散注意力时使用:
- 媒体编码/转码(ffmpeg、视频转录、音频提取)
- 嵌入或向量数据库构建(qmd embed、索引构建)
- 在后台运行的批处理 Agent / LLM 工作流
- 容易挂起的浏览器/抓取守护进程(real-browser、agent-browser)
不要用于几秒内就能完成的任务,或一次 Bash 调用就能返回结果的任务。
核心原则:保持轻量,依靠执行框架
此技能负责协调 Claude Code 自带的原语——不要重新实现它们:
- 使用
run_in_background: true启动监视器。监视器退出后,执行框架会自动重新调用 Agent——无需手动轮询循环。 - 监视器(
scripts/watch_job.py)负责确定性部分:采用退避策略进行轮询、检测平台期、区分已完成和卡住状态,并输出判定 JSON。 - 此技能的价值在于按任务类型设置启发式规则、安全恢复操作手册和通知路由——详见
references/playbook.md。
工作流
1. 确定任务信号
按可靠性顺序确定可以监视哪些信号:
- PID — 进程 ID(最可靠的完成信号)。从任务启动命令、
pgrep或ps中获取。 - 输出文件 — 随任务进度增长的文件(例如 ffmpeg 目标文件)。
- 日志文件 — 持续追加内容的日志(例如嵌入进度日志)。
阅读 references/playbook.md §“按任务类型划分的完成启发式规则”,为具体任务类型(ffmpeg、嵌入、批处理、浏览器)选择标志。
2. 在后台启动监视器
使用 run_in_background: true 运行。已知 PID 时,务必传入 --pid;添加文件/日志信号作为佐证。将判定写入一个已知路径。
scripts/watch_job.py \
--label "lab05 stream encode" \
--pid <PID> \
--output-file /path/to/output.mp4 \
--plateau-bytes 65536 --plateau-polls 5 --stuck-after 120 \
--max-wait 7200 \
--verdict-out /tmp/job-babysitter-<label>.json
监视器每次轮询时都会输出一行 JSON 心跳(可查看其末尾内容以跟踪实时进度),并在退出时将最终判定 JSON 写入 --verdict-out。
调整参数请参阅操作手册;建议默认值:--interval 10(逐步退避至 60)、--plateau-polls 4、--stuck-after 300、--max-wait 7200。
3. 监视器退出后,读取判定并进行处理
后台监视器完成后,执行框架会重新调用 Agent。读取判定 JSON。它包含 status ∈ {done, needs-attention, blocked}、reason、suggested_next、经过时间和最终大小。
- done → 验证输出确实有效(参见操作手册中相应任务类型的“完成检查”,例如媒体使用
ffprobe、嵌入检查数量是否匹配),然后继续原任务。 - needs-attention → 任务仍在运行,但已进入平台期(可能已卡住)。遵循恢复操作手册:首先进行只读诊断。未经用户允许,绝不要终止任务或执行破坏性恢复操作(pkill、WAL checkpoint、VACUUM)。
- blocked → 监视器在达到
--max-wait后放弃等待。如实说明:“放弃等待”≠“失败”。可提出重新检查或延长等待上限。
4. 按选定渠道发送通知
默认在当前会话中恢复。如果用户选择了某个渠道(Telegram、语音/TTS、桌面通知),则按照 references/playbook.md §“通知路由”进行通知。务必包含状态表情符号、标签、经过时间和准确的下一条命令。
防护规则(不可妥协)
- 绝不要仅凭一次缓慢轮询就采取行动。 只有在出现平台期且经过的时间超过
--stuck-after时,才能判定为“卡住”——监视器在返回需要关注状态前已经执行此检查。 - 执行任何破坏性恢复前都要先询问——
pkill、kill、WAL 检查点、VACUUM、 守护进程重启。先进行只读诊断。 - 如实报告。 区分已完成、已“放弃等待”和已“卡死”。绝不要暗示监视器未观察到的成功。
- 采用退避方式轮询,而非紧密循环——监视器会处理此事;绝不要用手动快速轮询循环包装它。
资源
scripts/watch_job.py— 后台监视器:平台期检测、卡住与完成的判定、 结论 JSON。仅使用标准库,Python 3.11+。references/playbook.md— 各任务类型的完成判定规则、安全恢复 表和通知路由。选择监视器标志或处理需要关注/受阻结论时加载。