skill-creator quick_validate.py still fails without undeclared PyYAML dependency
Summary
skill-creator/scripts/quick_validate.py still fails in a clean Python environment because it imports yaml at module load time, while the bundled skill-creator does not include a requirements.txt, pyproject.toml, or another dependency bootstrap mechanism.
This is related to #11990, but the fix in #12080 only lazy-loaded PyYAML in generate_openai_yaml.py so that init_skill.py can run without PyYAML. It did not update quick_validate.py.
Reproduction
- Use a Python environment without PyYAML installed.
- Run:
python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py /path/to/a/skill
- The script exits before validating the skill:
Traceback (most recent call last):
...
ModuleNotFoundError: No module named 'yaml'
Expected
The bundled Skill validator should either:
- run without undeclared third-party dependencies, or
- provide and document a deterministic way to install/run its Python dependencies.
Actual
quick_validate.py imports yaml unconditionally:
import yaml
The bundled skill-creator directory does not include a Python dependency manifest, so the validation step documented by the Skill fails on a clean Python installation.
Current source
The same unconditional import is present on main:
codex-rs/skills/src/assets/samples/skill-creator/scripts/quick_validate.py
Environment
- Codex CLI: 0.135.0
- OS: macOS Apple Silicon
- Python environment: clean environment without PyYAML
Suggested fixes
Any of the following would resolve the issue:
- Make the validator self-contained.
- Bundle a dependency manifest and invoke it through a managed environment.
- Add a PEP 723 inline dependency declaration and a documented runner.
- At minimum, catch the missing dependency and print an actionable installation command instead of a traceback.
A local workaround is to run the validator in an isolated environment, for example:
uv run --isolated --no-project --with PyYAML python \
~/.codex/skills/.system/skill-creator/scripts/quick_validate.py \
/path/to/a/skillThis issue has 2 comments on GitHub. Read the full discussion on GitHub ↗