From eda1d516dc7b05b658d4ab9f317b6170c3de5b05 Mon Sep 17 00:00:00 2001 From: Leone Parise Date: Wed, 29 Apr 2026 21:51:14 +0000 Subject: [PATCH] fix(skills): exclude .archive from skill index walk Archived skills (moved to ~/.hermes/skills/.archive/ by the curator) were still surfaced in the system prompt under a fake '.archive' category, causing the agent to load and try to use deprecated skills. The os.walk in iter_skill_index_files() only excluded .git/.github/.hub. Add '.archive' to EXCLUDED_SKILL_DIRS, and to the two other places that hardcode the same exclusion tuple (gateway/run.py and agent/skill_commands.py). --- agent/skill_commands.py | 2 +- agent/skill_utils.py | 4 ++-- gateway/run.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/agent/skill_commands.py b/agent/skill_commands.py index fff29eff..e878326a 100644 --- a/agent/skill_commands.py +++ b/agent/skill_commands.py @@ -234,7 +234,7 @@ def scan_skill_commands() -> Dict[str, Dict[str, Any]]: for scan_dir in dirs_to_scan: for skill_md in iter_skill_index_files(scan_dir, "SKILL.md"): - if any(part in ('.git', '.github', '.hub') for part in skill_md.parts): + if any(part in ('.git', '.github', '.hub', '.archive') for part in skill_md.parts): continue try: content = skill_md.read_text(encoding='utf-8') diff --git a/agent/skill_utils.py b/agent/skill_utils.py index b26bf829..cecbb1fc 100644 --- a/agent/skill_utils.py +++ b/agent/skill_utils.py @@ -24,7 +24,7 @@ PLATFORM_MAP = { "windows": "win32", } -EXCLUDED_SKILL_DIRS = frozenset((".git", ".github", ".hub")) +EXCLUDED_SKILL_DIRS = frozenset((".git", ".github", ".hub", ".archive")) # ── Lazy YAML loader ───────────────────────────────────────────────────── @@ -440,7 +440,7 @@ def extract_skill_description(frontmatter: Dict[str, Any]) -> str: def iter_skill_index_files(skills_dir: Path, filename: str): """Walk skills_dir yielding sorted paths matching *filename*. - Excludes ``.git``, ``.github``, ``.hub`` directories. + Excludes ``.git``, ``.github``, ``.hub``, ``.archive`` directories. """ matches = [] for root, dirs, files in os.walk(skills_dir, followlinks=True): diff --git a/gateway/run.py b/gateway/run.py index 04061ba4..9107f6c4 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -638,7 +638,7 @@ def _check_unavailable_skill(command_name: str) -> str | None: if not skills_dir.exists(): continue for skill_md in skills_dir.rglob("SKILL.md"): - if any(part in ('.git', '.github', '.hub') for part in skill_md.parts): + if any(part in ('.git', '.github', '.hub', '.archive') for part in skill_md.parts): continue name = skill_md.parent.name.lower().replace("_", "-") if name == normalized and name in disabled: