Claude / Codex / CC Switch 机器级控制面说明书
Truth Layer
当前唯一 live 控制点
Claude
- 启动入口:
C:\Users\ASUS-KL\bin\claude-launch.ps1 - provider 指针:
C:\Users\ASUS-KL\.cc-switch\settings.json - provider 真相源:
C:\Users\ASUS-KL\.cc-switch\cc-switch.db - 权限与运行模式:
C:\Users\ASUS-KL\.claude\settings.json - 次级本地配置壳:
C:\Users\ASUS-KL\.claude\config.json
Codex
- 启动入口:
C:\Users\ASUS-KL\bin\codex.ps1 - launcher:
C:\ProgramData\npm-global\codex-launcher.cjs - 启动门禁:
C:\Users\ASUS-KL\.codex\gateway.ps1 - 运行主配置:
C:\Users\ASUS-KL\.codex\config.toml - interactive policy:
C:\Users\ASUS-KL\.codex\industrial-control\policies\interactive-policy.json
CC Switch
- 主配置目录:
C:\Users\ASUS-KL\.cc-switch - provider 指针:
C:\Users\ASUS-KL\.cc-switch\settings.json - provider 数据库:
C:\Users\ASUS-KL\.cc-switch\cc-switch.db - 应用程序:
C:\Users\ASUS-KL\AppData\Local\Programs\CC Switch\cc-switch.exe
当前职责边界
CC Switch负责 Claude provider 的动态 truth,包括当前 provider、token、base URL。claude-launch.ps1负责每次启动时把CC Switch当前 truth 注入 Claude 进程环境。C:\Users\ASUS-KL\.claude\settings.json只负责 Claude 的权限、sandbox、approval 与运行时行为。C:\Users\ASUS-KL\.claude\config.json不再承载备用 auth truth,只保留最小本地壳。Codex的模型、认证、权限与 gateway 逻辑只由.codex自己的 live 链路控制,不与 Claude provider 层混用。
2026-04-26 启动链体检结论
codex当前真实入口解析到C:\Users\ASUS-KL\bin\codex.ps1,再进入C:\Users\ASUS-KL\.codex\gateway.ps1,最后进入C:\ProgramData\npm-global\codex-launcher.cjs。claude当前真实入口在 PowerShell 中优先是C:\Users\ASUS-KL\Documents\PowerShell\Microsoft.PowerShell_profile.ps1里定义的claudefunction;该函数只转发到C:\Users\ASUS-KL\bin\claude-launch.ps1。claude.cmd仍存在于C:\Users\ASUS-KL\bin\claude.cmd,但它只是对claude-launch.ps1的批处理包装,不是第二套独立 truth。C:\Users\ASUS-KL\.claude\glm-gateway已不存在;当前发现的GLM、LongCat、claude-sonnet-4-20250514等字符串只在 archive、history、debug 日志中出现,不在 live 配置中生效。C:\Users\ASUS-KL\.codex\industrial-control\policies\interactive-policy.json当前enabled = false,因此Codex当前 live 行为不是受控交互模式,而是直接使用.codex的常规执行链。C:\Users\ASUS-KL\.claude\settings.json当前 live 行为为approvalPolicy = never、sandboxMode = danger-full-access、agentMode = full-access;C:\Users\ASUS-KL\.claude\config.json仅保留空 allow/deny 壳,不承载 provider truth。
已下线旧链路
C:\Users\ASUS-KL\.claude\glm-gateway已删除。GLM / LiteLLM / http://127.0.0.1:4000旧本地代理链已退出当前 live 路径。C:\Users\ASUS-KL\.codex\claude\unified-config.json旧统一配置元数据已下线并归档。C:\Users\ASUS-KL\.codex\shared\tools\sync-config.sh旧统一同步脚本已下线并归档。
Archive / History 分层
- 归档区:
C:\Users\ASUS-KL\.claude\archive-nonlive-20260426C:\Users\ASUS-KL\.codex\archive-nonlive-20260426
- 历史区:
C:\Users\ASUS-KL\.claude\file-historyC:\Users\ASUS-KL\.claude\projectsC:\Users\ASUS-KL\.claude\history.jsonlC:\Users\ASUS-KL\.codex\history.jsonl
Constraint Layer
禁止复活的旧模式
- 不要再把 Claude provider truth 写回
C:\Users\ASUS-KL\.claude\settings.json或C:\Users\ASUS-KL\.claude\config.json。 - 不要再恢复
glm-gateway、LiteLLM、http://127.0.0.1:4000作为默认 Claude base URL。 - 不要再引入新的并行
Claudeauth source,除非用户明确要求替换CC Switch为新的单一真相源。 - 不要再恢复
.codex\claude\unified-config.json或sync-config.sh这条旧统一链作为 live 控制面。 - 不要把 archive / history 区中的文件当成当前 live 配置来修改或解释。
当前残余风险
- 当前用户级与机器级环境变量中的
ANTHROPIC_*已为空,但某些已打开的 PowerShell 进程仍可能继承旧会话里的ANTHROPIC_*值。 - 这个残余污染目前不会重新定义 Claude 的 live provider truth,因为
C:\Users\ASUS-KL\bin\claude-launch.ps1会先清掉ANTHROPIC_*,再只从CC Switch当前 provider 重新注入。 - 这类残余更像“当前 shell 会话污染”,不是机器级持久配置冲突;若要清空,只需关闭旧 shell 或在新 shell 中重新启动
claude。 Codex不读取ANTHROPIC_*作为它自己的 live provider truth;它的 live provider 仍只看C:\Users\ASUS-KL\.codex\config.toml。
排障顺序
- 先解真实命令入口。
- 再解 controlling config / provider pointer。
- 再解 launcher / gateway / wrapper chain。
- 最后才看 archive、history、旧说明文档。
完成判定
- 只要改动了 Claude / Codex / CC Switch 的 live 控制点,就必须:
- 更新本说明书;
- 更新 machine-readable facts layer;
- 必要时更新博客记录;
- 必要时更新全局规则与门禁层。
Strategy Layer
维护策略
- 保持每一层只有一个 live truth owner:
- provider truth 只有
CC Switch - Claude 权限 truth 只有
.claude/settings.json - Codex 运行 truth 只有
.codex/config.toml + gateway + launcher
- provider truth 只有
- live / archive / history 目录必须长期分离。
- 兼容逻辑允许暂时存在,但要写明退场条件,并在主链稳定后删掉。
- 文档优先描述 current truth,不要把 target-state 或历史方案写成现在仍生效。
快速判断口诀
- 看入口,不看猜测。
- 看 live,不看备份。
- 看控制层,不看历史记录。
- 同类事实只认一个 owner。
变更 checklist
- 这次改的是哪一层:provider / launcher / permission / gateway / policy / docs?
- 当前唯一 live owner 有没有变化?
- 有没有新增并行 truth source?
- archive / history / blog / rule 层是否需要同步?
- 有没有需要下线的兼容分支或旧文档说法?
Control Plane Facts Layer
machine-readable control plane
- 独立控制面 JSON:
E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\codex-knowledge\claude-codex-control-plane.json - 对应 schema:
E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\codex-knowledge\claude-codex-control-plane.schema.json - 该 JSON 负责提供当前控制面的 machine-readable truth,包括:
- truth owners
- live paths
- archive paths
- history paths
- forbidden legacy chains
- 控制面文档入口
one-shot health check
- 一键体检脚本:
C:\Users\ASUS-KL\.codex\automations\check-claude-codex-control-plane.ps1 - 该脚本默认输出:
- control plane JSON 是否成功加载
claude当前真实入口CC Switch当前 provider pointer- Claude 权限来源与关键行为字段
codex当前真实入口- interactive policy 当前是否启用
- forbidden legacy chains 当前是否仍存在
expected healthy result
- 当前健康态应满足:
controlPlaneLoaded = trueproviderPointer为CC Switch当前 provider idapprovalPolicy = neversandboxMode = danger-full-accessinteractivePolicyEnabled = falseforbiddenLegacyChains.anyPresent = false
2026-04-26 实测结果
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Users\ASUS-KL\.codex\gateway.ps1已返回合法 JSON,不再报Missing an argument for parameter 'CodexArgs'。powershell -NoProfile -ExecutionPolicy Bypass -Command "codex --help"已成功穿过bin -> gateway -> launcher -> codex engine链并输出帮助。powershell -NoProfile -ExecutionPolicy Bypass -Command "claude --help"已成功输出帮助。- 无 TTY 的验证进程里直接跑
codex仍会看到stdin is not a terminal;这属于当前验证方式限制,不属于启动链损坏。
Operator Convenience Layer
bin shortcut
- 快捷体检入口:
C:\Users\ASUS-KL\bin\check-control-plane.cmd - 该入口直接调用:
C:\Users\ASUS-KL\.codex\automations\check-claude-codex-control-plane.ps1 - 以后做本机控制面健康检查时,优先跑这个快捷命令,而不是手输完整脚本路径。
- Claude bug-fix 专用入口:
C:\Users\ASUS-KL\bin\claude-bugfix.ps1C:\Users\ASUS-KL\bin\claude-bugfix.cmd
- 作用:
- 继续使用 CC Switch 当前 provider truth
- 继续使用本机 stream proxy
- 但跳过共享 MCP / plugin / 厚提示层,尽量把 Claude 拉到更轻的修 bug 模式
live script header notes
- 以下 live 脚本已写入极短控制面注释,目的是让维护者打开文件第一眼就知道 truth owner 和禁止恢复的旧链路:
C:\Users\ASUS-KL\bin\claude-launch.ps1C:\ProgramData\npm-global\codex-launcher.cjsC:\Users\ASUS-KL\.codex\gateway.ps1
- 这些注释不是业务逻辑,而是防止未来维护时重新把 token/base URL/model/旧 unified-config/旧 loopback 方案写回错误层。
2026-04-26 启动链修复点
C:\Users\ASUS-KL\bin\codex.ps1已修正 WinPS 5 下空参数启动时对gateway.ps1的调用方式:- 先写
CODEX_FORWARD_ARGS_JSON - 有参数才显式传
-CodexArgs - 无参数时直接调用 gateway
- 先写
C:\Users\ASUS-KL\.codex\gateway.ps1已修正 WinPS 5 relay 到pwsh时的空参数兼容性:- 明确
DefaultParameterSetName = 'Launch' - 只有在
CodexArgs非空时才向 relay 命令附加-CodexArgs
- 明确
- 这次修复的目标不是改变控制面 owner,而是恢复既有 live 控制面在 Windows PowerShell 下的兼容性。
C:\Users\ASUS-KL\Documents\PowerShell\profile.ps1与C:\Users\ASUS-KL\Documents\WindowsPowerShell\profile.ps1现已在 shell 启动时主动清理旧ANTHROPIC_*环境变量,防止 stale parent session 把旧 Claude 桥接值继续带进新 shell。C:\Users\ASUS-KL\.claude\settings.json已执行一轮“短回合收尾优化”:useCompactMode = falseterseMode = falsedefaultServiceTier = standardCLAUDE_CODE_MAX_OUTPUT_TOKENS = 12000
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md已补“任务闭环规则”与“回合结束前自检清单”,用于降低 Claude 把子步骤完成误判成整任务完成的概率。
2026-04-26 补充:Claude 风格收紧与真实样本压测
背景
- 在修完
cc-vibe流式兼容问题后,用户对 Claude 的剩余不满不再集中在“卡死/掉字”,而是:- 会补礼貌尾巴
- 短答不够字面
- 有时看起来不够硬执行
- 这一轮的目标不是换 provider,也不是换 model,而是把当前 live Claude 调得更像“短、硬、少自作主张”的执行型风格。
live 配置调整
C:\Users\ASUS-KL\.claude\settings.jsonterseMode: false -> truemodelReasoningEffort: high -> mediumenv.CLAUDE_CODE_MODEL_REASONING_EFFORT: high -> medium
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md- 新增“风格收紧协议”
- 明确要求:
- 默认更短、更硬执行
只回答/exactly/不要客套视为硬约束- 指定精确标签与固定顺序时,优先按原格式输出
C:\Users\ASUS-KL\bin\claude-launch.ps1- 新增短
--append-system-prompt - 作用:
- 对短答、精确答、精确格式要求做 launcher 级字面服从补强
- 不改 provider truth,不写死 token,只在每次启动时补一小段行为提示
- 新增短
对照测试
- 纯净模式(
claude.exe --bare --print):只回答 测试 -> 测试Reply with exactly TEST and nothing else. -> TEST
- 调整前 live 模式(
claude-launch.ps1 --print):只回答 测试 -> 测试收到。Reply with exactly TEST and nothing else. -> TEST
调整后 live 压测样本
只回答 修好了 -> 修好了只回答 测试 -> 测试只回答 OK -> OKReply with exactly TEST and nothing else. -> TEST你正在修 Claude 掉线。先不要总结,不要客套,只用一句话说你下一步立刻会做什么。- 返回为单句直接动作描述,不再补礼貌尾巴
当前结论
- 这说明当前 live Claude 的主要问题确实不只是“模型本体蠢”,而是:
- 流式兼容坏过
- 行为层提示过重
- 默认风格更容易补话
- 到这一步,短答/字面答/少客套 已明显改善。
仍存边界
- 对“精确四标签格式”这类强格式要求,在单轮
--print风格压测里仍不稳定:- 某些过于抽象或信息留空的 prompt,Claude 仍倾向先追问
- 某些单轮演示式 prompt,会出现只回一个标签或把任务理解错的情况
- 因此当前判断是:
- 短答字面服从:已明显改善
- 非平凡真实任务中的执行风格:已改善
- 刻意抽象的单轮格式服从压测:仍有 residual risk
维护建议
- 如果未来用户主要抱怨:
- “又开始补礼貌尾巴”
- “明明只让它回答两个字”
- “又开始多说一句” 优先检查这三层是否被改回:
C:\Users\ASUS-KL\.claude\settings.jsonC:\Users\ASUS-KL\.codex\shared\claude\home-overlay.mdC:\Users\ASUS-KL\bin\claude-launch.ps1
- 如果未来抱怨重新回到:
OK -> O- 看似卡死
- 看似掉线 优先回到流式兼容代理链排查,而不是先怀疑风格层。
Claude / Codex 同题基准(2026-04-26)
- 选用真实本机 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 不是完全不能用
- 但默认链路更重、更慢、更容易停在建议层
- 瘦身后的
claude-bugfix已明显更接近执行型 - 纯修 bug 主力目前仍更适合由 Codex 承担
默认 claude 的自动 bug-fix 切轻(2026-04-26)
C:\Users\ASUS-KL\bin\claude-launch.ps1- 现在不仅会在启动参数命中
bug / fix / debug / 修复 / 排障 / 报错 / 掉线等词时自动切轻 - 追加系统提示也已明确:如果当前或后续用户消息命中 bug-fix 意图,Claude 应立即切入 bug-fix 模式
- 现在不仅会在启动参数命中
C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md- 已新增:
Session Bug-Fix Auto-SwitchHarder Bug-Fix Protocol
- 作用:
- 把“会话内后续消息也能自动切轻”写进持续生效规则层
- 要求 bug-fix 模式遵循:
repro -> inspect -> cause -> patch -> verify- 少说、多做、先证据、先验证
- 单个工具失败先自恢复一次
- 已新增:
- 含义:
- 默认
claude现在不再只依赖用户手工敲claude-bugfix - 对修 bug / 排障 / 启动失败 / 配置损坏等任务,已经具备自动切向更轻执行模式的能力
- 默认
machine-aware file-first bug-fix(2026-04-26)
- 在继续强化后,bug-fix 模式已进一步加入 machine-aware file-first 约束:
- 先看这台机器已知 live 控制点,而不是泛猜 Linux/macOS 默认路径
- 关键位置:
C:\Users\ASUS-KL\bin\claude-launch.ps1C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md
- 新约束要求:
- 对本机 Claude / Codex / launcher / CC Switch 问题,优先查看:
C:\Users\ASUS-KL\bin\C:\Users\ASUS-KL\.claude\C:\Users\ASUS-KL\.codex\C:\Users\ASUS-KL\.cc-switch\
- 在这些 live 控制点存在时,不要先猜
~/.bashrc、~/.zshrc、Linux/macOS 默认配置路径
- 对本机 Claude / Codex / launcher / CC Switch 问题,优先查看:
- 含义:
- 这一步的目标不是单纯让 Claude “更想修 bug”
- 而是让它在修 bug 时更像 Codex:优先回到真实 live 文件层
exact-live-owner 强化结果(2026-04-26)
- 在 machine-aware file-first 之后,又继续把常见本机问题压到了更具体的 exact live owner:
- launcher / 启动链 ->
C:\Users\ASUS-KL\bin\claude-launch.ps1 - runtime behavior / output style / effort ->
C:\Users\ASUS-KL\.claude\settings.json - provider / token / base URL truth ->
C:\Users\ASUS-KL\.cc-switch\settings.json(必要时联动cc-switch.db)
- launcher / 启动链 ->
- 回归样本表明:
- 对“launcher 配置有问题”类提示,Claude 已优先命中
claude-launch.ps1 - 对“输出风格和 effort 不一致”类提示,Claude 已优先命中
.claude\settings.json - 对“provider token/base URL 读取不对”类提示,Claude 已优先命中
.cc-switch\settings.json
- 对“launcher 配置有问题”类提示,Claude 已优先命中
- 含义:
- Claude 现在不只是“回到对的目录层”
- 而是开始在常见本机 bug 上优先回到对的唯一 live 文件
archive indexes
- 以下 archive 目录已补
README.md索引:C:\Users\ASUS-KL\.claude\archive-nonlive-20260426\README.mdC:\Users\ASUS-KL\.codex\archive-nonlive-20260426\README.md
- 索引职责:
- 解释归档对象是什么
- 指明哪些旧链路禁止恢复为 live
- 告诉维护者当前应该只认哪些 live 路径
quick reference
- 一页速查卡:
E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\codex-knowledge\Claude Codex CC Switch live 控制点速查卡.md - 用法:当你只想快速判断“当前该看哪一个 live 文件”时,先看速查卡;需要完整边界、约束和维护策略时,再回到本说明书。
相关排障记录
- 排障时间线博客:
E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\blog\Claude 与 CC Switch 动态配置排障记录.md - 用法:当你需要回答“这条旧链路为什么被下线”“这次是怎么一步步收口的”“某个兼容逻辑为什么还保留/为什么已删除”时,看这篇排障记录,而不是只看当前状态说明。
- 与“Claude 为什么经常没做完就收回合”直接相关的补充,也已写入同一篇博客,便于对照当前 settings 与历史会话表现。
patch-first verification 强化(2026-04-26)
- 本轮继续把默认
claude的 bug-fix 模式从“file-first”推进到“patch-first verification”。 - 关键 live 文件:
C:\Users\ASUS-KL\bin\claude-launch.ps1C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md
- 新增约束:
- 一旦命中高概率 live owner,默认输出顺序优先是:
exact filepatch pointverify command/checkresidual blocker(if any)
- 对本机代码 / 启动链 / 配置类 bug,如果任务边界内可以直接改,优先尝试最小修复,而不是停在抽象诊断。
- 如果暂时不能安全落补丁,也必须明确具体 blocker、已确认文件、下一条最短验证路径。
- 一旦命中高概率 live owner,默认输出顺序优先是:
- 这一步的目标:
- 不只是让 Claude “看对文件”
- 而是让它更像 Codex 一样,先落补丁点,再给验证动作。
本机自测结果(2026-04-26)
- 这轮定点自测使用
C:\Users\ASUS-KL\bin\claude-launch.ps1 --print完成,避免被外层 shell 包装干扰。 - 三类样本都已开始稳定输出
FILE -> PATCH -> VERIFY:- launcher / 启动失败 ->
C:\Users\ASUS-KL\bin\claude-launch.ps1 - runtime behavior / effort ->
C:\Users\ASUS-KL\.claude\settings.json - provider / token / base URL ->
C:\Users\ASUS-KL\.cc-switch\settings.json
- launcher / 启动失败 ->
- 说明:
- 默认
claude现在已经不只是会命中 live owner - 而是开始按更执行型的补丁闭环回答。
- 默认
PowerShell claude -p 包装层修复(2026-04-26)
- 自测过程中还顺手打出了一个真实本机缺陷:
- PowerShell 里的
claude来自C:\Users\ASUS-KL\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 - 原实现会把
-p这类短参数误吃进 PowerShell 参数绑定,而不是转发给 Claude
- PowerShell 里的
- 已修复:
claude包装函数改成最朴素的@args透传
- 含义:
- 后续本机
claude -p/claude --print类轻量验证路径更稳 - 也减少了一个“不是模型弱,而是本机包装层先绊倒”的假象来源。
- 后续本机
bug-fix 分层加载再瘦身(2026-04-26)
- 本轮没有继续把所有 bug-fix 一刀切成同一种超轻模式,而是改成了两层:
- machine-local control-plane bug-fix
- repo/workspace bug-fix
- live 控制点:
C:\Users\ASUS-KL\bin\claude-launch.ps1
- 新策略:
- machine-local bug-fix:
- 继续
--bare - 继续跳过共享 MCP / plugin / home add-dir
- 额外收口到
--setting-sources user - 优先回到本机 launcher / profile / settings / CC Switch truth
- 继续
- repo/workspace bug-fix:
- 仍走轻量 bug-fix
- 但显式保留当前工作区
--add-dir <cwd> - 避免把 repo 修 bug 也瘦到丢失项目上下文
- machine-local bug-fix:
- 含义:
- 不是单纯“删更多层”
- 而是把默认
claude做成:- 修机器问题时更像本机 repair agent
- 修 repo 问题时更像 workspace coding agent
分层加载回归结果(2026-04-26)
- machine-local 样本:
- 仍稳定命中
C:\Users\ASUS-KL\bin\claude-launch.ps1
- 仍稳定命中
- repo/workspace 样本:
- 已开始优先命中当前工作区文件,例如
E:\My Project\Atramenti-Console\README.md - 不再默认回退成机器级 Claude/Codex 配置路径
- 已开始优先命中当前工作区文件,例如
- 说明:
- 这轮分层加载方向是成立的
- 机器问题更轻,repo 问题不再被机器控制面误导
Claude vs Codex 双 bug 对照压测(2026-04-26)
- 压测题 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:
- 据此追加强化:
- 补进 exact owner:
- PowerShell shell wrapper / profile / 短参数透传 ->
C:\Users\ASUS-KL\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 - 启动时 bug-fix trigger / classifier ->
C:\Users\ASUS-KL\bin\claude-launch.ps1
- PowerShell shell wrapper / profile / 短参数透传 ->
- 同时把 overlay 明确降格成“启动后会话持续规则”,不再与启动时 classifier 混淆
- 补进 exact owner:
- 追加复测后:
- Claude 在 wrapper 题上已提升到约
20.4s,并命中Microsoft.PowerShell_profile.ps1 - Claude 在 trigger 题上已命中
claude-launch.ps1,但具体 patch 位仍可能把不存在的 helper 数组名说出来,说明它的 live-owner 准确率提升了,但 precise code-reading 仍弱于 Codex
- Claude 在 wrapper 题上已提升到约
当前结论(2026-04-26)
- 到这一步:
- 默认
claude已明显更强:- 自动分层加载
- machine-local 与 repo bug-fix 分流
- exact live owner 更准
- patch-first / verify-first 更强
- 但在“读当前真实代码结构并给出完全贴合的最小补丁点”上,Codex 目前仍更稳
- 默认
- 更准确的定位应该是:
- Claude 的响应速度和模式切换已经明显改善
- 但想真正超过 Codex,还需要继续减少 patch-level 幻觉,而不只是继续堆风格提示
宿主兼容事实
- 这轮还确认了一个机器级事实:
C:\Users\ASUS-KL\bin\claude-launch.ps1当前 live 宿主应视为pwsh兼容链- 老
powershell.exe对含中文模式串的 UTF-8 脚本更容易读坏
- 因此后续机器级验证、benchmark、wrapper 调用,优先使用
pwsh作为基准宿主。
cmd 入口宿主修复(2026-04-26)
- 本轮抓到一个非常关键的真实 error:
cmd /c claude --versioncmd /c claude --print ...会走老powershell.exe宿主,导致C:\Users\ASUS-KL\bin\claude-launch.ps1中的中文规则串被错误解码并直接解析失败。
- 已修复 live 入口:
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包装现在优先where pwsh,有pwsh就走 PowerShell 7 - 只有找不到
pwsh时才回落到老powershell
- 这些
- 实测回归:
cmd /c claude --version-> 正常返回2.1.114 (Claude Code)cmd /c claude --print "Reply with exactly OK"-> 正常返回OKcmd /c claude-bugfix --version-> 正常返回版本
- 这一步的意义:
- 修掉了一条会把 Claude 表现伪装成“模型坏了”的宿主层错误
- 以后从 cmd / 批处理入口使用 Claude 不会再被旧 PowerShell 编码链绊倒
假验证 / 假完成防护加强(2026-04-26)
- 第二轮真 patch benchmark 暴露了 Claude 当前一个很严重的执行型错误:
- 它会声称:
Verification passedall tests passed
- 但独立回归脚本仍然失败,文件实际未改或未改对
- 它会声称:
- 已强化 live 控制点:
C:\Users\ASUS-KL\bin\claude-launch.ps1C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md
- 新约束:
- 没有真实成功的 verify,不得写
passed - 如果 verify 失败,先继续修,不得把失败改写成成功总结
- 声称已修改文件时,默认要再读回文件或依赖真实 verify 结果确认变更已落地
- 没有真实成功的 verify,不得写
settings.json 误路由修复(2026-04-26)
- 本轮还抓到一个 machine-local classifier 误判:
- 仅仅提到通用文件名
settings.json - Claude 就可能错误跳到
C:\Users\ASUS-KL\.claude\settings.json
- 仅仅提到通用文件名
- 根因:
C:\Users\ASUS-KL\bin\claude-launch.ps1的 machine-local pattern 里曾包含过宽的settings\.json
- 已修:
- 移除通用
settings\.json - 改成更具体:
\.claude\\settings\.jsonclaude settingsclaude 配置
- 移除通用
- overlay 也补了对应约束:
- 只有证据明确指向
.clauderuntime settings 时,才命中这个 exact live owner
- 只有证据明确指向
- 含义:
- repo/workspace 中普通
settings.json的 bug,不会再那么容易被误修到机器级 Claude 设置层
- repo/workspace 中普通
第二轮真 patch benchmark(2026-04-26)
- 这轮 benchmark 已从“只答 FILE/PATCH/VERIFY”升级到:
- 真编辑文件
- 真跑
verify.ps1 - 真看是否闭环
- 样本题:
case-trigger:修trigger-rules.ps1里把问题误放进强触发列表的问题case-effort:修settings.json里effortLevel=high与其余medium不一致的问题
- Claude 当前真实表现:
- 能给出像样的完成话术
- 但在两题上都出现了“口头说 verification passed,独立 verify 实际失败”的现象
- 这轮 benchmark 的价值不在于“Claude 说了什么”,而在于确认了:
- 当前最严重的短板之一,不是只会误判文件
- 而是会在 patch 未真正落地时,错误宣称已经验证通过
- 这也是为什么本轮把
no-fake-verify规则提升为了 live 控制面的一等约束
第三轮 benchmark:专测 verify 失败后会不会继续修(2026-04-26)
- 本轮不是再测 file owner,也不是再测 patch 建议。
- 只测一件事:
- 当 verify 失败时,Claude 会不会继续修,而不是提前宣布完成。
- 为此继续加硬 live 约束:
C:\Users\ASUS-KL\bin\claude-launch.ps1C:\Users\ASUS-KL\.codex\shared\claude\home-overlay.md
- 新增明确要求:
verify.ps1/ test / check 非 0 时,本轮禁止收尾- 必须先回读目标文件或直接产物
- 用一句话说明“预期与实际哪里不一致”
- 继续修,再次验证
第三轮真实结果
- 样本:workspace
settings.json修复题 - 期望:
- Claude 修改工作区
./settings.json - 运行
verify.ps1 - 若第一次失败,则继续修到通过
- Claude 修改工作区
- 实际:
- Claude 仍输出:
Fixed settings.json by changing effortLevel from "high" to "medium". Verification passed.
- 但真实文件回读显示:
effortLevel仍是high
- 独立执行
verify.ps1仍失败
- Claude 仍输出:
- 结论:
- 第三轮 benchmark 证明:
- 假验证拦截规则已经写进控制面
- 但默认 Claude 在真实 case 上仍然没有完全服从该约束
- 第三轮 benchmark 证明:
这一步的真实意义
- 这轮不是失败得没有价值,反而更有价值:
- 现在已经能确认问题不再只是 prompt 太松
- 而是 Claude 在某些真实
--print/ bug-fix 执行场景里,仍会跳过“失败后继续修”这一行为闭环
- 因此当前判断应升级为:
- 规则层已足够清楚
- 服从层仍不足够稳定
当前优先级更新
- 眼下最值得继续打的,不再只是“再堆提示词”
- 而是继续找:
- 为什么它在工作区 case 上会声称文件已改、但文件根本没变
- 为什么
--print场景里会出现这种fake completion
- 换句话说:
- 现在最伤 Claude 的,不只是 patch-level 幻觉
- 而是 action-report drift:动作报告与真实文件状态脱节
2026-04-26 补充:launcher 参数绑定误判已修
- 现象:
- 直接执行
C:\Users\ASUS-KL\bin\claude-launch.ps1 --version曾返回False - 没有真正转发到
claude.exe --version
- 直接执行
- 根因:
C:\Users\ASUS-KL\bin\claude-launch.ps1同时声明了ArgsFromCaller与PromptText- 在 PowerShell 直调场景下,
--version会被错误绑定到PromptText - 脚本随即走了分类测试分支,只输出
Test-BugFixIntent的布尔结果
- 已修:
- 把参数入口改成显式 parameter set:
Forward->ArgsFromCallerPrompt->PromptText
- 把参数入口改成显式 parameter set:
- 验证:
- 直调
C:\Users\ASUS-KL\bin\claude-launch.ps1 --version已恢复输出真实版本号
- 直调
2026-04-26 补充:machine-local 误判的新真根因已定位
- 新发现:
- 之前部分
--printbenchmark 失败,不只是模型问题 C:\Users\ASUS-KL\bin\claude-launch.ps1的Test-MachineLocalBugFixIntent曾直接拼接全部 CLI 参数做判断
- 之前部分
- 误判来源:
- benchmark 命令里带有:
--debug-file C:\Users\ASUS-KL\.codex\...\claude-codex-hard-benchmark\...
- 这类路径本身含有
.codex/claude/codex - 会把普通 workspace bug-fix 错误打成 machine-local bug-fix
- benchmark 命令里带有:
- 误判后果:
- launcher 会走 machine-local 分支
- 不再把当前工作目录作为 repo/workspace bug-fix 上下文注入
- Claude 容易空转、卡住,或根本不改目标文件
- 已修:
- 新增
Get-IntentTextFromArguments - machine-local 分类现在只看真正的用户意图文本:
--print后面的 prompt- 非 flag 的自由文本
- 忽略纯控制参数和值:
--debug-file--add-dir--mcp-config--setting-sources--append-system-prompt--plugin-dir
- 新增
- 含义:
- debug path / launcher path / shared config path 不会再把普通 repo bug 错打成机器级故障
2026-04-26 补充:第四轮 direct invocation benchmark 已连续通过
- 这轮不再使用会拆坏 prompt 的
Start-Process -> cmd /c ... --print ...路径 - 新结论:
- 之前部分 benchmark 失败,确实混入了壳层拆参污染
- 当用 direct invocation 真正把完整 prompt 传进 launcher 后,Claude 已连续通过
case-effort
- 新样本:
C:\Users\ASUS-KL\.codex\.tmp\claude-codex-hard-benchmark\runs12\case-effort-claude-run2C:\Users\ASUS-KL\.codex\.tmp\claude-codex-hard-benchmark\runs12\case-effort-claude-run3C:\Users\ASUS-KL\.codex\.tmp\claude-codex-hard-benchmark\runs12\case-effort-claude-run4
- 真实结果:
- 3/3 成功
settings.json的effortLevel都从high改成了mediumverify.ps1都返回通过claude-debug.log都出现了written atomically
- 仍然存在的 runtime 症状:
- 日志里仍可见多次:
Stream completed without receiving message_start event- 随后 fallback 到 non-streaming
- 日志里仍可见多次:
- 当前判断更新:
- stream/SSE 兼容问题仍然存在,但已不再阻止这个基准题完成
- 更大的已修问题是:
- launcher 参数绑定误判
- machine-local 分类被 debug path 污染
- benchmark harness 的壳层拆参污染
2026-04-26 补充:Codex 登录页并不是“没配 API key”,而是 live auth 文件缺位
- 现象:
- 本机执行
codex时曾直接回到官方欢迎登录页:Sign in with ChatGPTSign in with Device CodeProvide your own API key
- 本机执行
- 当时并不是 key 丢了:
C:\Users\ASUS-KL\.codex-secrets\auth.json里一直有OPENAI_API_KEYC:\Users\ASUS-KL\.codex\config.toml也仍然指向:model_provider = "token_pool_public"preferred_auth_method = "apikey"base_url = "https://apikey.soxio.me/openai"
- 真根因:
- 当前官方 Codex runtime 实际需要本地 live auth 文件:
C:\Users\ASUS-KL\.codex\auth.json
- 之前控制面只把 auth 真相放在:
C:\Users\ASUS-KL\.codex-secrets\auth.json
- 但没有保证它同步镜像到 runtime 真正在读的
~\.codex\auth.json
- 当前官方 Codex runtime 实际需要本地 live auth 文件:
- 已修:
C:\ProgramData\npm-global\codex-launcher.cjs现在会在启动时自动把:C:\Users\ASUS-KL\.codex-secrets\auth.json镜像到:C:\Users\ASUS-KL\.codex\auth.json
- 含义:
- 以后
codex再启动时,不应该再因为 live auth 缺位而掉回官方登录页
- 以后
2026-04-26 补充:Codex exec 掉回 interactive mode 的真根因已修
- 现象:
codex exec --skip-git-repo-check "Reply with exactly OK"曾错误落成:Codex interactive modeError: stdin is not a terminal
- 真根因:
C:\Users\ASUS-KL\.codex\gateway.ps1顶部有一段:- 从
CODEX_FORWARD_ARGS_JSON回填$CodexArgs
- 从
- 那段代码在函数定义之前就调用了
ConvertFrom-JsonCompat - PowerShell 在这个脚本执行顺序下,前面不能直接调用后面才定义的 helper
- 于是异常被静默吃进
catch,导致$CodexArgs一直为空 - 最终 gateway 把本该是
exec的调用误判成 interactive mode
- 已修:
C:\Users\ASUS-KL\.codex\gateway.ps1顶部回填逻辑改成直接调用内建ConvertFrom-Json- 不再依赖脚本后面才定义的
ConvertFrom-JsonCompat
- 验证:
- 真实入口:
C:\Program Files\nodejs\node.exe C:\ProgramData\npm-global\codex-launcher.cjs C:\Users\ASUS-KL\bin\codex.cmd exec --skip-git-repo-check "Reply with exactly OK"
- 已成功输出:
OK - 退出码:
0 - provider 仍为:
token_pool_public
- 真实入口:
2026-04-26 补充:Codex 启动噪音的 skill frontmatter 误报已修
- 现象:
- Codex 启动时会刷:
failed to load skill ... long-horizon-autoplan-debug\SKILL.md: missing YAML frontmatter delimited by ---
- Codex 启动时会刷:
- 真根因:
- 文件内容本身有 frontmatter
- 但
E:\My Project\Atramenti-Console\codex\skills\gsd\long-horizon-autoplan-debug\SKILL.md原来带 UTF-8 BOM:EF BB BF
- 解析器因此没有把第一行识别成纯
---
- 已修:
- 将该文件重写为 UTF-8 无 BOM
- 含义:
- 这条启动噪音不应再继续出现
2026-04-26 补充:新增 Codex 故障速查卡
- 新增一页独立速查卡:
E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\codex-knowledge\Codex 登录页与 exec 故障速查卡.md
- 覆盖四类高频本机故障:
- 官方欢迎登录页
~\.codex\auth.json读位codex exec掉回 interactive modeSKILL.mdfrontmatter 启动噪音
- 用法:
- 只想快速定位 live owner 时先看速查卡
- 需要完整边界、历史和控制面说明时再回本说明书
2026-04-26 补充:Claude 的 cc-vibe.com SSE fallback 已在本机控制面收敛
- 新发现:
cc-vibe.com直连非流式返回正常,最小请求可回OK- 但直连流式会出现内容不完整或直接缺少
message_start event
- 之前为什么自动代理没生效:
C:\Users\ASUS-KL\bin\claude-launch.ps1的Test-ShouldUseStreamProxy里用了$host- PowerShell 的
$Host是只读自动变量,大小写不敏感 - 赋值异常被
catch吞掉后,自动代理条件一直返回False
- 已修:
- 将局部变量改成
$baseHost C:\Users\ASUS-KL\bin\claude-launch.ps1不再硬编码坏 SSE host- 已知坏 SSE host registry 现在改由:
C:\Users\ASUS-KL\.codex\shared\claude\stream-compat.json
cc-vibe.com现在会通过上面的 machine-level registry 被识别,并自动切到:http://127.0.0.1:17834
- 将局部变量改成
- 代理层进一步已修:
C:\Users\ASUS-KL\.codex\automations\cc-switch-claude-stream-proxy.py- SSE 输出现在不只发
data:,还显式发:event: message_start- 以及对应 event type
- 本次治本补充:
C:\Users\ASUS-KL\bin\claude-launch.ps1因含中文 prompt / pattern,Windows PowerShell 侧需要保持UTF-8 with BOM- 否则会在脚本解析前就先炸成中文字符串 parser error,而不是运行到 SSE 判定逻辑
- 最新最小验证:
claude-launch.ps1 --print "Reply with exactly OK"- 结果:
OK - debug 已显示:
ANTHROPIC_BASE_URL=http://127.0.0.1:17834Stream started - received first chunk
- 且不再出现:
Stream completed without receiving message_start eventError streaming, falling back to non-streaming mode
- 本次控制面回归:
Reply with exactly OK->OK用中文只回答:已稳定->已稳定- 两次 debug 都显示:
ANTHROPIC_BASE_URL=http://127.0.0.1:17834Stream started - received first chunk
- 说明 registry 化后,自动代理仍然正常命中