All skills
openai avatar

/plugin-creator

@e940b8a official
by openaiopenai/skills28k stars
1,891

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.

Use this Skill: https://skilld.dev/gh/openai/skills/plugin-creator

This session only. Nothing lands on disk.

referencesplugin-json-spec.md

≈1.8k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Plugin JSON sample spec

{
  "name": "plugin-name",
  "version": "1.2.0",
  "description": "Brief plugin description",
  "author": {
    "name": "Author Name",
    "email": "author@example.com",
    "url": "https://github.com/author"
  },
  "homepage": "https://docs.example.com/plugin",
  "repository": "https://github.com/author/plugin",
  "license": "MIT",
  "keywords": ["keyword1", "keyword2"],
  "skills": "./skills/",
  "hooks": "./hooks.json",
  "mcpServers": "./.mcp.json",
  "apps": "./.app.json",
  "interface": {
    "displayName": "Plugin Display Name",
    "shortDescription": "Short description for subtitle",
    "longDescription": "Long description for details page",
    "developerName": "OpenAI",
    "category": "Productivity",
    "capabilities": ["Interactive", "Write"],
    "websiteURL": "https://openai.com/",
    "privacyPolicyURL": "https://openai.com/policies/row-privacy-policy/",
    "termsOfServiceURL": "https://openai.com/policies/row-terms-of-use/",
    "defaultPrompt": [
      "Summarize my inbox and draft replies for me.",
      "Find open bugs and turn them into Linear tickets.",
      "Review today's meetings and flag scheduling gaps."
    ],
    "brandColor": "#3B82F6",
    "composerIcon": "./assets/icon.png",
    "logo": "./assets/logo.png",
    "screenshots": [
      "./assets/screenshot1.png",
      "./assets/screenshot2.png",
      "./assets/screenshot3.png"
    ]
  }
}

Field guide

Top-level fields

  • name (string): Plugin identifier (kebab-case, no spaces). Required if plugin.json is provided and used as manifest name and component namespace.
  • version (string): Plugin semantic version.
  • description (string): Short purpose summary.
  • author (object): Publisher identity.
    • name (string): Author or team name.
    • email (string): Contact email.
    • url (string): Author/team homepage or profile URL.
  • homepage (string): Documentation URL for plugin usage.
  • repository (string): Source code URL.
  • license (string): License identifier (for example MIT, Apache-2.0).
  • keywords (array of string): Search/discovery tags.
  • skills (string): Relative path to skill directories/files.
  • hooks (string): Hook config path.
  • mcpServers (string): MCP config path.
  • apps (string): App manifest path for plugin integrations.
  • interface (object): Interface/UX metadata block for plugin presentation.

interface fields

  • displayName (string): User-facing title shown for the plugin.
  • shortDescription (string): Brief subtitle used in compact views.
  • longDescription (string): Longer description used on details screens.
  • developerName (string): Human-readable publisher name.
  • category (string): Plugin category bucket.
  • capabilities (array of string): Capability list from implementation.
  • websiteURL (string): Public website for the plugin.
  • privacyPolicyURL (string): Privacy policy URL.
  • termsOfServiceURL (string): Terms of service URL.
  • defaultPrompt (array of string): Starter prompts shown in composer/UX context.
    • Include at most 3 strings. Entries after the first 3 are ignored and will not be included.
    • Each string is capped at 128 characters. Longer entries are truncated.
    • Prefer short starter prompts around 50 characters so they scan well in the UI.
  • brandColor (string): Theme color for the plugin card.
  • composerIcon (string): Path to icon asset.
  • logo (string): Path to logo asset.
  • screenshots (array of string): List of screenshot asset paths.
    • Screenshot entries must be PNG filenames and stored under ./assets/.
    • Keep file paths relative to plugin root.

Path conventions and defaults

  • Path values should be relative and begin with ./.
  • skills, hooks, and mcpServers are supplemented on top of default component discovery; they do not replace defaults.
  • Custom path values must follow the plugin root convention and naming/namespacing rules.
  • This repo’s scaffold writes .codex-plugin/plugin.json; treat that as the manifest location this skill generates.

Marketplace JSON sample spec

marketplace.json depends on where the plugin should live:

  • Repo plugin: <repo-root>/.agents/plugins/marketplace.json
  • Local plugin: ~/.agents/plugins/marketplace.json
{
  "name": "openai-curated",
  "interface": {
    "displayName": "ChatGPT Official"
  },
  "plugins": [
    {
      "name": "linear",
      "source": {
        "source": "local",
        "path": "./plugins/linear"
      },
      "policy": {
        "installation": "AVAILABLE",
        "authentication": "ON_INSTALL"
      },
      "category": "Productivity"
    }
  ]
}

