大家好,我是老鹿。
我有一个习惯,就是定期会去 Apple 开发者官网上逛一逛。
看看 Apple 有什么新能力,新特性提供给开发者了,尤其是每年 WWDC 期间。
老鹿本人,是一位专注于 macOS 系统下的数据安全“老师傅”,自然对 Apple 提供和迭代的数据安全和终端安全能力,会比较关注。
今年,我在 Apple 的 EndpointSecurity Framework 的开发者文档中,发现了一个新 API:
es_new_descendants_client
它的官方描述是:
创建一个新的端点安全(ES)客户端,将其作用范围限定为仅监控后代进程。
我当时就有一个疑问:
为什么要自己监控自己,限制自己。
后来我想明白了,这不就是给 AI Agent 量身定制的基础能力嘛。
这不就是 macOS 系统原生,系统级,可靠的 AI Agent 沙箱方案嘛。
于是,带着这个疑问,我开始了对这个 API 的调研,今天和大家做一个分享。
macOS 27 的 EndpointSecurity 框架已经出现一类新的原生能力:
由普通用户态进程创建,只约束自身后代进程树,并且可以对后代进程的敏感行为做运行时授权决策的es_new_descendants_client。
从系统安全抽象看,它不是传统意义上的完整容器或 App Sandbox,而是一种轻量级、动态、进程树级的授权控制边界。
这正好击中 AI Agent 时代最难处理的安全问题。
Agent 本身需要调用 shell、编译器、包管理器、浏览器自动化、文件系统和外部工具;但这些动作又可能被 prompt injection、恶意仓库、恶意日志、恶意网页或被污染的工具输出诱导。
静态沙箱太硬,纯应用层 wrapper 太软。descendants client 提供了一个新的中间层:由 Agent 宿主进程主动给自己将要启动的工具链设置内核参与的运行时边界。
这也意味着,macOS AI Agent 沙箱方案不必继续押注sandbox-exec、sandbox_init或自定义 SBPL profile 这类基于 Seatbelt 的“伪产品化沙箱”路线。
这里的“伪”不是说 Seatbelt 的内核隔离不存在,而是说 Apple 已经把公开 CLI/API 明确标为废弃,SBPL 也不是稳定、文档化、面向第三方产品的开发接口。
对 Agent 运行时来说,继续依赖它们会把架构建在 Apple 已经要求迁出的旧入口上。
需要把事实边界说清楚:
Apple 公开材料确认了es_new_descendants_client这一组系统能力,但尚未把它直接命名为 "AI Agent sandbox"。

