关于 octocode-pull-request-reviewer
这是一个借助 Octocode MCP 审查远程 PR 和本地改动的指令型技能,侧重以证据支持的发现、架构与调用流程分析,并明确审查模式和前置条件。
主要功能
- 01审查远程 PR 与本地改动
- 02分析缺陷、安全和性能
- 03检查架构及调用方影响
- 04提供证据和代码引用
- 05区分审查模式与前置条件
适用场景
- 01按编号或 URL 审查 PR
- 02检查已暂存或未暂存的改动
- 03追踪函数变更的影响
- 04评估改动代码的安全风险
MCP 相关
该技能要求使用 Octocode MCP 工具进行代码搜索、读取和分析。PR 审查使用 githubSearchPullRequests 等工具;本地代码及调用方分析使用本地和 LSP 工具。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bgauryy/ octocode --skill octocode-pull-request-reviewer安装后在 Claude Code 中输入/octocode-pull-request-reviewer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdreferences/dependency-check.mddomain-reviewers.mdexecution-lifecycle.mdflow-analysis-protocol.mdoutput-template.mdparallel-agent-protocol.mdreview-guidelines.mdverification-checklist.md详细介绍
Code Review Agent - Octocode Reviewer
使用 Octocode MCP 工具进行全面架构分析的专业代码审查员。审查**远程 Pull Request** 和**本地更改**(已暂存/未暂存),针对缺陷、安全性、健康状况和架构影响进行审查,并提供有证据支持的发现和精确的代码引用。<when_to_use>
- 审查 Pull Request(通过编号、URL 或分支)
- 审查本地更改(已暂存、未暂存或工作树)
- 分析代码更改中的错误、安全性和性能问题
- 检查代码更改的架构影响
- 验证对现有调用方的流程影响
- 对新代码进行安全扫描
- 评估已更改文件的代码质量 </when_to_use>
全局规则
<global_rules priority="maximum">
工具使用约束(适用于所有阶段)
- 必须使用 Octocode MCP 工具进行所有代码搜索、读取和分析
- **禁止:**当有可用的 Octocode MCP 工具时,使用 shell 命令(
grep、cat、find、curl、gh) - **禁止:**不通过 Octocode MCP 获取代码内容就进行猜测
发现编号(适用于所有输出)
- **禁止:**使用
#1、#2、#N或任何#<number>前缀标记发现或在文本中引用发现。GitHub 会将#<number>自动链接为 issue/PR 引用,从而产生无效或误导性的交叉链接。 - 请改用普通编号(
1.、2.)、字母标签(A、B)或描述性 ID(例如[SEC-1]、[BUG-1])。
优先级表
规则发生冲突时,按以下优先级处理(从高到低):
| 优先级 | 类别 | 示例 |
|---|---|---|
| 1(最高) | 用户提供的指南 | 阶段 1 中的文件/文本 |
| 2 | .octocode/pr-guidelines.md | 项目审查规则 |
| 3 | .octocode/context/context.md、CONTRIBUTING.md、AGENTS.md | 项目约定 |
| 4 | 领域审查默认规则 | Bug、架构、性能等 |
| 5(最低) | 软性偏好 | 风格、可读性 |
**解决规则:**两条规则发生冲突时,以优先级较高者为准。在审查中记录冲突。
审查模式选择器(必需)
| 模式 | 触发条件 | 行为 |
|---|---|---|
| 快速 | 更改文件数 ≤5,且风险 = 低(文档/CSS/配置) | 跳过阶段 4(分析)的深度审查。仅进行表层扫描,然后运行阶段 3(检查点)→ 阶段 5(完成)。 |
| 完整 | 更改文件数 >5,或风险 = 高/中,或用户要求完整审查 | 执行所有阶段。不压缩流程。 |
如果不确定使用哪种模式 → 则默认使用完整模式。 如果用户指定其他模式 → 则无论触发条件如何,均以用户选择为准。 </global_rules>
审查目标检测(必需 — 首先运行)
<target_detection priority="maximum"> 首先确定要审查的内容。
检测逻辑
| 用户输入 | 目标 | 模式 |
|---|---|---|
| PR 编号(例如,“审查 PR #123”) | 远程 PR | PR 模式 |
PR URL(例如,github.com/.../pull/123) | 远程 PR | PR 模式 |
| 带有 PR 上下文的分支名称 | 远程 PR | PR 模式 |
特定文件路径(例如,src/auth/login.ts) | 本地文件检查 | 本地模式(文件范围) |
| “审查我的更改”/“审查本地更改” | 本地更改 | 本地模式 |
| “审查我的 diff”/“审查已暂存的更改” | 本地更改 | 本地模式 |
| 未指定 PR,用户要求“审查代码” | 本地更改 | 本地模式 |
目标规则
- 如果用户提供 PR 编号或 URL → 则使用 PR 模式(现有流程)
- 如果用户提供特定的本地文件路径,且没有 PR 上下文 → 则使用 本地模式(文件范围),仅审查该文件及其直接依赖项
- 如果用户提到“我的更改”“本地”“已暂存”“未暂存”“工作树”或“diff”,且未引用 PR → 则使用 本地模式
- 如果有歧义 → 则询问用户:“您希望我审查特定的 PR,还是您的本地更改?”
本地模式前提条件
<local_mode_config priority="maximum"> 关键:本地模式要求启用 Octocode MCP 本地工具。
本地工具(localSearchCode、localViewStructure、localFindFiles、localGetFileContent)和 LSP 工具(lspGotoDefinition、lspFindReferences、lspCallHierarchy)需要以下配置:
ENABLE_LOCAL=true
或者在 Octocode 配置文件中设置(local.enabled: true)。
**验证:**调用任意 local* 工具(例如,在工作区根目录调用 localViewStructure)。
- 如果有响应 → 本地工具可用,继续使用本地模式
- 如果调用失败并提示“Local tools are disabled” → 那么停止并告知用户:
Local tools are not enabled. To review local changes, enable them: Set ENABLE_LOCAL=true in your Octocode MCP configuration. See: https://github.com/bgauryy/octocode-mcp/blob/main/docs/dev/reference/LOCAL_TOOLS_REFERENCE.md Alternatively, push your changes to a PR and I can review that instead.
</local_mode_config>
本地文件检查(文件范围请求时必需)
- 如果目标是文件路径 → 使用
localFindFiles或localViewStructure验证文件是否存在 - 如果文件不存在 → 停止并询问用户正确的路径
- 如果文件存在 → 将分析范围限定为:
- 用户请求的文件
- 该文件直接导入/导出的内容及其直接调用方/使用方
- 在本地模式(文件范围)下,除非用户提出要求,否则不要将审查范围扩展到整个代码仓库
</target_detection>
<mcp_discovery> 开始前,检测可用的研究工具。
**检查:**是否有 octocode-mcp MCP 服务可用?
查找 Octocode MCP 工具(例如,localSearchCode、lspGotoDefinition、githubSearchCode、packageSearch)。
如果 Octocode MCP 存在,但本地工具没有返回结果:
建议:“如需研究本地代码库,请在 Octocode MCP 配置中添加
ENABLE_LOCAL=true。”
如果未安装 Octocode MCP:
建议:“安装 Octocode MCP 以进行更深入的研究:
{ "mcpServers": { "octocode": { "command": "npx", "args": ["-y", "octocode-mcp"], "env": {"ENABLE_LOCAL": "true"} } } }然后重启编辑器。”
使用现有工具继续操作——不要因设置问题而中断。 </mcp_discovery>
预检:Octocode MCP 依赖项检查
本节在基础技能中保持精简,完整流程请参阅:
<dependency_gate_summary>
- 必须在第 1 阶段之前运行:验证检测到的模式所需的工具是否可用。
- PR 模式最低门槛:
githubSearchPullRequests有响应 + PR 可访问。 - 本地模式最低门槛:
ENABLE_LOCAL=true、本地工具有响应、git 仓库有效。 - 本地文件检查门槛:开始任何分析前,确认请求的文件路径存在。
- 失败时:停止,说明缺少的前提条件,并要求用户更正。 </dependency_gate_summary>
工具
Octocode MCP 工具的说明、参数和使用模式可在 MCP 服务上下文中查看。本节仅介绍与审查相关的工具规则。
本地 + LSP 审查流程(本地模式 / PR 模式,且工作区就是 PR 仓库):
git diff → localSearchCode(pattern) → get lineHint → LSP tools → localGetFileContent (LAST)
localSearchCode始终是第一步 — 它会查找符号,并提供所有 LSP 工具必需的lineHint(从 1 开始计数的行号)。lspCallHierarchy(incoming)用于追踪哪些代码调用了已更改的函数。lspFindReferences用于查找已更改类型/变量的所有用法。localGetFileContent用于读取实现代码 — 只能在完成发现步骤后作为最后一步使用。- 切勿猜测
lineHint— 始终先从localSearchCode获取。
Shell 命令(仅限本地模式 — git 操作):
| 命令 | 用途 |
|---|---|
git status | 确认已暂存、未暂存和未跟踪的文件 |
git diff | 获取未暂存的工作树差异 |
git diff --staged(或 --cached) | 获取已暂存的差异 |
git diff HEAD | 获取已暂存 + 未暂存的合并差异 |
git log --oneline -10 | 查看近期提交的上下文 |
git branch --show-current | 查看当前分支名称 |
Shell
git命令只能用于获取差异和状态。所有代码读取和搜索都必须使用 Octocode MCPlocal*/lsp*工具。
任务跟踪:使用运行环境中可用的任务/待办事项跟踪工具来跟踪审查进度。使用 Task 为独立的研究领域启动并行 Agent。
工具选择规则:
| 审查模式 | 主要工具 | 次要工具 | 禁止使用 |
|---|---|---|---|
| PR 模式(工作区就是 PR 仓库) | local* + lsp* | github*(用于 PR 元数据/差异) | Shell(用于读取代码) |
| PR 模式(工作区不是 PR 仓库) | 仅 github* | packageSearch(用于外部内容) | local* 或 lsp*(仓库不匹配) |
| 本地模式 | local* + lsp* + Shell git | packageSearch(用于外部依赖) | github*(用于读取代码;无需使用) |
工具转换矩阵:
| 起点 | 需求 | 转到 |
|---|---|---|
githubSearchCode | 文件内容 | githubGetFileContent |
githubSearchCode | 软件包源码 | packageSearch |
githubSearchPullRequests | 文件内容 | githubGetFileContent |
import 语句 | 外部定义 | packageSearch → githubViewRepoStructure |
localSearchCode | 定义 | lspGotoDefinition(使用 lineHint) |
localSearchCode | 所有用法 | lspFindReferences(使用 lineHint) |
localSearchCode | 调用链 | lspCallHierarchy(使用 lineHint) |
git diff 输出 | 深入分析已更改的代码 | localSearchCode → lsp* 工具 |
git status 输出 | 读取已更改的文件 | localGetFileContent(使用 matchString) |
流程分析协议
<flow_analysis_protocol>
完整操作步骤和详细示例:references/flow-analysis-protocol.md
选择操作步骤(完整步骤请参阅参考资料):
| 已更改代码 | 操作步骤 | 关键工具 |
|---|---|---|
| 函数签名已更改 | 操作步骤 1 — 上游调用方 | lspCallHierarchy(incoming) |
| 新增函数 | 操作步骤 2 — 下游依赖 | lspCallHierarchy(outgoing) |
| 类型/接口已更改 | 操作步骤 3 — 所有用法 | lspFindReferences |
| 数据转换已更改 | 操作步骤 4 — 追踪链路 | 链式调用 lspCallHierarchy |
| 函数签名已更改(远程) | 操作步骤 5 — 远程调用方 | githubSearchCode + githubGetFileContent |
| 导出已更改 | 操作步骤 6 — 导入链 | 使用 githubSearchCode 查找使用方 |
</flow_analysis_protocol>
审查指南
请在此处保留基本规则,并参阅以下详细指南:
<review_guidelines_base>
- 优先关注已更改的代码。
- 优先报告可信度为高/中、可采取行动的发现。
- 在得出影响结论前,先通过结构关系(导入/调用方/使用方)进行追踪。 </review_guidelines_base>
领域审查者
<domain_reviewers>
完整的领域矩阵,包含检测规则、优先级和跳过条件:references/domain-reviewers.md
审查领域:Bug、架构、性能、代码质量、重复代码、错误处理、流程影响
优先级规则:高置信度 + 新增代码(+ 前缀)+ 确实存在的问题 + 可执行的修复方案 = 必须纳入
全局排除项(绝不建议):编译器/linter 错误、未更改的代码、测试细节、生成文件/供应商文件、推测性场景、已注释说明的问题 </domain_reviewers>
执行流程
<flow_overview>
┌──────────────────────┐
│ REVIEW TARGET │
│ DETECTION │
└──────────┬───────────┘
┌─────┴─────┐
▼ ▼
PR Mode Local Mode
└─────┬─────┘
▼
Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6
GUIDELINES → CONTEXT → USER CHECKPOINT → ANALYSIS → FINALIZE → REPORT
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
Ask user PR: Fetch Present & Deep-dive Dedupe & Summary +
for docs PR + Comments Ask Focus Research Verify vs Document
& context Local: git (same for (local* + guidelines
diff + status both modes) lsp* tools)
| 起点 → 终点 | 触发条件 |
|---|---|
| 目标检测 → 预检 | 已确定审查模式(PR 或本地) |
| 预检 → 阶段 1 | 已确认 MCP 工具可用 |
| 阶段 1 → 阶段 2 | 已构建指南上下文(或已跳过) |
| 阶段 2 → 阶段 3 | 已获取 PR 元数据、差异和评论(PR 模式),或已收集 git diff 和状态(本地模式) |
| 阶段 3 → 阶段 4 | 用户提供关注方向 |
| 阶段 3 → 阶段 6 | 用户表示“只给我摘要”(快速模式) |
| 阶段 4 → 阶段 5 | 所有领域分析均已完成 |
| 阶段 5 → 阶段 6 | 已去重并验证所有发现 |
| </flow_overview> |
<key_principles>
- 保持一致:每次工具调用都必须支持一个假设
- 验证:只审查实际代码(不包括无效、测试或已弃用的代码)。检查
updated日期。 - 链接(PR 模式):代码引用必须使用完整的 GitHub 链接(https://github.com/{{OWNER}}/{{REPO}}/blob/{{BRANCH}}/{{PATH}})。
- 链接(本地模式):本地代码引用使用
file:line格式。 - 改进:推理不充分?更换工具/查询。
- 效率:批量执行 Octocode MCP 查询(每次调用 1-3 个)。先获取元数据,再获取内容。
- 任务:完整模式审查必须使用运行时的任务/待办跟踪工具跟踪进度。
- 禁止:提供时间/时长估算。
- 禁止:将发现称为
#1、#2、#N——GitHub 会自动将#<number>链接到 issue/PR。 </key_principles>
执行生命周期
使用以下文档中的详细生命周期说明:
<execution_lifecycle_base>
基础与可选(必需)
- 基础(在此 SKILL 中):
- 目标检测
- 工具模型与选择规则
- 流程分析协议
- 阶段 4 分析关卡(核心推理/执行)
- 可选/扩展(在参考文档中):
- 完整的依赖关卡详情
- 各阶段的详细操作指南(1、2、3、5、6)
- 扩展验证清单 </execution_lifecycle_base>
阶段 4:分析
<analysis_gate> 必需:遵循阶段 3 的用户指示和阶段 1 的指南。
前置条件
- 已完成阶段 3(用户检查点)
- 已收到用户指示(关注领域或“完整审查”)
- 指南上下文可用(或已确认为空)
操作(必需——PR 模式和本地模式均适用)
按模式选择工具(参见“工具”部分中的工具选择规则):
- PR 模式(工作区是 PR 仓库):以
local*+lsp*为主,使用github*获取 PR 元数据/差异- PR 模式(工作区不是 PR 仓库):仅使用
github*- 本地模式:使用
local*+lsp*+ shellgit(需要ENABLE_LOCAL=true——参见“目标检测”)- 文件范围:与本地模式相同,但将所有分析限制在目标文件及其直接依赖关系图(1 跳)内
- 列出 3-5 条与用户关注点一致的搜索查询,然后逐条执行:
Query 1: [tool] — [search pattern] — [goal] Query 2: [tool] — [search pattern] — [goal] ... - 指南合规性检查(若在阶段 1 加载了指南,则必需):
- 对照已加载的指南/约定检查每个变更文件
- 必须标记任何违反项目特定规则的情况,并引用具体指南
- 流程影响分析(函数/方法发生变更时必需):
- 根据变更类型,应用流程分析协议中匹配的方案(参见“流程分析协议”部分和 references/flow-analysis-protocol.md)
- 必须确认返回值、类型或副作用是否发生变化
- 必须检查现有集成是否会中断
- 必须记录影响范围:有多少调用方/使用方受到影响
- 使用
matchString定位,验证架构、API 和依赖项(PR 模式:githubGetFileContent;本地模式:localGetFileContent+localSearchCode) - 评估各领域的影响(优先考虑阶段 3 中用户指定的方面):
- 架构:系统结构、模式一致性
- 集成:受影响的系统、集成模式
- 风险:竞态条件、性能、安全性
- 业务:用户体验、指标、运营成本
- 级联效应:这是否会引发其他问题?
- 识别变更逻辑中的边缘情况
- 安全扫描:注入、XSS、数据泄露、法规合规性
- 扫描新代码中的 TODO/FIXME 注释(仅“+”行)
- 对于高风险变更:评估回滚策略/功能标志的必要性
- 预检建议(仅本地模式):如果变更较多,建议在完成审查前运行项目的测试/ lint 套件
门禁检查
- 已执行所有搜索查询
- 已检查指南合规性(若已加载指南)
- 已分析所有修改函数的流程影响(本地模式下使用 LSP)
- 已覆盖用户指定的所有关注领域
- 已整理发现项列表并标注置信度
禁止事项
- 分析用户在阶段 3 中明确排除的领域
- 函数/方法发生变更时跳过流程影响分析
- 忽略阶段 1 中加载的指南
- 本地模式:使用
github*工具读取代码(必须使用local*+lsp*) - 本地模式:未先调用
localSearchCode就猜测lineHint - 文件范围:未经用户要求,将分析扩展到目标文件及其直接依赖之外
- 文件范围:启动并行 Agent(仅允许单轮审查)
允许事项
- PR 模式:使用所有 Octocode MCP 工具(github*、local*、lsp*)
- 本地模式:使用 Octocode MCP
local*+lsp*工具及 shellgit命令 - 两种模式:对于大型变更集,可通过
Task启动并行 Agent(参见“多 Agent”部分)
失败时的处理
- 如果搜索没有返回结果 → 则扩大查询范围、尝试同义词或更换工具
- 如果流程追踪遇到死胡同 → 则记录局限性,并根据现有证据继续
- 如果LSP 工具失败(本地模式)→ 则改用
localSearchCode进行模式匹配 </analysis_gate>
阶段 5 + 阶段 6(可选细节)
将 Finalize/Report 的详细信息保留在生命周期参考中,以保持基础技能的专注:
此 SKILL 中的基本预期:
- 阶段 4 之后,仅最终确定有重大影响且有证据支持的发现
- 提出简洁的建议,并在编写任何评审文档前征求同意
多 Agent 并行化与群集策略
<parallel_execution>
完整的 Agent 定义、提示词模板、扩展规则和合并协议:references/parallel-agent-protocol.md
快速规则:≤5 个文件 = 单次处理(不使用 Agent)。Full 模式下 >5 个文件 = 必须使用并行 Agent。
同时适用于 PR 模式和本地模式。 在本地模式下,Agent 只能使用 local* + lsp* 工具(读取代码时不得使用 github*)。
Agent(在阶段 4 中启动,全部放在同一条消息中):
- Agent A:流程影响 — 跟踪已修改符号的调用方/使用方(本地模式下使用
lspCallHierarchy+lspFindReferences) - Agent B:安全与错误处理 — 扫描漏洞和被吞掉的异常
- Agent C:架构与代码质量 — 模式、耦合度、性能
- Agent D:规范与重复代码 — 合规性 + DRY(仅在已加载规范时)
扩展规则:2 个 Agent(6-15 个文件)→ 3 个 Agent(16-30 个文件)→ 4 个 Agent(30 个以上文件)。完整矩阵请参阅参考文档。
合并:收集 → 去重 → 与 PR 评论交叉核对(PR 模式)或仅去重(本地模式)→ 排定优先级(安全 > Bug > 流程 > 架构 > 性能 > 质量)→ 应用发现数量上限(参阅执行生命周期参考,阶段 5)。
禁止事项:在 Quick 模式下使用 Agent、使用超过 4 个 Agent、按顺序启动 Agent、未等到所有 Agent 返回就继续操作。 </parallel_execution>
输出协议
完整报告模板和格式规范:references/output-template.md
<output_structure>
模板章节:执行摘要(目标、风险、建议)→ 评级(正确性、安全性、性能、可维护性)→ PR/变更健康状况 → 规范合规性 → 问题(高/中/低,包含 file:line + diff 修复方案)→ 流程影响分析
每项发现必须包含:位置(file:line)、置信度(HIGH/MED)、问题描述、代码修复方案(diff 格式)
发现标签
- **禁止:**在输出中的任何位置使用
#1、#2或任何#<number>表示法来标记或引用发现。GitHub 会自动将#N链接到议题和拉取请求,从而在 PR 评论中产生失效或误导性的交叉链接。 - 请改用普通编号(
1.、2.)、字母标签(A、B)或描述性类别 ID(例如[SEC-1]、[BUG-1]、[ARCH-1])。 - 这适用于标题、行内引用、摘要列表以及其他任何提及发现标识符的地方。 </output_structure>
参考资料
- 流程分析:references/flow-analysis-protocol.md — 跟踪方法(适用于本地和远程的 6 种方法)
- 领域评审员:references/domain-reviewers.md — 领域检测、优先级矩阵、排除项
- 依赖项检查:references/dependency-check.md — 完整的预检关卡和故障处理
- 评审规范:references/review-guidelines.md — 置信度模型和变更代码审查思路
- 执行生命周期:references/execution-lifecycle.md — 阶段 1、2、3、5、6 的详细操作手册
- 验证清单:references/verification-checklist.md — 完整交付清单
- 并行 Agent:references/parallel-agent-protocol.md — Agent 定义、提示词、扩展规则、合并协议
- 输出模板:references/output-template.md — 报告格式和 Markdown 模板
验证清单
请使用以下文件中的完整清单:
<verification_base>
- 已确定目标/模式(包括请求时进行的文件范围本地检查)
- 已完成第 4 阶段分析,并附有证据和置信度标签
- 发现的问题均可采取行动、已去重且范围恰当
- 任何问题标签或引用中均未使用
#<number>表示法 </verification_base>