Skip to content

feat: add native Gemini CLI extension packaging - #24

Merged
nehal-a2z merged 2 commits into
mainfrom
nehal/gemini-cli-extension
Aug 4, 2026
Merged

feat: add native Gemini CLI extension packaging#24
nehal-a2z merged 2 commits into
mainfrom
nehal/gemini-cli-extension

Conversation

@nehal-a2z

@nehal-a2z nehal-a2z commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • Add a root gemini-extension.json manifest for native Gemini CLI installation.
  • Add a thin Gemini TOML adapter for the branded /coderabbit:review command.
  • Remove unsupported capabilities frontmatter so the shared code-reviewer agent loads under Gemini's strict schema.
  • Document the new package and its release state in the README, distribution inventory, and changelog.

Before → After

Before: CodeRabbit's portable Agent Skill could be installed for Gemini CLI, but gemini extensions install https://github.com/coderabbitai/skills failed because the repository had no Gemini manifest. Gemini also ignored the Claude Markdown command and rejected the shared subagent metadata.

After: The repository validates as a native Gemini CLI extension and exposes the existing skills, a branded /coderabbit:review command, and the shared code-reviewer subagent. No separate Gemini repository, MCP server, hook, or backend path is introduced.

Compatibility

  • Keep the shared code-review skill name unchanged; /coderabbit:review avoids Google's existing /code-review command surface.
  • The removed agent frontmatter duplicated content already present in the Markdown body.
  • Existing Antigravity packaging still validates successfully.
  • Gemini Code Assist IDE and its GitHub App remain separate products and are not claimed as supported by this package.

Validation

  • gemini extensions validate . — pass with Gemini CLI 0.40.0

  • agy plugin validate . — pass: 2 skills, 1 agent, 2 converted commands

  • JSON and TOML parse checks — pass

  • git diff --check — pass

  • gemini extensions install https://github.com/coderabbitai/skills --ref nehal/gemini-cli-extension --consent --skip-settings — pass

  • gemini extensions list — pass: showed coderabbit (1.2.0) and discovered both bundled skills

  • The temporary extension install was removed after validation. Interactive /coderabbit:review invocation remains unverified because Gemini authentication was unavailable.

Release gates

  • Reconcile or land fix(skills): align review guidance with CLI 0.7 #23 before publishing so the bundled review guidance uses the CLI 0.7 public scope flags.
  • Publish and mark v1.2.0 as Latest; the current Latest release, v1.1.1, predates this manifest, so the unqualified install command will not work until then.
  • Add the gemini-cli-extension repository topic after release if gallery discovery is desired.

Summary by CodeRabbit

  • New Features

    • Added support for installing and using the project as a native Gemini CLI extension.
    • Documented the extension’s packaged components, setup steps, and Gemini CLI resources.
  • Documentation

    • Updated command and subagent guidance to include Gemini CLI.
    • Added distribution, release, and maintenance guidance for validating the extension.
    • Updated supported-environment and repository inventory information to reflect Gemini CLI availability.
    • Aligned code-review configuration documentation with Gemini CLI metadata requirements.

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The documentation now describes native Gemini CLI extension packaging, installation, commands, components, release status, verification guidance, and maintenance validation. The README identifies Gemini CLI as a supported environment and lists the extension manifest and bundled components. The code-reviewer agent no longer declares a capabilities metadata block. The changelog records both updates.

Poem

A rabbit hops through docs so bright,
Gemini’s extension takes its flight.
Skills and commands line up in rows,
Metadata sheds its extra clothes.
Validation keeps the burrow right.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: adding native Gemini CLI extension packaging.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch nehal/gemini-cli-extension
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch nehal/gemini-cli-extension

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

@nehal-a2z
nehal-a2z marked this pull request as ready for review August 4, 2026 06:06
@nehal-a2z
nehal-a2z requested a review from juanpflores as a code owner August 4, 2026 06:06

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@DISTRIBUTION_CHANNELS.md`:
- Line 15: Align the Gemini CLI native extension status between
DISTRIBUTION_CHANNELS.md and the README installation guidance: either mark the
README repository-URL install section as pre-release, or update the Gemini
channel row after v1.2.0 is Latest and all required release work is complete.

In `@README.md`:
- Around line 119-120: Update the README table entry for commands/ to describe
shared review-command components rather than native commands for each product,
reflecting that Claude Code uses the command file while Gemini and Antigravity
use their respective adapters or conversion flows. Leave the agents/ entry
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 6822b754-3031-4068-94cb-9def7cc33862

📥 Commits

Reviewing files that changed from the base of the PR and between c61c490 and 6414728.

⛔ Files ignored due to path filters (2)
  • commands/coderabbit/review.toml is excluded by !**/*.toml
  • gemini-extension.json is excluded by !**/*.json
📒 Files selected for processing (4)
  • CHANGELOG.md
  • DISTRIBUTION_CHANNELS.md
  • README.md
  • agents/code-reviewer.md
🔗 Linked repositories identified

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

  • coderabbitai/bitbucket (manual)
💤 Files with no reviewable changes (1)
  • agents/code-reviewer.md
📜 Review details
⚠️ CI failures not shown inline (2)

GitHub Actions: Required approver / 0_verify.txt: feat: add native Gemini CLI extension packaging

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: feat: add native Gemini CLI extension packaging

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    ...
🧰 Additional context used
🪛 LanguageTool
DISTRIBUTION_CHANNELS.md

[style] ~26-~26: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ckaged in-repo or publicly published. - When the Gemini manifest or bundled componen...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🔇 Additional comments (4)
CHANGELOG.md (1)

9-10: LGTM!

Also applies to: 21-21

DISTRIBUTION_CHANNELS.md (1)

3-3: LGTM!

Also applies to: 26-26

README.md (2)

79-91: 🎯 Functional Correctness

Complete the Gemini install smoke test before publishing this path.

The README presents gemini extensions install https://github.com/coderabbitai/skills as a working flow, but the PR notes that local install testing is incomplete because of Gemini trust-state requirements. Run the installation from a clean trust state and confirm that gemini extensions list shows the extension and /coderabbit:review resolves to commands/coderabbit/review.toml. Otherwise, mark this section as unverified.


8-9: LGTM!

Also applies to: 121-122, 261-274

Comment thread DISTRIBUTION_CHANNELS.md
Comment thread README.md
juanpflores
juanpflores previously approved these changes Aug 4, 2026
@nehal-a2z
nehal-a2z merged commit bbb4ab2 into main Aug 4, 2026
1 of 4 checks passed
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.

2 participants