Marketplace field guide

Top-level fields

  • name (string): Marketplace identifier or catalog name.
  • interface (object, optional): Marketplace presentation metadata.
  • plugins (array): Ordered plugin entries. This order determines how Codex renders plugins.

interface fields

  • displayName (string, optional): User-facing marketplace title.

Plugin entry fields

  • name (string): Plugin identifier. Match the plugin folder name and plugin.json name.
  • source (object): Plugin source descriptor.
    • source (string): Use local for this repo workflow.
    • path (string): Relative plugin path based on the marketplace root.
      • Repo plugin: ./plugins/<plugin-name>
      • Local plugin in ~/.agents/plugins/marketplace.json: ./plugins/<plugin-name>
    • The same relative path convention is used for both repo-rooted and home-rooted marketplaces.
      • Example: with ~/.agents/plugins/marketplace.json, ./plugins/<plugin-name> resolves to ~/plugins/<plugin-name>.
  • policy (object): Marketplace policy block. Always include it.
    • installation (string): Availability policy.
      • Allowed values: NOT_AVAILABLE, AVAILABLE, INSTALLED_BY_DEFAULT
      • Default for new entries: AVAILABLE
    • authentication (string): Authentication timing policy.
      • Allowed values: ON_INSTALL, ON_USE
      • Default for new entries: ON_INSTALL
    • products (array of string, optional): Product override for this plugin entry. Omit it unless product gating is explicitly requested.
  • category (string): Display category bucket. Always include it.

Marketplace generation rules

  • displayName belongs under the top-level interface object, not individual plugin entries.
  • When creating a new marketplace file from scratch, seed interface.displayName alongside top-level name.
  • Always include policy.installation, policy.authentication, and category on every generated or updated plugin entry.
  • Treat policy.products as an override and omit it unless explicitly requested.
  • Append new entries unless the user explicitly requests reordering.
  • Replace an existing entry for the same plugin only when overwrite is intentional.
  • Choose marketplace location to match the plugin destination:
    • Repo plugin: <repo-root>/.agents/plugins/marketplace.json
    • Local plugin: ~/.agents/plugins/marketplace.json

Source: SKILL.md on GitHub

No alerts17d3 checks · Risk SAFE
  • Gen Agent Trust Hub17d

    This skill includes some security considerations such as script execution capabilities to automate directories creation and configuration files modification. While these warrant review, they are used within the skill's intended functionality to scaffold local development plugins.

  • Socket17d

    No alerts

  • Snyk17d

    Risk: LOW · No issues

Signed by skilld at e940b8a. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Activeupdated 6 months ago
  • Python
  • codex
  • plugin
  • scaffolding
  • marketplace
  • plugin-json
  • manifest
  • local-plugin

README badge

README badge for openai/skills/plugin-creator

Scaffolds Codex plugin directories with a required `.codex-plugin/plugin.json` manifest, optional companion folders (skills, hooks, scripts, assets), and generates or updates `.agents/plugins/marketplace.json` entries for plugin ordering and availability. Use when creating a new local plugin or adding plugin structure to an existing repo.

Generated from the current SKILL.md.

Does this skill work with Codex plugins only?
Yes. The skill scaffolds and manages plugins for Codex, including the `.codex-plugin/plugin.json` manifest and optional `marketplace.json` registry entries.
Can I create plugins in my home directory instead of the repo root?
Yes. Use the `--path` and `--marketplace-path` flags to specify home-local locations like `~/plugins` and `~/.agents/plugins/marketplace.json`.
What optional companion folders can be generated?
The skill can optionally create `skills/`, `hooks/`, `scripts/`, `assets/`, `.mcp.json`, and `.app.json` folders or files using the corresponding `--with-*` flags.
How are plugin names normalized?
Plugin names are converted to lower-case hyphen-case with spaces, underscores, and punctuation converted to hyphens, consecutive hyphens collapsed, and a maximum length of 64 characters.
What are the default policy values for marketplace entries?
New marketplace entries default to `policy.installation: "AVAILABLE"` and `policy.authentication: "ON_INSTALL"` unless you explicitly specify different values.

Generated from the current SKILL.md. These answers refresh after source changes.