Skip to content

GitHub 통합

Triggerfish는 두 가지 상호 보완적인 접근 방식을 통해 GitHub와 통합됩니다:

빠른 설정: REST API 도구

GitHub를 연결하는 가장 빠른 방법입니다. 에이전트에게 리포지토리, PR, 이슈, Actions, 코드 검색을 위한 14개의 내장 도구를 제공합니다 -- 모두 분류 인식 taint 전파와 함께.

bash
triggerfish connect github

이 명령은 세분화된 개인 접근 토큰 생성을 안내하고, 유효성을 검사하며, OS 키체인에 저장합니다. 이것으로 끝입니다 -- 에이전트가 이제 모든 github_* 도구를 사용할 수 있습니다.

Skill 작동 방식에 대한 자세한 내용은 Skills 문서를 참조하거나 triggerfish skills list를 실행하여 사용 가능한 모든 도구를 확인하십시오.

고급: gh CLI + Webhook

완전한 개발 피드백 루프(에이전트가 브랜치를 생성하고, PR을 열고, 코드 리뷰에 응답)를 위해 Triggerfish는 exec를 통한 gh CLI와 webhook 기반 리뷰 전달도 지원합니다. 이는 세 가지 조합 가능한 구성 요소를 사용합니다:

  1. exec를 통한 gh CLI -- 모든 GitHub 동작 수행 (PR 생성, 리뷰 읽기, 코멘트, 병합)
  2. 리뷰 전달 -- 두 가지 모드: webhook 이벤트 (즉시, 공개 엔드포인트 필요) 또는 gh pr view를 통한 트리거 기반 폴링 (방화벽 뒤에서 작동)
  3. git-branch-management skill -- 에이전트에게 완전한 브랜치/PR/리뷰 워크플로우를 가르침

함께 사용하면 완전한 개발 피드백 루프를 만듭니다: 에이전트가 브랜치를 생성하고, 코드를 커밋하고, PR을 열고, 리뷰어 피드백에 응답합니다 -- 사용자 정의 GitHub API 코드가 필요 없습니다.

전제 조건

gh CLI

GitHub CLI(gh)가 Triggerfish가 실행되는 환경에 설치되고 인증되어 있어야 합니다.

bash
# gh 설치 (Fedora/RHEL)
sudo dnf install gh

# gh 설치 (macOS)
brew install gh

# gh 설치 (Debian/Ubuntu)
sudo apt install gh

# 인증
gh auth login

인증을 확인합니다:

bash
gh auth status

에이전트는 exec.run("gh ...")을 통해 gh를 사용합니다 -- gh 로그인 외에 별도의 GitHub 토큰 구성이 필요 없습니다.

Git

Git이 설치되고 사용자 이름과 이메일이 구성되어 있어야 합니다:

bash
git config --global user.name "Triggerfish Agent"
git config --global user.email "triggerfish@example.com"

리포지토리 접근

에이전트의 워크스페이스가 리모트에 대한 푸시 접근이 있는 git 리포지토리(또는 하나를 포함)여야 합니다.

리뷰 전달

에이전트가 새 PR 리뷰에 대해 알 수 있는 두 가지 방법이 있습니다. 하나를 선택하거나 둘 다 함께 사용할 수 있습니다.

옵션 A: 트리거 기반 폴링

인바운드 연결이 필요 없습니다. 에이전트가 gh pr view를 사용하여 스케줄에 따라 GitHub를 폴링합니다. 모든 방화벽, NAT, VPN 뒤에서 작동합니다.

triggerfish.yaml에 cron 작업을 추가합니다:

yaml
scheduler:
  cron:
    jobs:
      - id: pr-review-check
        schedule: "*/15 * * * *"
        task: >
          Check all open PR tracking files in scratch/pr-tracking/.
          For each open PR, query GitHub for new reviews or state changes
          using gh pr view. Address any review feedback, handle merges
          and closures.
        classification: INTERNAL

또는 에이전트의 TRIGGER.md에 "check open PRs for review feedback"을 추가하여 정기 트리거 웨이크업 사이클 중에 실행되도록 합니다.

옵션 B: Webhook 설정

Webhook은 리뷰 이벤트를 즉시 전달합니다. Triggerfish gateway가 GitHub 서버에서 접근 가능해야 합니다 (예: Tailscale Funnel, 리버스 프록시 또는 터널을 통해).

1단계: Webhook 시크릿 생성

bash
openssl rand -hex 32

