Skip to content

fix(skills): rename code-review skill to coderabbit-review to stop shadowing Claude Code's built-in /code-review#19

Open
anatolykoptev wants to merge 1 commit into
coderabbitai:mainfrom
anatolykoptev:fix/code-review-skill-collision
Open

fix(skills): rename code-review skill to coderabbit-review to stop shadowing Claude Code's built-in /code-review#19
anatolykoptev wants to merge 1 commit into
coderabbitai:mainfrom
anatolykoptev:fix/code-review-skill-collision

Conversation

@anatolykoptev

@anatolykoptev anatolykoptev commented Jun 21, 2026

Copy link
Copy Markdown

The problem

Installing the code-review skill in Claude Code breaks Claude Code's own built-in /code-review command. The skill registers its slash command from the name: field, so name: code-review claims the global /code-review and silently shadows the built-in — it just becomes unreachable, with no warning. Reported in #18, and a second user hit it too.

Why it happens

A skill's name: is meant to register under the plugin namespace (/coderabbit:code-review), but a current Claude Code regression makes name: bypass the namespace and grab the bare global name (upstream: anthropics/claude-code#22063). And on the npx skills add path the skill installs with no namespace at all, so it's /code-review either way.

The fix

Rename the skill code-reviewcoderabbit-review (name: + directory). This is collision-free on both install paths — /coderabbit-review (skills package) and /coderabbit:coderabbit-review (plugin) — mirrors the existing /coderabbit:coderabbit-review command, and stays correct once #22063 is fixed upstream. Kept the name: field, since every skill here has one (e.g. autofix).

Changes

  • rename skills/code-review/skills/coderabbit-review/ (name: + version bump)
  • update the README reference
  • add a CHANGELOG entry

Natural-language triggers ("review my code") are unchanged — only the explicit slash command moves from /code-review to /coderabbit-review.

Closes #18.

Summary by CodeRabbit

  • Bug Fixes

    • Renamed the code-review skill to coderabbit-review to avoid conflict with the built-in /code-review command
  • Documentation

    • Updated README to reflect the new skill name and path reference
    • Updated CHANGELOG with the rename under Unreleased → Fixed
    • Updated the skill’s metadata (name, description, and version to 0.1.1)

@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 4a3604de-5ed6-4c4e-864b-ce1585f53369

📥 Commits

Reviewing files that changed from the base of the PR and between a34fbb2 and f39a53b.

📒 Files selected for processing (3)
  • CHANGELOG.md
  • README.md
  • skills/coderabbit-review/SKILL.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • coderabbitai/bitbucket (manual)
✅ Files skipped from review due to trivial changes (3)
  • CHANGELOG.md
  • skills/coderabbit-review/SKILL.md
  • README.md
📜 Recent review details
⚠️ CI failures not shown inline (2)

GitHub Actions: Required approver / 0_verify.txt: fix(skills): rename code-review skill to coderabbit-review to stop shadowing Claude Code's built-in /code-review

Conclusion: failure

View job details

