GitSkills:首个开源Agent技能全景数据集,380万份SKILL.md揭示大模型生态野蛮生长

GitSkills: A Dataset of Agent Skills on GitHub

论文原文 ↗ 论文发布 解读发布 解读:AI前沿分享

GitSkills:首个开源Agent技能全景数据集,380万份SKILL.md揭示大模型生态野蛮生长 论文图示

在软件工程三十多年的演进史中,无论是类库、API 还是配置文件,代码世界的核心逻辑始终建立在确定性之上:静态类型检查器验证参数,编译器确认语法,包管理器确保版本与依赖树的精确锁死。然而,大语言模型 Agent 的流行正在打破这套传统的秩序法则。

ArXiv URL:https://arxiv.org/abs/2608.10906v1

2025 年 10 月,Anthropic 正式推出了一套名为 Agent Skill 的开放规范。与以往高度结构化的配置或 SDK 不同,一个 Skill 本质上只是一个包含 $SKILL.md$ 文件的普通文件夹。它内部通过简单的 YAML Front Matter 声明名称与描述,主体部分则完全由自然语言写就的 Markdown 指导流程构成,偶尔附带几个脚本或参考文档。当模型面对开发者交付的任务时,它并非通过精确的符号调用去定位技能,而是在运行时以概率判别的方式,自行“决定”该任务是否与某份技能的描述相契合,随后将其动态载入上下文。

更奇特的是,这类软件资产完全不存在任何类似 npm 或 PyPI 的官方中心注册表,也没有对应的包管理器。开发者复用技能的方式,退化成了最为原始的跨仓库目录拷贝。就在这套极简规范提出短短 9 个月后,来自英国伦敦大学学院(UCL)、德国霍恩海姆大学与意大利卡利亚里大学的联合研究团队展开了一次全面地毯式普查。结果令人震惊:仅仅在 GitHub 的公开仓库中,就已经散落着数以百万计的 $SKILL.md$。

为了让软件工程界第一次能够用实证手段看清这个悄然成形的生态,研究团队构建并开源了 GitSkills。这是一个记录了 3,797,117 个 $SKILL.md$ 文件的超大规模数据集,覆盖来自 195,841 个独立账户的 282,200 个公开仓库。经过内容哈希去重后,数据集中依然包含高达 1,877,981 个独特的文本实体。这项研究不仅为学术界提供了观察新型提示词工程与 Agent 人类协作演化的第一手样本库,更将一个严峻的事实推向了聚光灯下:一种以自然语言为载体、以概率选择为调度逻辑、以文件夹拷贝为流通手段的新型“软件”,正在以一种脱离传统工程监管的野生姿态肆意蔓延。

绕过 API 黑盒:如何在 GitHub 捞出 380 万份被低估的文件

在软件仓库挖掘领域,获取全景数据向来充满工程挑战,而挖掘 Agent Skill 更是直接遭遇了平台检索机制的致命盲区。在标准规范中,Agent 工具通常以固定文件名 $SKILL.md$ 来识别技能,这为基于文件名的代码检索提供了天然抓手。然而,当研究团队使用 GitHub 官方的 Code Search API 进行基准检索时,官方接口返回的估算匹配总量仅有约 34.9 万个。如果仅仅依赖默认的单次查询,不仅数据量会被严重压缩,API 本身单次查询最多仅返回 1,000 条结果的硬性上限,也会把绝大多数资产彻底屏蔽在视野之外。

官方预估与真实世界存量之间存在着一个数量级的巨大鸿沟。为了击穿这层迷雾,研究人员设计了一套基于文件尺寸递归分治的挖掘管线。其核心逻辑在于:既然单次查询受限于 1,000 条上限且估算值极不准确,管线便将文件大小(File Size)作为切分维度的连续空间。一旦某个文件大小区间内的匹配数量超过 1,000 条,管线就自动将该尺寸区间对半拆解为更小的子区间,继续递归下探,直到每一个细分区间内的搜索结果都能被完整遍历拉取为止。

依靠这套只读数据采集管线,团队穿透了 GitHub REST API、GraphQL API 以及 raw content CDN,最终捞出的实际文件数量达到了 3,797,117 个,达到了官方最初预估数字的 10 倍以上。整套管线在设计上严格坚持了“采集与解释解耦”的原则。除了标准路径(例如 Claude Code 默认采用的 $.claude/skills/$)之外,检索程序还将那些文件名包含该词缀的变体、大小写异构以及早期出现的偶发文件一并收录入库,但为每一条记录打上精确的路径类别、文件名基准、YAML 元数据有效性以及首次提交时间戳等标签,留待下游研究者自行施加严密的过滤准则。

