Skip to content

skills tap add accepts custom git repos that search/install cannot actually use #14290

Description

@ma-pony

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:

  1. 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
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium — degraded but workaround existsarea/install-updateInstaller, updater, packaging, wheels, doctorcomp/cliCLI entry point, hermes_cli/, setup wizardcomp/toolsTool registry, model_tools, toolsetsneeds-decisionAwaiting maintainer decision before any implementationtool/skillsSkills system (list, view, manage)type/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions