Problem
hermes skills tap add <repo> is documented as a way to add a custom repository as a skill source, but the current implementation only works for GitHub repos addressable through the GitHub Contents API.
In practice, adding a non-GitHub custom Git repository (for example a private/self-hosted Git server over SSH) is accepted by tap add, but skills search, skills inspect, and skills install cannot resolve anything from that tap.
Reproduction
Repository used:
git@git.rccchina.com:crawl/spider-skills.git
The repository is reachable over SSH and contains valid skill directories such as:
skills/spider-kit/SKILL.md
skills/crawl-config/SKILL.md
skills/crawl-troubleshoot/SKILL.md
However:
hermes skills tap add git@git.rccchina.com:crawl/spider-skills.git
hermes skills search spider-kit
# No skills found matching your query.
hermes skills inspect git@git.rccchina.com:crawl/spider-skills.git/skills/spider-kit
# Error: Could not find ... in any source.
Root cause
From the current implementation in tools/skills_hub.py:
TapsManager.add() stores arbitrary {repo, path} values in taps.json
- but
GitHubSource later assumes taps are GitHub repos in owner/repo form
- search/listing uses
https://api.github.com/repos/{repo}/contents/{path}
- inspect/fetch identifiers are parsed as
owner/repo/path/to/skill-dir
So tap add currently accepts a broader input surface than the backend actually supports.
Expected behavior
One of these should happen:
-
Minimal fix:
- validate
tap add input and clearly restrict it to GitHub/GitHub Enterprise repos that the backend can actually resolve
- document that self-hosted/non-GitHub Git repos are not supported
-
Better fix:
- support generic git-based taps, including SSH/private repositories
- allow search/inspect/install by cloning or updating a local cache and scanning
skills/*/SKILL.md
- make tap/search/install work consistently for custom git repositories, not only GitHub API-backed repos
Why this matters
The current UX is misleading: tap add succeeds, but the tap is unusable unless the repo happens to match GitHub API assumptions.
This makes Hermes difficult to adopt in internal/company environments where skills are stored in private Git servers rather than public GitHub repos.
Problem
hermes skills tap add <repo>is documented as a way to add a custom repository as a skill source, but the current implementation only works for GitHub repos addressable through the GitHub Contents API.In practice, adding a non-GitHub custom Git repository (for example a private/self-hosted Git server over SSH) is accepted by
tap add, butskills search,skills inspect, andskills installcannot resolve anything from that tap.Reproduction
Repository used:
git@git.rccchina.com:crawl/spider-skills.gitThe repository is reachable over SSH and contains valid skill directories such as:
skills/spider-kit/SKILL.mdskills/crawl-config/SKILL.mdskills/crawl-troubleshoot/SKILL.mdHowever:
Root cause
From the current implementation in
tools/skills_hub.py:TapsManager.add()stores arbitrary{repo, path}values intaps.jsonGitHubSourcelater assumes taps are GitHub repos inowner/repoformhttps://api.github.com/repos/{repo}/contents/{path}owner/repo/path/to/skill-dirSo
tap addcurrently accepts a broader input surface than the backend actually supports.Expected behavior
One of these should happen:
Minimal fix:
tap addinput and clearly restrict it to GitHub/GitHub Enterprise repos that the backend can actually resolveBetter fix:
skills/*/SKILL.mdWhy this matters
The current UX is misleading:
tap addsucceeds, but the tap is unusable unless the repo happens to match GitHub API assumptions.This makes Hermes difficult to adopt in internal/company environments where skills are stored in private Git servers rather than public GitHub repos.