面对数百万个文件的清洗与组装,研究团队引入了精细的去重与代表性富集机制。所有采集到的文件首先以字节级的内容哈希值进行聚合分组。对于完全相同的哈希组,数据集中保留了其出现的每一个代码仓库、具体相对路径与归属关系,从而完整记录其流通轨迹;与此同时,管线在每一组相同内容中挑出一个代表性实体(优先选取存放在标准规范目录下的文件),对其展开深度富集。富集信息包括完整的 Markdown 正文、解析完成的 YAML 元数据、所在文件夹内伴随的其他同级文件与脚本清单,以及仓库的 Star 数量、主要编程语言和提交历史。整个最终数据集被打包为一个高度便携、自包含的单一 SQLite 数据库,并同步提供了分表的 Parquet 镜像。

当自然语言成为代码:概率运行时引发的范式转移

要理解 GitSkills 能够带来的研究价值,首先需要厘清 Agent Skill 与传统软件资产在根本属性上的分歧。在过去几十年的软件体系中,任何一个模块的载入与执行,依赖的都是白纸黑字的确定性:符号名匹配、动态链接库的导出表、或是依赖注入框架中的强类型注解。即便出现了语法错误或依赖缺失,编译器和运行时环境也会毫不留情地抛出致命错误阻断流程。

然而在 Anthropic 定义的这套体系中,规则完全变了。一个技能的核心在于其头部元数据中的 $name$ 和 $description$ 字段。当终端用户在对话框中给出一个复杂的工程需求时,底层模型会读取当前工作区中所有可用技能的描述信息,随后在内部完成一次隐式的语义匹配计算。如果模型在概率上“认为”当前任务符合某个技能的适用场景,就会把该技能的 Markdown 正文加载进提示词上下文,遵照其步骤逐步执行。

这种机制带来了一种近乎玄学的软件交互。这里没有任何形式的形式化验证器去确认模型是否选对了技能。如果开发者在 $description$ 中写下了一段模棱两可、边界不清的自然语言,模型可能在需要它时视而不见,导致原本应该生效的工作流完全旁路;反过来,如果提示词指导语存在逻辑漏洞或语意含糊,Agent 可能会以一种看似胸有成竹、实则漏洞百出的方式执行完全错误的脚本命令,并且全程不会抛出任何传统意义上的异常代码。这种静默失败的特性,使得传统软件分析工具在面对此类资产时几乎全面失灵。

从实证角度分析,开发者究竟在这些 Markdown 文本里写了些什么?是严密的自动化测试步骤,特定前端组件库的初始化骨架,还是关于特定代码库编码风格的自然语言规范?GitSkills 为自然语言代码化这一新兴领域提供了前所未有的显微镜。研究人员不仅可以分析不同时期被编入技能的领域知识分布,还能追踪这些文本在词汇多样性、句式结构与公式化程度上的演化。如果在数万个仓库之间,某些技能的自然语言指导语正在迅速收敛至一套近乎机械的标准模板,这便往往意味着一种全新的“提示词文体”正在形成,或者暗示着大量技能本身就是由生成式模型批量辅助生成的。

寄生在Git之上的分发链:五成重复率背后的幽灵网络

GitSkills 呈现给学界的第二个巨大冲击,在于其残酷揭示了当前大模型生态底层基础设施的极度匮乏。在现代软件工程中,任何一个模块或组件的复用,都会借助成熟的生态管线完成——Node.js 依托 npm,Python 依托 PyPI,Rust 依托 crates.io。这些平台通过语义化版本(SemVer)、哈希校验和全局命名空间,保障了下游依赖的追溯与安全更新。

然而,Agent Skill 迄今为止没有任何中心化的包管理设施。开发者如果发现了一个极好用的技能配置,最直接的获取方式不是一行命令拉取依赖,而是手动将其整个文件夹下载、克隆,然后直接粘贴到自己代码库的 $.claude/skills/$ 目录中。数据集中最震撼的一组数字直接佐证了这种原始复用方式的广泛存在:在采集到的近 380 万个文件中,经过内容哈希合并后的独立内容仅有约 188 万个。换句话说,整个生态中超过 50.5% 的文件,都是在字节级别分毫不差的纯粹克隆副本。

这种高度依赖物理拷贝的传播模式,使得技能在开源世界中的扩散轨迹呈现出一种独特的“代码克隆谱系”(Code Clone Genealogy)。基于 GitSkills 提供的全量仓库路径与去重哈希索引,研究人员可以第一次像流行病学家追踪病毒传播一样,清晰描绘出一个技能是如何从单个核心开源仓库、模板脚手架(Scaffolding Tools)或是社区精选列表(Awesome-lists),一路渗透进成千上万个独立开发者的私人或业务项目中。