macOS 27 SDK 和 Apple Developer Documentation 已经公开列出es_new_descendants_client,并且 SDK 头文件明确写出后代进程作用域、无需 root、无需 TCC、可延长 auth 事件 deadline 等关键约束。
本文的核心观点是基于这些官方事实得出的工程判断:macOS 已具备构建原生 AI Agent 沙箱的系统级基础。
过去的 macOS 应用安全模型主要围绕两个问题设计:
1. 应用能不能访问某类用户数据或硬件能力。 2. 系统级安全产品能不能观察和拦截全系统安全事件。
AI Agent 改变了问题形态。Agent 不是一个行为边界稳定的普通应用,它更像一个会临时生成执行计划的自动化主体:它可能读源码、写文件、执行脚本、调用git、运行测试、安装依赖、访问网络、启动浏览器,还可能把外部内容重新送回模型上下文。
风险不再只来自应用作者,也来自 Agent 在运行时读到的内容。
典型威胁包括:
• Prompt injection 诱导 Agent 执行破坏性命令,例如删除工作区外文件。 • 恶意 README、日志、网页或测试输出诱导 Agent 读取 ~/.ssh、~/.aws、浏览器 profile 等敏感目录。• 恶意依赖安装脚本在 Agent 授权范围内执行任意代码。 • Agent 将用户敏感内容上传到非预期域名。 • 工具链逃逸,例如通过子进程、脚本解释器、XPC 服务或 launchd 间接完成宿主策略不允许的动作。
这类问题的关键不是“应用是否可信”,而是“应用启动的后代进程在某一次任务里是否还应该被信任”。因此,理想的 Agent 沙箱应该具备几个特征:
• 只约束单个 Agent 会话和它启动的工具链,而不是全系统。 • 能在执行、打开文件、创建文件、重命名、删除、IPC 等敏感动作发生前做授权。 • 策略可以按工作区、任务、命令、路径、签名、用户确认动态变化。 • 部署摩擦低,不能要求每个 Agent 都以 root 或系统扩展形态运行。 • 高风险动作可以等待用户确认,而不是被传统 ESF deadline 逼迫快速放行或快速拒绝。
这正是 descendants client 的意义所在:它把 EndpointSecurity 从“全系统安全产品的高权限观察者”推进到了“进程主动约束自己后代行为”的方向。
Apple 官方 App Sandbox 文档将其定位为限制应用访问文件、网络连接和硬件能力的一种机制。它的价值很清楚:即便应用存在漏洞,也能降低攻击者滥用平台能力的范围。App Sandbox 也是 Mac App Store 分发的要求之一。
但 App Sandbox 的短板也同样明显:它主要是静态 entitlement 和容器化边界。对于 AI Agent 来说,很多合法任务必须跨越固定边界,比如读取用户指定项目、调用系统工具、运行构建脚本、访问临时网络端点。把 Agent 放进过硬的静态沙箱,容易让它失去可用性;把沙箱开得太大,又会让 prompt injection 获得同样大的权限。
sandbox-exec:已经废弃的伪产品化路线在 macOS 上谈沙箱,很容易绕到 Seatbelt、SBPL profile、sandbox-exec、sandbox_init这一套。它确实曾经提供过“给某个进程套一层 profile”的诱惑:看起来可以从外部启动一个命令,把文件、网络、系统服务能力都关进一个规则语言描述的边界里。
很多早期的命令行工具隔离、测试隔离、临时命令执行,都会自然想到这条路线。
但对 AI Agent 沙箱来说,这条路已经不能作为正式技术方案。Apple 官方材料给出的信号非常明确:
• sandbox-exec(1)man page 的名称就是“execute within a sandbox (DEPRECATED)”,描述里直接写明该命令已废弃,并要求希望 sandbox app 的开发者改用 App Sandbox。• sandbox_init(3)man page 同样写明sandbox_init和sandbox_free_error已废弃,并要求开发者采用 App Sandbox。• macOS 27 SDK 的 sandbox.h文件开头写明整个 header 已废弃,未来可能移除;sandbox_init标注为API_DEPRECATED("No longer supported", macos(10.5, 10.8))。• 同一个 SDK 的 sandbox_init(3)man page 对内置 profile 给出更强硬的约束:这些 profile 在使用 macOS SDK >= 27.0 构建时不得使用,选择这些 profile 的进程会在尝试时被杀掉。
因此,基于 Seatbelt 的“伪沙箱方案”问题不在于它没有内核强制力,而在于它不是 Apple 面向第三方产品化延续的公开接口。
它缺少稳定的第三方开发契约,规则语言不可作为正式产品 API 依赖,公开入口又已被 Apple 标记为废弃。
对 Agent 沙箱而言,这种路线最多只能作为历史背景或实验工具,不能再作为 macOS 原生 Agent 安全方案的主轴。
Apple 在 WWDC 2022 的 "What's new in Endpoint Security" 中回顾了 ESF 的定位:EndpointSecurity 是给 macOS 安全产品使用的 C API,服务于 anti-virus、EDR、DLP 等场景。
Apple 也说明 ESF 最初在 macOS Catalina 引入,用来替代 KAuth KPI、MAC Kernel Framework 和 OpenBSM audit trail 这类旧机制,从而减少第三方开发 kernel extension 的需求。
这条路线解决的是“安全产品如何观察系统”:
• 安全产品以 System Extension 形态安装。 • EndpointSecurity client 订阅系统事件。 • 对 auth 事件可以允许或拒绝。 • 对 notify 事件可以审计已发生行为。 • 传统 ES client 需要 entitlement、Full Disk Access/TCC,并且通常以高权限部署。
这对 EDR/DLP 很合适,但对 AI Agent 沙箱太重。Agent 需要的是“我约束我自己启动的工具链”,而不是“我成为全系统安全产品”。
Apple 的 NetworkExtension 文档把它定位为扩展系统核心网络能力。NEFilterDataProvider文档说明,过滤器以 flow 为单位接收应用打开的网络连接,并可选择 pass 或 block 网络数据。
这说明网络控制在 Apple 平台上有明确的官方路径。但它也进一步证明:EndpointSecurity descendants client 不应被误写成完整网络沙箱。除非 Apple 公开定义 ESF 网络事件并允许 descendants client 订阅,否则网络隔离仍应由 Network Extension、防火墙、代理或更高层策略承担。
macOS 27 SDK 给出了最关键证据。ESClient.h中新增了:
es_new_client_result_t es_new_descendants_client( es_client_t *_Nullable *_Nonnull client, es_handler_block_t _Nonnull handler);SDK 注释提供了五个决定性事实:
1. 这是一个只面向 descendant processes 的 ES client。 2. 调用进程本身只收到 notify 事件;后代进程收到 auth + notify 事件。 3. 覆盖范围包括创建后 fork 或 exec 出来的后代,递归生效。 4. 其他进程不可见。 5. 仍需要 Endpoint Security client entitlement,但不需要 root,也不需要 TCC approval。
这组约束非常不同于传统es_new_client。传统 client 的同一个头文件说明调用者需要com.apple.developer.endpoint-security.cliententitlement,并需要用户通过 TCC/Full Disk Access 授权;错误枚举里也有“缺 TCC”和“不是 root”的失败原因。macOS 27 的 descendants client 则把 root 与 TCC 这两个部署摩擦点从这个新入口上拿掉了。
这不是一个小改动,而是安全模型上的重新定位:
Apple 仍然要求 entitlement,因此这不是任意应用都能随便打开的监控能力;但一旦具备 entitlement,它不再必须作为全系统高权限观察者运行,而可以成为某个用户态宿主进程管理自己后代执行树的机制。
AI Agent 的危险动作通常不是宿主应用直接完成的,而是通过它启动的工具完成:
• shell 执行 rm、curl、python、node、bash。• 包管理器执行 postinstall 脚本。 • 测试框架启动子进程。 • 浏览器自动化启动浏览器或 helper。 • 编译器、链接器、代码生成器读写大量文件。
传统应用层 wrapper 只能拦住自己显式包装的命令。一旦脚本再启动脚本,或者工具链内部调用其他二进制,应用层策略就容易失明。
descendants client 的递归后代进程模型,正好覆盖这条执行树。
EndpointSecurity 的关键价值不只是观察,而是 auth 事件可以在动作发生前等待授权结果。
对于 Agent 沙箱,这意味着策略可以在危险动作落地前生效:
• 进程执行前评估二进制路径、签名、参数、工作目录。 • 文件打开前判定目标是否在工作区内、是否命中敏感路径。 • 文件创建、删除、重命名前判定是否越权。 • macOS 27 新增的 XPC/bootstrap 相关 auth 事件可以帮助观察和限制后代进程接触系统服务的边界。
这与“事后审计日志”不同。Agent 安全最需要的是在模型犯错、被注入或被工具链带偏时,仍有一个不依赖模型判断的执行前闸门。
传统 EndpointSecurity client 面临一个系统稳定性约束:auth 事件必须及时响应,否则会造成卡顿、超时甚至 client 被杀。ESF 过去服务的是全系统安全产品,因此不能允许任意 client 长时间卡住系统关键路径。
macOS 27 新增的es_set_deadline_min_milliseconds改变了 descendants client 的体验。
SDK 注释说明,deadline minimum 只适用于 descendants client。原因也很直接:descendants client 本来就可以直接杀掉或暂停自己的 child processes,并且系统 daemon 不会是 ES client 的 child,所以严格 deadline enforcement 没有传统场景那么必要。
SDK 还说明 minimum 可以高于系统默认值,从而实际延长 deadline。
这对 Agent 沙箱非常关键。很多高风险动作不能靠毫秒级策略自动决定,需要弹窗、CLI prompt、IDE UI 或企业策略服务确认。例如:
• “Agent 想读取 ~/.ssh/id_rsa,是否允许一次?”• “测试脚本想向未知域名发起连接,是否继续?” • “安装脚本想在工作区外写入 LaunchAgent,是否拒绝?”
没有可延长的 deadline,交互式授权很难成立;有了 deadline floor,Agent 的子进程可以等待人类或策略服务作出决定,而不会把系统级 daemon 拖下水。
macOS 27 SDK 还新增了 deadline miss mode:默认 kill client,也可以配置为 fail closed 或 fail open。
对 Agent 沙箱而言,合理默认应是 fail closed:策略引擎超时或崩溃时,宁可拒绝后代进程的敏感动作,也不悄悄放行。
这让沙箱不只是一组回调,而是一套可产品化的运行时策略执行机制:正常时精细决策,异常时有明确降级语义。
这一节只做一件事:把前面的判断和公开证据对齐,避免把工程推论写成 Apple 官方命名。
•EndpointSecurity 是 Apple 官方的系统事件监控与授权 API。公开依据是 Apple Developer Documentation: Endpoint Security,以及 WWDC 2022 "What's new in Endpoint Security"。可信度:高。 •ESF 最初服务于 AV/EDR/DLP,并替代旧内核/审计机制。WWDC 2022 transcript 明确回顾 Catalina 引入 ESF,替代 KAuth、MAC Kernel Framework、OpenBSM。可信度:高。 •传统 ES client 需要 entitlement 和 TCC/FDA。公开依据是 ESClient.h的es_new_client注释,以及 entitlement 官方文档。可信度:高。
• sandbox-exec是废弃方案。Applesandbox-exec(1)man page 的 name 与 description 均标注 DEPRECATED。可信度:高。• sandbox_init/sandbox.h是废弃方案。公开依据是 macOS 27 SDKsandbox.h:7-9、sandbox.h:46-49,以及sandbox_init(3)man page。可信度:高。•内置 Seatbelt profile 在 macOS SDK >= 27.0 下不得继续使用。macOS 27 SDK sandbox_init(3)man page 明确写明进程会在尝试 opt in 时被杀。可信度:高。
•macOS 27 新增 descendants client。Apple Developer Documentation 的 EndpointSecurity 函数索引列出 es_new_descendants_client,libEndpointSecurity.tbd导出_es_new_descendants_client。可信度:高。•descendants client 只监控调用进程及后代进程树。公开依据是 ESClient.h:747-769。可信度:高。•descendants client 不需要 root/TCC。公开依据是 ESClient.h:761-763。可信度:高。•descendants client 可设置 deadline minimum。公开依据是 ESClient.h:841-869。可信度:高。•deadline 可以被延长到系统默认值以上。公开依据是 ESClient.h:857-863。可信度:高。•macOS 27 新增 XPC/bootstrap auth/notify 事件。公开依据是 ESTypes.h:300-307。可信度:高。
•macOS 26.x SDK 有 reserved event slots。公开依据是 ESTypes.h:279-298。可信度:中,只能证明保留枚举存在,不能证明语义。•“AI Agent 沙箱”命名不是 Apple 官方说法。公开文档尚未直接使用该命名;本文将其作为 descendants client 在 Agent 威胁模型下的工程归纳。可信度:边界明确。
下面是基于 descendants client 的 Agent 运行时架构。重点不是替代所有隔离机制,而是把“后代进程运行时授权”作为核心层。
关键组件如下。
宿主进程在会话启动时创建 descendants client,然后只通过受控启动器创建工具子进程。宿主自身的 UI、模型调用、会话数据库等逻辑不应被同一个 client 的 auth 事件反向卡住。
优先订阅对 Agent 威胁模型最有价值的事件:
• AUTH_EXEC:执行二进制、脚本解释器、包管理器、shell。• 文件相关 auth 事件:打开、创建、删除、重命名等。 • 进程生命周期 notify:fork、exec、exit,用于还原进程树。 • XPC/bootstrap 相关事件:限制后代进程接触高风险服务。
策略不应只有“命令黑名单”,而应组合多维度信号:
• 路径:是否在工作区内,是否命中敏感目录,是否写入持久化位置。 • 命令:是否系统工具,是否解释器,参数是否危险。 • 签名:Team ID、signing ID、平台二进制、临时下载二进制。 • 任务上下文:用户是否授权本任务访问这个路径或执行这类动作。 • 数据流线索:最近是否读取过敏感文件,是否随后尝试外联。 • 用户策略:一次允许、会话允许、项目允许、永久拒绝。
deadline minimum 让交互式确认成为现实。UI 不应展示底层噪音,而要把事件翻译成可判断的问题:
• “这个测试脚本正在尝试删除工作区外的文件。” • “这个包安装脚本想执行未签名的 /tmp/install.sh。”• “这个进程想读取 SSH 私钥目录。”
Agent 安全不是只看实时阻断,也需要事后解释。每次 allow/deny/ask 都应记录:
• 进程链:父子关系、可执行路径、签名信息。 • 操作:事件类型、目标路径、参数摘要。 • 决策:命中的规则、用户选择、deadline 情况。 • 会话:对应任务、模型轮次、工具调用 ID。
这能让“模型为什么做了这个动作”和“系统为什么放行/拒绝”在事后对齐。

