Skip to content

第 4 章:工具、沙箱与策略语言 — 谁来阻止模型动手太快 ​

出处

来源:原网页 · 状态:已读 · PDF:book2-comparing.pdf p.22–26

一句话 ​

真正把 AI coding system 区分开来的,是调工具之前谁拥有最后解释权。 Claude Code 靠运行时编排和现场审批,Codex 靠 schema、参数化权限和独立策略引擎。沙箱不是安全附属件,它定义了产品是什么。

核心概念 ​

模型说错话只浪费时间,跑错命令就可能把目录、仓库、进程和工作流一起带坏。口头失误只耗时;错误命令会连累现场。两套系统的分野在于:工具被调用前,最终解释权归谁。

Claude Code 把工具纳入运行时调度:toolOrchestration.ts、toolExecution.ts、StreamingToolExecutor.ts、useCanUseTool.tsx,以及 Bash 专用 prompt 与 allow/deny/ask。并发取决于 schema 与 isConcurrencySafe();改上下文须保持回放顺序;流式执行还要处理中断、synthetic result 与 UI。工具调用被当成有后果的过程,而不是一次性动作——先排期、再并行或串行、记账、被叫停时如何收场。对 Bash 这类高风险接口尤其约束。工具系统有强烈现场调度感。

Codex 先把工具做成类型化接口。exec_command 带 cmd、workdir、shell、tty、yield_time_ms、max_output_tokens、login 及审批字段;shell / shell_command 要求 workdir 并提醒勿滥用 cd。正确用法嵌在定义里。提权做成显式参数,request_permissions 独立成工具;execpolicy 单独成 crate(Policy、Rule、Evaluation、Decision、parser)。schema 关闭 additional_properties;还导出 blocking_append_allow_prefix_rule、blocking_append_network_rule 等修正入口——不只检查,也能改政策。执行边界已经是一门小型政策语言,不只是几个 if/else。

对照两条审批链:

  • Claude Code:hasPermissionsToUseTool → allow(并发检查)/ deny(sticky)/ ask(coordinator | swarm | interactive),中断语义为 cancel 或 block
  • Codex:PolicyParser.parse 后逐条 evaluate,返回 Allow | Deny | RequestPermissions

决策树:schema 失败 → deny;高危前缀 → deny;网络/提权 → request_permissions;无匹配且 sandbox 可覆盖 → allow;无匹配且保守 sandbox → ask。阈值落在 yield_time_ms、max_output_tokens、additional_properties=false、Bash 子命令数 cap(bashPermissions.ts)。

前者像值班经理现场拍板,后者像公司先写好制度,再看这单是否合规。

沙箱、审批、权限不是外挂安全层。任意命令直跑用户目录等于把风险转给用户;能显式表达 sandbox mode、network、approval policy、额外目录、state DB、MCP tool approvals,才是能力与边界一起交付。Codex 把 turn 级条件放在 thread.ts 当线程语义;Claude Code 把边界压进执行现场(工具、中断、permission hook、Bash 限制)。一个边做边看守,一个先给出执行契约再开始做。

两边都能接 MCP 和外部能力。Claude Code 用 skill / hook / permission / 工具 prompt 组成场景化治理链,本地规则跟进主循环。Codex 把 MCP resource、dynamic tool、tool discovery 一律收进 schema 化工具对象。生态变大后,扩展是否服从总规则才是压舱石。谁先想清楚边界外移,谁的扩展体系就不会变成杂物间。

关键洞察 ​

Claude Code 的工具治理更强地依赖运行时编排与现场审批,Codex 的工具治理更强地依赖 schema、参数化权限和独立策略系统。前者像经验丰富的工头,后者像有制度处和法务部的施工单位。只看「都能跑命令」,会错过真正重要的差异:谁在工具动手之前拥有最终秩序。

个人思考 ​

Book 1 第 4 章已经说「越危险的工具,越不能按普通能力对待」。这一章把那句话拆成两种执法权:现场拍板 vs 政策语言。自己做 agent 时最容易偷的就是把审批写成 if tool == bash: ask。那既不是 Claude Code 的调度账本,也不是 Codex 的独立 crate,只是把风险暂时推给用户。MCP 一多,这条偷懒会先爆。

相关 ​

Copyright © 2026 openalon. All rights reserved.