plugin-creator — Codex skill: what it does, how to install
Scaffolds a Codex plugin with its manifest, optional folders, and marketplace entry. Useful when you need a local plugin ready for editing or testing.
npx skills add openai/skills --skill plugin-creator -a claude-codeWhat plugin-creator does
The skill creates a plugin directory with a normalized name and the required .codex-plugin/plugin.json. The manifest includes the schema shape, an interface section, and placeholder values to replace before publishing or testing. The folder name and manifest name stay identical, while spaces, punctuation, and repeated separators are normalized to lower-case hyphen-case.
Flags can add skills/, hooks/, scripts/, assets/, .mcp.json, and .app.json. With --with-marketplace, the skill creates or updates .agents/plugins/marketplace.json, adds a relative plugin source path, preserves an existing interface.displayName, and writes installation, authentication, and category fields.
For a home-local plugin, choose the home directory as the root and pass a separate marketplace path. Check that location before generating the entry: repository plugins use a relative source path, while the home-local convention uses ~/.agents/plugins/marketplace.json.
What it helps with
- scaffold a local plugin directory
- create the required
plugin.jsonmanifest - add optional skills and hooks folders
- update a marketplace entry
- normalize a plugin name
Example prompts for the agent
- Create a local `my-plugin` with `plugin-creator`, including the required manifest.
- Run `python3 .agents/skills/plugin-creator/scripts/create_basic_plugin.py my-plugin --with-marketplace`.
- Create `my-plugin` with skills, hooks, scripts, assets, MCP, and apps folders using `create_basic_plugin.py`.
How to install plugin-creator
1Skills CLI (Vercel)
npx skills add openai/skills --skill plugin-creator -a claude-code2Manually: put the files in place
~/.claude/skills/plugin-creator/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/plugin-creator/
1Skills CLI (Vercel)
npx skills add openai/skills --skill plugin-creator -a codex2Manually: put the files in place
.agents/skills/plugin-creator/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add openai/skills --skill plugin-creator -a cursor2Manually: put the files in place
.cursor/skills/plugin-creator/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install openai/skills plugin-creator2Manually: put the files in place
.github/skills/plugin-creator/SKILL.md1Skills CLI (Vercel)
npx skills add openai/skills --skill plugin-creator -a gemini-cli2Platform CLI
gemini skills install https://github.com/openai/skills --path skills/.system/plugin-creatorManually: put the files in place
.devin/skills/plugin-creator/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add openai/skills --skill plugin-creator -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set20
The whole set →Similar
Questions about plugin-creator
How do I install plugin-creator in Codex?
Run npx skills add openai/skills --skill plugin-creator -a codex, then use .agents/skills/plugin-creator/SKILL.md.
What does plugin-creator do?
It scaffolds a local Codex plugin, creates the required .codex-plugin/plugin.json, adds optional directories, and can update marketplace.json.
How do I add a home-local plugin to the marketplace?
Pass --path ~/plugins and --marketplace-path ~/.agents/plugins/marketplace.json, then add --with-marketplace. The command is `python3 .agents/skills/plugin-creator/scripts/create_basic_plugin.py my-plugin --path ~/plugins --marketplace-path ~/.agents/plugins/marketplace.json --with-marketplace`.
Source text
SKILL.md · Apache-2.0
---
name: plugin-creator
description: Create and scaffold plugin directories for Codex with a required `.codex-plugin/plugin.json`, optional plugin folders/files, and baseline placeholders you can edit before publishing or testing. Use when Codex needs to create a new local plugin, add optional plugin structure, or generate or update repo-root `.agents/plugins/marketplace.json` entries for plugin ordering and availability metadata.
---
# Plugin Creator
## Quick Start
1. Run the scaffold script:
```bash
# Plugin names are normalized to lower-case hyphen-case and must be <= 64 chars.
# The generated folder and plugin.json name are always the same.
# Run from repo root (or replace .agents/... with the absolute path to this SKILL).
# By default creates in <repo_root>/plugins/<plugin-name>.
python3 .agents/skills/plugin-creator/scripts/create_basic_plugin.py <plugin-name>
```
2. Open `<plugin-path>/.codex-plugin/plugin.json` and replace `[TODO: ...]` placeholders.
3. Generate or update the repo marketplace entry when the plugin should appear in Codex UI ordering:
```bash
# marketplace.json always lives at <repo-root>/.agents/plugins/marketplace.json
python3 .agents/skills/plugin-creator/scripts/create_basic_plugin.py my-plugin --with-marketplace
```
For a home-local plugin, treat `<home>` as the root and use:
```bash
python3 .agents/skills/plugin-creator/scripts/create_basic_plugin.py my-plugin \
--path ~/plugins \
--marketplace-path ~/.agents/plugins/marketplace.json \
--with-marketplace
```
4. Generate/adjust optional companion folders as needed:
```bash
python3 .agents/skills/plugin-creator/scripts/create_basic_plugin.py my-plugin --path <parent-plugin-directory> \
--with-skills --with-hooks --with-scripts --with-assets --with-mcp --with-apps --with-marketplace
```
`<parent-plugin-directory>` is the directory where the plugin folder `<plugin-name>` will be created (for example `~/code/plugins`).
## What this skill creates
- If the user has not made the plugin location explicit, ask whether they want a repo-local plugin or a home-local plugin before generating marketplace entries.
- Creates plugin root at `/<parent-plugin-directory>/<plugin-name>/`.
- Always creates `/<parent-plugin-directory>/<plugin-name>/.codex-plugin/plugin.json`.
- Fills the manifest with the full schema shape, placeholder values, and the complete `interface` section.
- Creates or updates `<repo-root>/.agents/plugins/marketplace.json` when `--with-marketplace` is set.
- If the marketplace file does not exist yet, seed top-level `name` plus `interface.displayName` placeholders before adding the first plugin entry.
- `<plugin-name>` is normalized using skill-creator naming rules:
- `My Plugin` → `my-plugin`
- `My--Plugin` → `my-plugin`
- underscores, spaces, and punctuation are converted to `-`
- result is lower-case hyphen-delimited with consecutive hyphens collapsed
- Supports optional creation of:
- `skills/`
- `hooks/`
- `scripts/`
- `assets/`
- `.mcp.json`
- `.app.json`
## Marketplace workflow
- `marketplace.json` always lives at `<repo-root>/.agents/plugins/marketplace.json`.
- For a home-local plugin, use the same convention with `<home>` as the root:
`~/.agents/plugins/marketplace.json` plus `./plugins/<plugin-name>`.
- Marketplace root metadata supports top-level `name` plus optional `interface.displayName`.
- Treat plugin order in `plugins[]` as render order in Codex. Append new entries unless a user explicitly asks to reorder the list.
- `displayName` belongs inside the marketplace `interface` object, not individual `plugins[]` entries.
- Each generated marketplace entry must include all of:
- `policy.installation`
- `policy.authentication`
- `category`
- Default new entries to:
- `policy.installation: "AVAILABLE"`
- `policy.authentication: "ON_INSTALL"`
- Override defaults only when the user explicitly specifies another allowed value.
- Allowed `policy.installation` values:
- `NOT_AVAILABLE`
- `AVAILABLE`
- `INSTALLED_BY_DEFAULT`
- Allowed `policy.authentication` values:
- `ON_INSTALL`
- `ON_USE`
- Treat `policy.products` as an override. Omit it unless the user explicitly requests product gating.
- The generated plugin entry shape is:
```json
{
"name": "plugin-name",
"source": {
"source": "local",
"path": "./plugins/plugin-name"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
```
- Use `--force` only when intentionally replacing an existing marketplace entry for the same plugin name.
- If `<repo-root>/.agents/plugins/marketplace.json` does not exist yet, create it with top-level `"name"`, an `"interface"` object containing `"displayName"`, and a `plugins` array, then add the new entry.
- For a brand-new marketplace file, the root object should look like:
```json
{
"name": "[TODO: marketplace-name]",
"interface": {
"displayName": "[TODO: Marketplace Display Name]"
},
"plugins": [
{
"name": "plugin-name",
"source": {
"source": "local",
"path": "./plugins/plugin-name"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}
```
## Required behavior
- Outer folder name and `plugin.json` `"name"` are always the same normalized plugin name.
- Do not remove required structure; keep `.codex-plugin/plugin.json` present.
- Keep manifest values as placeholders until a human or follow-up step explicitly fills them.
- If creating files inside an existing plugin path, use `--force` only when overwrite is intentional.
- Preserve any existing marketplace `interface.displayName`.
- When generating marketplace entries, always write `policy.installation`, `policy.authentication`, and `category` even if their values are defaults.
- Add `policy.products` only when the user explicitly asks for that override.
- Keep marketplace `source.path` relative to repo root as `./plugins/<plugin-name>`.
## Reference to exact spec sample
For the exact canonical sample JSON for both plugin manifests and marketplace entries, use:
- `references/plugin-json-spec.md`
## Validation
After editing `SKILL.md`, run:
```bash
python3 <path-to-skill-creator>/scripts/quick_validate.py .agents/skills/plugin-creator
```
© openai · Apache-2.0 · openai/skills