# Agent健身房定时运行和候选包审计工具
# Agent健身房运行审计诊断流程样例
## 入口
```bash
python scripts/night_gym_doctor.py \
--date 2026-05-02 \
--plist "$HOME/Library/LaunchAgents/Agent健身房.plist" \
--output-dir "$HOME/Library/Mobile Documents/com~apple~CloudDocs/odyssey/0 收集箱/Agent健身房"
```
## 输入来源
| 来源 | 用途 |
|---|---|
| `~/Library/LaunchAgents/Agent健身房.plist` | 读取磁盘上的触发时间、命令、输出目录 |
| `launchctl print gui/$UID/Agent健身房` | 读取当前已加载状态、runs、last exit code、实际 trigger |
| `master.log` 和 `out/sub/*.log` | 判断主进程和子进程是否完成,汇总 tokens used |
| `候选清单.json/manifest.json` | 检查候选数量、approval 状态和包结构 |
| Codex session `rate_limits.primary` | 估算 5 小时窗口使用比例变化 |
## 核心检查
| 检查项 | 通过信号 | 失败信号 |
|---|---|---|
| LaunchAgent loaded | `Agent健身房` 存在且 `runs >= 1` | `not-loaded` 或 label 不匹配 |
| 触发时间一致 | plist 与 loaded trigger 都是 `04:00` | plist 是 `04:00`,loaded 仍是 `01:00` |
| 输出目录一致 | loaded command 带正确 `--output-dir` | 仍写到旧的 `~/.codex/night-gym/packages` |
| 运行成功 | `last exit code = 0` 且 `Codex exec rc: 0` | launchd 或 Codex 日志非 0 |
| 包完整 | 有 `早间复盘.md`、`候选清单.json`、`审批.sh`、`示例/`、`子分析/` | 空目录、缺主文件、子分析缺完成标记 |
| 额度可解释 | master/subagent tokens 可汇总,rate_limits 有前后百分比 | 只能看到单个进程 token 或找不到窗口数据 |
## 示例输出
```text
Agent健身房诊断:WARN
- 定时任务已加载,昨晚执行成功:runs=1,last_exit=0
- 配置漂移:磁盘 plist=04:00,但 loaded trigger=01:00,需要 reload
- 输出包存在:2026-05-02-Agent健身房候选包,候选数=5,approval=pending
- 额度:master 123,873 + subagents 195,824 = 319,697 tokens;5 小时窗口约从 96% 到 97%
建议:
1. launchctl bootout gui/$UID ~/Library/LaunchAgents/Agent健身房.plist
2. launchctl bootstrap gui/$UID ~/Library/LaunchAgents/Agent健身房.plist
3. 重新运行 doctor,确认 loaded trigger 与 --output-dir 一致
```