•Prompt injection 诱导破坏性命令:descendants client 可以通过 exec 与文件 auth 事件阻断;仍需策略理解参数和目标路径。 •越权读取敏感文件:可以在 open 前判定路径与任务授权;TCC/App Sandbox 仍可作为更底层保护。 •执行临时恶意脚本:可以在 exec 前评估来源、签名、路径;下载阶段和脚本内容分析还能继续增强。 •工作区外写入持久化文件:create/rename/unlink 等事件可阻断;需要维护持久化位置知识库。 •通过子进程链绕过 wrapper:递归 descendants 作用域天然覆盖;launchd/NSWorkspace 这类非后代启动方式仍需架构规避。
•XPC/服务访问逃逸:macOS 27 新增 XPC/bootstrap auth 事件提供新抓手;仍需要确认具体事件字段和策略粒度。 •网络数据外泄:不能仅凭公开 ESF 证据确认完整覆盖;需要 Network Extension、代理、防火墙、DNS 策略配合。 •CPU/内存/进程数耗尽:ESF 不是资源限制器;需要 setrlimit、launchd limits、job object 风格管理。•内存窃取或同用户进程注入:ESF 不是内存隔离机制;需要 App Sandbox、Hardened Runtime、进程隔离。
这张表的结论是:descendants client 能覆盖 Agent 最常见的“工具执行”和“文件越权”风险,但不能单独承担完整沙箱职责。它是轻量沙箱核心,不是所有隔离层的总和。