이것을 환경 변수로 저장합니다:

bash
export GITHUB_WEBHOOK_SECRET="<generated-secret>"

재시작 후에도 유지되도록 셸 프로필 또는 시크릿 관리자에 추가합니다.

2단계: Triggerfish 구성

triggerfish.yaml에 webhook 엔드포인트를 추가합니다:

yaml
webhooks:
  endpoints:
    - id: github
      path: /webhook/github
      # secret stored in OS keychain
      classification: INTERNAL
      actions:
        - event: "pull_request_review"
          task: >
            A PR review was submitted. Read the PR tracking file from
            scratch/pr-tracking/ to recover context. Check out the branch,
            read the review, address any requested changes, commit, push,
            and comment on the PR with a summary of changes made.
        - event: "pull_request_review_comment"
          task: >
            An inline review comment was posted on a PR. Read the PR
            tracking file, check out the branch, address the specific
            comment, commit, push.
        - event: "issue_comment"
          task: >
            A comment was posted on a PR or issue. Check if this is a
            tracked PR by looking up tracking files in scratch/pr-tracking/.
            If tracked, check out the branch and address the feedback.
        - event: "pull_request.closed"
          task: >
            A PR was closed or merged. Read the tracking file. If merged,
            clean up: delete local branch, archive tracking file to
            completed/. Notify the owner of the merge. If closed without
            merge, archive and notify.

3단계: Webhook 엔드포인트 노출

Triggerfish의 gateway가 GitHub 서버에서 접근 가능해야 합니다. 옵션:

Tailscale Funnel (개인 사용에 권장):

yaml
# triggerfish.yaml에서
remote:
  tailscale:
    serve: true
    funnel:
      enabled: true
      paths: ["/webhook/*"]

이것은 https://<your-machine>.ts.net/webhook/github을 인터넷에 노출합니다.

리버스 프록시 (nginx, Caddy):

/webhook/github를 gateway의 로컬 포트로 포워딩합니다.

ngrok (개발/테스트):

bash
ngrok http 8080

생성된 URL을 webhook 대상으로 사용합니다.

4단계: GitHub webhook 구성

GitHub 리포지토리(또는 조직)에서:

  1. Settings > Webhooks > Add webhook으로 이동합니다
  2. Payload URL을 노출된 엔드포인트로 설정합니다:
    https://<your-host>/webhook/github
  3. Content typeapplication/json으로 설정합니다
  4. SecretGITHUB_WEBHOOK_SECRET과 동일한 값으로 설정합니다
  5. Which events would you like to trigger this webhook? 아래에서 Let me select individual events를 선택하고 체크합니다:
    • Pull requests (pull_request.opened, pull_request.closed 포함)
    • Pull request reviews (pull_request_review 포함)
    • Pull request review comments (pull_request_review_comment 포함)
    • Issue comments (PR 및 이슈의 issue_comment 포함)
  6. Add webhook을 클릭합니다

GitHub가 연결을 확인하기 위해 ping 이벤트를 보냅니다. Triggerfish 로그에서 수신을 확인합니다:

bash
triggerfish logs --tail

피드백 루프 작동 방식

Webhook 사용 시 (즉시)

GitHub webhook 리뷰 루프: 에이전트가 PR을 열고, 대기하고, 리뷰 시 webhook을 수신하고, 추적 파일을 읽고, 피드백을 처리하고, 커밋하고 푸시

트리거 기반 폴링 사용 시 (방화벽 뒤)

GitHub 트리거 기반 리뷰: 에이전트가 PR을 열고, 추적 파일을 작성하고, 트리거 웨이크업을 기다리고, 리뷰를 폴링하고, 피드백을 처리

두 경로 모두 동일한 추적 파일을 사용합니다. 에이전트는 ~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/에서 PR 추적 파일을 읽어 컨텍스트를 복구합니다.

PR 추적 파일

에이전트는 생성하는 각 PR에 대해 추적 파일을 작성합니다:

~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/<branch-name>.json

스키마:

json
{
  "branch": "triggerfish/agent-1/fix-auth-timeout",
  "prNumber": 42,
  "prUrl": "https://github.com/owner/repo/pull/42",
  "task": "Fix authentication timeout when token expires during long requests",
  "repository": "owner/repo",
  "createdAt": "2025-01-15T10:30:00Z",
  "updatedAt": "2025-01-15T10:30:00Z",
  "lastCheckedAt": "2025-01-15T10:30:00Z",
  "lastReviewId": "",
  "status": "open",
  "commits": [
    "feat: add token refresh before expiry",
    "test: add timeout edge case coverage"
  ]
}

