Adapting an external skill for the GPT Project Skill System means wrapping existing text-based skill content into a ZIP package the loader can unpack and mount. This page walks through the entire process — choosing a slug, building the manifest, structuring the ZIP, and loading the result — and explains what to preserve, what to change, and what to avoid.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.
Adaptation philosophy
The guiding principle is preservation-first. Change only what is required for the skill to work correctly as a loadable package. The loader does not require a specific folder taxonomy, naming convention, or structural transformation beyond the rules below.What to preserve
- The original body text of
SKILL.mdand any companion documents. - The original folder structure and file names, whenever they are path-safe.
- The original intent and tone of the skill content.
What to change
Only make changes required for one of these specific reasons:| Reason | Examples |
|---|---|
| Path safety | Remove .., backslashes, drive letters, empty segments |
| ZIP safety | Eliminate a wrapper directory; ensure MANIFEST.json is at ZIP root |
| GPT Project / mnt compatibility | Ensure paths resolve correctly under /mnt/data/GPT.SKILLS/ |
| Code Interpreter compatibility | Ensure tool files are UTF-8 and stdlib-only |
| Manifest identity | Align ZIP filename, command slug, folder name, and skill_name |
| Semantic mount clarity | Move binary or script files out of load_sequence |
What to avoid
- Rewriting the skill into a mini-framework.
- Reorganizing folders into a system-specific taxonomy.
- Adding bootstrap rules or loader lifecycle hooks.
- Duplicating rules already defined in the core operational rules.
- Adding marketplace or auto-install assumptions.
Packaging steps
Choose a slug
Pick a slug for the skill name. The slug must match The slug you choose becomes the ZIP filename, the command name, and the installed folder name — all four must match.
^[a-z0-9_-]+$ — lowercase letters, digits, hyphens, and underscores only.Create the package folder and primary skill file
Create a folder named after your slug and add
MANIFEST.json inside it.-
Fallback mode — the primary file must be a root-level
SKILL.md: -
Explicit manifest mode — the primary file may be any safe relative UTF-8 textual file:
Verify skill_name matches the slug
Open The
MANIFEST.json and confirm skill_name is exactly the slug you chose in step 1.version field must be a non-empty string. No specific format is enforced.Verify the ZIP filename
The ZIP you will create must be named
<skill_name>.zip. For a skill named summarizer, that is summarizer.zip. A mismatch between the ZIP name and skill_name is a hard fail at unpack.Add explicit manifest fields if needed
If you are using explicit manifest mode, declare Rules for each category:
primary_file and load_sequence. Both must be present — providing only one is invalid.load_sequence— must includeprimary_file; AI-only textual UTF-8 files only; no scripts or binary assets; no overlap withsupport_files.support_files— supplemental references available after unpack, not mounted automatically.tool_files— Python scripts available after unpack; never mounted or run automatically; stdlib and existing GPT packages only.asset_files— data, templates, or media files available after unpack; not mounted automatically.
Create the ZIP with MANIFEST.json at root
Zip the contents of the package folder so that Internal folders with path-safe names are allowed inside the ZIP.
MANIFEST.json appears at the ZIP root. Do not zip the folder itself — that creates a wrapper directory, which is a hard fail.Confirm there is no wrapper directory
Open the ZIP and check that the first level contains Invalid ZIP root (wrapper directory)
MANIFEST.json directly — not a single folder wrapping everything.Valid ZIP rootRequirements and dependencies
Put real runtime requirements in the body ofSKILL.md as plain text. This keeps dependency claims human-readable without forcing the loader to validate capabilities it cannot guarantee.
Do not use
capabilities or runtime_hints as a dependency specification. Those fields are lightweight descriptive metadata and do not create any validation, authorization, or routing guarantees at load time.Valid and invalid package examples
Valid — fallback mode
Invalid — wrapper directory
MANIFEST.json and hard fails.
Invalid — ZIP and manifest name mismatch
skill_name — must agree.
Adaptation checklist
Adaptation checklist
Adaptation checklist
MANIFEST.jsonexists in the package.- Fallback mode: root
SKILL.mdexists. - Fallback mode:
SKILL.mdis UTF-8 text/Markdown. - Explicit manifest mode: declared
primary_fileexists and is included inload_sequence. - Explicit manifest mode: declared
primary_fileis UTF-8 text/Markdown. - ZIP is flat —
MANIFEST.jsonis at root, no single wrapper directory. - ZIP filename is
<skill_name>.zip. - Command slug equals
skill_name. - Installed folder will be
/mnt/data/GPT.SKILLS/SKILLS/<skill_name>/. skill_namefollows^[a-z0-9_-]+$.versionis a non-empty string.MANIFEST.jsonis valid UTF-8 JSON.- Declared load files are AI-only textual files.
- Extra mounted files are declared in
load_sequence. - Extra mounted files are AI-only textual files.
- Internal paths are safe relative paths — no
.., no backslashes, no drive letters, no empty segments. support_filesdoes not overlap withload_sequence.tool_filesare not mounted and not run automatically.asset_filesare not mounted automatically.- No
pip installor network install is required. - Requirements are in
SKILL.md, not a strong manifest schema. - The skill does not redefine core operational rules.
Related pages
Package Format
Full reference for ZIP structure, MANIFEST.json fields, file categories, and path rules.
Packaging & Build
Automate package building and validation with the build script.