不难,其实就两步,我给你一套最省心的方案。之前折腾来折腾去,是因为命令行参数又长又容易写错(那个 \ 就是坑你的),把权限全扔给配置文件,启动命令简化到最短就顺了。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
mkdir -p ~/.claude cat > ~/.claude/settings.json << 'EOF' { "permissions": { "allow": [ "Read", "Write", "Edit", "Glob", "Grep", "Bash(git:*)", "Bash(ls:*)", "Bash(cd:*)", "Bash(pwd)", "Bash(mkdir:*)", "Bash(npm:*)", "Bash(node:*)", "Bash(python3:*)", "WebFetch", "WebSearch" ], "deny": [ "Bash(git push --force:*)", "Bash(sudo:*)", "Bash(rm -rf:*)", "Read(./.env)", "Read(./.env.*)" ] } } EOF |
说明:
|
1 |
claude |
就这一个词。裸启动 claude 时会正常显示模型选择界面,选你的模型就行。这就是你之前感觉“没模型可选”的原因——--continue 会跳过选择界面直接恢复旧会话,续行符又写错了,两件事叠一起了。
进入会话后想换模型,随时:
|
1 |
/model |
| 你的需求 | 怎么实现的 |
|---|---|
| 自动授权 | settings.json 里的 allow,不用再传一堆 --allowedTools |
| 能选模型 | 裸 claude 启动 → 出现模型选择界面;进去后 /model 随时切 |
| 恢复上次对话 | 需要时 claude -c(想看到选择界面就用 claude --resume) |
| 安全兜底 | deny 列表挡住 sudo / 强推 / rm -rf |
| 唯一要注意的:改完 settings.json 后要退出当前会话重新启动才会加载。 | |
| 如果你说的“选自己的模型”是指用 ccr 路由到第三方模型(GLM、DeepSeek 之类),那模型列表是在 ~/.claude-code-router/config.json 里配的——把你 ccr code 用的那份配置检查一下就行。是这个情况的话告诉我,我给你看那份配置怎么写。 |
这就要说清楚 /model 的工作机制了:/model 列表里永远只显示 Anthropic 官方那几个名字(opus / sonnet / haiku / opusplan 之类)。它不是“模型商店”,只是个选择器。你的自定义模型到底是谁,是由后端路由配置决定的——尤其你走的是 ccr。
|
1 2 3 4 5 6 7 |
你输入 /model sonnet ↓ Claude Code 发请求: model = "claude-sonnet-..." ↓ ccr 拦截 → 查 ~/.claude-code-router/config.json 的 Router 规则 ↓ 实际转发给你配的模型(比如 GLM / DeepSeek / Qwen) |
所以 /model 里看不到 “glm-4.6” 这类名字是正常的。你要做的是在 ccr 配置里把这几个“壳名字”映射到你自己的模型。
编辑 ~/.claude-code-router/config.json(或者直接跑 ccr ui 图形化改):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "Providers": [ { "name": "glm", "api_base_url": "https://open.bigmodel.cn/api/anthropic/v1/messages", "api_key": "你的key", "models": ["glm-4.6"] } ], "Router": { "default": "glm,glm-4.6", "think": "glm,glm-4.6", "background": "glm,glm-4.6", "longContext": "glm,glm-4.6" } } |
Router 格式是 "提供商名,模型名"。四个场景的含义:
| 路由项 | 什么时候用 |
|---|---|
| default | 普通对话(你在 /model 里选 sonnet 之类走这里) |
| think | 你选了 opus(推理加强场景) |
| background | 后台小任务(摘要、起标题) |
| longContext | 超长上下文时 |
| 改完执行: |
|
1 |
ccr restart |
然后 ccr code 启动,/model 里随便选一个(比如 sonnet),实际用的就是 glm-4.6。
会话里直接问一句:
|
1 |
你现在实际是什么模型?你的 system prompt 里怎么写的? |
或者看 ccr 日志:
|
1 |
ccr log |
能看到请求实际转发到了哪个 provider/model。
那就是环境变量的事,把模型写死即可(加到 ~/.bashrc 或 ~/.zshrc):
|
1 2 3 |
export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/anthropic" export ANTHROPIC_AUTH_TOKEN="你的key" export ANTHROPIC_MODEL="glm-4.6" |
可以,加一个 additionalDirectories 配置就行。Claude Code 默认只允许在当前工作目录里读写,你列的这几个路径在项目目录之外,所以需要显式授权。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
cat > ~/.claude/settings.json << 'EOF' { "permissions": { "additionalDirectories": [ "/tmp", "/home", "/usr/local/Ascend" ], "allow": [ "Read", "Write", "Edit", "Glob", "Grep", "Bash(git:*)", "Bash(ls:*)", "Bash(cd:*)", "Bash(pwd)", "Bash(mkdir:*)", "Bash(npm:*)", "Bash(node:*)", "Bash(python3:*)", "WebFetch", "WebSearch" ], "deny": [ "Bash(git push --force:*)", "Bash(sudo:*)", "Bash(rm -rf:*)", "Read(./.env)", "Read(./.env.*)" ] } } EOF |
|
1 2 3 4 5 |
"additionalDirectories": [ "/tmp", "~/projects/*", "/usr/local/Ascend" ] |
重启 claude 后,输入/permissions应该能看到这些目录规则已加载。然后让它读一下/usr/local/Ascend下的文件,如果不再弹确认就说明生效了。改完记得重启会话(退出再进)才能加载新配置。这样启动后默认就用你的模型,/model列表虽然还是官方名字,但不用管它。
总结:/model 看不到自己模型 ≠ 配置失败,而是它本来就不显示第三方模型。真名在 ccr 的 config.json 里(ccr ui 改最方便)。你现在的启动方式是 ccr code 还是直连环境变量?告诉我具体哪种,我帮你核对对应的配置。