The GPT Project Skill System enforces strict path and ZIP entry rules for both core and skill packages. This page defines what constitutes a safe relative path, explains the differences between core and skill path policies, documents ZIP entry separator requirements, and lists the slug pattern that skill names must satisfy.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/xxyoudeadpunkxx/chatgpt-skill-system/llms.txt
Use this file to discover all available pages before exploring further.
Safe relative path definition
A path is safe and relative if it satisfies all of the following conditions:- Is not absolute — does not begin with
/. - Does not contain
..— no traversal components. - Does not use backslash (
\) path separators. - Does not contain empty path segments — no
//or trailing/that implies a segment. - Does not contain drive letters — for example, no
C:prefix. - Does not rely on traversal — no sequences that navigate outside the package root.
- Does not use a wrapper directory as the sole ZIP root —
MANIFEST.jsonmust be reachable at ZIP root level.
Valid and invalid path examples
Valid and invalid path examples
Core path policy
Core mounted paths are subject to a stricter policy than skill paths. In core version 0.6, all of the following restrictions apply to paths declared in the core manifest:- All declared paths are relative to
SYSTEM_CORE/— the loader resolves them asSYSTEM_CORE/<filename>. - Mounted paths must be direct filenames — no subdirectory component is permitted.
- Allowed mounted extensions:
.mdand.jsononly. - The following are all disallowed in mounted core paths:
- Absolute paths
..- References that would resolve outside
SYSTEM_CORE/ - Subdirectory separators in mounted path strings
Files that are unpacked into the core ZIP but not declared in the manifest
may exist on disk — they are simply not mounted. Presence on disk does not
imply availability in the session context.
Skill path policy
Skill packages use a more permissive policy than the core. The key differences:- Skill packages may preserve original safe relative internal paths, including nested folder structures.
load_sequencemay includeSKILL.mdand any safe relative UTF-8 textual file, including files in subdirectories.support_files,tool_files, andasset_filesmay point to any safe relative path within the package.
- Core path policy
- Skill path policy
ZIP entry separator requirements
All ZIP entries in both core and skill packages must use POSIX/ path separators.
- ZIP entries must not contain
\(backslash). - The runtime must fail fast if a core or skill package contains ZIP entries with
\. - The runtime must not silently normalize invalid ZIP entries — there is no automatic conversion from
\to/.
Slug rules for skill names
The<name> value used in SKILL <name> UNPACK and SKILL <name> LOAD must be a valid skill slug.
The skill slug used in lifecycle commands. Must match the pattern
^[a-z0-9_-]+$ and satisfy all of the following:- Not empty.
- Lowercase ASCII letters, digits, hyphens, and underscores only.
- No spaces.
- No dots (
.). - No forward slashes (
/). - No backslashes (
\). - Is not and does not contain
...
Valid and invalid slug examples
Valid and invalid slug examples
The slug must match the
skill_name field in the skill manifest, the ZIP
filename (without the .zip extension), and the installed folder name under
/mnt/data/GPT.SKILLS/SKILLS/. All four must be identical.Wrapper directory rule
A skill ZIP must not use a single wrapper directory as the ZIP root.MANIFEST.json must appear at the ZIP root level — it must not be nested inside a folder that shares the package name.
- Correct (flat root)
- Incorrect (wrapper directory)
SKILL <name> UNPACK. Internal subdirectories within the package are fully supported — the restriction applies only to a single top-level wrapper that surrounds the entire package.