Skip to content

配置 Auto Mode

通过 autoMode 设置告诉分类器哪些仓库、存储桶和域名可信,减少误拦截。

是什么

Auto Mode 让 Claude Code 在无需权限提示的情况下运行:每次工具调用都经过一个分类器,拦截不可逆、破坏性或指向你环境之外的操作。默认情况下分类器只信任工作目录和当前仓库已配置的 remote,向公司源码组织 push 或写入团队云存储桶等操作会被拦截,直到你把它们加入 autoMode.environment。

本页是配置参考:用 autoMode 设置块告诉分类器哪些基础设施可信,并可覆盖默认的 block 和 allow 规则。Auto Mode 面向 Anthropic API 所有用户开放,但不支持 Bedrock、Vertex 或 Foundry。

怎么工作

  • 分类器是在 permissions 系统之后运行的第二道关卡;permissions.deny(managed settings)在分类器之前拦截,且不可被覆盖。
  • 分类器读取与 Claude 相同的 CLAUDE.md 内容,因此 CLAUDE.md 里的行为规则(如 never force push)会同时约束 Claude 和分类器。
  • 分类器从这些 scope 读取 autoMode:~/.claude/settings.json(个人)、.claude/settings.local.json(单项目单开发者,已 gitignore)、managed settings(组织级)、--settings flag 或 Agent SDK 内联 JSON。
  • 分类器不读取共享项目设置 .claude/settings.json 中的 autoMode,因此 check in 的仓库无法注入自己的 allow 规则。
  • 各 scope 的条目会合并;开发者可扩展 environment/allow/soft_deny/hard_deny,但不能移除 managed settings 提供的条目。
  • 分类器内部按四级优先级:hard_deny 无条件拦截 → soft_deny 拦截(可被 allow 和用户意图覆盖)→ allow 作为例外覆盖匹配的 soft_deny → 明确的用户意图覆盖剩余 soft block。
  • 明确意图必须精确描述将要执行的动作:说 force-push this branch 算明确意图,说 clean up the repo 不算。
  • environment、allow、soft_deny、hard_deny 各 section 独立求值;只设置 environment 不影响其他三个的默认列表。

怎么配置 / 用法

environment 字段添加可信基础设施,用字面字符串 "$defaults" 保留默认条目(默认信任工作仓库及其 remote):

json
{
  "autoMode": {
    "environment": [
      "$defaults",
      "Source control: github.example.com/acme-corp and all repos under it",
      "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets"
    ],
    "allow": [
      "$defaults",
      "Deploying to the staging namespace is allowed: staging is isolated from production"
    ],
    "soft_deny": [
      "$defaults",
      "Never modify files under infra/terraform/prod/: production changes go through review"
    ],
    "hard_deny": [
      "$defaults",
      "Never send repository contents to third-party code-review APIs"
    ]
  }
}

条目是自然语言 prose(不是 regex 或工具 pattern),像向新工程师描述基础设施那样书写。"$defaults" 会在所在位置展开为内置规则。

什么时候用

  • 分类器反复拦截某个常规内部操作(如向自己公司源码组织 push、写入团队云存储桶)时,把目标加入 environment。
  • 需要为默认例外未覆盖的常规 pattern 放行时,添加到 allow。
  • 环境中存在默认未覆盖的特定破坏性风险时,添加到 soft_deny;绝不可逾越的安全边界添加到 hard_deny。
  • 组织级分发可信基础设施配置时,写入 managed settings。

限制 / 坑

  • 不支持 Bedrock、Vertex 或 Foundry;仅 Anthropic API 用户可用。
  • 任一字段若不含 "$defaults",会整体替换该 section 的默认列表——soft_deny 缺省会丢弃 force push、curl | bash、生产部署等内置软拦截;hard_deny 缺省会丢弃数据外泄等内置规则。
  • 开发者添加的 allow 条目可覆盖组织的 soft_deny(合并是附加式的,不是硬策略边界);要做硬边界请用 managed settings 的 permissions.deny。
  • 分类器不读取共享项目设置 .claude/settings.json 中的 autoMode。

硬事实速查(11 条)

  • 核心字段:autoMode.environment、autoMode.allow、autoMode.soft_deny、autoMode.hard_deny,均为 prose 字符串数组。
  • "$defaults" 是字面字符串,用于在数组中就地展开内置默认规则并继续随版本更新继承。
  • 默认 environment 只信任工作仓库及其已配置 remote。
  • 优先级四级:hard_deny > soft_deny > allow(覆盖 soft_deny)> 明确用户意图(覆盖剩余 soft block)。
  • CLI:claude auto-mode defaults 打印内置规则 JSON。
  • CLI:claude auto-mode config 打印分类器实际使用的有效配置($defaults 已就地展开)。
  • CLI:claude auto-mode critique 对自定义 allow/soft_deny/hard_deny 规则给出 AI 反馈。
  • 被拒记录在 /permissions 的 Recently denied 标签;按 r 标记重试。
  • 可用 PermissionDenied hook 以编程方式响应拒绝。
  • 读取 scope:~/.claude/settings.json、.claude/settings.local.json、managed settings、--settings/Agent SDK 内联 JSON。
  • 各 scope 条目合并,开发者不能移除 managed settings 提供的条目。

官方出处:https://code.claude.com/docs/en/auto-mode-config