Install Agent Skills from Git repositories using symlinks
Project description
SkillHost
Website: https://skillhost.dev GitHub: https://github.com/wang-chonghuan/skillhost
SkillHost installs Agent Skills from Git repositories into local agent skill directories by creating safe, manifest-tracked symlinks.
Git is the source of truth. SkillHost clones or pulls skill repos, discovers SKILL.md files, and links the discovered skills into agents such as Codex and Claude Code. It does not execute code from skill repositories and does not overwrite unmanaged files.
Typical path
pipx install skillhost
skillhost add git@github.com:org/company-skills.git
# choose Codex, Claude Code, OpenCode, OpenClaw, Hermes Agent, or All
skillhost update
skillhost list
Result:
skill repo -> SkillHost -> ~/.agents/skills
skill collection repo -> SkillHost -> ~/.claude/skills
-> teammate ~/.agents/skills
No skillhost init is required. Commands create the needed ~/.skillhost state on demand.
Install
pipx install skillhost
uv tool install skillhost
pip install skillhost
From a checkout:
uv tool install .
pip install .
Upgrade SkillHost itself:
skillhost upgrade
upgrade detects common installers. It uses pipx upgrade skillhost for pipx installs, uv tool upgrade skillhost for uv tool installs, and falls back to python -m pip install --upgrade skillhost.
Core commands
skillhost add <skill-git-repo> [--project <name>] [--name <repo-name>]
skillhost update [repo-name] [--project <name>] [--agent codex|claude|opencode|openclaw|hermes] [--all]
skillhost relink [repo-name] [--project <name>] [--agent codex|claude|opencode|openclaw|hermes] [--all]
skillhost unlink [repo-name] [--project <name>] [--agent codex|claude|opencode|openclaw|hermes] [--all]
skillhost remove <repo-name> [--project <name>]
skillhost clean
skillhost list [--project <name>]
skillhost doctor [--project <name>]
skillhost agents
skillhost projects
skillhost config
Useful behavior:
addclones a skill repo, discovers skills, then asks which agent directories to link into.updateuses the same target selection flow asadd, removes stale SkillHost-managed links for the selected targets, runsgit pull --ff-only, then relinks.relinkrecreates manifest-managed symlinks without pulling.unlinkremoves only SkillHost-managed symlinks recorded in.skillhost-links.json.removeunlinks, deletes the local clone under~/.skillhost, and removes the repo from config.cleanremoves broken SkillHost-managed symlinks and stale manifest entries.listshows registered repos and discovered skills.doctorchecks config, repos, duplicate skill names, targets, manifests, broken links, and missing sources.configprints the config file path only.
Use --all when a command needs an explicit all-repos operation, especially unlink --all.
Agent targets
Built-in targets:
codex user: ~/.agents/skills project: .agents/skills
claude user: ~/.claude/skills project: .claude/skills
opencode user: ~/.config/opencode/skills project: .opencode/skills
openclaw user: ~/.openclaw/skills project: —
hermes user: ~/.hermes/skills project: —
Register a custom agent:
skillhost register --agent cursor --user-dir ~/.cursor/skills --project-dir .cursor/skills
skillhost agents
skillhost relink
Agent registration updates config only. Run skillhost relink when you want to create or refresh links.
Skill repo shapes
A skill repo contains one skill:
my-skill/
SKILL.md
A skill collection repo contains multiple skills:
company-skills/
skills/
git/
SKILL.md
db/
SKILL.md
Small flat collections are also supported:
company-skills/
git/
SKILL.md
db/
SKILL.md
Discovery is intentionally shallow. SkillHost checks root SKILL.md, direct children under skills/, and direct children under the repo root. It ignores hidden directories and obvious non-skill directories such as tests, docs, examples, scripts, references, and assets.
Project skills
Project skills are scoped to a registered project repository and linked into project-local agent directories.
skillhost register --project my-project --git git@github.com:org/my-project.git
cd /path/to/my-project
skillhost add git@github.com:org/my-project-skills.git --project my-project
skillhost update --project my-project
Project links go to directories such as:
.agents/skills
.claude/skills
.opencode/skills
SkillHost validates the current Git root and origin remote against the registered project. It does not scan your disk for checkouts.
State and safety
Default state:
~/.skillhost/
config.json
user_repos/<repo-name>/
project_repos/<project-name>/<repo-name>/
Each agent target directory also gets a local .skillhost-links.json manifest. This is how SkillHost knows which symlinks it owns.
Safety rules:
- Does not execute code from skill repositories.
- Does not overwrite unmanaged existing files or directories.
- Does not delete user-owned skill directories.
- Removes only manifest-managed symlinks.
- Uses
git pull --ff-onlyfor updates; it does not merge or rebase. - Does not perform full-disk project discovery or cross-project bulk cleanup.
Git URL handling
Common SSH and HTTPS Git URL forms normalize to the same repo identity:
git@github.com:org/repo.git -> github.com/org/repo
git@github.com:org/repo -> github.com/org/repo
https://github.com/org/repo.git -> github.com/org/repo
https://github.com/org/repo -> github.com/org/repo
ssh://git@github.com/org/repo.git -> github.com/org/repo
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skillhost-0.1.7.tar.gz.
File metadata
- Download URL: skillhost-0.1.7.tar.gz
- Upload date:
- Size: 61.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
832155a971fc649f7a4045d24b92cadadc0415509daa6390e3887c1c597d0838
|
|
| MD5 |
d7481022cb99213475218212c177d209
|
|
| BLAKE2b-256 |
36909a526d9ae33a7d06b8ac3f7270116b03a1d8e80f41ea772f4b06eb39a56e
|
File details
Details for the file skillhost-0.1.7-py3-none-any.whl.
File metadata
- Download URL: skillhost-0.1.7-py3-none-any.whl
- Upload date:
- Size: 19.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8071a31513b8437ecd133f300727c1acee70831deff47a32d7684a4237e42cf0
|
|
| MD5 |
18ceefb5aba5dc6088bf618da55cd5dc
|
|
| BLAKE2b-256 |
1544eea21d7d4fcedf026a6b0029f03113b6cee0534859cbde1a91147bfbbb61
|