병합 후 추적 파일은 completed/로 아카이브됩니다.

병합 정책

기본적으로 에이전트는 승인된 PR을 자동 병합하지 않습니다. 리뷰가 승인되면 에이전트는 소유자에게 알리고 명시적인 병합 지시를 기다립니다.

자동 병합을 활성화하려면 triggerfish.yaml에 추가합니다:

yaml
github:
  auto_merge: true

활성화되면 에이전트는 승인 리뷰를 받은 후 gh pr merge --squash --delete-branch를 실행합니다.

안전을 위해 자동 병합은 기본적으로 비활성화되어 있습니다. 에이전트의 변경 사항을 신뢰하고 GitHub에 브랜치 보호 규칙(필수 리뷰어, CI 검사)이 구성된 경우에만 활성화하십시오. :::

선택 사항: GitHub MCP 서버

gh CLI와 내장 도구가 제공하는 것 이상의 더 풍부한 GitHub API 접근이 필요한 경우 GitHub MCP 서버를 구성할 수도 있습니다:

yaml
mcp_servers:
  - id: github
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    # GitHub token is read from the OS keychain
    classification: CONFIDENTIAL

대부분의 워크플로우에는 필요하지 않습니다 -- 내장 github_* 도구(triggerfish connect github로 설정)와 gh CLI가 모든 일반적인 작업을 처리합니다. MCP 서버는 내장 도구로 처리되지 않는 고급 쿼리에 유용합니다.

보안 고려 사항

제어세부 사항
HMAC 검증모든 GitHub webhook은 처리 전에 HMAC-SHA256으로 검증됩니다 (webhook 모드)
분류GitHub 데이터는 기본적으로 INTERNAL로 분류됩니다 -- 코드와 PR 데이터가 공개 채널로 유출되지 않습니다
세션 격리각 webhook 이벤트 또는 트리거 웨이크업이 새로운 격리된 세션을 생성합니다
No Write-DownINTERNAL로 분류된 PR 이벤트에 대한 에이전트 응답은 PUBLIC 채널로 전송할 수 없습니다
자격 증명 처리gh CLI가 자체 인증 토큰을 관리합니다; triggerfish.yaml에 GitHub 토큰이 저장되지 않습니다
브랜치 명명triggerfish/ 접두사로 에이전트 브랜치를 쉽게 식별하고 필터링할 수 있습니다

리포지토리에 민감한 코드(독점, 보안 관련)가 포함된 경우 webhook 분류를 INTERNAL 대신 CONFIDENTIAL로 설정하는 것을 고려하십시오. :::

문제 해결

Webhook이 이벤트를 수신하지 않음

  1. 외부 머신에서 webhook URL에 접근 가능한지 확인합니다 (curl을 사용)
  2. GitHub에서 Settings > Webhooks로 이동하여 Recent Deliveries 탭에서 오류를 확인합니다
  3. 시크릿이 GitHub과 GITHUB_WEBHOOK_SECRET 사이에 일치하는지 확인합니다
  4. Triggerfish 로그를 확인합니다: triggerfish logs --tail

PR 리뷰가 감지되지 않음 (폴링 모드)

  1. pr-review-check cron 작업이 triggerfish.yaml에 구성되어 있는지 확인합니다
  2. 데몬이 실행 중인지 확인합니다: triggerfish status
  3. ~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/에 추적 파일이 존재하는지 확인합니다
  4. 수동으로 테스트합니다: gh pr view <number> --json reviews
  5. Triggerfish 로그를 확인합니다: triggerfish logs --tail

gh CLI가 인증되지 않음

bash
gh auth status
# 인증되지 않은 경우:
gh auth login

에이전트가 리모트에 푸시할 수 없음

git 리모트와 자격 증명을 확인합니다:

bash
git remote -v
gh auth status

인증된 GitHub 계정이 리포지토리에 대한 푸시 접근 권한이 있는지 확인합니다.

리뷰 중 추적 파일을 찾을 수 없음

에이전트는 ~/.triggerfish/workspace/<agent-id>/scratch/pr-tracking/에서 추적 파일을 찾습니다. 파일이 없으면 PR이 Triggerfish 외부에서 생성되었거나 워크스페이스가 정리되었을 수 있습니다. 에이전트는 소유자에게 알리고 자동 처리를 건너뛰어야 합니다.