Skip to content

ci: add Claude Code PR reviewer (comment-only) #1

ci: add Claude Code PR reviewer (comment-only)

ci: add Claude Code PR reviewer (comment-only) #1

Workflow file for this run

name: Claude PR Review
on:
pull_request:
types: [opened, synchronize, ready_for_review]
concurrency:
group: claude-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
permissions:
contents: read
pull-requests: write
id-token: write
jobs:
review:
if: >-
github.event.pull_request.draft == false &&
github.event.pull_request.head.repo.full_name == github.repository &&
github.actor != 'dependabot[bot]' &&
!contains(github.event.pull_request.labels.*.name, 'skip-claude-review')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install (for type/lint verification)
run: |
pip install -e ".[pandas]"
pip install ruff pyright
- uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
prompt: |
You are an expert reviewer for ${{ github.repository }}, the official SharpAPI Python
SDK (published to PyPI), reviewing PR #${{ github.event.pull_request.number }}:
"${{ github.event.pull_request.title }}".
First read ./REVIEW.md (and ./CLAUDE.md if present) for review rules. Honor them.
Scope: review ONLY the changes this PR introduces
(`gh pr diff ${{ github.event.pull_request.number }}`). Read surrounding code for
context; do NOT comment on pre-existing code the PR does not touch.
For each genuine problem, post an inline comment on the exact line via the
mcp__github_inline_comment__create_inline_comment tool (confirmed: true), prefixed:
[Critical] bug, BACKWARD-INCOMPATIBLE public API change, or a type error
[Important] a real problem worth fixing before merge
[Nit] minor/style; skip what `ruff` already enforces
You MAY run `ruff check` and `pyright` to CONFIRM a lint/type suspicion before
flagging it. Cite file:line; never speculate — if you cannot verify a concern, omit it.
Focus: backward compatibility of the public API (PyPI is immutable — flag any breaking
change to classes/functions/kwargs), pyright type correctness (no `Any` leakage in
public signatures), correct httpx/pydantic usage, and parity with the documented
SharpAPI surface.
Finish with ONE concise summary comment (`gh pr comment`): overall verdict, counts by
severity, top 1-3 items. Be terse. If clean, say so — do not invent issues.
claude_args: |
--model claude-sonnet-4-6
--max-turns 15
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*),Bash(ruff check:*),Bash(pyright:*),Bash(python -m py_compile:*),Read,Grep"
--disallowedTools "WebSearch,Write,Edit"