hermes - 💡(How to fix) Fix Bug: `hermes skills install` fails with "Unsafe install path" for certain skills

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Installing certain skills from multi-skill repositories (like kepano/obsidian-skills) via skills.sh hub or GitHub source fails with:

Installation blocked: Unsafe install path: obsidian-bases

Error Message

Both fail with the same error.

Root Cause

The path validation in _normalize_lock_install_path() expects the install path's final component to match the skill name exactly. However, the calculation of install_rel_path vs safe_skill_name appears to mismatch for certain multi-skill repo structures.

From the code:

# Line 3138-3146 in tools/skills_hub.py
if safe_category:
    install_rel_path = f"{safe_category}/{safe_skill_name}"
else:
    install_rel_path = safe_skill_name

install_dir = _resolve_lock_install_path(install_rel_path, safe_skill_name)

And the validation:

# In _normalize_lock_install_path
parts = normalized.split("/")
if not parts or parts[-1] != safe_skill_name:
    raise ValueError(f"Unsafe install path: {install_path}")

Fix Action

Workaround

Direct URL install works but only fetches SKILL.md:

hermes skills install https://raw.githubusercontent.com/kepano/obsidian-skills/main/skills/obsidian-bases/SKILL.md --category note-taking --yes

However, this workaround is incomplete - it misses references/, templates/, scripts/, and assets/ directories.

Code Example

Installation blocked: Unsafe install path: obsidian-bases

---

# Try installing obsidian-bases from skills.sh hub
hermes skills install skills-sh/kepano/obsidian-skills/obsidian-bases

# Or from GitHub directly
hermes skills install kepano/obsidian-skills/skills/obsidian-bases

---

hermes skills install https://raw.githubusercontent.com/kepano/obsidian-skills/main/skills/obsidian-bases/SKILL.md --category note-taking --yes

---

# Line 3138-3146 in tools/skills_hub.py
if safe_category:
    install_rel_path = f"{safe_category}/{safe_skill_name}"
else:
    install_rel_path = safe_skill_name

install_dir = _resolve_lock_install_path(install_rel_path, safe_skill_name)

---

# In _normalize_lock_install_path
parts = normalized.split("/")
if not parts or parts[-1] != safe_skill_name:
    raise ValueError(f"Unsafe install path: {install_path}")

---

2026-05-30T19:04:06Z BLOCKED obsidian-bases clawhub:community invalid_path Unsafe install path: obsidian-bases
2026-05-30T19:28:47Z BLOCKED obsidian-bases clawhub:community invalid_path Unsafe install path: obsidian-bases

---

mkdir -p ~/.hermes/skills/note-taking/obsidian-bases/references
curl -s "https://raw.githubusercontent.com/kepano/obsidian-skills/main/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md" \
  -o ~/.hermes/skills/note-taking/obsidian-bases/references/FUNCTIONS_REFERENCE.md
RAW_BUFFERClick to expand / collapse

Bug: hermes skills install fails with "Unsafe install path" for certain multi-skill repo skills

Summary

Installing certain skills from multi-skill repositories (like kepano/obsidian-skills) via skills.sh hub or GitHub source fails with:

Installation blocked: Unsafe install path: obsidian-bases

Reproduction

# Try installing obsidian-bases from skills.sh hub
hermes skills install skills-sh/kepano/obsidian-skills/obsidian-bases

# Or from GitHub directly
hermes skills install kepano/obsidian-skills/skills/obsidian-bases

Both fail with the same error.

Workaround

Direct URL install works but only fetches SKILL.md:

hermes skills install https://raw.githubusercontent.com/kepano/obsidian-skills/main/skills/obsidian-bases/SKILL.md --category note-taking --yes

However, this workaround is incomplete - it misses references/, templates/, scripts/, and assets/ directories.

Affected Skills

The obsidian-skills repo has multiple skills that may be affected:

  • obsidian-bases (confirmed failure)
  • obsidian-markdown (confirmed works via direct URL)
  • obsidian-cli
  • defuddle
  • json-canvas

Root Cause Analysis

The path validation in _normalize_lock_install_path() expects the install path's final component to match the skill name exactly. However, the calculation of install_rel_path vs safe_skill_name appears to mismatch for certain multi-skill repo structures.

From the code:

# Line 3138-3146 in tools/skills_hub.py
if safe_category:
    install_rel_path = f"{safe_category}/{safe_skill_name}"
else:
    install_rel_path = safe_skill_name

install_dir = _resolve_lock_install_path(install_rel_path, safe_skill_name)

And the validation:

# In _normalize_lock_install_path
parts = normalized.split("/")
if not parts or parts[-1] != safe_skill_name:
    raise ValueError(f"Unsafe install path: {install_path}")

Audit Log Evidence

2026-05-30T19:04:06Z BLOCKED obsidian-bases clawhub:community invalid_path Unsafe install path: obsidian-bases
2026-05-30T19:28:47Z BLOCKED obsidian-bases clawhub:community invalid_path Unsafe install path: obsidian-bases

Related Issues

  • #35125: "hermes skills install URL source only downloads SKILL.md, misses reference files" - partially related workaround issue

Expected Behavior

  1. skills.sh hub install: Should download ZIP bundle with ALL files (SKILL.md + references/ + templates/ + scripts/ + assets/)
  2. GitHub source install: Should recursively download all files from the skill directory via Git Trees API
  3. Both should succeed without "Unsafe install path" errors

Suggested Fixes

  1. Fix path validation: Debug why install_rel_path and safe_skill_name are mismatching for this skill
  2. Direct URL enhancement: Add support for fetching all referenced files from the index.json metadata
  3. Alternative: Add a --fetch-all flag to hermes skills install that uses the ZIP download path even for direct URLs

Environment

  • Hermes Agent version: latest (commit unknown)
  • Python version: 3.x
  • OS: WSL2 on Windows

Additional Context

The skills.sh hub integration via ClawHub downloads a ZIP bundle that includes all files, but this path validation prevents installation. This is a regression since earlier versions worked fine.

For the workaround, manual file fetching is required:

mkdir -p ~/.hermes/skills/note-taking/obsidian-bases/references
curl -s "https://raw.githubusercontent.com/kepano/obsidian-skills/main/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md" \
  -o ~/.hermes/skills/note-taking/obsidian-bases/references/FUNCTIONS_REFERENCE.md

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - 💡(How to fix) Fix Bug: `hermes skills install` fails with "Unsafe install path" for certain skills