name: ai-factory.feature description: 端到端功能开发。创建git分支,通过/ai-factory.task规划实现,然后通过/ai-factory.implement执行——全周期无手动步骤。当用户说“新功能”、“开始功能”、“实现功能”或“添加功能”时使用。 argument-hint: “[–parallel | --list | --cleanup <branch>] <功能描述>” allowed-tools: Bash(git *) Bash(cd *) Bash(cp *) Bash(mkdir *) Bash(basename *) Read Write Skill AskUserQuestion Questions disable-model-invocation: true
功能 - 新功能工作流
通过创建分支和规划实现来启动新功能。
工作流
步骤 0: 加载项目上下文
首先: 如果存在,读取.ai-factory/DESCRIPTION.md以了解:
- 技术栈(语言、框架、数据库)
- 项目架构
- 现有约定
此上下文告知分支命名、任务规划和实现。
步骤 0.1: 确保Git仓库
检查git是否已初始化。如果没有,初始化它。
git rev-parse --is-inside-work-tree 2>/dev/null || git init
步骤 0.2: 解析标志
从$ARGUMENTS中提取标志,然后解析功能描述:
--parallel → 启用并行工作树模式
--list → 显示所有活动工作树及其功能状态
--cleanup <branch> → 移除工作树并可选删除分支
解析规则:
- 从
$ARGUMENTS中去除--parallel、--list、--cleanup <branch> - 剩余文本成为功能描述
--list和--cleanup是独立的——它们立即执行并停止(不要继续到步骤1+)
示例:
/ai-factory.feature --parallel 添加用户认证
→ parallel=true, description="添加用户认证"
/ai-factory.feature --list
→ 显示所有活动工作树,然后停止
/ai-factory.feature --cleanup feature/user-auth
→ 移除该分支的工作树,然后停止
/ai-factory.feature 添加用户认证
→ 正常流程(不变),parallel=false
如果存在--list,跳转到–list子命令部分。
如果存在--cleanup,跳转到–cleanup子命令部分。
否则,继续到步骤1。
步骤 1: 解析功能描述
从$ARGUMENTS中提取:
- 核心添加的功能
- 关键领域术语
- 类型(功能、增强、修复、重构)
步骤 2: 生成分支名称
创建描述性分支名称:
格式:<类型>/<简短描述>
示例:
- feature/user-authentication
- feature/stripe-checkout
- feature/product-search
- fix/cart-total-calculation
- refactor/api-error-handling
规则:
- 小写字母,用连字符连接
- 最多50个字符
- 除连字符外无特殊字符
- 描述性但简洁
步骤 3: 询问测试
重要:在继续前始终询问用户:
开始前,几个问题:
1. 我应该为此功能编写测试吗?
- [ ] 是,编写测试
- [ ] 否,跳过测试
2. 实现后更新文档?
- [ ] 是,更新文档(/ai-factory.docs)
- [ ] 否,跳过文档
3. 任何特定要求或约束?
存储测试和文档偏好——它们将传递给/ai-factory.task和/ai-factory.implement。
步骤 4(并行):创建工作树
仅当设置--parallel标志时。 如果未设置,跳过到步骤4(正常)。
这创建一个隔离的工作目录,以便多个功能可以并发开发,每个都有其自己的Claude Code会话。
4a. 获取项目目录名称
DIRNAME=$(basename "$(pwd)")
# 例如 "my-project"
4b. 在主分支上创建分支
git branch <branch-name> main
如果分支已存在,询问用户是重用还是选择不同名称。
4c. 创建工作树
git worktree add ../${DIRNAME}-<branch-name-with-hyphens> <branch-name>
为目录转换分支名称:将/替换为-。
示例:
项目目录:my-project
分支:feature/user-auth
工作树:../my-project-feature-user-auth
4d. 复制上下文文件到工作树
复制这些文件/目录,使工作树具有完整的AI上下文:
WORKTREE="../${DIRNAME}-<branch-name-with-hyphens>"
# 项目上下文
cp .ai-factory/DESCRIPTION.md "${WORKTREE}/.ai-factory/DESCRIPTION.md" 2>/dev/null
# 过去经验/补丁
cp -r .ai-factory/patches/ "${WORKTREE}/.ai-factory/patches/" 2>/dev/null
# Claude Code技能+设置(Claude Code工作所需)
cp -r .claude/ "${WORKTREE}/.claude/" 2>/dev/null
# 仅当CLAUDE.md存在且不被git跟踪时
if [ -f CLAUDE.md ] && ! git ls-files --error-unmatch CLAUDE.md &>/dev/null; then
cp CLAUDE.md "${WORKTREE}/CLAUDE.md"
fi
注意: 被git跟踪的文件已通过检出在工作树中。仅复制未跟踪的上下文文件。
4e. 在工作树中创建功能目录
mkdir -p "${WORKTREE}/.ai-factory/features"
4f. 切换到工作树并继续
cd "${WORKTREE}"
显示简要确认:
✅ 并行工作树已创建!
分支: <branch-name>
目录: <worktree-path>
稍后管理工作树:
/ai-factory.feature --list
/ai-factory.feature --cleanup <branch-name>
继续到步骤5——在工作树目录中调用/ai-factory.task立即开始规划。
步骤 4(正常):创建分支
# 确保我们在主分支上并最新
git checkout main
git pull origin main
# 创建并切换到新分支
git checkout -b <branch-name>
如果分支已存在,询问用户:
- 切换到现有分支?
- 用不同名称创建?
步骤 5: 调用任务规划与分支上下文
计划文件将以分支命名:
分支:feature/user-authentication
计划文件:.ai-factory/features/feature-user-authentication.md(不是.ai-factory/PLAN.md!)
转换分支名为文件名:
- 将
/替换为- - 添加
.md扩展名
调用/ai-factory.task并明确上下文:
/ai-factory.task $ARGUMENTS
来自/ai-factory.feature的上下文:
- 计划文件:.ai-factory/features/feature-user-authentication.md(使用此名称,不是.ai-factory/PLAN.md)
- 测试:是/否
- 日志记录:详细/标准/最小
重要: 将确切的计划文件名传递给/ai-factory.task。这区分了基于功能的工作与直接/ai-factory.task调用。
传递:
- 完整功能描述
- 确切计划文件名称(基于分支,例如
.ai-factory/features/feature-user-authentication.md) - 测试偏好
- 日志记录偏好
- 任何约束
计划文件允许基于当前git分支恢复工作:
git branch --show-current # → feature/user-authentication
# → 查找.ai-factory/features/feature-user-authentication.md
步骤 6: 下一步行动(取决于模式)
并行模式(--parallel): 自动调用/ai-factory.implement——并行模式的整个目的是在隔离工作树中自主端到端执行。
/ai-factory.implement
来自/ai-factory.feature的上下文:
- 计划文件:.ai-factory/features/<branch-name>.md
- 测试:是/否
- 日志记录:详细/标准/最小
- 文档:是/否
正常模式: 规划后停止。用户审查计划并决定何时实现。
计划已创建!开始实现:
/ai-factory.implement
上下文清理
分支创建和规划后上下文很重。所有结果都保存到计划文件——建议释放空间:
AskUserQuestion: 继续前释放上下文?
选项:
1. /clear — 完全重置(推荐)
2. /compact — 压缩历史
3. 继续原样
–list子命令
当传递--list时,显示所有活动工作树及其功能状态。然后停止——不继续正常工作流。
# 显示所有工作树
git worktree list
此外,对于输出中的每个工作树路径:
- 检查
<worktree>/.ai-factory/features/是否包含任何计划文件 - 对于找到的每个计划文件,显示其名称以及是否看起来完整(有任务)或仍在进行中
输出格式:
活动工作树:
/path/to/my-project (main) ← 你在这里
/path/to/my-project-feature-user-auth (feature/user-auth) → 计划:feature-user-auth.md
/path/to/my-project-fix-cart-bug (fix/cart-bug) → 尚无计划
–cleanup子命令
当传递--cleanup <branch>时,移除工作树并可选删除分支。然后停止。
DIRNAME=$(basename "$(pwd)")
BRANCH_DIR=$(echo "<branch>" | tr '/' '-')
WORKTREE="../${DIRNAME}-${BRANCH_DIR}"
# 移除工作树
git worktree remove "${WORKTREE}"
# 仅当分支已合并到主分支时才删除分支
git branch -d <branch> # -d(不是-D)如果未合并会失败,这是安全的
如果git branch -d失败因为分支未合并,通知用户:
⚠️ 分支<branch>有未合并的更改。
强制删除:git branch -D <branch>
先合并:git checkout main && git merge <branch>
如果工作树路径不存在,检查git worktree list并建议正确路径。
示例
用户: /ai-factory.feature 添加用户认证,包括邮箱/密码和OAuth
操作:
- 解析:认证功能,邮箱/密码 + OAuth
- 生成分支:
feature/user-authentication - 询问测试偏好
- 创建分支:
git checkout -b feature/user-authentication - 调用
/ai-factory.task→ 创建计划,用户审查 - 停止——用户准备就绪时运行
/ai-factory.implement
用户: /ai-factory.feature --parallel 添加Stripe结账集成
操作:
- 解析标志:找到
--parallel,description = “添加Stripe结账集成” - 生成分支:
feature/stripe-checkout - 询问测试偏好
- 获取目录名:
my-project - 创建分支:
git branch feature/stripe-checkout main - 创建工作树:
git worktree add ../my-project-feature-stripe-checkout feature/stripe-checkout - 复制上下文文件(.ai-factory/DESCRIPTION.md, .ai-factory/patches/, .claude/, CLAUDE.md如果未跟踪)
cd到工作树- 调用
/ai-factory.task→ 创建计划,用户审查 - 自动调用
/ai-factory.implement→ 执行计划(并行 = 自主)
用户: /ai-factory.feature --list
操作:
- 运行
git worktree list - 检查每个工作树中
.ai-factory/features/的计划文件 - 显示格式化列表——停止
用户: /ai-factory.feature --cleanup feature/stripe-checkout
操作:
- 计算工作树路径:
../my-project-feature-stripe-checkout - 运行
git worktree remove ../my-project-feature-stripe-checkout - 运行
git branch -d feature/stripe-checkout - 报告结果——停止
用户: /ai-factory.feature 修复购物车数量更新不正确的问题
操作:
- 解析:错误修复,购物车数量
- 生成分支:
fix/cart-quantity-update - 询问测试
- 创建分支
- 调用
/ai-factory.task→ 创建计划,用户审查 - 停止——用户准备就绪时运行
/ai-factory.implement
重要
- 始终询问测试在创建计划前
- 从不假设测试偏好——始终明确询问
- 将测试偏好传递给下游技能
- 如果git操作失败,清晰报告并不继续
- 如果存在相同目的的分支,不要创建分支(先询问)
关键:日志记录偏好
当询问测试时,也询问日志记录:
开始前:
1. 我应该为此功能编写测试吗?
- [ ] 是,编写测试
- [ ] 否,跳过测试
2. 实现的日志记录级别:
- [ ] 详细(推荐) - 详细的DEBUG日志用于开发
- [ ] 标准 - 仅INFO级别,关键事件
- [ ] 最小 - 仅WARN/ERROR
3. 实现后更新文档?
- [ ] 是,更新文档(/ai-factory.docs)
- [ ] 否,跳过文档
4. 任何特定要求或约束?
默认为详细日志记录。 AI生成的代码从广泛日志记录中大大受益,因为:
- 细微错误常见且无日志难以追踪
- 用户以后可以移除日志
- 开发期间缺少日志浪费调试时间
日志记录必须始终可配置:
- 使用LOG_LEVEL环境变量
- 为基于文件的日志实施日志轮换
- 确保生产可以在无代码更改的情况下以最小日志运行
将日志记录和文档偏好与测试偏好一起传递给/ai-factory.task。