OpenCode 与 GitHub 深度集成实战指南:用 /opencode 评论驱动 Issue 修复与 PR 审查

在日常开发中,Issue 分类、Bug 修复、PR 审查这些重复性工作往往占据了开发者大量时间。虽然 OpenCode 作为终端里的 AI 编程助手已经足够强大,但它的能力被局限在本地终端中——只有你打开终端时才能使用。如果能让 AI 直接出现在 GitHub 的 Issue 和 Pull Request 里,任何协作者都能随时调用它,那将是怎样一番体验?

OpenCode 官方提供了与 GitHub 的原生集成方案:只要在评论中提及 /opencode/oc,OpenCode 就会在你的 GitHub Actions 运行器(runner)里执行任务,自动创建分支、提交代码、打开 PR。本文将从零开始,带你完整掌握这套工作流。

核心特性

在开始配置之前,先了解这套集成为我们带来了什么:

  • Issue 分类(Triage):让 OpenCode 分析一个 Issue 并向你解释问题所在,甚至给出修复建议。
  • 修复与实现(Fix and implement):对 Issue 说一句 fix this,OpenCode 会自动在新分支中实现修改并提交 PR。
  • 安全可靠(Secure):OpenCode 运行在 GitHub 自己的 runner 上,代码和密钥都不经过第三方服务器。

这意味着团队成员不需要安装任何本地环境,只要会发评论,就能借助 AI 完成从分析到提交 PR 的全流程。

快速安装

如果你的项目已经在 GitHub 上,最简单的方式是直接运行安装命令:

opencode github install

这个命令会引导你完成三步操作:安装 GitHub App、创建工作流文件、配置 secrets。全程交互式,基本不需要手动处理。

手动配置

有些场景下你可能希望手动控制每一个细节(比如在 CI 里自动部署工作流文件),下面介绍手动配置的完整流程。

第一步:安装 GitHub App

前往 github.com/apps/opencode-agent,确保它被安装到目标仓库。

第二步:创建工作流文件

在仓库中创建 .github/workflows/opencode.yml,这是整个集成的核心:

name: opencode
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

jobs:
  opencode:
    if: |
      contains(github.event.comment.body, '/oc') ||
      contains(github.event.comment.body, '/opencode')
    runs-on: ubuntu-latest
    permissions:
      id-token: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          fetch-depth: 1
          persist-credentials: false

      - name: Run OpenCode
        uses: anomalyco/opencode/github@latest
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        with:
          model: anthropic/claude-sonnet-4-20250514

工作流通过 if 条件判断评论里是否包含 /oc/opencode 关键字,只有命中时才触发。model 是必填参数,格式为 provider/model

第三步:配置密钥

在仓库的 Settings → Secrets and variables → Actions 中添加你的 API key(如 ANTHROPIC_API_KEY)。这是 AI 执行任务时使用的模型凭证。

支持的事件类型

OpenCode 的 GitHub Action 支持多种事件触发方式,下面是完整的对照表:

| 事件类型 | 触发时机 | 说明 |
| --- | --- | --- |
| issue_comment | Issue 或 PR 上的评论 | 评论中含 /opencode 即触发,可读上下文、建分支、开 PR |
| pull_request_review_comment | PR 代码行上的评论 | 自动获取文件路径、行号和 diff 上下文 |
| issues | Issue 被创建或编辑 | 自动分类,需提供 prompt |
| pull_request | PR 被打开或更新 | 自动审查代码,需配合 prompt |
| schedule | Cron 定时任务 | 需提供 prompt,输出到日志和 PR |
| workflow_dispatch | GitHub UI 手动触发 | 需提供 prompt |

实战场景一:定时巡检

想每周一早上 9 点让 AI 自动扫描代码库中的 TODO 注释并汇总?使用 schedule 事件:

name: Scheduled OpenCode Task
on:
  schedule:
    - cron: "0 9 * * 1" # 每周一 9:00 UTC

jobs:
  opencode:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
      pull-requests: write
      issues: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          persist-credentials: false

      - name: Run OpenCode
        uses: anomalyco/opencode/github@latest
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        with:
          model: anthropic/claude-sonnet-4-20250514
          prompt: |
            Review the codebase for any TODO comments and create a summary.
            If you find issues worth addressing, open an issue to track them.

