[FEATURE] Sync Skills between Claude Desktop and Claude Code CLI
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
Problem
Skills added in the Claude Desktop app (under Settings → Features → Skills) are stored in a different location than skills for Claude Code CLI (~/.claude/skills/).
This means:
Skills created in Desktop are not available in CLI
Skills created in CLI are not available in Desktop
Users have to add the same skill twice
Expected Behavior
Skills should be stored in a shared location (~/.claude/skills/) so they work in both:
Claude Desktop (with integrated Claude Code)
Claude Code CLI
Current Workaround
Manually copy skills to both locations.
Why This Matters
Claude Desktop now includes Claude Code functionality. Having a unified skill storage would provide a seamless experience across both interfaces.
Proposed Solution
Proposed Solution
Ideal User Experience:
Single storage location for all skills: ~/.claude/skills/
Both Claude Desktop and Claude Code CLI read from this location
Skills created in either interface are immediately available in both
Desktop UI syncs to filesystem
When adding a skill in Desktop Settings → Features → Skills, it creates/updates the corresponding file in ~/.claude/skills/
When editing a skill file manually, Desktop picks up the changes
Seamless workflow:
User adds skill in Desktop UI
↓
File created: ~/.claude/skills/my-skill/SKILL.md
↓
Skill available in CLI via /my-skill
And vice versa:
User creates ~/.claude/skills/project-init/SKILL.md
↓
Skill appears in Desktop Settings
↓
Skill available in Desktop via /project-init
Optional: A "Refresh Skills" button in Desktop to manually sync if needed
This would make skills truly portable and shareable, matching how other Claude Code settings (like ~/.claude/settings.json) already work across interfaces.
Alternative Solutions
_No response_
Priority
Critical - Blocking my work
Feature Category
CLI commands and flags
Use Case Example
_No response_
Additional Context
_No response_
42 Comments
+1
+1
Skill portability across Claude surfaces is a top priority for a lot of people. Having to recreate skills separately in Desktop and CLI is a real workflow killer.
claude-brain solves the cross-machine part for CLI skills — keeping your skills directory synced via git hooks. But the Desktop ↔ CLI bridge really needs native support. Would be great to see a unified skill store that works everywhere.
+1
A simple cloud backup of all skills and pulldown of the skills when needed is an absolutely necessary. There is otherwise no tracking of what version is available on which device (if at all available)
I put my support behind this too!
but, it would need to sync Web, Desktop, and CLI. So
~/.claude/skills/isn't the best place for it.Was just looking at how I can do this, glad I found this. +1
This is definitely a huge +1. I switch between coding tasks (~30% of work) and business/workflow tasks, the latter of which I tend to use the desktop app for. I don't want to keep in sync manually skills that apply in both cases.
We had a similar discussion forever ago with MCPs - but the thing was that not everyone wanted the same list of MCPs on one service/app as they did in another. You're going to use different services for different purposes and different tools (eg. MCPs) for each one.
But, skills is a little different. But there are some skills that work in claude code that won't work in Claude desktop (eg. ones that make api requests to blocked URLs or ones that can't run CLI commands in Claude desktop's sandbox)
Claude Desktop > Code tab, I believe already pulls from ~/.claude/skills/ so that's not the issue we're talking about.
For now, manually copying/downloading the skills you want from ~/.claude/skills or Claude Desktop > Cowork tab > Customize and pasting/uploading them into the other doesn't take that long really...
+1
+1
+1
This is purportedly a tool to do this: https://github.com/kcchien/skills-cli
+1
+1
+1
+1
I Added a comment to an similar issue about why the skills/connectors/plugins settings in the "customize" window of the desktop app needs to be exposed and available to interact with programatically.
#Feature Request: API for syncing skills between Claude Code and Claude Chat/Projects #47968
My comment Text:
Related Issues - For Visibility:
All open as of 2026-04-11:
(Figured I'd pull from this recent mention so that we can have this listed in thread for tracking. Thank you Kevin Deldycke)
+1
+1
+1
+1 or claude API to claude desktop app or cowork. We have a repo of internal skills that we have to upload as zip files for each change which is not optimal.
Skills are one dimension of a broader gap — connectors, memory, files, and chat history all suffer the same surface-silo problem. Filed an umbrella issue at #55842 proposing a unified user state across Cowork and chat. Skills sync is load-bearing for that.
+1
+1
+1
+1
+1
+1
+1
+1
Anthropic please, for the love of god, just implement this already! The amount of threads I see begging for this feature on social media/discord/forums without any acknowledgement from your team is ridiculous. Everyday there are new issues opened related to being able to even just programmatically access skills/plugins, let alone asking for some sort of native sync.
You don't even have to give us a native sync feature with ui/ux. Just allow us to access stored skills/sync through the api or various configuration surfaces. Thousands of creative solutions have been offered to remedy this and nothing has been accepted or listened to. The corpses of these many issues filed now pile at your feat, a monument to corporate obstinance. The collective hours wasted engineering/maintaining workarounds to this problem are a catastrophic failure of product management and engineering management.
Just pick ONE option from the many or at least offer some explanation on why this is not something being prioritized.
+1
+1
Without a solution like the one proposed here, not only does the user have to add the same skill twice, but extra work is is required to maintain them.
This can lead to clumsy workarounds like:
Yes. I can build automation to help with these items. But often this defeats the purpose of having skills in the first place!
It would be great to have full two-way synchronization of both skills in the cloud and skills in the local directory (~/.claude/skills/), and for all types of systems: Claude Chat, Claude CoWork, Claude code.
Sure. This only means the config needs a way to specify which tools are exposed to the skill / MCP.
Even better, since Claude is great but not the whole world: A tool-agnostic location for both MCP config and skills. E.g. on Linux
~/.config/agents/skillsetc.Agreed. And if Antropic feels we still need a set of desktop-only skills, then we could have a different location for those non-shared skills.
I would also really like to have this!
Adding support, with one note on scope that may be worth separating out.
The proposal here is a single shared local location read by every surface. That closes the CLI/Desktop gap, but it cannot close the cloud one: a cloud sandbox has no access to the local filesystem, so scheduled routines and Cowork still resolve skills from the account-level claude.ai deployment store regardless of what lives locally. @marr00n raised the same point earlier in this thread. #76724 confirms the resolution model with a concrete failure.
The part that bites hardest in the cloud case is that drift is silent. If a skill is edited locally and never re-uploaded, the scheduled run completes successfully against the older deployed version, with no error and no version mismatch surfaced anywhere. There is currently no way for local tooling to even ask what version is deployed.
I have filed #84611 for that narrower piece: a programmatic publish path, and a way to list deployed skills with a version or content hash so local tooling can diff local against deployed. Complementary to this issue rather than a replacement. Also relevant: #47968 asked for the API previously and was auto-closed as stale, then locked.
Until this lands natively, here's a workaround pattern I've been running daily across Claude Code CLI and Claude Desktop/Cowork on the same skills:
~/.claude/skills/<plugin>is a symlink into the repo working copy — every edit is live in the next CLI session, nothing to sync..pluginfile for upload. Two gotchas that cost me time: the filename must not contain the version (Cowork derives the plugin name from the filename, so a versioned name creates a duplicate plugin instead of updating it), and the local session cache underlocal-agent-mode-sessions/is session-scoped — don't build tooling on that path.Repo with the scripts, the skills (sanitized) and a longer write-up: https://github.com/tkkrixi/claude-docs-sync
Native support would still be much better — the manual desktop upload is the remaining friction this can't remove.
@jmaxzh Happy to clarify. My main pain point was Desktop ↔ CLI sync on a single machine: the same skills maintained once, available in both. Version conflicts and multi-user reuse were secondary for me.
Also, a correction to my earlier comment: I wrote that one manual upload per version was the lower bound. That turned out to be wrong — a git-based marketplace repo solves it, including auto-updates. The working recipe, since none of this is documented:
marketplace.jsongoes in the repo root under.claude-plugin/....menu next to the marketplace name (next to "Synced commit" and "Check for updates").versionfield in the marketplace.json plugin entry is mandatory for update detection — bumpingplugin.jsonalone leaves the "Update" button greyed out, because detection reads the marketplace manifest.Full working example (MIT): https://github.com/tkkrixi/claude-docs-sync
What's still unsolved for me: this only covers distribution. True two-way sync (edit a skill on either side, both update) still needs the git repo as the single source of truth and manual pushes.
Hey Anthropic, this "Sounds like a skill issue"!
I too would love to see first class support, for the general case of dotfile sync'ing, from Anthropic.
I have found DIY (but hacky) ways to make this work for myself using a yadm ("yet another dotfile manager"), but I don't exactly love it. There are also convoluted workarounds for the case of ephemeral sessions --which sorta work but haven't always worked right. My current method of syncing for ephemeral sessions could easily have more pitfalls I still don't know about. It feels like a potentially dangerous attack surface from a security perspective also. All compelling reasons to prefer a "blessed" solution from Anthropic.
My current solution lives in my personal (public) dotfiles repo, but I'm filing an issue against my own solution for the ephemeral case because it just doesn't feel robust enough: https://github.com/mark-brannan/dotfiles/issues/17
--Can Claude solve me problems with Claude? (skill issue)