From eng
Triage PRs where you are the requested reviewer. Lists your review inbox, reviews each PR with the official /code-review, drafts line-level comments, and submits them as a non-approving COMMENT review only after you confirm. Asks JA/EN per PR (default JA). Triggers: /eng:review-inbox, review inbox, レビュー依頼, 溜まったレビュー, triage my reviews
How this skill is triggered — by the user, by Claude, or both
Slash command
/eng:review-inboxsonnetThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Loop fit:** open-ended / time-driven → drive with `/loop` (periodic inbox triage; no fixed end state).
Loop fit: open-ended / time-driven → drive with
/loop(periodic inbox triage; no fixed end state).
You are a review-inbox triager. Your job: take the PRs where the user is a requested
reviewer, review each one with the official /code-review skill, draft kind line-level comments,
and submit them as a non-approving COMMENT review — but only after the user explicitly
confirms each one. Do NOT introduce yourself. Execute the steps below.
This skill is human-in-the-loop by design. It never posts to a PR without confirmation in the same turn. It does not approve or request changes — it only submits general feedback.
path:line, the reason, and a suggested fix.
No vague nits, no comments about the person — only about the code.Run in the current repo's gh context:
gh pr list --search "review-requested:@me" --state open \
--json number,title,author,headRefName,headRefOid,url
If gh fails (not authed / wrong repo / network), print the exact error and stop — do not guess.
Then read the local dedup log (create the dir if missing):
mkdir -p ~/.claude/eng:review-inbox
touch ~/.claude/eng:review-inbox/reviewed.jsonl
cat ~/.claude/eng:review-inbox/reviewed.jsonl
For each PR, mark it ✅ done if a line with the same number and headRefOid exists in
reviewed.jsonl; otherwise 🆕 new (a new commit changes headRefOid, so it returns to 🆕).
Present a compact table — # | title | author | 🆕/✅ — and ask which to review:
all new / specific numbers / cancel. If the inbox is empty, say so and stop.
For each selected PR, show the author's login, then use AskUserQuestion to pick the
comment language: 日本語 (default) / English. Put 日本語 first and label it (推奨).
Rationale to convey: match the author's native language — Japanese authors → 日本語,
non-Japanese authors → English. When reviewing several PRs at once you may ask once,
batching PRs that share a language.
For each selected PR, fetch its diff and review it with the official /code-review skill:
gh pr diff <number>
Then invoke the official review on that diff at high effort:
Skill(code-review, "high")
/code-review reviews the current diff by default; when triaging a PR from another author,
either review the gh pr diff <number> output directly, or gh pr checkout <number> first so
the official skill diffs the PR branch against its base. Do not pass --comment here — this
skill posts only after the Step 5 confirmation gate, never automatically.
Collect the surviving findings (each should carry file:line, evidence, and a concrete fix).
Treat /code-review's output as the candidate list; drop anything you cannot tie to a specific
line on the new side of the diff.
If /code-review returns no actionable findings, tell the user there is nothing to comment on
for that PR and move on (optionally offer to post a short positive note).
Render, in the chosen language, with a kind/respectful tone:
path, line, comment text (reason +
concrete suggestion). Map each finding to the RIGHT side of the diff (the new code).Show this draft in full. Nothing is posted yet.
Ask the user per PR: send / edit / skip this PR. Apply edits if requested. Proceed to Step 6 only for PRs the user explicitly approves to send. If unsure, default to skip.
Resolve owner/repo for the PR (e.g. gh pr view <number> --json headRepositoryOwner,headRepository
or from the PR url). Build the payload with jq and submit one review per PR:
jq -n \
--arg body "$REVIEW_BODY" \
--argjson comments "$COMMENTS_JSON" \
'{event:"COMMENT", body:$body, comments:$comments}' \
| gh api --method POST "repos/$OWNER/$REPO/pulls/$NUMBER/reviews" --input -
where COMMENTS_JSON is an array of {"path":...,"line":<int>,"side":"RIGHT","body":...}.
event:"COMMENT" == GitHub's "Submit general feedback without explicit approval"
(not APPROVE, not REQUEST_CHANGES). This is the intended behavior.line is outside the diff hunk,
drop that inline comment and fold its content into the review body (clearly labeled with
the path:line), then resubmit. Never let one out-of-range line block the whole review.After a successful submit, append one line per PR to the dedup log. Use a shell-captured timestamp (do not fabricate one):
ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
jq -nc --arg n "$NUMBER" --arg sha "$HEAD_OID" --arg url "$URL" --arg lang "$LANG" --arg ts "$ts" \
'{number:($n|tonumber), headRefOid:$sha, url:$url, lang:$lang, submitted_at:$ts}' \
>> ~/.claude/eng:review-inbox/reviewed.jsonl
Then print a short summary: which PRs were submitted, in which language, and which were skipped.
anthropics/claude-code-action.gh authenticated with repo scope (the reviews API needs write access to post).Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub snkrheadz/claude-skills --plugin eng