Skip to content

Installer extra skills can be written into the current project #1077

Description

@rNoz

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

  1. Enter a Git repository that does not intentionally vendor Plannotator skills.
  2. Run npx --yes skills@1.5.14 add backnotprop/plannotator/apps/skills/extra --help from that directory.
  3. 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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions