Claude GitHub Connection Failed: No Repos / Access Denied Fix

Claude's GitHub connector shows no repos or 'access check failed'? Fix it: install the GitHub App on the right account, select the repo, and clear org approval.

You connect GitHub in Claude, the flow finishes in a second, and then the repo picker says No repos match, lists only a couple of public repos (none of your private projects), or a remote session fails with GitHub repository access check failed — re-authorize GitHub in settings (error code github_repo_access_denied). As of June 2026, the cause is almost always the GitHub App layer, not your Claude account: the Claude GitHub App isn’t installed on the account that owns the code, the repo isn’t selected in that installation, or an org owner hasn’t approved it.

Fastest fix: install (or reconfigure) the Claude GitHub App at github.com/apps/claude, pick the exact repos you need, then in Claude go to Settings → Connectors → GitHub and click Disconnect → Connect once to refresh the token. That clears the large majority of cases.

The important thing to understand: Claude’s GitHub connector is a GitHub App, not a plain OAuth login. The OAuth step only confirms who you are; what Claude can actually see is governed by which repositories you ticked when the App was installed at github.com/settings/installations. If the App isn’t installed on the org/account that owns the code, no OAuth scope in the world will surface those repos.

Which bucket are you in?

SymptomMost likely causeJump to
No repos match in the picker; only public repos showApp not installed, or repo not selected in the installationStep 1
Org repos missing even though App shows “All repositories”Org approval pending, or connector sync staleStep 2, Step 6
GitHub repository access check failed — re-authorize GitHub in settingsStale token, OR connect finished OAuth-only with no App installStep 3, Step 8
Connect finished in one click; no “select repositories” screen ever appearedOAuth-only connect; App was never installedStep 8
Repos belong to an account you don’t seeYou authorized the wrong GitHub accountStep 4
Connecting asked you to paste a token, not open GitHubPersonal Access Token mode, scope too narrowStep 5
Error mentions rate limit exceeded / abuse detectionGitHub throttling you (HTTP 403)Step 7

Common causes, by hit rate

1. The repo isn’t selected in the GitHub App installation

This is the number-one cause in 2026. When you connect, Claude sends you to its GitHub App. If you click through with the default and don’t pick the repo (or you chose Only select repositories and forgot to add this one), Claude genuinely cannot see it — the picker returns No repos match.

How to spot it: go to github.com/settings/installationsClaudeConfigure. Look at Repository access. If it says Only select repositories and your repo isn’t in the list, that’s your problem.

2. Org enforces approval and the App isn’t approved yet

When the code lives in an organization, the org may require an owner to approve any new app. If you’re not an owner, installing the App on the org creates a pending request, not a live installation — so the repos stay invisible with no hard error. Orgs created recently have these restrictions on by default, and since the December 2025 “control who can request apps” change, some orgs even block non-owners from requesting.

How to spot it: at github.com/settings/installations, the org shows a pending/awaiting-approval state instead of Configure. On the org side, an owner can check Org → Settings → Third-party Access → GitHub Apps (and OAuth app policy) for a pending Claude request.

3. Stale token after a reinstall

If you (or an admin) reinstalled or reconfigured the Claude GitHub App, the token Claude is holding can go stale. Remote/agent runs then fail with GitHub repository access check failed — re-authorize GitHub in settings.

How to spot it: the connector still says Connected in Claude, but actions against the repo fail with the re-authorize message above. A single Disconnect → Connect usually fixes it.

4. Authorized account is not the account with the code

The most insidious one. You sign into Claude with personal@gmail.com, your browser is already logged into personal-github, so the install/OAuth attaches to the personal account. But your code lives under work-github. Everything looks connected; the repos just aren’t there.

How to spot it: check the top-right avatar at github.com against the account name Claude shows next to the connected GitHub connector. Same login or not?

5. PAT mode with too-narrow scope

Some self-hosted/enterprise setups, and Claude Code on the web, let you connect with a fine-grained Personal Access Token instead of the App. If the token’s repository selection or permissions are too narrow, Claude connects but can’t read contents.

