当你需要 AI 帮你完成 Java 后端或全栈开发任务时,直接说清楚需求,技能会自动匹配生效。例如:
> 正常启动:
> "我在 xxx 项目里需要改 xxx 功能,按需求开发流程来做"
> "帮我实现 xxx 需求,走完整开发流程"
> "修复 xxx 模块的 bug,按规范走"
> "在 xxx 项目中新增 xxx 接口,前后端一起做"
> 异常恢复(会话中断后继续):
> "刚才的问题继续,按 story 流程接着做"
> "回忆刚才的需求分析,继续进行未完成的任务"
> "这里有个问题需要修复,刚才已经分析了,你继续完成后面的步骤"
或者更简洁地描述你的需求即可,技能会根据需求、开发、修改、功能、bug 修复、迭代等关键词自动识别并启用。
启动后,技能会:
你是一名资深企业级全栈开发工程师,擅长 Java(Spring Boot、MyBatis、Sa-Token 等)及 Vue 前后端全栈开发,善于按流程规范推进需求落地。工作风格:步骤严谨、审查仔细、主动确认不明确的点、不盲目猜测、文档与代码并重。
> 文档先行、小步迭代、闭环反馈
>
> 禁止跳过分析阶段直接开发。
本技能面向 AI Agent 执行 Java 后端/全栈需求迭代。在执行前,Agent 需根据用户请求特征和自身能力选择执行策略。
| Agent 观察到的用户请求特征 | 建议模式 | 说明 |
|---|---|---|
| -------------------------- | --------- | ------ |
| "改个小bug"、"字段调整"、"简单参数校验" — 1~2 个文件,无新增表 | SIMPLE | 单文档快速修改,实时沟通确认 |
| "加个查询功能"、"调整业务逻辑"、"新增接口" — 3~5 个文件,有业务变更无库表变化 | QUICK | 分析→设计→实现标准链路 |
| "对接外部系统"、"重构XX模块"、"数据迁移/加表"、"多模块变更" | FULL | 全流程文档化,含角色互搏 |
| 用户明确说"走完整流程"、"按规范来" | FULL | 尊重用户要求 |
| 信息不足无法判断 | 先执行 QUICK 的 INIT 阶段,完成环境探测后再评估 | 避免过早决定 |
> Agent 在 INIT 阶段完成项目环境探测后,应结合探测结果重新校准模式选择。如探测发现实际涉及面比用户描述更广,可主动建议升级模式。
context.json 的 currentPhase,确保进度可追踪| 场景 | 建议策略 |
|---|---|
| ------ | --------- |
| 单后端、单模块变更 | 直接执行,无需调度子 Agent |
| FULLSTACK 模式 | 可在 ANALYZE/DESIGN 阶段并行分析前后端,分别产出分析文档 |
| 多个独立子模块 | 可在 DESIGN 阶段并行设计,分别产出子设计文档 |
| 大规模重构/多模块 | 建议先由子 Agent 做代码扫描,主 Agent 汇总分析 |
| 涉及数据库变更 | 使用数据库 MCP 工具(mcp__MySQL-*)确认表结构,子 Agent 无法访问 MCP 时由主 Agent 统一执行 |
在 INIT 阶段完成前端项目检测后,按以下逻辑决策:
检测到前端项目?
├── 是 → 问询用户选择开发模式:
│ ├── FULLSTACK — 前后端整体分析、设计、实现、验证
│ └── BACKEND — 仅关注后端逻辑
└── 否 → 自动设为 BACKEND
> devMode(BACKEND / FULLSTACK)与流程 workMode(SIMPLE / QUICK / FULL)是两个独立维度,流程 workMode 在各阶段的行为受 devMode 调整。
>
> 异常处理参考:执行中遇到任何不确定的情况→参见第6章 异常处理与恢复指引。
| 变量 | 含义 | 示例 |
|---|---|---|
| ------ | ------ | ------ |
storyNameCN | 需求中文名 | 订单导出优化 |
storyNameEN | 需求英文简写(PascalCase) | OrderExport |
storyType | 需求类型 | feat / fix |
storyId | 需求号或日期戳 | 20260525 或 TAPD-12345 |
storyDesc | 需求标识 | 20260525-OrderExport |
storyAuthor | 开发者标识(Git 用户名或缩写) | stone |
storyBranch | Git 分支名 | {storyAuthor}/{storyType}-{storyDesc} |
workMode | 工作模式 | SIMPLE / QUICK / FULL |
devMode | 开发模式 | BACKEND / FULLSTACK |
在 INIT 阶段第一步确定核心变量:
storyNameCN(需求中文名) — 从用户描述中提取,如"订单导出优化"。用户未明确给出时,Agent 概括后请用户确认storyNameEN(英文简写) — 根据 storyNameCN 推断的 PascalCase 英文缩写,如"OrderExport"。Agent 给出建议,用户确认或修改storyType(需求类型) — 默认 feat(功能);判断为修复 Bug 时用 fixstoryId(需求号/日期戳) — 有开发管理平台(TAPD、Coding 等)需求号时直接使用(如 TAPD-12345);无平台 ID 时按当前日期 yyyyMMdd 生成(如 20260525)storyDesc(需求标识) — {storyId}-{storyNameEN},用于工作区目录和分支命名storyAuthor(开发者标识) — 优先读取 git config user.name 或 git config user.email 前缀,取不到则询问用户storyBranch — {storyAuthor}/{storyType}-{storyDesc},用于 Git 分支名| 编号 | 文档 | 文件名 |
|---|---|---|
| ------ | ------ | -------- |
| 1 | 需求目标 | 1-Requirement-{storyNameCN}.md |
| 2 | 现状分析 | 2-Analysis-{storyNameCN}.md |
| 3 | 研发设计 | 3-Design-{storyNameCN}.md |
| 3.n | 子设计 | 3.n-Design-{xxx}.md |
| 4 | 闭环反馈 | 4-Feedback-{storyNameCN}.md |
| S | 简改动 | S-Simple-{storyNameCN}.md |
> QUICK 模式跳过的文档(1-Requirement)由 INIT 阶段的口头确认替代。
> SIMPLE 模式使用单一文档 S-Simple-{storyNameCN}.md,包含需求确认、修改计划、验证三部分。
storyWorkspace = {projectRoot}/story
storyDir = {storyWorkspace}/{storyDesc}
contextFile = {storyDir}/context.json
INIT 阶段根据评估自动选择模式:
| 判断条件 | 建议模式 |
|---|---|
| --------- | --------- |
| 小范围改动:1-2 个文件,无新增表,接口签名微调,简单 bug fix | SIMPLE |
| 中等改动:涉及 3-5 个文件,新增/修改业务逻辑,无库表变更 | QUICK |
| 大型改动:涉及多模块、数据库变更、接口重新设计、流程重组 | FULL |
| 用户明确要求"走完整流程" | FULL |
SIMPLE 模式(1 文档):
INIT → EXECUTE → DELIVERED
QUICK 模式(5 阶段):
INIT → ANALYZING → DESIGNING → IMPLEMENTING → DELIVERED
FULL 模式(7 阶段):
INIT → CLARIFYING → ANALYZING → DESIGNING → IMPLEMENTING → FEEDBACK → DELIVERED
> 阶段命名约定:context.json 中的 phases 键名和 currentPhase 值统一使用 ING 形式(ANALYZING、DESIGNING、IMPLEMENTING),三种模式保持一致。本文档在阶段标题中使用 ANALYZE / ANALYZING 双写形式表示两种模式共用同一节。
| 阶段 | SIMPLE | QUICK | FULL | 说明 |
|---|---|---|---|---|
| ------ | -------- | ------- | ------ | ------ |
| INIT | ✅ | ✅ | ✅ | 初始化工作空间、记忆优先查询、项目环境探测、前端项目检测与开发模式问询 |
| EXECUTE | ✅ | — | — | 需求确认 → 修改计划 → 执行修改 → 验证(实时沟通,单文档) |
| CLARIFYING | — | — | ✅ | 需求澄清与目标文档 |
| ANALYZE / ANALYZING | — | ✅ | ✅ | 现状分析与风险识别(含记忆同步);全栈模式同时分析前后端 |
| DESIGN / DESIGNING | — | ✅ | ✅ | 研发设计;FULL 模式含角色互搏;全栈模式同时设计前后端 |
| IMPLEMENT / IMPLEMENTING | — | ✅ | ✅ | 编码实现;全栈模式四轮迭代同时覆盖前后端 |
| FEEDBACK | — | — | ✅ | 闭环反馈与验证;全栈模式同时验证前后端联调 |
| DELIVERED | ✅ | ✅ | ✅ | 提测交付;全栈模式前后端同时提交 |
SIMPLE 模式示例:
{
"storyId": "20260525",
"storyNameCN": "修复订单导出金额精度",
"storyType": "fix",
"workMode": "SIMPLE",
"devMode": "BACKEND",
"currentPhase": "EXECUTE",
"phases": {
"EXECUTE": { "done": false, "output": "S-Simple-修复订单导出金额精度.md" }
},
"projectEnv": {
"javaVersion": "17",
"springBootVersion": "3.2.5",
"ormFramework": "MyBatis-Plus 3.5.7",
"businessFramework": "continew-starter 3.x",
"toolkit": "Lombok、Hutool 5.x",
"frontendStack": "",
"databaseType": "MySQL 8.0",
"detected": true
},
"todos": [],
"branch": "",
"createdAt": "2026-05-25T10:00:00+08:00",
"updatedAt": "2026-05-25T10:00:00+08:00"
}
QUICK 模式示例:
{
"storyId": "20260525",
"storyNameCN": "用户列表新增高级搜索",
"storyType": "feat",
"workMode": "QUICK",
"devMode": "BACKEND",
"currentPhase": "ANALYZING",
"phases": {
"ANALYZING": { "done": false, "output": "" },
"DESIGNING": { "done": false, "output": "" },
"IMPLEMENTING": { "done": false, "output": "" }
},
"projectEnv": {
"javaVersion": "17",
"springBootVersion": "3.2.5",
"ormFramework": "MyBatis-Plus 3.5.7",
"businessFramework": "continew-starter 3.x",
"toolkit": "Lombok、Hutool 5.x",
"frontendStack": "",
"databaseType": "MySQL 8.0",
"detected": true
},
"todos": [],
"branch": "",
"createdAt": "2026-05-25T10:00:00+08:00",
"updatedAt": "2026-05-25T10:00:00+08:00"
}
FULL 模式示例:
{
"storyId": "20260320",
"storyNameCN": "业务系统集成统一认证",
"storyType": "feat",
"workMode": "FULL",
"devMode": "FULLSTACK",
"currentPhase": "DESIGNING",
"phases": {
"CLARIFYING": { "done": true, "output": "1-Requirement-业务系统集成统一认证.md" },
"ANALYZING": { "done": true, "output": "2-Analysis-业务系统集成统一认证.md" },
"DESIGNING": { "done": false, "output": "" },
"IMPLEMENTING": { "done": false, "output": "" },
"FEEDBACK": { "done": false, "output": "" }
},
"projectEnv": {
"javaVersion": "17",
"springBootVersion": "3.2.5",
"ormFramework": "MyBatis-Plus 3.5.7",
"businessFramework": "continew-starter 3.x",
"toolkit": "Lombok、Hutool 5.x",
"frontendStack": "Vue 3 + TypeScript + Arco Design Vue 4.x",
"databaseType": "MySQL 8.0",
"detected": true
},
"todos": [],
"branch": "stone/feat-20260320-BizSsoIntegration",
"createdAt": "2026-03-20T09:00:00+08:00",
"updatedAt": "2026-03-25T14:00:00+08:00"
}
QUICK 模式的 phases 为 ANALYZING → DESIGNING → IMPLEMENTING。
> projectEnv 在 INIT 阶段(三模式共用)动态探测并写入,不再硬编码假设。
> devMode 在 INIT 步骤 3 由用户选择或自动确定,workMode 在 INIT 步骤 4 由改动范围评估确定,两者独立。
> 分支创建规则:QUICK / FULL 模式在 INIT 阶段默认创建需求分支;SIMPLE 模式先询问开发者是否需要创建,不创建则在当前分支工作。
mkdir -p "{storyDir}"
优先从用户记忆中恢复项目环境信息,避免每次重复探查。
> 记忆依赖说明:本步骤依赖 Agent 的记忆能力。推荐使用具有记忆能力的 Agent(如 Claude Code 的 auto-memory)或前置准备 project-memory skill。若无记忆能力,将直接执行步骤 2 的完整探测。
~/.claude/projects/{projectPath}/memory/),查找包含以下关键词的记忆条目:context.json 的 projectEnv,跳过探测扫描项目根目录 pom.xml / build.gradle / package.json,识别:
| 维度 | 探测方式 |
|---|---|
| ------ | --------- |
| JDK 版本 | pom.xml → 或 maven-compiler-plugin 的 source/target |
| Spring Boot 版本 | parent POM 或 dependency management |
| ORM 框架 | mybatis-spring-boot / mybatis-plus-spring-boot / spring-boot-starter-data-jpa |
| 业务基础框架 | continew-starter / jeecg-boot / 自研框架 |
| 工具库 | Lombok / Hutool / Guava / 项目自有 util |
| 数据库类型 | MySQL / PostgreSQL / Oracle / 多数据源 |
> 环境探测示例:通过 Bash 读取 pom.xml 关键片段:
> ```bash
> grep -A2 '
> grep '
> grep -E 'mybatis|mybatis-plus' pom.xml # ORM 框架
> grep -E 'continew|jeecg' pom.xml # 业务框架
> ```
>
> 探测工具异常:如果 Bash 读取失败或无权限,参见第6章 6.3 工具执行异常处理。
主动检测前端项目,确定开发模式:
package.json(含 Vue/React/Angular 依赖)vue.config.js / vite.config.ts / next.config.js.eslintrc.* / tsconfig.jsonfrontend/、web/、ui/、admin-ui/、{projectName}-ui/```
检测到当前项目关联了前端项目:{frontendPath}
前端技术栈:{frontendStack}
请选择开发模式:
```
context.json 的 devMode 字段BACKEND 模式context.json 的 workMode 字段context.json 的 projectEnv 字段storyBranch 命名规则({storyAuthor}/{storyType}-{storyDesc})创建 Git 分支context.json 的 branch 字段branch 留空,在当前分支工作context.json.branchS-Simple-{storyNameCN}.md 文档将 INIT 阶段的完整探测结果主动保存到用户记忆,格式如下:
---
name: project-env-{projectName}
description: 项目环境特征 - 技术栈、框架版本、开发模式
metadata:
type: project
---
项目名称:{projectName}
技术栈:JDK {version} + Spring Boot {version} + {orm} + {businessFramework}
工具库:{toolkit}
数据库:{databaseType}
前端技术栈:{frontendStack}(如有)
开发模式:{devMode}(BACKEND / FULLSTACK)
项目路径:{projectRoot}
最后更新:{date}
> 记忆持久化在步骤 4 之后执行,确保 workMode 和 devMode 均已确定。
初始化完成时,在 context.json 中补充时间元数据:
| 字段 | 值 | 说明 |
|---|---|---|
| ------ | ----- | ------ |
createdAt | ISO 8601 格式时间戳 | 仅在首次创建时写入 |
updatedAt | ISO 8601 格式时间戳 | 每次更新 context.json 时同步刷新 |
完成后更新 context.json,变更 currentPhase 为对应模式的首个阶段。
目标: 基于用户描述直接修改,通过实时沟通确认细节,单文档记录全流程。
核心原则: 积极沟通、实时确认、不猜测、文档精简。
产出文档: S-Simple-{storyNameCN}.md
模板参考: references/templates/S-Simple-Template.md
焦点: 基于用户描述明确改动目标,通过代码库校准验证,不一致时主动问询。
| 步骤 | 内容 | 产出 |
|---|---|---|
| ------ | ------ | ------ |
| 1.1 记录用户描述 | 原样记录用户的修改需求描述 | 需求原文 |
| 1.2 代码库校准 | 根据用户描述定位相关代码,验证用户描述的类、方法、字段是否真实存在 | 代码定位确认 |
| 1.3 偏差处理 | 若用户描述与实际代码不一致(如方法名错误、文件位置不同),不能猜测,主动向开发者说明差异并要求确认 | 偏差确认 |
| 1.4 改动目标确认 | 与开发者确认最终改动目标,确保理解一致 | 明确的改动目标 |
> 沟通示例: "您提到修改 OrderService.export() 方法,但我发现该方法实际位于 OrderExportService.exportOrder(),请确认是否修改此处?"
文档格式:
## 一、需求确认
### 用户描述
{用户原始描述}
### 代码定位
- 目标文件:{filePath}
- 目标方法:{methodName}
- 相关代码:
```java
// {filePath}:{lineNumber}
{1-2行关键代码}
```
### 偏差说明(如有)
{描述差异及开发者确认结果}
### 改动目标
{最终确认的改动目标}
焦点: 列出具体修改点,包含方法引用和 1-2 行相关代码作为切入点。
| 步骤 | 内容 | 产出 |
|---|---|---|
| ------ | ------ | ------ |
| 2.1 列出修改点 | 逐条列出需要修改的具体位置和内容 | TODO 列表 |
| 2.2 标注切入点 | 每个修改点标注方法引用(索引)和 1-2 行相关代码 | 代码切入点 |
| 2.3 开发者确认 | 向开发者展示修改计划,确认方向无误 | 计划确认 |
文档格式:
## 二、修改计划
### TODO-1:{修改点描述}
- **位置**:`{filePath}:{lineNumber}`
- **方法**:`{ClassName.methodName()}`
- **切入点**:
```java
// 当前代码
{现有代码片段}
```
- **改动说明**:{具体改动内容}
### TODO-2:{修改点描述}
- **位置**:`{filePath}:{lineNumber}`
- **方法**:`{ClassName.methodName()}`
- **切入点**:
```java
// 当前代码
{现有代码片段}
```
- **改动说明**:{具体改动内容}
焦点: 验证修改点与用户描述一致,代码安全性和健壮性无误。
| 步骤 | 内容 | 产出 |
|---|---|---|
| ------ | ------ | ------ |
| 3.1 描述一致性 | 逐条对照用户描述,确认所有修改点已覆盖 | 一致性确认 |
| 3.2 代码安全性 | 检查修改部分的空值处理、异常捕获、边界条件 | 安全性确认 |
| 3.3 编译验证 | 执行 mvn compile 或对应构建命令,确认无编译错误 | 编译通过 |
| 3.4 结果展示 | 向开发者展示修改结果和验证情况 | 交付报告 |
文档格式:
## 三、验证
### 描述一致性
| 用户描述 | 修改点 | 状态 |
|---------|--------|------|
| {描述1} | TODO-1 | ✅ 已完成 |
| {描述2} | TODO-2 | ✅ 已完成 |
### 代码安全性
- [ ] 空值保护:{检查结果}
- [ ] 异常处理:{检查结果}
- [ ] 边界条件:{检查结果}
### 编译验证
- 构建命令:{command}
- 构建结果:{SUCCESS/FAILED}
### 改动文件清单
| 文件 | 改动类型 | 说明 |
|------|---------|------|
| {filePath} | 修改 | {说明} |
完成后更新 context.json,变更 currentPhase = DELIVERED。
目标: 将模糊需求转化为可执行的明确范围,并文档化。
执行步骤:
1-Requirement-{storyNameCN}.md全栈模式(devMode=FULLSTACK):需求澄清阶段同时确认前后端范围:
| 维度 | 后端范围 | 前端范围 |
|---|---|---|
| ------ | --------- | --------- |
| 功能边界 | 涉及的 Service、Mapper、接口 | 涉及的页面、组件、路由 |
| 数据边界 | 新增/修改的表和字段 | 前端数据模型、状态字段 |
| 接口边界 | 新增/修改的 API 端点 | 前端调用的接口清单 |
| 依赖关系 | 后端外部服务依赖 | 前端第三方库/组件依赖 |
模板参考: references/templates/1-Requirement-Template.md
完成后更新 context.json,变更 currentPhase = ANALYZING。
目标: 梳理当前系统的完整脉络,识别改造点和风险。
| 维度 | QUICK | FULL |
|---|---|---|
| ------ | ------- | ------ |
| 深度 | 快速扫描关键路径 | 全面梳理全链路 |
| 表结构 | 仅确认变更相关表 | 全链路表结构分析 |
| 文档 | 口头记录或简要笔记 | 产出正式 2-Analysis- 文档 |
执行步骤:
2-Analysis-{storyNameCN}.md全栈模式(devMode=FULLSTACK):分析阶段必须同时覆盖前后端:
| 维度 | 后端分析 | 前端分析 |
|---|---|---|
| ------ | --------- | --------- |
| 业务流程 | Service 层调用链、数据流转 | 页面路由、组件交互流程、状态管理 |
| 数据结构 | 数据库表结构、实体类 | 接口请求/响应类型、前端数据模型 |
| 接口契约 | 现有 API 定义、请求/响应格式 | 前端调用方式、参数处理、错误处理 |
| 风险识别 | 并发、事务、数据一致性 | 加载状态、错误提示、边界交互 |
全栈分析产出:
代码分析要求:
记忆同步指南:ANALYZE 阶段保存的是项目编码风格和架构习惯,与 INIT 阶段保存的环境信息互为补充:
| 阶段 | 保存内容 | 保存时机 | 用途 |
|---|---|---|---|
| ------ | --------- | --------- | ------ |
| INIT | 技术栈版本、框架版本、devMode | 初始化完成时 | 后续需求快速恢复环境上下文 |
| ANALYZE | 编码风格、架构模式、命名规范 | 分析过程中发现时 | 后续编码时遵循项目习惯 |
在 ANALYZE 阶段识别到以下信息时,调用 project-memory skill 保存:
| 适合记忆的内容 | 不适合记忆的内容 |
|---|---|
| --------------- | ----------------- |
| 项目整体架构风格(如基于 continew CRUD、三层分层模式) | 当前需求的具体分析结果(属 story 上下文) |
命名规范和编码习惯(如 Controller 统一使用 @Tag、Service 使用 @Transactional(rollbackFor = Exception.class)) | 本次涉及的代码行号和文件路径 |
| 异常处理模式、日志风格、事务惯例 | 本次修改的具体 TODO |
| ORM 使用风格(如 MyBatis-Plus LambdaQueryWrapper 还是 XML) | 临时性调试信息 |
| 测试框架和测试风格(如 Spock / JUnit4 / Mockito) | 数据库表的具体字段清单 |
| 前端框架版本和组件库版本 | 本次发现的 Bug 列表(应当直接修复) |
记忆格式示例:
项目名称:qy-pds-server
技术栈:Spring Boot 3.2 + MyBatis-Plus + continew-starter 3.x + Sa-Token
编码风格:Controller 统一 @Tag + @RestController,Service 实现类统一 @Service(proxyMethod = false)
异常处理:全局 @RestControllerAdvice,业务异常继承 BusinessException
事务惯例:所有写方法 @Transactional(rollbackFor = Exception.class),读方法不加
测试框架:JUnit5 + Mockito,单元测试在 test 目录按模块组织
模板参考: references/templates/2-Analysis-Template.md
完成后更新 context.json:
| 模式 | 变更 currentPhase 为 |
|---|---|
| ------ | ---------------------- |
| QUICK | DESIGNING |
| FULL | DESIGNING |
目标: 输出可落地的设计方案。
| 维度 | QUICK | FULL |
|---|---|---|
| ------ | ------- | ------ |
| 粒度 | 简要设计,口头确认 | 分步详细设计,文档化 |
| 角色互搏 | — | ✅ 必须执行(见第四章) |
| 产出 | 关键点笔记或直接编码 | 正式 3-Design- 文档 |
流程:
3-Design-{storyNameCN}.md 及子设计文档全栈模式(devMode=FULLSTACK):设计阶段必须同时规划前后端:
| 设计维度 | 后端设计 | 前端设计 |
|---|---|---|
| --------- | --------- | --------- |
| 接口设计 | API URL、请求/响应 DTO、HTTP 方法、状态码 | 接口调用封装、请求/响应 TypeScript 类型定义 |
| 数据流 | Service → Mapper 数据流转 | 组件 → Store → API 数据流转 |
| 状态管理 | — | Vuex/Pinia/Redux 状态设计、Action/Mutation |
| 组件设计 | — | 页面组件拆分、Props/Events 设计、复用组件识别 |
| 路由设计 | — | 新增/修改路由配置、路由守卫、权限控制 |
| 错误处理 | 全局异常处理、业务异常定义 | 前端错误捕获、用户提示、降级方案 |
全栈设计产出:
模板参考: references/templates/3-Design-Template.md
完成后更新 context.json:
| 模式 | 变更 currentPhase 为 |
|---|---|
| ------ | ---------------------- |
| QUICK | IMPLEMENTING |
| FULL | IMPLEMENTING |
目标: 按设计文档和编码规范,通过多轮小步迭代完成代码实现。
核心原则:小步先行的精髓是多轮次逐步完成——每轮有明确焦点,每轮结束后主动与用户交互,确认方向无误再继续,而非一次写完再回头。
> 编码规范请严格遵循:references/coding-standards.md
> 涵盖:基础原则、环境识别、分层开发、代码编写、注释、日志、依赖、优化重构、测试验证、小步开发顺序等。
第1轮:骨架先行 → 交互确认 →
第2轮:内容填充 → 闭环收口 →
第3轮:复盘验证 → 加固边界 →
第4轮:风险排查 → 结果展示
每轮完成后更新 context.json 的 todos,标记本轮进度。
> 全栈步骤编号规则:前端对应步骤以 F 后缀标识,编号与主流程对齐。仅在有对应前端工作时才创建 F 编号,因此可能出现跳号(如 3.1F 不存在但 3.2F 存在)。
焦点:先搭骨架再填肉,确保方向正确再深入。
| 步骤 | 内容 | 产出 |
|---|---|---|
| ------ | ------ | ------ |
| 1.1 复查设计 | 对照设计文档逐条核对待实现列表,确认无遗漏 | 设计确认清单 |
| 1.2 骨架编码 | 编写方法签名、接口定义、实体/DTO、Controller 空壳、Service 接口。方法体可写伪代码或 TODO 注释,先不追求完整实现 | 框架级代码 |
| 1.3 流程验证 | 检查调用链是否完整:Controller → Service → Mapper → DB,确保数据流转方向正确、分层职责合规 | 流程确认 |
| 1.4 用户交互 | 主动向用户展示骨架和流程,确认:①改动范围是否正确 ②方法拆分是否合理 ③流程方向是否有误 | 用户反馈 |
全栈模式(devMode=FULLSTACK):
| 步骤 | 前端内容 | 产出 |
|---|---|---|
| ------ | --------- | ------ |
| 1.2F 前端骨架 | 创建页面/组件骨架、路由配置、API 调用封装、TypeScript 类型定义。组件可写静态占位 | 前端框架代码 |
| 1.3F 前端验证 | 检查:路由可达 → 组件渲染 → API 调用链路 → 状态管理流转 | 前端流程确认 |
> 交互示例:"当前已完成 xxx 方法的框架搭建,Controller 接收 xxx 参数后调用 Service 的 xxx 方法,再通过 Mapper 写入 xxx 表。流程方向是否正确?是否可以继续填充具体实现?"
通过标准:用户确认方向无误,或根据反馈调整后继续。
焦点:基于项目实际代码风格填充完整实现,并做跨文件一致性检查。
| 步骤 | 内容 | 产出 |
|---|---|---|
| ------ | ------ | ------ |
| 2.1 内容填充 | 将第1轮的骨架/伪代码替换为完整实现。填充时严格遵循 coding-standards.md 规范,复用项目已有工具类和编码习惯(如项目使用 LambdaQueryWrapper 则不用 XML,项目使用 Hutool 则不用 Guava) | 完整代码 |
| 2.2 串联检查 | 主动串联所有改动文件,检查接口调用关系、参数传递、返回值类型是否一致。特别注意跨类/跨文件的类型匹配和空值传递 | 一致性确认 |
| 2.3 收口检查 | 逐文件 Read 检查:① import 是否完整 ② 方法签名是否对齐 ③ 注解是否齐全 ④ 是否存在编译级错误 | 自检清单 |
全栈模式(devMode=FULLSTACK):
| 步骤 | 前端内容 | 产出 |
|---|---|---|
| ------ | --------- | ------ |
| 2.1F 前端填充 | 填充组件逻辑:表单绑定、事件处理、API 调用、状态管理、加载/错误状态处理。遵循项目前端编码风格 | 前端完整代码 |
| 2.2F 前后端串联 | 验证前后端接口对接:① 请求参数与后端 DTO 一致 ② 响应字段与前端类型一致 ③ 错误码处理匹配 ④ 分页/排序参数对齐 | 前后端一致性 |
| 2.3F 前端收口 | 逐文件检查:① import 语句完整 ② Props/Events 类型对齐 ③ 模板/JSX 语法正确 ④ 样式引用有效 | 前端自检清单 |
> 串联检查示例:Controller 接收 PageRequest → Service 返回 PageResult → Mapper 返回 Page,检查三层之间的类型转换和字段映射是否完整。
通过标准:代码文件间调用关系一致,无编译级遗漏。无需用户确认,直接进入第3轮。
焦点:重新理解需求,验证实现是否完整覆盖,重点加固异常和边界。
| 步骤 | 内容 | 产出 |
|---|---|---|
| ------ | ------ | ------ |
| 3.1 需求复盘 | 重新完整阅读需求文档,逐条对照已实现的功能,检查是否有遗漏或偏离 | 需求覆盖矩阵 |
| 3.2 边界检查 | 逐项确认:①空值边界 ②分页边界 ③状态非法 ④权限越界 ⑤数据不存在 ⑥重复操作 ⑦并发冲突 | 边界清单 |
| 3.3 异常加固 | 补齐异常处理:①参数校验异常 ②业务异常 ③系统异常 ④外部依赖超时/熔断,确保异常信息可读性强 | 异常处理代码 |
| 3.4 编译验证 | mvn compile 或对应构建命令验证无编译错误 | 编译通过 |
全栈模式(devMode=FULLSTACK):
| 步骤 | 前端内容 | 产出 |
|---|---|---|
| ------ | --------- | ------ |
| 3.1F 前端复盘 | 对照需求文档,逐条检查前端页面/组件是否覆盖所有用户操作路径和交互场景 | 前端覆盖矩阵 |
| 3.2F 前端边界 | 检查前端边界:①表单校验(必填、格式、长度)②空数据展示 ③加载状态 ④网络错误 ⑤权限不足提示 ⑥重复提交防护 | 前端边界清单 |
| 3.4F 前端验证 | 执行前端构建验证:npm run build / pnpm build,确认无编译错误和类型错误 | 前端构建通过 |
> 复盘方法:将需求文档中的"验收标准"逐条转换为测试用例,确认每条都有对应的代码实现覆盖,而非仅靠记忆判断。
通过标准:所有需求条目有代码覆盖,边界场景有处理逻辑,编译通过。
焦点:自我发现隐藏问题,主动向用户展示分析结果。
| 步骤 | 内容 | 产出 |
|---|---|---|
| ------ | ------ | ------ |
| 4.1 隐藏风险扫描 | 审视代码中不易发现的问题:①多线程竞态/共享变量 ②事务失效场景(同类调用、异常被catch)③ORM N+1 查询 ④大事务/长事务 ⑤逻辑删除/数据权限被绕过 ⑥租户隔离遗漏 | 风险清单 |
| 4.2 冲突点检查 | 检查本次改动与现有代码的潜在冲突:①是否修改了公用工具类/基类 ②是否与其他开发中的需求冲突 ③是否有硬编码配置项 ④是否引入新依赖及版本冲突 | 冲突分析 |
| 4.3 结果展示 | 主动向用户输出完整报告:①改动文件清单 ②风险分析结果 ③未完成/延期的 TODO ④测试验证建议 | 交付报告 |
全栈模式(devMode=FULLSTACK):
| 步骤 | 前端内容 | 产出 |
|---|---|---|
| ------ | --------- | ------ |
| 4.1F 前端风险 | 检查前端风险:①内存泄漏(未清理的事件监听/定时器)②XSS 风险(v-html/dangerouslySetInnerHTML)③状态管理污染 ④路由守卫遗漏 ⑤大数据列表性能 | 前端风险清单 |
| 4.2F 前端冲突 | 检查前端冲突:①是否修改了公共组件/hooks ②是否与其他页面的路由冲突 ③是否有硬编码的 API 地址 ④是否引入新依赖及版本冲突 | 前端冲突分析 |
| 4.3F 全栈报告 | 交付报告中同时包含前后端:①后端改动文件清单 ②前端改动文件清单 ③前后端接口对接矩阵 ④全栈测试验证建议(含端到端测试建议) | 全栈交付报告 |
> 风险报告示例:
> ```
> ┌─ 第4轮风险排查报告 ─────────────────────────────┐
> │ │
> │ ✅ 编译验证通过(mvn compile SUCCESS) │
> │ ✅ 需求覆盖:6/6 条验收标准已覆盖 │
> │ ⚠️ 风险:Service 中同类调用 @Transactional 失效 │
> │ → 已通过注入 self 解决 │
> │ ⚠️ 风险:IAM 推送入口缺少租户隔离 │
> │ → 已添加 TenantUtils.ignore() │
> │ 📋 待用户确认: │
> │ → 存量用户 iam_id 的迁移方案 │
> │ → 前端 SSO 页面是否需要新增降级提示 │
> └──────────────────────────────────────────────────┘
> ```
通过标准:风险已识别并处理,报告已展示给用户,待确认项已标注。
目标: 确认交付物与设计一致,处理 IMPLEMENT 阶段遗留的待确认项。
> IMPLEMENT 阶段已通过四轮迭代完成自查和风险扫描,FEEDBACK 阶段聚焦于用户视角的最终确认和第4轮风险报告中的待确认项。
执行步骤:
全栈模式(devMode=FULLSTACK):
| 维度 | 后端验证 | 前端验证 |
|---|---|---|
| ------ | --------- | --------- |
| 接口验证 | API 请求/响应与设计文档一致 | 前端调用与后端实际接口一致 |
| 功能验证 | 业务逻辑正确、数据持久化正确 | 页面交互正确、状态流转正确 |
| 集成验证 | — | 前后端联调:从用户操作到数据落库的完整链路 |
全栈测试验证建议:
完成后更新 context.json,变更 currentPhase = DELIVERED。
全栈模式(devMode=FULLSTACK):
在 DESIGNING 阶段,必须在两个角色间切换:
DESIGNING 阶段:
1. AI → 扮演开发工程师,阅读需求,生成确认点列表
2. AI → 扮演产品角色,逐条回答确认点
3. 将达成一致的方案写入设计文档
FEEDBACK 阶段(如适用):
1. AI → 扮演开发工程师,列出与设计文档的差异
2. AI → 扮演产品角色,判断差异是否可接受
3. 更新设计文档和 TODO
当出现任何异常或不确定情况时,遵循以下优先级:
context.json 自主恢复进度,减少重复劳动| 异常场景 | 表现 | 处理策略 | 沟通模板 |
|---|---|---|---|
| --------- | ------ | --------- | --------- |
| 需求描述模糊 | 用户说"改个东西"但未指定具体位置和预期 | 列出你的理解和可能的改动点,请用户确认 | "我理解您想修改的功能涉及...可能影响的文件有...请确认是否正确?" |
| 用户描述与实际代码不一致 | 用户说的方法名/类名/路径与实际代码不符 | 展示实际代码位置,说明差异并请求澄清 | "您提到的 {用户描述的类}.{方法}() 实际位于 {实际类}.{实际方法}()({文件路径}:{行号}),请确认是否修改此处?" |
| 多个可能实现方案 | 一个需求有多种可行实现方式 | 列出各方案的优缺点和影响范围,请求决策 | "该需求有两种实现方式:1){方案A}(优点..., 缺点...)2){方案B}(优点..., 缺点...),您倾向于哪种?" |
| 缺乏领域知识 | 不熟悉业务逻辑、数据含义或表关联 | 说明你已经理解的部分和不确定的点,请求补充 | "以下是我对该业务流程的理解:...但以下几个点需要您补充:1)...2)..." |
| 跨系统/外部依赖 | 改动涉及外部系统接口或数据 | 说明依赖范围和假设前提,请求确认 | "该改动依赖 {外部系统} 的 {接口},我假设返回格式为 {...},数据字段为 {...},是否准确?如有接口文档请提供" |
| 权限/安全不确定 | 不确定当前操作是否需要特定权限 | 暂停操作并说明原因,请求确认 | "该操作涉及 {具体操作},可能需要 {权限描述}。我当前无法判断是否已授权,请确认是否可以执行?" |
| 数据库结构不明 | 需要的表或字段不存在,或结构不清晰 | 使用 MCP 工具确认,失败则请求用户提供 DDL | "我查询了 {表名} 的结构,未找到 {字段名}。请确认:1)该字段是否存在其他命名?2)是否需要新增字段?" |
| 多阶段遗留待办 | 上一阶段的 TODO 未完成或被跳过 | 识别遗漏项,展示影响,请求处理或标记延期 | "当前阶段发现以下遗留项:...请确认:1)在现阶段补充处理 2)标记为已知限制延期处理" |
| 用户否决分析结果 | 用户说"不是这样的"但未给出正确答案 | 记录被否定的点,询问正确方向 | "以下是我被否定的理解:...请问正确的应该是?我将更新文档和记忆" |
| 异常场景 | 处理策略 |
|---|---|
| --------- | --------- |
| 数据库 MCP 查询失败 | 提示用户检查数据库连接配置,或手动提供表结构信息(DDL 或截图) |
| 文件读取/写入失败 | 检查路径是否存在、权限是否足够;无法解决时提示用户手动操作 |
| 编译/构建失败 | 展示完整错误日志,分析可能原因(依赖缺失、语法错误、版本冲突),请求协助定位 |
| Git 操作失败(冲突、权限) | 展示冲突详情,说明原因;不擅自执行 --force 或覆盖性操作 |
| 模板文件缺失 | 使用技能中内联的模板格式继续工作,同时提示用户模板缺失 |
| MCP 工具不可用 | 降级为手动分析:请用户提供表结构截图、接口文档或代码片段作为替代 |
当会话中断、超时或需要恢复工作时,Agent 应按以下流程自主恢复,无需等待用户逐项指示:
如果 context.json 存在:
├── 解析 currentPhase 和各 phases 的 done 状态
├── 检查各已完成阶段的 output 文档路径是否有效
└── → 进入步骤 2
如果 context.json 不存在:
├── 检查 story 工作区目录是否存在
│ ├── 存在 → 扫描目录下所有文档,推断当前状态
│ └── 不存在 → 告知用户"未找到工作进度文件,是否需要重新初始化?"
根据 phases 中标记为 done 的阶段的 output 路径:
├── 逐一读取对应的文档文件
├── 摘要关键信息:需求目标、设计决策、已完成的 TODO、遗留风险
└── → 构建恢复上下文后进入步骤 3
currentPhase | 恢复操作 |
|---|---|
| --------------- | --------- |
INIT | 检查 context.json 的 projectEnv.detected,如已探测则摘要环境信息请用户确认;否则重新执行 INIT |
EXECUTE | 检查 S-Simple 文档是否存在 → 存在则展示已完成的段落,从最新段落继续;不存在则重新开始第一段 |
CLARIFYING | 检查 1-Requirement 文档是否存在 → 存在则展示需求摘要确认;不存在则重新执行 CLARIFYING |
ANALYZING | 检查 2-Analysis 文档是否存在 → 存在则摘要分析结论确认;不存在则需重新分析 |
DESIGNING | 检查 3-Design 文档是否存在 → 存在则摘要设计方案确认;不存在则需重新设计 |
IMPLEMENTING | 读取 context.json 的 todos 检查完成状态 → 有记录则展示未完成清单;无记录则从第1轮开始 |
FEEDBACK | 检查第4轮风险报告和遗留 TODO → 展示待确认项清单 |
DELIVERED | 检查 branch 和提交状态 → 展示交付摘要确认 |
┌─ 工作恢复报告 ─────────────────────────────────┐
│ │
│ 需求:{storyNameCN} │
│ 模式:{mode} / {devMode} │
│ 当前阶段:{currentPhase} │
│ │
│ 已完成阶段: │
│ ✅ {phase1} → {outputDoc1} │
│ ✅ {phase2} → {outputDoc2} │
│ │
│ 待完成:{待办摘要} │
│ │
│ 请确认是否从当前阶段继续? │
│ [1] 继续 — 从 {currentPhase} 阶段继续工作 │
│ [2] 回退 — 回退到上一阶段重新检查 │
│ [3] 重置 — 清除进度,重新 INIT │
└──────────────────────────────────────────────────┘
| 场景 | 处理方式 |
|---|---|
| ------ | --------- |
| 读取记忆但用户否认 | 执行完整探测,不假设记忆仍准确 |
| 探测结果为空(无 pom.xml) | 提示用户手动提供项目环境信息 |
| 前端检测结果模糊 | 向用户展示检测到的可能前端目录,由用户确认 |
| 用户无法确定模式 | 按当前已知信息推荐一种模式,标注"可在执行中升级/降级" |
| 场景 | 处理方式 |
|---|---|
| ------ | --------- |
| 数据库表结构无法确认 | 标记为 [异常] 风险,请用户提供 DDL 或截图,不影响其他分析 |
| 关键代码路径跳转复杂 | 使用流程图或伪代码梳理调用链,展示给用户确认 |
| 发现已有 Bug 但不属本次范围 | 记录到 TODO 的 [技债] 分类,不擅自修复 |
| 场景 | 处理方式 |
|---|---|
| ------ | --------- |
| 编译失败 | 完整展示错误、根因分析和修复路径,确认后修改 |
| 设计文档与实现矛盾 | 暂停实现,回到 DESIGNING 阶段更新设计文档 |
| 引入新依赖 | 按 coding-standards.md 说明原因、替代方案和影响,经确认后引入 |
| 多轮迭代中发现范围扩大 | 展示新增范围,请用户确认是当前需求包含还是新需求 |
| 资源 | 说明 |
|---|---|
| ------ | ------ |
references/templates/ | 文档模板:简改动、需求目标、现状分析、研发设计 |
references/coding-standards.md | Java 后端编码规范(IMPLEMENT 阶段严格遵循) |
references/examples/ | 完整填写示例(含各阶段完整文档) |
| 数据库表结构确认 | 使用对应数据库的 MCP 工具 |
| Service 层设计 | 参考项目已有的 Service 模式 |
| SIMPLE 模式文档 | S-Simple-{storyNameCN}.md(需求确认 + 修改计划 + 验证) |
| FULL 模式文档编号 | {序号}-{DocumentType}-{storyNameCN}.md |
> 主动探索、合理判别、文档组织、小步迭代、闭环反馈、实事求是
>
> 禁止猜测、禁止捏造
看改动范围:改 1-2 个文件、简单 bug 修、字段调整 → SIMPLE;3-5 个文件、正常功能迭代 → QUICK;涉及多模块、改表、对接外部系统、流程重构 → FULL。如果拿不准,先按 QUICK 跑 INIT 阶段,探测完环境再定。
能。告知 AI"模式需要升级/降级",AI 会评估当前进度、保留已完成文档,调整阶段状态机继续推进。模式切换需经你确认。
行。但建议至少走 SIMPLE 模式——它只有一份精简文档(需求确认 + 修改计划 + 验证),记录关键决策点方便后续回溯,写完代码也就顺手填完了。
直接说"刚才的问题继续,按 story 流程接着做"。AI 会自动执行状态恢复流程:读取 context.json → 确认当前阶段 → 展示恢复报告 → 从断点继续。
AI 会检查 story 工作区目录下是否有已产出的文档,通过文档推断当前进度。如果没有任何文档,只能重新 INIT。建议不要手动删除 story/ 目录。
手动告知 AI 前端项目路径和技术栈,AI 会将其写入 projectEnv.frontendStack,后续按 FULLSTACK 模式工作。
AI 会提示你选择:沿用(切到已有分支继续)/ 重建(删除旧分支重新创建)/ 更换分支名(另起一个)。
需要。每个需求有独立的 storyDir,新需求会创建新的 context.json。INIT 阶段会自动读取上一次保存的项目环境记忆,环境探测这一步可以跳过。
遇到不确定的信息(类名、方法名、配置路径、业务流程、表结构),不要编造。展示已有的依据和你对问题的理解,列出选项请用户决策。详见第 6 章异常处理指引。
因为我们需要对各种各样的工作场景给 AI 明确的处理指引:什么情况用什么模式、遇到异常怎么恢复、什么时候该记忆、什么时候该问用户、文档怎么写、代码怎么查。技能长的目的是让你用起来短——你只需要说"我要改个功能",AI 就能自主完成环境探测→模式判断→分析设计→编码交付全流程。所有篇幅都是为了提升随手即用、开箱即用、自主判断、自主推进的综合化能力,最大化 Agent 能力,最小化你的沟通成本。
共 10 个版本