
1. 从一条命令到一套后台这个 SKILL 到底在干什么第一次看到“给 Claude Code 装个 SKILL它开始自己写管理后台”这个说法我第一反应是又是标题党。管理后台这种东西字段、权限、菜单、增删改查、分页、导出哪一样不是要人肉堆出来的一个命令行里的 AI 助手凭什么能自己把这一整套东西写出来直到我自己把erupt-skill装进 Claude Code敲下第一句需求看着它开始生成实体类、配置菜单、挂上接口我才意识到这件事的底层逻辑变了。它不是在“帮你补全代码”而是在“按一套已经沉淀好的框架规范把业务需求翻译成可运行的工程结构”。这里的关键词有三个Claude Code、SKILL、Erupt。Claude Code 是 Anthropic 推出的命令行 AI 编程助手能读写文件、执行命令、理解整个项目上下文SKILL 是 Agent Skills 体系里的能力包本质是一份写给 AI 看的“操作手册 规范约束”Erupt 则是一个低代码后台管理框架用注解驱动的方式让开发者用极少的代码量搭出完整的管理后台。把这三者串起来erupt-skill干的事情就很清楚了它把 Erupt 框架的开发规范、注解用法、目录结构、常见坑位全部整理成 Claude Code 能读懂的技能文档。当你在项目里提出“给我做一个用户管理模块”时Claude Code 不再是凭空瞎编而是照着这份手册用 Erupt 的标准姿势把代码写出来。这件事对谁有用三类人最该关注。第一类是经常要写后台管理系统但厌倦重复劳动的后端开发者第二类是想用 AI 提效但苦于 AI 不懂自家框架规范的团队第三类是对 Agent Skills 这套机制好奇想搞清楚“SKILL 和普通提示词到底差在哪”的技术爱好者。我实测下来的感受是它确实能自己写管理后台但前提是你得先把 SKILL 装对、把项目结构摆正、把需求描述清楚。下面我把整个思路、安装、实操、踩坑全部拆开讲尽量让你看完就能复现。2. 为什么是 SKILL而不是一段长提示词2.1 SKILL 和普通提示词的本质区别很多人会问我直接把 Erupt 的文档粘贴到对话里让 Claude Code 照着写不就行了为什么要搞个 SKILL我一开始也这么想试过之后发现差别巨大。普通提示词是“一次性”的你这次粘贴了文档下次开新会话它又忘了。而且文档一长模型注意力会被稀释写到后面就开始自由发挥注解写错、包名写错、菜单配置漏掉各种问题。SKILL 不一样。它是一份持久化的、结构化的能力描述文件放在项目的特定目录里Claude Code 每次启动都会加载。它包含几个核心部分技能名称和描述、触发条件、具体的操作指令、参考文档、示例代码。模型在需要的时候会主动去读这份技能而不是靠你每次手动喂。打个比方普通提示词像是你临时给新员工口头交代任务说完他就忘SKILL 像是你给新员工发了一本《公司开发规范手册》他遇到问题会自己翻。提示SKILL 的价值不在于“让 AI 更聪明”而在于“让 AI 更守规矩”。它约束的是输出的一致性而不是上限。2.2 Agent Skills 这套机制的运行逻辑Agent Skills 的核心设计是“渐进式披露”。技能文件本身不会一次性全部塞进上下文而是先加载一个简短的描述让模型知道“有这么个技能可用”。当模型判断当前任务需要这个技能时才会去读取完整的技能内容。这样做的好处是节省上下文窗口。一个项目里可能装了好几个 SKILL如果全部展开token 早就爆了。渐进式披露让模型按需加载既保证了能力可用又不浪费资源。erupt-skill就是按照这个逻辑组织的。它的入口文件很短只说明“这是 Erupt 框架开发技能用于生成管理后台代码”。真正的规范细节、注解说明、目录约定放在引用文档里模型需要时才读。2.3 为什么选 Erupt 作为落地框架市面上低代码后台框架不少为什么erupt-skill偏偏绑定了 Erupt我的理解是Erupt 的注解驱动模式特别适合 AI 生成。它的核心思路是你只要在实体类上标注Erupt、EruptField这些注解框架就自动帮你生成增删改查接口、前端表格、搜索条件、分页逻辑。开发者几乎不用写 Controller 和 Service代码量极小。代码量小意味着 AI 出错的概率低。如果换成需要手写大量模板代码的框架AI 生成的代码越长出错点越多调试成本反而更高。Erupt 这种“声明式”的风格正好卡在 AI 擅长的区间里理解字段含义、生成注解配置、组织目录结构。另外 Erupt 的目录结构和命名规范比较固定这给 SKILL 提供了明确的约束边界。模型知道实体类放哪、配置类放哪、菜单怎么注册不会到处乱放文件。3. 环境准备把 Claude Code 和 SKILL 装到位3.1 Claude Code 的安装与基础配置Claude Code 的安装方式取决于你的操作系统。我主要在 macOS 和 Ubuntu 上折腾Windows 用户建议走 WSL体验会顺很多。macOS 和 Linux 下最省事的方式是通过 npm 全局安装npm install -g anthropic-ai/claude-code装完之后进入你的项目目录直接敲claude就能启动。第一次启动会引导你完成认证配置按提示走就行。Windows 用户如果不想折腾 WSL也可以直接用官方提供的安装方式但我在 Windows 原生环境下遇到过路径分隔符和权限的问题后来统一转到 WSL 里做稳定很多。注意Claude Code 对项目目录有读写权限建议在独立的项目目录里操作不要在主目录或者系统目录里乱跑。启动之后你可以用/help看内置命令用/config调整模型和权限设置。我一般会把自动执行命令的权限收紧一点避免它在我没确认的情况下跑一些危险操作。3.2 获取并安装 erupt-skillerupt-skill本质上就是一个符合 Agent Skills 规范的目录里面包含技能描述文件和参考文档。安装方式通常有两种手动放置和通过命令安装。手动放置的话你需要在项目根目录下创建.claude/skills/目录然后把erupt-skill整个文件夹放进去。目录结构大概长这样your-project/ ├── .claude/ │ └── skills/ │ └── erupt-skill/ │ ├── SKILL.md │ ├── references/ │ │ ├── annotations.md │ │ ├── structure.md │ │ └── examples.md │ └── scripts/ └── src/SKILL.md是入口文件里面用 YAML frontmatter 声明技能名称、描述和触发条件正文部分写核心指令。references目录放详细的参考文档模型按需读取。如果你是从 GitHub 上克隆的直接git clone下来把对应目录拷到.claude/skills/下即可。有些版本支持通过 Claude Code 的插件命令安装具体看你拿到的 skill 包怎么组织。提示装完之后在 Claude Code 里问一句“你现在有哪些可用的 skill”如果它能列出 erupt-skill说明加载成功。3.3 项目骨架的初始化SKILL 装好了还得有个像样的项目骨架不然 AI 生成的代码没地方放。Erupt 项目通常是 Spring Boot 结构。你可以用 Spring Initializr 生成一个基础工程也可以直接克隆 Erupt 官方的示例项目改。核心依赖是 Erupt 的 starter 包Maven 里大概是这样dependency groupIdxyz.erupt/groupId artifactIderupt-core/artifactId version你的版本号/version /dependency目录结构上我建议提前建好这几个包entity放实体类config放配置类service放业务逻辑controller放自定义接口。虽然 Erupt 大部分接口是自动生成的但预留好结构能让 AI 生成时更有章法。数据库配置、启动类、基础配置文件这些建议先手动跑通一个最小可运行版本。确认项目能正常启动、能访问 Erupt 自带的管理界面之后再让 AI 介入生成业务模块。这样出问题的时候你能快速判断是框架本身的问题还是 AI 生成代码的问题。4. 实操让 Claude Code 自己写出第一个管理模块4.1 需求描述怎么写才有效这是整个流程里最容易被低估的一环。很多人以为装了 SKILL 就能随便说一句“给我做个用户管理”然后坐等代码。实测下来需求描述的颗粒度直接决定生成质量。我总结的有效描述包含四个要素实体名称、字段清单、字段类型和约束、业务特殊要求。举个例子我实际用的一段描述是这样的用 Erupt 框架创建一个客户管理模块实体类名为 Customer。 字段包括 - name 客户名称字符串必填列表页可搜索 - phone 联系电话字符串必填 - level 客户等级枚举类型值为普通、VIP、SVIP - balance 账户余额小数列表页显示 - remark 备注长文本编辑页显示 - createTime 创建时间日期时间自动填充 列表页默认按创建时间倒序支持按客户等级筛选。这段描述里字段名、类型、约束、展示位置、搜索条件、排序规则全都说清楚了。Claude Code 拿到之后基本能一次生成到位不需要来回追问。反过来如果你只说“做个客户管理”它可能会自己猜字段猜出来的东西跟你想要的差十万八千里改起来比自己写还累。4.2 生成过程拆解它到底写了哪些文件我盯着它跑了一遍整个过程大概分几步。第一步它先读取erupt-skill的入口文件确认自己要用 Erupt 的规范来写。然后它会去读references里的注解说明和目录结构文档把规范加载进来。第二步它扫描当前项目结构确认entity包的位置、启动类的包名、已有的依赖版本。这一步很关键因为包名写错的话代码根本编译不过。第三步它开始生成实体类。核心就是Erupt和EruptField注解的组合。我截取一段它生成的代码Erupt(name 客户管理) Table(name t_customer) Entity public class Customer extends BaseModel { EruptField( views View(title 客户名称, sortable true), edit Edit(title 客户名称, notNull true, search Search) ) private String name; EruptField( views View(title 客户等级), edit Edit(title 客户等级, type EditType.CHOICE, choiceType ChoiceType(vl { VL(value NORMAL, label 普通), VL(value VIP, label VIP), VL(value SVIP, label SVIP) })) ) private String level; // 其余字段省略 }第四步它生成菜单配置。Erupt 的菜单是通过EruptMenu或者配置文件注册的它会把新模块挂到菜单树里。第五步它检查有没有需要自定义的 Service 或 Controller。如果需求里没有特殊业务逻辑这一步会跳过因为 Erupt 默认已经提供了完整的增删改查。整个流程跑下来大概生成了三到四个文件核心就是那个实体类。这就是 Erupt 的威力一个实体类顶别人一堆 Controller 和 Service。4.3 启动验证与效果确认代码生成完别急着高兴先编译。mvn clean compile编译通过之后启动项目访问 Erupt 的管理界面。正常情况下你能在菜单里看到“客户管理”点进去有列表页、搜索框、新增按钮、编辑弹窗字段和约束都跟你描述的一致。我第一次跑的时候列表页出来了但搜索条件没生效。排查发现是Search注解的位置写错了它应该放在edit的search属性里而不是单独标注。这个细节 SKILL 文档里有写但模型第一次没读仔细。我在对话里指出之后它自己修正了。提示生成完先编译再启动编译能挡掉大部分低级错误。启动后重点检查菜单是否注册、字段是否显示、搜索和排序是否生效。5. 深入 SKILL 内部它凭什么能约束住 AI5.1 SKILL.md 的结构与写法想真正用好这套东西最好理解SKILL.md是怎么写的。它的结构其实不复杂顶部是 YAML frontmatter--- name: erupt-skill description: 使用 Erupt 框架生成管理后台代码包括实体类、注解配置、菜单注册 ---name是技能标识description是给模型看的简短说明决定它什么时候会触发这个技能。描述写得越精准触发越准确。正文部分就是给模型的操作指令。好的 SKILL 正文会包含适用场景、核心原则、操作步骤、常见错误、参考文档索引。它不会把所有细节都堆在正文里而是用引用指向references目录下的详细文档。这种分层设计很聪明。正文保持精简保证模型每次都能读完细节文档按需加载避免上下文爆炸。5.2 references 目录的组织逻辑references目录是 SKILL 的知识库。erupt-skill里通常会有这几类文档annotations.md注解速查每个注解的作用、参数、使用示例structure.md目录结构和命名规范examples.md完整的示例代码覆盖常见场景faq.md常见问题和坑位模型在生成代码时会针对性地读取相关文档。比如生成枚举字段时它会去读annotations.md里ChoiceType的说明生成菜单时会去读structure.md里的菜单注册规范。这种“按需读取”的机制让 SKILL 既能承载大量知识又不会拖垮性能。5.3 如何自己扩展一个 SKILL如果你用的框架不是 Erupt或者你想让 AI 遵守团队内部的规范完全可以自己写一个 SKILL。步骤不复杂在.claude/skills/下建一个新目录写一个SKILL.md把团队规范、代码模板、常见坑整理进去。关键是描述要清晰指令要具体示例要能跑。我给自己团队写过一个内部规范 SKILL把日志格式、异常处理、接口返回结构这些约定写进去。装完之后AI 生成的代码明显更贴合我们的风格review 成本降了不少。提示写 SKILL 的时候多用“必须”“禁止”“优先”这类明确的词少用“建议”“可以”。模型对强约束的遵循度更高。6. 常见问题与排查技巧实录6.1 生成代码编译不过怎么办这是最常见的问题。原因通常有几类包名不对、依赖缺失、注解参数写错、字段类型不匹配。排查顺序我一般是这样的先看编译报错的具体行和错误信息定位是哪个文件哪个字段然后对照 SKILL 文档检查注解写法最后确认项目依赖版本和 SKILL 假设的版本是否一致。如果错误集中在某个注解上大概率是模型对注解参数的理解有偏差。这时候直接把错误信息贴回对话让它自己修通常一两轮就能搞定。6.2 菜单不显示、字段不生效菜单不显示多半是菜单注册那一步漏了或者写错了。Erupt 的菜单注册有几种方式检查生成的配置类有没有被 Spring 扫描到包路径对不对。字段不生效常见原因是EruptField的views和edit配置不完整。views控制列表页显示edit控制编辑页两个都要配。如果只配了一个另一个页面就是空的。搜索不生效检查Search有没有正确嵌套在Edit里。排序不生效检查View的sortable属性有没有打开。6.3 常见问题速查表问题现象可能原因排查方向编译报错找不到符号包名错误或依赖缺失检查 import 和 pom 依赖菜单不显示菜单未注册或配置类未被扫描检查配置类包路径和注解列表页字段为空views未配置补全View配置编辑页字段缺失edit未配置补全Edit配置搜索框不出现Search位置错误嵌套到Edit内枚举显示为代码值ChoiceType未配置补全vl映射排序无效sortable未开启在View中开启启动报错数据库配置或版本冲突检查配置文件和依赖树6.4 我踩过的几个坑第一个坑是版本不匹配。我一开始用的 Erupt 版本和 SKILL 文档假设的版本差了一个大版本注解参数有变化生成的代码编译不过。后来统一版本之后就好了。所以装 SKILL 之前先确认它适配的框架版本。第二个坑是需求描述太模糊。我有次偷懒只说“做个订单管理”结果它生成的字段跟我预期完全不一样改了半天。后来学乖了字段清单必须写全。第三个坑是没控制好生成范围。有次我让它“优化一下客户模块”结果它把整个实体类重写了一遍把我手动加的定制逻辑覆盖了。所以涉及已有代码的修改一定要明确说“只改哪里不要动哪里”。提示让 AI 改已有代码时先提交一次 git出问题能回滚。这是血泪教训。7. 这套玩法的边界与我的实际体会erupt-skill加 Claude Code 这套组合强在“标准化模块的快速生成”。字段清晰、逻辑简单的管理模块它几分钟就能搞定效率比手写高太多。但它的边界也很明显复杂的业务逻辑、跨模块的事务处理、性能敏感的查询优化这些还是得人来把关。我现在的用法是让 AI 生成 80% 的骨架代码我专注在剩下 20% 的业务逻辑和边界处理上。这样既享受了效率提升又不会因为过度依赖 AI 而失去对代码的掌控。另外一点体会是SKILL 的质量直接决定输出质量。erupt-skill之所以好用是因为它把 Erupt 的规范整理得足够细。如果你用的框架没有现成的 SKILL自己写一个的投入产出比其实很高尤其是团队内部有固定规范的情况下。最后分享一个小技巧生成完代码之后别急着提交先让 Claude Code 自己 review 一遍问它“这段代码有没有不符合 Erupt 规范的地方”。它对照 SKILL 文档自查的能力比人眼扫一遍靠谱得多。我靠这一招挡掉过好几次注解配置的疏漏。