Skip to content

Commit 27d0aba

Browse files
CodeCasterXclaude
andcommitted
refactor: 拆分安全命令为 Dependabot 和 Code Scanning 两类
将 *-security 命令重命名为 *-dependabot(专用于依赖漏洞告警), 并新建 *-codescan 命令(专用于 CodeQL 源码扫描告警), 覆盖 Claude、OpenCode、Codex、Gemini、Agents 全部 5 个平台。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent dd9b01b commit 27d0aba

27 files changed

+1120
-63
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
name: analyze-codescan
3+
description: 分析 Code Scanning (CodeQL) 告警,评估安全风险并创建修复任务。当用户要求分析 Code Scanning 告警、CodeQL 告警时触发。参数为告警编号。
4+
---
5+
6+
# 分析 Code Scanning 告警
7+
8+
分析指定的 Code Scanning(CodeQL)告警,评估安全风险并创建修复任务。
9+
10+
## 执行步骤
11+
12+
1. 获取告警信息:
13+
```bash
14+
gh api repos/{owner}/{repo}/code-scanning/alerts/<alert-number>
15+
```
16+
提取: rule (id/severity/description), tool (name), most_recent_instance (location/message)
17+
18+
2. 创建任务目录和文件,基于 .agents/templates/task.md 模板。
19+
20+
3. 定位和分析源码:
21+
- 根据 most_recent_instance.location 定位源码文件和行号
22+
- 读取告警所在的源码上下文
23+
- 理解 CodeQL 规则的含义和检测逻辑
24+
- 检查是否有其他位置也存在相同问题
25+
26+
4. 评估安全风险(代码路径可达性、可利用性、影响程度)。
27+
28+
5. 输出分析文档到 analysis.md。
29+
30+
6. 更新任务状态。
31+
32+
7. 提示下一步: plan-task 设计修复方案,或 close-codescan 关闭告警。
33+
34+
**注意**: Critical/High 级别立即处理,Medium 计划处理,Low 可延后。

.agents/skills/analyze-security/SKILL.md renamed to .agents/skills/analyze-dependabot/SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
name: analyze-security
3-
description: 分析 Dependabot 安全告警,评估安全风险并创建修复任务。当用户要求分析安全告警、评估漏洞风险时触发。参数为告警编号。
2+
name: analyze-dependabot
3+
description: 分析 Dependabot 安全告警,评估安全风险并创建修复任务。当用户要求分析 Dependabot 告警、评估依赖漏洞风险时触发。参数为告警编号。
44
---
55

66
# 分析安全告警
@@ -28,6 +28,6 @@ description: 分析 Dependabot 安全告警,评估安全风险并创建修复
2828

2929
6. 更新任务状态。
3030

31-
7. 提示下一步: plan-task 设计修复方案,或 close-security 关闭告警。
31+
7. 提示下一步: plan-task 设计修复方案,或 close-dependabot 关闭告警。
3232