macOS 26.4 开始出现ES_EVENT_TYPE_RESERVED_5与ES_EVENT_TYPE_RESERVED_6,Apple Developer Documentation 的 EndpointSecurity 索引也列出了这两个 reserved symbol。它们常被推测可能对应网络连接事件,但公开文档尚未给出语义、字段结构或订阅行为。
但“reserved event 存在”和“它就是可用的网络连接 auth/notify 事件”之间还有证据缺口。公开 Apple 文档没有给出这两个枚举的语义、结构体字段或订阅行为。因此,文章中不能把“无需 root 的 Agent 网络防火墙”写成已确认能力。
更稳妥的表述是:
• Apple 官方证据确认 ESF 在 26.x/27.x 有 reserved event 扩展迹象。 • Apple 官方 Network Extension 文档确认网络 flow 的 pass/block 有正式框架路径。 • 如果未来 Apple 公开 ESF 网络 auth 事件,并且 descendants client 可订阅,那么 Agent 沙箱将获得更完整的单框架控制面。 • 在此之前,Agent 网络控制应走 Network Extension、代理、防火墙或应用层 egress policy。
这并不削弱 descendants client 的价值,反而让定位更清楚:它首先是进程树与文件/执行/IPC 行为控制,不是已经公开完成的网络沙箱。
•App Sandbox:优势是系统原生、强静态边界、适合 App Store;问题是动态策略弱,Agent 可用性受限;descendants client 可以提供运行时补充。 •System Extension + 传统 ES client:优势是全系统安全产品能力强;问题是 root/TCC/FDA/部署重,不适合每个 Agent;descendants client 更像它的轻量化分支。 •Network Extension:优势是正式网络控制路径;问题是专注网络,不处理文件/exec;适合与 descendants client 组合。
•Seatbelt / sandbox-exec/sandbox_init:优势是曾经看起来能给命令套 profile,规则表达力强;问题是 Apple 已明确废弃公开 CLI/API,SDK >= 27.0 内置 profile 不得使用,SBPL 不是稳定第三方产品接口;不应再作为 Agent 沙箱主方案。•shell wrapper:优势是简单、跨平台;问题是容易被子进程和解释器绕过;可被内核事件层替代。 •Docker/VM:优势是隔离强;问题是 macOS 文件/GUI/性能/集成成本高;适合高风险任务,不适合所有 Agent 交互。 • setrlimit/launchd limits:优势是资源控制明确;问题是不理解文件和执行语义;适合作为资源层补充。
descendants client 的独特位置是:它比 wrapper 更难绕过,比完整虚拟化更轻,比传统 ES client 更低摩擦,又比 App Sandbox 更动态;同时,它绕开了sandbox-exec/sandbox_init这条 Apple 已经明确标记为 deprecated 的旧路线。
目标是确认 macOS 27 beta 上 descendants client 的真实行为:
• 非 root 用户进程是否能创建 client。 • 无 Full Disk Access 时是否可用。 • 宿主进程是否只收到 notify。 • fork/exec 后代是否递归纳入 auth + notify。 • 工作区内外文件策略是否能稳定阻断。 • deadline minimum 是否能支撑交互式确认。 • client 崩溃、超时、fail closed 时后代进程表现如何。
实现一个会话级 supervisor:
• 创建 descendants client。 • 启动受控 shell。 • 限制工作区外读写。 • 禁止执行未签名临时二进制。 • 对敏感路径读取弹窗确认。 • 记录完整审计日志。
这个阶段的验收标准不是“拦截所有攻击”,而是证明 prompt injection 诱导的典型 shell/file 操作会被内核事件层拦住。
把策略和 Agent loop 对齐:
• 每个工具调用有 task ID。 • 每个子进程继承 task context。 • 每个 ES 事件能关联到模型轮次、工具调用和用户授权。 • 用户可以对项目、命令、路径建立持久策略。
企业版本可以把端侧策略接入集中管理:
• 敏感路径基线。 • 允许/拒绝命令列表。 • 允许网络域名或代理策略。 • 审计上报。 • 红队规则包。
这时 descendants client 不只是“开发者工具”,也可以成为 DLP/EDR 产品里专门面向 Agent 风险的一层。
如果严格使用 Apple 已公开证据,最准确的结论是:
macOS 27 的 EndpointSecurity 正在引入一种原生的、轻量级的、后代进程树作用域的运行时授权控制能力。
这组能力的关键点是:
• 它仍受 entitlement 管理,但不再要求 root 或 TCC。 • 它看不见全系统,只看见调用进程和后代。 • 它允许 descendants client 延长 auth 事件 deadline。 • 它把原来属于系统级安全产品的部分能力,下放成了应用/Agent 可以围绕自身执行树使用的安全边界。
这就是 AI Agent 沙箱需要的核心原语,也解释了为什么新方案不必再调用一个基于 Seatbelt profile 的伪沙箱。

