Concurrent visitors over the last 30 minutes. (~)
Peak concurrent visitors -
Yesterday: 0 / Today:
0
An AI agent skill is a single folder that contains a SKILL.md file.
It is published as an open standard, so many tools use the same format, but the standard only covers the folder structure and the SKILL.md format.
Where to look for skills is up to each tool.
| Tool | Project skill path |
|---|---|
| Claude Code | .claude/skills/ |
| Codex | .agents/skills/ |
| Gemini CLI | .agents/skills/, .gemini/skills/ |
| Cursor | .agents/skills/, .cursor/skills/, .claude/skills/ |
.agents/skills/ is a shared path that doesn't belong to any specific tool, but Claude Code only checks .claude/skills/.
If you use Claude Code together with other AI agents like Codex or Cursor in one project, the same skill has to exist in both paths.
If you simply copy the folder, you end up with two or more copies of the same skill.
Once you edit one of them, the copies drift apart, and it becomes hard to tell or manage which one is the latest.
This is where a symbolic link helps: you keep the original in one place and have the other path point to it.
A symbolic link is a special file that stores the path of another file or folder.
When you open the link, it follows the stored path and opens the original, so programs treat the link and the original as the same folder without telling them apart.
On macOS and Linux, you create one with the ln -s command.
1ln -s ../../.claude/skills/my-skill .agents/skills/my-skill
Now, if you edit .agents/skills/my-skill/SKILL.md, .claude/skills/my-skill/SKILL.md changes too.
Both paths point to the same file, so an edit on either side shows up on the other side right away.
Deleting the link leaves the original untouched, but deleting the original leaves the link as a broken link with nothing to point to.
However, linking skill folders by hand comes with a lot to check.
../../ in the command above, you get a broken link..claude/skills and others in .agents/skills, you also have to check the link direction for each skill.mklink command, and creating a symbolic link requires Developer Mode or administrator privileges.@heropy/symlink is a CLI tool that compares the entries in several folders and creates symbolic links on the side where they are missing.
You pass the folders to link as arguments, and you can run it with npx without installing anything.
123456npx @heropy/symlink .claude/skills .agents/skills ## link .agents/skills/commit-push -> ../../.claude/skills/commit-push ## link .agents/skills/writing-style -> ../../.claude/skills/writing-style ## link .claude/skills/react-router -> ../../.agents/skills/react-router ## ## 3 linked
commit-push and writing-style have their originals in .claude/skills, so links were created in .agents/skills, and react-router is the other way around.
No matter what order you write the arguments in, the side that holds the actual folder becomes the original, and the relative path of each link is calculated from the link's location.
So you don't have to worry about which path you added a skill to or how to write the path.
When you add a new skill, run the same command again.
Entries that are already linked are reported as keep and left as they are, and only the new skill gets linked.
1234567npx @heropy/symlink .claude/skills .agents/skills ## keep .agents/skills/heropy-commit-push ## keep .agents/skills/heropy-writing-style ## link .agents/skills/lighthouse -> ../../.claude/skills/lighthouse ## keep .claude/skills/react-router ## ## 1 linked, 3 already fine
Running it many times gives the same result, so it is safe to add to a postinstall script.
It never deletes an existing file or folder to make room, and for entries you need to decide on yourself, such as when an original with the same name exists on both sides, it skips them and prints the reason.
On Windows, it creates directory junctions, which need no special privileges, so you can use the same command on any operating system.
AI skills were just the reason I built this tool. Any folder that each tool expects at its own fixed path, such as shared settings, prompt collections, or static assets, can be linked the same way.
For options like --dry-run, --list, and --unlink, notes on Windows, the Node.js API, and more, see the GitHub repository.