跳转到主要内容
本教程演示如何在 GitHub Actions 中使用 Cursor CLI 设置代码评审。该工作流程会分析 pull request、定位问题,并以评论形式发布反馈。
对于大多数用户,推荐直接使用 Bugbot。Bugbot 提供托管的自动化代码评审,无需任何配置。CLI 方案适合用来探索能力和进行高级自定义。
自动化代码审查演示:在拉取请求中显示行内评论

配置身份验证

设置你的 API 密钥和仓库密钥,以在 GitHub Actions 中对 Cursor CLI 进行身份验证。

配置代理权限

创建一个配置文件来限制代理可执行的操作,避免发生像推送代码或创建 Pull Request 这样的意外操作。 在仓库根目录创建 .cursor/cli.json
{
  "permissions": {
    "deny": [
      "Shell(git push)",
      "Shell(gh pr create)",
      "Write(**)"
    ]
  }
}
此配置允许 agent 读取文件并使用 GitHub CLI 发表评论,但会阻止它修改你的仓库。查看权限参考以了解更多配置选项。

构建 GitHub Actions 工作流

现在我们来一步一步搭建这个工作流。

设置工作流触发器

创建 .github/workflows/cursor-code-review.yml,并将其配置为在 pull request 上运行:
name: Cursor 代码评审

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  code-review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    
    steps:

检出仓库

添加检出步骤以获取 pull request 的代码:
- name: 检出仓库
  uses: actions/checkout@v4
  with:
    fetch-depth: 0
    ref: ${{ github.event.pull_request.head.sha }}

安装 Cursor CLI

添加 CLI 的安装步骤:
- name: 安装 Cursor CLI
  run: |
    curl https://cursor.com/install -fsS | bash
    echo "$HOME/.cursor/bin" >> $GITHUB_PATH

配置审查代理

在实现完整的审查步骤之前,先弄清我们的审查提示词是怎么构成的。本节会说明我们希望代理的行为方式: 目标: 我们希望代理审查当前 PR 的 diff,只标注明确且高严重度的问题;仅在变更的行上留下非常简短的行内评论(1-2 句),并在末尾附上一段简要总结。这样可以保持良好的信噪比。 格式: 评论要简短且直击要点。我们会用表情符号便于快速扫描,并在末尾给出一次高层级的完整审查总结。 提交: 审查完成后,代理需要根据审查结果附上一段简短评论。代理应提交一次包含行内评论和精炼总结的单次审查。 边界情况: 需要处理:
  • 既有评论已被解决:当问题已修复时,代理应将其标记为已完成
  • 避免重复:如果同类反馈已存在于相同或相邻行,代理应跳过评论
最终提示词: 完整的提示词将上述行为要求组合起来,产出聚焦且可执行的反馈 现在让我们实现审查代理步骤:
- name: 执行代码审查
  env:
    CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
    GH_TOKEN: ${{ github.token }}
  run: |
    cursor-agent --force --model "$MODEL" --output-format=text --print "你当前在 GitHub Actions runner 中执行自动化代码审查。gh CLI 可用并已通过 GH_TOKEN 认证。你可以在拉取请求上发表评论。
    
    上下文:
    - 仓库:${{ github.repository }}
    - PR 编号:${{ github.event.pull_request.number }}
    - PR Head SHA:${{ github.event.pull_request.head.sha }}
    - PR Base SHA:${{ github.event.pull_request.base.sha }}
    
    目标:
    1) 复核已有审查评论,若已处理则回复:已解决
    2) 审查当前 PR diff,仅标注明确且高严重度的问题
    3) 只在变更的行留下非常简短的行内评论(1-2 句),并在末尾给出简要总结
    
    流程:
    - 获取已有评论:gh pr view --json comments
    - 获取 diff:gh pr diff
    - 若先前报告的问题似乎已被附近的更改修复,回复:✅ 此问题似乎已被最近的更改解决
    - 避免重复:如果同类反馈已在相同行或附近存在,则跳过
    
    评论规则:
    - 最多 10 条行内评论;优先处理最关键的问题
    - 每条评论只包含一个问题;放在准确的变更行
    - 语气自然,具体且可执行;不要提及自动化或高置信度
    - 使用表情:🚨 严重 🔒 安全 ⚡ 性能 ⚠️ 逻辑 ✅ 已解决 ✨ 改进
    
    提交:
    - 提交一次审查,包含行内评论与简明总结
    - 仅使用:gh pr review --comment
    - 不要使用:gh pr review --approve 或 --request-changes"
.
├── .cursor/
│   └── cli.json
├── .github/
│   └── workflows/
│       └── cursor-code-review.yml

测试你的审阅器

创建一个测试 Pull Request,确认工作流正常运行,并且代理会发布带有表情反馈的审阅评论。
Pull Request 显示自动审阅评论,包含表情符号以及针对特定代码行的内联反馈

后续步骤

现在你已经有了一个可用的自动化代码审查系统。可以考虑进一步优化:
  • 修复 CI 失败设置额外的工作流
  • 为不同分支配置不同的审查等级
  • 与团队现有的代码审查流程集成
  • 针对不同的文件类型或目录自定义 agent 的行为
I