Skip to content

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)

  1. 找一个真实的 GitHub Issue 编号
  2. 输入 /fix-issue <编号>
  3. 观察 Claude 是否正确拉取 Issue 内容、执行完整流程、不执行未授权操作

练习

🎯 练习题

(Claude Code 用户)为 fix-issue 技能包增加一个辅助文件 references/commit-conventions.md,包含你团队的提交信息规范。在 SKILL.md 中引用它。

(其他工具用户)为你的工具添加 Issue 修复能力,尝试覆盖完整的修复流程。


本节小结

📌 本节核心要点

  • 完整工作流技能包:6 步修复流程,参数化 Issue 编号(Claude Code 特性)
  • 参数替换$issue-number 在正文和动态注入命令中都会被替换
  • 最小权限原则(通用):只授权必需的 git/gh 命令,关键步骤(推送、部署)由人确认
  • 其他工具:无参数系统时,在 Prompt 中描述"用户提供编号"的处理方式

思考题

  1. (Claude Code 用户)如果想让技能包在创建 PR 后自动推送,你会怎么改 allowed-tools?风险是什么?
  2. 为什么动态注入(预处理)比让 AI 自己执行命令更可靠?
  3. 如果 Issue 可能是 bug 也可能是 feature request,你会怎么调整流程?
  4. (其他工具用户)你使用的工具如何实现"关键步骤需用户确认"?有没有权限控制机制?

下一节预告

下一个实战让 AI 自动发现并调用技能包,同时展示辅助文件的使用方法。

下一节:实战三——项目仪表盘技能包