Plugin skill name validation rejects skills with qualified name > 64 chars

Open 💬 3 comments Opened May 28, 2026 by gustavosmendes

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

  1. Raise the limit to at least 96 characters to accommodate compound plugin+skill names.
  2. Only validate the skill-local name (from the SKILL.md name field) and let the qualified form be an internal composite.
  3. Truncate or hash long qualified names internally instead of rejecting them.
  4. Improve the warning to show the computed qualified name and the current limit so users can act on it.

View original on GitHub ↗

3 Comments

JunJieLiu51520 · 3 months ago

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 = 64 in codex-rs/core-skills/src/loader.rs is shared across both standalone skill names and plugin-qualified names (namespace:skill_name). The validation in validate_len applies the same limit regardless of whether the name includes a namespace prefix, so compound names like build-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 = 128 constant for plugin-namespaced names, while keeping MAX_NAME_LEN = 64 for 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.

JunJieLiu51520 · 3 months ago

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 = 64 is shared between standalone skill names and plugin-qualified names. In parse_skill_file, the name field is validated with validate_len(&name, MAX_NAME_LEN, "name") — but by the time validation runs, the name has already been qualified into plugin_name:skill_name format by namespaced_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 = 128 constant, and use it conditionally when the name contains : (indicating a plugin-namespaced form):

 const MAX_NAME_LEN: usize = 64;
+const MAX_QUALIFIED_SKILL_NAME_LEN: usize = 128;

 // in parse_skill_file, name validation:
-validate_len(&name, MAX_NAME_LEN, "name")?;
+validate_len(
+    &name,
+    if name.contains(':') {
+        MAX_QUALIFIED_SKILL_NAME_LEN
+    } else {
+        MAX_NAME_LEN
+    },
+    "name",
+)?;

This keeps MAX_NAME_LEN = 64 for 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-len

Happy to submit a PR if the team would like me to implement this.

danielmiszczyszyn-coder · 1 month ago

Reproduced again on 2026-07-28 with a newer Codex Desktop and curated-plugin revision.

Environment

  • Windows 11 Pro x64 (10.0.26200)
  • Codex App 26.721.4979.0
  • build-web-data-visualization plugin 0.1.21
  • OpenAI-managed cache revision 11c74d6b
  • Codex App Server skills/list, queried with forceReload=false

Current result

  • The RPC completes successfully, but the semantic result contains only 10 loaded skills from this plugin and 8 validation errors.
  • All 8 errors are still: invalid name: exceeds maximum length of 64 characters.
  • They affect the same 8 skill directories listed in the issue body.
  • The current plugin contains 18 SKILL.md files. The longest raw name is 49 characters, while the 8 rejected qualified names are 67–78 characters.
  • The cache path was redacted, but it is the standard %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.0 on June 4. The current Codex App Server behavior still matches the pre-fix validation of the full plugin:skill name against the 64-character base-name limit.

Could you confirm whether Codex App 26.721.4979.0 contains #25782 and whether the App Server skills/list path uses the same fixed loader? This may be a Desktop packaging/runtime regression or a loader path not covered by the original fix.