Adapting an existing text-based skill to the GPT Project Skill System is a preservation-first process. The goal is to change only what is strictly required for compatibility — path safety, ZIP structure safety, GPT ProjectDocumentation 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.
/mnt compatibility, Code Interpreter compatibility, manifest identity, and semantic mount clarity — and leave everything else exactly as it was. You do not rewrite the skill; you wrap it correctly.
When to use fallback vs explicit mode
Choose the package mode that matches the skill’s real entry point.| Situation | Mode |
|---|---|
Root SKILL.md is the real entry point and no extra mounted files are needed | Fallback — omit primary_file and load_sequence |
Entry point is nested (for example, src/SKILL.md) | Explicit — declare both primary_file and load_sequence |
| Additional files need to be mounted alongside the primary file | Explicit — list all mounted files in load_sequence |
| You want unambiguous declaration for clarity or review | Explicit — declare both fields even if entry is SKILL.md |
Packaging steps
Choose a slug
Pick a
skill_name that matches ^[a-z0-9_-]+$. Use lowercase letters, digits, hyphens, and underscores only. No spaces, dots, slashes, or uppercase letters.Create the package folder
Create a folder named
<skill_name>/ (matching the slug exactly). Inside it, place MANIFEST.json and the primary skill file.- Fallback mode: the primary file must be root
SKILL.md. - Explicit mode: the primary file may be any safe relative UTF-8 textual file.
Verify skill_name equals the slug
Open
MANIFEST.json and confirm skill_name exactly equals the slug you chose in step 1. Any mismatch is a hard fail at unpack time.Verify the ZIP filename
The ZIP file you create must be named
<skill_name>.zip. The filename, the command slug, the installed folder, and skill_name in the manifest must all be identical.Create the ZIP
Zip the contents of the package folder directly — do not zip the folder itself.
MANIFEST.json must appear at the ZIP root. Internal subfolders are preserved as-is. All ZIP entry paths must use POSIX / separators.macOS / Linux:Confirm no wrapper directory
Open the ZIP and verify that the first level contains Invalid ZIP root:
MANIFEST.json directly — not a folder named summarizer/ or anything else surrounding the package. A wrapper directory is a hard fail.Valid ZIP root:Preserving structure
Keep the original folder and file names from the source skill whenever possible. Do not flatten nested paths, do not rename files to fit a preferred taxonomy, and do not normalize anything unless one of the following compatibility requirements forces it:- Path safety: path contains
.., backslashes, drive letters, absolute reference, or empty segments. - ZIP safety: entry would produce a wrapper directory.
- GPT Project / mnt compatibility: path would resolve outside
/mnt/data/GPT.SKILLS/SKILLS/<name>/. - Code Interpreter compatibility: path form prevents file access by the Python environment.
- Manifest identity:
skill_namedoes not match the slug. - Semantic mount clarity: file type would cause it to be treated incorrectly by the loader.
What to avoid
These are the most common adaptation anti-patterns. Each one adds accidental complexity or breaks the preservation-first contract.Rewriting into a framework
Do not rewrite the skill’s text into a mini-framework with its own routing, phases, or command syntax. Preserve the original skill body.
Reorganizing folders
Do not move files into a system-specific folder taxonomy (
core/, lifecycle/, and so on). Keep the original folder names unless safety requires a change.Adding bootstrap rules
Do not add initialization logic or boot sequences to skill files. Boot behavior belongs to the core, not to skills.
Adding lifecycle rules
Do not embed
UNPACK/LOAD/UNLOAD lifecycle instructions inside skill content. The loader already knows the lifecycle.Duplicating core behavior
Do not copy core operational rules into the skill. If a behavior is defined by the core, the skill must not redefine or override it.
Marketplace assumptions
Do not add auto-install logic, marketplace references, or dependency resolution to skill content. Skills are installed manually through explicit commands.
Valid vs invalid examples
Valid — flat ZIP, consistent identity:Adaptation checklist
Use this checklist before loading an adapted skill for the first time.-
MANIFEST.jsonexists at the ZIP root. - Fallback mode: root
SKILL.mdexists. - Explicit mode: declared
primary_fileexists and is included inload_sequence. - ZIP is flat —
MANIFEST.jsonis at ZIP root with no 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. - Fallback mode:
SKILL.mdis UTF-8 text or Markdown. - Explicit mode: declared
primary_fileis UTF-8 text or Markdown. - All declared load files are AI-only textual files.
- Extra mounted files are declared in
load_sequence. - Extra mounted files are AI-only textual files (no scripts, no binaries).
- All internal paths are safe relative paths.
- No path contains
.., backslashes, drive letters, or 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 by any tool file. - Requirements are described in
SKILL.mdbody text, not in the manifest schema. - The skill does not redefine or override core operational rules.