把OpenCode接入GitHub:让AI助手在Issues和PR里跑起来

作为OpenCode的高级专家,经常有人问:这工具跟GitHub到底怎么配合?能不能像叫同事一样,在评论区喊一声就让AI干活?答案是肯定的。

OpenCode跟GitHub的集成方式其实挺直接------在Issue或PR的评论里提一句/opencode或者/oc,它就会在GitHub Actions的运行环境里把任务给执行了。整个过程不复杂,但有些细节值得拎出来说说。

能干什么活?

先说几个常见的用法场景。

解释问题(Triage issues):扔一个Issue给OpenCode,让它读一遍整个讨论串,然后给出一份清晰的说明。这对于刚接手项目或者对某块逻辑不熟的时候特别有用。

动手修Bug或开发功能(Fix and implement):跟它说"把这个修了",OpenCode会自己切一个新分支,把代码改好,最后提交一个Pull Request。从改代码到提PR,一条龙。

安全性:因为OpenCode跑在GitHub自己的Runner里面,所以访问权限、密钥这些东西都跟着仓库的配置走,不需要额外操心。

怎么装上去?

有两种方式:自动安装和手动配置。

自动安装

在项目根目录(得是一个GitHub仓库)下执行:

bash 复制代码
opencode github install

然后跟着提示走------安装GitHub App、创建工作流文件、设置密钥,一路下一步就行。

手动配置

如果喜欢自己动手,也可以分三步来。

第一步:安装GitHub App

浏览器打开 github.com/apps/opencode-agent,确认把它安装到目标仓库上。

第二步:添加工作流

在仓库的.github/workflows/opencode.yml里放一个工作流文件。内容大致如下:

yaml 复制代码
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

注意在env里面把要用到的模型和API密钥配上。

第三步:存储密钥

在组织或者项目的设置页面里,左侧找到"Secrets and variables" → "Actions",然后把需要的API密钥(比如上面的ANTHROPIC_API_KEY)添加进去。

配置项说明

手动配置的时候,with下面有几个关键参数:

  • model(必填):格式是 provider/model,告诉OpenCode用哪个模型。
  • agent(可选):指定用哪个主代理。如果不填,就回落到配置文件里的default_agent,再找不到就用"build"
  • share(可选):是否共享OpenCode会话。对于公开仓库,默认是true
  • prompt(可选):自定义的提示词,可以覆盖默认行为。比如定制OpenCode处理请求的方式。
  • token(可选):GitHub访问令牌,用来创建评论、提交变更、发起PR等操作。默认情况下OpenCode会用自己App的安装令牌,所以提交、评论和PR都显示为来自这个App。

如果不打算安装OpenCode的GitHub App,也可以直接用GitHub Action自带的GITHUB_TOKEN。不过需要确保工作流里有对应的权限:

yaml 复制代码
permissions:
  id-token: write
  contents: write
  pull-requests: write
  issues: write

当然,用个人访问令牌(PAT)也是可以的。

支持哪些事件触发?

OpenCode可以响应多种GitHub事件,下面这个表格说得比较清楚:

事件类型 触发条件 细节
issue_comment 在Issue或PR里评论 评论中包含/opencode/oc。OpenCode会读取上下文,还能创建分支、开PR或者直接回复
pull_request_review_comment 在PR的代码行上评论 代码审查时提到/opencode/oc。OpenCode会拿到文件路径、行号和diff上下文
issues Issue被打开或编辑 自动触发,需要提供prompt输入
pull_request PR被打开或更新 自动触发(打开、同步、重新打开时),适合做自动化评审
schedule 基于cron的定时 定时运行,需要提供prompt。输出会写到日志和PR里(没有Issue可以评论)
workflow_dispatch 从GitHub UI手动触发 按需运行,也需要提供prompt

几个典型的场景示例

定时任务

比如每周一上午9点跑一次,扫一下代码里所有的TODO注释,然后汇总成摘要。如果发现值得处理的问题,就开一个Issue来跟踪。

工作流文件大概长这样:

yaml 复制代码
name: Scheduled OpenCode Task

on:
  schedule:
    - cron: "0 9 * * 1"

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,才能让OpenCode去创建分支或PR。

PR自动审查

每次PR被打开、更新、重新打开或者变成"ready for review"状态时,自动跑一遍审查:

yaml 复制代码
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

对于pull_request事件,如果没有提供prompt,OpenCode默认就会去审查这个PR。

Issue自动分流(Triage)

比如新开了一个Issue,先检查提Issue的账号注册时间是否超过30天------这样可以过滤掉一部分垃圾信息。满足条件再让OpenCode去处理:

yaml 复制代码
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也是必填的。

自定义提示词

有时候默认的行为不满足需求,可以通过prompt覆盖掉。比如在PR审查时可以强制要求检查某些特定内容:

yaml 复制代码
- 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

这样做的好处是可以针对项目的具体规范来定制审查标准,比如要求检查测试覆盖率、特定的代码风格、日志规范等等。

日常使用小例子

说几个最常用的操作。

解释一个Issue:直接在GitHub Issue下面留一条评论:

plain 复制代码
/opencode explain this issue

OpenCode会把整个讨论串(包括所有评论)从头到尾读一遍,然后回复一段清晰的解释。

修复一个Issue:在Issue里说:

plain 复制代码
/opencode fix this

然后OpenCode会创建一个新分支,把该改的代码改好,最后自动提交一个PR。

审查PR并顺手改点东西:在PR下面写一条评论,比如:

plain 复制代码
Delete the attachment from S3 when the note is removed /oc

OpenCode就会按要求实现这个修改,并把改动提交到同一个PR里。

针对某几行代码进行审查:在PR的"Files"标签页里,直接在代码行上留评论。OpenCode会自动识别出文件路径、具体的代码行、周围的diff上下文和行号信息。这时候只要写:

plain 复制代码
/oc add error handling here

就不用手动再重复一遍文件路径和行号了,非常方便。

小结

整体上,OpenCode跟GitHub的集成覆盖了从Issue解释、Bug修复到PR审查、定时维护的常见场景。配置起来并不复杂------要么一行命令装完,要么手动加个工作流文件再配好密钥。对于日常开发来说,相当于在代码托管平台里养了一个随时可以调用的AI助手。

相关推荐
码流怪侠3 小时前
【GitHub】Claude-Mem 深度解析:为 Claude Code 装上"永久记忆脑"
程序员·github·claude
code_pgf3 小时前
5个高效使用github的chrome插件
github
诸葛亮的芭蕉扇3 小时前
前端开发借助GitHub开源项目提升AI能力
人工智能·开源·github
yyuuuzz14 小时前
aws亚马逊入门常见认知误区
运维·服务器·网络·云计算·github·aws
逛逛GitHub18 小时前
你的 Mac 就是一个 AI Agent,4B 模型本地操控电脑。
github
铁皮哥20 小时前
【后端/Agent 开发】给你的项目配置一套 .claude/ 工作流:别再裸用 Claude Code 了!
java·windows·python·spring·github·maven·生活
Resistance丶未来1 天前
Agency-Agents 多智能体协作系统落地指南
python·大模型·nlp·github·copilot·claude·gemini
輕華1 天前
YOLOv5 实战:从 GitHub 拉取到自定义数据集训练
yolo·github
海域云-罗鹏1 天前
豆包开启付费订阅,想白嫖越来越难了,企业不如部署自己的算力服务器
服务器·人工智能·github