From 6bf526748d7bfb32ff4899521899aac2f3eec02c Mon Sep 17 00:00:00 2001 From: kristoffern Date: Tue, 24 Mar 2026 15:06:29 +0100 Subject: [PATCH] fix(skills): follow symlinks when scanning custom skills directory (#1292) os.walk() does not follow symbolic links by default. This means custom skills installed as symlinks in skills/custom/ are discovered as directories but never descended into, so their SKILL.md files are never found and the skills silently fail to load. Adding followlinks=True fixes this for users who symlink skill directories from external projects into the custom skills folder. Co-authored-by: Claude Opus 4.6 (1M context) Co-authored-by: Willem Jiang --- backend/packages/harness/deerflow/skills/loader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/packages/harness/deerflow/skills/loader.py b/backend/packages/harness/deerflow/skills/loader.py index d7ffa16..50c68d3 100644 --- a/backend/packages/harness/deerflow/skills/loader.py +++ b/backend/packages/harness/deerflow/skills/loader.py @@ -60,7 +60,7 @@ def load_skills(skills_path: Path | None = None, use_config: bool = True, enable if not category_path.exists() or not category_path.is_dir(): continue - for current_root, dir_names, file_names in os.walk(category_path): + for current_root, dir_names, file_names in os.walk(category_path, followlinks=True): # Keep traversal deterministic and skip hidden directories. dir_names[:] = sorted(name for name in dir_names if not name.startswith(".")) if "SKILL.md" not in file_names: