SkillsJars 是一个类似 WebJars 的项目,但专门用于 AI Agent Skills。它将 AI Agent Skills 打包成 JAR 文件,发布到 Maven Central,让开发者可以通过 Maven/Gradle 依赖的方式使用和管理 AI Skills。
什么是 SkillsJars
在 SkillsJars 出现之前,AI Agent Skills 面临以下问题:
- 分发困难:需要复制 SKILL.md 文件
- 版本管理:手动追踪变更
- 发现成本高:技能散落在各处
- 复用复杂:难以一键引入
SkillsJars 的解决方案很简单:把 Skills 打包成 JAR,通过 Maven Central 分发。
SkillsJars 结构
一个典型的 SkillsJars Maven 坐标:
<dependency> <groupId>com.skillsjars</groupId> <artifactId>myorg__myrepo__myskill</artifactId> <version>2026_02_13-1af0a2e</version></dependency>groupId:固定为com.skillsjarsartifactId:由 org、repo、skill 路径用__连接(小写,去除非字母数字字符)version:使用提交日期 + 短 commit hash(格式:YYYY_MM_DD-hash)
JAR 文件结构如下:
my-skill.jar└── META-INF/ └── skills/ └── myorg__myrepo__myskill/ ├── SKILL.md └── references/使用 SkillsJars
SkillsJars 是将 Agent 技能打包成 JAR 文件并发布在 Maven Central 上的版本。它们可以与 AI 代码助手、自定义 Agent 以及 Spring AI 等框架配合使用。将 Agent 技能作为打包依赖项进行管理,可以实现版本控制、作为传递依赖项进行分组,并避免文件复制粘贴。
AI 代码助手
大多数 AI 代码助手都期望将 Agent 技能以文件的形式存储在文件系统中。SkillsJars 构建插件会将技能从项目依赖项中提取到助手可以读取的目录中。
- 添加插件
Gradle:
plugins { id("com.skillsjars.gradle-plugin") version "0.0.2"}Maven:
<build> <plugins> <plugin> <groupId>com.skillsjars</groupId> <artifactId>maven-plugin</artifactId> <version>0.0.6</version> <dependencies> <!-- Your SkillsJars --> <dependency> <groupId>com.skillsjars</groupId> <artifactId>anthropics__skills__pdf</artifactId> <version>2026_02_25-3d59511</version> </dependency> </dependencies> </plugin> </plugins></build>- 添加你的 skillsjars 依赖
比如,添加 anthropics__skills__pdf
<dependency> <groupId>com.skillsjars</groupId> <artifactId>anthropics__skills__pdf</artifactId> <version>2026_02_25-3d59511</version></dependency>- 提取技能
运行提取命令,并指定 AI 助手期望的目录:
# Gradle./gradlew extractSkillsJars -Pdir=.cursor/skills
# Maven./mvnw skillsjars:extract -Ddir=.cursor/skills替换 .cursor/skills 为您的AI助手用于技能的路径。
提示: 您的项目 AGENTS.md 可以指示 AI 代理在处理项目之前运行提取命令。这样,技能始终可用,无需手动设置。
如果你不想使用 SkillsJars 构建插件提取技能,可以直接下载 SkillsJars 对应的jar包,然后手动解压。
# 1. 下载 SkillsJarswget https://repo1.maven.org/maven2/com/skillsjars/anthropics__skills__pdf/2026_02_25-3d59511/pdf-2026_02_25-3d59511.jar
# 2. 解压到 Cursor skills 目录unzip pdf-2026_02_25-3d59511.jar -d .cursor/skills/pdf/
# 3. 在 Cursor 中使用Spring AI
Spring AI Agent Utils 项目提供了一个 SkillsTool,可将 Agent 技能直接集成到 Spring AI Agent 中。SkillsJars 开箱即用——技能直接从类路径读取,无需任何提取步骤。
- 添加依赖项
将 Spring AI Agent Utils 库和所有 SkillsJar 依赖项添加到您的项目中:
<dependencies> <dependency> <groupId>org.springaicommunity</groupId> <artifactId>spring-ai-agent-utils</artifactId> <version>0.7.0</version> </dependency>
<dependency> <groupId>com.skillsjars</groupId> <artifactId>anthropics__skills__pdf</artifactId> <version>2026_02_25-3d59511</version> </dependency></dependencies>- 配置技能路径
在 中application.properties,指向 SkillsJars 存储技能的类路径位置:
agent.skills.paths=classpath:/META-INF/skills- 连接技能工具
使用 SkillsTool 构建器加载技能并将其添加到您的 ChatClient 中:
@Value("${agent.skills.paths}")List<Resource> skillPaths;
ChatClient chatClient = chatClientBuilder .defaultToolCallbacks( SkillsTool.builder().addSkillsResources(skillPaths).build() ) .build();如果不使用 SkillsTool 构建器,则需要编写代码读取技能目录,将技能描述添加到系统提示词。
@Configurationpublic class SkillsConfig {
@Bean public ChatClient chatClient(ChatClient.Builder builder) { List<String> skills = loadSkillsFromJars();
return builder .defaultSystem(system -> { system.append("你是一个有用的 AI 助手。\n"); for (String skill : skills) { system.append("\n").append(skill); } }) .build(); }
private List<String> loadSkillsFromJars() { List<String> skills = new ArrayList<>(); try { Resource[] resources = new PathMatchingResourcePatternResolver() .getResources("classpath:META-INF/skills/**/*.md");
for (Resource resource : resources) { String content = new String( resource.getInputStream().readAllBytes(), StandardCharsets.UTF_8 ); skills.add(content); } } catch (IOException e) { e.printStackTrace(); } return skills; }}示例项目
请参阅 skillsjars-example-spring-ai 仓库以获取完整的运行示例。
创建 SkillsJars
您可以将自己的代理技能打包成 SkillsJars,并通过 SkillsJars.com 发布到 Maven Central 。
- 创建技能目录
skills 在项目根目录下添加一个目录。每个子目录代表一项技能,并且必须包含一个符合 Agent Skills 规范 的 SKILL.md 标记文件。
skills/├── my-skill/│ ├── SKILL.md│ └── helpers.py└── another-skill/└── SKILL.md- SKILL.md frontmatter
每个文件都 SKILL.md 必须包含 YAML frontmatter,其中包含 name 和description。还可以选择包含allowed-tools (一个以空格分隔的预先批准的工具列表)和 license。
---name: my-skilldescription: A useful skillallowed-tools: Bash Read Editlicense: MIT---# My Skill...通过 SkillsJars.com 发布时,allowed-tools会自动将其作为名为 skillsjars.skill.<name>.allowed-tools 的属性存储在 POM 中,以便消费者无需提取 JAR 即可读取它。
如果你自己用 Maven 插件打包 SkillsJars,必须在 pom.xml 中添加匹配属性。插件会验证属性值是否匹配 SKILL.md,若有不匹配则失败。
<properties> <skillsjars.skill.my-skill.allowed-tools>Bash Read Edit</skillsjars.skill.my-skill.allowed-tools></properties>- 添加 Maven 插件
添加 SkillsJars Maven 插件,goal 是 package。
<build> <plugins> <plugin> <groupId>com.skillsjars</groupId> <artifactId>maven-plugin</artifactId> <version>0.0.6</version> <executions> <execution> <goals> <goal>package</goal> </goals> </execution> </executions> </plugin> </plugins></build>- 构建 Jar
插件在 mvn 包期间运行,并将技能放入你的 JAR 内的 META-INF/skills/。如果你的项目在 POM 中配置了 GitHub SCM,它会从 URL 里调用 org/repo 来实现。否则它会使用项目的 groupID。
- 发布到 Maven Central
把你的技能推送到公共的 GitHub 仓库,然后在主页使用“ 发布 SkillsJar”表单,部署到 Maven Central。
提示:自定义技能目录 默认情况下,插件会在
项目根查找技能/技能。你可以用skillsDir配置参数来自定义。
小结
SkillsJars 让 AI Agent Skills 可以像普通 Java 库一样管理:
- 标准化分发:通过 Maven Central 统一分发
- 版本管理:使用 Maven 版本控制机制
- 易于发现:在 skillsjars.com 浏览和搜索
- 生态集成:与 Spring AI 等框架无缝集成
想要为你的 AI Agent 添加新技能?直接在 pom.xml 中加个依赖就行。