[app/skills] Installed skill-installer helpers lose executable permissions

Open 💬 0 comments Opened Aug 15, 2026 by 100yenadmin

Installed and source versions

  • Codex Desktop app: 26.810.41047, bundle 6570, macOS arm64
  • Installed system skill: /Users/m1/.codex/skills/.system/skill-installer
  • Compared source: openai/skills commit 49f948faa9258a0c61caceaf225e179651397431

Reproduction

The installed skill documents direct commands such as:

scripts/list-skills.py
scripts/install-skill-from-github.py ...

Both installed files have mode 0644. From the installed skill root:

scripts/list-skills.py --help

returns exit 126:

permission denied: scripts/list-skills.py

At the compared upstream source commit, both helper entrypoints are mode 0755. Their file contents are runnable through an explicit Python interpreter, so the supported package appears to have lost the executable mode during installation or packaging.

Expected behavior

A helper documented as directly executable should retain its source executable bit in the installed system-skill tree, or the installed documentation should invoke it through a resolved Python interpreter.

Actual behavior

The installed files are non-executable while the installed skill still documents bare execution.

Proposed narrow fix

Preserve executable mode metadata for system-skill entrypoints during packaging. As a portable defense, the skill may also document python3 <absolute-skill-root>/scripts/... rather than depending on mode and current working directory.

Acceptance test

  1. Package/install the system skills into a temporary Codex home.
  2. Compare executable mode for declared entrypoints against the source manifest.
  3. From the installed skill root, run both documented --help commands.
  4. From a different conversation cwd, run the absolute interpreter form.
  5. Assert both paths exit successfully without network access or installation.

This report does not request editing the installed system-skill tree; the fix belongs in the upstream packaging path.

View original on GitHub ↗