From 88602376d41fafead365cb47e9cb6afb8576664d Mon Sep 17 00:00:00 2001 From: "Mil Wang (from Dev Box)" Date: Wed, 15 Apr 2026 08:59:51 +0800 Subject: [PATCH] fix: resolve external_dirs relative to HERMES_HOME instead of cwd (#9949) Relative entries in skills.external_dirs were resolved against the process cwd via Path.resolve(), making them silently fail when Hermes was launched from a different directory. Resolve relative paths against get_hermes_home() for consistent behavior across CLI, gateway, and cron contexts. Absolute paths and env-var/tilde expansion are unchanged. --- agent/skill_utils.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/agent/skill_utils.py b/agent/skill_utils.py index d4d94f7e2..b26bf8298 100644 --- a/agent/skill_utils.py +++ b/agent/skill_utils.py @@ -200,6 +200,9 @@ def get_external_skills_dirs() -> List[Path]: if not isinstance(raw_dirs, list): return [] + from hermes_constants import get_hermes_home + + hermes_home = get_hermes_home() local_skills = get_skills_dir().resolve() seen: Set[Path] = set() result: List[Path] = [] @@ -210,7 +213,12 @@ def get_external_skills_dirs() -> List[Path]: continue # Expand ~ and environment variables expanded = os.path.expanduser(os.path.expandvars(entry)) - p = Path(expanded).resolve() + p = Path(expanded) + # Resolve relative paths against HERMES_HOME, not cwd + if not p.is_absolute(): + p = (hermes_home / p).resolve() + else: + p = p.resolve() if p == local_skills: continue if p in seen: