11---
2- name : " Claude (label: claudius-review)"
2+ name : " Claude review (label: claudius-review)"
33
44" on " :
55 pull_request :
@@ -18,101 +18,18 @@ jobs:
1818 (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'claudius-review'))
1919 )
2020 runs-on : ubuntu-latest
21- timeout-minutes : 30
21+ timeout-minutes : 40
2222 permissions :
2323 contents : read
24- issues : write # needed for gh pr edit --remove-label
24+ issues : write
2525 pull-requests : write
2626 id-token : write
2727 env :
28- CLAUDE_MODEL : ${{ vars.CLAUDE_MODEL || 'opus' }}
29- REPORT_DIR : ${{ github.workspace }}/review-report
28+ ANTHROPIC_MODEL : ${{ vars.CLAUDE_MODEL || 'opus' }}
3029 steps :
31- - name : Check for OAuth token
32- env :
33- HAS_TOKEN : ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK != '' }}
34- run : |
35- if [ "$HAS_TOKEN" != "true" ]; then
36- echo "::error::CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK secret not configured. Configure the CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK secret in your repository or organization settings."
37- exit 1
38- fi
39-
40- - name : Checkout repository
41- uses : actions/checkout@v6
30+ - name : Claudius Review
31+ uses : lklimek/claudius-review-action@main
4232 with :
43- # We can diff so we need history
44- fetch-depth : 0
45-
46- - name : Configure git to use HTTPS instead of SSH
47- run : git config --global url."https://github.com/".insteadOf "git@github.com:"
48-
49- - name : Create review report directory
50- run : mkdir -p "$REPORT_DIR"
51-
52- - name : Run Claude Code Review
53- id : claude-review
54- uses : anthropics/claude-code-action@v1
55- env :
56- GH_TOKEN : ${{ github.token }}
57- with :
58- use_sticky_comment : true
5933 claude_code_oauth_token : ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK }}
60- plugin_marketplaces : " https://github.com/lklimek/agents.git"
61- plugins : |
62- claudius@lklimek
63- claudash@lklimek
64- show_full_output : true
65- trigger_phrase : " "
66- prompt : |
67- You are reviewing PR #${{ github.event.pull_request.number }} in ${{ github.repository }}.
68- Base branch: ${{ github.event.pull_request.base.ref }}
69- Head branch: ${{ github.event.pull_request.head.ref }}
70- PR title: ${{ github.event.pull_request.title }}
71-
72- MemCan is NOT available in CI — skip memcan:recall, memcan:lessons-learned, and all mcp__plugin_memcan_brain__* tools.
73- When spawning agents, instruct them to not use memcan tools.
74-
75- Use MCP tools (mcp__plugin_claudius_github__*) for GitHub operations. If an MCP call fails, fall back to gh CLI.
76-
77- Sub-agents have no conversation history —
78- pass all relevant PR context explicitly when spawning them.
79- Write all PR comments in Claudius persona — witty, confident, subtly snarky,
80- but always respectful and genuinely helpful, as if advising a trusted colleague.
81-
82- Follow this review flow in order. Steps 1 and 2 MUST use the Skill tool —
83- do NOT skip them or perform their work manually.
84-
85- 1. Invoke Skill(skill="claudius:check-pr-comments") to check previous review comments.
86- For each thread that IS fixed but NOT yet resolved, reply describing the fix
87- and resolve the thread.
88- 2. Invoke Skill(skill="claudius:grumpy-review") to perform a fresh code review.
89- This spawns parallel specialist agents and produces a consolidated report.
90- Do NOT review the code yourself — the skill handles the full pipeline.
91- Generate HTML format instead of markdown (use --format html in the render step).
92- Write the final report.json and report.html to $REPORT_DIR.
93- 3. Post only MEDIUM severity and higher findings as new inline PR comments.
94- 4. If no unresolved comments remain after the full flow, approve the PR.
95- claude_args : |
96- --agent claudius:claudius
97- --model ${{ env.CLAUDE_MODEL }}
98- --max-turns 150
99- --allowedTools "mcp__plugin_claudius_github,Read,Write,Edit,Glob,Grep,Agent,Skill,Task,TaskCreate,TaskUpdate,TaskList,TaskGet,TaskOutput,SendMessage,Bash(gh pr *),Bash(gh api *),Bash(git diff *),Bash(git log *),Bash(git fetch *),Bash(git branch *),Bash(git rev-parse *),Bash(git show *),Bash(git pull *),Bash(git checkout *),Bash(git status),Bash(git status *),Bash(git remote *),Bash(git merge-base *),Bash(echo *),Bash(ls *),Bash(jq *),Bash(mkdir *),Bash(mktemp *),Bash(pwd *),Bash(*gh-resolve-review-threads.sh *),Bash(*gh-fetch-review-comments.sh *),Bash(*gh-fetch-reviews.sh *),Bash(*gh-list-review-threads.sh *),Bash(*gh-request-reviewer.sh *),Bash(*gh-post-review.sh *),Bash(*gh-pr-base-sha.sh *),Bash(*consolidate_reports.py *),Bash(*validate_report.py *),Bash(*generate_review_report.py *)"
100-
101- - name : Upload review report
102- if : ' !cancelled()'
103- uses : actions/upload-artifact@v4
104- with :
105- name : claude-review-report-pr-${{ github.event.pull_request.number }}
106- path : |
107- ${{ env.REPORT_DIR }}/report.json
108- ${{ env.REPORT_DIR }}/report.html
109- retention-days : 14
110- if-no-files-found : ignore
111-
112- - name : Remove claudius-review label
113- if : success()
114- env :
115- GH_TOKEN : ${{ github.token }}
116- run : |
117- gh pr edit "${{ github.event.pull_request.number }}" \
118- --remove-label "claudius-review" 2>/dev/null || true
34+ memcan_url : ${{ vars.MEMCAN_URL }}
35+ memcan_api_key : ${{ secrets.MEMCAN_API_KEY }}
0 commit comments