##[group]Run set -euo pipefail
 �[36;1mset -euo pipefail�[0m
 �[36;1m�[0m
 �[36;1mowner="${REPOSITORY%%/*}"�[0m
 �[36;1mrepo="${REPOSITORY#*/}"�[0m
 �[36;1m�[0m
 �[36;1mresponse="$(�[0m
 �[36;1m  gh api graphql \�[0m
 �[36;1m    -f owner="$owner" \�[0m
 �[36;1m    -f repo="$repo" \�[0m
 �[36;1m    -F number="$PR_NUMBER" \�[0m
 �[36;1m    -f query='�[0m
 �[36;1m      query($owner: String!, $repo: String!, $number: Int!) {�[0m
 �[36;1m        repository(owner: $owner, name: $repo) {�[0m
 �[36;1m          pullRequest(number: $number) {�[0m
 �[36;1m            isDraft�[0m
 �[36;1m            reviews(last: 100) {�[0m
 �[36;1m              nodes {�[0m
 �[36;1m                author {�[0m
 �[36;1m                  login�[0m
 �[36;1m                }�[0m
 �[36;1m                commit {�[0m
 �[36;1m                  oid�[0m
 �[36;1m                }�[0m
 �[36;1m                state�[0m
 �[36;1m                submittedAt�[0m
 �[36;1m              }�[0m
 �[36;1m            }�[0m
 �[36;1m          }�[0m
 �[36;1m        }�[0m
 �[36;1m      }�[0m
 �[36;1m    '�[0m
 �[36;1m)"�[0m
 �[36;1m�[0m
 �[36;1mis_draft="$(jq -r '.data.repository.pullRequest.isDraft' <<<"$response")"�[0m
 �[36;1mif [[ "$is_draft" == "true" ]]; then�[0m
 �[36;1m  echo "Draft PRs cannot merge; approver gate will run when ready for review."�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mapproved_by="$(�[0m
 �[36;1m  jq -r \�[0m
 �[36;1m    --arg head "$HEAD_SHA" \�[0m
 �[36;1m    --argjson approvers "$(jq -Rc 'split(",")' <<<"$REQUIRED_APPROVERS")" \�[0m
 �[36;1m    '�[0m
 �[36;1m      .data.repository.pullRequest.reviews.nodes�[0m
 �[36;1m      | map(select((.author.login // "") as $login | $approvers | index($login)))�[0m
 �[36;1m      | sort_by(.author.login)�[0m
 �[36;1m      | group_by(.author.login)�[0m
 �[36;1m      | map(max_by(.submittedAt))�[0m
 �[36;1m      | map(select(.state == "APPROVED" and .commit.oid == $head))�[0m
 �[36;1m      | first.author.login // empty�[0m
 �[36;1m    ...

GitHub Actions: Required approver / verify: fix(skills): rename code-review skill to coderabbit-review to stop shadowing Claude Code's built-in /code-review

Conclusion: failure

View job details

##[group]Run set -euo pipefail
 �[36;1mset -euo pipefail�[0m
 �[36;1m�[0m
 �[36;1mowner="${REPOSITORY%%/*}"�[0m
 �[36;1mrepo="${REPOSITORY#*/}"�[0m
 �[36;1m�[0m
 �[36;1mresponse="$(�[0m
 �[36;1m  gh api graphql \�[0m
 �[36;1m    -f owner="$owner" \�[0m
 �[36;1m    -f repo="$repo" \�[0m
 �[36;1m    -F number="$PR_NUMBER" \�[0m
 �[36;1m    -f query='�[0m
 �[36;1m      query($owner: String!, $repo: String!, $number: Int!) {�[0m
 �[36;1m        repository(owner: $owner, name: $repo) {�[0m
 �[36;1m          pullRequest(number: $number) {�[0m
 �[36;1m            isDraft�[0m
 �[36;1m            reviews(last: 100) {�[0m
 �[36;1m              nodes {�[0m
 �[36;1m                author {�[0m
 �[36;1m                  login�[0m
 �[36;1m                }�[0m
 �[36;1m                commit {�[0m
 �[36;1m                  oid�[0m
 �[36;1m                }�[0m
 �[36;1m                state�[0m
 �[36;1m                submittedAt�[0m
 �[36;1m              }�[0m
 �[36;1m            }�[0m
 �[36;1m          }�[0m
 �[36;1m        }�[0m
 �[36;1m      }�[0m
 �[36;1m    '�[0m
 �[36;1m)"�[0m
 �[36;1m�[0m
 �[36;1mis_draft="$(jq -r '.data.repository.pullRequest.isDraft' <<<"$response")"�[0m
 �[36;1mif [[ "$is_draft" == "true" ]]; then�[0m
 �[36;1m  echo "Draft PRs cannot merge; approver gate will run when ready for review."�[0m
 �[36;1m  exit 0�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mapproved_by="$(�[0m
 �[36;1m  jq -r \�[0m
 �[36;1m    --arg head "$HEAD_SHA" \�[0m
 �[36;1m    --argjson approvers "$(jq -Rc 'split(",")' <<<"$REQUIRED_APPROVERS")" \�[0m
 �[36;1m    '�[0m
 �[36;1m      .data.repository.pullRequest.reviews.nodes�[0m
 �[36;1m      | map(select((.author.login // "") as $login | $approvers | index($login)))�[0m
 �[36;1m      | sort_by(.author.login)�[0m
 �[36;1m      | group_by(.author.login)�[0m
 �[36;1m      | map(max_by(.submittedAt))�[0m
 �[36;1m      | map(select(.state == "APPROVED" and .commit.oid == $head))�[0m
 �[36;1m      | first.author.login // empty�[0m
 �[36;1m    ...

📝 Walkthrough

Walkthrough

The skill name changes from code-review to coderabbit-review in its metadata, README references, and changelog entry, and the skill version is bumped from 0.1.0 to 0.1.1.

Changes

Skill rename: code-review → coderabbit-review

Layer / File(s) Summary
Skill metadata, docs, and changelog update
skills/coderabbit-review/SKILL.md, README.md, CHANGELOG.md
Frontmatter name updates to coderabbit-review with a version bump to 0.1.1; the README skill listing and Claude Code section reference the new name and path; the changelog adds the rename note under Unreleased → Fixed.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

🐰 I hopped through the changelog, neat and bright,
Renamed the skill and set the docs aright.
One little bump, one tidy new refrain,
coderabbit-review now sings in the lane.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and accurately describes the main change: renaming the skill to avoid shadowing Claude Code’s built-in command.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
✨ Simplify code
  • Create PR with simplified code

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The code-review skill registers a bare /code-review slash command (via its frontmatter name), which shadows Claude Code's built-in /code-review and makes it unreachable. Renaming to coderabbit-review is collision-free on both the 'npx skills add' (bare) and Claude Code plugin (/coderabbit:) install paths, and mirrors the existing /coderabbit:coderabbit-review command.

Upstream cause: anthropics/claude-code#22063 (name bypasses plugin namespacing).

Closes coderabbitai#18.
@anatolykoptev anatolykoptev force-pushed the fix/code-review-skill-collision branch from a34fbb2 to f39a53b Compare June 28, 2026 10:26
@anatolykoptev

Copy link
Copy Markdown
Author

Rebased onto latest main — the branch was a commit behind, should be clean now. Still a small, contained rename (code-reviewcoderabbit-review) to stop the skill shadowing Claude Code's built-in /code-review, plus the README/CHANGELOG touch-ups. Ready for review whenever someone has a moment. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Skill named code-review collides with Claude Code's built-in /code-review command

1 participant