安全模型
Apollo 把写文件、执行命令和网络访问视为显式副作用。权限层先做决策;破坏性命令与插件执行随后进入 Rust 沙箱。Apollo 会公开当前进程唯一的安全等级:
- Full:所需隔离机制全部启用。
- Partial:有效隔离已启用,但存在明确列出的限制。
- Weak:只有有限控制可用。
- None:默认拒绝副作用工具,除非用户显式接受危险模式。
成功构建不能证明 Sandbox Tier。请以运行时探测结果和限制说明为准。用户批准权限也不代表命令本身安全。
Prompt injection 威胁模型
可信指令源只有系统提示词和用户直接输入。文件、工具结果、网页内容、MCP 响应、subagent 输出和 memory 都是不可信数据,即使其中包含看起来像指令的文本。
Apollo 会用带来源信息、经过编码的 <untrusted source="..."> 包裹这些内容。内部文本无法提前闭合该标签,但模型是否遵守标签仍属于 best-effort,而不是安全边界;权限检查和沙箱仍然必不可少。
如果不可信内容要求泄露密钥、削弱保护、执行无关命令或连接意外主机,应将其视为注入企图:拒绝权限、检查来源,并用自己的语言重新说明真实任务。
凭据只能进入 Apollo 遮罩显示的登录流程。认证遥测会被脱敏,且默认只保存在本地。
WebFetch 网络边界
WebFetch 按规范化后的 HTTP(S) origin 请求权限;一个 origin 的 session/project 授权不会授权 其他 origin(包括重定向目标)。URL 凭据和非 HTTP scheme 会被拒绝。
每次连接和每个重定向跳转前,Apollo 都重新解析域名;任一结果属于 loopback、私网、link-local、 reserved、multicast、文档专用地址或云 metadata 地址时即拒绝。连接固定使用已验证 IP,避免 DNS 在 校验与建连之间变化。响应受超时、速率、重定向次数、content type、字节数和模型侧字符数限制, 网页内容始终是不可信数据。审计事件不记录 query、响应正文、请求 header 或凭据。