Plugin skill name validation rejects skills with qualified name > 64 chars
Description
The build-web-data-visualization curated plugin has 8 skills that are silently skipped during loading because their qualified names (plugin_name:skill_name) exceed the 64-character maximum.
Repro
On a system with the build-web-data-visualization plugin installed (version 94a36683), Codex emits:
⚠ /Users/.../skills/accessibility-and-inclusive-visualization/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ /Users/.../skills/dashboards-and-real-time-visualization/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ /Users/.../skills/geospatial-and-cartographic-visualization/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ /Users/.../skills/grammar-of-graphics-and-declarative-visualization/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ /Users/.../skills/scrollytelling-and-parallax-data-visualization/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ /Users/.../skills/statistical-and-uncertainty-visualization/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ /Users/.../skills/typescript-data-visualization-engineering/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ /Users/.../skills/uml-and-software-architecture-visualization/SKILL.md: invalid name: exceeds maximum length of 64 characters
⚠ Skipped loading 8 skill(s) due to invalid SKILL.md files.
Root cause
The plugin name build-web-data-visualization is 30 characters. When qualified with : and the skill name, the combined names push past the 64-char threshold:
| Qualified name | Length |
|---|---|
| build-web-data-visualization:grammar-of-graphics-and-declarative-visualization | 78 |
| build-web-data-visualization:scrollytelling-and-parallax-data-visualization | 75 |
| build-web-data-visualization:uml-and-software-architecture-visualization | 72 |
| build-web-data-visualization:typescript-data-visualization-engineering | 70 |
| build-web-data-visualization:statistical-and-uncertainty-visualization | 70 |
| build-web-data-visualization:geospatial-and-cartographic-visualization | 70 |
| build-web-data-visualization:accessibility-and-inclusive-visualization | 70 |
| build-web-data-visualization:dashboards-and-real-time-visualization | 67 |
The 10 other skills in the same plugin have qualified names ≤ 64 and load fine.
Impact
Users lose access to 8 visualization skills (accessibility, dashboards, geospatial, grammar-of-graphics, scrollytelling, statistical, typescript-engineering, UML) with no actionable guidance — the warning references the SKILL.md path but not which field or what the computed name is.
Possible approaches
- Raise the limit to at least 96 characters to accommodate compound plugin+skill names.
- Only validate the skill-local name (from the SKILL.md
namefield) and let the qualified form be an internal composite. - Truncate or hash long qualified names internally instead of rejecting them.
- Improve the warning to show the computed qualified name and the current limit so users can act on it.
3 Comments
I'd like to work on this. I've traced the root cause and have a targeted fix in mind.
The current
MAX_NAME_LEN = 64incodex-rs/core-skills/src/loader.rsis shared across both standalone skill names and plugin-qualified names (namespace:skill_name). The validation invalidate_lenapplies the same limit regardless of whether the name includes a namespace prefix, so compound names likebuild-web-data-visualization:grammar-of-graphics-and-declarative-visualization(78 chars) are rejected even though the individual parts are reasonable lengths.A clean fix is to introduce a separate
MAX_QUALIFIED_SKILL_NAME_LEN = 128constant for plugin-namespaced names, while keepingMAX_NAME_LEN = 64for standalone skill names and unrelated metadata fields — avoiding the concern of accidentally widening limits that should stay narrow.I'll share a full root-cause analysis and diff shortly. Happy to submit a PR if the team would like me to implement this.
Root cause & fix
After tracing the code, here's the detailed analysis:
Root cause
In
codex-rs/core-skills/src/loader.rs,MAX_NAME_LEN = 64is shared between standalone skill names and plugin-qualified names. Inparse_skill_file, thenamefield is validated withvalidate_len(&name, MAX_NAME_LEN, "name")— but by the time validation runs, the name has already been qualified intoplugin_name:skill_nameformat bynamespaced_skill_name(). This means the full combined string is measured against a 64-char limit intended for simple names.Fix
Introduce a separate
MAX_QUALIFIED_SKILL_NAME_LEN: usize = 128constant, and use it conditionally when the name contains:(indicating a plugin-namespaced form):This keeps
MAX_NAME_LEN = 64for all other fields (MAX_DEPENDENCY_TYPE_LEN,MAX_DEPENDENCY_TRANSPORT_LEN, display names, etc.) — no unintended widening of unrelated limits.With this fix, all 8 skills in
build-web-data-visualization(qualified names up to 78 chars) would load successfully.My fork branch with the implementation:
fix/24950-qualified-skill-name-lenHappy to submit a PR if the team would like me to implement this.
Reproduced again on 2026-07-28 with a newer Codex Desktop and curated-plugin revision.
Environment
10.0.26200)26.721.4979.0build-web-data-visualizationplugin0.1.2111c74d6bskills/list, queried withforceReload=falseCurrent result
invalid name: exceeds maximum length of 64 characters.SKILL.mdfiles. The longest rawnameis 49 characters, while the 8 rejected qualified names are 67–78 characters.%USERPROFILE%\.codex\plugins\cache\openai-curated\build-web-data-visualization\11c74d6b\...location.This is notable because #25782 was merged on June 2 and included in
0.137.0on June 4. The current Codex App Server behavior still matches the pre-fix validation of the fullplugin:skillname against the 64-character base-name limit.Could you confirm whether Codex App
26.721.4979.0contains #25782 and whether the App Serverskills/listpath uses the same fixed loader? This may be a Desktop packaging/runtime regression or a loader path not covered by the original fix.