安全沙箱与权限管理机制

持久化聊天记录 把对话存进了磁盘,聊天记录再也不会丢。但我们的 Agent 还留着一个从第一篇就埋下的隐患:模型说调用什么工具,它就调用什么,中间没有任何检查。

模型要是脑子一抽,往 run_command 里塞了个 rm -rf /,我们的 Agent 会眼都不眨地执行掉。

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 内部那套三层权限判定。这篇我们动手实现一个简化版,砍掉 settings.json 里的静态规则配置,只保留最常用的三种权限模式:

  • default:默认模式,写文件、跑命令都要你确认,只有读文件这类只读操作自动放行
  • acceptEdits:读写文件都自动放行,跑命令仍要授权
  • bypass:一切放行,不再打扰你

plan 模式要配合 System Prompt 一起改,比这三种复杂,留到后面单独讲。