Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions .github/workflows/claude.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: Claude Assistant
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
pull_request:
types: [opened, synchronize] # opened = new PR, synchronize = new commits pushed
issues:
types: [opened, assigned]

permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read # Required for Claude to read CI results on PRs

jobs:
# Auto-review for same-repo PRs
claude-review:
if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
track_progress: true # ✨ Enables tracking comments
claude_args: |
--model opus \
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)"
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}

Act as a code reviewer for this pull request. Focus your review on:
- Overall code quality and adherence to best practices
- Possible bugs, edge cases, or logical errors
- Security concerns or unsafe patterns
- Performance characteristics and potential optimizations

Provide thorough, actionable feedback, and use inline comments for any line-specific issues you identify.

Note: The PR branch is already checked out in the current working directory.

Use `gh pr comment` for summary or top-level feedback on the PR.
Use `mcp__github_inline_comment__create_inline_comment` to annotate specific code issues inline.
Only post GitHub comments - don't submit review text as messages.
Use top-level comments for general observations or praise.

# Manual review triggered by "@claude review" comment (works for forks too)
claude-manual-review:
if: |
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
contains(github.event.comment.body, '@claude review')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Checkout PR branch
run: gh pr checkout ${{ github.event.issue.number }}
env:
GH_TOKEN: ${{ github.token }}
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
track_progress: true # ✨ Enables tracking comments
claude_args: |
--model opus \
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)"
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.issue.number }}

Act as a code reviewer for this pull request. Focus your review on:
- Overall code quality and adherence to best practices
- Possible bugs, edge cases, or logical errors
- Security concerns or unsafe patterns
- Performance characteristics and potential optimizations

Provide thorough, actionable feedback, and use inline comments for any line-specific issues you identify.

Note: The PR branch is already checked out in the current working directory.

Use `gh pr comment` for summary or top-level feedback on the PR.
Use `mcp__github_inline_comment__create_inline_comment` to annotate specific code issues inline.
Only post GitHub comments - don't submit review text as messages.
Use top-level comments for general observations or praise.

# General interactive mode - responds to @claude mentions (but NOT review requests on PRs)
claude-response:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude') && !contains(github.event.comment.body, '@claude review')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude') && !contains(github.event.comment.body, '@claude review')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude') && !contains(github.event.review.body, '@claude review')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Checkout PR branch (if on a PR)
if: github.event.issue.pull_request || github.event.pull_request
run: gh pr checkout ${{ github.event.issue.number || github.event.pull_request.number }}
env:
GH_TOKEN: ${{ github.token }}
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
claude_args: |
--model opus \
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr create:*),Bash(git checkout:*),Bash(git add:*),Bash(git commit:*),Bash(git push:*),Bash(git branch:*),Edit,Write,MultiEdit"
Loading