| name | overnight-marathon |
| description | 夜间无人值守马拉松执行模式。让 Claude Code 持续工作 6-8 小时,自动循环执行任务列表,重要文件写入前自动备份,全程无需人工干预。 触发词:夜间/overnight/持续执行/自动执行/马拉松模式/8小时/长时间执行/无人值守/夜跑模式/连续执行/全自动执行/keep running
|
| argument-hint | 可选:指定任务列表文件路径(如 tasks.md 或 pmo/任务列表-待执行.md);未指定时自动查找 |
Overnight Marathon Mode — 夜间马拉松执行协议
一、激活时首先检查配置
加载此 Skill 后,立即执行以下检查,输出一次状态行,然后直接进入启动协议,不等用户确认。
检查项
| 项目 | 检查方式 | 未就绪时的行为 |
|---|
| Stop Hook | 读 .claude/settings.json,看 hooks.Stop 是否存在 | 输出 ⚠️ 警告,继续执行但提示"Claude Code 可能在任务间隙自动停止" |
| 备份 Hook | 读 .claude/settings.json,看 hooks.PreToolUse 是否含 Write|Edit | 输出 ℹ️ 提示"将使用内置备份逻辑替代" |
| 权限模式 | 读 .claude/settings.local.json,看 defaultMode | 未旁路时正常运行,仅提示"如需全自动,参考 reference.md → Section C" |
配置文件(settings.json + PowerShell hook 脚本)见同目录 reference.md
二、启动协议(3步,执行完直接开始循环)
Step 1:扫描任务来源
按优先级查找任务列表(使用第一个找到的文件):
- 用户启动时指定的路径(如参数中含文件名)
./TASKS.md
./tasks.md
./TODO.md
./pmo/任务列表-待执行.md
读取所有 [待执行] 或 - [ ] 条目,建立执行清单,统计总数。
Step 2:打印执行计划卡(严格 8 行内)
╔═══════════════════════════════════════════╗
║ 🌙 夜间马拉松模式 ACTIVE ║
║ 任务来源:<文件路径> ║
║ 待执行任务:N 条 ║
║ 备份目录:.overnight-backup/ ║
║ 安全红线:已加载(见 Skill 第四节) ║
║ 模式:全自动,无需确认 ║
╚═══════════════════════════════════════════╝
Step 3:立即进入任务循环,不等待用户输入
三、任务执行循环(持续运行直到任务耗尽或上下文触顶)
LOOP:
① 读取任务列表 → 找下一条 [待执行] 任务
• 若无更多 [待执行] → 跳至"晨报生成"并停止
② 将该条目状态改写为 [执行中](立即写回任务文件)
③ 执行任务
• P0/P1 问题 → 立即处理
• P2 问题 → 跳过,在条目后追加 (跳过-P2)
• 触碰安全红线 → 中止该条,标记 [已跳过-安全红线],继续下一条
• 连续 3 次工具调用失败 → 标记 [阻塞-工具失败],继续下一条
④ 将该条目状态改为 [已完成],追加 1 行结果摘要
⑤ 输出 3 行进度报告:
进度: 已完成 N/总M | 本条耗时: ~Xs | 剩余: ~K条
结果: <本条 1 句话摘要>
下一条: <下一条任务标题>
⑥ 回到 ①
END LOOP
任务状态标记规范
| 状态标记 | 含义 |
|---|
[待执行] | 等待执行 |
[执行中] | 正在执行(Skill 运行期间) |
[已完成] | 成功完成 |
[已跳过-P2] | 仅格式/风格问题,本轮跳过 |
[已跳过-安全红线] | 含红线操作,跳过并记录原因 |
[阻塞-工具失败] | 连续工具调用失败,需人工介入 |
[阻塞-需人工确认] | 影响范围不确定,标记后跳过 |
四、安全红线(绝对禁止,无例外)
下列操作遇到即中止当前任务,标记 [已跳过-安全红线],继续下一条:
| 禁止操作 | 说明 |
|---|
rm -rf / Remove-Item -Recurse -Force(非 .overnight-backup/ 目录) | 破坏性批量删除 |
git push / git push --force | 推送远端,不可逆 |
git reset --hard / git rebase / git stash drop | 历史破坏 |
直接 open() 写入 *.docx(未经专用脚本) | 二进制格式保护 |
修改系统环境变量 / 用户级 ~/.gitconfig | 全局状态变更 |
删除 .overnight-backup/ 内任何文件 | 备份目录保护 |
修改 .claude/settings.json / .claude/settings.local.json | 配置保护 |
DROP TABLE / DELETE FROM(无 WHERE 条件) | 数据库保护 |
五、内置备份逻辑(PreToolUse Hook 未就绪时的回退方案)
每次执行写入/修改操作前,主动检查并备份:
备份触发条件(满足任一即备份):
• 文件扩展名 ∈ {.docx, .md, .txt, .json, .csv, .py, .ps1, .yaml, .toml}
• 文件大小 > 10 KB
• 文件路径包含关键段:pmo/ | thesis/ | 01-thesis/ | 新版本/
备份流程:
1. 目标文件存在 → 计算时间戳 YYYYMMDD-HHmmss
2. 创建目录 .overnight-backup/YYYYMMDD-HHmmss/
3. 复制目标文件到该目录
4. 执行原写入操作
5. 写入完成后读回前 10 行,验证文件非空
六、上下文预算管理
| 阈值 | 触发动作 |
|---|
| 工具调用 ≥ 30 次 | 输出 Mini-Compact 通知,压缩内部状态(保留:进度表、备份日志、当前错误) |
| 工具调用 ≥ 50 次 | 主动运行 /compact,compact note 包含:进度摘要 + 任务文件路径 + 备份目录 |
| 感知上下文接近极限 | 完成当前任务 → 写晨报 → 主动停止(不强行执行下一条) |
Compact Note 模板(写入 /compact 时使用):
[夜间马拉松] 上下文压缩点:
- 任务来源:<文件路径>
- 已完成:N 条 | 待执行:M 条 | 跳过:K 条
- 最近备份:.overnight-backup/<最新时间戳>/
- 阻塞任务:<如有,列条目>
- 下一条:<下一条任务标题>
七、晨报格式(任务耗尽后生成,默认写到当前目录)
文件名:morning-report-YYYY-MM-DD.md
# 夜间马拉松执行报告(YYYY-MM-DD)
## 执行摘要
- 开始时间:HH:MM(北京时间)
- 结束时间:HH:MM(北京时间)
- 已完成任务:N 条
- 已跳过任务:M 条
- 阻塞任务:K 条
- 备份文件数:X 个(目录:.overnight-backup/)
- 任务来源:<文件路径>
## 已完成任务清单
| 序号 | 任务标题 | 结果摘要 |
|------|---------|---------|
| 1 | ... | ... |
## 跳过 / 阻塞说明
| 任务 | 状态 | 原因 |
|------|------|------|
## 建议下一步(1-3 条)
1. ...
八、特殊情况处理规则
任务间依赖:若任务 B 明确依赖任务 A,A 失败后 B 直接标记 [阻塞-依赖失败],跳过,继续 C。
幂等写回:同一任务若被重复调用(Compact 后重新读取),先比对条目状态,[已完成] 直接跳过,不重复执行。
DOCX 写回:凡涉及 .docx 文件修改,必须通过专用脚本(如 scripts/thesis/txt_to_docx_rebuild.py),不得直接用 open() 写二进制。
文件写入后验证:写入完成后读回前 10 行,若文件为空或大小异常(< 原始大小 50%),立即从备份恢复并标记阻塞。