3.2 实战二:Issue 修复技能包
引言
小王修复 GitHub Issue 的流程是固定的:看 Issue → 定位代码 → 建分支 → 改代码 → 跑测试 → 创建 PR。每次都是这 6 步,每次都要提醒 AI 别忘了跑测试、别忘关联 Issue。
这是一个完整工作流的技能包。
通用需求(所有工具适用)
- 接收 Issue 编号作为输入
- 自动拉取 Issue 内容
- 引导 AI 执行完整的修复流程
- 有副作用:创建分支、提交代码、创建 PR → 需要用户主动触发
Claude Code 实现(详细示例)
⚠️ Claude Code 特有功能
本实战使用 Claude Code 特有的功能:
arguments:参数系统allowed-tools:工具预授权$issue-number:变量替换
其他工具用户请参考末尾的"其他工具等效做法"。
创建 .claude/skills/fix-issue/SKILL.md:
markdown
---
name: fix-issue
description: 修复指定编号的 GitHub Issue
argument-hint: "[issue-number]"
arguments:
- issue-number
disable-model-invocation: true
allowed-tools:
- Bash(gh issue view *)
- Bash(gh pr create *)
- Bash(git checkout -b *)
- Bash(git add *)
- Bash(git commit *)
---
## Issue #$issue-number 详情
!`gh issue view $issue-number`
## 修复流程
1. 分析 Issue 中描述的问题
2. 在代码库中定位相关代码
3. 创建修复分支:fix/issue-$issue-number
4. 实现修复
5. 运行相关测试确认修复有效
6. 提交变更,提交信息格式:fix: 解决 #$issue-number 的问题描述
7. 创建 PR 并关联 Issue #$issue-number设计决策解析
参数系统
调用 /fix-issue 123 时,$issue-number 被替换为 123。整个技能包中所有出现 $issue-number 的地方都会替换——包括 !command`` 中的命令参数。
allowed-tools:最小权限原则
yaml
allowed-tools:
- Bash(gh issue view *) # 查看 Issue——必需
- Bash(gh pr create *) # 创建 PR——必需
- Bash(git checkout -b *) # 创建分支——必需
- Bash(git add *) # 暂存文件——必需
- Bash(git commit *) # 提交变更——必需注意没有授权:
git push——小王想手动确认推送npm run deploy——绝对不应该在修复时部署
❌ 最小权限原则
多授权一个命令,就多一个风险面。修复 Issue 不需要推送和部署,那就不要授权。
其他工具等效做法
Cursor 用户
Cursor 没有参数系统,在 Prompt 中手动描述:
markdown
修复 GitHub Issue。请执行以下流程:
1. 用 gh issue view <编号> 查看 Issue 详情(用户会提供编号)
2. 在代码库中定位相关代码
3. 创建修复分支:fix/issue-<编号>
4. 实现修复
5. 运行相关测试
6. 提交变更,提交信息格式:fix: 解决 #<编号> 的问题描述
7. 创建 PR 并关联 Issue
注意:关键步骤(推送、部署)需用户手动确认。Windsurf 用户
yaml
fix-issue:
instructions: |
当用户请求修复 GitHub Issue 时:
- 先执行 gh issue view 查看详情
- 分析问题并定位代码
- 创建修复分支
- 实现修复并运行测试
- 创建 PR 关联 Issue📋 工具差异说明
- 参数系统:Claude Code 独有,其他工具需在 Prompt 中描述参数处理方式
- 工具预授权:Claude Code 独有
allowed-tools,其他工具通过对话框确认权限 - 最小权限原则通用:所有工具都应该只授权必需的操作,关键步骤由人确认
测试(Claude Code)
- 找一个真实的 GitHub Issue 编号
- 输入
/fix-issue <编号> - 观察 Claude 是否正确拉取 Issue 内容、执行完整流程、不执行未授权操作
练习
🎯 练习题
(Claude Code 用户)为 fix-issue 技能包增加一个辅助文件 references/commit-conventions.md,包含你团队的提交信息规范。在 SKILL.md 中引用它。
(其他工具用户)为你的工具添加 Issue 修复能力,尝试覆盖完整的修复流程。
本节小结
📌 本节核心要点
- 完整工作流技能包:6 步修复流程,参数化 Issue 编号(Claude Code 特性)
- 参数替换:
$issue-number在正文和动态注入命令中都会被替换 - 最小权限原则(通用):只授权必需的 git/gh 命令,关键步骤(推送、部署)由人确认
- 其他工具:无参数系统时,在 Prompt 中描述"用户提供编号"的处理方式
思考题
- (Claude Code 用户)如果想让技能包在创建 PR 后自动推送,你会怎么改
allowed-tools?风险是什么? - 为什么动态注入(预处理)比让 AI 自己执行命令更可靠?
- 如果 Issue 可能是 bug 也可能是 feature request,你会怎么调整流程?
- (其他工具用户)你使用的工具如何实现"关键步骤需用户确认"?有没有权限控制机制?
下一节预告
下一个实战让 AI 自动发现并调用技能包,同时展示辅助文件的使用方法。