Repository navigation
fix: load leading-slash skill paths and group skills in the slash menu - #14201
Merged
Merged
Conversation
skills.paths entries written as "/.github/skills" are read as an absolute path by path.isAbsolute, so discovery looked at the filesystem root and found nothing. Keep the absolute-first reading and fall back to the project root only when that directory does not exist, and keep the fallback untrusted so project content never gains trusted-skill privileges. The VS Code slash menu listed every skill under Commands with no label and showed two identical rows when a skill shared its name with a command. Group skills separately and rename a clashing skill to "name:skill", which the CLI already resolves.
Contributor
Code Review SummaryStatus: 1 Issue Found | Recommendation: Address before merge Overview
Issue Details (click to expand)SUGGESTION
Files Reviewed (8 files)
The skill-path fallback itself looks correct: Fix these issues in Kilo Cloud Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0 Review guidance: REVIEW.md from base branch |
marius-kilocode
enabled auto-merge
September 16, 2026 07:42
eshurakov
approved these changes
Sep 16, 2026
This was referenced Sep 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Problem This Solves
Fixes #14181. A
skills.pathsentry written with a leading slash, such as/.github/skills, was read as an absolute filesystem path. Discovery scanned the filesystem root (or the current drive root on Windows), found nothing, loggedskill path not found, and skipped the entry. Users who registered a repository skill folder this way saw an empty skill list andSkill "x" not found.Fixes #14096. The VS Code slash menu listed every loaded skill under the
COMMANDSheader with no distinct label. When a skill shared its name with a custom command, the menu showed two identical/namerows, and selecting either ran the command, leaving the skill unreachable from the menu.Why This Change Was Made
The upstream resolver keeps absolute-first semantics for
skills.pathsand Kilo has no upstream fix to reuse, so the fallback lives in a Kilo-owned helper. A/xor\xentry without a drive letter is still tried as an absolute path first; only when that directory does not exist is it resolved relative to the project root. Drive-qualified (C:\x) and UNC (\\server\share) entries never fall back.The fallback re-derives a path inside the project, so it must not inherit the trusted status of the config that declared it. Trust now requires that the resolved directory is still the declared value, which keeps the fallback project-scoped and untrusted. Real absolute paths and
~/entries keep their previous trust behaviour.For the slash menu, the CLI already resolves
name:skillto a skill (the same convention the TUI displays), so the webview applies that suffix to a skill whose name clashes with a command or MCP prompt instead of hiding one of the two rows.User Impact
/.github/skills,.github/skills, and./.github/skillsnow load the same repository skills.~/, and real absolute entries behave exactly as before.ACTIONS/COMMANDS/SKILLSgrouping. A clashing skill is listed as/name:skilland inserts/name:skill, so both the command and the skill stay reachable.skills.pathsand for skill slash invocation was added in the VS Code and CLI tabs.Evidence
Automated:
packages/opencode/test/kilocode/skill/paths.test.ts(4 tests:rooteddetection for Windows and POSIX forms, leading-slash fallback, relative/dot/absolute regression, missing path skipped). Four new picker tests inpackages/kilo-vscode/tests/unit/use-slash-command.test.ts(grouping order, clash renaming, duplicate rows, selection text). All skill suites (90 tests) and the full extension unit suite (5735 tests) pass.bun turbo typecheck,kilo-vscodetypecheck and lint,knip,check-kilocode-change,check-opencode-annotations --worktree, and prettier are clean.VS Code self-test with a fixture repo (
skills.paths: ["/.github/skills"], agrillskill, afooskill, and afoocustom command):/.github/skillspath and listsgrillandfooas discovered skills with their repository paths./foomenu shows/foounderCOMMANDSand/foo:skillunderSKILLS; selecting the skill row inserts/foo:skill.The failure reproduced identically on v7.4.6, v7.5.16, and current HEAD, so this is a pre-existing gap rather than a recent regression. A resolved code review noted that the v2
ConfigSkillPluginhas a second copy of the resolver without the fallback; nothing user-facing reads the v2 result yet, so that alignment is left for the v2 migration.