Replace broken github plugin with skills-based gh CLI workflow#1364
Closed
axisrow wants to merge 1 commit intoanthropics:mainfrom
Closed
Replace broken github plugin with skills-based gh CLI workflow#1364axisrow wants to merge 1 commit intoanthropics:mainfrom
axisrow wants to merge 1 commit intoanthropics:mainfrom
Conversation
The external_plugins/github/ plugin shipped a single .mcp.json pointing at the remote GitHub Copilot MCP endpoint, which does not support OAuth 2.0 Dynamic Client Registration. Claude Code's plugin auth path requires DCR, so the plugin failed at startup with "Missing environment variables: GITHUB_PERSONAL_ACCESS_TOKEN" and at auth time with "SDK auth failed: Incompatible auth server: does not support dynamic client registration". Reported against macOS, Windows 11, and Linux in anthropics#283 and anthropics/claude-code#3433. This replaces the broken MCP config with a skills bundle adapted from OpenAI's github@openai-curated Codex plugin (Apache License 2.0 — attribution in NOTICE). Four model-invoked skills cover the core workflows: - github: umbrella triage skill - yeet: commit, push, open draft PR - gh-fix-ci: debug failing GitHub Actions checks (+ Python helper) - gh-address-comments: thread-aware PR review follow-up (+ GraphQL helper) All skills use the gh CLI via Claude Code's Bash tool. Authentication goes through "gh auth login" (device-flow OAuth, stored in the OS keyring) — no PAT or env vars required. When CC gains pre-registered OAuth client support for MCP, a structured MCP server can be added back alongside the skills without breaking anything. Connector-specific language from the original Codex skills ("GitHub app from this plugin", "connector-backed reads") was rewritten to use gh commands directly, since Claude Code has no equivalent to OpenAI's proprietary Apps & Connectors registry today. Closes anthropics#283 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Thanks for your interest! This repo only accepts contributions from Anthropic team members. If you'd like to submit a plugin to the marketplace, please submit your plugin here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
external_plugins/github/ships a single.mcp.jsonpointing at the remoteGitHub Copilot MCP endpoint (
https://api.githubcopilot.com/mcp/). Thatendpoint does not support OAuth 2.0 Dynamic Client Registration
(RFC 7591), which Claude Code's plugin auth path currently requires.
Installing the plugin fails at startup with:
and clicking "Authenticate" in the plugin UI returns:
Reported against macOS, Windows 11, and Linux:
Until CC gains pre-registered OAuth client support for MCP, this plugin cannot authenticate interactively.
Approach
OpenAI ships a functionally analogous
github@openai-curatedplugin for Codex that works today. Its model is hybrid:ghCLI fallback required in everySKILL.mdprerequisite section:gh auth statusis checked before any write; if unauthenticated the user is asked to rungh auth login. Everything the connector doesn't cover goes throughgh.We can't port part (1) — Claude Code has no equivalent connector registry today. But part (2) is pure prompting: four
SKILL.mdfiles plusghCLI, no MCP server at all. That part we can borrow.This PR replaces the broken remote MCP config with an adapted skills bundle derived from
openai/plugins(Apache License 2.0, attribution inNOTICE).Changes
external_plugins/github/.mcp.json— the broken Copilot endpoint.skills/:github/SKILL.md— umbrella triage skill that routes to specialists.yeet/SKILL.md— full publish flow (branch, stage, commit, push, open draft PR).gh-fix-ci/SKILL.md— debug failing GitHub Actions checks. Ships with a Python helper (scripts/inspect_pr_checks.py) that handlesghfield drift and job-log fallbacks.gh-address-comments/SKILL.md— thread-aware PR review follow-up. Ships with a GraphQL helper (scripts/fetch_comments.py) that preservesisResolved/isOutdated/ file-and-line anchors that flat PR comment reads lose.README.mdwith prerequisites (gh auth login), setup, the reason the MCP was removed, and attribution.LICENSE(Apache 2.0) andNOTICE(attribution + modification list)..claude-plugin/plugin.jsonwithversion,license,keywords, and a new description reflecting the skills-based workflow.Connector-specific language from the original Codex skills ("GitHub app from this plugin", "connector-backed reads", "prefer the GitHub app ... for PR creation") was rewritten to use
ghcommands directly. In every case the replacement is a concretegh ... --json ...invocation. All modified files carry in-file "Adapted from ..." notices per Apache 2.0 §4(b); seeNOTICEfor the full modification list.Why this is strictly an improvement
~/.claude/settings.jsonchanges.gh auth login(device flow, stored in the OS keyring).✘ failedin/mcp.Prior art in this repo
#1305 removed the broken hosted slack plugin stub entirely. That approach is a reasonable option when a plugin has no salvageable fallback. This PR takes the alternative path — replace with a working skills-based flow — because
ghCLI provides a clean, widely-available fallback that the Codex plugin already validates as a viable pattern.Testing
Verified locally on macOS (Darwin 25.3.0), Claude Code Opus 4.6:
python3 -m json.tool .claude-plugin/plugin.json).python3 -m py_compile).SKILL.mdfiles have validname:/description:YAML frontmatter.plugin-dev:plugin-validatorin Claude Code against the plugin directory — verdict: READY, no blockers. (Minor polish suggestions like addingversionalready applied.)ghis authenticated via macOS keyring; noGITHUB_PERSONAL_ACCESS_TOKENenv var is set anywhere.End-to-end skill invocation testing inside Claude Code requires the plugin to be installed from a marketplace entry; happy to walk through that together if you'd like before marking this ready for review.
Attribution & license
Skills and helper scripts are adapted from
openai/pluginsgithub@openai-curated(Apache License 2.0):skills/github/SKILL.md— adapted, connector references rewritten toghCLI.skills/yeet/SKILL.md— adapted, PR-creation flow rewritten togh pr create.skills/gh-fix-ci/SKILL.md— adapted, minor connector refs removed (skill was already shell-based).skills/gh-fix-ci/scripts/inspect_pr_checks.py— unchanged from OpenAI source.skills/gh-address-comments/SKILL.md— adapted, connector refs rewritten togh pr view/gh pr diff.skills/gh-address-comments/scripts/fetch_comments.py— unchanged from OpenAI source.LICENSEis a complete copy of the Apache License 2.0.NOTICEenumerates the modifications and preserves copyright/attribution per §4. Each modified file carries an<!-- Adapted from ... -->trailer.If the maintainers would prefer a different attribution style or want to host the skills under a different top-level directory, happy to iterate.
Closes #283 (plugin-level fix; root-cause CC issue anthropics/claude-code#3433 remains open for pre-registered OAuth support).