6.15 --permission-mode - 指定权限模式

第 6 章 · CLI 标志说明 · 第2部分:命令参考

概述#

--permission-mode 标志允许您指定 Claude Code 的权限模式,控制工具调用的权限检查行为。这对于安全性和自动化场景非常重要。

基本语法#

bash
复制
claude --permission-mode 模式>

可用模式#

模式描述使用场景
auto自动批准权限(默认)自动化脚本、可信环境
manual手动批准权限交互式开发、需要审查
always-approve始终批准所有权限完全自动化、高度信任
always-deny始终拒绝所有权限只读模式、安全审查

使用场景#

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.shENV=$1case"$ENV"in"production")MODE="manual";;"staging")MODE="auto";;"development")MODE="always-approve";;"readonly")MODE="always-deny";;*)MODE="manual";;esacecho"使用权限模式: $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 # 检查结果ifgrep -qi "vulnerability\|漏洞" security-audit.txt;thenecho"发现安全问题,请审查"exit1fi 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 模式#

特点说明
行为自动批准大多数权限
适用自动化脚本、可信环境
安全性中等
效率高

2. Manual 模式#

特点说明
行为手动批准所有权限
适用交互式开发、需要审查
安全性高
效率低

3. Always-approve 模式#

特点说明
行为始终批准所有权限
适用完全自动化、高度信任
安全性低
效率最高

4. Always-deny 模式#

特点说明
行为始终拒绝所有权限
适用只读模式、安全审查
安全性最高
效率中等

最佳实践#

1. 根据环境选择模式#

bash
复制
# 开发环境:always-approveif["$ENV"="development"];thenMODE="always-approve"# 测试环境:autoelif["$ENV"="testing"];thenMODE="auto"# 生产环境:manualelif["$ENV"="production"];thenMODE="manual"fi claude --permission-mode "$MODE" -p "完成任务"

2. 分离读写操作#

bash
复制
# 只读操作使用 always-denyclaude --permission-mode always-deny --allowedTools "Read""Grep" -p "分析代码" # 写入操作使用 manualclaude --permission-mode manual -p "生成代码"

3. 使用工具限制增强安全#

bash
复制
# 结合权限模式和工具限制claude \ --permission-mode auto \ --allowedTools "Read""Grep""Write"\ --disallowedTools "RunCommand"\ -p "分析代码"

4. 记录权限决策#

bash
复制
#!/bin/bash# log-permissions.shLOG_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 "修复安全问题"

总结#

--permission-mode 标志提供了一种控制工具调用权限的方式。通过选择不同的权限模式,您可以:

  • 平衡安全性和效率
  • 根据环境调整权限策略
  • 实现自动化和手动控制的混合
  • 增强安全性,防止意外操作

合理使用 --permission-mode 可以帮助您在不同场景下获得最佳的安全性和效率平衡。