skills/qodo-pr-resolver/SKILL.md
Use when the user wants to review Qodo PR feedback or fix code review comments. Capabilities: view issues by severity, apply fixes interactively or in batch, reply to inline comments, post fix summaries (GitHub, GitLab, Bitbucket, Azure DevOps, Gerrit)
npx skillsauth add qodo-ai/qodo-skills qodo-pr-resolverInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch Qodo review issues for your current branch's PR/MR, fix them interactively or in batch, and reply to each inline comment with the decision. Supports GitHub, GitLab, Bitbucket, Azure DevOps, and Gerrit.
gh (GitHub), glab (GitLab), curl (Bitbucket/Gerrit), or az (Azure DevOps)Installation and authentication details: See providers.md for provider-specific setup instructions.
git --version # Check git installed
git remote get-url origin # Identify git provider
See providers.md for provider-specific verification commands.
Qodo (formerly Codium AI) is an AI-powered code review tool that analyzes PRs/MRs with compliance checks, bug detection, and code quality suggestions.
Look for comments from: pr-agent-pro, pr-agent-pro-staging, qodo-merge[bot], qodo-ai[bot]
When the user asks for a code review, to see Qodo issues, or fix Qodo comments:
Check for uncommitted changes, unpushed commits, and get the current branch.
Note: Only consider tracked files when checking for uncommitted changes. Untracked files (scripts, local configs, etc.) that are not part of the repository should be ignored. Use git diff --name-only and git diff --cached --name-only rather than git status --porcelain which includes untracked files.
(no uncommitted changes)
git push, inform "Pushed! Qodo will review shortly." Record internally JUST_PUSHED = true. Continue to Step 1 (the Wait for Qodo review flow in Step 3a will handle the waiting).(both uncommitted changes and unpushed commits are empty)
Detect git provider from the remote URL (git remote get-url origin).
See providers.md for provider detection patterns. For Gerrit, also check for .gitreview file, port 29418 in remote URL, or googlesource.com — see gerrit.md.
Find the open PR/MR for this branch using the provider's CLI.
See providers.md § Find Open PR/MR for provider-specific commands. For Gerrit, look up the change using the Change-Id from the HEAD commit message — see gerrit.md § Find Open Change.
Get the Qodo review comments using the provider's CLI.
Qodo typically posts both a summary comment (PR-level, containing all issues) and inline review comments (one per issue, attached to specific lines of code). You must fetch both.
See providers.md § Fetch Review Comments for provider-specific commands.
Look for comments where the author is "qodo-merge[bot]", "pr-agent-pro", "pr-agent-pro-staging" or similar Qodo bot name.
Gerrit note: Qodo posts as tagged human comments via /comments with tag: "autogenerated:qodo". Also check change messages (/messages) for the summary comment. Filter by tag field or bot username. See gerrit.md § Fetch Review Comments.
Check if the Qodo review is complete:
If the review is not ready (in progress, not started, or we just pushed/created a PR):
description: "Waiting for Qodo review on PR #<number>"timeout_ms: 600000 (10 minutes)persistent: falsecommand: A polling script that runs in a while true; do ... sleep 30; done loop. The script should use the same provider-specific comment-fetch commands from Step 3 (Fetch Review Comments) to check for Qodo bot comments. If Qodo comments are found AND they do not contain "Come back again in a few minutes" or "An AI review agent is analysing this pull request", output REVIEW_COMPLETE and exit. Use || true on API calls for transient failure resilience.REVIEW_COMPLETE: Inform "Qodo review is ready!" and return to Step 3 to fetch and parse the review comments normally.If the review is ready (Qodo comments found, no "in progress" markers): Proceed directly to Step 3b.
Deduplicate issues across summary and inline comments:
Gerrit deduplication: Qodo inline comments contain an Agent Prompt section (rendered as plain text — Gerrit doesn't support expandable blocks) with detailed fix instructions. When deduplicating, preserve the Agent Prompt from each unique finding.
Derive severity from Qodo's action level and position:
Action level determines severity range:
Qodo's position within each action level determines the specific severity:
Example: 7 "Action required" issues would be split as:
Example: 5 "Action required" + 3 "Review recommended" + 2 "Other" issues would be split as:
Action guidelines:
IMPORTANT: Use actual Unicode emoji characters (e.g. 🔴, 🟠, 📘, ⛨, ⚙), NOT GitHub-style shortcodes (:red_circle:, :books:, :shield:). Shortcodes do not render in terminal environments.
Display as a markdown table in Qodo's exact original ordering (do NOT reorder by severity - Qodo's order IS the severity ranking):
Qodo Issues for PR #123: [PR Title]
| # | Severity | Issue Title | Issue Details | Type | Action |
|---|----------|-------------|---------------|------|--------|
| 1 | 🔴 CRITICAL | Insecure authentication check | • **Location:** src/auth/service.py:42<br><br>• **Issue:** Authorization logic is inverted | 🐞 Bug ⛨ Security | Fix |
| 2 | 🔴 CRITICAL | Missing input validation | • **Location:** src/api/handlers.py:156<br><br>• **Issue:** User input not sanitized before database query | 📘 Rule violation ⛯ Reliability | Fix |
| 3 | 🟠 HIGH | Database query not awaited | • **Location:** src/db/repository.py:89<br><br>• **Issue:** Async call missing await keyword | 🐞 Bug ✓ Correctness | Fix |
Single-finding shortcut: If exactly one issue was parsed in Step 4, skip this question entirely — "Review each issue" and "Auto-fix all" collapse to the same thing with one finding and are misleading. Proceed directly to Step 6 (manual review) for that single issue, regardless of its Action ("Fix" or "Defer"). Step 6's per-issue prompt always surfaces in single-finding mode, so the user is never silently skipped over.
Otherwise (two or more issues), ask the user how they want to proceed using AskUserQuestion:
Options:
Based on the user's choice:
If "Review each issue" was selected:
git add <modified-files> && git commit -m "fix: <issue title>"git add <modified-files>) but wait until all fixes are applied, then amend into a single commit (see Gerrit note below)Gerrit commit strategy: In Gerrit, each commit becomes a separate change. To keep all fixes as a single new patchset on the existing change:
git add)git commit --amend --no-editDo NOT create individual commits per fix for Gerrit.
Single-step approval with AskUserQuestion:
CRITICAL: Single validation only - do NOT show the diff separately and then ask. Combine the diff display and the question into ONE message. The user should see: brief context → current code → proposed diff → AskUserQuestion, all at once.
Example: Show location, Qodo's guidance, current code, proposed diff, then AskUserQuestion with options (✅ Apply fix / ⏭️ Defer / 🔧 Modify). Wait for user choice, apply via Edit tool if approved.
If "Auto-fix all" was selected:
git add <modified-files> && git commit -m "fix: <issue title>"git add <modified-files>) — do NOT commit yet✅ Fixed: [Issue Title] at
[Location]Agent prompt: [the Qodo agent prompt used]
git commit --amend --no-editREQUIRED: After all issues have been reviewed (fixed or deferred), ALWAYS post a comment summarizing the actions taken, even if all issues were deferred.
See providers.md § Post Summary Comment for provider-specific commands and summary format.
Gerrit: Batch the summary comment AND all inline replies into a single API call. This is more efficient and avoids multiple email notifications. Use the unified review endpoint with both message (summary) and comments (inline replies) — see gerrit.md § Post Summary Comment.
Important resolution rules for inline replies:
"unresolved": false (resolves the thread)"unresolved": false (resolves the thread — the next Qodo review will re-evaluate)After posting the summary, resolve the Qodo review comment:
Find the Qodo "Code Review by Qodo" comment and mark it as resolved or react to acknowledge it.
See providers.md § Resolve Qodo Review Comment for provider-specific commands.
If resolve fails (comment not found, API error), continue — the summary comment is the important part.
If any fixes were applied (commits were created in Steps 6/7), ask the user if they want to push:
git push (for Gerrit: git push origin HEAD:refs/for/<target-branch> — this creates a new patchset on the existing change, matched by the Change-Id in the commit message. See gerrit.md § Push Changes)git pushImportant: If all issues were deferred, there are no commits to push — skip this step.
Only run this step if DRAFT_PR_CREATED = true (a draft PR was created earlier in this session). Skip entirely if the PR already existed or was created as a regular PR.
After completing all steps, always echo the PR/MR URL to the user so they can easily navigate to it. Use the PR URL detected in Step 2.
Example output: 🔗 PR: https://github.com/owner/repo/pull/123
For Gerrit: 🔗 Change: https://<gerrit-host>/c/<project>/+/<change-number>
If the remote URL doesn't match GitHub, GitLab, Bitbucket, Azure DevOps, or Gerrit, inform the user and exit.
See providers.md § Error Handling for details.
<branch-name>. A PR is needed to trigger a Qodo review."DRAFT_PR_CREATED = true and save the PR number/ID. Inform "Draft PR created!" then proceed to the Wait for Qodo review flow (Step 3a).DRAFT_PR_CREATED = false. Inform "PR created!" then proceed to the Wait for Qodo review flow (Step 3a).git push origin HEAD:refs/for/<branch> (see gerrit.md § Create Change). Then proceed to the Wait for Qodo review flow (Step 3a). If no, exit skill.IMPORTANT: Do NOT proceed to Step 3b without a PR/MR. This skill only works with Qodo reviews, not manual reviews.
Handled by Step 3a — proceeds to the Wait for Qodo review flow.
If the detected provider's CLI is not installed, provide installation instructions and exit.
See providers.md § Error Handling for provider-specific installation commands.
Used per-issue in Steps 6 and 7 to reply to Qodo's inline comments:
Use the inline comment ID preserved during deduplication (Step 3b) to reply directly to Qodo's comment.
See providers.md § Reply to Inline Comments for provider-specific commands and reply format. For Gerrit, all replies go through a single unified endpoint and can be batched — see gerrit.md § Reply to Comments.
Keep replies short (one line). If a reply fails, log it and continue.
development
Loads coding rules from Qodo most relevant to the current coding task by generating a semantic search query from the assignment. Use when Qodo is configured and the user asks to write, edit, refactor, or review code, or when starting implementation planning. Skip if rules are already loaded.
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.