软件教程

Claude Code 2.1.312 实操:网关 OIDC 自定义标识与三个默认值变更

网关 OIDC:终于可以不用 sub 认人

Claude Code 2.1.312 在 10 月 28 日发布,最大的一项新增是给 Claude apps gateway 加了 oidc.user_id_claim 配置。此前网关只能用 id_token 里的 sub 声明识别用户,遇到微软 Entra ID 这类以 oid 标识用户的身份体系,就得自己维护一层映射。现在把配置写成 oidc 段下的 user_id_claim: oid,网关直接按组织的身份体系认人,那层中间件可以拆掉了。

配套还有一个容易踩的细节:Bedrock、Vertex、Foundry 和 Mantle 现在对 Claude Code 不认识的模型名也会启用精简版系统提示,包括自定义部署名和推理配置文件 ARN。如果想让模型继续吃完整系统提示,要显式设置 CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0,否则升级后 Token 用量会悄悄变化,账单上才看得出来。

三个会改变行为的默认值

第一,prompt 与 agent hooks 的并发上限被收口到每个会话 24 个,含子代理;另外最多允许 12 个已经超过事件超时时间的继续排队,timeout 小于 1 秒一律按 1 秒算。跑批量 hook 的流水线要重新核对吞吐。

第二,被标记消息后的自动模型切换,现在也覆盖 Claude Code 不认识的模型名;不想要这个兜底就设 CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1。

第三,会话恢复时子代理的 autoCompactWindow 只会调低 CLAUDE_CODE_AUTO_COMPACT_WINDOW 设的窗口,不会再把窗口抬高。这一条对长会话的成本控制是硬约束。

最该看的是被修复的那个数据丢失风险:Write 过去只读到超长 CLAUDE.md 的开头就整文件覆盖,后半段会直接消失。

两个值得当运维事故看待的修复

一是大文件覆盖。Claude 之前读一个很长的 CLAUDE.md、rules 文件或子目录里被 @ 引入的文件时,可能只看到开头就整体重写,文件尾部静默丢失。现在 Write 要求它读完整文件或原地编辑,多包仓库里维护长规则文件的人可以放心一点。

二是命令加载。一个名字非法的命令过去能让所有命令都加载失败,典型表现是 claude -p 完全不输出。同批修复的还有:通过 Bash cd 进子目录后 paths: 限定的 skills 找不到、Read 工具在清理旧会话文件时对 PDF 页报 pdftoppm 写入失败、Code Review 在 GitHub 推送事件延迟时审了旧提交。另有一处减法:Claude Code 不再发送 claude_code.safety_event 这个 OpenTelemetry 事件,原来基于它做的权限与沙箱拦截统计会直接归零,看板要同步改。