过去使用AI编程,开发者之间的差距主要体现在谁更会写Prompt。但Prompt很难共享,也很难长期维护。一个开发者离开团队后,他积累的使用经验可能仍然留在个人聊天记录里。Skills正在改变这件事。

最近几天,ZCode在AI编程圈的热度一直不低。

7月3日,ZCode同一天连续发布了3.2.3、3.2.4和3.2.5三个版本。其中一项看起来并不“炸裂”的更新,反而更值得Java开发者关注:用户级Skills现在可以通过SSH同步到远程开发环境。

与此同时,Skills重新回到快捷菜单,ZCode还新增了专门用于讲解Skills、插件、MCP和AGENTS.md配置方式的内置Skill。

如果只看功能名称,这似乎只是一次配置体验优化。但把视线放到整个AI编程市场,就会发现Codex、Claude Code、Cursor和ZCode都在做同一件事:把开发者每天重复输入的流程和规范,变成Agent能够自动调用的Skills。

这意味着,AI编程正在从“谁更会写代码”,进入“谁能更稳定地执行团队流程”的阶段。

对于Java团队来说,这可能比模型再提升几个百分点更重要。

Java团队最浪费时间的,不是写代码,而是反复教AI规矩

现在让Agent生成一个Spring Boot接口已经不难了。

真正麻烦的是,每次开始任务前,都要重新告诉它一遍项目规范:

Controller不能直接调用Mapper。

金额必须使用BigDecimal。

数据库写操作要检查事务边界。

MQ消费者必须考虑幂等。

不能修改application-prod.yml。

不能为了让测试通过而删除断言。

修改完成后要运行对应模块的Maven测试。

这些内容,很多Java开发者每天都在不同会话里重复粘贴。

第一次使用Codex时写一遍,换到Claude Code再写一遍,打开Cursor又写一遍。换了一台电脑、进入远程服务器或者新建任务以后,还要继续重复。

这其实暴露了一个问题:团队已经开始使用Agent,但工程规范仍然停留在人的记忆和聊天记录里。

只要开发者忘记写一条,Agent就可能越过这条边界。

Skills的价值,就是把这些反复出现的步骤从临时提示词中拿出来,变成一份可以保存、共享和持续维护的工作手册。

以后开发者不必再输入一大段规范,只需要调用一个Skill:

$spring-boot-safe-change
      
 
      
修复order-service重复创建退款记录的问题。
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

Agent就应该自动按照团队规定的步骤分析、修改、测试和输出结果。

这才是Skills真正重要的地方。

Skill不是一段更长的Prompt

很多人第一次接触Skills,会把它理解成“保存起来的提示词”。

这种理解只说对了一部分。

一段普通提示词通常只服务当前任务,内容也容易比较随意。Skill则应该描述一套可重复执行的工程方法,包括什么时候使用、先做什么、禁止做什么、执行哪些验证,以及最后交付什么结果。

例如,一个面向Spring Boot代码修改的Skill,可以要求Agent先执行:

git status
      
git diff --stat
  • 1.
  • 2.
  • 3.

然后识别目标模块和调用链,在修改前输出计划;修改Java代码后运行:

mvn -pl order-service -am test
  • 1.

如果涉及Mapper XML,还要检查动态SQL、空集合、索引和分页风险;如果涉及DTO、枚举或公共接口,还要检查向后兼容。

最后必须输出:

根因
      
修改文件
      
执行命令
      
测试结果
      
潜在风险
      
需要人工确认的事项
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

这已经不是一句Prompt,而是一套小型交付流程。

AGENTS.md、Skill、MCP和Hook,分别解决什么问题?

现在AI编程工具里的概念越来越多,很多团队会把AGENTS.md、Skills、MCP和Hooks混在一起使用。

其实它们解决的问题并不相同。

AGENTS.md更适合保存长期稳定的项目事实和边界。例如项目有哪些模块、常用构建命令是什么、哪些目录不能修改、团队统一使用什么技术规范。

Skill更适合描述重复执行的流程。例如如何新增Spring Boot接口、如何审查一个PR、如何升级依赖、如何分析线上异常。

