Summary
Plannotator's macOS/Linux, PowerShell, and Command Prompt installers invoke npx skills add backnotprop/plannotator/apps/skills/extra without an explicit scope. When an installer or its printed install-later command runs from inside a Git repository, the Skills CLI can select project scope and write Plannotator's extra skills into that repository's .agents/skills/ directory instead of the user's global skills directory.
Affected surfaces
scripts/install.sh
scripts/install.ps1
scripts/install.cmd
- The install-later commands printed by those installers
- Public installation examples that repeat the same unscoped command
Reproduction
- Enter a Git repository that does not intentionally vendor Plannotator skills.
- Run
npx --yes skills@1.5.14 add backnotprop/plannotator/apps/skills/extra --help from that directory.
- Inspect the repository's
.agents/skills/plannotator-* directories and skills-lock.json.
Observed behavior
Despite the trailing --help, Skills CLI 1.5.14 did not show add-command help. With --yes, it auto-detected GitHub Copilot and installed all three extra skills under the current repository's .agents/skills/ directory. It also created a project-local skills-lock.json. This created unrelated project files and left a dirty working tree.
Expected behavior
Plannotator's user-level installer should install its optional extra skills in the user's global skills location regardless of the directory from which installation starts.
Root cause
The Skills CLI distinguishes project and user-global installation. Its --global option selects the user-level directory, while an unscoped invocation may select project scope from the current working directory. Plannotator's three installers and public examples omit that option, so their result depends on where the user runs them.
Security and hygiene impact
This is primarily a repository hygiene and trust-boundary problem. A user running a global application installer can unexpectedly modify an unrelated source repository, add files that may later be committed by mistake, and make installation behavior vary by current directory.
Proposed fix
Add --global to every supported installer invocation and printed example for npx skills add backnotprop/plannotator/apps/skills/extra. Add a deterministic parity check that enumerates every occurrence across the three installers and requires all occurrences to use explicit global scope.
Prior art and overlap
No issue or pull request was found that already fixes this cross-platform scope leak. Merged PR #850 introduced an unscoped extra-skills command. Issues #853 and #998 concern adjacent skill installation behavior but do not cover current-directory project writes or explicit global scope.
Environment
The live reproduction was tested with Skills CLI 1.5.14. The four resulting project-local artifacts, three skill directories and skills-lock.json, were removed after the observation.
Skills CLI 1.5.19 was not run live for this proof. Its tagged source retains the same contract: the main add-command case parses options and calls the add operation without intercepting -h or --help, while the add option parser does not recognize help and still supports --global for user-level scope. The behavior applies when installation starts inside a Git repository and the Skills CLI resolves an unscoped install as project-local. The affected Plannotator surfaces are platform-independent because the shell, PowerShell, and Command Prompt installers all emit the same unscoped operation.
Contribution
I am willing to contribute the cross-platform installer, documentation, and regression-test update. I worked in a fix a couple of weeks ago and it worked great. However, I have spent the morning polishing it and considering other systems/platforms for a more robust fix. I'll open a PR soon => Done!
Summary
Plannotator's macOS/Linux, PowerShell, and Command Prompt installers invoke
npx skills add backnotprop/plannotator/apps/skills/extrawithout an explicit scope. When an installer or its printed install-later command runs from inside a Git repository, the Skills CLI can select project scope and write Plannotator's extra skills into that repository's.agents/skills/directory instead of the user's global skills directory.Affected surfaces
scripts/install.shscripts/install.ps1scripts/install.cmdReproduction
npx --yes skills@1.5.14 add backnotprop/plannotator/apps/skills/extra --helpfrom that directory..agents/skills/plannotator-*directories andskills-lock.json.Observed behavior
Despite the trailing
--help, Skills CLI 1.5.14 did not show add-command help. With--yes, it auto-detected GitHub Copilot and installed all three extra skills under the current repository's.agents/skills/directory. It also created a project-localskills-lock.json. This created unrelated project files and left a dirty working tree.Expected behavior
Plannotator's user-level installer should install its optional extra skills in the user's global skills location regardless of the directory from which installation starts.
Root cause
The Skills CLI distinguishes project and user-global installation. Its
--globaloption selects the user-level directory, while an unscoped invocation may select project scope from the current working directory. Plannotator's three installers and public examples omit that option, so their result depends on where the user runs them.Security and hygiene impact
This is primarily a repository hygiene and trust-boundary problem. A user running a global application installer can unexpectedly modify an unrelated source repository, add files that may later be committed by mistake, and make installation behavior vary by current directory.
Proposed fix
Add
--globalto every supported installer invocation and printed example fornpx skills add backnotprop/plannotator/apps/skills/extra. Add a deterministic parity check that enumerates every occurrence across the three installers and requires all occurrences to use explicit global scope.Prior art and overlap
No issue or pull request was found that already fixes this cross-platform scope leak. Merged PR #850 introduced an unscoped extra-skills command. Issues #853 and #998 concern adjacent skill installation behavior but do not cover current-directory project writes or explicit global scope.
Environment
The live reproduction was tested with Skills CLI 1.5.14. The four resulting project-local artifacts, three skill directories and
skills-lock.json, were removed after the observation.Skills CLI 1.5.19 was not run live for this proof. Its tagged source retains the same contract: the main add-command case parses options and calls the add operation without intercepting
-hor--help, while the add option parser does not recognize help and still supports--globalfor user-level scope. The behavior applies when installation starts inside a Git repository and the Skills CLI resolves an unscoped install as project-local. The affected Plannotator surfaces are platform-independent because the shell, PowerShell, and Command Prompt installers all emit the same unscoped operation.Contribution
I am willing to contribute the cross-platform installer, documentation, and regression-test update. I worked in a fix a couple of weeks ago and it worked great. However, I have spent the morning polishing it and considering other systems/platforms for a more robust fix. I'll open a PR soon => Done!