[BUG] Uploading multiple zipped skills: replace-confirmation only applies to one file, rest of batch is rejected
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
- Open Settings > Capabilities > Skills.
- Click "Add" and select 2 or more zip files, where all of them are skills that already exist by name.
- The "Replace '<name>' skill?" dialog appears for the first conflicting file. Click "Upload and replace".
- 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).
- 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.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