Sooua
登录
返回文章列表
Claude Code··7 分钟阅读

理解三种权限模式

Claude Code 能自动执行很多操作:

目标:理解不同权限模式的区别,选择适合自己的模式
预计时间:15 分钟
对应官方文档:Permission Modes


为什么需要权限模式?

Claude Code 能自动执行很多操作:

  • 修改你的代码文件
  • 运行 shell 命令
  • 安装依赖包

权限模式就是控制 Claude 在多大程度上可以自动执行这些操作,而不用每次都问你。


三种模式对比

模式自动执行适用场景风险
Ask(询问)❌ 每次都要确认新手、重要项目最低
Auto Edits(自动编辑)✅ 改文件自动,命令要问日常开发中等
Auto(全自动)✅ 文件和命令都自动信任的环境、批量任务较高

权限模式决策流程

以下流程图帮助你根据场景选择最合适的权限模式:


Ask 模式(默认推荐)

最安全的模式,Claude 做任何操作前都会问你

> 添加一个日志记录功能

I'll add logging to the main module. Allow edit to main.py? (Y/n/b/d)
> Y

Now I'll run the tests to verify. Allow command: pytest tests/? (Y/n)
> Y

适合:

  • 刚开始使用 Claude Code
  • 处理重要/生产代码
  • 不熟悉代码库时

Auto Edits 模式

Claude 可以自动修改文件,但运行命令前仍会询问。

> 把所有的 print 改成 logging

(Claude 自动修改多个文件...)

Now I'll run tests to verify. Allow command: pytest tests/? (Y/n)
> Y

切换方式:

> /mode auto-edits

或在 VS Code / Desktop 中点击模式切换按钮。

适合:

  • 已经熟悉 Claude 的行为
  • 需要快速修改多个文件
  • 有完整测试覆盖的项目

Auto 模式(全自动)

Claude 自动执行所有操作,包括运行命令。

> 重构这个模块,确保所有测试通过

(Claude 自动修改文件、运行测试、修复问题...)

Done! All tests pass. Summary of changes:
- Extracted 3 helper functions
- Updated 5 test cases
- Removed 2 unused imports

切换方式:

> /mode auto

⚠️ 注意事项:

  • 只在信任的代码库中使用
  • 确保有 git 备份(可以随时 git reset
  • 建议先用 --worktree 隔离会话
  • 可以在 CLAUDE.mdsettings.json 中配置信任规则

适合:

  • 大规模重构
  • 自动化脚本
  • 有完整 CI/CD 保障的项目

更多代码示例

示例 1:在启动时指定权限模式

# 以 Ask 模式启动(默认)
claude
 
# 以 Auto Edits 模式启动
claude --mode auto-edits
 
# 以 Auto 模式启动(谨慎使用)
claude --mode auto

示例 2:在会话中动态切换并观察行为差异

> /mode ask
Switched to ask mode.

> 修改 main.py 的日志级别为 DEBUG
Allow edit to main.py? (Y/n/b/d)
> Y

> /mode auto-edits
Switched to auto-edits mode.

> 把 utils.py 中的 timeout 从 30 改为 60
(Claude 直接修改文件,不再询问)
Now I'll run tests. Allow command: pytest tests/? (Y/n)

示例 3:配置项目中默认的权限模式

在项目根目录创建 .claude/settings.json

{
  "defaultMode": "ask",
  "dangerousTools": {
    "shell": "ask",
    "fileWrite": "ask"
  }
}

这样每次进入该项目时,Claude 会自动使用 Ask 模式,即使全局设置是 Auto Edits。


实战场景

场景 1:使用 Auto Edits 模式批量重命名 API 端点

背景:你的项目中有 20 个文件引用了旧的 API 端点 /api/v1/users,需要全部改为 /api/v2/users

操作步骤

  1. 在项目根目录启动 Claude Code,切换到 Auto Edits 模式:
    > /mode auto-edits
    Switched to auto-edits mode.
    
  2. 下达指令:
    > 把所有文件中的 "/api/v1/users" 替换为 "/api/v2/users",
    > 包括 Python 代码、测试和文档中的引用。
    
  3. Claude 自动搜索所有匹配文件并批量修改,你会看到类似输出:
    Modified src/routes.py
    Modified src/client.py
    Modified tests/test_users.py
    Modified docs/api.md
    ...(共修改 12 个文件)
    
  4. 修改完成后,Claude 询问是否运行测试:
    Allow command: pytest tests/? (Y/n)
    > Y
    
  5. 测试全部通过后,Claude 输出总结:
    Summary: Replaced 47 occurrences across 12 files. All tests pass.
    

预期结果:12 个文件中的 47 处旧端点引用全部更新,测试通过,零人工逐文件修改。

场景 2:使用 Auto 模式完成端到端重构任务

背景:你需要将一个同步的 Django 视图全部迁移为异步(async def),涉及 8 个视图文件、5 个测试文件和 3 个工具函数。你信任 Claude 的处理能力,且项目有完整的 CI/CD 和 git 备份。

操作步骤

  1. 确保当前 git 工作区干净,便于回滚:
    git status  # 确认没有未提交的修改
  2. 启动 Claude Code 并切换到 Auto 模式:
    > /mode auto
    ⚠️ Auto mode enabled. Claude will execute commands without asking.
    
  3. 下达详细指令:
    > 将 views/ 目录下的所有同步视图函数改为异步视图,
    > 包括:
    > 1. 把所有 def view_name(request) 改为 async def view_name(request)
    > 2. 把所有 ORM 查询同步调用改为 await(如 User.objects.get → await User.objects.aget)
    > 3. 更新 tests/ 目录中对应的测试代码
    > 4. 更新 utils/ 中被视图调用的函数
    > 5. 每修改一个文件后运行对应测试,确保不破坏
    > 6. 全部完成后运行完整测试套件
    
  4. Claude 开始全自动执行:
    • 自动读取并修改 views/user_views.py
    • 自动运行 pytest tests/test_user_views.py
    • 如有失败,自动修复并重试
    • 依次处理所有文件...
  5. 最终输出:
    Done! All tests pass.
    Summary of changes:
    - Migrated 8 view functions to async
    - Updated 23 ORM calls to async variants
    - Modified 5 test files
    - Fixed 2 async/await edge cases automatically
    

预期结果:16 个文件全部迁移完成,完整测试套件通过,全程无需人工确认每个修改,耗时约 3-5 分钟(人工手动操作可能需要 1 小时以上)。


快速切换

终端 CLI

# 查看当前模式
claude /mode
 
# 切换到指定模式
claude /mode ask
claude /mode auto-edits
claude /mode auto
 
# 快捷键:Shift + Tab 循环切换

VS Code / Desktop

点击状态栏的模式指示器(显示 "Ask" / "Auto Edits" / "Auto"),直接选择。


企业级控制

如果你是团队管理员,可以通过以下方式统一管理:

  1. Server-managed settings:强制所有用户使用特定模式
  2. Managed MCP:限制可连接的外部工具
  3. Auto mode config:配置信任域名、仓库白名单

参考:Server-managed SettingsAuto Mode Config


最佳实践

建议说明
新项目用 Ask先了解 Claude 的行为习惯
熟悉后用 Auto Edits提升效率,保留命令确认
Auto 模式要备份使用 git,或 --worktree 隔离
敏感操作加确认即使 Auto 模式, destructive 操作也会提示
团队统一配置通过 server settings 强制执行

下一步

05. 常用命令速查

分享

评论

登录 后参与讨论。

加载中…

相关文章