首页 › tutorials › 新手第一课:驯服Claude Code权限

概述

本教程面向第一次安装 Claude Code 的零基础学习者。学习目标是:理解 AI 编程助手为什么会反复弹窗询问"我可以这样做吗",掌握 Claude Code 的权限系统(六种模式 + allow/deny/ask 规则),并亲手造出一个可运行的番茄钟命令行小工具,在造工具的过程中把权限调到"既不烦人、又不危险"的舒适状态。完成本教程,你将不再被弹窗打断思路,也清楚什么时候绝不该点 Allow。

前置条件


一、为什么权限系统是 Claude Code 的"第一道门槛"

很多新手第一次用 Claude Code 时都会被同一个问题困扰:它为什么不停问我"我可以创建这个文件吗?""我可以运行这条命令吗?",弹窗多到把思路打断。要理解这件事,必须先搞懂 Claude Code 的核心运行机制——回合制 Agent 循环(Agentic Loop)。

Claude Code 不是聊天机器人,而是一个会动手的智能体。它的每一次"思考"之后,几乎都会调用一个工具(Tool)去真正改变你的电脑状态:读文件(Read)、写文件(Write)、改文件(Edit)、跑命令(Bash)、抓网页(WebFetch)等等。一个完整循环是:

  1. 接收指令:你输入需求(比如"造一个番茄钟")。
  2. 思考与规划:模型决定下一步调用哪个工具。
  3. 工具调用:真正执行——这一步会动你的文件系统和命令行。
  4. 读取结果:把工具的输出喂回模型,进入下一轮思考。
  5. 循环往复,直到任务完成。

关键在第 3 步。因为工具调用会真实改变系统状态,Claude Code 默认采用"人在回路(human-in-the-loop)"策略:凡是可能造成副作用的高风险操作(写文件、删文件、跑命令、发网络请求),执行前都要先问人。

理解了这一点,你就明白了权限系统的本质——它不是在给你添堵,而是在替你兜底。一个能随意删文件、随意执行命令的 AI,没有这道闸门是极其危险的。权限系统就是你和这个强大智能体之间的契约:哪些事它可以直接做,哪些必须先请示,哪些永远不许做。

新手的第一课,不是学怎么让它干活,而是学会和这道闸门相处——把它调到你信任的程度。


二、安装与首次启动

打开终端,执行官方安装命令(以 npm 方式为例):

npm install -g @anthropic-ai/claude-code

安装完成后,验证版本:

claude --version

能看到版本号即安装成功。接着在任意目录启动:

mkdir ~/pomo && cd ~/pomo
claude

首次启动会引导你完成登录认证(浏览器跳转授权)。登录成功后,你会进入一个交互式界面,光标前通常是 > 提示符,下方有一行模式提示,类似:

> 
(default) cwd: ~/pomo

这里的 (default) 就是当前所处的权限模式。下面我们来逐一拆解它。


三、六种权限模式详解

权限模式(permission mode)决定了 Claude Code 在"没命中任何预定义规则"时,默认该问还是该做。截至 2026 年,Claude Code 提供 6 种模式,可在交互界面用 Shift + Tab 循环切换:

模式 中文名 行为 适用场景
default 默认模式 高风险操作逐个询问 新手、重要项目、首次操作
acceptEdits 自动接受编辑 文件编辑直接做,命令仍询问 重构、批量改代码
plan 计划模式 只读探索,只出方案不执行 复杂任务先调研、看大纲
auto 智能模式 安全操作自动放行,危险仍问 日常开发(新版本默认)
dontAsk 不询问 几乎不问,但仍受 deny 约束 半信任的自动化任务
bypassPermissions 完全绕过 全部不问,YOLO 模式 一次性沙盒容器、CI 容器

原理要点:模式只控制"兜底行为"。如果你在 settings.json 里写了明确的 allow/deny 规则,规则优先级永远高于模式——被 deny 的操作在任何模式下(包括 bypassPermissions)都会被挡掉;被 allow 的操作在任何模式下都直接放行。模式只对"规则没覆盖到的灰色地带"生效。

新手建议:前两个项目只用 default 模式,认真看完每一次弹窗。等你熟悉了它"想做什么",再升级到 auto。bypassPermissions 在你自己的工作电脑上慎用,最好只留给 Docker 等一次性容器。


四、用 settings.json 精准放行:allow / deny / ask

光靠模式切换,要么太严(一直问),要么太松(不安全)。真正强大的,是细粒度规则。Claude Code 把每个工具调用都表示成一条规则串,你预先写好放行(allow)、拒绝(deny)、询问(ask)三类清单,就能让安全命令静默、危险命令永远挡住。

规则串语法

