Feature request: programmatic upload of custom skills to claude.ai (API or CLI)

Status Open
Reported on v2.1.266
Maintainer reply None cached
Activity 2 comments · opened Sep 9, 2026

Summary

There is no programmatic way to upload or update a custom skill on a claude.ai account. The only path is the Settings > Capabilities > Skills > Add skill > Upload skill dialog, which takes a .zip through a browser file input.

Why it matters

Claude Desktop's Cowork surface does not read ~/.claude/skills. It syncs the account's enabled skills into an app-managed folder (local-agent-mode-sessions/skills-plugin/<workspace>/<account>/skills/) and the sync removes anything it did not download ("orphans cleaned" in the desktop log). So a skill authored and tested in Claude Code has to be re-zipped and pushed through the web dialog every time it changes before Cowork can use it.

For teams that keep skills in git and iterate on them, that means:

  • No CI or script can publish a skill on merge.
  • Claude Code itself cannot promote a local skill to the account, even when the user asks it to. Today I had Claude Code zip a skill and drive the claude.ai upload dialog through the Chrome extension, which works but is fragile.
  • Two copies drift: the local ~/.claude/skills copy that Claude Code reads and the account copy that Cowork reads.

Request

Any of these would solve it:

  1. A REST endpoint for skills on the claude.ai account (create, update, delete, list), authenticated the same way connectors are.
  2. A claude skill push <dir> (or claude skill upload) CLI command that zips a skill directory and publishes it to the signed-in account.
  3. Have Cowork read ~/.claude/skills in addition to account skills, so a local skill is usable on both surfaces without a round trip through the web UI.

Option 2 fits the existing CLI shape and would let a git hook or GitHub Action publish on merge.

Environment

  • Claude Code 2.1.266, Claude Desktop (macOS) Cowork
  • Observed 2026-09-09

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