How to spot it: when connecting, did Claude open the GitHub App/OAuth page, or ask you to paste a token? If you pasted a token, you’re in PAT mode.

6. Connector sync is stale (known backend issue)

There’s a documented edge case where org repos don’t appear in Claude’s picker even though the App is installed on the org with All repositories and you’re an owner — a backend sync/indexing gap, not your config. Reported on Claude Code’s tracker and closed as a duplicate, so it’s known to Anthropic.

How to spot it: gh repo list your-org (GitHub CLI) shows the repos, the App install looks correct at github.com/settings/installations, but Claude’s picker still says No repos match.

7. Rate limit / abuse detection

Rapid retries or very large queries can trip GitHub’s secondary rate limit, returning HTTP 403.

How to spot it: the error text includes rate limit exceeded or abuse detection.

8. Connect finished OAuth-only — the App was never installed

A newer failure mode (tracked on the Claude Code repo as issue #64130, reported May 31, 2026, and closed as a duplicate): the connect flow finishes in one click using OAuth alone and skips the GitHub App install step entirely. No “which repositories?” screen appears, the connector reads Connected, but Claude never shows up at github.com/settings/installations. Remote/agent runs then fail with GitHub repository access check failed — re-authorize GitHub in settings, and a plain Disconnect → Connect does not fix it because reconnecting just repeats the OAuth-only path.

How to spot it: you connected GitHub but were never asked to pick repositories, and Claude is absent from your installations list. This mostly hits remote agents and scheduled routines (the parts that need to clone private repos), while in-chat browsing of public files may still appear to work.

Shortest path to fix

Step 1: Install/reconfigure the GitHub App and select the repo

Visit https://github.com/apps/claude
  → Install (or Configure if already installed)
  → choose the account/org that OWNS the repo
  → Repository access:
       - "All repositories", OR
       - "Only select repositories" → add the exact repo(s) you need
  → Install & Authorize (or Save)

Verify at github.com/settings/installationsClaudeConfigure: your repo must be listed under Repository access. Then in Claude open Settings → Connectors → GitHub and, in a chat, use + → Add from GitHub (or in a Project, + → GitHub) — the repo should now appear in search.

Step 2: Clear org approval

If the repo lives in an organization with app restrictions:

You are NOT an org owner:
  When you install the App on the org, click "Install & Request"
  → an email goes to the org owners. Tell them exactly which
    repos and what (read Contents/Metadata) you need.

You ARE an org owner:
  Org → Settings → Third-party Access → GitHub Apps
  → review the pending "Claude" request → Grant / Install.
  Also check "OAuth app policy" on the same page for any
  legacy OAuth-restriction state.

A vague “please approve Claude” gets ignored. Send the install URL and the specific repo list.

Step 3: Refresh the token (fixes “re-authorize” errors)

Claude → Settings → Connectors → GitHub → Disconnect
  → Connect → complete the GitHub App authorization again

This is the fix for GitHub repository access check failed — re-authorize GitHub in settings. Do this any time the App was reinstalled or its repo selection changed.

Step 4: Account match check

In Claude, ask:

List every GitHub org and account I can reach through the connector.

If the result doesn’t match what you expected, you authorized the wrong account. Disconnect, switch the active GitHub login in your browser (or use a separate browser profile), then Connect again and install the App on the correct account.

Step 5: PAT mode specifics

If you connect with a fine-grained PAT, create it with least-privilege scope:

Visit https://github.com/settings/personal-access-tokens/new
  → Repository access → "All repositories" or "Only select repositories"
       (must include the repos you want Claude to read)
  → Permissions (Repository):
    - Contents: Read        (required — the actual code/files)
    - Metadata: Read        (auto-selected, required)
    - Pull requests: Read    (only if you need PRs)
    - Issues: Read/Write     (Write only if Claude should create issues)
  → Generate token, copy immediately (shown only once)
  → Claude → Settings → Connectors → GitHub → paste token

Tokens missing Contents: Read, or whose repository access doesn’t include your repo, are the usual PAT failure.

Step 6: Force a sync (stale picker)

If the App and approvals are correct but repos still don’t show (the bucket-6 backend gap):

1. github.com/settings/installations → Claude → Configure
   → toggle Repository access Selected → All → Save (re-fires the webhook)
2. Claude → Settings → Connectors → GitHub → Disconnect → Connect
3. If the web picker still misses an org repo, the Claude Code
   CLI can usually reach it directly as a workaround.

Step 7: Rate-limit cooldown

If you tripped abuse detection: Disconnect → wait 60 minutes (not 5) → Connect, and ease off the initial query volume.

Step 8: Install the App by hand (OAuth-only connect)

If you were never shown a repository-selection screen and Claude is missing from your installations, the connect step authorized you but never installed the App. Install it directly instead of relying on the connect flow:

1. Open https://github.com/apps/claude/installations/select_target
   → pick the account/org that OWNS the repo
   → Repository access: "All repositories" OR
     "Only select repositories" → add the repo(s) you need
   → Install (org non-owners get "Install & Request" — see Step 2)
2. Confirm "Claude" now appears at
   github.com/settings/installations with your repo listed
3. Claude → Settings → Connectors → GitHub → Disconnect → Connect
   so the connector picks up the new installation token

After this, a remote/scheduled run that previously hit GitHub repository access check failed should clone the private repo. This is the standard workaround while the OAuth-only connect path is fixed.

How to confirm it’s fixed

  1. github.com/settings/installationsClaudeConfigure shows your repo under Repository access (and the org shows Configure, not a pending request).
  2. In Claude, + → Add from GitHub finds the repo by name — no No repos match.
  3. Ask Claude: Read the README from <owner>/<repo> and summarize it in two lines. A correct summary of the real file confirms read access end to end.

FAQ

Why does Claude only show my public repos? The GitHub App isn’t installed on the account that owns the private repos, or the installation uses Only select repositories and those repos aren’t selected. Fix the installation at github.com/settings/installations, then Disconnect → Connect in Claude.

Is the GitHub connector OAuth or a GitHub App? Both layers exist, but repo visibility is controlled by the GitHub App installation, not by classic OAuth scopes like repo. The OAuth step only authenticates you; the App’s repo selection decides what Claude reads.

My org repos won’t appear even though I’m an owner and selected “All repositories.” What now? First confirm there’s no pending approval, then force a sync (Step 6). If it persists, this matches a known Claude backend sync gap — the Claude Code CLI can usually reach the repo directly while it’s investigated.

What does GitHub repository access check failed — re-authorize GitHub in settings mean? Claude’s stored token is stale, usually after the App was reinstalled or its repos changed. Go to Settings → Connectors → GitHub → Disconnect → Connect to re-authorize.

Do I need an org owner every time? Only if your org enforces app approval. If it does, the owner approves Claude once under Org → Settings → Third-party Access → GitHub Apps; after that, granting new repos is just a reconfigure of the existing installation.

What’s the minimum PAT permission to read a private repo? Repository Contents: Read plus Metadata: Read (Metadata is auto-required), with the token’s repository access set to include that repo. Add Issues or Pull requests only if you need them.

I connected GitHub but was never asked which repositories to allow — why do agents still fail? The connect flow finished OAuth-only and never installed the GitHub App, so Claude is absent from github.com/settings/installations. Reconnecting repeats the same path, so install the App by hand at github.com/apps/claude/installations/select_target, then Disconnect → Connect in Claude (Step 8).

Prevention

  • Record in your password manager which GitHub account is connected to Claude, to avoid the wrong-account trap.
  • Request org third-party access the day you join a new org, not when you first need a repo.
  • Use separate browser profiles for personal vs. work GitHub to prevent cross-auth installs.
  • Prefer fine-grained PATs over classic PATs and apply least privilege (Contents/Metadata read).
  • Keep personal and work projects in two Claude Workspaces, each with its own GitHub authorization.

Tags: #Claude #Debug #Troubleshooting