[Feature Request] Support the standard .agents/skills/ directory for agent skills
Status Open
Reported on v2.0.76
Maintainer reply None cached
Workaround ✓ Mentioned in thread ↓
Activity 32 comments · opened Jan 5, 2026
Feature Description
With the Agent Skills standard (agentskills.io) in place, .agents/skills/ is now the recommended shared location for skills. Claude Code currently only loads skills from .claude/skills/. Please add native discovery of .agents/skills/ in the CLI.
Why
- One skill location that works across agents (Claude Code, Codex, Cursor, ...), with no vendor-specific copies.
- Current workarounds (sync tools, symlinks into
.claude/skills/) duplicate content or rely on hacks, and create extra work: drift, conflicts, duplicate search results.
Proposed behavior
- Claude Code discovers and loads skills from
.agents/skills/in addition to.claude/skills/. - If a skill exists in both,
.claude/skills/takes precedence. - Minimum alternative: a setting to configure additional skill directories.
Environment Info
- Platform: win32
- Terminal: vscode
- Version: 2.0.76
- Feedback ID: 9b14affd-a5f2-4ca7-9641-65cb29f9d4ff
32 Comments
Or
.agents/skillsThere is a discussion in the agent skills standard git repo on what the standard directory for skills should be and the consensus is
.agents/skills/https://github.com/agentskills/agentskills/issues/15
Yes, please. I have symlink fatigue
Yes please.
For sure no „standard“ with „github“ in the pathname!
Please, finally
.agent/skillsLooking at https://github.com/agentskills/agentskills/issues/15 Claude Code now seems to be the only major coding agent without support for the
.agents/skillsfolder.please no
.githubby default, simply using.agent/skillswould be awesome! Hopefully we get it for claude code soon as well@egils it should be
.agents(plural), that's the standard.It’s a bit awkward to define the official spec for the entire ecosystem, only to have your own product be the one that doesn't follow it. I guess reading the documentation is optional when you’re the one who wrote it?
Please at least support
.agents/skills.Any progress on supporting the
.agents/skillsdirectory? This is an incredibly frustrating state to be in for a team that uses multiple CLI tools.I can't believe this isn't a thing, I'm in shock. I thought I screwed something up but CC really doesn't have automatic support for .agents?
I'm surprised this is an issue. I just want to track my skills using github in my code directory like all the rest of my code, not .claude or .agents. I followed 2 closed feature requests which linked to related requests to get here. This ticket under represents how many people have requested this feature.
It almost seems like they don't want to make it easy to move from one agent system to another...
I've also created an issue because Claude is unusable since my cognitive map resides in ~/.agents/, and I'd rather stop using AI than duplicate content simply because a company is vendor-only instead of being more customizable or supporting universal paths. .github wouldn't be acceptable either because it would be another vendor and not a universal path.
@Aesthermortis indeed.
Also, how many tokens are we wasting on
CLAUDE.mdand.claude/skillssymlinks?Please, Anthropic - support
AGENTS.mdand.agents/skills🙏+1 — concrete team use case for a configurable skills path.
Our team distributes a shared set of Claude Code skills (MCP-server operational guides, internal workflow helpers) from a single git repo that every engineer clones. The goal is simple: a
git pullon that repo should update everyone's active skills, with the repo as the single source of truth — no per-machine copying or drift.Today the only mechanism that achieves "git pull = live" for an always-on personal skill is a per-skill symlink from
~/.claude/skills/<name>into the repo's working tree, e.g.:That works, but it's brittle as a distribution mechanism:
git checkoutsilently changes everyone's skills.~/.claude/plugins/cacheinstead of tracking the working tree, so it isn't git-pull-live either.A first-class configurable skills source would remove all of this. Either of these would solve our case:
additionalSkillsPaths: ["~/git/team-repo/.claude/skills"]) and/or aCLAUDE_-prefixed env var pointing at one or more extra skills directories, or.github/skills/discovery this issue proposes, as long as it's loaded from a directory the team controls in-repo.For reference, this has been requested several times and the dedicated variants were closed without shipping: #18621 (closed
not_planned), #22902 and #12541 (closed as duplicates/locked). This issue (#16345) is the live one, so consolidating support here.To use Claude I had to duplicate my skills by breaking SSOT, DRY, etc. This makes me upset because everything is in ~.agents/ which makes it difficult to use Claude with other AIs at the same time. This might be a bit selfish on Anthopics' part.
I do not agree with the comment above because .github would be another vendor not trackable by other AIs, which would create the same friction. AIs should use a universal route, and if they want they can have their own but I am not going to use them as a vendor only.
@Aesthermortis agree
Yep, quite selfish. We're also paying for this overhead out of our own pocket- by having to maintain
.claude/duplicates/symlinks, Claude has to think about why `.agents' exists on every turn.This is one of the reasons why I switched to Codex for my daily driver.
~/.agents/skills/pls.agentsshould be supported but setting a custom path insettings.jsonshould also beWorkaround while Claude Code only loads
.claude/skills: keep one skill source and copy it into Claude’s paths.npx @agentplaybooks/cli@beta sync . --target=claude --applyThat writes
.claude/skills(andCLAUDE.mdif you have instructions). It does not make Claude Code read.agents/skills— it is a workaround until this ships. I maintain the CLI.I think this is a useful workaround, but it still doesn't address the architectural problem behind this issue.
There are two different things here:
"agentplaybooks sync" solves the first problem. It does not solve the second.
For me, that distinction matters because a generated copy is still a physical duplicate. Calling ".claude/skills" a derived artifact may preserve a logical source of truth, but the filesystem still contains multiple representations of the same knowledge:
.agents/skills/foo/SKILL.md
.claude/skills/foo/SKILL.md
.cursor/skills/foo/SKILL.md
...
That duplication creates infrastructure that should not be necessary in the first place: synchronization, conflict detection, backups, drift handling, precedence rules, duplicated search/indexing results, and ambiguity for other tooling inspecting the repository.
In other words, the workaround does not remove the interoperability problem; it automates the maintenance of the interoperability problem.
Symlinks are slightly better in that they avoid duplicating the file contents, but they are still a compatibility hack: Claude Code only sees the skill because users manufacture a path inside Claude's vendor-specific namespace.
The clean architecture is much simpler:
.agents/skills/
↑
Claude ─┤
Codex ─┤
Other ─┘
One shared location, one physical representation, and every compatible agent discovers it natively.
So I do see value in "agentplaybooks sync" as a temporary deployment adapter for tools that do not support shared paths yet. But I would not consider synchronization of generated vendor-specific copies a solution to this issue.
Native ".agents/skills" discovery, or at minimum configurable additional skill roots, is still the actual fix.
Agree — a generated copy is still a copy. Native
.agents/skillsis still the fix.The other path is your own store: load it over MCP or the API in every environment. Same source, no vendor folders. It can also carry MCP settings, and cookies if you hop machines.
https://agentplaybooks.ai — I maintain it. It does not make Claude Code read
.agents/skills.@SaschaBrunnerCH Can you update the title to match the new description?
A standardized skills directory would solve exactly the problem I keep hitting: I maintain a library of 100+ skills and had to build my own dependency-graph scan just to understand what's installed where, because discovery paths differ per tool and per project. A conventional location would make tooling like hub/orphan analysis portable across setups. From a non-English market angle, a standard directory also lowers the bar for sharing localized skill packs without each tool reinventing installation. Question: in your view, should the standard cover only discovery paths, or also minimal metadata like version and dependencies so tools can resolve compatibility before loading?
@SaschaBrunnerCH can you please update the issue title?
+1 for reading
.agents/skills/(project and~/.agents/skills/) alongside.claude/skills/.Our setup: the same repos are used from both Claude Code and Cursor. Cursor already discovers
skills from
.agents/skills/,.cursor/skills/and.claude/skills/, so today the onlylocation both tools read is
.claude/skills/. That works, but it makes a Claude-specificfolder the de-facto cross-tool home, and any tool that only reads
.agents/skills/(Codex,Gemini CLI, …) needs a symlink/junction, which is fragile on Windows and in git.
Minimal ask, no breaking change:
.agents/skills/and~/.agents/skills/.claude/skills/winsskillsPathssetting as proposed in #56193)Related (all closed without a maintainer response): #6235, #31005, #50778, #56193, #66352.
Until Claude Code reads
.agents/skills/natively, this workaround keeps repository skills in.agents/skills/only (Codex reads them there) and gives Claude Code per-skill symlinks, with nothing committed to the repositories.A small script links each
<repo>/.agents/skills/<name>(one that has aSKILL.md) as<repo>/.claude/skills/<name> -> ../../.agents/skills/<name>. It never replaces a real directory or a symlink it didn't create, prunes its own dangling links, and lists each link in the repository's local.git/info/exclude, sogit statusstays clean. That matters for upstream clones you don't own.Per-skill links, rather than symlinking the whole
.claude/skillsdirectory, let a repository keep its own committed.claude/skillsentries alongside them.<details>
<summary><code>~/.agents/link-repo-skills.sh</code></summary>
</details>
To run it automatically, I use a mise
cdhook in amise.tomlin the directory that holds my clones (~/git/mise.toml, thenmise trust ~/git/mise.toml).cdrather thanenter, becauseenterfires only once for the whole tree, not when moving between repositories. It needsmise activatein the interactive shell.Run the script once over existing clones (
link-repo-skills.sh repo1 repo2 ...) so sessions started outside the shell, such as from an IDE, also see the skills. A session that is already running won't pick up new links until it restarts.Re #14836: on Claude Code 2.1.286 (Linux), a fresh session in a repository did load a skill exposed this way through a symlinked
.claude/skills/<name>, so per-skill symlinks work for the model; check that rather than relying on the/skillslisting.Once this issue is fixed, cleanup is removing the hook and the links, which are all listed in each repository's
.git/info/exclude.+1 for native
~/.agents/skills(user level) as well as project.agents/skills, or a setting for extra skill directories.Data point from a user-level setup that shares one skills folder between Claude Code, goose and agy: the only workable way today is
~/.claude/skills -> ~/.agents/skills(a per-skill link breaks as soon as a new skill is created in the shared folder). That has a side effect: Claude Code writes the account-synced skills to~/.claude/skills/synced/, which then lands inside the shared folder.Two things would remove the need for the symlink hack:
~/.agents/skills, or a documented setting that adds extra skill directories (permissions.additionalDirectoriesloads no skills;--add-dirneeds a flag on every launch);syncClaudeAiSkills: falseexists, which disables them).Version: Claude Code 2.1.296, Linux.
Agree with @SaschaBrunnerCH that native
.agents/skills/discovery remains the ideal clean-architecture solution.Until Anthropic adds native support, for folks managing shared skills across multiple tools (Claude Code, Codex, Cursor, etc.), we maintain an open-source, zero-dependency environment manager called agents-env that automates this bridging cleanly:
~/.agents/skills/): Useslink-eachmode to symlink individual skill directories into~/.claude/skills/. This directly avoids the issue @mariolpantunes mentioned where symlinking the entire directory causes Claude's account-synced skills (synced/) to pollute the shared store..agents/skills/): Uses relative symlinks (link-diror automatic fallback tolink-eachif physical files already exist), keeping.agents/skills/as the single source of truth without polluting git history.config/agents.json), with safety fallbacks (existing directories are never overwritten; conflicts backed up to.local.bak).curl ... | bash.If anyone needs an immediate, non-intrusive workaround without maintaining custom one-off scripts, feel free to check it out:
https://github.com/xianghongai/agents-env
One angle mostly absent from this thread: when one folder is read by every agent on the machine, it becomes a shared integrity surface - any agent, installer, or sync feature that writes to it changes what all the others execute. The workarounds collected here (symlinks, sync scripts) add writers per skill file; they do not remove them. If Claude Code adopts
.agents/skills/natively, the piece that keeps the shared layout honest is a per-file pin - sha-256 recorded at approval, diff on change - and it needs no vendor coordination: it works per-user today. We ship that open-source (rugsnare skills scan/diff covers the Claude Code, Codex and Cursor locations among others, and.agents/skillssupport just landed in the current release train). The standard being cross-vendor is exactly why the integrity layer should be too.