Plugin marketplace clone triggers unexplained SSH key access prompt on startup

Status Open
Maintainer reply None cached
Activity 9 comments · opened Dec 18, 2025

Summary

Claude Code clones the official plugins repository (anthropics/claude-plugins-official) using SSH (git@github.com:...) instead of HTTPS. This can lead to an approval workflow for key access when SSH agents are configured, e.g., 1Password. Since this is a public repository, HTTPS access would suffice.

Problem

SSH agents like 1Password's offer a setting to prompt the user for approval before allowing key access. Every time I started Claude, 1Password asked me if I wanted to grant applications access to an SSH key.

It took a while to figure out why starting Claude Code wanted to read my SSH key; I was concerned that I had inadvertently installed some malware somehow. After some digging, I determined that the key access attempt coincides with git clone of the marketplace repo.

The main issue here is that it wasn't clear to me WHY Claude Code was trying to read my keys, and I had to drop what I was doing to see if something sketchy was happening. For that reason, I think it would be better to clone via HTTPS instead of SSH to circumvent the issue entirely.

Steps to Reproduce

  1. Use an SSH agent with per-use approval enabled (e.g., 1Password)
  2. Start Claude Code
  3. Observe SSH authentication prompt

Suggested Fix

Use HTTPS (https://github.com/anthropics/claude-plugins-official.git) for cloning public repositories. This requires no authentication and works regardless of SSH configuration.

Workaround

Remove the marketplace via /plugin command or allow the key access for clone one time.

Environment

  • macOS
  • 1Password SSH Agent
  • Claude Code (latest)

View original on GitHub ↗

8 Comments

dluksza · 8 months ago

It took me some time to figure out why, on each Claude code start, 1pass is asking for access to my SSH key.

Claude should NOT use SSH to access public repositories. SSH keys are usually passphrase-protected, which means fetching over SSH will silently fail, resulting in stale plugin data, completely the opposite of why this was introduced in the first place.

Claude should use HTTPS to access public repositories.

theavey · 7 months ago

is there a workaround? I do not believe I have setup anything to use the plugin repository, so I have no idea where or how I could change how it is being cloned/accessed

theavey · 7 months ago

okay, I found a workaround. You can modify ~/.claude/plugins/known_marketplaces.json:

{
  "claude-plugins-official": {
    "source": {
      "source": "git",
      "url": "https://github.com/anthropics/claude-plugins-official.git"
    },
    "installLocation": "...",
    "lastUpdated": "..."
  }
}

(where the ellipses are unchanged from whatever was there before)

The three edits:

  1. change "source" from "github" to "git"
  2. change "repo" to "url"
  3. add "https://github.com/" to the beginning and ".git" to the end of what is now the URL
djc · 7 months ago

I implemented the workaround in https://github.com/anthropics/claude-code/issues/14485#issuecomment-3725218624 but am still seeing Claude Code prompt for authentication. Not sure whether that's for this marketplace stuff or for "git context gathering" (as in #21108), but it's definitely a shady look.

Snigdha0812 · 6 months ago

Same issue here.

Tried to install the Notion plugin:

/plugin install notion-workspace-plugin@notion-plugin-marketplace

Got this error:

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Workaround:

git config --global url."https://github.com/".insteadOf "git@github.com:"

This forces HTTPS instead of SSH. Shouldn't need this for public repos though!

yurukusa · 5 months ago

The SSH prompt occurs because the plugin marketplace clone uses git@github.com: (SSH) instead of https://github.com/ (HTTPS) for public repos.
Workaround 1 — Force git to use HTTPS for GitHub:

git config --global url."https://github.com/".insteadOf "git@github.com:"

This globally rewrites SSH GitHub URLs to HTTPS, so the plugin clone happens over HTTPS without triggering your SSH agent.
Workaround 2 — Allow the key once in 1Password:
In 1Password's SSH agent settings, you can approve the key for github.com permanently:

  1. When the prompt appears, select "Always Allow" (or equivalent)
  2. This persists across Claude Code restarts

Workaround 3 — Configure SSH agent to auto-approve for github.com:
In ~/.ssh/config:

Host github.com
  IdentityFile ~/.ssh/id_ed25519
  AddKeysToAgent yes

Combined with your SSH agent's per-host settings, this can avoid the interactive prompt.
Note: The real fix is for Claude Code to use HTTPS for public marketplace repos. SSH is only needed for private repos or when pushing.

dsuresh-ap · 4 months ago
The SSH prompt occurs because the plugin marketplace clone uses git@github.com: (SSH) instead of https://github.com/ (HTTPS) for public repos. Workaround 1 — Force git to use HTTPS for GitHub: git config --global url."https://github.com/".insteadOf "git@github.com:" This globally rewrites SSH GitHub URLs to HTTPS, so the plugin clone happens over HTTPS without triggering your SSH agent. Workaround 2 — Allow the key once in 1Password: In 1Password's SSH agent settings, you can approve the key for github.com permanently: 1. When the prompt appears, select "Always Allow" (or equivalent) 2. This persists across Claude Code restarts Workaround 3 — Configure SSH agent to auto-approve for github.com: In ~/.ssh/config: `` Host github.com IdentityFile ~/.ssh/id_ed25519 AddKeysToAgent yes `` Combined with your SSH agent's per-host settings, this can avoid the interactive prompt. Note: The real fix is for Claude Code to use HTTPS for public marketplace repos. SSH is only needed for private repos or when pushing.

Works great for private repos!

katafrakt · 4 months ago

FWIW the fix in https://github.com/anthropics/claude-code/issues/14485#issuecomment-3725218624 worked for me, but you need to also do the same change in ~/.claude/settings.json for extraKnownMarketplaces.

Showing cached comments. Read the full discussion on GitHub ↗