feat: support symlinked skill directories - #84
Conversation
|
Landing this in #87 with credit in the 0.30.0 changelog. Thanks! |
|
Closing as obsolete: symlinked skill directories already shipped in npm |
I noticed that my pull request was included in the new feature version, but the commit no longer carry my authorship. Could there be an issue with the merge workflow that caused the author information to be lost? @rebel0789 |
Add CONTRIBUTORS.md and package.json contributors entry so reimplemented PR #84 credit is durable beyond the 0.30.0 changelog thanks line. Co-authored-by: Cursor <cursoragent@cursor.com>
|
You're right that #87 reimplemented the symlink skill work instead of merging your commit, so Git commit authorship on Credit is recorded in these places:
We cannot safely rewrite published |
Current behavior
CodexPro discovers skills by recursively scanning configured skill roots, including
~/.codex/skills.Some skill managers, such as cc-switch, install skills by creating directory symlinks under
~/.codex/skills. These entries are reported as symbolic links rather than regular directories and are therefore not included in the skill inventory.New capability
CodexPro now supports skill directories installed through symbolic links.
The skill scanner:
realpath.statto confirm that the target is a directory before scanning it.load_skill.Regression coverage includes discovering and loading a symlinked user skill.
Security impact
This capability affects read-only skill discovery. A directory symlink under a configured skill root may cause CodexPro to scan its target for
SKILL.md.Existing scan depth and item limits remain in effect. Broken or inaccessible links are ignored. Authentication, shell execution, write operations, and tunnel behavior are unchanged.
Testing
npm run buildnpm run smokeopen_current_workspacewithinclude_skills=trueandinclude_global_skills=truediscovers a cc-switch symlinked skillload_skillloads the resolvedSKILL.mdDocumentation
No documentation changes are included because this extends discovery within an existing skill root without adding commands, flags, or configuration.