规则串 含义
Bash(git status:*) 允许所有 git status ... 命令
Bash(npm run test) 只允许恰好这条命令
Read(./src/**) 允许读取 src 目录下所有文件
Edit(./src/**) 允许编辑 src 目录下所有文件
Write(./pomo.log) 允许写入这个特定文件
WebFetch(docs.anthropic.com) 允许抓取该域名网页
mcp__github__* 允许某个 MCP 服务器的所有工具

其中 * 是通配符,:** 表示"任意参数"。deny 的优先级高于 allow——只要命中 deny,无论是否同时命中 allow,都会被拒绝。

三层配置文件(优先级从高到低)

  1. 企业托管策略:/etc/claude-code/managed-settings.json(Linux)或对应路径,由 IT 管理员锁定,个人改不了。
  2. 用户级:~/.claude/settings.json,对你所有项目生效。
  3. 项目级:项目根目录下 .claude/settings.json(可提交到 Git 团队共享)和 .claude/settings.local.json(个人本地,应加入 .gitignore)。

新手只需关注用户级和项目级即可。

一个安全的起手配置

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

{
  "permissions": {
    "allow": [
      "Bash(python3:*)",
      "Bash(cat:*)",
      "Bash(ls:*)",
      "Read(./**)",
      "Edit(./**)",
      "Write(./pomo.log)"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(sudo:*)",
      "Bash(curl:*)",
      "Read(./.env)",
      "Read(./.env/**)",
      "Edit(./.env)"
    ],
    "ask": [
      "Bash(npm publish:*)",
      "Bash(git push:*)"
    ]
  },
  "defaultMode": "default"
}

这套配置的含义是:读改项目文件、跑 Python 脚本、看日志都直接放行;删除、提权、外发网络、读写 .env 一律禁止;发布、推送这种对外操作必须问。这正是"既不烦人、又不危险"的舒适区。


五、实战项目:在权限弹窗中造一个番茄钟 CLI

现在把理论用起来。我们让 Claude Code 替我们写一个 25 分钟工作 + 5 分钟休息的番茄钟,过程中你会真实经历"弹窗 → 决策 → 永久放行"的完整流程。

步骤 1:准备目录并启动

cd ~/pomo
claude

确认界面底部显示 (default) 模式。

步骤 2:下达需求,观察第一次弹窗

在提示符后输入:

帮我写一个 Python 番茄钟 pomo.py:工作 25 分钟、休息 5 分钟,倒计时显示在终端,
完成后把每条记录追加写入 pomo.log,格式为"时间 | 类型 | 时长 | 任务名"。

预期结果:Claude Code 思考后会调用 Write 工具创建 pomo.py。此时弹窗出现:

Claude wants to write to ./pomo.py
[1] Yes, and don't ask again for Write in this project
[2] Yes
[3] Yes, and allow all future write/edit operations
[4] No

决策示范:选 1——既允许这次,又把"本项目内写文件"永久放行。这正是规则写入的时刻。文件创建成功后,Claude Code 会显示写入路径与行数。

步骤 3:让它跑起来,再次观察弹窗

接着让它运行测试:

跑一下这个脚本,任务名设为"学权限",确认能正常计时并把日志写进去。

预期结果:Claude Code 调用 Bash 工具,弹窗询问是否运行 python3 pomo.py 学权限。注意:为了演示,我们临时把脚本的工作时间改短(见步骤 4),否则要等 25 分钟。在弹窗里选"don't ask again for Bash(python3:*)",把 Python 执行权永久放行。

步骤 4:精简版脚本(方便演示验证)

完整脚本由 Claude Code 生成,核心逻辑如下(你可以对照它写出的版本):

#!/usr/bin/env python3
import time, sys
from datetime import datetime

WORK, BREAK, LOG = 3, 1, "pomo.log"   # 演示用 3 秒/1 秒,正式用 1500/300

def countdown(seconds, label):
    while seconds:
        m, s = divmod(seconds, 60)
        print(f"\r{label}: {m:02d}:{s:02d}", end="", flush=True)
        time.sleep(1); seconds -= 1
    print()

def log(task, kind, minutes):
    with open(LOG, "a") as f:
        f.write(f"{datetime.now():%Y-%m-%d %H:%M} | {kind} | {minutes}min | {task}\n")

task = sys.argv[1] if len(sys.argv) > 1 else "专注"
countdown(WORK,  f"🍅 {task}")
log(task, "work", WORK // 60)
countdown(BREAK, "☕ 休息")
log(task, "break", BREAK // 60)
print(f"✅ 完成!记录已写入 {LOG}")

步骤 5:验证日志,体验"静默放行"

运行结束后,让它读取日志:

把 pomo.log 的内容显示出来。

预期结果:因为 Read(./**) 已在 allow 列表(或刚被你永久放行),这次不再弹窗,直接输出:

2026-07-09 14:30 | work  | 0min | 学权限
2026-07-09 14:30 | break | 0min | 学权限

这就是权限调好之后的畅快感——安全操作静默通过,只在真正有风险时才打断你。

步骤 6:用 /permissions 命令回看与微调

在交互界面输入:

/permissions

会打开一个交互式面板,列出当前所有 allow / deny / ask 规则、来源(用户级/项目级)、当前模式。你可以在这里直接增删规则,而不用手改 JSON。这个命令的别名是 /allowed-tools。


六、常见问题与解决方案

Q1:弹窗太多,思路全被打断了。 → 在 default 模式下用 Shift + Tab 切到 acceptEdits(自动改文件)或 auto(智能放行安全操作)。再把高频安全命令(git status、npm run test、ls、cat)写进 allow。

Q2:我点了"allow all",现在它开始乱删文件,怎么办? → 立即用 /permissions 打开面板,找到过宽的规则(如 Bash(*))删除;或在 deny 里加 Bash(rm:*) 兜底。deny 永远胜过 allow。

Q3:.env 里有密钥,怕它读出去。 → 把 Read(./.env)、Read(./.env/**)、Edit(./.env)、Bash(cat:.env*) 全写进 deny。这样即便误入 bypassPermissions,密钥也读不到。

Q4:团队项目,规则要共享给同事。 → 写进 .claude/settings.json 并提交 Git;个人的临时规则写进 .claude/settings.local.json 并加入 .gitignore。

Q5:脚本卡在 25 分钟倒计时,没法快速验证。 → 演示阶段把 WORK/BREAK 改成秒级(如 3 秒/1 秒),验证逻辑无误后再改回 1500/300。这也是调试倒计时类程序的标准技巧。

Q6:bypassPermissions 到底能不能用? → 只在一次性、可丢弃的沙盒环境里用(Docker 容器、CI 临时机器、虚拟机快照)。在装满个人数据的工作电脑上,永远别开——一旦它决定 rm -rf,没人拦得住。


七、安全红线:什么时候绝不点 Allow

权限系统再灵活,也挡不住人在弹窗前习惯性地点"Yes"。请牢记以下红线——只要弹窗里的命令沾边,立刻选 No:

  1. 删除命令:rm -rf、rm -r、git clean -fd、drop table、truncate。
  2. 提权命令:sudo、chmod 777、chown。
  3. 外发与下载:curl、wget、scp、npm publish、pip upload、git push --force。
  4. 读写敏感文件:.env、id_rsa、credentials.json、~/.ssh/**、浏览器 profile。
  5. 访问本不该碰的目录:弹窗里出现 ~/Documents、~/Desktop、/etc、/var 而当前项目根本不在那里——说明它可能要越界操作。

遇到拿不准的命令,先选 No,再让它解释这条命令会做什么,听懂了再重新放行。记住:Allow 是不可逆的授权习惯,谨慎永远不吃亏。


八、权限决策流程图

下图展示一次工具调用从发起到执行/拒绝的完整判定路径。建议存下来,作为你每次面对弹窗时的决策参照:

flowchart TD
    A[Claude 发起一次工具调用] --> B{命中 deny 规则?}
    B -- 是 --> X[❌ 直接拒绝 不询问]
    B -- 否 --> C{命中 allow 规则?}
    C -- 是 --> D[✅ 自动放行 静默执行]
    C -- 否 --> E{命中 ask 规则?}
    E -- 是 --> F[🔔 弹窗询问用户]
    E -- 否 --> G{当前权限模式}
    G -- default --> F
    G -- acceptEdits --> H{是文件编辑类?}
    H -- 是 --> D
    H -- 否 --> F
    G -- plan --> I[🔒 只读 拒绝执行]
    G -- auto --> J{操作判定为安全?}
    J -- 安全 --> D
    J -- 危险 --> F
    G -- bypassPermissions --> D
    F --> K{用户选择}
    K -- Allow once --> D
    K -- Allow always --> L[📝 写入 allow 规则]
    K -- Deny --> X
    L --> D

延伸阅读


训练营适用性评估

参考来源

  1. 配置权限 - Claude Code 官方文档(中文) — 权限模式、allow/deny/ask 规则语法与托管策略的权威说明。
  2. Claude Code settings.json 详解:permissions 权限系统全解析 — 三类规则、通配符语法、defaultMode 各模式含义的深度技术博客。
  3. Claude Code Permission Modes Explained (2026) — 2026 年最新模式集合与切换方法的实战教程。
  4. Claude Code Permissions: A Practical settings.json Guide — 含 /permissions 交互管理与三层配置优先级的实用指南。
  5. Configure permissions - Claude Code Docs (English) — 英文官方文档,用于交叉核对规则串与模式行为的最新定义。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入