3333
**注意**: Critical/High 级别立即处理,Medium 计划处理,Low 可延后。
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
---
2+
name: close-codescan
3+
description: 关闭 Code Scanning (CodeQL) 告警,需提供合理理由。当用户要求关闭 Code Scanning 告警、dismiss CodeQL 告警时触发。参数为告警编号。
4+
---
5+
6+
# 关闭 Code Scanning 告警
7+
8+
## 执行步骤
9+
10+
1. 获取告警信息:
11+
```bash
12+
gh api "repos/{owner}/{repo}/code-scanning/alerts/<alert-number>"
13+
```
14+
15+
2. 展示告警详情(规则 ID、严重程度、源码位置、告警消息)。
16+
17+
3. 询问关闭理由:
18+
1. 误报(False Positive)
19+
2. 不会修复(Won't Fix)
20+
3. 测试代码(Used in Tests)
21+
22+
4. 要求详细说明(最少 20 个字符)。
23+
24+
5. 最终确认后执行关闭:
25+
```bash
26+
gh api --method PATCH "repos/{owner}/{repo}/code-scanning/alerts/<alert-number>" -f state=dismissed -f dismissed_reason="<reason>" -f dismissed_comment="<comment>"
27+
```
28+
dismissed_reason 有效值: "false positive", "won't fix", "used in tests"
29+
30+
**注意**: 谨慎关闭高危告警,优先考虑修复源代码。建议先使用 analyze-codescan 进行详细分析。
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
name: close-security
3-
description: 关闭 Dependabot 安全告警,需提供合理理由。当用户要求关闭安全告警、dismiss 安全告警时触发。参数为告警编号。
2+
name: close-dependabot
3+
description: 关闭 Dependabot 安全告警,需提供合理理由。当用户要求关闭 Dependabot 告警、dismiss Dependabot 告警时触发。参数为告警编号。
44
---
55

66
# 关闭安全告警
@@ -28,4 +28,4 @@ description: 关闭 Dependabot 安全告警,需提供合理理由。当用户
2828
gh api --method PATCH "repos/{owner}/{repo}/dependabot/alerts/<alert-number>" -f state=dismissed -f dismissed_reason="<reason>" -f dismissed_comment="<comment>"
2929
```
3030

31-
**注意**: 谨慎关闭高危告警,优先考虑修复。建议先使用 analyze-security 进行详细分析。
31+
**注意**: 谨慎关闭高危告警,优先考虑修复。建议先使用 analyze-dependabot 进行详细分析。
Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
---
2+
name: "analyze-codescan"
3+
description: "分析 Code Scanning 告警并创建安全分析文档"
4+
usage: "/analyze-codescan <alert-number>"
5+
---
6+
7+
# Analyze Code Scanning Command
8+
9+
## 功能说明
10+
11+
分析指定的 Code Scanning(CodeQL)告警,评估安全风险并创建修复任务,输出安全分析文档。
12+
13+
## 执行流程
14+
15+
### 1. 获取告警信息
16+
17+
```bash
18+
gh api repos/{owner}/{repo}/code-scanning/alerts/<alert-number>
19+
```
20+
21+
提取关键信息:
22+
- `number`: 告警编号
23+
- `state`: 状态(open/dismissed/fixed)
24+
- `rule`: 规则信息
25+
- `id`: 规则 ID(如 `java/sql-injection`
26+
- `severity`: 严重程度(error/warning/note)
27+
- `description`: 规则描述
28+
- `security_severity_level`: 安全严重级别(critical/high/medium/low)
29+
- `tool`: 扫描工具信息
30+
- `name`: 工具名(如 CodeQL)
31+
- `version`: 版本
32+
- `most_recent_instance`: 最近发现的实例
33+
- `location`: 文件位置(path/start_line/end_line)
34+
- `message`: 告警消息
35+
- `state`: 实例状态
36+
- `html_url`: GitHub 上的告警链接
37+
38+
### 2. 创建任务目录和文件
39+
40+
检查是否已存在该告警的任务:
41+
-`.ai-workspace/active/` 中搜索相关任务
42+
- 如果找到,询问是否重新分析
43+
- 如果没有,创建新任务
44+
45+
**任务目录结构**
46+
```
47+
.ai-workspace/active/TASK-{yyyyMMdd-HHmmss}/
48+
├── task.md ← 使用 .agents/templates/task.md 模板创建
49+
└── analysis.md ← 本命令将创建此文件
50+
```
51+
52+
⚠️ **重要**
53+
- 任务目录命名:`TASK-{yyyyMMdd-HHmmss}`**必须**包含 `TASK-` 前缀)
54+
- 示例:`TASK-20260205-202013`
55+
- 任务ID(`{task-id}`)即为目录名:`TASK-{yyyyMMdd-HHmmss}`
56+
57+
任务元数据(在 task.md 的 YAML front matter 中)需包含:
58+
```yaml
59+
id: TASK-{yyyyMMdd-HHmmss}
60+
codescan_alert_number: <alert-number>
61+
severity: <critical/high/medium/low>
62+
rule_id: <rule-id>
63+
tool: <tool-name>
64+
```
65+
66+
### 3. 定位和分析源码
67+
68+
**必须完成的分析**:
69+
- [ ] 根据 `most_recent_instance.location` 定位源码文件和行号
70+
- [ ] 读取告警所在的源码上下文(前后 20 行)
71+
- [ ] 理解 CodeQL 规则的含义和检测逻辑
72+
- [ ] 分析代码为什么触发了该规则
73+
- [ ] 检查是否有其他位置也存在相同问题(使用 Grep 工具)
74+
- [ ] 评估是否为误报(代码逻辑是否确实存在安全隐患)
75+
76+
### 4. 评估安全风险
77+
78+
**必须完成的风险评估**:
79+
- [ ] 评估漏洞的实际影响(是否可被利用)
80+
- [ ] 分析代码路径是否可达(外部输入能否到达漏洞点)
81+
- [ ] 评估对系统安全性的影响程度
82+
- [ ] 识别潜在的攻击向量
83+
- [ ] 确定修复的紧急程度
84+
- [ ] 评估修复的复杂度和风险
85+
86+
### 5. 输出分析文档
87+
88+
创建 `.ai-workspace/active/{task-id}/analysis.md`,必须包含以下章节:
89+
90+
注意:`{task-id}` 格式为 `TASK-{yyyyMMdd-HHmmss}`,例如 `TASK-20260205-202013`
91+
92+
```markdown
93+
# Code Scanning 告警分析报告
94+
95+
## 告警基本信息
96+
97+
- **告警编号**: #{alert-number}
98+
- **严重程度**: {critical/high/medium/low} 🔴/🟠/🟡/🟢
99+
- **规则 ID**: {rule-id}
100+
- **扫描工具**: {tool-name} {tool-version}
101+
- **告警状态**: {open/dismissed/fixed}
102+
- **规则描述**: {rule-description}
103+
104+
## 告警详情
105+
106+
### 源码位置
107+
- **文件路径**: `{file-path}`
108+
- **行号范围**: L{start-line} - L{end-line}
109+
- **告警消息**: {message}
110+
111+
### 代码上下文
112+
```{language}
113+
// 告警所在的代码片段(包含前后上下文)
114+
{code-snippet}
115+
```
116+
117+
### 规则说明
118+
{详细解释 CodeQL 规则检测的安全问题类型}
119+
120+
## 影响范围评估
121+
122+
### 直接影响的代码
123+
- `{file-path}:{line-number}` - {说明}
124+
125+
### 相同模式的其他位置
126+
- {搜索项目中是否有类似的代码模式}
127+
128+
## 安全风险评估
129+
130+
### 漏洞可利用性
131+
- [ ] 外部输入能否到达该代码路径?
132+
- [ ] 是否有输入验证或过滤?
133+
- [ ] 当前配置是否暴露了漏洞?
134+
135+
**结论**: {高/中/低风险 - 说明理由}
136+
137+
### 攻击向量
138+
{描述可能的攻击方式}
139+
140+
### 影响程度
141+
{评估对系统安全性、数据完整性、可用性的影响}
142+
143+
### 紧急程度
144+
{根据严重程度和可利用性确定修复的紧急程度}
145+
146+
## 修复建议
147+
148+
### 推荐修复方式
149+
{具体的代码修改建议}
150+
151+
### 修复复杂度
152+
{评估修复的难度和工作量}
153+
154+
## 技术依赖和约束
155+
156+
{列出修复时需要考虑的技术依赖和约束条件}
157+
158+
## 参考链接
159+
160+
- GitHub Alert: {html_url}
161+
- CodeQL Rule: https://codeql.github.com/codeql-query-help/{language}/{rule-id}/
162+
- {其他相关文档}
163+
```
164+
165+
### 6. 更新任务状态
166+
167+
更新 `.ai-workspace/active/{task-id}/task.md`:
168+
- `current_step`: security-analysis
169+
- `assigned_to`: claude
170+
- `updated_at`: {当前时间}
171+
- 标记 analysis.md 为已完成
172+
173+
### 7. 告知用户
174+
175+
输出格式:
176+
```
177+
🔍 Code Scanning 告警 #{alert-number} 分析完成
178+
179+
**告警信息**:
180+
- 严重程度: {severity}
181+
- 规则: {rule-id}
182+
- 工具: {tool-name}
183+
- 位置: {file-path}:{line-number}
184+
185+
**任务信息**:
186+
- 任务ID: {task-id}
187+
- 任务标题: {title}
188+
- 风险等级: {高/中/低}
189+
190+
**输出文件**:
191+
- 任务文件: .ai-workspace/active/{task-id}/task.md
192+
- 分析文档: .ai-workspace/active/{task-id}/analysis.md
193+
194+
**下一步**:
195+
审查安全分析后,使用以下命令设计修复方案:
196+
- Claude Code / OpenCode: `/plan-task {task-id}`
197+
- Gemini CLI: `/fit:plan-task {task-id}`
198+
- Codex CLI: `/prompts:fit-plan-task {task-id}`
199+
200+
如果是误报,可以使用以下命令关闭告警:
201+
- Claude Code / OpenCode: `/close-codescan {alert-number}`
202+
- Gemini CLI: `/fit:close-codescan {alert-number}`
203+
- Codex CLI: `/prompts:fit-close-codescan {alert-number}`
204+
```
205+
206+
## 参数说明
207+
208+
- `<alert-number>`: Code Scanning 告警编号(必需)
209+
210+
## 使用示例
211+
212+
```bash
213+
# 分析 Code Scanning 告警 #5
214+
/analyze-codescan 5
215+
```
216+
217+
## 注意事项
218+
219+
1. **告警验证**
220+
- 执行前检查告警是否存在
221+
- 如果告警已关闭,询问用户是否继续分析
222+
223+
2. **严重程度优先级**
224+
- Critical/High: 立即处理
225+
- Medium: 计划处理
226+
- Low: 可延后处理
227+
228+
3. **职责范围**
229+
- 专注于信息收集和风险评估
230+
- 不制定具体修复方案(修复方案在 `/plan-task` 阶段设计)
231+
- 分析完成后建议人工审查
232+
233+
4. **误报识别**
234+
- 检查代码路径是否可达
235+
- 评估输入是否可控
236+
- 如确认是误报,建议使用 `/close-codescan` 关闭
237+
238+
5. **紧急程度标注**
239+
- Critical/High 级别的告警需要明确标注紧急程度
240+
241+
## 相关命令
242+
243+
- `/close-codescan <alert-number>` - 关闭 Code Scanning 告警(需提供理由)
244+
- `/analyze-dependabot <alert-number>` - 分析 Dependabot 依赖漏洞告警
245+
- `/plan-task <task-id>` - 设计修复方案
246+
- `/check-task <task-id>` - 查看任务状态
247+
248+
## 错误处理
249+
250+
- 告警不存在:提示 "Code Scanning 告警 #{number} 不存在,请检查告警编号"
251+
- 网络错误:提示 "无法连接到 GitHub,请检查网络连接"
252+
- 权限错误:提示 "没有访问该仓库的权限,请检查 GitHub CLI 认证状态"
253+
- API 限制:提示 "GitHub API 请求限制,请稍后重试"

0 commit comments

Comments
 (0)