背景
用户反馈 Auto-review 模式"不定期自己切回 default、非常不稳定",排查后对整个 Auto-review / 权限模式功能做了一次系统性 review,并与 Claude Code 原生 auto mode、Codex 原生 Auto 档做了对比。结论:除了显示层的同步 bug,Codex 侧的 Auto-review 存在语义层面的根本问题。本 issue 汇总全部发现与改进需求,供跟进。
核心事实
同一个 "Auto-review" 标签,两个 agent 下语义相反:
|
Claude 侧 auto |
Codex 侧 auto |
| 实际行为 |
透传 'auto' 给 cc 二进制,由模型分类器逐动作审查(真有 review) |
approval_policy: never + sandbox: danger-full-access,零审查、零沙箱、网络全放开 |
| 与 Full access(bypassPermissions)的区别 |
有实质区别 |
无任何功能区别,仅图标/配色/文案不同 |
- 映射代码:
packages/maker-core/src/agents/codex/index.ts:266-286(mapPermissionToCodex),注释自认 "auto 直接对齐 bypass 的底层权限形态"。
- 历史(git 历史已随迁仓压平,仅存注释
:271-282):Codex auto 原为 on-request + workspace-write + 客户端自动代答提权;因 Codex app-server 内部安全裁决模型抖动时会卡死 Feishu/WebFetch/Bash 且不可恢复,为了可用性把整条审查通道拆掉,直接给到 never + danger-full-access,名字没改。
- 对比:Codex 官方 Auto 档 =
workspace-write + on-request(保沙箱,workspace-write 下网络默认关闭);Claude Code 官方 auto mode(2026-03 上线)= 独立分类器模型逐动作审查 + 大量默认拦截规则 + 连拒 3 次/累计 20 次自动回退人工审批。Cindy 的 Codex "Auto-review" 比两家原生的自动档都激进,等同官方带 danger- 前缀、需显式 flag 的档位。
问题清单
P0
- 默认档 = 无审查全权限。桌面(
apps/desktop/src/renderer/state/newMakerDraft.ts:120,130、hooks/useCCSessions.ts:165)、手机(apps/mobile/app/sessions/new.tsx:1657)、IM bot(apps/desktop/src/main/im/defaultSessionSettings.ts:81)、远程主机会话(RemoteHostDetail.tsx:314)的新会话默认全是 auto——对 Codex 即 danger-full-access。切入 auto/bypass 无任何确认或警告(对比:cc 进 bypass 首次有责任确认弹窗)。hook 后台工作区默认更是 bypassPermissions(hookWorkspacePrefsLogic.ts:89)。
- "Auto-review" 标签对 Codex 用户构成安全误导。橙色 Sparkles + "自动审批"文案让用户以为比红色 "Full access" 安全一档,实际权限范围一模一样。i18n 描述里虽写了"权限范围与完全访问相同",但标签本身承诺的"审查"并不存在。
P1
- 模式显示不稳定 bug(用户可感知的"自己跳回 default"):permissionMode-only 的
sessions:update 不广播 sessions:patched(apps/desktop/src/main/localDb/ipc/sessions.ts,广播仅覆盖 projectTarget/cleared/pinned),侧栏列表缓存永远停在旧值;CCAgentSessionView.tsx 每次 sessionId effect 把 serverSession 置 null 再异步重取(失败静默吞),窗口期 UI 回退到过期缓存;ChatInput.tsx 的 ?? 'acceptEdits' 兜底对 Codex 是非法值,被 PermissionSelector.normalizeMode 折叠成第一项 ask。后果不只是烦人:显示 Default、runtime 实际还是 auto,显示与实际权限脱钩。
- 跨 agent 语义割裂:同一标签下 Claude 有审查、Codex 没有,用户换 agent 心智模型失效。
- stale in-code 描述:
codex/index.ts:587 仍写"工作区内可读写"(workspace-write 时代旧文案),与实际映射及 i18n 矛盾,i18n key 缺失时会把错误描述暴露给用户。
- 收紧模式的脆弱兜底:auto/bypass 为
never 档,turn 内本地拦不住,切回 ask 只能中断当前 turn + 10s ack 超时(codex/index.ts:4062-4069,TIGHTEN_INTERRUPT_ACK_TIMEOUT_MS);Codex 侧也没有 Claude canUseTool 那样的本地 fail-closed 分支。
- ask 模式审批能力弱:无 app 级持久 allowlist、无 per-project 规则;Codex 的审批卡片连 "Always allow for session" 都没有(SDK 不回 session-scoped suggestions),逐次确认的摩擦把用户推向 auto/bypass。
PermissionMode 类型是裸 string(userPreferences.types.ts:7),无编译期约束。
做得好、应保留的部分
- 高风险 MCP 内置操作(删除/合并类)的
forcePrompt 强制逐次确认,auto/bypass 也不放行,且拒绝切模式时的批量放行(codex/index.ts:2466-2483, 2522-2527)。
- Claude 侧 settings.json 权限规则纯透传(
settingSources: ['user','project','local']),保留 cc 原生 protected paths、rm -rf 熔断等机制。
- 切模式时挂起审批卡的 dismiss 语义清晰(切宽松放行/切严格拒绝)。
改进需求(按优先级)
- 恢复 Codex auto 的实质区分。最小改法:auto 改为
workspace-write + never——保沙箱、去审批,工作区内全自动、出界操作被沙箱直接挡掉,auto(有沙箱兜底)与 bypass(无沙箱)形成真实差异,回到 Codex 官方 Auto 档的安全水位。更完整的改法:回到 on-request + workspace-write + 客户端自动代答,对当年"安全模型抖动卡死"的问题改用裁决超时兜底(N 秒无响应按预设策略放行/弹窗),而不是拆掉整条通道。
- 改名或补审查,二选一。短期不做审查就别叫 Auto-review(改"自动执行/Full auto"并考虑与 bypass 合并);长期方向:在 maker-core 的
awaitApprovalDecision 处补 Cindy 自建裁决层(复用已有模型通道做 pre-approval 分类),对齐 Claude auto 语义,让 Auto-review 全线名副其实。
- 默认档与进入门槛收敛:新会话默认降到 ask(或至少 Codex 侧降档);首次切入 auto/bypass 加一次性确认弹窗(记住选择不重复弹)。
- 修显示同步 bug:
sessions:update 对设置类字段补 sessions:patched 广播(或选择时乐观 patchLocal);ChatInput 的 'acceptEdits' 兜底改为 per-agent 默认值。
- 小项:删
codex/index.ts:587 stale 描述;PermissionMode 收紧为字面量联合;验证 Claude auto 在账号不满足 cc auto mode 门槛(plan/model/管控开关)时的实际表现并做 UI 降级;中期补 per-project 持久 allowlist 降低 ask 摩擦。
注意事项
- 需求 1/2/3 动 maker-core 权限映射与默认行为,按 AGENTS.md 规则 10 属需实测评估的高风险路径;标签/文案改动涉及四语言 i18n 同步(规则 18);"Auto-review 为默认档"可能是产品有意取舍,动手前建议先与 Lizi 对齐方向。
- 权限模式在 device-link / mobile 均有通道(
maker:set-permission-mode),上述任何语义调整需同步核对远程/手机形态(规则 26)。
背景
用户反馈 Auto-review 模式"不定期自己切回 default、非常不稳定",排查后对整个 Auto-review / 权限模式功能做了一次系统性 review,并与 Claude Code 原生 auto mode、Codex 原生 Auto 档做了对比。结论:除了显示层的同步 bug,Codex 侧的 Auto-review 存在语义层面的根本问题。本 issue 汇总全部发现与改进需求,供跟进。
核心事实
同一个 "Auto-review" 标签,两个 agent 下语义相反:
autoauto'auto'给 cc 二进制,由模型分类器逐动作审查(真有 review)approval_policy: never+sandbox: danger-full-access,零审查、零沙箱、网络全放开packages/maker-core/src/agents/codex/index.ts:266-286(mapPermissionToCodex),注释自认 "auto 直接对齐 bypass 的底层权限形态"。:271-282):Codex auto 原为on-request+workspace-write+ 客户端自动代答提权;因 Codex app-server 内部安全裁决模型抖动时会卡死 Feishu/WebFetch/Bash 且不可恢复,为了可用性把整条审查通道拆掉,直接给到never+danger-full-access,名字没改。workspace-write+on-request(保沙箱,workspace-write 下网络默认关闭);Claude Code 官方 auto mode(2026-03 上线)= 独立分类器模型逐动作审查 + 大量默认拦截规则 + 连拒 3 次/累计 20 次自动回退人工审批。Cindy 的 Codex "Auto-review" 比两家原生的自动档都激进,等同官方带danger-前缀、需显式 flag 的档位。问题清单
P0
apps/desktop/src/renderer/state/newMakerDraft.ts:120,130、hooks/useCCSessions.ts:165)、手机(apps/mobile/app/sessions/new.tsx:1657)、IM bot(apps/desktop/src/main/im/defaultSessionSettings.ts:81)、远程主机会话(RemoteHostDetail.tsx:314)的新会话默认全是auto——对 Codex 即 danger-full-access。切入 auto/bypass 无任何确认或警告(对比:cc 进 bypass 首次有责任确认弹窗)。hook 后台工作区默认更是bypassPermissions(hookWorkspacePrefsLogic.ts:89)。P1
sessions:update不广播sessions:patched(apps/desktop/src/main/localDb/ipc/sessions.ts,广播仅覆盖 projectTarget/cleared/pinned),侧栏列表缓存永远停在旧值;CCAgentSessionView.tsx每次 sessionId effect 把serverSession置 null 再异步重取(失败静默吞),窗口期 UI 回退到过期缓存;ChatInput.tsx的?? 'acceptEdits'兜底对 Codex 是非法值,被PermissionSelector.normalizeMode折叠成第一项ask。后果不只是烦人:显示 Default、runtime 实际还是 auto,显示与实际权限脱钩。codex/index.ts:587仍写"工作区内可读写"(workspace-write 时代旧文案),与实际映射及 i18n 矛盾,i18n key 缺失时会把错误描述暴露给用户。never档,turn 内本地拦不住,切回 ask 只能中断当前 turn + 10s ack 超时(codex/index.ts:4062-4069,TIGHTEN_INTERRUPT_ACK_TIMEOUT_MS);Codex 侧也没有 ClaudecanUseTool那样的本地 fail-closed 分支。PermissionMode类型是裸string(userPreferences.types.ts:7),无编译期约束。做得好、应保留的部分
forcePrompt强制逐次确认,auto/bypass 也不放行,且拒绝切模式时的批量放行(codex/index.ts:2466-2483, 2522-2527)。settingSources: ['user','project','local']),保留 cc 原生 protected paths、rm -rf熔断等机制。改进需求(按优先级)
workspace-write+never——保沙箱、去审批,工作区内全自动、出界操作被沙箱直接挡掉,auto(有沙箱兜底)与 bypass(无沙箱)形成真实差异,回到 Codex 官方 Auto 档的安全水位。更完整的改法:回到on-request+workspace-write+ 客户端自动代答,对当年"安全模型抖动卡死"的问题改用裁决超时兜底(N 秒无响应按预设策略放行/弹窗),而不是拆掉整条通道。awaitApprovalDecision处补 Cindy 自建裁决层(复用已有模型通道做 pre-approval 分类),对齐 Claude auto 语义,让 Auto-review 全线名副其实。sessions:update对设置类字段补sessions:patched广播(或选择时乐观patchLocal);ChatInput的'acceptEdits'兜底改为 per-agent 默认值。codex/index.ts:587stale 描述;PermissionMode收紧为字面量联合;验证 Claude auto 在账号不满足 cc auto mode 门槛(plan/model/管控开关)时的实际表现并做 UI 降级;中期补 per-project 持久 allowlist 降低 ask 摩擦。注意事项
maker:set-permission-mode),上述任何语义调整需同步核对远程/手机形态(规则 26)。