The GPT Project Skill System ships a build script that compiles every runtime package from source, validates each one against the full set of package rules, and writes ready-to-upload ZIPs into theDocumentation 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.
dist/ directory. This page covers how to run the build script, what it validates, the ZIP path requirements it enforces, and how to add a new skill source so it is picked up automatically on the next build.
Running the build script
From the repository root, run:dist/ and dist/skills/ if they do not exist. It overwrites any previously built ZIPs.
What the build script produces
| Output | Source | Description |
|---|---|---|
dist/GPT.SKILLS.zip | GPT.SKILLS/ | The core runtime package loaded by SKILL CORE UNPACK. |
dist/skills/<name>.zip | skill_sources/<name>/ | One ZIP per skill source directory that contains a MANIFEST.json. |
Core ZIP structure requirements
The core package must have exactly two top-level entries in the ZIP:SYSTEM_CORE/ and SKILLS/. It must not contain a GPT.SKILLS/ wrapper folder. If a wrapper is present, the runtime extracts to the wrong path:
{SYSTEM_CORE, SKILLS} and rejects any ZIP where any entry starts with GPT.SKILLS/.
Required core ZIP entries
The build enforces that the following entries are present:Core manifest fields
The coreSYSTEM_CORE/MANIFEST.json requires all of:
| Field | Required value |
|---|---|
system_name | "gpt_project_skill_system" |
version | "0.6" |
primary_file | string |
load_sequence | non-empty array of strings |
optional_load_sequence | array of strings |
primary_file must be included in load_sequence. The load_sequence and optional_load_sequence arrays must not overlap. Core mounted paths must be direct filenames only (no subdirectories); allowed extensions are .md and .json.
Skill source layout
Each skill lives in its own sub-directory underskill_sources/:
skill_sources/ that contain a MANIFEST.json and builds a ZIP for each one. Directories without a MANIFEST.json are skipped silently.
The built ZIP is written to dist/skills/<skill_name>.zip where skill_name is the value from that directory’s MANIFEST.json.
Adding a new skill source
Create the skill source directory
Create a directory under The directory name must match the
skill_sources/ named after your skill slug:skill_name you will declare in MANIFEST.json.Add MANIFEST.json
Create For explicit manifest mode, also declare
skill_sources/my-skill/MANIFEST.json with skill_name matching the directory name:primary_file and load_sequence (both or neither):Add the primary skill file
For fallback mode, add
SKILL.md at the directory root. For explicit mode, add whatever file is declared as primary_file.Add support, tool, and asset files
Add any additional files declared in the manifest. Every path listed in
support_files, tool_files, and asset_files must exist as a file (not a directory) under the skill source directory.What the build validates
The build script performs a comprehensive validation pass on every package before writing the output ZIP. A failure in any check is a hard fail — the build stops immediately with a descriptive error message.Package shape and ZIP entry checks
Package shape and ZIP entry checks
Applied to both core and skill ZIPs:
- ZIP entries must use POSIX
/path separators — no\anywhere in any entry name. - ZIP entries must be safe relative paths: no absolute paths, no
.., no drive letters (e.g.C:), no empty path segments. - No nested ZIP files inside a source directory.
- No
__pycache__directories or.pycfiles included in any output ZIP.
Core manifest validation
Core manifest validation
- All five required fields present:
system_name,version,primary_file,load_sequence,optional_load_sequence. system_namemust be exactly"gpt_project_skill_system".versionmust be exactly"0.6".load_sequencemust be a non-empty array of strings with no duplicates.optional_load_sequencemust be an array of strings with no duplicates.primary_filemust be included inload_sequence.load_sequenceandoptional_load_sequencemust not overlap.- Every path in
load_sequencemust use direct filenames only (no subdirectories). - All paths must use only
.mdor.jsonextensions. - Every required file must exist in the ZIP and be readable as UTF-8.
Skill manifest validation
Skill manifest validation
skill_namemust be a non-empty string.skill_namemust match the source directory name.versionmust be a non-empty string.primary_fileandload_sequencemust either both be present or both be omitted.- If explicit:
load_sequencemust be non-empty;primary_filemust be included inload_sequence. load_sequenceandsupport_filesmust not overlap.- All array fields (
load_sequence,support_files,tool_files,asset_files) must contain strings with no duplicates, and every path must be a safe relative path.
Declared file existence and type checks
Declared file existence and type checks
- Every file declared in
load_sequencemust exist as a file (not a directory) and be readable as UTF-8. - Files in
load_sequencemust not have script extensions (.py,.sh,.js,.ts,.bat,.cmd,.ps1, and others). - Every file declared in
support_filesmust exist as a file target. - Every file declared in
tool_filesmust exist as a file target and be readable as UTF-8. - Every file declared in
asset_filesmust exist as a file target.
Skill ZIP structure checks
Skill ZIP structure checks
MANIFEST.jsonmust be present at the ZIP root.- The ZIP must not contain a single wrapper directory surrounding all contents.
- The ZIP must not contain a
GPT.SKILLS/prefix. - The ZIP must not contain nested ZIPs.
- The
skill_namein the ZIP’sMANIFEST.jsonmust match the output filename.
ZIP path rules
All ZIP entries in every package must use POSIX/ separators. The build script checks this both when writing the ZIP and again after writing by re-opening the archive.
Valid ZIP entries
Related pages
Package Format
Full reference for MANIFEST.json fields, file categories, and ZIP structure rules.
Adapting a Skill
Step-by-step guide to wrapping an external skill into a compatible package.