컨텐츠로 건너뛰기

GitHub

OpenCode는 GitHub 워크플로우와 통합됩니다. 댓글에 /opencode 또는 /oc를 멘션하면 OpenCode가 GitHub Actions 러너에서 작업을 실행합니다.


기능

  • 이슈 분류(Triage): OpenCode에게 이슈를 살펴보고 설명해 달라고 요청할 수 있습니다.
  • 수정 및 구현: OpenCode에게 이슈를 수정하거나 기능을 구현해 달라고 요청하세요. 새 브랜치에서 작업한 뒤 모든 변경 사항을 담은 PR을 제출합니다.
  • 보안: OpenCode는 사용자의 GitHub 러너 안에서 실행됩니다.

설치

GitHub 저장소에 있는 프로젝트에서 다음 명령을 실행하세요.

opencode github install

이 명령은 GitHub 앱 설치, 워크플로우 생성, 시크릿 설정을 차례로 안내합니다.


수동 설정

원한다면 수동으로 설정할 수도 있습니다.

  1. GitHub 앱 설치

    github.com/apps/opencode-agent로 이동하세요. 대상 저장소에 설치되어 있는지 확인하세요.

  2. 워크플로우 추가

    저장소의 .github/workflows/opencode.yml에 다음 워크플로우 파일을 추가하세요. env에 적절한 model과 필요한 API 키를 설정해야 합니다.

    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
              # share: true
              # github_token: xxxx
  3. API 키를 시크릿에 저장

    조직 또는 프로젝트 설정의 왼쪽에서 Secrets and variables를 확장하고 Actions를 선택하세요. 필요한 API 키를 추가합니다.


설정

  • model: OpenCode에서 사용할 모델입니다. provider/model 형식입니다. 필수 항목입니다.

  • agent: 사용할 에이전트입니다. 기본 에이전트여야 합니다. 설정의 default_agent로 폴백하며, 없으면 "build"를 사용합니다.

  • share: OpenCode 세션을 공유할지 여부입니다. 공개 저장소에서는 기본값이 true입니다.

  • prompt: 기본 동작을 덮어쓸 선택적 사용자 정의 프롬프트입니다. OpenCode가 요청을 처리하는 방식을 사용자 정의할 때 사용하세요.

  • token: 댓글 생성, 변경 사항 커밋, 풀 리퀘스트 열기 같은 작업 수행에 사용할 선택적 GitHub 액세스 토큰입니다. 기본적으로 OpenCode는 OpenCode GitHub App의 설치 액세스 토큰을 사용하므로 커밋, 댓글, 풀 리퀘스트는 앱에서 작성한 것으로 표시됩니다.

    또는 OpenCode GitHub App을 설치하지 않고 GitHub Action 러너의 기본 제공 GITHUB_TOKEN을 사용할 수도 있습니다. 이 경우 워크플로우에서 필요한 권한을 부여해야 합니다.

    permissions:
      id-token: write
      contents: write
      pull-requests: write
      issues: write

    원하는 경우 개인 액세스 토큰(PAT)을 사용할 수도 있습니다.


지원되는 이벤트

OpenCode는 다음 GitHub 이벤트에 의해 트리거될 수 있습니다.

이벤트 타입트리거 조건설명
issue_comment이슈 또는 PR의 댓글댓글에 /opencode 또는 /oc를 멘션하세요. OpenCode가 컨텍스트를 읽고 브랜치 생성, PR 열기, 답글 작성을 수행할 수 있습니다.
pull_request_review_commentPR의 특정 코드 줄에 대한 댓글코드를 리뷰할 때 /opencode 또는 /oc를 멘션하세요. OpenCode가 파일 경로, 줄 번호, diff 컨텍스트를 받습니다.
issues이슈가 열리거나 수정됨이슈가 생성되거나 수정될 때 OpenCode를 자동으로 트리거합니다. prompt 입력이 필요합니다.
pull_requestPR이 열리거나 업데이트됨PR이 열리거나, 동기화되거나, 다시 열릴 때 OpenCode를 자동으로 트리거합니다. 자동 리뷰에 유용합니다.
scheduleCron 기반 스케줄스케줄에 따라 OpenCode를 실행합니다. prompt 입력이 필요합니다. 출력은 로그와 PR로 전송됩니다 (댓글을 달 이슈는 없음).
workflow_dispatchGitHub UI에서 수동으로 트리거Actions 탭에서 필요할 때 OpenCode를 트리거합니다. prompt 입력이 필요합니다. 출력은 로그와 PR로 전송됩니다.

