不难,其实就两步,我给你一套最省心的方案。之前折腾来折腾去,是因为命令行参数又长又容易写错(那个 \ 就是坑你的),把权限全扔给配置文件,启动命令简化到最短就顺了。
第一步:配置文件搞定自动授权(一次配置,永久生效)
|
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
|
说明:
- Bash(git:*) 一条顶十条——放行所有 git 常用操作,不用再一条条列 git status git diff……那些了
- deny 里保住底线(强推、sudo、删库),deny 优先级最高,所以这样放行是安全的
- 日常开发基本零弹窗,但推送/合并这种你想把关的动作可以之后按需加到 ask
第二步:启动就是一条命令
就这一个词。裸启动 claude 时会正常显示模型选择界面,选你的模型就行。这就是你之前感觉“没模型可选”的原因——--continue 会跳过选择界面直接恢复旧会话,续行符又写错了,两件事叠一起了。
进入会话后想换模型,随时:
最终效果
| 你的需求 |
怎么实现的 |
| 自动授权 |
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 |
超长上下文时 |
| 改完执行: |
|
然后 ccr code 启动,/model 里随便选一个(比如 sonnet),实际用的就是 glm-4.6。
快速验证是不是真的路由到了你的模型
会话里直接问一句:
|
1
|
你现在实际是什么模型?你的 system prompt 里怎么写的?
|
或者看 ccr 日志:
能看到请求实际转发到了哪个 provider/model。
如果你没走 ccr,是直连第三方 API
那就是环境变量的事,把模型写死即可(加到 ~/.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"
|
但是 claude 启动后 /model 看不到自己的模型啊
可以,加一个 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
|
几点说明
- additionalDirectories 的作用:把这些目录加入“工作区”,Read/Write/Edit/Glob 等文件操作在这些目录内自动放行,不再弹窗。路径支持 ~、* 通配符和 gitignore 风格语法,比如 ~/projects/*。
- 注意路径拼写:你写的是 /usr/local/Ascendc,华为昇腾的目录通常是 /usr/local/Ascend——我按后者写的,如果你机器上确实叫别的名字,以实际为准(可以先 ls /usr/local/ 确认)。
- 权限生效范围:在 additionalDirectories 内的文件编辑会自动授权,但 Bash 命令不受它约束——Bash 走的是 allow 列表里的命令前缀规则。所以 cd /tmp && git status 这类复合命令里带 cd 已经放行了就没事。
- 提醒一下范围有点大:/home 和 /tmp 整个放进去意味着 Claude 可以不经确认改写这两个目录下任何你能访问的文件(包括你 home 里的配置文件)。如果只是想授权某几个项目,更稳妥的写法是:
|
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 还是直连环境变量?告诉我具体哪种,我帮你核对对应的配置。
|