安全防护与命令执行拦截

用 Claude Code 你应该见过这样的弹窗:

Allow Bash(npm test)?
  ▸ Yes
    Yes, and don't ask again for `npm test`
    No, tell Claude what to do differently

模型每次想调用工具,Claude Code 都要先判断一下,是直接放行、弹窗询问,还是直接拒绝。这道判断怎么来的?

在用户视角,Claude Code 给了三种管理权限的方式:

  • 按 Shift+Tab 切换的 Permission Mode
  • settings.json 里的 permissions 字段
  • 更灵活的 PreToolUse hook

这篇先把这三个面板逐个介绍清楚,再对照我们 动手实现一个 Coding Agent 时写的工具循环,看 Claude Code 在底层怎么把这三层权限判组合到一起的。