Apple 已经把sandbox-exec、sandbox_init、sandbox.h这条公开路径标为 deprecated / no longer supported;macOS 27 SDK 甚至明确约束内置 profile 不得继续使用。
Agent 沙箱真正需要的不是把一个命令塞进废弃 profile,而是对 Agent 后代进程树持续、动态、可审计地做授权控制。
它不是完整沙箱,不隔离内存,不限制 CPU,不天然完成网络阻断,也不替代 App Sandbox 或 Network Extension。但它补上了最关键的一块:Agent 启动的工具链在做危险动作之前,可以被一个系统原生、内核参与、动态可编程的策略层拦住。
所以,这篇文章的标题可以大胆写成:
macOS 已经有了原生 AI Agent 沙箱的底座。
但正文必须保持工程严谨:
Apple 官方确认的是 descendants client 这一组能力;“AI Agent 沙箱”是这些能力在 Agent 威胁模型下的自然落点。
• Apple Developer Documentation: Endpoint Securityhttps://developer.apple.com/documentation/endpointsecurity • Apple Developer Documentation: Endpoint Security entitlementhttps://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.endpoint-security.client • Apple Developer Documentation: Protecting user data with App Sandboxhttps://developer.apple.com/documentation/security/protecting-user-data-with-app-sandbox • Apple Developer Documentation: System Extensionshttps://developer.apple.com/documentation/systemextensions • Apple Developer Documentation: Network Extensionhttps://developer.apple.com/documentation/networkextension • Apple Developer Documentation: NEFilterDataProviderhttps://developer.apple.com/documentation/networkextension/nefilterdataprovider • WWDC 2022: What's new in Endpoint Securityhttps://developer.apple.com/videos/play/wwdc2022/110345/ • Apple Developer Forums: Endpoint Security tag pagehttps://developer.apple.com/forums/tags/endpointsecurity • Apple Developer Forums thread 832204: es_new_descendants_clienttutorial questionhttps://developer.apple.com/forums/thread/832204
• ESClient.h:685-719:传统es_new_client需要 Endpoint Security entitlement,并需要 TCC/Full Disk Access;默认 mute set 用于避免 deadlock、hang 和 watchdog timeout。• ESClient.h:747-769:es_new_descendants_client的声明、macOS 27.0 可用性、后代进程作用域、无需 root、无需 TCC。• ESClient.h:841-869:es_set_deadline_min_milliseconds仅面向 descendants client,允许设置 deadline floor。• ESTypes.h:365-379:es_new_client_result_t包含 not entitled、not permitted、not privileged 等错误。• ESTypes.h:279-307:macOS 26.x reserved events,以及 macOS 27.0 新增 XPC/bootstrap 相关事件。• ESTypes.h:843-856:deadline miss mode 包含 kill、fail closed、fail open。• libEndpointSecurity.tbd:8-25:导出_es_new_descendants_client、deadline max/min/miss mode 等新符号。• /usr/share/man/man1/sandbox-exec.1:7-23:sandbox-exec被 Apple man page 标注为 DEPRECATED,并建议改用 App Sandbox。• MacOSX.sdk/usr/include/sandbox.h:7-9、sandbox.h:46-49:macOS 27 SDK 中sandbox.h已废弃,sandbox_init标注为No longer supported。• MacOSX.sdk/usr/share/man/man3/sandbox_init.3:48-55:sandbox_init/sandbox_free_error被标注为 DEPRECATED,并建议改用 App Sandbox。• MacOSX.sdk/usr/share/man/man3/sandbox_init.3:122-123:内置 profile 在 macOS SDK >= 27.0 下不得使用,进程尝试 opt in 会被杀。
• Apple 公开文档尚未直接将 es_new_descendants_client命名为 AI Agent 沙箱。• Apple Developer Forums 中已有关于 es_new_descendants_client用途的讨论;该论坛线索只能作为社区背景,不作为本文核心论据。• ES_EVENT_TYPE_RESERVED_5/6的网络语义不能仅凭 reserved 名称确认。
夜雨聆风