# How to use Claude Code via GitHub

## Setup

I configured Claude Code GitHub Action *correctly*. You should add setup steps to emulate a real development environment before `anthropics/claude-code-action@beta`. The setup steps depend on the repository, but I’ll provide my Claude Code Action Setup as a reference.

`.github/workflows/claude.yml`:

```yaml
name: Claude Code

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]
  pull_request_review:
    types: [submitted]

jobs:
  claude:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
    runs-on: ['self-hosted', 'linux']
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
      actions: read # Required for Claude to read CI results on PRs
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 1

      - name: Install Protoc
        uses: arduino/setup-protoc@v3
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
  
      - name: Setup Node.js
        uses: ./.github/actions/setup-node
  
      - name: Configure environment
        run: pnpm install

      - name: Run Claude Code
        id: claude
        uses: anthropics/claude-code-action@beta
        with:
          claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}

          # This is an optional setting that allows Claude to read CI results on PRs
          additional_permissions: |
            actions: read
          
          # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
          # model: "claude-opus-4-20250514"
          
          # Optional: Customize the trigger phrase (default: @claude)
          # trigger_phrase: "/claude"
          
          # Optional: Trigger when specific user is assigned to an issue
          assignee_trigger: "claude-bot"
          
          # Optional: Allow Claude to run specific commands
          allowed_tools: "Bash,WebFetch,WebSearch"
          
          # Optional: Add custom instructions for Claude to customize its behavior for your project
          # custom_instructions: |
          #   Follow our coding standards
          #   Ensure all new code has tests
          #   Use TypeScript for new files
          
          # Optional: Custom environment variables for Claude
          # claude_env: |
          #   NODE_ENV: test
```

Note `allowed_tools: "Bash,WebFetch,WebSearch"`. You need it to allow Claude Code to run bash commands.

## Usage

Mention `@claude` from issues or PRs to instruct it to resolve issues.

Example:

> @[@claude](@https://github.com/claude) [Implem](https://github.com/claude)ent comprehensive unit tests

## Pro Tip: You can use local Claude Code to create a handful of issues quickly

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1755992979320/fae16172-d327-4362-b695-db63dd5f54db.png align="center")
