Skill-as-API:面向智能体软件工程的机密多智能体协作协议
Skill-as-API: Confidential Multi-Agent Coordination for Agentic Software Engineering
Skill-as-API把skill正文留在所有者进程;代码质量智能体上Table 2的10/10返回值未见系统提示词。
Table 1:honest-but-curious 与 adversarial caller 为 in(读 schema、发输入,OWASP 注入)。
- 跨组织编程智能体互相调用时,协调通道可能泄露 skill 的代码和系统提示词。MCP 与 A2A 不传实现,但仍公开描述和类型化 schema,也不能隐藏 skill 是否存在。内容过滤发生在模型已经决定输出敏感文本之后。
- Skill-as-API 让 body 以闭包留在所有者进程。线上视图只有名称、描述、路由提示、版本、类型化 schema、最低信任层级和 16 字节哈希。四层做信任门控、结束后降权、隐藏与不存在技能同一错误,以及不把输入拼进系统提示词。
- 三智能体经 XMTP 评审 PR。code_review 约 1200 字符清单与发现日志零重叠。Table 2 上 10/10 未见系统提示词;作者称不是上界。OKR 后 INTERNAL 降到 KNOWN。热重连 1.8–2.9 秒(N=30,两洲际 XMTP)。
- §6 列出跨步转发未清洗、返回值中的主动泄密、隐藏与执行的时序差、信任只按对等方、合谋与 schema 推断未被消除。案例未写 LLM 名称;Table 2 是 10 条预设注入。失败计数器按 §3.6 只在内存里。
- 威胁模型
- Table 1:honest-but-curious 与 adversarial caller 为 in(读 schema、发输入,OWASP 注入)。保护 callee 代码与系统提示词。colluding callees、schema-inference 为 partial。OS/物理攻击与调用方 LLM 劫持为 out。
- 基准
- three-agent PR review over XMTPOWASP-style injection classes (Table 2)
- 指标
- Absorbedhot-reconnect latencycold-start latencytrust-tier transition
Skill-as-API 是一种协议层协调方案,让 AI 编程智能体在互相调用技能时只公开技能名称、描述、类型化输入/输出 schema 和信任层级,技能本体以闭包形式留在所有者进程内、永不跨网络传输。该协议通过四层机制实现访问控制,并从结构上收窄提示注入面,而非依赖内容过滤。作者在 XMTP 上给出开源 Python 实现,跨洲热重连延迟为 1.8-2.9 s,并以三个智能体协作完成 pull-request 审查为案例,验证各方可保留其专有分析提示词的所有权。
深度解读
这篇论文试图解决什么问题?
跨组织协作会泄露 skill 代码与系统提示词,Skill-as-API 把 body 留在所有者进程。
跨组织协作时,协调通道会泄露被调用 skill 的代码与系统提示词。
- 场景: 作者把 SE 3.0 写成人类编排跨组织自主智能体,例如调用封装漏洞模式库的安全扫描智能体。作者认为协作通道本身是负债。
- 现有缺口: MCP 与 A2A 不传输实现代码,但仍向每个对等方公开名称、描述和类型化 schema,不能隐藏 skill 是否存在,也不能把封装的系统提示词挡在发现面之外。作者转述 PrivacyChecker 在其报告设置下残留约 7–8%,且干预发生在模型已决定输出敏感内容之后。
- 作者的归纳: T1 与 T2 都指向 skill body,T3 扩大能尝试提取的对等方。作者写:除加密信道和事后过滤之外,还要控制可见内容、谁可见和可见多久。
- 本文做法: Skill-as-API 的公开视图不含 body;代码与系统提示词在注册时被闭包捕获,留在所有者进程。四层为信任档、自动降权、skill 隐藏和函数边界。作者称其定位是补充 MCP 与 A2A。
- 威胁模型:
- 目标: 经通道取得代码或系统提示词,或枚举命名空间。统计克隆被作者放在范围外。
- Table 1: honest-but-curious caller 与 adversarial caller(另加 OWASP 注入载荷)为 in;colluding callees 与 schema-inference attacker 为 partial;OS/物理攻击与调用方 LLM 被劫持为 out。
- 假设: 作者假定所有者机器未被攻破;若被攻破,作者写没有协议能保护 body。协议不保护调用方自己的 LLM。
- 系统: 跨组织、短暂协作的 SE 智能体。作者称 partial 两类只被降低,并未消除(§6 L4–L5)。
有哪些相关研究?
作者把本文放在 ABI 层,与加密一切、IAM 门控和内容过滤并列,并称可以叠加。
智能体隐私策略
- AgentCrypt(Karthikeyan 等, 2026):用 HE/MPC 加密智能体间流量。作者称这类技术的通用开销是 2–3 个数量级。
- A2A:用 IAM 限制谁可以通信,发现时仍公开 schema 与描述。
- PrivacyChecker(Wang 等, 2025):在推理时做内容过滤。作者转述其报告设置下约 7–8% 残留。
协调协议
- MCP(论文引 Li 与 Gao, 2025):把智能体接到工具服务器,并传输描述与 schema。
- AgentNet(Yang 等, 2025):做去中心化协调。作者称其不处理 skill-IP 保护。
软件工程智能体
- SWE-agent(Yang 等, 2024)、OpenHands(Wang 等, 2024)与 Copilot Workspace:作者称这些系统可以自主处理 issue、评审 PR 并生成补丁,并假定单智能体或全信任的多智能体环境。
安全与能力系统
- ARGUS(Weng 等, 2026)训练内容层注入判别器;MCPTox(Wang 等, 2025)编目 MCP 攻击面。作者称本文在协议层收窄提示词提取面。
- Capsicum(Watson 等, 2010)在语言和 OS 边界限制可触及资源。作者称 Skill-as-API 把同一直觉用到智能体 ABI。
- Agent Skills for LLMs(Xu 与 Yan, 2026)给出生命周期防御模型。作者在 §2.1 引用其调查:约四分之一 skill 带有可利用的安全风险。
基线
- Table 3 以 MCP、A2A、AgentCrypt 为对照,比较代码是否上线、描述/schema、系统提示词机密性、存在性隐藏、信任寿命、注入防御和开销。论文未把该表对应到某个任务数据集。
作者将 Skill-as-API 称为 ABI 层的第四种策略,改变线上有什么。作者称四类做法正交:本协议去掉过滤器碰不到的暴露路径,过滤器处理协议约束不到的模型行为;加密和 IAM 仍可叠加。作者称相对 TEE enclave,选择 ABI 是为了可移植性、零基础设施成本,且不把 body 绑到硬件厂商。
论文如何解决这个问题?
公开视图不含 body;四层管信任档、降权、skill 隐藏和函数边界。
Skill-as-API 用公开视图把 body 挡在线路之外,再用四层决定谁能调用、权限如何到期、输入能否碰到系统提示词。作者列出 G1 代码与提示词不上线,G2 隐藏、禁止与不存在返回同一错误,G3 一次协作的权限会衰减,G4 调用方输入不进入系统提示词,G5 热重连维持在低个位数秒。
抽象与不变量
skill 为元组 S = (name, d, w, v, σ_in, σ_out, t_min, B)。d 是描述,w 是自然语言路由提示,v 是版本,σ 是类型化 schema,t_min 是最低信任层级,B = (c, p) 是代码与系统提示词,只存在于所有者进程。
公开视图为 view(S)=(name, d, w, v, σin, σout, tmin, h)。h 是 SHA256(name ∥ v ∥ σ_in ∥ σ_out ∥ t_min) 的前 16 字节,用于快速重连。调用为 call(S, x)=c(filter(x, σin)),filter 丢掉不在 σ_in 中的键。p 在注册时被 c 闭包捕获,不是参数,输入路径到不了它。不变量是 B 不属于 view(S)。
信任档与自动降级
- 四档: UNTRUSTED=0、KNOWN=1、INTERNAL=2、PRIVILEGED=3。调用要求对等方层级 t ≥ S.t_min。
- 消息门控: ping 与 trust_request 的最低档为 UNTRUSTED;discover 为 KNOWN;collab_request 为 INTERNAL;未知类型默认 PRIVILEGED,即 deny-by-default。
- Algorithm 1: 失败则连续计数加 1,满 3 次降一档并把计数清零,下限为 0;成功则清零。okr_done 时降一档,下限为 KNOWN。作者称之为 throw-away trust:留下的是以后再提升的证据,不是常设权限。
隐藏与函数边界
- Skill hiding: 隐藏、被禁止与不存在的 skill 返回同一错误字符串。所有者日志可以区分,该区分不上线,对应 G2。作者指出隐藏技能与已执行技能的时序差仍是侧信道。
- 函数边界: 调用方输入只以 schema 过滤后的具名 kwargs 到达,参考执行器只把它们绑定到 user turn,不拼进 p。作者分开两种性质:结构上 p 不上线,输入也不是 system-role 参数;行为上,模型仍可能在 user turn 中背诵 p。作者把后者标为 L2,称不消除,§4 只作示例性检查。
- 保护对象: 该层只保护被调用方。返回值若再送入调用方自己的 LLM,该栈仍面对普通注入。
实现与信息流
- 代码形态: Python 3.10+。贡献 C2 写除标准库外无 Python 侧依赖;§3.6 写运行时还有可选的 LLM 供应商 SDK。传输为 Node.js sidecar 上的 XMTP v3(MLS),Python 经本机 HTTP/SSE 接桥,密码实现不在 Python TCB 内。h 同时作为重连缓存键。
- §3.6 写明: Algorithm 1 的失败计数只在内存,重启即清零;层级变化用临时文件、fsync 与 os.replace 写入 trust.json。版本 v 用字符串精确相等,不做语义范围匹配。
- Figure 1: MCP/A2A 一侧的文字列出 schema、工具或 skill 描述、任务消息、带提示词的消息和对话上下文,远程侧写这些内容可能被暴露或推断,并列出 System Prompt 与 Internal Assets。Skill-as-API 一侧列出 Name、Description、When-to-use、Input/Output Schema、Minimum Trust Tier、Version、Schema Hash;远程侧写只接收 schema 视图、只发送输入、只接收输出,以及 Cannot Access Code or Prompt。图注称 body 留在所有者进程。
论文做了哪些实验?
三智能体 PR 评审:Table 2 为 10/10,热重连 1.8–2.9 秒(N=30)。
实验设置
- 对象: 三个独立进程经实时 XMTP 做一次 PR 评审:编排器、代码质量智能体(清单写成系统提示词)、安全智能体(模式库提示词)。两名专家的 t_min 都是 1(KNOWN)。论文未说明 LLM 名称。
- G1: 记录编排器侧全部 XMTP 消息,核对是否与被调用方 system_prompt 字符串重叠。文中写出的 code_review 输入为 diff: str,输出为 findings: list[str]。
- G4: 10 条输入覆盖 Table 2 的八类 OWASP-style 注入,每条前接一段 PR diff,只发给代码质量智能体。Absorbed 指系统提示词不出现在返回值中且输出 schema 保持;同时看返回字段里有无逐字或改写的系统提示词。论文未写评审模型、阈值或人工一致性。
- G3: 同一次运行中先把两名专家升到 INTERNAL,再在 OKR 完成时检查 Algorithm 1 第 10 行;另在测试对等方上检查 PRIVILEGED→INTERNAL。
- 时延: 热重连是已连接对等方的第二次及以后调用,N=30;两个洲际 XMTP 中继、commodity Linux、100 Mbps。冷启动另报。全部计时含密钥棘轮。
- 对照: Table 3 把 MCP、A2A、AgentCrypt 与 Skill-as-API 做定性对照,没有同一任务上的数值基线。
主结果
表格较宽,可左右滑动
项目 条件 结果 出处 schema 视图 code_review 发现之后 只有 name、description 与输入/输出 schema;与约 1,200 字符清单零重叠 §4 注入吸收 code-quality agent,八类,N=10 10/10 Table 2 OKR 降权 两名专家 INTERNAL→KNOWN §4 降权后再调用 INTERNAL 层 skill 被拒绝,须重新请求提升 §4 热重连 N=30,洲际 XMTP,100 Mbps 1.8–2.9 s §4 冷启动 首次建立信道 30–60 s §4 - 作者把 10/10 写成 illustrative spot-check:N=10 的零泄露不能紧致界定残留率。Absorbed 把“输入不拼进 p”和“模型没有背诵 p”合在一起,后者按 L2 不在声称范围内。作者在 §4 写,后续要把二者分开量化,并加入把输入拼进提示词的对照技能。
- 作者称 INTERNAL→KNOWN 是测到的降档,不是停在下限上的空操作。PRIVILEGED→INTERNAL 发生在同一运行的测试对等方上。作者据此称一次 PR 评审不会变成永久技能通道。
- 作者称编排器看到的是两名专家的 schema 而不是提示词;写出零重叠核对的是 code_review 及其约 1,200 字符清单。摘要与 C3 写案例展示 skill hiding;§4 的演练清单是 G1、G4、G3,正文没有隐藏技能与不存在技能的返回比对。
协议定性对照
- Table 3 的记号: ✓ 为结构性保护,✗ 为无或暴露,app 为留给应用,enc 为经由加密。
- 分项: 实现代码上线为 none、none、enc、none (closure)。描述/schema 为 public、public、enc、public。系统提示词机密性为 app、app、enc、✓ (closure)。存在性隐藏为 ✗、✗、✗、✓。信任寿命为 none、IAM、PKI、4-tier + decay。注入防御为 app、app、n/a、ABI structural。开销为 low、low、high、low (XMTP)。顺序均为 MCP、A2A、AgentCrypt、Skill-as-API。
- 作者的用法: 这是结构对照。论文没有在同一负载上测量开销。Figure 1 的图注称 MCP/A2A 暴露工具描述、schema 与提示词上下文,Skill-as-API 只暴露 schema 视图。
案例中的跨步转发
- 观察: 编排器把代码质量智能体的输出当作上下文传给安全智能体,中间没有清洗。作者称恶意的代码质量智能体可以在响应中放入有毒内容,并在 §6 记为 L1。论文未报告这条路径的成功率。
其他消融与分析
- Table 2 各类分母:direct instruction override 2/2,role reversal 1/1,markdown/fence escape 1/1,prompt-leak request 2/2,base64 wrapper 1/1,multilingual paraphrase 1/1,indirect via comment 1/1,recursive self-call 1/1。
- Algorithm 1:连续 3 次失败降一档、下限 0;OKR 完成降一档、下限 KNOWN。论文未报告 3 次失败这条路径的运行记录。
- §3.6:失败计数只在内存并随重启清零;层级写入 trust.json;版本比较为精确字符串相等。
- §4:两名专家注册时 t_min=1,评审中升到 INTERNAL,OKR 后回到 KNOWN。
- 冷启动 30–60 s,作者称主要由 XMTP MLS 建组造成;热重连与冷启动都含密钥棘轮。
有什么可以进一步探索的点?
作者在 §6 列出跨步投毒、行为层泄露、时序侧信道、按 peer 的信任和合谋推断。
作者指出的局限与后续方向
- L1: 智能体 A 的输出未经过滤就转给 B,即跨步输入投毒,协议没有处理;编排器层清洗是后续工作(§6)。
- L2: 被调用 LLM 在返回值中主动发出敏感内容,作者称与 Skill-as-API 正交,仍属于内容层过滤器的范围(§6)。
- L3: 隐藏技能与已执行技能之间的时序侧信道仍在;作者计划使用随机延迟(§6)。
- L4: 信任按对等方,不按 skill;更细粒度 ACL 是后续工作(§6)。
- L5: colluding callees 与 schema-inference 探测只被 schema-only 视图缓解,没有消除;随机输出扰动和限速发现是后续工作(§6)。
实验覆盖范围
- 案例是 3 个进程的 1 次 PR 评审,两名专家 t_min=1(§4)。论文未报告所用 LLM。
- 注入检查是代码质量智能体上的 10 条、八类各 1 或 2 条(Table 2)。作者在 §4 称该结果不能紧致界定残留率,且没有把结构吸收与行为上的不背诵分开测量。论文未报告重复次数、评审模型或与人工的一致性。
- 热重连样本为 N=30,主机为 commodity Linux、100 Mbps、两个洲际 XMTP 中继;冷启动写为 30–60 s,计时含密钥棘轮(§4)。
- 信任演练包含两名专家的 INTERNAL→KNOWN,以及测试对等方的 PRIVILEGED→INTERNAL 和随后的拒绝(§4)。论文未报告连续 3 次失败降级的运行记录。
- Table 3 是定性对照。§2.1 将统计克隆标为范围外,理由是它是任何可调用 skill 的根本限制。§6 称合谋与 schema 推断只被缓解;论文未报告这两类的定量结果。§3.6 写明失败计数器只在内存、版本用精确字符串相等。
总结一下论文的主要内容
协议把 skill 正文留在所有者侧,四层限制发现内容、权限期限和注入拼接。
Skill-as-API 是面向智能体软件工程的协调协议,用来在跨组织调用时把 skill 的代码和系统提示词留在所有者进程。
作者针对三条威胁:经通道或命名空间抽取专有方法,用注入让被调用模型输出系统提示词,以及协作结束后权限继续保留。线上只放名称、描述、路由提示、版本、类型化 schema、最低信任层级和 16 字节哈希;body 在注册时被闭包捕获。信任分四档,连续失败和 OKR 完成都会降档;隐藏技能与不存在技能共用同一错误;输入只进入 user turn 的 kwargs,不拼进系统提示词。参考实现是 Python 包加 XMTP v3 的 Node.js sidecar。
三个进程的 PR 评审中,code_review 的发现消息与约 1,200 字符清单没有字符串重叠。Table 2 里,代码质量智能体上 10/10 条注入的返回值中没有系统提示词,输出 schema 仍在;作者称这不是残留率的界。OKR 结束后两名专家从 INTERNAL 降到 KNOWN,再调用 INTERNAL 技能会被拒绝。已连接对等方的热重连为 1.8–2.9 秒(N=30,洲际 XMTP,100 Mbps),冷启动为 30–60 秒。
作者的结论是:该协议补在 MCP 与 A2A 旁边,使协作中的智能体仍各自持有工程方法。跨步投毒、模型在返回值中主动泄密、时序侧信道、按 skill 的授权,以及合谋和 schema 推断的残留,作者写在 §6。