Last updated: 2026-03-07
本项目即日起停止继续更新维护。
原因很直接:在后续实际使用和对比中,我发现 CLIProxyAPI 的整体体验、可用性和后续扩展性更好,因此后续精力将转向新的方案,这个仓库不再作为主要维护方向继续推进。
这意味着:
- 现有代码和文档会继续保留,方便有需要的人参考
- 仓库暂时不会删除
- 除非出现特别必要的问题,否则不会继续加入新功能或长期维护
- 如果你正在找更适合继续投入的方向,建议优先关注 CLIProxyAPI
感谢这段时间所有正在玩 OpenClaw、测试这个项目、给出反馈、帮忙发现问题的朋友。
不管你是:
- 真正在跑项目的人
- 帮忙提建议的人
- 反馈 bug 和使用体验的人
- 单纯围观、关注和支持的人
都非常感谢。
正是这些真实使用中的反馈,才让我更快看清楚这个方向哪些地方有价值,哪些地方应该及时止损、尽快切换到更合适的方案。
这个仓库到这里先告一段落。
谢谢大家这些日子的支持。
当前状态:停止更新维护(代码保留,仅供参考)
原目标:
openai-codex:*账号池自动巡检、异常告警、自动/手动修复、可选删除、快速补位。隐私原则:脚本不上传 token,不上传账号凭据;日志默认仅保留本机。
检测 → 分级 → 熔断 → 修复 →(可选)删除 → 补位 → 恢复
- ✅ 修复“写入后被回收”:
auth-profiles.json写入链路补齐文件锁 + 原子写(tmp+rename) - ✅ 新增反回滚守护:
openclaw-profile-reconcile.timer每 2 分钟回灌缺失 profile(fromopenai-codex-auth-map.env) - ✅ 新增独立凭据快照:每个 profile 使用独立
auth.json路径,避免共享凭据被覆盖串号 - ✅ 修复过期判定链路:
remainingMs保留负值,失效账号可正确进入 failed/隔离流程 - ✅ 增加可回归验证:新增 quota 注入自测脚本,验证“限额后自动切号”是否在时限内生效
这次是“持久化不回滚 + 自动回灌 + 可验证切换”的永久修复包。
已生成终端录屏:docs/demo/quick-validation.cast
GIF 预览:
本地回放:
asciinema play docs/demo/quick-validation.cast重新录制:
TERM=xterm-256color asciinema rec -y -q -c "bash scripts/demo_terminal_walkthrough.sh" docs/demo/quick-validation.cast重新生成 GIF:
agg docs/demo/quick-validation.cast docs/demo/demo.gif对外分享前,先按下文“隐私发布检查清单”打码。
- ✅ 账号池自动检测(默认每10分钟)
- ✅ 状态机:Healthy / Degraded / Repairing / Recovered
- ✅ 异常分类:auth / network / provider / unknown
- ✅ 熔断器:连续失败账号自动 cooldown
- ✅ 修复节流:最短间隔限制,避免死循环
- ✅ 双探针:ok + pong,降低假健康
- ✅ 告警策略:首次3连发 + 每小时提醒 + 去重窗口
- ✅ 精准定位失效账号(accXX)
- ✅ 修复脚本(自动尝试 + 手动命令)
- ✅ 删除脚本(封禁账号下线,可选)
- ✅ 补位脚本(新账号快速补回 accXX)
- ✅ SLO指标文件 + 配置快照历史
- Ubuntu 22.04 LTS
- OpenClaw 2026.3.2
- Node.js 22.x
- Codex CLI 0.104.0
# 推荐(有 /data)
export OCX_BASE_DIR=/data/openclaw
# 或默认兼容
# export OCX_BASE_DIR=$HOME/.openclaw/openclaw-tools- 当前方案采用 Bridge 模式:
codex login --device-auth+import_codex_auth_to_openclaw.sh导入到 OpenClaw。 - 这不是 OpenClaw 原生命令直接完成 device code 登录,而是容灾仓库提供的可复用接入流程。
- 因此文档中所有 device code 示例,均基于 Codex CLI 登录后再导入。
# 1) OpenClaw 已安装
openclaw --version
# 2) Codex CLI 已安装(device code 登录要用)
# npm install -g @openai/codex
codex --version说明:
onboard/repair/healthcheck依赖scripts/import_codex_auth_to_openclaw.sh,本仓库已内置。
${OCX_BASE_DIR:-/data/openclaw}/scripts/preflight_openai_codex_failover.sh健康报告新鲜度看门狗(解决“面板显示旧报告/停更”):
${OCX_BASE_DIR:-/data/openclaw}/scripts/watch_openai_codex_health_freshness.sh
# 可选:最大允许陈旧秒数(默认 1800)
# OCX_MAX_STALE_SECONDS=900 ${OCX_BASE_DIR:-/data/openclaw}/scripts/watch_openai_codex_health_freshness.shSECURITY.md/SECURITY.zh-CN.md:安全边界与泄露应急流程(中英)scripts/bootstrap.sh:一键初始化(目录/脚本/systemd/模板)config/public-safe.env.example/config/public-safe.env.example.zh-CN:公开安全模板(中英、无真实密钥)
快速启动(推荐):
cd openclaw-codex-failover
# 中文模板可选:export OCX_BOOTSTRAP_LANG=zh-CN
bash scripts/bootstrap.shexport OCX_BASE_DIR=/data/openclaw
sudo bash -lc '
set -e
: "${OCX_BASE_DIR:=/data/openclaw}"
mkdir -p "$OCX_BASE_DIR/scripts" "$OCX_BASE_DIR/reports" "$OCX_BASE_DIR/systemd" "$OCX_BASE_DIR/config"
cp scripts/*.sh "$OCX_BASE_DIR/scripts/"
cp systemd/* "$OCX_BASE_DIR/systemd/"
cp -n config/openai-codex-auth-map.env.example "$OCX_BASE_DIR/config/openai-codex-auth-map.env" || true
chmod +x "$OCX_BASE_DIR/scripts"/*.sh
cp "$OCX_BASE_DIR/systemd/openclaw-healthcheck.service" /etc/systemd/system/
cp "$OCX_BASE_DIR/systemd/openclaw-healthcheck.timer" /etc/systemd/system/
cp -n openclaw-healthcheck.env.example /etc/openclaw-healthcheck.env || true
systemctl daemon-reload
systemctl enable --now openclaw-healthcheck.timer
systemctl start openclaw-healthcheck.service || true
$OCX_BASE_DIR/scripts/preflight_openai_codex_failover.sh
cat $OCX_BASE_DIR/reports/openai_codex_health_latest.json
'${OCX_BASE_DIR:-/data/openclaw}/scripts/onboard_profiles_wizard.sh向导支持:单个导入、批量导入、每次询问是否使用代理、代理检测与导入联动。
sudo bash -lc '
set -e
: "${OCX_BASE_DIR:=/data/openclaw}"
mkdir -p "$OCX_BASE_DIR/scripts" "$OCX_BASE_DIR/reports" "$OCX_BASE_DIR/systemd"
cp scripts/*.sh "$OCX_BASE_DIR/scripts/"
cp systemd/* "$OCX_BASE_DIR/systemd/"
chmod +x "$OCX_BASE_DIR/scripts"/*.sh
cp "$OCX_BASE_DIR/systemd/openclaw-healthcheck.service" /etc/systemd/system/
cp "$OCX_BASE_DIR/systemd/openclaw-healthcheck.timer" /etc/systemd/system/
cp -n openclaw-healthcheck.env.example /etc/openclaw-healthcheck.env || true
systemctl daemon-reload
systemctl enable --now openclaw-healthcheck.timer
'sudo systemctl start openclaw-healthcheck.servicecat ${OCX_BASE_DIR:-/data/openclaw}/reports/openai_codex_health_latest.json${OCX_BASE_DIR:-/data/openclaw}/scripts/repair_openai_codex_pool.sh${OCX_BASE_DIR:-/data/openclaw}/scripts/decommission_openai_codex_profile.sh openai-codex:acc03 bannedcodex logout && codex -c cli_auth_credentials_store='file' login --device-auth
${OCX_BASE_DIR:-/data/openclaw}/scripts/onboard_openai_codex_profile.sh openai-codex:acc03 /root/.codex/auth.json支持以下三种格式:
host:port:username:passwordsocks5h://user:pass@host:port(推荐 socks5h)http://user:pass@host:port(你当前默认方案)
如果使用第 1 种,会按
OCX_PROXY_DEFAULT_SCHEME自动补全协议。
| 变量 | 默认值 | 作用 |
|---|---|---|
OCX_BASE_DIR |
/data/openclaw |
工作根目录 |
OCX_PROVIDER |
openai-codex |
Provider 名称 |
OCX_MIN_PROFILES |
1 |
最低账号数(低于则 CRITICAL) |
OCX_RECOMMENDED_MIN |
1 |
建议最小账号数(生产建议 >=4) |
OCX_RECOMMENDED_MAX |
12 |
建议最大账号数 |
OCX_EXPIRING_HOURS |
24 |
即将过期阈值 |
OCX_NOTIFY_CHANNEL |
telegram |
告警渠道 |
OCX_NOTIFY_TARGET |
182211955 |
告警目标 |
OCX_ALERT_BURST_COUNT |
3 |
首次异常告警次数 |
OCX_ALERT_REMIND_SECONDS |
3600 |
持续异常提醒间隔 |
OCX_ALERT_DEDUP_SECONDS |
900 |
同类告警去重窗口 |
OCX_CB_FAIL_THRESHOLD |
3 |
熔断触发失败次数 |
OCX_CB_COOLDOWN_SECONDS |
3600 |
熔断冷却时长 |
OCX_AUTO_REORDER |
0 |
1=按健康分自动重排账号顺序 |
OCX_AUTO_REORDER_ACCOUNT_DIVERSITY |
1 |
1=按 accountId 交错重排,减少同账号连续命中 |
OCX_PROBE_HINT_DEMOTE_WITHOUT_AUTO_REORDER |
1 |
1=即使 AUTO_REORDER=0,探针命中 auth/quota/`connected |
OCX_PROBE_HINT_FORCE_TRIP |
1 |
1=探针强信号直接触发熔断(不等累计到阈值) |
OCX_PROBE_HINT_MIN_COOLDOWN_SECONDS |
1800 |
探针推断熔断最短冷却时长 |
OCX_PROBE_HINT_MAX_COOLDOWN_SECONDS |
259200 |
探针推断熔断最长冷却时长(支持从 Try again in ~NNN min 推导) |
OCX_HARD_DISABLE_FAILED |
1 |
1=硬隔离失败账号,仅 active 池参与轮换 |
OCX_HARD_DISABLE_FAILED_ACCOUNT |
1 |
1=按 accountId 联动隔离同账号 profiles |
OCX_ACCOUNT_QUARANTINE_SECONDS |
7200 |
同账号联动隔离时长(秒) |
OCX_RECOVERY_SUCCESS_ROUNDS |
2 |
恢复门槛:连续 N 轮健康才放回 active 池 |
OCX_HARD_DISABLE_MIN_ACTIVE_PROFILES |
2 |
active profiles 低于阈值时自动 fail-open |
OCX_HARD_DISABLE_MIN_ACTIVE_ACCOUNTS |
1 |
active account 数低于阈值时自动 fail-open |
OCX_AGENT_TIMEOUT_SECONDS |
45 |
轻量调用超时 |
OCX_CODEX_AUTH_PATH |
/root/.codex/auth.json |
Codex 登录凭证路径(按运行用户调整) |
OCX_AUTH_PROFILES_PATH |
/root/.openclaw/agents/main/agent/auth-profiles.json |
accountId 回填来源(models status 不含 accountId 时使用) |
OCX_AUTH_SNAPSHOT_DIR |
/data/openclaw/auth/openai-codex |
每个 profile 独立 auth 快照目录 |
OCX_AUTH_SNAPSHOT_PERSIST |
1 |
1=onboard 后把凭据落到 profile 独立路径 |
OCX_RECONCILE_MODE |
missing-only |
profile 反回滚模式(缺失即补) |
OCX_RECONCILE_LOCK_FILE |
/data/openclaw/run/openai_codex_reconcile.lock |
reconcile 互斥锁文件 |
OCX_LOG_RETENTION_DAYS |
30 |
日志保留天数 |
OCX_DRY_RUN |
0 |
1=只检查不发消息 |
OCX_AUTO_REPAIR |
0 |
1=异常时自动触发修复 |
OCX_REPAIR_MIN_INTERVAL_SECONDS |
1800 |
自动修复最短间隔 |
OCX_SUGGEST_DECOMMISSION |
0 |
1=在修复建议中显示删除命令 |
OCX_USE_PROXY_LOGIN |
1 |
1=使用代理登录, 0=直连登录 |
OCX_PROXY_AUTO_FALLBACK |
1 |
1=主代理失败时尝试备用代理池 |
OCX_PROXY_FALLBACK_MAX_ATTEMPTS |
6 |
fallback 最大尝试次数 |
OCX_PROXY_FALLBACK_BACKOFF_SECONDS |
2 |
fallback 退避基数(第 N 次 sleep=N×基数) |
OCX_PROXY_FALLBACK_PERSIST_MAP |
1 |
fallback 成功后是否回写账号映射 |
OCX_PROXY_DEFAULT_SCHEME |
socks5h/http |
host:port:user:pass 这种格式自动补全的协议 |
OCX_PROXY_QUARANTINE_FILE |
/data/openclaw/run/proxy-quarantine.tsv |
代理隔离池文件 |
OCX_PROXY_QUARANTINE_SECONDS |
1800 |
默认隔离时长(秒) |
OCX_PROXY_QUARANTINE_SECONDS_STRICT |
3600 |
严格失败类型隔离时长(如 custom_check_rejected) |
OCX_PROXY_QUARANTINE_SECONDS_SOFT |
900 |
软失败类型隔离时长(如 egress_ip_missing) |
OCX_PROXY_CHECK_CACHE_TTL_SECONDS |
600 |
代理 clean 检测缓存 TTL(秒) |
OCX_PROXY_CHECK_CONCURRENCY |
5 |
批量代理检测并发度 |
OCX_PROXY_CHECK_METRICS_FILE |
/data/openclaw/reports/proxy-check-metrics.jsonl |
代理检测结果落盘文件 |
OCX_ACCOUNT_PROXY_AUDIT_FILE |
/data/openclaw/reports/account-proxy-audit.jsonl |
账号↔代理绑定审计日志文件 |
# 反回滚守护:手动补齐缺失 profile
${OCX_BASE_DIR:-/data/openclaw}/scripts/reconcile_openai_codex_profiles_from_map.sh
# 一次性将当前 auth store 固化成“每 profile 独立凭据快照”
${OCX_BASE_DIR:-/data/openclaw}/scripts/materialize_openai_codex_auth_snapshots.sh
# 限额切号自测(默认 shadow 模式,不污染线上状态)
${OCX_BASE_DIR:-/data/openclaw}/scripts/selftest_quota_failover_switch.sh --mode shadow --timeout 30 --interval 2
# 仅检查不发通知
${OCX_BASE_DIR:-/data/openclaw}/scripts/healthcheck_openai_codex_pool.sh --dry-run
# 无破坏模拟掉线
SIMULATE_UNUSABLE=openai-codex:acc03 ${OCX_BASE_DIR:-/data/openclaw}/scripts/healthcheck_openai_codex_pool.sh || true
# 查看 timer
systemctl status openclaw-healthcheck.timer --no-pager -l | sed -n '1,20p'
# 查看账号↔代理审计日志
tail -n 30 /data/openclaw/reports/account-proxy-audit.jsonl
# 最近24h按profile成功率+失败TopN
/data/openclaw/scripts/report_account_proxy_audit_24h.sh 24 5- 绑定审计脚本:
scripts/audit_account_proxy_binding.sh - 24h 汇总脚本:
scripts/report_account_proxy_audit_24h.sh - 默认审计日志文件:
/data/openclaw/reports/account-proxy-audit.jsonl
建议每次批量导入后跑一次 24h 汇总,快速定位失败账号与失败原因 TopN。
- 原因:导入脚本读取到不兼容的 auth.json 结构(旧版脚本常见)。
- 处理:更新到本仓库当前版本脚本;并确认 auth 文件路径正确。
- 原因:代理 IP 被你的 clean 策略拒绝(风控分数、年龄、代理属性等)。
- 这通常是策略拦截,不是脚本损坏。
- 处理:换下一条代理,或调整 clean check 阈值。
systemd/openclaw-healthcheck.service默认是User=rdpuser,请按你的机器改(例如root)。- 默认 auth 路径推荐:
/root/.codex/auth.json。如使用其他用户,请在命令里传入实际路径。 - 若你只配置了 1 个账号池,建议将
/etc/openclaw-healthcheck.env中OCX_RECOMMENDED_MIN=1,避免新装阶段误报。
- 截图/录屏前,隐藏 Telegram chat id、邮箱、主机名、IP。
- 不要提交
/etc/openclaw-healthcheck.env、auth.json、任何 token 文件。 - 粘贴日志时先脱敏:账号只保留
accXX,不带邮箱。 - 不公开
OCX_NOTIFY_TARGET的真实个人账号,可替换为YOUR_TARGET_ID。
新增能力:
- 按失败类型分级熔断:
auth / network / other - 半开探测:冷却尾段提前探测恢复
- default 账号独立阈值/冷却
- 冷却抖动:错峰解冻,避免同秒重试风暴
- 失败计数衰减:降低短时抖动长期影响
推荐新增配置(/etc/openclaw-healthcheck.env):
OCX_CB_FAIL_THRESHOLD_AUTH=3
OCX_CB_FAIL_THRESHOLD_NETWORK=5
OCX_CB_FAIL_THRESHOLD_OTHER=5
OCX_CB_COOLDOWN_SECONDS_AUTH=3600
OCX_CB_COOLDOWN_SECONDS_NETWORK=600
OCX_CB_COOLDOWN_SECONDS_OTHER=900
OCX_CB_HALF_OPEN_WINDOW_SECONDS=300
OCX_CB_FAIL_THRESHOLD_DEFAULT=4
OCX_CB_COOLDOWN_SECONDS_DEFAULT=1800
OCX_CB_COOLDOWN_JITTER_MIN_SECONDS=30
OCX_CB_COOLDOWN_JITTER_MAX_SECONDS=120
OCX_CB_FAILCOUNT_DECAY_ENABLED=1
OCX_CB_FAILCOUNT_DECAY_INTERVAL_SECONDS=1800如果你看到大量 cooldown active 告警,先确认是否为短时网络抖动;v2 已内置降噪与恢复优化。
- 快速开始:
docs/quickstart-zh.md - 故障排查:
docs/troubleshooting-zh.md - 变更记录:
CHANGELOG.md - Release Notes (EN, latest):
docs/release-notes-2026-03-05.md - 发布说明(中文,最新):
docs/release-notes-2026-03-05.zh-CN.md - 先前发布说明:
docs/release-notes-2026-03-04.md/docs/release-notes-2026-03-04.zh-CN.md - 历史发布说明:
docs/release-notes-2026-03-03.md/docs/release-notes-2026-03-03.zh-CN.md
MIT