MCP负责连接外部工具和数据源,例如GitHub、Jira、数据库、浏览器、内部文档或者监控系统。

Hook则更像硬性门禁,用来阻止Agent执行明确禁止的动作。例如修改生产配置、执行危险删除命令,或者跳过必要测试。

可以简单理解为:

AGENTS.md:告诉Agent项目是什么
      
Skill:告诉Agent任务应该怎么做
      
MCP:告诉Agent可以调用什么
      
Hook:告诉Agent哪些事情绝对不能做
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

Java团队如果把这四层配置清楚,Agent的稳定性会比单纯依赖一段长提示词高很多。

为什么SSH同步Skills是一个重要信号?

现在越来越多开发任务不再只发生在开发者本机。

Java项目可能运行在远程Linux服务器,依赖内网Maven仓库、测试数据库、Redis、Docker和公司VPN。开发者在本机规划任务,却要让Agent进入远程环境执行构建和测试。

问题随之出现。

开发者电脑里已经配置好的Skill,远程环境并不知道。于是同一个任务在本地执行时遵守团队规范,切换到SSH环境后,Agent又开始重新猜测测试命令和项目边界。

ZCode这次增加用户级Skills的SSH同步,解决的正是这种环境断层。

它释放出的信号是:Skills正在从一个本地小功能,变成跟随开发者进入本地、远程和云端环境的基础配置。

不过,Java团队不能因此把所有规范都只放在个人目录里。

用户级Skill适合保存个人通用习惯,例如提交信息格式、日志分析步骤和常用检查清单。真正影响项目交付的团队Skill,仍然应该和代码一起进入Git仓库。

这样无论开发者使用哪台电脑、哪个Agent或哪个远程环境,都能拿到同一版本的执行规则。

一个可以直接落地的Spring Boot Skill

团队可以先从最常用的“安全修改Spring Boot代码”开始。

目录可以设计成:

spring-boot-safe-change/
      
├── SKILL.md
      
├── references/
      
│ └── java-review-checklist.md
      
└── scripts/
      
 └── verify-module.sh
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

其中SKILL.md可以这样写:

---
      
name: spring-boot-safe-change
      
description: 用于修改Spring Boot业务代码、修复Bug和新增接口。任务涉及Controller、Service、Mapper、DTO或测试时使用。
      
---
      
 
      
# Spring Boot安全修改流程
      
 
      
#
      
 
      
# 开始前
      
 
      
1. 检查git status,确认现有未提交修改。
      
2. 阅读AGENTS.md和目标模块说明。
      
3. 输出当前调用链、根因判断和最小修改方案。
      
4. 方案未明确前,不要直接大范围修改代码。
      
 
      
## 修改限制
      
 
      
- 不修改application-prod.yml。
      
- 不修改任务范围之外的模块。
      
- 不删除已有测试。
      
- 不降低已有参数校验和业务校验。
      
- 不新增未经确认的数据库字段。
      
 
      
## Java检查
      
 
      
- 检查事务边界和自调用问题。
      
- 检查BigDecimal精度和金额单位。
      
- 检查MQ幂等、重试和异常处理。
      
- 检查Redis与数据库一致性。
      
- 检查DTO、枚举和接口兼容性。
      
 
      
## 验证
      
 
      
运行目标模块测试:
      
 
      
mvn -pl <module> -am test
      
 
      
如果涉及Mapper XML,额外检查动态SQL、空集合、分页和索引风险。
      
 
      
## 输出
      
 
      
- 根因
      
- 修改文件
      
- 执行命令
      
- 测试结果
      
- 剩余风险
      
- 人工确认点
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.

这份Skill不依赖某个具体业务模块,可以先作为团队通用基线,再为订单、支付、库存和权限模块增加更细的Skill。

例如:

order-refund-review
      
mq-consumer-idempotency
      
mybatis-sql-audit
      
spring-boot-upgrade
      
security-sensitive-change
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

Agent遇到对应任务时,就不再完全依赖临时判断。

Skill里不要塞进所有项目知识

Skills虽然有价值,但也很容易被写成另一份巨大的文档。

有些团队会把架构说明、数据库表结构、代码规范、发布流程和所有历史问题全部放进一个Skill。结果每次调用时,Agent加载大量无关内容,不仅浪费上下文,还可能降低执行准确率。

更合理的原则是:一个Skill只解决一个稳定、重复的工作流程。

长期项目事实放入AGENTS.md。

大量背景资料放入references目录,需要时再读取。

确定性验证逻辑放入scripts目录,让Agent直接执行脚本。

高风险禁止规则交给Hook,不要只靠Skill提醒。

例如,“不得修改生产配置”如果只是写在Skill中,仍然属于软约束。真正重要的项目,可以再增加Hook,只要Agent尝试编辑application-prod.yml,就直接阻止。

Skill负责指导,Hook负责兜底。

Skills还需要测试,不能写完就默认有效

一个Skill存在,并不代表Agent一定会正确调用,也不代表调用以后一定按预期执行。

团队应该像测试代码一样测试Skills。

可以选择十个历史任务,其中包括接口新增、Bug修复、Mapper修改、MQ问题和依赖升级。先在没有Skill的情况下执行,再启用Skill执行,对比以下结果:

是否修改了无关文件
      
是否运行了正确测试
      
是否遗漏事务和幂等检查
      
是否触碰生产配置
      
输出是否完整
      
人工返工时间是否减少
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

如果Skill经常在不该触发时被调用,需要修改description;如果触发正确但执行不稳定,需要调整步骤或增加脚本。

Skill同样应该有负责人、有版本记录,也应该经过代码审查。

否则团队只是把不稳定的Prompt,换成了不稳定的Markdown文件。

Java团队应该先沉淀哪三个Skills?

第一类是代码修改Skill。

它负责统一计划、修改、测试和风险输出流程,适用于大部分普通Spring Boot开发任务。

第二类是PR审查Skill。

重点检查事务、接口兼容、MyBatis SQL、MQ幂等、缓存一致性、生产配置和测试覆盖。它可以让不同Agent使用同一套审查标准。

第三类是故障分析Skill。

要求Agent先读取日志、定位调用链、复现问题并收集证据,在根因明确前禁止随意修改代码。对于Spring Boot启动失败、Bean注入异常和线上接口报错特别有价值。

先把这三个高频流程稳定下来,比一次创建几十个Skill更实际。

AI编程下一步竞争的,不只是模型

Codex官方把Skill定义为可复用工作流,可以包含指令、资源和脚本;Claude Code同样通过SKILL.md加载工作手册,并允许按项目、个人和企业层级分发;Cursor把Skills作为开放标准的一部分,并和Rules、MCP、Hooks、Subagents一起纳入统一配置;ZCode则支持创建、导入外部Agent Skills,以及在SSH环境同步用户级Skills。[1][2][3][4]

这些变化说明,AI编程工具正在形成一套越来越相似的工程基础设施。

模型决定Agent能想多深。

工具决定Agent能做什么。

而Skills决定Agent是否按照团队的方法做事。

对于Java团队来说,真正有价值的资产,可能不再只是代码仓库和开发文档,还包括一套经过验证的Agent工作流程。

最后

过去使用AI编程,开发者之间的差距主要体现在谁更会写Prompt。

但Prompt很难共享,也很难长期维护。一个开发者离开团队后,他积累的使用经验可能仍然留在个人聊天记录里。

Skills正在改变这件事。

它可以把“这个项目应该怎么改”“修改后要跑什么测试”“哪些风险必须检查”变成仓库中的正式文件。新人可以复用,远程Agent可以同步,不同工具也可以围绕同一套方法执行任务。

这对Java团队尤其重要。

因为Java企业项目最有价值的知识,往往不是某一段代码,而是多年积累下来的事务、权限、数据库、消息和发布经验。

当这些经验开始被写进Skills,AI才不只是帮助团

队写代码。

它开始真正学习团队是怎样交付软件的。

文章来自:51CTO

Loading

作者 yinhua

发表回复