跳转到内容

ccstatusline 显示的模型名不正确 - Claude Code

Quick fix

在 ccstatusline 中配置 Custom Command 脚本,读取 cc-switch 数据库中的环境变量以正确显示实际模型。

报错原文
在启用 `cc-switch` 代理接管模式后,Claude Code 状态栏(`ccstatusline`)显示的模型名不正确。实际请求走的是代理路由后的模型,但状态栏固定显示为 `Sonnet-4.6`(或 `claude-sonnet-4-6`)。

在 `cc-switch` 代理接管模式下,`ccstatusline` 默认读取的是本地会话的默认模型名称,而不是代理解析后的实际生效模型(effective model)。这导致状态栏和代理后台的计费模型显示与实际路由到的上游模型(如 OpenRouter 模型)不一致。

此外,关于 `ANTHROPIC_DEFAULT_OPUS_MODEL` 等环境变量中声明 1M 上下文时使用大写 `[1M]` 的问题(Issue #2863),经确认 Claude Code 源码对大小写不敏感(`/\[1m\]/i.test(model)`),因此大写声明完全兼容,并非导致模型显示或请求错误的原因。

  1. 在 Claude Code 配置中,为 `ccstatusline` 添加 Custom Command,使用以下脚本替换默认的 `bunx -y ccstatusline@latest` 命令。该脚本会读取 `~/.cc-switch/cc-switch.db` 中的当前配置,并根据请求的模型类型提取对应的 `ANTHROPIC_DEFAULT_OPUS_MODEL` 等环境变量进行显示。

    // ~/.claude/settings.json
    {
    "statusLine": {
    "command": "m=$(jq -r '.model.id // .model // \"\"'); c=$(sqlite3 ~/.cc-switch/cc-switch.db \"SELECT settings_config FROM providers WHERE app_type='claude' AND is_current=1\"); case \"$m\" in *opus*|*Opus*) r=$(echo \"$c\"|jq -r '.env.ANTHROPIC_DEFAULT_OPUS_MODEL//empty');; *sonnet*|*Sonnet*) r=$(echo \"$c\"|jq -r '.env.ANTHROPIC_DEFAULT_SONNET_MODEL//empty');; *haiku*|*Haiku*) r=$(echo \"$c\"|jq -r '.env.ANTHROPIC_DEFAULT_HAIKU_MODEL//empty');; *) r=$(echo \"$c\"|jq -r '.env.ANTHROPIC_MODEL//empty');; esac; echo \"Model: ${r:-$m}\"",
    "padding": 0,
    "type": "command"
    }
    }
ToolClaude Code
Version未知
PlatformsWindowsmacOSLinux
声明支持 1M 上下文时,环境变量生成的大写 `[1M]` 会导致报错吗?
不会。Claude Code 源码中对上下文长度的正则匹配是大小写不敏感的(`/\[1m\]/i.test(model)`),因此 `ANTHROPIC_DEFAULT_OPUS_MODEL` 等变量中使用 `[1M]` 完全兼容,实测可用。
这个 Custom Command 脚本在 Windows 上能用吗?
可以,该脚本已在 Windows WSL 环境中验证可行,macOS 同样适用。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。