How to Submit a New Skill to OpenAI: Complete Contributor Guide
Submitting a new skill to OpenAI requires forking the repository, scaffolding your skill using the init_skill.py script, validating the configuration with quick_validate.py, and opening a pull request targeting the skills/.curated directory.
The openai/skills repository hosts the Agent Skills system that powers OpenAI Codex. Submitting a new skill to OpenAI involves creating a self-contained package with YAML front-matter, markdown instructions, and optional deterministic scripts that Codex can interpret and execute. This guide provides the exact commands, file paths, and validation steps required to create and contribute a production-ready skill.
Understanding the OpenAI Skills Architecture
Before submitting a new skill to OpenAI, you must understand how the repository organizes capabilities. The openai/skills repository contains three top-level groups:
.system/– Core installer and creator utilities pre-installed in Codex..curated/– Production-ready skills available to all users via the skill installer..experimental/– Work-in-progress skills not automatically listed in the skill picker.
Each skill is a self-contained folder within these directories. According to the source code in skills/.system/skill-creator/SKILL.md, a complete skill consists of the following components:
| Component | Purpose | Example Location |
|---|---|---|
SKILL.md |
YAML front-matter plus Markdown instructions that Codex reads when triggered | skills/.curated/<skill-name>/SKILL.md |
agents/openai.yaml |
UI metadata including display name and description for the skill picker | skills/.curated/<skill-name>/agents/openai.yaml |
scripts/ |
Optional deterministic code executed without loading into the model's context | skills/.curated/<skill-name>/scripts/ |
references/ |
Optional documentation loaded only when needed | skills/.curated/<skill-name>/references/ |
assets/ |
Templates, icons, and other output files | skills/.curated/<skill-name>/assets/ |
Prerequisites for Submitting a New Skill
To begin submitting a new skill to OpenAI, ensure your environment meets these requirements:
- Git – Ability to fork and push to a personal repository.
- Python 3.9+ – The creator scripts require Python 3.9 or newer.
- Access to
$CODEX_HOME(optional) – Required only for local testing with$skill-installer. - Familiarity with the skill format – Review the Skill Creator guide at
skills/.system/skill-creator/SKILL.md.
Verify your Python version:
python --version
Step-by-Step Process for Submitting a New Skill to OpenAI
The following workflow details the exact process for submitting a new skill to OpenAI, from initial scaffolding to final pull request.
Step 1: Fork the Repository
Create a personal fork of the openai/skills repository and clone it locally:
git clone https://github.com/<your-username>/skills.git
cd skills
This fork provides an isolated branch where you can push commits without affecting the upstream repository.
Step 2: Scaffold Your Skill
Use the Skill Initializer script located at skills/.system/skill-creator/scripts/init_skill.py to generate the required folder structure:
python -m skills/.system/skill-creator/scripts/init_skill.py \
my-new-skill \
--path skills/.curated \
--resources scripts,references,assets \
--examples
Parameters explained:
my-new-skill– The folder name (must be lowercase and hyphenated).--path skills/.curated– Places the skill in the production-ready collection.--resources– Creates empty directories forscripts/,references/, andassets/.--examples– Adds placeholder files demonstrating typical content.
This script generates a ready-to-edit SKILL.md and a minimal agents/openai.yaml.
Step 3: Edit Skill Content
Modify the generated files to define your skill's behavior:
- Update
SKILL.md– Ensure the YAML front-matter contains accuratenameanddescriptionfields. Codex uses these to determine when to invoke the skill. Add imperative instructions in the Markdown body. - Configure
agents/openai.yaml– Adjust the UI metadata for the skill picker. - Populate
scripts/– Add deterministic code that executes without loading into the model's context. - Add
references/– Include documentation that Codex loads only when needed.
Refer to the Skill Creator documentation at skills/.system/skill-creator/SKILL.md for best-practice patterns including progressive disclosure and resource linking.
Step 4: Validate Your Skill
Run the validation script to catch missing fields, naming violations, or malformed YAML:
python -m skills/.system/skill-creator/scripts/quick_validate.py \
skills/.curated/my-new-skill
The script at skills/.system/skill-creator/scripts/quick_validate.py checks for:
- Presence of
SKILL.md. - Valid YAML front-matter with required
nameanddescriptionfields. - Skill folder name matching the
namefield (maximum 64 characters).
If errors appear, edit the files and re-run until the script outputs "Skill validation passed."
Step 5: Test Locally (Optional)
If you have a Codex development environment with $CODEX_HOME configured, test your skill locally:
$skill-installer my-new-skill
This invokes the installer script at skills/.system/skill-installer/scripts/install-skill-from-github.py to load your skill from the local .curated directory. Restart Codex to verify the skill appears in the skill picker and functions correctly.
Step 6: Commit and Push
Create a feature branch and push your changes:
git checkout -b add-my-new-skill
git add skills/.curated/my-new-skill
git commit -m "Add my-new-skill: <short description>"
git push origin add-my-new-skill
Step 7: Open a Pull Request
- Navigate to your fork on GitHub.
- Click "New pull request", targeting
openai/skills:main. - Provide a concise description of the skill's purpose and usage.
- Add the "skill" label if you have maintainer permissions.
OpenAI contributors will review your submission. Once approved and merged, your skill becomes available to all Codex users via $skill-installer.
Key Files and Scripts Reference
When submitting a new skill to OpenAI, you will interact with these specific files:
| File Path | Purpose |
|---|---|
skills/.system/skill-creator/scripts/init_skill.py |
Scaffolds new skill folders with required structure |
skills/.system/skill-creator/scripts/quick_validate.py |
Validates YAML front-matter and naming constraints |
skills/.system/skill-creator/SKILL.md |
Comprehensive guide on skill creation best practices |
skills/.system/skill-installer/scripts/install-skill-from-github.py |
Installs skills locally for testing |
skills/.curated/<skill-name>/SKILL.md |
Your skill's main definition file with front-matter |
skills/.curated/<skill-name>/agents/openai.yaml |
UI metadata for the Codex skill picker |
Summary
Submitting a new skill to OpenAI follows a standardized workflow designed to ensure quality and consistency across the Codex ecosystem:
- Fork the
openai/skillsrepository and clone it locally. - Scaffold your skill using
init_skill.pywith the--path skills/.curatedflag. - Edit
SKILL.mdwith accurate YAML front-matter and imperative instructions. - Validate your submission using
quick_validate.pybefore committing. - Test locally with
$skill-installerif you have Codex development access. - Submit a pull request targeting
openai/skills:mainfor review.
Once merged, your skill becomes immediately available to all Codex users through the skill installer.
Frequently Asked Questions
What is the difference between .curated and .experimental skill directories?
The .curated directory contains production-ready skills that undergo review and are automatically available to all Codex users via $skill-installer. The .experimental directory holds work-in-progress skills that are not automatically listed in the skill picker and may not meet production standards. When submitting a new skill to OpenAI, you should target skills/.curated unless specifically instructed otherwise.
How does the init_skill.py script structure a new skill?
The init_skill.py script located at skills/.system/skill-creator/scripts/init_skill.py generates a complete skill folder structure including SKILL.md with YAML front-matter, agents/openai.yaml for UI metadata, and optional directories for scripts/, references/, and assets/ based on the --resources flag. It ensures the skill name is lowercase and hyphenated, creating a standardized foundation that passes initial validation.
What validation does quick_validate.py perform?
The quick_validate.py script at skills/.system/skill-creator/scripts/quick_validate.py checks for the presence of SKILL.md, validates that the YAML front-matter contains required fields (name and description), and verifies that the skill folder name matches the name field with a maximum of 64 characters. It catches naming violations and malformed YAML before submission, outputting "Skill validation passed" when all checks succeed.
Can I test my skill before submitting a pull request?
Yes, if you have access to a Codex development environment with $CODEX_HOME configured, you can test your skill locally using the $skill-installer command followed by your skill name. This invokes the installer script at skills/.system/skill-installer/scripts/install-skill-from-github.py to load your skill from the local .curated directory. After installation, restart Codex to verify the skill appears in the skill picker and functions correctly before opening your pull request.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →