NTE-003经验笔记CLASS · PUBLIC
Codex 重置卡到期保护:一个会自动清理的 Windows 小工具
把即将到期的 Codex Full reset 交给一个临时 Windows 任务:提前 10 分钟兑换,核对服务器结果,用完自动清理。记录可复用工程、使用方法、时间保护和实际验证边界。
- DATE
- 2026.10.05
- READ
- 5 MIN
- LENGTH
- 2,054 字
CONTENTS · 目录(7)
账户里有三张 Codex 赠送的 Full reset,其中一张快到期了。我想做的事很具体:等到它到期前 10 分钟再使用,处理完把任务清掉。
最后得到的是 codex-reset-guard:两个运行脚本,Python 标准库加 Windows 原生任务计划。它会生成当前机器的配置,按服务器返回的到期时间安排临时触发器。平时脚本不运行,到时间才启动,也不用定期唤醒 AI 问一遍“现在该不该重置”。
先看一次执行会做什么
假设某张卡在 12:18:45 到期,计划启动时间就是 12:08:45。CLI 启动、查询和网络请求还需要一点时间,所以这里安排的是脚本启动时刻,并不承诺服务器恰好在那一秒完成兑换。
真正发出兑换请求前,脚本再次核对:账号必须匹配,卡片仍可用,到期时间已知,并且只剩最后 600 秒。任何一项不满足,都会跳过或报错。
复用只需要三步
准备 Windows 10/11、Python 3.10+、PowerShell 7,以及已经通过 ChatGPT 登录的原生 codex.exe。这一版在 CLI 0.159.2 上做了只读验证。
git clone https://github.com/Tim-1e/codex-reset-guard.git
Set-Location codex-reset-guard
# 1. 只读取当前登录,生成本机配置。
python .\reset_guard.py --init
# 2. 查看卡片状态;这个命令不会兑换。
python .\reset_guard.py --status
# 3. 创建临时 Windows 任务。
pwsh -NoProfile -File .\install_task.ps1初始化会查找本机的 Python、PowerShell 和 Codex,保存路径、绑定账号 ID、任务名。不会复制登录令牌。可执行文件位置特殊时,用 --codex 和 --powershell 指定路径;配置已存在时,程序会拒绝静默改绑另一个账号。
建议克隆到本机磁盘,安装以后保持目录不变。新增卡片时,再运行一次 install_task.ps1 更新计划即可。本版没有持续的后台发现服务。
程序怎样调用 Codex
脚本启动本机 codex app-server --stdio,通过标准输入输出发送 JSON 消息。它只使用账号和额度相关接口,不创建对话,也不调用模型推理。
这里用到的三个接口都有 OpenAI 官方文档:account/read 核对登录,account/rateLimits/read 读取卡片,account/rateLimitResetCredit/consume 兑换指定的重置机会。
重置完成后,要再读一次额度。接口返回 reset 或 alreadyRedeemed 是一层确认;完整的可用卡片列表里已没有该卡,是另一层确认。nothingToReset 表示没有可重置的窗口,不能写成成功。
保护放在请求前
核心时间条件只有这一行,调度器不能替它做决定:
0 < expires_at - time.time() <= 600代码还会排除已经使用、类型不支持、到期时间未知的卡片,并在发送唯一会兑换的请求之前再次检查时间。没有“忽略时间限制”或“强制重置”开关。
几个容易漏掉的地方也做了处理:
| 情况 | 处理方式 |
|---|---|
| 切换了登录账号 | 与本机配置的绑定账号不符就停止 |
| 查询只返回张数,没有详情 | 不猜卡片 ID 或到期时间,停止自动处理 |
| 卡片列表被截断,张数与列表不符 | 不把“列表里没看到”当成已完成 |
| 请求超时,无法确认是否已执行 | 重试复用同一幂等键,并明确指定同一张卡 |
| 同名任务属于另一个安装目录 | 核对启动程序与参数后拒绝覆盖或删除 |
幂等键由账号 ID 和卡片 ID 生成。同一张卡的同一次逻辑兑换,跨重试使用同一个 UUID;不会因为一次超时就换一个键,试着消耗下一张卡。脚本同时记录兑换确认和读回结果,方便区分“服务器已答复”与“状态已验证”。
分享仓库只包含源码、说明、许可证和测试。config.json、卡片快照、审计日志被 Git 排除;RPC 错误也只保留错误码,不把可能携带敏感信息的数据原样打印出来。
用完以后为什么不会一直留着
Windows 里只创建一个任务,每张已知卡片对应一个一次性触发点。成功后,程序按服务器的最新列表重建剩余触发器;最后一张完成后,任务直接删除。一次失败只在到期前最后 10 分钟内重试,每分钟一次。
如果整段窗口都错过了,还留有系统层的清理:每个触发器的 EndBoundary 设为卡片到期时刻,任务的 DeleteExpiredTaskAfter 设为 PT1M。所有触发窗口结束后,由 Windows 原生过期删除机制 清理,不额外开一个常驻进程负责打扫。
脚本和审计记录会保留,便于检查;想主动取消任务,可以运行:
pwsh -NoProfile -File .\install_task.ps1 -Remove这个移除操作不需要联网,只处理属于当前安装目录的任务。
哪些真的验证过
我没有为测试而消耗真实重置卡。只读查询确认了三张卡都可用;实际提前启动过受时间保护的任务,日志是 no_credit_due,没有发送兑换请求。
分享版还保留了可运行的验证入口:
# 完全离线:没有 Codex 进程、网络请求或真实账号。
python -m unittest discover -s tests -v
# 独立的空操作任务:不读取 Codex,不会兑换。
pwsh -NoProfile -File .\tests\test_task_lifecycle.ps1这次 12 项离线检查全部通过,覆盖时间边界、发送前再次检查、固定重试键、账号不匹配、详情不完整以及异常结果。独立 Windows 测试里,模拟剩余卡片从 3 → 2 → 0,实际触发器数量跟着减少,最后整个测试任务被删除。
这些证据验证了保护逻辑和任务生命周期。真实兑换会留给约定的到期窗口;这还不是对线上兑换长期成功率的测量。
保留几个实际限制
本版只支持 Windows 调度。查询和时间判断本身不难移植,但不同系统的登录会话、唤醒和任务清理方式不同,这次没有为了跨平台另起一套框架。
电脑需要开机或能被唤醒,Windows 用户保持登录,Codex 登录有效,而且网络可用。WakeToRun 是唤醒请求,不保证所有硬件和电源策略都允许执行。系统时钟也要正确,建议保持 Windows 自动校时;这个工具不会自行修改系统时间。
源码、完整使用说明和 MIT 许可证都在 GitHub 仓库。后续判断执行是否完成,直接看本机 audit.jsonl 里的 redemption_result 与 task_refreshed,以服务器反馈和任务状态为准。