跳转到内容

设置与权限

Claude Code 提供了灵活的配置系统,涵盖团队共享设置、个人权限覆盖、终端个性化和优先级规则。本教程将全面介绍如何配置和管理这些设置。

团队配置

使用 settings.json 共享团队级别的 hooks、权限和环境变量。

个人权限

使用 settings.local.json 设置个人权限覆盖。

优先级规则

理解设置和 CLAUDE.md 的优先级层次。

渐进式权限

根据经验水平逐步开放工具权限。


.claude/settings.json 文件用于配置 hooks、权限、环境变量等,提交到版本库与团队共享。

支持的键包括:hooksenvallowedToolsautoApproveToolsdangerouslyAllowedPatternsteammatesteammateModeapiKeyHelperspinnerVerbsspinnerTipsOverrideplansDirectoryenableAllProjectMcpServers

{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash|Edit|Write",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/security-check.sh",
"timeout": 5000
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/auto-format.sh"
}
]
}
],
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/git-context.sh"
}
]
}
]
}
}

个人权限覆盖文件(已加入 gitignore):

{
"permissions": {
"allow": [
"Bash(git *)",
"Bash(pnpm *)",
"Bash(npm test)",
"Edit",
"Write",
"WebSearch"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)"
],
"ask": [
"Bash(npm publish)",
"Bash(git push --force)"
]
}
}
类别行为
allow自动批准,无需询问
deny完全阻止
ask提示确认
(默认)使用默认权限模式

两个设置可以自定义 Claude 工作时终端中旋转显示的文本。

替换或扩展旋转器中显示的动作词:

{
"spinnerVerbs": {
"mode": "replace",
"verbs": ["正在编码…", "思考中…", "分析中…", "优化中…"]
}
}

使用 "mode": "add" 扩展默认列表而非替换。

自定义旋转器中显示的提示。使用 excludeDefault: true 移除所有内置提示:

{
"spinnerTipsOverride": {
"tips": ["上下文满了试试 /compact", "用 --print 做 CI 管道"],
"excludeDefault": true
}
}

模式匹配范围
Bash(git *)任何 git 命令
Bash(pnpm *)任何 pnpm 命令
Edit所有文件编辑
Write所有文件写入
WebSearch网页搜索能力
mcp__serena__*所有 Serena MCP 工具
mcp__github__create_issue特定 MCP 工具(格式:mcp__<server>__<tool>
Read(file_path:*.env*)读取匹配的文件路径
Edit(file_path:*.pem)编辑匹配的文件路径
Write(file_path:*.key)写入匹配的文件路径

使用工具限定格式可以按路径模式锁定文件访问:

{
"permissions": {
"deny": [
"Bash(command:*rm -rf*)",
"Bash(command:*terraform destroy*)",
"Read(file_path:*.env*)",
"Read(file_path:*.pem)",
"Read(file_path:*credentials*)",
"Edit(file_path:*.env*)",
"Edit(file_path:*.key)",
"Write(file_path:*.env*)",
"Write(file_path:*.key)"
]
}
}

更简单的格式,自动批准列出的工具:

{
"allowedTools": [
"Read",
"Grep",
"Glob",
"WebFetch",
"TodoRead",
"TodoWrite",
"Task",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(pnpm typecheck *)",
"Bash(pnpm lint *)",
"Bash(pnpm test *)"
]
}

非常严格,只允许读取操作:

{
"autoApproveTools": ["Read", "Grep", "Glob"]
}

临时修改 CLAUDE.md,任务完成后恢复:

Terminal window
# 修改前
git stash push -m "CLAUDE.md original" CLAUDE.md
# Claude 为特定任务修改 CLAUDE.md
# ... 工作 ...
# 任务完成后
git stash pop

当配置文件或设置冲突时,Claude Code 使用以下优先级。

最高优先级
|
v
settings.local.json 个人覆盖
|
v
.claude/settings.json 项目设置
|
v
~/.claude/settings.json 全局默认
|
v
最低优先级
最高优先级
|
v
.claude/CLAUDE.md 本地(个人)
|
v
/project/CLAUDE.md 项目(团队)
|
v
~/.claude/CLAUDE.md 全局(个人)
|
v
最低优先级

.claude/rules/ 中的文件在会话开始时自动加载并合并:

.claude/rules/
├── code-conventions.md ──┐
├── git-workflow.md ──┼──→ 会话开始时全部加载
└── architecture.md ──┘

了解每种记忆方式的加载时机对 token 优化至关重要:

方式加载时机Token 消耗适用场景
CLAUDE.md会话开始始终消耗核心项目上下文
.claude/rules/*.md会话开始(所有文件)始终消耗始终适用的约定
@path/to/file.md按需(引用时)仅在使用时可选/条件性上下文
.claude/commands/*.md仅调用时仅在调用时工作流模板
.claude/skills/*.md仅调用时仅在调用时领域知识模块

规则可以使用 YAML frontmatter 定向到特定文件路径:

---
paths:
- "src/api/**/*.ts"
- "lib/handlers/**/*.ts"
---
# API 端点约定
这些规则仅在处理 API 文件时适用:
- 所有端点必须有 OpenAPI 文档
- 使用 zod 进行请求/响应验证
- 包含速率限制中间件
  • 模式使用 glob 语法(与 .gitignore 相同)
  • 多个规则可以匹配同一文件(全部加载)
  • 没有 paths: frontmatter 的规则始终加载