Qodo PR レビューワーフローの互換性別名(新しいバージョンでの呼び出し方)です。 以下に組み込まれた完全な Qodo PR レビューフロー(プルリクエストの確認作業)に従い、新規の実行には qodo-review-resolver を使用してください。ライフサイクル更新の由来情報(更新が正式版のどのリリースから来たかの記録)は、意図的に標準的な qodo-review-resolver リリース定義を使用しています。
Compatibility alias for explicit qodo-pr-resolver requests. Follow the complete Qodo PR review workflow embedded here and use qodo-review-resolver for new invocations; lifecycle update provenance intentionally uses the canonical qodo-review-resolver release-index identity.
Use the qodo CLI to read a pull request's review session — its status, the commit that
was reviewed, and every finding with its resolution status — for any PR (yours or someone
else's). Reading alone is a valid use: stop after the read to report where a review stands or
what it flagged (e.g. to gate a merge on it being clean at head). To go further, resolve the
open findings in code, applying your own judgment (the review is a strong second opinion, not
gospel) — by default you evaluate the findings and let the user pick which to apply (pass autofix
to apply directly), run once (report + resolve what the user approves) or as a watch loop (resolve →
let Qodo re-review the new commit → repeat until clean). Then record the outcome on the findings
you settled — mark-implemented for ones you fixed, dismiss for ones the user agreed to close
without a code change. That is what clears the merge-policy block those findings hold; skip it and
the review stays red until a human clicks through the PR. You still never post to the forge
yourself: the status tools write Qodo's review DB and Qodo reconciles the PR comments. (Plain
git/forge metadata reads — git rev-parse HEAD, gh pr view --json headRefOid — are fine and in
fact required for the freshness check below; the "don't scrape" rule is about qodo, not your shell.)
autofix scope.Follow the detailed workflow below: fetch structured state, require a completed exact-head review, present open findings, apply only approved fixes, and record only outcomes actually settled.
To check a review's status or findings, always run the
qodoread command below — do not fetch the rendered PR review comments withgh/curl. The comment UI is lossy, provider- specific, and easy to read stale against the head commit; the tool returns the reviewedcommit_sha. To judge freshness, compare thatcommit_shato the PR head — which you know directly for a PR you just pushed (git rev-parse HEAD), or read as plain forge metadata (gh pr view <pr> --json headRefOid,git ls-remote) for any other PR. This rule is only about reading the review (don't scrape its comments) — not about forbidding forge metadata like the head SHA.
A Qodo command can emit QODO_NOTICE <json> to stderr while still succeeding. When
code is qodo_skill_update_available, keep the command's result and finish the current
task. Then follow the notice's steps: do read-only inventory first, resolve the installed
Qodo package and scope, show the exact lifecycle-owner update command or UI action, and ask
once before any mutation. If the user declines, keep the current version usable.
Never invoke a different lifecycle owner, guess a placeholder, or install an optional package implicitly. After an approved update, ask for the host restart named by the notice; the current session may still have the old skill loaded.
First resolve the executable using the qodo: command not found fallback below. Before any other
Qodo command, run <qodo> --version exactly as shown, with no provenance flags.
This unadorned probe is intentionally compatible with older Qodo CLIs. This skill requires Qodo
CLI 0.1.0-next.37 or newer.
If the version is older or cannot be parsed, do not run whoami, login, or a managed tool and
do not describe the failure as an authentication problem. Explain that the skill is newer than the
runtime, show qodo update as the update command for the runtime's already-recorded origin, and ask
once before running it. For a customer deployment, keep its organization-provided update origin;
never switch it to the public service. After an approved update, rerun the unadorned version probe
and continue only when it satisfies the minimum. If the user declines or the update fails, stop with
the current skill and user files unchanged.
qodo --version # compatibility probe — run this FIRST
qodo read whoami --json --skill qodo-review-resolver --skill-version 1.4.3 --distribution marketplace --host claude-code
qodo read pr-review-session findings --pr-url <PR_URL> --json # the review session for a PR
qodo pr-review-session mark-implemented --finding-ids <id>,<id> --explanation "..." --json
qodo pr-review-session dismiss --finding-ids <id> --reason intentional --explanation "..." --json
qodo read tools pr-review-session --json # exact safe tools + flags (offline)
Add --json to anything you parse. Confirm the exact tool names, flags, and read/write status
with qodo read tools pr-review-session [<tool>] --json (renders offline) — the names above
are illustrative, not guaranteed current.
unknown command on dismiss/mark-implemented after authentication may be a stale local tool
catalog — refresh once as described below. If the commands are still absent, the workspace does
not currently expose PR-review writes; report that capability boundary instead of looping.
qodo: command not found? That's PATH, not a missing install: GUI-launched agents (e.g.
the Claude Code desktop app) run shells with a minimal PATH. Retry with the absolute path
~/.qodo/bin/qodo (or $QODO_HOME/bin/qodo if set) and keep using it for every qodo
command here. Only if that file is missing too is qodo actually not installed; tell the
user to obtain a checksum-pinned installer command from Qodo or their organization's
administrator. Installers are served from https://get.qodo.ai, but never invent a digest
or pipe an installer directly into a shell.
Sandbox auth diagnostic. In a sandboxed environment, if qodo read whoami fails for any reason
(including Not logged in), ask the user to approve one exact read-only retry of qodo read whoami
outside the sandbox before recommending login or refreshing tools. Keychain failures can be
reported as generic auth failures, so the sandboxed result alone is not diagnostic. That approval
applies only to this single diagnostic retry: do not reuse it, request persistent approval, or move
later Qodo commands outside the sandbox automatically. If the retry succeeds, continue with normal
per-command permission checks. If it still fails, follow the normal auth troubleshooting below.
qodo read whoami. After the sandbox retry above when applicable, a non-zero
exit → tell the user to run qodo login, then stop. Never guess creds. The tool only exists
after login, so treat Not logged in or No tool catalog cached as "run qodo login", and don't retry before they have.
An unknown command/unknown option while whoami SUCCEEDED is not an auth failure. Run
qodo tools --refresh once and re-check qodo read tools pr-review-session --json. If the write command
remains absent, report that this account/workspace currently has read-only review capability;
do not re-login, retry indefinitely, or substitute a forge comment for the structured write.origin; normalize both to the full case-insensitive owner/repo identity. They must match
exactly. A missing/ambiguous origin or mismatch means stop and ask the user to open the correct
checkout — never apply a finding from one repository to another worktree. Repeat this check if
the target PR changes during a watch loop.qodo read pr-review-session findings --pr-url <PR_URL> --json returns:
review_session — the latest review run: status, commit_sha (the last commit included in
the review — the code these findings describe), started_at. null = the PR has no review
yet — tell the user and stop (nothing to resolve).findings[] — every current finding, each with: title, description, category,
action_level (action_required > remediation_recommended > informational),
attribution_status, git_sha, review_run_id, comment_id / inline_comment_id.finding_count: 0 with a non-null session = a clean review.
The review_session tells you whether the findings are real yet and what code they cover —
check it before acting:
status is not a terminal/completed state (e.g. started /
in-progress), a review is mid-flight — the findings are provisional and will change. Do NOT
resolve them yet; poll qodo read pr-review-session findings … --json until status is completed.review_session.commit_sha is the last commit the
review included. If it's behind the PR head, the findings are stale — they don't reflect
your latest code. Either the review hasn't run on the new commit yet (wait) or you're looking at
an old run. Only trust findings when the session is completed AND its commit_sha is the commit
you care about (the head, in a watch loop).In short: act only on a completed review of the current commit. A running review or a
lagging commit_sha means wait, don't fix.
After fetching the session and comparing its commit to the PR head, show this once:
# 🔎 Qodo PR Review
**PR:** <owner/repo#number>
**Review:** <completed and current | running | stale | not found>
**Findings:** <N open · N closed, grouped by action level when useful>
**Reviewed commit:** <short SHA, or "none">
---
This block exposes the freshness gate before anyone acts. Derive every field from the structured session and forge head; never label a review current unless it is completed at the exact head. Render it once per fetched state, not again after every edit or status write. Resolution details and remaining findings follow below it.
attribution_status, and it is NOT a three-way field — it carries the raw
stored value, so matching only pending silently drops real work:
pending, partial_implementation, not_implemented,
focus_areas_edited. The last three are re-attributions of a finding that is still unresolved
(a partial fix is still an open finding).full_implementation, dismissed, detected_after_merge, outdated.action_level is severity, not open-vs-closed. A closed finding can still be
action_required.action_level: action_required first, then remediation_recommended; treat
informational as optional and surface it, don't necessarily fix it.If the user gave an instruction, treat it as a filter over the open findings and act only on the matches — don't widen it:
action_level == action_required;
"everything actionable" → action_required + remediation_recommended.category == Security (same for correctness,
performance, etc.).id or title.No instruction → default to presenting for approval open action_required then
remediation_recommended, and surface (don't auto-fix) informational. When an instruction is
ambiguous, state the scope you picked in one line before acting, so the user can redirect. Always
report which findings you skipped and why (out of scope / dismissed / informational) — never
silently drop one.
Each round follows the present-and-ask gate from Resolve a finding — evaluate, present, and let
the user pick which findings to resolve — unless autofix is in effect, which lets you apply the
recommended fixes without prompting. Either way, ask before pushing unless told otherwise.
Once (default). Fetch → evaluate every open finding (triage — all four OPEN statuses, not just
pending) → present + ask (or apply directly under autofix) → resolve the chosen ones in code →
commit/push per the user's workflow → record the outcome
(mark-implemented for what you fixed; dismiss, with the user's explicit go, for what they
agreed to close without a change) → summarize what you resolved and what remains (e.g. skipped /
dismissed / informational). Stop. Don't loop unless asked. Triage covers
all open findings, but the picker only offers the actionable set —
action_required then remediation_recommended — with informational surfaced separately,
matching the default scope above; put informational in the picker only when the user asks.
(Offering isn't selecting: every box starts unticked.)
Watch until clean (when the user says "babysit" / "keep going until it's clean"). autofix is
what makes this loop autonomous — without it you still present + ask each round. After you resolve
findings and the fix commit is pushed, Qodo re-reviews the new commit — so:
git rev-parse HEAD), or, for a
PR you didn't push, read it as forge metadata (gh pr view <pr> --json headRefOid). That's a
metadata read, not review-comment scraping — it's fine.qodo read pr-review-session findings … --json until the review is completed AND its
commit_sha equals that head SHA. Until both hold, the findings are stale or provisional
(a review is still running, or it describes the pre-fix commit) — do not act on them.partial_implementation is
still open), resolve them and repeat; if none remain, report the
review clean and stop.Qodo's findings are a strong second opinion, not gospel — you and the user hold context it doesn't (the change's intent, project conventions, what's deliberate), and tooling can be wrong (a finding that misreads intent, or a status/attribution glitch). By default your job is to evaluate each finding and let the user decide what to apply — don't edit code unprompted.
Evaluate each finding against the actual code and the PR's intent, and form a recommendation:
title +
description, locate the code — the qodo-codebase-wisdom skill's read tools help when it isn't
local).Present and ask (default). Show each open, in-scope finding with its
action_level/category, your evaluation, and a one-line recommendation, then ask in a single
prompt which findings to resolve. Use whatever the host gives you: a multi-select if it has one
(Claude Code's AskUserQuestion, say), otherwise a numbered list and "reply with the numbers to
resolve". One prompt either way — don't ask per finding. Nothing is pre-selected. Mark which
ones you recommend, but the user must actively choose: this prompt is the last thing standing
between a finding and an edit, so a bare Enter must resolve nothing. Resolve only what the user
picks (edit as normal, matching the surrounding code); report the rest as skipped with your reason.
Do not edit any code before the user has chosen.
Autofix (skip the gate). Only an explicit autofix token in the invocation (e.g.
qodo-review-resolver autofix) skips the prompt outright. Phrasing that merely sounds like opting
in ("just fix them", "don't ask me") is not enough by itself — reading intent wrong here edits code
the user never approved, which is the exact failure this gate exists to prevent. On inferred intent,
name the exact scope you'd apply and get one confirmation — "Reading that as autofix — resolve the
N findings I recommended?" — never "resolve all N", which reads as the whole set and widens scope on
the very ambiguity this check exists to catch. Either way apply exactly what the evaluation decided
and nothing beyond it (findings are usually right, but you're the engineer in the loop, not a rubber
stamp), and report what you resolved and what you skipped.
Commit/push per the user's workflow — ask before pushing unless they've told you to.
attribution_status is the intended signal — a fixed finding is re-attributed to
full_implementation by the next review on its own, so after pushing, re-fetch and work only what's
still open. But it's tooling and can glitch: if a finding stays open after a fix you're confident
in, or a status plainly contradicts the code, don't loop re-fixing it — flag the discrepancy to the
user and move on. (Resolving converges over rounds; a fix can also surface genuinely new findings,
which the watch loop picks up.)
Closing a finding is a write — it updates Qodo's review DB, restyles the finding's PR comments, re-renders the review summary, and releases the merge-policy block that finding holds. Two commands, and the distinction between them is the whole point: one says the code changed, the other says the code didn't and here's why. Never use one to mean the other.
qodo pr-review-session mark-implemented --finding-ids <id>,<id> --explanation "what you changed" --json
qodo pr-review-session dismiss --finding-ids <id>,<id> --reason <reason> --explanation "why" --json
mark-implemented, and all the ones sharing a dismissal reason
go in one dismiss. Up to 100 ids.mark-implemented only for code you actually changed and pushed. It clears the merge gate
without a review having verified the fix, so a wrong claim ships an unfixed finding as fixed. If
another review round is going to run anyway, prefer letting it re-attribute the fix itself; reach
for this when no further round will run before merge, or the gate must clear now.dismiss needs the user's explicit go, per finding, every time — autofix does NOT cover it.
autofix is consent to edit code, which the next review re-checks; a dismissal closes a finding
the review still believes in, is visible to the team, and nothing re-opens it. Present what you
propose to dismiss and why, and dismiss only what the user names.--reason (required): false_positive (the finding is wrong) · intentional (the code is
deliberate and correct) · deferred (real, but out of scope for this PR) · rejected (understood
and declined). Always add --explanation — a reviewer reads it later without your context.results per finding, don't assume the call succeeded as a whole. It is a 200 even when
individual ids fail: not_found (wrong id or wrong workspace) and conflict (already closed, or
not linked to a PR) are terminal — don't retry them. reconciled: false means the DB change
landed but the PR-side update didn't; re-running the same command is safe and idempotent, and the
PR self-heals on its next review regardless. already_dismissed / already_implemented report the
stored reason — a replay never overwrites the original.User: "Resolve the action-required findings on https://github.com/acme/api/pull/318"
qodo read whoami → logged in.qodo read pr-review-session findings --pr-url https://github.com/acme/api/pull/318 --json
→ review_session: status: completed, commit_sha: a1b2c3d (= the PR head, so findings are current);
findings: 3 open (2 pending, 1 partial_implementation) — 2 action_required, 1 informational.action_required → work those 2; the informational one is out of scope (report it, don't fix).db/orders.py. "Missing timeout on the outbound call" → the client already sets a default timeout
upstream → already satisfied → recommend skipping with that reason.db/orders.py). Skipped the timeout one — already set upstream — and 1
informational (out of scope). Push and I'll re-check, or say 'watch' to loop until the review is clean."
(Had the user said resolve … autofix, I'd have applied the recommended fix directly, no prompt.)Use --json, compare review_session.commit_sha with forge head metadata, and stamp the exact
skill/version/distribution provenance on the first Qodo call. Read and write capabilities are
discovered from the installed CLI catalog; rendered forge comments are never the data source.
Treat null sessions, in-progress or stale commits, missing write capabilities, rate limits, and tool-loop errors as explicit states. Preserve them in the report and never close a finding merely to make the review appear clean.
review_session.commit_sha and are only final once status is completed. After any push, treat
them as stale until a completed review's commit_sha catches up to the PR head — otherwise
you'll act on a mid-flight review or "fix" a commit the findings don't describe.dismiss /
mark-implemented, which go through Qodo and let it reconcile the PR. Do not call any forge-write
tool (comments, approvals, labels, description) to "resolve" a finding — resolve it in code, then
record the outcome.deferred to make the list look clean.null session means no review yet.MT-TOOL-LOOP or MT-RATE-LIMITED error means stop/back off and change approach, not retry.Lead with the bottom line — how many findings, how many you resolved, what's left and why — then the specifics. A short, accurate status beats a wall of finding text.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。