| name | symlink-skills |
| description | Symlink every skill in this repo into one or more agent skills directories (defaults to ~/.claude/skills/ and ~/.agents/skills/) so the skills become globally discoverable. Use when the user says "install these skills", "make these skills global", "symlink skills to ~/.claude", "symlink skills to ~/.agents", "register the skills", or wants to update the global skill set after editing skills here. |
| allowed-tools | ["Bash","Read"] |
| user-invocable | true |
Symlink Skills
Symlinks every directory under <repo>/skills/ into each configured target,
making each skill in the registry globally discoverable. Edits in the repo are
picked up live because the symlinks point at the real files.
Default targets:
~/.claude/skills/ (Claude Code's standard skill directory)
~/.agents/skills/ (other agents that follow the same convention)
~/.cursor/skills/
~/.config/opencode/skills/ on macOS, ~/.opencode/skills/ elsewhere (auto-detected via $OSTYPE; override with OPENCODE_SKILLS_DIR)
Run
From the repo root:
./skills/symlink-skills/link.sh
./skills/symlink-skills/link.sh --dry-run
./skills/symlink-skills/link.sh --force
./skills/symlink-skills/link.sh --unlink
Pick targets explicitly (skips the defaults entirely once --target is set):
./skills/symlink-skills/link.sh --target ~/.claude/skills
./skills/symlink-skills/link.sh --target ~/.claude/skills --target /work/.agents/skills
Or override any default via env var:
CLAUDE_SKILLS_DIR=/tmp/fake-claude/skills \
AGENTS_SKILLS_DIR=/tmp/fake-agents/skills \
CURSOR_SKILLS_DIR=/tmp/fake-cursor/skills \
OPENCODE_SKILLS_DIR=/tmp/fake-opencode/skills \
./skills/symlink-skills/link.sh
Behaviour
- Idempotent. Re-running is safe; correct symlinks are left alone.
- Safe by default. If
<target>/<name> exists as a real directory (or as
a symlink to a different target), the script refuses to overwrite it and
exits non-zero. Pass --force to replace.
- Per-target reporting. Each target is processed in turn with its own
pass/fail summary.
- Scoped unlink.
--unlink removes only symlinks under each target whose
target resolves back into this repo. Other files and symlinks are untouched.
- Returns non-zero if any skill could not be linked in any target.
Why
Editing skills in one place (this repo) and having them auto-available in
every agent that reads from ~/.claude/skills/ or ~/.agents/skills/ beats
maintaining multiple copies.