注意:定时任务没有评论可以提取指令,所以 prompt 是必填项。同时因为运行在无人值守环境,工作流需要显式授予 contents: writepull-requests: write 权限,AI 才能创建分支和 PR。

实战场景二:PR 自动审查

当 PR 被打开、同步或重新开启时自动触发代码审查,省去人工初审环节:

name: opencode-review
on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
      pull-requests: read
      issues: read
    steps:
      - uses: actions/checkout@v6
        with:
          persist-credentials: false

      - uses: anomalyco/opencode/github@latest
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          model: anthropic/claude-sonnet-4-20250514
          use_github_token: true
          prompt: |
            Review this pull request:
            - Check for code quality issues
            - Look for potential bugs
            - Suggest improvements

这里通过 GITHUB_TOKEN 实现只读审查(contents: readpull-requests: read),更符合安全最小权限原则。如果没有提供 prompt,OpenCode 默认会执行 PR 审查。

实战场景三:Issue 自动分类

面对涌入的 Issue,可以用 issues 事件实现自动化分类。下面的示例还通过检查账号年龄来过滤垃圾 Issue:

name: Issue Triage
on:
  issues:
    types: [opened]

jobs:
  triage:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
      pull-requests: write
      issues: write
    steps:
      - name: Check account age
        id: check
        uses: actions/github-script@v7
        with:
          script: |
            const user = await github.rest.users.getByUsername({
              username: context.payload.issue.user.login
            });
            const created = new Date(user.data.created_at);
            const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
            return days >= 30;
          result-encoding: string

      - uses: actions/checkout@v6
        if: steps.check.outputs.result == 'true'
        with:
          persist-credentials: false

      - uses: anomalyco/opencode/github@latest
        if: steps.check.outputs.result == 'true'
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        with:
          model: anthropic/claude-sonnet-4-20250514
          prompt: |
            Review this issue. If there's a clear fix or relevant docs:
            - Provide documentation links
            - Add error handling guidance for code examples
            Otherwise, do not comment.

issues 事件同样要求必须提供 prompt,因为 AI 无法从评论中提取指令。

自定义 Prompt

prompt 参数让我们可以完全定制 OpenCode 的行为,从而适配团队的编码规范或审查标准。比如强制审查标准:

- uses: anomalyco/opencode/github@latest
  with:
    model: anthropic/claude-sonnet-4-5
    prompt: |
      Review this pull request:
      - Check for code quality issues
      - Look for potential bugs
      - Suggest improvements

日常使用示例

配置完成后,团队里的任何人都可以通过评论触发 AI 工作流:

解释一个 Issue:

/opencode explain this issue

OpenCode 会读取整个讨论串(包括所有评论),然后给出清晰的问题解释。

修复一个 Issue:

/opencode fix this

OpenCode 会自动创建新分支、实现修改,并提交一个包含全部改动的 PR。

在 PR 上请求修改:

Delete the attachment from S3 when the note is removed /oc

OpenCode 会实现这个改动并提交到当前 PR。

针对特定代码行请求帮助:

在 PR 的 "Files" 标签页直接对某行代码评论:

[评论具体代码行] /oc add error handling here

OpenCode 会自动感知文件、行号和 diff 上下文,无需手动指定文件路径。

关于权限与 Token 的补充说明

  • 默认情况下,OpenCode 使用 GitHub App 的安装访问令牌执行操作,因此提交、评论和 PR 都显示为来自 App 本身。
  • 如果不想安装 GitHub App,也可以在 workflow 中授予内置 GITHUB_TOKEN 相应权限,或使用个人访问令牌(PAT)。
  • 需要写权限时,记得在 permissions 中声明 contents: writepull-requests: writeissues: write;只读审查场景则只声明 read 权限。

总结

OpenCode 与 GitHub 的集成,本质上是把"AI 编程助手"从本地终端搬到了协作核心的代码托管平台。通过 issue_commentpull_requestschedule 等事件组合,你可以构建出覆盖"Issue 分类 → Bug 修复 → PR 审查 → 定时巡检"的完整自动化闭环。整个配置只需要一个 YAML 文件,团队成员零学习成本即可参与。

建议从最简单的 /opencode explain this issue 开始试用,再逐步叠加自动审查和定时任务,让 AI 真正成为你团队的常驻开发力量。