Skip to content

fix(skills): exclude hidden dirs from skill search, guard cyclic symlinks, handle non-dict quick_commands#18937

Open
oluwadareab12 wants to merge 1 commit into
NousResearch:mainfrom
oluwadareab12:fix/skill-rglob-and-quick-commands
Open

fix(skills): exclude hidden dirs from skill search, guard cyclic symlinks, handle non-dict quick_commands#18937
oluwadareab12 wants to merge 1 commit into
NousResearch:mainfrom
oluwadareab12:fix/skill-rglob-and-quick-commands

Conversation

@oluwadareab12

Copy link
Copy Markdown
Contributor

Fixes #18900, #18809, #18816

#18900 -- _find_skill rglob leaks into .archive, .git, .github, .hub
Replace bare rglob in _find_skill with iter_skill_index_files which already excludes those dirs.

#18809 -- os.walk(followlinks=True) infinite-loop on cyclic symlinks
Add seen-inode tracking to iter_skill_index_files. If a directory inode pair has already been visited the subtree is pruned. Non-cyclic symlinks are still followed.

#18816 -- quick_commands with non-dict values crashes slash command dispatch
Add isinstance(qcmd, dict) guard in both gateway/run.py and cli.py before calling .get(). Misconfigured entries return a clear error message instead of crashing with AttributeError.

14 new tests in tests/test_skill_rglob_and_quick_commands.py, all passing.

@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists tool/skills Skills system (list, view, manage) comp/cli CLI entry point, hermes_cli/, setup wizard comp/gateway Gateway runner, session dispatch, delivery labels May 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/gateway Gateway runner, session dispatch, delivery P2 Medium — degraded but workaround exists tool/skills Skills system (list, view, manage) type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

_find_skill rglob leaks into .archive, .git, .github, .hub — no exclusion filtering

2 participants