乐于分享
好东西不私藏

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

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

把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仓库)下执行:

opencode github install            

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

手动配置

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

第一步:安装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            

注意在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。不过需要确保工作流里有对应的权限:

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来跟踪。

工作流文件大概长这样:

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”状态时,自动跑一遍审查:

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去处理:

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审查时可以强制要求检查某些特定内容:

- 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下面留一条评论:

/opencode explain this issue            

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

修复一个Issue:在Issue里说:

/opencode fix this            

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

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

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

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

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

/oc add error handling here            

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

小结

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