Skip to content

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 模式
特点说明

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

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 "修复安全问题"

## 总结

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

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

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

基于 MIT 许可发布 | 永久导航