更进一步,这种“零依赖管理”的原始状态衍生出了极为棘手的软件演化问题。传统代码克隆研究中经常出现的“不一致更新”(Inconsistent Changes),在技能文本中被进一步放大。当原作者修复了技能中关于某个终端命令的参数错误,或者根据大模型底层版本迭代调整了提示词措辞时,散落于全网数万个代码库中的克隆副本几乎注定与上游更新彻底脱节,变成永久停留在某个历史切片的软件僵尸。自然语言构成的资产是否也会经历软件工程中经典的“代码坏味道”与“概念漂移”?这成了软工度量学急需解答的课题。

潘多拉魔盒:伴随自然语言潜入的供应链安全危机

如果一个 $SKILL.md$ 文件仅仅承载静态的提示词,那么即使它陈旧或描述不准确,最坏的结果也不过是模型输出质量下降。然而,开放规范允许的范畴远不止于纯文本。在许多高阶任务中,技能文件夹内部允许附带可执行脚本、二进制辅助工具以及复杂的外部参考文件。当大模型阅读了 Markdown 中的指令后,它往往会被明确要求调用这些同级目录下的脚本去执行环境探测、代码打包或自动化部署。

正是在这一交互链条上,GitSkills 暴露出了一片巨大的安全真空地带。在传统开源软件中,针对第三方依赖的静态安全扫描、漏洞数据库同步(如 CVE)、签名验证机制已经构筑起相对完善的防线。但在 Agent 技能的语境下,成千上万的开发者在毫无安全审查的情况下,直接从论坛、推特或第三方非官方模板项目中把包含脚本的整个技能文件夹拷入本地。

伴随技能一同被打包分发的可执行脚本到底有多常见?在 GitSkills 关联的 $artifact_siblings$ 表中,记录了 720 多万个伴生在技能身旁的同级文件。这些伴生文件中隐藏着大量的 Shell 脚本、Python 自动化执行代码以及网络请求逻辑。这直接为恶意攻击者提供了一条隐蔽至极的投毒链路:攻击者完全可以伪造或克隆一个极具诱惑力的高频技能(例如“全自动前端构建与排错工具”),在自然语言指令中引导模型以 Agent 身份在用户终端环境中静默拉取远程不受信任的执行脚本,或者在伴生脚本中暗藏具有外发敏感环境变量、密钥信息的恶意代码。

更致命的是,由于大模型在执行提示词指令时天然带有主动纠错和动态调度能力,传统基于固定签名的端点安全防护(EDR)甚至很难区分“这是大模型在正常辅助人类进行工程构建”,还是“大模型正在被一份恶意的 $SKILL.md$ 挟持,对本地系统实施提权与窃密”。当跨仓库拷贝成为事实上的唯一分发方式,任何一个经过恶意篡改的分支版本,都会在缺乏中央校验的环境中迅速被二次、三次分发。GitSkills 完整记录的提交历史、首尾提交作者信息(经单向加密哈希脱敏处理但保留跨库唯一性)以及完整目录伴生树,使得对这种潜伏在自然语言背后的新型软件供应链攻击进行全网测绘成为可能。

重新定义软件资产:从GitSkills走向工程化成熟

回顾整个软件工程演进的历程,任何一项全新技术形态在诞生之初,几乎都会经历一段粗放、野蛮却极富生命力的民间探索期。上世纪末的早期网页脚本如此,十年前微服务架构刚刚兴起时的各色配置文件亦是如此。Anthropic 推出的 Agent Skill 规范,以其近乎极简的设计哲学迅速点燃了开发者社区的热情,在短短九个月内催生出近 400 万份文件、近 20 万开发者的庞大生态,其势头已经彻底宣告了:大语言模型技能正在成为一种不可逆的新型通用软件工件(Software Artifact)。

然而,繁荣的背面是规范化与工程化工具链的严重缺位。GitSkills 的出现,不仅是一份详尽的数据资产归档,更是给整个大模型基础设施研发领域敲响了一记警钟。一个缺乏中心注册表、缺乏依赖解析器、缺乏确定性契约测试、缺乏安全沙箱隔离的生态,无论其生长速度多么迅猛,都始终矗立在脆弱的沙滩之上。

学术界与工业界对 GitSkills 的消化,必将开启一系列极具现实意义的探索:如何为自然语言编写的意图指令建立起等价于类型系统的静态验证框架?如何构建起兼顾灵活性与安全签名的技能包管理器?又该如何训练专门的鉴别器,以防止 Agent 在执行概率匹配时被混淆指令所欺骗?这套凝结了 380 万份人机协同试验切片的数据集,已经将真实世界最底层的演化脉络呈现在了所有研究者面前。大模型主导的软件开发范式转变不再是实验室里的预言,它真实发生着,而对其进行严密工程化改造的战役,才刚刚打响。