One managed registry for the agent skills you use everywhere.
skillrack installs local or Git-hosted agent skills into a central registry
and links those managed copies to supported coding tools or custom directories.
Each record keeps its source provenance, dependencies, content digest, and
managed links so the registry remains inspectable and verifiable.
- Install one skill or a complete collection from disk or Git.
- Resolve nested skills and install shared dependencies once.
- Link the same managed skill into several tools without copying it.
- Inspect source metadata, dependencies, digests, and link destinations.
- Verify registry content and managed links for drift or damage.
- Automate every command through versioned JSON output.
- How it works
- Requirements
- Installation
- Quick start
- Installing skills
- Linking skills
- Managing the registry
- Supported tools
- Machine-readable output
- Uninstalling
- Data and safety
- Development
- Publishing a release
- License
SkillRack keeps canonical skill contents under its application-support
directory. Installation detects every SKILL.md, resolves nested skills and
simple textual dependencies, copies their contents into the registry, and
records a digest of each installed result. A skill mentions another detected
skill when its description or Markdown files contain either /<skill-name> or
<skill-name> skill; Markdown backticks around the name are ignored.
Linking creates symbolic links from a supported tool's skills directory, or a
custom directory, to those registry copies. Link metadata belongs to the
registry, so unlink only removes links that SkillRack owns. An installed skill
cannot be removed while it still has managed links or is required by another
installed skill.
Reinstalling the same canonical source is idempotent by default. Pass --force
to refresh matching records in place while preserving their registry IDs and
managed links. Use skillrack show to inspect an individual record and
skillrack verify to check content digests, dependencies, and links together.
- macOS 15 or later
- Swift 6.1 or later only when building from source
- Git when installing from a remote repository
brew install capturecontext/tap/skillrackDownload these files from the latest GitHub release:
skillrack-universal-apple-darwinskillrack-universal-apple-darwin.sha256
The universal executable runs natively on both Apple Silicon and Intel Macs.
Smaller architecture-specific aarch64 and x86_64 artifacts are available
from the same release.
Verify and install the universal executable:
cd ~/Downloads
shasum -a 256 --check skillrack-universal-apple-darwin.sha256
install -d "$HOME/.local/bin"
install -m 755 skillrack-universal-apple-darwin "$HOME/.local/bin/skillrack"
"$HOME/.local/bin/skillrack" versionIf skillrack is not found, add this line to ~/.zshrc and start a new shell:
export PATH="$HOME/.local/bin:$PATH"Release executables are signed with a Developer ID Application certificate, use the hardened runtime and a secure timestamp, and are notarized by Apple.
Clone the repository with a Swift 6.1 toolchain available, then run:
make test
make installmake install builds a release executable and installs it to
~/.local/bin/skillrack. Set PREFIX to choose a different installation
prefix.
Install a local skill and link it into Codex and Claude:
skillrack install ./my-skill
skillrack link my-skill --tool codex --tool claudeInstall every root skill detected in a collection:
skillrack install ./skill-collection --allInspect and verify the result:
skillrack list
skillrack show my-skill
skillrack path my-skill
skillrack verifyUse a lowercase registry UUID instead of a name whenever an exact skill name is not unique.
The source can be a local path, a file URL, or a cloneable Git URL:
skillrack install ./my-skill
skillrack install file:///Users/me/Developer/skills --all
skillrack install https://github.com/example/skills.git --allRemote sources use a temporary checkout by default and remove it after a successful installation. Preserve the checkout at a chosen location when you want to reuse it:
skillrack install https://github.com/example/skills.git \
--clone-to ~/Developer/example-skills \
--if-present pull \
--all--if-present accepts error, clean, pull, or skip. Cleaning an existing
checkout is destructive and requires confirmation. Pass --yes for explicit
non-interactive approval.
Choose particular root skills by name or exact relative path:
skillrack install ./skill-collection --skill swift-style --skill tools/gitRefresh every installed skill that still matches a local collection:
skillrack install ./skill-collection --all --forceThe update replaces registry contents, descriptions, dependency records, digests, and source revisions in place. Registry IDs, creation dates, display names, and managed links are preserved. Newly detected dependencies or root skills are installed normally. Skills removed from the source, or moved to a different relative path, are not deleted automatically.
For a preserved remote checkout, pull and refresh the collection together:
skillrack install https://github.com/example/skills.git \
--clone-to ~/Developer/example-skills \
--if-present pull \
--all \
--forceOmit the source or selection flags in an interactive terminal to use guided selection.
Link one or more installed skills to supported tools:
skillrack link swift-style git-workflows --tool codex --tool claudeWhen a selected skill mentions installed skill dependencies that were not
selected explicitly, interactive use confirms each dependency before creating
any links. Pass --with-dependencies to link all transitive mentioned-skill
dependencies automatically. Machine-readable mode requires either explicit
dependency selectors or this flag.
skillrack link wayfinder --tool codex --tool claude --with-dependenciesCustom directories are supported alongside built-in tools:
skillrack link swift-style --directory ~/.custom-agent/skillsUse --alias to choose the link name when exactly one skill is selected:
skillrack link swift-style --tool codex --alias swiftRemove selected managed links, or every link for a skill:
skillrack unlink swift-style --tool codex --yes
skillrack unlink swift-style --all --yesSkillRack refuses to replace unrelated files or symbolic links at a requested destination.
| Task | Command |
|---|---|
| List installed skills | skillrack list |
| Show one record | skillrack show <skill> |
| Print an installed skill directory | skillrack path <skill> |
| Install from a source | skillrack install <source> |
| Add managed links | skillrack link <skills ...> |
| Remove managed links | skillrack unlink <skills ...> |
| Verify the registry | skillrack verify |
| Remove installed skills | skillrack uninstall <skills ...> |
| Show the executable version | skillrack version |
Plain-text list output contains six tab-separated fields by default: name,
description, full registry ID, source, dependency count, and managed-link
count. Use --no-print-all with one or more projection flags when only certain
fields are needed:
skillrack list --no-print-all --print-name
skillrack list --no-print-all --print-desc
skillrack list --no-print-all --print-name --print-desc
skillrack list --no-print-all --print-source --print-linksAvailable projections are --print-name, --print-desc, --print-id,
--print-source, --print-deps, and --print-links. --print-all is enabled
by default. These flags affect plain-text output; --json continues to return
complete structured records.
uninstall is intentionally sequential. A skill must have no managed links
and no installed dependents before its registry record can be removed.
skillrack link --tool |
Link directory |
|---|---|
agents (generic) |
~/.agents/skills |
amp |
~/.agents/skills |
antigravity |
~/.gemini/antigravity/skills |
claude |
~/.claude/skills |
codex |
~/.codex/skills |
copilot |
~/.copilot/skills |
cursor |
~/.cursor/skills |
droid |
~/.factory/skills |
gemini |
~/.gemini/skills |
kimi |
~/.kimi/skills |
kiro |
~/.kiro/skills |
opencode |
~/.config/opencode/skills |
pi |
~/.pi/agent/skills |
xcode:claude |
~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/skills |
xcode:codex |
~/Library/Developer/Xcode/CodingAssistant/codex/skills |
xcode:gemini |
~/Library/Developer/Xcode/CodingAssistant/gemini/.gemini/skills |
Every command supports --json and --no-json. Set SKILLRACK_JSON=1 to make
JSON the default; an explicit command-line flag takes precedence.
skillrack --json list
SKILLRACK_JSON=1 skillrack show swift-style
skillrack verify --jsonSuccessful responses are written to stdout and errors to stderr using a versioned envelope:
{
"api_version": 1,
"data": {},
"ok": true
}JSON mode never prompts. Destructive operations require explicit selectors and
--yes, and a remote install using --if-present clean requires --yes when
it would replace an existing checkout.
Remove managed links before uninstalling their registry records:
skillrack unlink my-skill --all --yes
skillrack uninstall my-skill --yesIf installed with Make, remove the executable with the same prefix:
make uninstallFor a Homebrew installation, use:
brew uninstall skillrackNone of these commands deletes the complete registry support directory.
SkillRack stores managed contents and metadata in:
~/Library/Application Support/skillrack/
├── storage.lock
└── skills/
└── <registry-uuid>/
├── skill.json
└── content/
Temporary .staging and .trash directories may also appear while registry
operations are in progress. skill.json contains source provenance,
dependencies, the content digest, timestamps, and managed links.
Set SKILLRACK_ROOT to an absolute path to relocate the registry. Set
SKILLRACK_HOME to an absolute path to change the home directory used when
resolving built-in tool destinations. These environment variables are useful
for isolated automation and tests; avoid pointing them at unrelated data.
Skill contents can execute instructions through the agent that consumes them. Review sources before installing, especially from repositories you do not control.
Common development commands are:
make build
make test
make release
make universalmake release creates an architecture-specific executable and checksum under
dist/. make universal cross-builds Apple Silicon and Intel slices, combines
them with lipo, and writes a universal executable plus checksum.
The package targets macOS 15 and uses Swift 6 language mode. Run
skillrack help <command> or skillrack <command> --help for the complete CLI
reference.
Release versions use plain semantic versions such as 0.1.0 without a v
prefix. Update the embedded version in
Sources/skillrack-cli/AppCommand.swift, run make test, and push the
release-ready commit to main. Then run the Release workflow from GitHub
Actions and enter that version.
The workflow pins the release to the selected main commit, verifies the
embedded version, resolves one dependency graph for both architectures, and
builds and tests on Apple Silicon and Intel runners. It signs and notarizes the
final executables, verifies their SHA-256 checksums, publishes the GitHub
release, and dispatches the matching Homebrew formula update.
Published artifacts are:
skillrack-aarch64-apple-darwinskillrack-x86_64-apple-darwinskillrack-universal-apple-darwin
Each executable has an adjacent .sha256 file. The release also includes the
exact Package.resolved used by both builds; it remains ignored during normal
development.
SkillRack is available under the MIT License.