6.15 --permission-mode - 指定权限模式
概述
--permission-mode 标志允许您指定 Claude Code 的权限模式,控制工具调用的权限检查行为。这对于安全性和自动化场景非常重要。
基本语法
bash
claude --permission-mode <模式>
可用模式
| 模式 | 描述 | 使用场景 |
|---|
auto| 自动批准权限(默认)| 自动化脚本、可信环境 manual| 手动批准权限| 交互式开发、需要审查 always-approve| 始终批准所有权限| 完全自动化、高度信任 always-deny| 始终拒绝所有权限| 只读模式、安全审查
bash
## 使用场景
### 1\. 自动化脚本使用 auto
bash
# 自动化脚本中自动批准权限
claude --permission-mode auto -p "生成并保存代码"
# 所有工具调用都会自动批准
### 2\. 交互式开发使用 manual
bash
# 交互式开发中手动批准权限
claude --permission-mode manual
# 每次工具调用都需要手动批准
### 3\. 完全自动化使用 always-approve
bash
# 完全自动化的 CI/CD 流程
claude --permission-mode always-approve -p "部署应用"
# 所有权限都会自动批准
### 4\. 只读模式使用 always-deny
bash
# 只读模式,只允许读取操作
claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码"
# 所有写入操作都会被拒绝
## 高级用法
### 1\. 与其他标志组合
bash
# 权限模式 + 限制工具
claude --permission-mode auto --allowedTools "Read" "Grep" -p "分析代码"
# 权限模式 + 指定模型
claude --permission-mode manual --model opus -p "生成代码"
# 权限模式 + 自定义系统提示
claude --permission-mode auto --system-prompt "你是一位 Python 专家" -p "编写代码"
### 2\. 根据环境选择权限模式
bash
#!/bin/bash
# select-permission-mode.sh
ENV=$1
case "$ENV" in
"production")
MODE="manual"
;;
"staging")
MODE="auto"
;;
"development")
MODE="always-approve"
;;
"readonly")
MODE="always-deny"
;;
*)
MODE="manual"
;;
esac
echo "使用权限模式: $MODE"
claude --permission-mode "$MODE" -p "完成任务"
### 3\. 安全的自动化流程
bash
#!/bin/bash
# safe-automation.sh
# 只允许读取和搜索
claude \
--permission-mode auto \
--allowedTools "Read" "Grep" \
-p "分析代码结构"
# 手动批准写入操作
claude \
--permission-mode manual \
-p "生成代码"
### 4\. 分阶段权限控制
bash
#!/bin/bash
# staged-permission.sh
# 第一阶段:只读分析
echo "只读分析..."
claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码"
# 第二阶段:手动批准写入
echo "手动批准写入..."
claude --permission-mode manual -p "生成代码"
# 第三阶段:自动部署
echo "自动部署..."
claude --permission-mode always-approve -p "部署应用"
## 实际应用示例
### 示例 1: CI/CD 流程
bash
#!/bin/bash
# cicd-pipeline.sh
# 阶段 1:代码分析(只读)
echo "代码分析..."
claude \
--permission-mode always-deny \
--allowedTools "Read" "Grep" \
-p "分析代码质量" > analysis.txt
# 阶段 2:测试生成(自动批准)
echo "生成测试..."
claude \
--permission-mode auto \
-p "生成测试代码" > tests.py
# 阶段 3:部署(手动批准)
echo "部署应用..."
claude \
--permission-mode manual \
-p "部署到生产环境"
echo "CI/CD 流程完成"
### 示例 2: 安全审查
bash
#!/bin/bash
# security-audit.sh
# 只读模式进行安全审查
claude \
--permission-mode always-deny \
--allowedTools "Read" "Grep" \
-p "进行安全审查" > security-audit.txt
# 检查结果
if grep -qi "vulnerability\|漏洞" security-audit.txt; then
echo "发现安全问题,请审查"
exit 1
fi
echo "安全审查通过"
### 示例 3: 开发环境设置
bash
#!/bin/bash
# dev-environment.sh
# 开发环境:自动批准
if [ "$ENV" = "development" ]; then
claude --permission-mode always-approve -p "开发功能"
# 生产环境:手动批准
elif [ "$ENV" = "production" ]; then
claude --permission-mode manual -p "部署功能"
fi
### 示例 4: 代码生成流程
bash
#!/bin/bash
# code-generation.sh
# 分析阶段(只读)
echo "分析阶段..."
claude \
--permission-mode always-deny \
--allowedTools "Read" "Grep" \
-p "分析现有代码" > analysis.txt
# 生成阶段(自动批准)
echo "生成阶段..."
claude \
--permission-mode auto \
-p "基于分析生成代码" > generated-code.txt
# 审查阶段(手动批准)
echo "审查阶段..."
claude \
--permission-mode manual \
-p "审查生成的代码"
echo "代码生成完成"
## 权限模式对比
### 1\. Auto 模式1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
| 特点 | 说明 |
|---|
行为| 自动批准大多数权限 适用| 自动化脚本、可信环境 安全性| 中等 效率| 高
2. Manual 模式
| 特点 | 说明 |
|---|
行为| 手动批准所有权限 适用| 交互式开发、需要审查 安全性| 高 效率| 低
3. Always-approve 模式
| 特点 | 说明 |
|---|
行为| 始终批准所有权限 适用| 完全自动化、高度信任 安全性| 低 效率| 最高
4. Always-deny 模式
| 特点 | 说明 |
|---|
行为| 始终拒绝所有权限 适用| 只读模式、安全审查 安全性| 最高 效率| 中等
bash
## 最佳实践
### 1\. 根据环境选择模式
bash
# 开发环境:always-approve
if [ "$ENV" = "development" ]; then
MODE="always-approve"
# 测试环境:auto
elif [ "$ENV" = "testing" ]; then
MODE="auto"
# 生产环境:manual
elif [ "$ENV" = "production" ]; then
MODE="manual"
fi
claude --permission-mode "$MODE" -p "完成任务"
### 2\. 分离读写操作
bash
# 只读操作使用 always-deny
claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码"
# 写入操作使用 manual
claude --permission-mode manual -p "生成代码"
### 3\. 使用工具限制增强安全
bash
# 结合权限模式和工具限制
claude \
--permission-mode auto \
--allowedTools "Read" "Grep" "Write" \
--disallowedTools "RunCommand" \
-p "分析代码"
### 4\. 记录权限决策
bash
#!/bin/bash
# log-permissions.sh
LOG_FILE="permissions-$(date +%Y%m%d-%H%M%S).log"
claude --permission-mode manual -p "生成代码" 2>&1 | tee "$LOG_FILE"
echo "权限决策已记录到 $LOG_FILE"
## 常见问题
### Q1: 如何选择合适的权限模式?
A: 根据环境和使用场景选择。开发环境用 always-approve,生产环境用 manual,自动化脚本用 auto。
### Q2: 可以在会话中切换权限模式吗?
A: 不可以。权限模式在会话开始时确定,整个会话使用同一个模式。
### Q3: always-approve 模式安全吗?
A: 不安全。建议只在高度信任的环境中使用,如本地开发环境。
### Q4: 如何在 CI/CD 中使用权限模式?
A: 使用 auto 或 always-approve 模式,确保自动化流程不会因为权限提示而中断。
### Q5: always-deny 模式有什么用?
A: 用于只读操作,如代码分析、安全审查等,确保不会意外修改文件。
## 与其他标志的组合示例
### 1\. 安全的开发流程
bash
#!/bin/bash
# secure-dev-flow.sh
# 只读分析
claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "分析代码"
# 手动批准生成
claude --permission-mode manual -p "生成代码"
# 自动测试
claude --permission-mode auto -p "运行测试"
### 2\. 自动化部署
bash
#!/bin/bash
# automated-deploy.sh
# 只读检查
claude --permission-mode always-deny -p "检查部署准备" > check.txt
# 自动部署
claude --permission-mode always-approve -p "部署应用"
### 3\. 安全审查流程
bash
#!/bin/bash
# security-review.sh
# 只读审查
claude --permission-mode always-deny --allowedTools "Read" "Grep" -p "安全审查" > audit.txt
# 手动批准修复
claude --permission-mode manual -p "修复安全问题"
## 总结1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
--permission-mode 标志提供了一种控制工具调用权限的方式。通过选择不同的权限模式,您可以:
- 平衡安全性和效率
- 根据环境调整权限策略
- 实现自动化和手动控制的混合
- 增强安全性,防止意外操作
合理使用 --permission-mode 可以帮助您在不同场景下获得最佳的安全性和效率平衡。