스케줄 예시

스케줄에 따라 OpenCode를 실행해 자동화된 작업을 수행합니다.

name: Scheduled OpenCode Task

on:
  schedule:
    - cron: "0 9 * * 1" # 매주 월요일 UTC 9시

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: |
            코드베이스에서 TODO 주석을 검토하고 요약을 작성하세요.
            해결할 만한 이슈가 있다면 추적용 이슈를 열어 주세요.

스케줄 이벤트는 추출할 댓글이 없으므로 prompt 입력이 필수입니다. 스케줄 워크플로우는 권한 검사를 위한 사용자 컨텍스트 없이 실행되므로, OpenCode가 브랜치나 PR을 생성하기를 기대한다면 워크플로우에 contents: writepull-requests: write 권한을 부여해야 합니다.


풀 리퀘스트 예시

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: |
            이 풀 리퀘스트를 리뷰하세요:
            - 코드 품질 문제 확인
            - 잠재적 버그 찾기
            - 개선 사항 제안

pull_request 이벤트는 prompt가 제공되지 않으면 OpenCode는 기본적으로 풀 리퀘스트를 리뷰합니다.


이슈 분류(Triage) 예시

새 이슈를 자동으로 분류합니다. 이 예시는 스팸을 줄이기 위해 계정 생성일이 30일 이상인 경우만 필터링합니다.

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: |
            이 이슈를 리뷰하세요. 명확한 수정이나 관련 문서가 있다면:
            - 문서 링크 제공
            - 코드 예시에 대한 오류 처리 안내 추가
            그렇지 않다면 댓글을 달지 마세요.

issues 이벤트는 추출할 댓글이 없으므로 prompt 입력이 필수입니다.


사용자 정의 프롬프트

기본 프롬프트를 덮어써 워크플로우에 맞게 OpenCode의 동작을 사용자 정의하세요.

- uses: anomalyco/opencode/github@latest
  with:
    model: anthropic/claude-sonnet-4-5
    prompt: |
      이 풀 리퀘스트를 리뷰하세요:
      - 코드 품질 문제 확인
      - 잠재적 버그 찾기
      - 개선 사항 제안

이는 프로젝트에 맞는 특정 리뷰 기준, 코딩 표준, 중점 영역을 강제할 때 유용합니다.


예시

다음은 GitHub에서 OpenCode를 사용하는 방법의 예시입니다.

  • 이슈 설명하기

    GitHub 이슈에 다음 댓글을 추가하세요.

    /opencode explain this issue

    OpenCode는 모든 댓글을 포함한 전체 스레드를 읽고 명확한 설명으로 답합니다.

  • 이슈 수정하기

    GitHub 이슈에서 다음과 같이 입력하세요.

    /opencode fix this

    그러면 OpenCode가 새 브랜치를 만들고, 변경 사항을 구현한 뒤, 변경 사항이 담긴 PR을 엽니다.

  • PR 리뷰 및 변경

    GitHub PR에 다음 댓글을 남기세요.

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

    OpenCode는 요청된 변경 사항을 구현하고 같은 PR에 커밋합니다.

  • 특정 코드 줄 리뷰

    PR의 “Files” 탭에서 코드 줄에 직접 댓글을 남기세요. OpenCode가 파일, 줄 번호, diff 컨텍스트를 자동으로 감지해 정확한 응답을 제공합니다.

    [Files 탭의 특정 줄에 댓글]
    /oc add error handling here

    특정 줄에 댓글을 달면 OpenCode는 다음 정보를 받습니다.

    • 리뷰 대상 파일 자체
    • 해당 코드 줄
    • 주변 diff 컨텍스트
    • 줄 번호 정보

    이를 통해 파일 경로나 줄 번호를 수동으로 지정하지 않고도 더 정확한 요청을 할 수 있습니다.