# .github/workflows/claude-review.yml
name: Claude PR Review on: pull_request: types: [opened, synchronize] jobs: review: runs-on: ubuntu-latest permissions: pull-requests: write contents: read steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get diff id: diff run: | -weight: 500;">git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff echo "lines=$(wc -l < /tmp/pr.diff)" >> $GITHUB_OUTPUT - name: Claude review if: steps.diff.outputs.lines < 2000 env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | -weight: 500;">pip -weight: 500;">install anthropic python3 .github/scripts/review.py - name: Post comment uses: actions/github-script@v7 with: script: | const fs = require('fs') const review = fs.readFileSync('/tmp/review.md', 'utf8') github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: review })
# .github/workflows/claude-review.yml
name: Claude PR Review on: pull_request: types: [opened, synchronize] jobs: review: runs-on: ubuntu-latest permissions: pull-requests: write contents: read steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get diff id: diff run: | -weight: 500;">git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff echo "lines=$(wc -l < /tmp/pr.diff)" >> $GITHUB_OUTPUT - name: Claude review if: steps.diff.outputs.lines < 2000 env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | -weight: 500;">pip -weight: 500;">install anthropic python3 .github/scripts/review.py - name: Post comment uses: actions/github-script@v7 with: script: | const fs = require('fs') const review = fs.readFileSync('/tmp/review.md', 'utf8') github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: review })
# .github/workflows/claude-review.yml
name: Claude PR Review on: pull_request: types: [opened, synchronize] jobs: review: runs-on: ubuntu-latest permissions: pull-requests: write contents: read steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get diff id: diff run: | -weight: 500;">git diff origin/${{ github.base_ref }}...HEAD > /tmp/pr.diff echo "lines=$(wc -l < /tmp/pr.diff)" >> $GITHUB_OUTPUT - name: Claude review if: steps.diff.outputs.lines < 2000 env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | -weight: 500;">pip -weight: 500;">install anthropic python3 .github/scripts/review.py - name: Post comment uses: actions/github-script@v7 with: script: | const fs = require('fs') const review = fs.readFileSync('/tmp/review.md', 'utf8') github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: review })
# .github/scripts/review.py
import anthropic
import sys
from pathlib import Path client = anthropic.Anthropic()
diff = Path("/tmp/pr.diff").read_text() SYSTEM = """You are a senior engineer doing a first-pass code review.
Focus on: bugs, security issues, missing error handling, performance problems.
Ignore: style preferences, variable naming, minor refactors.
Be specific. Cite line numbers. Skip praise.""" response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, system=SYSTEM, messages=[{ "role": "user", "content": f"Review this diff:\n\n```
{% endraw %}
diff\n{diff}\n
{% raw %}
```" }]
) review = response.content[0].text
Path("/tmp/review.md").write_text(f"## Atlas Code Review\n\n{review}")
# .github/scripts/review.py
import anthropic
import sys
from pathlib import Path client = anthropic.Anthropic()
diff = Path("/tmp/pr.diff").read_text() SYSTEM = """You are a senior engineer doing a first-pass code review.
Focus on: bugs, security issues, missing error handling, performance problems.
Ignore: style preferences, variable naming, minor refactors.
Be specific. Cite line numbers. Skip praise.""" response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, system=SYSTEM, messages=[{ "role": "user", "content": f"Review this diff:\n\n```
{% endraw %}
diff\n{diff}\n
{% raw %}
```" }]
) review = response.content[0].text
Path("/tmp/review.md").write_text(f"## Atlas Code Review\n\n{review}")
# .github/scripts/review.py
import anthropic
import sys
from pathlib import Path client = anthropic.Anthropic()
diff = Path("/tmp/pr.diff").read_text() SYSTEM = """You are a senior engineer doing a first-pass code review.
Focus on: bugs, security issues, missing error handling, performance problems.
Ignore: style preferences, variable naming, minor refactors.
Be specific. Cite line numbers. Skip praise.""" response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, system=SYSTEM, messages=[{ "role": "user", "content": f"Review this diff:\n\n```
{% endraw %}
diff\n{diff}\n
{% raw %}
```" }]
) review = response.content[0].text
Path("/tmp/review.md").write_text(f"## Atlas Code Review\n\n{review}")
response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, system=[ { "type": "text", "text": SYSTEM, "cache_control": {"type": "ephemeral"} } ], messages=[{"role": "user", "content": f"Review this diff:\n\n```
{% endraw %}
diff\n{diff}\n
{% raw %}
```"}]
)
response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, system=[ { "type": "text", "text": SYSTEM, "cache_control": {"type": "ephemeral"} } ], messages=[{"role": "user", "content": f"Review this diff:\n\n```
{% endraw %}
diff\n{diff}\n
{% raw %}
```"}]
)
response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2048, system=[ { "type": "text", "text": SYSTEM, "cache_control": {"type": "ephemeral"} } ], messages=[{"role": "user", "content": f"Review this diff:\n\n```
{% endraw %}
diff\n{diff}\n
{% raw %}
```"}]
) - Caught: missing await on async function (would've caused silent data loss)
- Caught: SQL query built with string interpolation instead of parameterized query
- Caught: API key leaked in a test file via console.log
- Missed: a race condition that required understanding the full request lifecycle
- False positive: flagged a setTimeout as a "potential memory leak" — correct in isolation, not in context