SKCC:面向跨框架 LLM Agent 的可移植且安全的技能编译系统 SkCC: Portable and Secure Skill Compilation for Cross-Framework LLM Agents
借鉴编译器架构,提出四阶段流水线 SKCC,用强类型 IR 把 SKILL.md 升级为跨框架技能。
前置知识
SKILL.md 与 Progressive Disclosure
Anthropic 等社区推出的 Agent 技能规范,YAML frontmatter 描述元信息,Markdown body 承载指令。运行时分两步加载:启动时只载入约 50 token 的路由清单做语义匹配,命中后再按需取回完整内容,避免上下文爆炸。
SKCC 的输入和输出都围绕 SKILL.md,理解 progressive disclosure 才能明白为什么要在编译期生成 routing manifest、为什么 IR 要保留 schema/permission 等语义类别。
Prompt Format Sensitivity
同一段指令用 XML、JSON、YAML、Markdown 包装时,LLM 的遵循度和准确率差异巨大(论文引用 40% 的性能差异)。Claude 偏好 XML 语义分层,GPT 系列有 JSON format tax,YAML 在深度嵌套时解析最准。
这是 SKCC 提出四阶段编译器的核心动机之一——必须为不同模型挑选最合适的格式,所以 Target Emitter 需要按框架差异化输出。
经典编译器与 LLVM IR
传统编译器把源代码经词法/语法/语义分析生成 AST,再下降到强类型 IR(如 LLVM IR),最后由多个后端发射到不同硬件。中间表示把 m 个前端语言 × n 个目标架构的 $O(m \times n)$ 工作降到 $m + n$。
SKIR 完全借鉴这套分层思想,论文的 O(m×n)→O(m+n) 收益、IR 抽象、Security Optimizer 都直接对应到经典编译器的对应阶段。
Anti-Skill Injection(技能注入攻击)
类似 Prompt Injection 在 SKILL.md 上下文里埋伏危险模式,比如未限界的 HTTP 请求、不安全循环、破坏性 SQL、脆弱的 HTML 解析等。Snyk 审计发现 37% 社区技能存在漏洞。
SKCC 把安全检查从运行时搬到编译期,必须理解攻击向量才能看懂 Security Optimizer 的四条规则链和 tiered classification。
Pass@1 与 LLM-as-Judge Reward
SkillsBench 用 Docker + pytest 验证任务完成得 0/1 二元分,作为 Pass@1;再用 LLM 评委对完成度打连续分 ∈[0,1] 作为 reward,≥0.5 算通过。
论文主指标 Pass@1 和平均 reward 都来自这套体系,理解这两个指标才能复现 Figure 3 的对比图和 Appendix D 的统计检验。
研究动机
当前 LLM Agent 生态普遍把同一个 SKILL.md 当成 format-agnostic 的 Markdown 文本,同一份资源直接丢给 Claude Code、OpenAI Codex、Gemini CLI、Kimi CLI 等四类框架运行,但多项实证研究表明 prompt 格式选择会让同一模型表现波动高达 40%——Claude 偏好 XML 语义分层、GPT 系列有 JSON format tax、YAML 在深度嵌套数据下解析更准(51.9% vs 43.1%)。更严重的是安全层面:Snyk 对 3984 个社区技能的审计显示 37% 含有漏洞,包括许多已确认的恶意 payload,而 SKILL.md 规范建议的 negative boundary 在实际社区中几乎不被遵循。结果就是 m 个技能 × n 个框架要付出 $O(m \times n)$ 的人工改写代价,且每个改写版本都未经过系统化的安全验证。
本文的目标是论文目标是把 Agent 技能开发从「格式不敏感的静态 Markdown」升级为「可编译的工件」:作者希望复用经典编译器架构,让一份 SKILL.md 通过统一的编译流水线,自动产出针对每个框架最优格式的派生版本,并在编译期强制注入安全约束,从而把跨框架适配复杂度从 $O(m \times n)$ 降到 $O(m + n)$。具体来说,作者要让 Claude Code 跑同一份技能比 baseline 多拿约 12 个百分点的 Pass@1、Kimi CLI 多拿 13.5 个百分点,并把运行时 token 消耗降低 10–46%。
与已有工作不同的是,已有工作要么完全忽略格式敏感性(绝大多数 SKILL.md 消费者),要么靠昂贵的实例级搜索来适配格式(CFPO 迭代优化),要么像 SkVM 那样只做语义能力画像而不做 format-syntax 适配;同时安全层面的工作多停留在运行时 guardrail 或代码生成层面,没有人把编译期安全检查搬到 Agent 技能上。SKCC 的独特切入角度是把「格式敏感性」和「安全加固」这两件在传统编译器里已经成熟的事——前端解析 + IR 优化 + 多后端发射——整体平移到 Agent 技能领域,用 SKIR 这一个强类型中间表示同时承载语义信息和安全元数据,让「编译一次、安全加固一次、多框架共享」成为可能。
核心方法
SKCC 直觉上把「写一次 Markdown、跑多个框架」这件事类比为「写一次 C、跑多个 CPU」:既然 LLVM IR 解决了硬件异构,SKIR 就来解决 Agent 框架异构。技术上是一条四阶段流水线,SKILL.md 经 Syntax Parser 抽 AST、IR Builder 转成强类型 SKIR、Security Optimizer 注入安全约束、Target Emitter 多态输出框架原生格式;前三阶段对每个 skill 只跑一次,结果在所有 Emitter 间共享。
核心创新是把 Agent 技能从「带约定的纯文本」升级为「带类型与语义元数据的中间表示」。SKIR 不是 Markdown AST 的 1:1 复刻,而是把 heterogeneous 的内容归一化成 procedure / permission / schema / constraint 等 typed semantic categories,并记录嵌套深度等高层标记,让下游 Emitter 拿到这些信号后做格式化决策。和已有工作 SkVM 相比,SkVM 只做 semantic capability profiling 而不做 format-syntax 适配,SKCC 则在 IR 层就把 format-affecting 因素显式建模,并通过 Security Optimizer 在 IR 上挂载不可绕过的约束。
方法步骤详情
①Syntax Parser:YAML frontmatter 反序列化为 routing table,Markdown body 降为 deterministic AST 并分类 procedure / code / example。②IR Builder:AST 转强类型 SKIR,含 procedure / permission / schema / constraint 等语义类别,深度嵌套 schema 上挂 flag 供 Emitter 决策。③Security Optimizer:依次结构校验 → 权限审计 → Anti-Skill Injection(自动向 procedure 注入 safety constraint)→ Security Classification(low/medium/high/critical,critical 阻断部署)。④Target Emitter:polymorphic 接口渲染 framework-native artifact,按模型偏好选 XML / Markdown+YAML / 全 Markdown,并启用 token 优化。
技术新颖性
技术新颖性体现在三点。第一,把 classical compiler IR 范式显式平移到 Agent skill 领域,并给出 O(m×n)→O(m+n) 的形式化收益,这一点在已有 SkVM/CFPO/Liu et al. 中都没有做到。第二,security analysis 在 IR 层做到「format-agnostic 又 format-preserving」——分析只看 typed semantic structure 所以跨框架复用一次,注入的约束又嵌入 IR 所以在所有 Emitter 输出中都不会被丢掉,避开了 runtime guardrail 依赖 LLM 自律的不可靠性。第三,Anti-Skill Injection 给出 94.8% 的实际触发率(221/233 个技能),证明「把安全变成编译过程而非作者责任心」在工程上可行,并把 10/231 个危险技能在编译期 fail-fast 拦下。
实验结果
SkillsBench 89 任务 Pass@1:Claude Code 21.1%→33.3%(+12.2pp,相对 +58%)、Kimi CLI 35.1%→48.7%(+13.5pp)、Codex CLI 38.5%→42.3%(+3.8pp)、Gemini 22.2%→22.2%(持平,reward +0.019)。机制是把 reward=0 翻成 1(Claude 6/7、Kimi 13 个)。相对提升 +26.6%,超过 Liu et al. 的 +20.6% 和 SkVM 的 +15.3%。Ablation 用同一 Kimi 输出喂 kimi-k2.5 / glm-5.1 / deepseek-v4-flash,Cohen's d = +0.33 / -0.03 / -0.14,证明增益强依赖模型-格式匹配。安全:233 技能 221 个(94.8%)触发 Anti-Skill,HTTP 91.4% / Loop 44.6% / DB 33.5%。编译均值 8.93ms,token 净省 10–46%、执行时间降 23–43%。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| SkillsBench Claude Code Pass@1 | Pass Rate (%) | 33.3 | 21.1 | +12.2pp / +58% 相对 |
| SkillsBench Kimi CLI Pass@1 | Pass Rate (%) | 48.7 | 35.1 | +13.5pp / +38% 相对 |
| SkillsBench Codex CLI Pass@1 | Pass Rate (%) | 42.3 | 38.5 | +3.8pp / +10% 相对 |
| SkillsBench Gemini CLI Pass@1 | Pass Rate (%) | 22.2 | 22.2 | 持平 / reward +0.019 |
| Anti-Skill Injection 触发率 | Skills Triggered (%) | 94.8 (221/233) | 无 baseline | 覆盖绝大多数社区技能 |
| 运行时 Token 节省(Claude Code) | Tokens / Task | 6500 | 8400 | -23% |
| 编译延迟 | ms / skill | 8.93 (avg) / 22.89 (max) | 无 baseline | 全部 sub-10ms |
局限与改进
作者承认的限制主要有两点:①静态编译开销与运行时收益的权衡在某些场景下可能是负的——Ablation 里 DeepSeek-v4-flash 反而出现 Cohen's d = -0.14 的轻微负向效应,说明「为某模型最优的格式」在另一模型上可能拖累表现,作者自己也强调没有 one-size-fits-all optimal format。②Gemini CLI 上的 Pass@1 完全持平(22.2%→22.2%),只靠 reward +0.019 和 token 节省维持收益,凸显 SKCC 对 format-tolerant 模型的边际价值有限。第三方观察还可以指出:实验只覆盖四个框架和五个模型,结论的泛化性受限于 OpenHands/Harbor 容器化执行环境;10 个编译期拦截技能的案例分布未给出逐条归因;Anti-Skill 规则表是手工定义的,没有给出对抗性评估(恶意作者绕过规则的成本未量化);Skill repository 的多样性也有限(仅 4 个来源、233 个技能),跨更大社区的鲁棒性仍待验证。
独立分析的弱点
独立分析下三个可改进的弱点。第一,模型-格式耦合的脆弱性:ablation 显示同一份 Kimi 编译输出在 DeepSeek-v4-flash 上 d=-0.14,意味着目前的「编译一次跑多框架」仍然受目标模型的训练分布牵制,未来改进方向是让 Emitter 在发射时根据目标模型的少量样本探针动态选择格式,而不是离线决定。第二,Anti-Skill 规则集是手工定义的启发式,攻击者只要换一种危险模式就能绕过;改进方向是把规则表升级为可学习的 linter 或让 LLM 自己写规则再人工 review,并加上对抗性 red-team 评估。第三,10 个编译期拦截技能中只有聚合统计、没有逐条归因和补救路径,作者也没提供「如何修改 skill 使其通过编译」的工具链,改进方向是给出 fix-it 提示甚至自动重写建议,把 fail-fast 变成 fail-forward。
未来方向
作者明确提到的方向包括:扩展到更多 Agent 框架(任何实现 Emitter 接口的后端)、把 Security Optimizer 升级为可学习的安全模型、增加对 MCP 依赖图更深度的静态分析;并隐含指出 routing manifest 可以与 retrieval 层联合优化。基于成果可延伸的方向有三:①把 SKIR 暴露为可被 Agent 在线 query 的 schema,让 skill 自身成为一等公民参与 agent 间的协作;②在 IR 层引入 differential testing,跨 Emitter 输出做一致性校验以发现语义分歧;③把 O(m+n) 范式推广到工具/插件/prompt 模板等其他 Agent 资产,让整个 Agent 生态拥有统一的编译工具链;④结合 SkillsBench 之外的长 horizon 任务验证编译器收益是否随任务复杂度放大。
复现评估
复现性整体较好:核心编译器仓库已经在 2026 年 4 月 3 日开源(github.com/Nexa-Language/Skill-Compiler),项目主页 skcc.nexa-lang.com 提供文档,SkillsBench 89 个任务 + Harbor 容器化执行框架是公开基准,225 个社区技能来自 Anthropic-skills / ecc-skills / sentry-skills / ui-skill 四个公开 repo。复现难点主要在算力和 API 成本:实验需要调用 claude-opus-4-6、gpt-5.3-codex、gemini-2.5-pro、kimi-k2.5、glm-5.1、deepseek-v4-flash 等多个商业/前沿模型,加上 Harbor 容器编排,单轮 89 任务 × 4 框架 × 2 条件 ≈ 712 次完整 agent run 才能复现主结果;reward 评估还依赖一个未指明的 LLM judge,需要自行复现评分 prompt。编译期实验只需本地 Python 即可复现,是最低门槛的部分。
论文图表
左侧把 Agent 工作流拆成四层(Skill Authoring / SkCC Compilation / Agent Initialization / Routing & Matching / Execution),展示 SKILL.md 经 SkCC 编译后输出约 50 token 的 routing manifest;右侧用 m×n 的网格对比传统手工改写与 SKCC 的 m+n 单一 IR + 多 Emitter 结构,直观呈现 O(m×n) → O(m+n) 的复杂度收益。
这是理解全文动机和架构收益的入口图,读者第一眼就需要从这张图把握「为什么需要编译器」和「Emitter 多态接口如何把 m 和 n 解耦」。