[BUG] Uploading multiple zipped skills: replace-confirmation only applies to one file, rest of batch is rejected

Status Open
Maintainer reply None cached
Activity 1 comment · opened Jul 28, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When uploading a batch of zipped skills where multiple (or all) of them already exist, only 1 of the batch actually gets uploaded/replaced. The rest are rejected outright instead of being prompted for confirmation.

Repro: select N zip files to upload where all N already exist as skills.

  • The first name conflict correctly shows a "Replace '<skill-name>' skill?" confirmation dialog (Cancel / Upload and replace).
  • Clicking "Upload and replace" only replaces that one skill.
  • The remaining N-1 files in the batch are silently rejected, and a banner appears: "Upload stopped — N-1 skills were not uploaded". There is no per-file dialog for the rest of the batch, and no way to apply "replace" to all of them at once.

To actually replace all N skills, I have to re-select and re-upload the zips one at a time, confirming the replace dialog individually for each.

Console shows the underlying request failing per file rather than being queued for confirmation:

POST https://claude.ai/api/organizations/<org-id>/skills/upload-skill?overwrite=false 400 (Bad Request)
[REACT_QUERY_CLIENT] QueryClient error: ye: You already have a skill named 'avalonbay-integrations'.

What Should Happen?

When uploading multiple zips in one batch, all name conflicts should either:

  • be surfaced together in a single dialog listing every conflicting skill, with one "Replace all" action (and the option to review/exclude individual ones), or
  • queue and prompt for each conflict in turn within the same upload batch, instead of aborting the rest after the first one is resolved.

Either way, resolving one conflict shouldn't cause the rest of the batch to be dropped — I should be able to replace all pre-existing skills in a single upload action instead of re-uploading one zip at a time.

Steps to Reproduce

  1. Open Settings > Capabilities > Skills.
  2. Click "Add" and select 2 or more zip files, where all of them are skills that already exist by name.
  3. The "Replace '<name>' skill?" dialog appears for the first conflicting file. Click "Upload and replace".
  4. Observe the orange banner: "Upload stopped — N-1 skills were not uploaded" (only the first skill was replaced; the rest of the batch failed instead of prompting).
  5. To finish, each remaining zip must be re-uploaded and confirmed individually, one at a time.

Error Messages/Logs

POST https://claude.ai/api/organizations/<org-id>/skills/upload-skill?overwrite=false 400 (Bad Request)
[REACT_QUERY_CLIENT] QueryClient error: ye: You already have a skill named 'avalonbay-integrations'.
    at we (shared-0-B6nQ_22V.js:1:3925)
    at Object.mutationFn (shared-4-feWZh8Dd.js:2:341696)

Claude Model

Sonnet (default)

Is this a regression?

_No response_

Last Working Version

_No response_

Claude Code Version

Claude 1.24012.9 (03c61d), released 2026-07-24

Platform

Claude.ai (Pro/Team account, Skills feature)

Operating System

macOS 26.5.2 (25F84), Apple M2 Max

Terminal/Shell

N/A (Claude Desktop app)

Additional Information

This reproduces consistently: with N zip files selected where all N already exist as skills, only 1 succeeds and N-1 are rejected via the "Upload stopped" banner, regardless of how large N is.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