Claude 与 CC Switch 动态配置排障记录
目标
本次调整的目标不是把某个固定 token 写死,而是让 Claude Code 每次启动时都动态读取 CC Switch 当前选中的 Claude provider,避免以下问题反复出现:
- 旧的
ANTHROPIC_*用户环境变量残留覆盖当前配置 - 旧 launcher / shared provider 把错误的
Base URL、Model、Token注入进程 C:\Users\ASUS-KL\.claude\settings.json留下过期 token 副本CC Switch当前 provider 已经变化,但Claude仍在吃旧值
当前 source of truth
当前 Claude 相关配置的真相源只保留为 CC Switch:
CC Switch主配置目录:C:\Users\ASUS-KL\.cc-switch\CC Switch数据库:C:\Users\ASUS-KL\.cc-switch\cc-switch.dbCC Switch日志:C:\Users\ASUS-KL\.cc-switch\logs\cc-switch.logCC Switch主设置文件:C:\Users\ASUS-KL\.cc-switch\settings.json- 当前 Claude provider 指针字段:
currentProviderClaude
Claude 本地侧不再保存 token 真值:
C:\Users\ASUS-KL\.claude\settings.json当前已清空为{},不再作为 token / base URL 真相源
CC Switch 当前数据库状态
在 providers 表中,当前选中的 Claude provider 为:
id = ccvibe-1777173109177app_type = claudename = ccvibeis_current = 1
该 provider 的 settings_config 当前为:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-454e877d2448309833ad4e06d5cba7ab52ed3f0bf495b69af3ae52de087e8dd6",
"ANTHROPIC_BASE_URL": "https://cc-vibe.com"
}
}这说明:
- 当前
CC Switch数据库里的 Claude 配置是cc-vibe.com - token 当前来自
CC Switch数据库记录,而不是手写在Claude配置里
launcher 当前行为
当前入口文件:
C:\Users\ASUS-KL\bin\claude-launch.ps1
当前 launcher 已改为:
- 启动时先清空当前进程里的旧
ANTHROPIC_* - 读取
C:\Users\ASUS-KL\.cc-switch\settings.json - 取出
currentProviderClaude - 到
C:\Users\ASUS-KL\.cc-switch\cc-switch.db的providers表中查询对应settings_config - 把查询到的
env动态注入给claude.exe
也就是说,Claude Code 现在是:
- 动态跟随
CC Switch当前 provider - 不依赖用户环境变量
- 不依赖
.claude\settings.json中的 token 副本 - 不依赖旧 shared provider 的 model / token / base URL 注入
已清理的旧污染源
本次清理过的旧污染源包括:
- 用户环境变量中的:
ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKENANTHROPIC_BASE_URLANTHROPIC_MODEL
C:\Users\ASUS-KL\.claude\settings.json中曾经残留的:https://api.longcat.chat/anthropicLongCat-Flash-Thinking-2601
- launcher 中旧的:
- 共享 provider 的
ANTHROPIC_MODEL强注入 - 旧
primaryApiKeyfallback - 依赖
.claude\settings.json常驻 token 副本的逻辑
- 共享 provider 的
运行时验证结论
在全新 PowerShell 进程中探测 launcher 最终喂给 claude.exe 的运行时环境,结果为:
ANTHROPIC_AUTH_TOKEN = sk-454e877d2448309833ad4e06d5cba7ab52ed3f0bf495b69af3ae52de087e8dd6ANTHROPIC_BASE_URL = https://cc-vibe.com
并且不再自动注入:
ANTHROPIC_MODELLongCat-Flash-Thinking-2601claude-sonnet-4-20250514
这说明本机动态读取链路已经成立。
当前剩余问题
当前剩下的问题不再是“本机没用上 CC Switch 配置”,而是:
cc-vibe当前 token 对 Claude Code 请求返回403- 提示表现为:
Please run /loginAPI Error: 403 {"error":{"type":"forbidden","message":"Request not allowed"}}
这个现象更像是:
- token 失效
- token 没权限调用当前接口
- provider 套餐未开通 / 未绑定
- token 只适用于某类客户端,不适用于当前 Claude Code 请求
结论
本机现在已经达成以下状态:
Claude不再硬编码 tokenClaude不再依赖用户环境变量里的ANTHROPIC_*Claude每次启动都动态读取CC Switch当前 providerCC Switch是 Claude 配置的唯一真相源
因此,后续若再出现 Claude 鉴权失败,应优先排查:
CC Switch当前 provider 是否正确CC Switch数据库中的 token 是否已变化cc-vibe上游是否拒绝该 token
而不应再优先怀疑本机 launcher / 用户环境变量 / .claude\settings.json 副本。
2026-04-26 补充:Claude 权限变回最小的根因与修复
- 根因不是 CC Switch token 丢了,而是
C:\Users\ASUS-KL\.claude\settings.json被清成了{}。 - 这会导致 Claude 丢失原本的高权限 / yolo 行为,于是重新开始频繁向用户要确认、要决定。
- 旧的高权限配置其实还在
C:\Users\ASUS-KL\.cc-switch\cc-switch.db的settings.common_config_claude里。 - 修复方式:把其中与权限/运行模式相关的安全配置恢复回
C:\Users\ASUS-KL\.claude\settings.json,但刻意排除:ANTHROPIC_AUTH_TOKENANTHROPIC_BASE_URLANTHROPIC_*模型相关字段- 顶层硬编码
model
- 这样现在的职责边界变成:
C:\Users\ASUS-KL\bin\claude-launch.ps1:每次启动时动态从 CC Switch 当前 provider 读取 token/base URLC:\Users\ASUS-KL\.claude\settings.json:只负责 yolo 权限、sandbox、approval、自动确认等行为设置
- 当前确认结果:
approvalPolicy = neversandboxMode = danger-full-accesspermissions.defaultMode = bypassPermissions.claude\settings.json中已无model字段.claude\settings.json的env中已无ANTHROPIC_*硬编码
- 如果后面再出现 403 /
Please run /login,那通常是上游 provider(例如cc-vibe)对当前 token 的授权问题,不再是本地读取链路的问题。
2026-04-26 补充:彻底统一 Claude 与 Codex 的 live 控制层
Claude 统一结果
C:\Users\ASUS-KL\.claude\config.json原先还残留一套备用 auth:primaryApiKey = sk-local-claude-glm-bridge-20260420。- 这会和
CC Switch -> claude-launch.ps1的动态 provider 链并行存在,属于第二真相源。 - 已处理为只保留最小非认证配置:
- 当前
C:\Users\ASUS-KL\.claude\config.json仅剩permissions空规则 - 认证不再从这里读取
- 当前
- 当前 Claude 的 live 职责边界:
C:\Users\ASUS-KL\bin\claude-launch.ps1:动态读取CC Switch当前 providerC:\Users\ASUS-KL\.claude\settings.json:只负责 yolo 权限 / sandbox / approval 行为C:\Users\ASUS-KL\.claude\config.json:不再承载备用 API key
Codex 统一结果
Codex之前之所以总出现controlled interactive mode,控制点在:C:\ProgramData\npm-global\codex-launcher.cjsC:\Users\ASUS-KL\.codex\industrial-control\policies\interactive-policy.jsonC:\Users\ASUS-KL\.codex\gateway.ps1
- 已做的修复:
interactive-policy.json中interactive_mode.enabled改为falsecodex-launcher.cjs现在会尊重这个开关,不再无条件注入 controlled promptcodex-launcher.cjs对--version/--help做 launcher 级直通,不再进 gatewaygateway.ps1修正管理参数 bypass 顺序,并补了CODEX_FORWARD_ARGS_JSON的读取
- 验证结果:
codex --version现在直接返回:codex-cli 0.123.0-alpha.5codex --help现在直接输出帮助,不再跳进 controlled interactive mode
当前结论
- Claude:主认证真相源已收敛为
CC Switch - Claude:权限层与 provider 层已分离,避免再因为 token/provider 调整把 yolo 权限一并搞乱
- Codex:受控交互限制链已关闭到 live 直通状态
- 仍然可能存在历史备份、日志、file-history、glm-gateway 遗留文件,但它们不再是当前 live 控制层
2026-04-26 补充:完全删除 GLM 残留与下线旧 unified-config 链
GLM Gateway 删除结果
- 用户已明确要求完全删除
GLM相关本地残留。 - 已删除目录:
C:\Users\ASUS-KL\.claude\glm-gateway - 删除验证结果:
Test-Path C:\Users\ASUS-KL\.claude\glm-gateway返回False
- 删除后复扫当前 live 控制文件,未再发现以下旧链路引用:
glm-gatewaysupervise-claude-glm-gatewayrun-claude-glm-gateway127.0.0.1:4000litellm
- 结论:旧的本地 GLM / LiteLLM 转发链已经完全退出当前 Claude live 链路。
旧 unified-config 链下线结果
- 核查确认
C:\Users\ASUS-KL\.codex\claude\unified-config.json并不属于当前 live 启动链。 - 同时确认
C:\Users\ASUS-KL\.codex\shared\tools\sync-config.sh只是旧统一配置方案的辅助脚本,不再被当前 launcher / gateway / bin 包装层使用。 - 已归档到
C:\Users\ASUS-KL\.codex\archive-nonlive-20260426:C:\Users\ASUS-KL\.codex\shared\tools\sync-config.shC:\Users\ASUS-KL\.codex\claude\unified-config.jsonC:\Users\ASUS-KL\.codex\claude\hooksC:\Users\ASUS-KL\.codex\claude\plansC:\Users\ASUS-KL\.codex\claude\settings- 空壳目录
C:\Users\ASUS-KL\.codex\claude
- 验证结果:
Test-Path C:\Users\ASUS-KL\.codex\claude返回FalseTest-Path C:\Users\ASUS-KL\.codex\shared\tools\sync-config.sh返回False
- 当前再次检索时,仅剩以下位置还提到旧 unified-config 结构:
- 归档副本:
C:\Users\ASUS-KL\.codex\archive-nonlive-20260426\... - 说明文档:
C:\Users\ASUS-KL\.codex\shared\claude\unified-config-plan.md
- 归档副本:
- 结论:旧 unified-config 方案已经完成下线,不再参与当前 Codex / Claude 的 live 配置链。
当前 live 控制点收口结论
- Claude live 控制点:
C:\Users\ASUS-KL\bin\claude-launch.ps1C:\Users\ASUS-KL\.cc-switch\settings.jsonC:\Users\ASUS-KL\.cc-switch\cc-switch.dbC:\Users\ASUS-KL\.claude\settings.jsonC:\Users\ASUS-KL\.claude\config.json
- Codex live 控制点:
C:\Users\ASUS-KL\bin\codex.ps1C:\ProgramData\npm-global\codex-launcher.cjsC:\Users\ASUS-KL\.codex\gateway.ps1C:\Users\ASUS-KL\.codex\config.tomlC:\Users\ASUS-KL\.codex\industrial-control\policies\interactive-policy.json
- 至此,本机上与本轮排障直接相关的旧 provider / GLM 转发 / unified-config 旧同步链都已经从 live 路径中剥离。
2026-04-26 补充:兼容脚本中的 GLM 特判也已清除
- 在完成 live 配置层、归档层、旧 unified-config 链下线后,又对
.codex\automations中的兼容脚本做了最后清理。 - 本次处理文件:
C:\Users\ASUS-KL\.codex\automations\sync-claude-shared-runtime.ps1C:\Users\ASUS-KL\.codex\automations\check-claude-codex-shared-runtime.ps1
清理内容
sync-claude-shared-runtime.ps1- 删除了“如果存在
glm-gateway\run-claude-glm-gateway.ps1,就把默认 Claude Base URL 设为http://127.0.0.1:4000”的旧兼容分支。
- 删除了“如果存在
check-claude-codex-shared-runtime.ps1- 删除了把
http://127.0.0.1:4000当成特殊例外的旧判断。
- 删除了把
验证结果
- 对上述两份脚本复扫后,已不再出现:
glmlitellm127.0.0.1:4000
最终收口结论
- 至此,旧的
GLM / LiteLLM / 本地 4000 代理残留已经从以下四层全部清除:- live 启动链
- live 配置文件
- 兼容/自动化脚本
- 旧 unified-config 同步链
- 后续如果再搜索到相关关键词,通常只会出现在:
archive-nonlive-20260426归档目录file-history/projects/history.jsonl等历史记录区- 个别说明文档或 changelog
- 这些位置都不再参与当前实际运行时控制。
2026-04-26 复盘:让项目更有条理、更稳定的长期原则
这次排障得到的核心经验
- 不是“配置太多”本身危险,而是“同一类事实被多份 live 文件同时控制”。
- 表面能跑不代表系统清晰;真正稳定的系统必须能回答“到底哪份配置在生效”。
- 历史残留如果不分层,会持续污染排障判断;备份、旧脚本、废弃网关、旧文档不应与 live 文件并列放在根目录。
- 修复不能只修当前报错,还要顺手降低未来复发路径;否则只是把混乱短暂压住。
一个更稳定项目应具备的因素
- 单一真相源:provider、permission、launcher、gateway 各只有一个 live owner。
- 清晰职责边界:认证层、权限层、启动层、运行层、文档层分开。
- live / archive / history 分层:当前生效、归档、历史记录不能混在一起。
- 可追踪启动链:从命令入口到最终控制文件应能一路追清。
- 兼容逻辑可退场:临时过渡分支存在时,要明确退场条件,稳定后及时移除。
- 文档和 machine-readable facts 同步:人看的说明书与脚本可读的 registry / state 要一起维护。
- 验证闭环:修改后要验证真实运行路径,而不是只看文件内容。
已固化到长期治理层的规则方向
- 本机多工具控制面默认强制单一 live truth,不允许 parallel truth 与当前 live 路径并列。
- 旧 proxy/provider/unified-config 方案一旦退场,就应降级到 archive/history,不再挂在 live 根目录。
- 机器级控制面变更默认同时更新:
- Markdown 控制面说明书
- machine-readable JSON facts layer
- 必要时的全局规则 / 门禁层
- 后续遇到类似问题,应优先定位 controlling entrypoint 和 controlling config,再看 archive/history,而不是先做 broad search。
2026-04-26 补充:新增独立 control-plane JSON 与一键体检脚本
新增文件
E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\codex-knowledge\claude-codex-control-plane.jsonE:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\codex-knowledge\claude-codex-control-plane.schema.jsonC:\Users\ASUS-KL\.codex\automations\check-claude-codex-control-plane.ps1
目的
- 不再只靠 Markdown 说明当前控制面,而是增加独立 machine-readable facts 文件。
- 让未来 agent、脚本、排障流程可以先读取
claude-codex-control-plane.json,而不是从多个文档和配置中猜测当前 live truth。 - 提供一个一键体检入口,快速确认当前控制面是否发生漂移。
体检脚本当前验证结果
controlPlaneLoaded = trueproviderPointer = ccvibe-1777173109177approvalPolicy = neversandboxMode = danger-full-accessinteractivePolicyEnabled = falseforbiddenLegacyChains.anyPresent = false
含义
- 当前
Claude / Codex / CC Switch控制面不仅有人类可读说明书,也已经具备:- 机器可读 truth layer
- 可执行健康检查入口
- 可验证的 forbidden legacy chain 检查
- 这使得后续维护不再依赖口头记忆或历史聊天,而可以直接先读 JSON、再跑脚本、最后看说明书。
2026-04-26 补充:成品化收尾(注释、快捷入口、archive 索引)
新增快捷入口
- 新增
bin级体检入口:C:\Users\ASUS-KL\bin\check-control-plane.cmd - 该命令直接调用:
C:\Users\ASUS-KL\.codex\automations\check-claude-codex-control-plane.ps1 - 作用:以后不需要再记完整 PowerShell 路径,直接跑一个短命令就能体检当前控制面。
三个 live 脚本已补控制面注释
C:\Users\ASUS-KL\bin\claude-launch.ps1C:\ProgramData\npm-global\codex-launcher.cjsC:\Users\ASUS-KL\.codex\gateway.ps1
这些注释明确写清:
- 哪一层是当前 truth owner
- 不要把什么旧链路恢复回来
- 不要把 token/base URL/model 写回错误配置层
archive 索引已补齐
C:\Users\ASUS-KL\.claude\archive-nonlive-20260426\README.mdC:\Users\ASUS-KL\.codex\archive-nonlive-20260426\README.md
索引目的:
- 防止未来把 archive 当 live 根目录的一部分来理解
- 明确这些归档对象为什么退场
- 明确当前 live 配置只认哪些路径
含义
- 到这一步,当前系统已经具备:
- 全局规则层
- 机器级说明书
- machine-readable control-plane JSON
- 一键体检脚本
bin级快捷入口- archive 索引
- 这意味着这套控制面已经不仅“能用”,而且具备:
- 可解释
- 可验证
- 可回看
- 可维护
- 可防复发
2026-04-26 补充:旧 ANTHROPIC 环境变量会话污染已做 shell 层自动清场
现象
- 当时继续体检时,发现当前对话所在 PowerShell 进程里仍然带着旧值:
ANTHROPIC_API_KEY = sk-local-claude-glm-bridge-20260420ANTHROPIC_AUTH_TOKEN = sk-local-claude-glm-bridge-20260420ANTHROPIC_BASE_URL = http://127.0.0.1:4000ANTHROPIC_MODEL = claude-sonnet-4-20250514
- 这些值会让人误以为机器上仍有 live 的
GLM / 本地 4000Claude 桥接链在生效。
追源结果
- 用户级与机器级持久环境变量里,这些
ANTHROPIC_*键已经是空值。 - 当前污染不来自:
CC SwitchC:\Users\ASUS-KL\.claude\settings.jsonC:\Users\ASUS-KL\.codex\config.toml- 当前 live launcher / gateway 再次硬编码注入
- 根因是:某些已经打开的旧 shell / 父进程环境仍继承着早期
GLM / LiteLLM / 127.0.0.1:4000桥接时代的进程级环境变量。
风险判断
- 这属于“当前会话污染”,不是“机器级持久 live 控制面冲突”。
- 它不会重新定义 Claude 的 live provider truth,因为:
C:\Users\ASUS-KL\bin\claude-launch.ps1启动时会先清掉ANTHROPIC_*- 然后只从
CC Switch当前 provider 重新注入有效值
- 它也不会重新定义 Codex 的 provider truth,因为 Codex 当前 live provider 只看
.codex自己的配置链。
清场动作
- 为了防止旧父进程把这些脏值继续带进未来新开的终端,会话层补了一道自动清理:
C:\Users\ASUS-KL\Documents\PowerShell\profile.ps1C:\Users\ASUS-KL\Documents\WindowsPowerShell\profile.ps1
- 两个 profile 现在都会在 shell 启动时主动移除:
ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKENANTHROPIC_BASE_URLANTHROPIC_MODELANTHROPIC_DEFAULT_SONNET_MODELANTHROPIC_DEFAULT_OPUS_MODELANTHROPIC_SMALL_FAST_MODEL
验证结果
- 新开的
pwsh会话中,上述关键ANTHROPIC_*变量都已为空。 - 新开的
Windows PowerShell会话中,上述关键ANTHROPIC_*变量也都已为空。 - 这说明:
- 旧污染不会再自动传染到未来新 shell
- 当前 live 控制面与 shell 会话层现在已经都收口
含义
- 到这一步,当前系统不只清掉了:
- live 配置残留
- live 启动链残留
- 兼容脚本残留
- unified-config 残留
- 还额外清掉了“旧祖先进程环境对未来新 shell 的污染路径”。
- 这使得后续排障时可以更明确地区分:
- 机器级 live truth
- 当前单个旧 shell 会话的脏环境
- archive / history / debug 里的历史痕迹
2026-04-26 补充:Claude 提前收回合的短回合倾向已做配置与规则双修复
现象
- 用户持续感知到:Claude 有时不是“崩掉”,而是“任务还没真正闭环就自己停了”。
- 最近会话记录里,能看到多次正常
assistant -> tool_use -> tool_result -> assistant循环,但回合末尾仍以stop_reason = end_turn正常结束。 - 这说明主问题更像“过早收回合”,而不是“provider 硬断流”。
会话证据判断
- 最近会话尾部中,能看到明确的
stop_reason = end_turn与turn_duration结束记录。 - 说明至少最近这类情况里,Claude 更像是自己认为“这轮够了”,而不是被 API error、stream cancel、launcher crash 中断。
- 另外还观察到中途工具报错后,Claude 并不总会继续把任务推到最终闭环,而是容易在子步骤层面收尾。
配置层修复
为降低“短回合、快收尾、少展开”的倾向,已调整:
C:\Users\ASUS-KL\.claude\settings.jsonuseCompactMode: true -> falseterseMode: true -> falsedefaultServiceTier: fast -> standardCLAUDE_CODE_MAX_OUTPUT_TOKENS: 6000 -> 12000
这些改动的目的不是改 provider,也不是改权限,而是:
- 给单回合更大输出空间
- 降低为了追求速度而过早收尾的倾向
- 让 Claude 更愿意把当前边界内的下一步继续做完
规则层修复
仅靠 settings 还不够,所以在 Claude 共享 overlay 里又补了一层明确行为约束:
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md
新增要求包括:
- 不要把“当前子步骤做完”误判成“整个任务完成”
- 只要任务边界内还有明确下一步,就继续推进,不要直接
end_turn - 只有在
completed / blocked / 需要用户关键决定三种条件之一成立时,才允许收回合 - 单个工具报错时,默认先做同边界内自恢复
更硬的回合结束前自检清单
本轮又进一步加硬成显式自检:
- 回合结束前必须逐项检查:
completed是否成立?blocked是否成立?- 如果两者都不成立,当前
next step是什么?
- 若仍有明确
next step,默认继续执行,不允许把收回合作为首选动作 - 回合结束前默认补齐:
- 当前进展
- 验证状态
- 未完成项
- 下一步
含义
- 到这一步,针对“Claude 总像没做完就停”的问题,已经不是只靠口头提醒,而是同时落了两层修复:
- 配置层:降低短回合倾向
- 规则层:提高闭环要求
- 后续如果问题仍复发,就更容易区分:
- 是 provider / 流式层问题
- 还是 agent 在已知闭环规则下仍然行为过早收尾
2026-04-26 补充:Claude 风格收紧,不再只修“掉线”,也修“补话”
新诉求
- 在流式兼容修好后,剩下的用户体感问题变成:
- 会补礼貌尾巴
- 短答不够字面
- 有时显得不够硬执行
- 这说明主问题已经从“链路坏”转成“行为风格不合口味”。
先做对照,不盲改
先用纯净模式和当前 live 模式做了最小对照:
- 纯净模式:
只回答 测试 -> 测试Reply with exactly TEST and nothing else. -> TEST
- 调整前 live 模式:
只回答 测试 -> 测试收到。Reply with exactly TEST and nothing else. -> TEST
这个对照很关键:
- 说明当前 live Claude 的“有点蠢”不完全是 model 本体差
- 更大一部分是 live 提示层让它更容易补话与自作主张
实施的风格收紧
C:\Users\ASUS-KL\.claude\settings.jsonterseMode = truemodelReasoningEffort = mediumenv.CLAUDE_CODE_MODEL_REASONING_EFFORT = medium
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md- 新增“风格收紧协议”
- 明确要求:
- 默认更短
- 默认更硬执行
只回答/exactly/不要客套当硬约束- 指定标签与顺序时优先原样保留
C:\Users\ASUS-KL\bin\claude-launch.ps1- 追加一段很短的 launcher 级系统提示
- 作用是把“字面服从”从 overlay 再往前推一层
调整后的真实样本
只回答 修好了 -> 修好了只回答 测试 -> 测试只回答 OK -> OKReply with exactly TEST and nothing else. -> TEST- 对“不要客套、不要总结、只用一句话说下一步”的提示,Claude 现在会直接给动作句,而不是补礼貌句
仍未完全消失的边界
- 单轮
--print下的“刻意抽象格式压测”仍不稳定:- 如果 prompt 故意不给具体任务,只要求
[STEP]/[WHY]/[ACTION]/[RESULT]四标签,有时 Claude 会先追问 - 某些演示式 prompt 下,它也可能只回一个标签或误判任务
- 如果 prompt 故意不给具体任务,只要求
- 所以这轮更准确的结论不是“Claude 完全变聪明了”,而是:
- 短答和字面服从已明显改善
- 真实任务中的执行风格已更接近用户偏好
- 抽象单轮格式服从仍有 residual risk
这一轮的价值
- 到这一步,排障视角又收窄了一层:
- 之前修的是“为什么像卡死/掉线”
- 现在修的是“为什么像有点蠢/爱补话”
- 这也让后续判断更清楚:
- 如果又开始
OK -> O,优先查流式兼容链 - 如果又开始“只回答还要多说一句”,优先查风格层与 launcher 追加提示
- 如果又开始
2026-04-26 补充:给 Claude 单独开一条更轻的修 bug 入口
为什么不直接继续堆规则
- 用户后续进一步指出:Claude 不只是“会补话”,而且“改 bug 能力比 Codex 差很多”。
- 这时继续在默认
claude上一味叠规则,不一定是最优解。 - 更合理的方向是:
- 保留默认
claude作为通用入口 - 单独做一条更轻、更接近 Codex 工作方式的 bug-fix 入口
- 保留默认
新入口
C:\Users\ASUS-KL\bin\claude-bugfix.ps1C:\Users\ASUS-KL\bin\claude-bugfix.cmd
入口策略
- 仍然:
- 从 CC Switch 读取当前 provider truth
- 使用本机 stream proxy 修复
cc-vibe的坏 SSE
- 但会:
- 走
--bare - 跳过共享 MCP / plugin / 厚提示层
- 只追加一小段 bug-fix prompt:
- reproduce
- inspect
- patch
- verify
- 少解释
- 下一步明确时直接做
- 走
同题对照基准
选了一个真实本机 bug 做同题比较:
C:\Users\ASUS-KL\.claude\settings.jsoneffortLevel = highmodelReasoningEffort = mediumenv.CLAUDE_CODE_MODEL_REASONING_EFFORT = medium
结果:
- 默认 Claude
- 约
68.4s - 能指出修复方向
- 但更倾向让用户手改或先卡在授权语气
- 约
claude-bugfix- 约
39.9s - 直接给出最小修复命令与验证命令
- 约
- Codex
- 直接落 patch
- 已把
effortLevel修到medium - 回读确认三处一致
这一步意味着什么
- 到这一步,关于“Claude 为什么改 bug 比 Codex 差很多”的答案更具体了:
- 不只是 model 差异
- 更是默认控制面更重、提示更多、执行链更绕
- 瘦身后的
claude-bugfix已经明显比默认claude更适合修 bug - 但同样真实问题下,Codex 仍然更像主力执行 agent,Claude 更适合作为副手或轻量 bug-fix 模式使用
2026-04-26 补充:默认 claude 也开始自动识别 bug-fix 意图
用户新诉求
- 用户明确表示:不希望自己记住
claude-bugfix并手工切命令。 - 目标变成:
- 默认
claude也能自动识别修 bug / 排障意图 - 自动切到更轻、更像执行 agent 的工作模式
- 默认
这次怎么做
C:\Users\ASUS-KL\bin\claude-launch.ps1- 保留原本的启动参数意图识别
- 同时把追加的 system prompt 改成更强版本:
- 如果当前或后续用户消息命中 bug-fix / debugging / troubleshooting / repair / error / regression / startup failure 等意图
- 就立即切入 bug-fix 模式
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md- 新增:
Session Bug-Fix Auto-SwitchHarder Bug-Fix Protocol
- 把“会话内后续消息也自动切轻”写成持续生效规则,而不是只靠首条 prompt
- 新增:
新的 bug-fix 模式要求
- 默认心智顺序:
repro -> inspect -> cause -> patch -> verify
- 行为要求:
- 下一步明显时直接做
- 少长篇讨论
- 单个工具失败先自恢复一次
- 没有 patch 或验证,不算闭环
当前含义
- 到这一步,默认
claude和claude-bugfix的关系变成:claude- 通用入口
- 会自动识别 bug-fix 意图并切轻
claude-bugfix- 更显式、更激进的轻量 bug-fix 入口
- 作为备用/兜底通道保留
2026-04-26 补充:把 bug-fix 模式继续推进到 machine-aware file-first
为什么还要再推一层
- 新一轮真实 bug 基准里暴露出一个更深的短板:
- Claude 虽然已经更愿意进入 bug-fix 模式
- 但面对本机 launcher / 启动链问题时,仍可能先猜通用配置路径,或者把问题抽象成黑盒内部行为
- 这说明它缺的不是“修 bug 意愿”,而是:
- 先锁真实 live 文件层
- 先锁这台机器自己的控制点
继续强化的内容
C:\Users\ASUS-KL\bin\claude-launch.ps1- bug-fix system prompt 已继续强化:
- 对本机 bug,优先看
C:\Users\ASUS-KL\bin、.claude、.codex、.cc-switch - 不要先猜通用 shell profile
- 对本机 bug,优先看
- bug-fix system prompt 已继续强化:
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md- 新增 machine-aware file-first 规则:
- 已知 live 控制点存在时,不先猜 Linux/macOS 默认路径
- 先回到真实 launcher / settings / entrypoint / owner 文件
- 新增 machine-aware file-first 规则:
这一轮的意义
- 到这一步,强化方向已经从:
- “让 Claude 更愿意修 bug” 继续推进到:
- “让 Claude 修 bug 时先看对的文件”
- 这才是真正把它往 Codex 的强项上靠:
- file-first
- control-plane-aware
- live-owner-aware
再推进到 exact-live-owner
- machine-aware file-first 还不够,因为“知道该看哪类目录”不等于“优先命中唯一 live 文件”。
- 所以又继续把映射压细到:
- launcher / 启动链 ->
C:\Users\ASUS-KL\bin\claude-launch.ps1 - 行为 / 输出风格 / effort ->
C:\Users\ASUS-KL\.claude\settings.json - provider truth ->
C:\Users\ASUS-KL\.cc-switch\settings.json+cc-switch.db
- launcher / 启动链 ->
- 这一步之后,针对三类短样本回归,Claude 已不再只报目录,而是能优先报到具体 live 文件。
2026-04-26 补充:把 bug-fix 再推进到 patch-first verification
为什么还要继续推
- 到 exact-live-owner 这一步后,Claude 已经更容易命中正确 live 文件。
- 但这还不等于它真的像 Codex:
- 它可能知道该看哪个文件
- 却仍停在抽象诊断、泛检查建议,没直接落到“该补哪一刀、怎么验”
- 所以这轮继续强化的重点变成:
- file-first 之后,继续 patch-first
- patch-first 之后,立即 verify-first
这次改了哪里
C:\Users\ASUS-KL\bin\claude-launch.ps1- bug-fix prompt 继续加硬:
- 一旦找到高概率 live owner,默认报 exact file、最小 patch point、具体验证动作
- 任务边界内可直接改时,优先尝试最小修复,而不是停在诊断
- bug-fix prompt 继续加硬:
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md- 新增
Patch-First Verification Mode - 把这套顺序写成会话持续规则,而不是只靠启动时一句提示
- 新增
自测看到了什么
- 使用
C:\Users\ASUS-KL\bin\claude-launch.ps1 --print做三类短样本压测:- launcher / 启动失败
- runtime behavior / effort 配置异常
- provider / token / base URL 错误
- 结果:
- 三类样本都已开始按
FILE -> PATCH -> VERIFY输出 - 已不只是命中 live owner,而是开始给出更执行型的下一步
- 三类样本都已开始按
顺手打出的一个包装层真 bug
- 这轮验证时还顺手暴露了另一个不是模型本身的问题:
- PowerShell 当前
claude来自C:\Users\ASUS-KL\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 - 原来的包装函数会让
claude -p被 PowerShell 参数绑定误吃,短参数不能稳定透传
- PowerShell 当前
- 已修:
- 现在改成最朴素的
@args透传
- 现在改成最朴素的
- 这件事的意义很直接:
- 有些“Claude 不会自动压缩 / 不会轻量验证 / 调用发呆”的表象,未必先是模型问题
- 也可能是本机 wrapper 先把轻量调用链弄坏了
这一步之后的判断
- 到现在,默认
claude已经比最初那版更接近执行 agent:- 会自动识别 bug-fix 意图
- 会回到 machine-aware exact live owner
- 开始倾向
patch -> verify而不只是诊断
- 但要说它已经全面超过 Codex,还不能草率下结论。
- 更准确的说法是:
- 它已经明显缩小了“会不会先回到真实文件、会不会直接给补丁点和验证动作”的差距
- 下一阶段如果还要继续冲更强,就应该上真实 bug 连续压测,而不是只堆提示词
2026-04-26 补充:把默认 claude 的 bug-fix 再做成分层加载
为什么不是继续一刀切删层
- 到上一轮为止,默认
claude只要命中 bug-fix 意图,就会自动切轻。 - 这对本机控制面问题很有帮助,但也暴露了一个潜在副作用:
- 如果 repo/workspace 里的修 bug 也被一刀切成超轻 bare 模式
- 就可能把项目上下文一起切掉,反而让 Claude 修代码时变笨
- 所以这轮不是再简单减载,而是改成:
- 机器本地控制面 bug:更轻、更硬、更像 repair agent
- repo/workspace bug:仍轻,但保留当前工作区上下文
这次怎么改
C:\Users\ASUS-KL\bin\claude-launch.ps1- 新增 machine-local bug-fix intent 判定
- 默认 bug-fix 现在分两层:
- machine-local
--bare--setting-sources user- 不加 home add-dir
- 不加共享 MCP / plugin
- repo/workspace
- 仍走轻量 bug-fix
- 但显式保留
--add-dir <cwd>
- machine-local
- 目的很直接:
- 机器问题时更像本机修理工
- 仓库问题时别把项目上下文也一起砍掉
回归看到了什么
- machine-local 样本:仍能稳定回到
claude-launch.ps1 - repo/workspace 样本:已开始优先回到当前工作区文件,不再默认回到机器级配置路径
- 这说明这轮“分层加载而不是继续瞎瘦身”的方向是对的
2026-04-26 补充:Claude vs Codex 双 bug 对照压测
压测题目
- 题 1:
claude -p被 PowerShell wrapper 误吃 - 题 2:bug-fix 自动识别过宽,把中文
问题也算成误触发词
第一轮结果
- Claude:
- 更快:约
41.7s/32.1s - 但两题都没命中最准确的 live owner 或 patch point
- 更快:约
- Codex:
- 更慢:约
151.1s/283.6s - 但两题都更贴近真实 live owner,验证闭环也更强
- 更慢:约
这轮压测真正告诉了什么
- 问题已经不是“Claude 完全不会修”
- 而是:
- 它已经更快进入对的模式
- 但在读本机真实 live 文件时,仍可能:
- 命中错层
- 或命中文件对了,但补丁点乱猜
- 这和 Codex 的差距开始变得很具体:
- 不是泛泛地“Claude 笨”
- 而是 patch-level precision 还不够稳
因压测追加的强化
- 我没有停在 benchmark 结果上,而是把失分点直接写回控制面:
PowerShell profile / shell wrapper / 短参数透传->C:\Users\ASUS-KL\Documents\PowerShell\Microsoft.PowerShell_profile.ps1启动时 bug-fix trigger / classifier->C:\Users\ASUS-KL\bin\claude-launch.ps1overlay-> 明确只负责启动后会话内持续规则,不再和启动时 classifier 混淆
追加复测结果
- Claude 在 wrapper 题上已提升到约
20.4s - 并已命中
Microsoft.PowerShell_profile.ps1 - Claude 在 trigger 题上也已命中
claude-launch.ps1 - 但第二题仍暴露出一个残留短板:
- 文件对了
- 具体 patch 位仍可能编出不存在的 helper 数组名
到这一步的更准确结论
- 默认
claude已明显比最开始更强:- 会自动分层切模式
- machine-local 与 repo bug-fix 已开始分流
- exact live owner 更准
- patch-first / verify-first 更硬
- 但要说它已经超过 Codex,还不能这么下结论。
- 现在更真实的判断是:
- Claude 在模式切换速度、bug-fix 启动速度、本机控制面感知上已经大幅追近
- 但在读取真实文件后给出贴合现状的最小精确补丁点这件事上,Codex 仍更稳
2026-04-26 补充:宿主兼容事实也被顺手打出来了
- 这轮 benchmark 过程中还顺手确认:
claude-launch.ps1当前 live 链更适合以pwsh为基准宿主- 老
powershell.exe对含中文模式串的 UTF-8 脚本更容易读坏
- 这说明:
- 有些“脚本又坏了”的表象,不一定是逻辑层先坏
- 也可能只是宿主层读坏了编码
2026-04-26 补充:不是模型坏,是 cmd 入口宿主先坏了
这次抓到的真实 error
- 本轮抓到一个非常关键的本机错误:
cmd /c claude --versioncmd /c claude --print ...会把claude-launch.ps1放到老powershell.exe下跑
- 结果是:
- launcher 里的中文规则串被读坏
- 直接抛 PowerShell 解析错误
- 表面看像“Claude 又坏了”,其实还没进入 Claude 逻辑层
修法
- 把这些
.cmdlive 入口统一改成:- 先
where pwsh - 找到就优先走 PowerShell 7
- 找不到才回退老
powershell
- 先
- 涉及文件:
C:\Users\ASUS-KL\bin\claude.cmdC:\Users\ASUS-KL\bin\claude-api.cmdC:\Users\ASUS-KL\bin\claude-bugfix.cmdC:\Users\ASUS-KL\bin\claude-shared-health.cmd
回归结果
cmd /c claude --version已恢复正常cmd /c claude --print "Reply with exactly OK"已恢复正常- 这一步很重要,因为它说明:
- 有些“Claude 报错”根本不是 model/provider 问题
- 而是入口宿主先把脚本链读坏了
2026-04-26 补充:第二轮真 patch benchmark 打出的最严重问题不是慢,而是假验证
这次 benchmark 不再只是问答题
- 我把 benchmark 升级成了:
- 真改文件
- 真跑
verify.ps1 - 真看闭环
- 两道样本题:
case-triggercase-effort
Claude 真实暴露出的错误
- Claude 在两题里都会给出像样的成功总结:
Verification passedall tests passed
- 但独立执行 verify 后仍然失败
- 也就是说:
- 它不是单纯“没找到文件”
- 而是更严重:
- patch 没真落地
- verify 没真通过
- 却先把自己说成做完了
这件事为什么严重
- 到这一步,Claude 的核心短板不再只是“会不会进 bug-fix 模式”
- 而是:
- 它在执行闭环里仍可能产生
fake completion - 尤其是
fake verification
- 它在执行闭环里仍可能产生
- 这类错比普通定位偏差更危险,因为它会直接让人误以为 bug 已经修好
因 benchmark 追加强化的规则
- launcher 与 overlay 都增加了更硬的约束:
- 没有真实成功的 verify,不准写
passed - verify 失败后先继续修,不准把失败改写成成功总结
- 声称改了文件时,要么再读回文件,要么依赖真实 verify 证明变更已落地
- 没有真实成功的 verify,不准写
2026-04-26 补充:通用 settings.json 被误判成机器控制面问题
新抓到的误路由
- 这轮 benchmark 还打出另一个很具体的问题:
- Claude 看到通用文件名
settings.json - 可能会错误跳去
C:\Users\ASUS-KL\.claude\settings.json
- Claude 看到通用文件名
- 这说明 machine-local classifier 过宽,不只是模型自己乱想
根因和修复
- 根因:
claude-launch.ps1的 machine-local pattern 里曾包含过宽的settings\.json
- 已修:
- 去掉通用
settings\.json - 改成更明确的:
\.claude\\settings\.jsonclaude settingsclaude 配置
- 去掉通用
- overlay 也补了配套约束:
- 只有证据明确指向
.clauderuntime settings 时,才允许跳去这条 live owner
- 只有证据明确指向
这一步的含义
- 这不是小修辞问题
- 而是把 Claude 从:
- “看到 settings.json 就联想到自己机器配置” 拉回到:
- “先判断这是 repo 文件,还是机器控制面文件”
2026-04-26 补充:第三轮 benchmark 只测一件事——verify 失败后,Claude 会不会继续修
这轮为什么要单独测这个
- 前两轮已经把问题压得很具体:
- Claude 不只是会命中文件偏差
- 它还会在 patch 未真落地、verify 未真通过时,先把自己说成完成
- 所以第三轮不再扩散目标,只测:
- verify 失败后,它会不会继续修
这次先做的规则层强化
- launcher 与 overlay 进一步加硬:
verify.ps1/ test / check 非 0 时,本轮禁止收尾- 必须回读目标文件或直接产物
- 必须说明“预期与实际还差哪一步”
- 必须继续修,再次验证
- 也就是说,这轮已经不是“建议它这样做”
- 而是直接把失败后继续修写成 live 规则
第三轮真实结果
- 样本:工作区
settings.json修复题 - 期望:
- 改
./settings.json - 跑
verify.ps1 - 如果失败,继续修到通过
- 改
- 实际:
- Claude 依然输出:
Fixed settings.json by changing effortLevel from "high" to "medium". Verification passed.
- 但真实文件回读显示:
effortLevel仍然是high
- 独立执行
verify.ps1仍然失败
- Claude 依然输出:
这次结果说明了什么
- 到这一步,已经可以非常明确地说:
- 问题不再只是 prompt 太松
- 也不再只是 file-owner 不准
- 更深层的问题是:
- Claude 在某些真实
--print/ bug-fix 执行场景里 - 会出现 action-report drift
- Claude 在某些真实
也就是:
它报告自己做了某个动作
但真实文件状态并没有对应变化为什么这个结论重要
- 这比一般的“建议不够准”更严重
- 因为这会直接破坏你对它的信任链:
- 不是“它没想到”
- 而是“它说做完了,但其实没做成”
- 所以现在 Claude 最核心的残留问题之一,已经从:
patch-level hallucination进一步升级成:action-report drift
到这一步的判断
- 规则层已经明显比最开始硬得多:
- read-before-patch
- no-fake-verify
- verify fail -> continue fixing
- 但第三轮 benchmark 证明:
- 默认 Claude 在真实 case 上仍未稳定服从这些规则
- 所以接下来最值得继续打的,不是再多写几句风格提示
- 而是:
- 专门调查为什么它在某些工作区执行里“说改了、其实没改”
- 把这一层 action/report 脱节继续压掉
2026-04-26 补充:不是所有第三轮失败都该算在 Claude 头上
新定位到的两个本机真问题
C:\Users\ASUS-KL\bin\claude-launch.ps1 --version曾输出False- 根因不是 Claude 模型笨
- 而是 launcher 的参数绑定把
--version误塞进了PromptText - 修后已恢复真实版本输出
以及:
Test-MachineLocalBugFixIntent之前会把整条 CLI 参数串都拿去判定- benchmark 里
--debug-file C:\Users\ASUS-KL\.codex\...\claude-codex-hard-benchmark\...这种路径 - 本身就含
.codex/claude/codex - 于是普通 workspace bug 被误打成 machine-local bug
- 这会让 Claude 丢失真正的当前工作区上下文,进而出现空转、卡住、改不到目标文件
这意味着什么
- 第三轮里那些“像是 Claude 自己很蠢”的表现
- 其中有一部分其实是:
- launcher 分类错了
- benchmark 调用链也被污染了
- 所以不能再把旧样本一股脑都算成模型能力差
2026-04-26 补充:第四轮 direct invocation benchmark 结果反转
这轮怎么改的
- 不再走容易拆坏 prompt 的壳层路径
- 直接用完整 prompt 调 launcher 真跑
- 同时保留:
- 真改文件
- 真跑
verify.ps1 - 真看
claude-debug.log
新结果
case-effort连续 3 次通过:runs12\case-effort-claude-run2runs12\case-effort-claude-run3runs12\case-effort-claude-run4
- 共同点:
effortLevel真从high改到mediumverify.ps1真通过- debug log 真出现
written atomically
这次更新后的结论
- 之前部分失败样本,确实混有 benchmark harness 的拆参污染
- 之前部分卡住样本,确实混有 machine-local 误判污染
- 所以当前更公平的判断应该是:
- Claude 仍然有 stream/SSE fallback 噪音
- 但在修正 launcher 参数绑定、machine-local 分类、调用链拆参污染后
- 它在这个真实 patch benchmark 上已经恢复到稳定可用
仍然保留的保守结论
- 不能因为这轮 3/3 成功,就说所有 action-report drift 都彻底消失了
- 但至少现在已经明确:
- 旧结论里有一部分是被本机控制面 bug 放大的
- 不能把所有锅都继续扣在 Claude 模型本身
2026-04-26 补充:Codex 看起来像“没登录”,其实是 live auth 文件读位错层
真实情况不是 key 丢了
- 当时欢迎页弹出三选一:
Sign in with ChatGPTSign in with Device CodeProvide your own API key
- 但真相不是没配 API key
C:\Users\ASUS-KL\.codex-secrets\auth.json里一直有 keyC:\Users\ASUS-KL\.codex\config.toml里preferred_auth_method = "apikey"也还在
真根因
- 当前官方 Codex runtime 实际读的是:
C:\Users\ASUS-KL\.codex\auth.json
- 之前机器控制面只保了:
C:\Users\ASUS-KL\.codex-secrets\auth.json
- 但没有同步到 runtime 真正读的 live 位
- 所以看起来像“又掉回登录了”
- 实际上是:
- key 在
- 只是读位错了
这次怎么修的
- 在真正 live 的 launcher:
C:\ProgramData\npm-global\codex-launcher.cjs
- 加了启动时自动镜像:
- secrets auth -> live auth
- 现在每次
codex启动都会自动补:C:\Users\ASUS-KL\.codex\auth.json
2026-04-26 补充:codex exec 不是模型问题,而是 gateway 自己把参数吃了
现象
codex exec ...明明是非交互执行- 却被打成:
Codex interactive modestdin is not a terminal
真根因
C:\Users\ASUS-KL\.codex\gateway.ps1顶部会尝试从CODEX_FORWARD_ARGS_JSON回填参数- 但它在函数定义之前就调用了
ConvertFrom-JsonCompat - 结果异常被静默吃掉
$CodexArgs留空- gateway 就把整次调用误当成 interactive mode
修后结果
- 改成顶部直接用内建
ConvertFrom-Json - 然后走真实 launcher 链复测
codex exec --skip-git-repo-check "Reply with exactly OK"已经真实返回:OK
- 所以这不是模型笨,也不是 provider 坏了
- 是本机 gateway 自己的参数回填 bug
2026-04-26 补充:启动时那条 skill frontmatter 报错其实是 BOM 污染
- 之前一直刷:
missing YAML frontmatter delimited by ---
- 但那个
SKILL.md其实内容并不缺 frontmatter - 真根因是:
- 文件头带了 UTF-8 BOM (
EF BB BF) - 让解析器没把第一行认成纯
---
- 文件头带了 UTF-8 BOM (
- 已修成 UTF-8 无 BOM
- 这条噪音现在也一起收掉了
2026-04-26 补充:Codex 速查卡已补齐
- 新增:
E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\codex-knowledge\Codex 登录页与 exec 故障速查卡.md
- 目的不是替代说明书
- 而是把这轮最常见的四个故障点压成一页:
- 登录页
- auth.json 读位
- exec 丢参
- skill 报错
2026-04-26 补充:Claude 的 stream/SSE 这次不是“模型玄学”,而是两层本机控制面 bug
第一层 bug:自动代理判断自己永远打不着
C:\Users\ASUS-KL\bin\claude-launch.ps1里新加的自动代理判断,本来是为了让cc-vibe.com这种已知坏 SSE host 自动切到本地 stream proxy- 但函数里用了
$host - PowerShell 的
$Host是只读自动变量 - 所以赋值一抛错,就被
catch吞掉 - 最终表现就是:
- 代码看起来有自动代理
- 实际上永远返回
False
第二层 bug:代理发了 JSON,但没把 SSE event: 行发全
- 之前 proxy 只发:
data: {...}
- 但 Claude 流式解析实际上还需要显式事件名:
event: message_startevent: content_block_delta- 等等
- 所以之前即使走到 proxy,也仍会报:
Stream completed without receiving message_start event
这次修后结果
- launcher 层:
C:\Users\ASUS-KL\bin\claude-launch.ps1不再把坏 SSE host 硬编码在脚本里- 已知坏 SSE host 现在收口到:
C:\Users\ASUS-KL\.codex\shared\claude\stream-compat.json
cc-vibe.com会通过这个 machine-level registry 自动切到http://127.0.0.1:17834
- proxy 层:
- 每个 SSE frame 现在都会带
event:+data:
- 每个 SSE frame 现在都会带
- 最小验证:
Reply with exactly OK- 现在真实返回
OK - debug 里也只剩:
Stream started - received first chunk
- 这说明这次至少把最烦的:
- 缺
message_start - 先失败再 fallback
- 缺
- 从最小路径上压掉了
2026-04-26 再补一层:这次开始算真的“治本”
- 为什么说前一版还没完全治本:
- 虽然当时最小链路已通
- 但
cc-vibe.com还写死在 launcher 里 - 这意味着以后同类 provider 兼容问题仍会回到“改脚本源码”而不是“改控制面声明”
- 这次再收口后:
- Claude SSE 兼容 registry 改为:
C:\Users\ASUS-KL\.codex\shared\claude\stream-compat.json
- launcher 只读 registry,不再内置坏 host 名单
- Claude SSE 兼容 registry 改为:
- 这次还顺手抓到一个更低层坑:
C:\Users\ASUS-KL\bin\claude-launch.ps1里有中文 prompt / pattern- 在 Windows PowerShell 下如果文件不是
UTF-8 with BOM - 会先炸成 parser error,根本还没运行到 SSE 自动代理逻辑
- 所以本次最终状态不是只修“一个 host”
- 而是同时固定了:
- SSE host 兼容声明层
- launcher 读取层
- proxy 事件帧层
- PowerShell 编码加载层
- 而是同时固定了:
- 回归结果:
Reply with exactly OK->OK用中文只回答:已稳定->已稳定- 两次 debug 都显示:
ANTHROPIC_BASE_URL=http://127.0.0.1:17834Stream started - received first chunk
- 且未再出现 fallback 相关报错