plugin-creator

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included.

File history ↗

Create and scaffold plugin directories for Codex with a required `.codex-plugin/plugin.json`, optional plugin folders/files, valid manifest defaults, and personal-marketplace entries by default. Use when Codex needs to create a new personal plugin, add optional plugin structure, generate or update marketplace entries for plugin ordering and availability metadata, or update an existing local plugin during development with the CLI-driven cachebuster and reinstall flow.

codex-rs/skills/src/assets/samples/plugin-creator/SKILL.md

Download bundle ↓
main · 18d7ace11 bundle filesScanned 2026-09-14

references/installing-and-updating.md

1,314 tokens · o200k_base · 6,000 bytes

Source excerpt starting at line 1.
# Updating Existing Local Plugins Use this reference when a plugin already exists and the request is about updating the plugin during local development. All scripts here are specified relative to the skill root. Update the path for running the scriptsdepending on your current working directory. ## When To Use This Flow Use this flow when all of the following are true: - the plugin already exists locally- the marketplace entry already points at the plugin source you are editing- the user wants Codex to see the updated plugin without manually editing marketplace files If the user still needs the initial plugin entry or marketplace structure created, use the scaffoldflow first and only then switch to this reinstall flow. ## Update Loop 1. Before changing the plugin, read the marketplace name from the personal marketplace file: ```bashpython3 scripts/read_marketplace_name.py``` Here, "personal marketplace" means the marketplace whose file is at`~/.agents/plugins/marketplace.json`. On Windows, use the equivalent path under the user profile.The helper uses Python's home-directory resolution and prints the validated marketplace name to usewhen constructing the install command. If the helper fails, stop. To read the name from a different marketplace file, pass the path directly: ```bashpython3 scripts/read_marketplace_name.py --marketplace-path <path-to-marketplace.json>``` 2. Update the plugin manifest to a single Codex cachebuster suffix: ```bashpython3 scripts/update_plugin_cachebuster.py \  <plugin-path>``` The helper validates the plugin name before changing the manifest. If validation fails, stop.Prefer the default helper behavior here. If you omit `--cachebuster`, the helper uses a UTCtimestamp down to seconds, which is the recommended path for routine local iteration. Only use a manual cachebuster override when the user explicitly asks for one or when a workflowoutside Codex depends on a specific token: ```bashpython3 scripts/update_plugin_cachebuster.py \  <plugin-path> \  --cachebuster local-20260519-184516``` 3. Reinstall from that marketplace name: ```bashcodex plugin add <plugin-name>@<marketplace-name-from-marketplace-json>``` The default personal marketplace is discovered implicitly from`~/.agents/plugins/marketplace.json`. You do not need `codex plugin marketplace add` for thatpath, and `codex plugin marketplace list` is not the right check for whether that defaultmarketplace exists. 4. If the plugin is not using the personal marketplace file, check which configured local   marketplace is actually surfacing that plugin: ```bashcodex plugin list``` If the plugin is not in the personal marketplace file, confirm which marketplace entry points atthe plugin source you are editing and make sure that marketplace is still local. If it is adifferent local marketplace, reinstall from that marketplace name instead of forcing the personalmarketplace flow. If it is not local, stop and help the user resolve the mismatch beforecontinuing. 5. If the plugin lives in a different confirmed local marketplace, substitute that marketplace   name: ```bashcodex plugin add <plugin-name>@<local-marketplace>``` 6. Prompt the user to use a new thread to try the updated plugin, so that Codex picks up new skills   and tools. ## Cachebuster Policy - Preserve the existing version prefix and replace only the suffix.- Treat the preserved prefix as everything before `+`.- Use the format: ```text<base-version>+codex.<cachebuster>``` Examples: - `0.1.0` → `0.1.0+codex.local-20260519-184516`- `0.1.0+codex.old-token` → `0.1.0+codex.local-20260519-184516`- `1.2.3-beta.1+codex.prev` → `1.2.3-beta.1+codex.local-20260519-184516`- `dev-build+other-tag` → `dev-build+codex.local-20260519-184516` Replace the existing Codex cachebuster instead of appending another one. Do not keep incrementingnumeric version components just to trigger reinstall behavior. ## Marketplace Rules - Marketplace manipulation should happen through commands, not by hand-editing `marketplace.json`  or `config.toml` during this update/reinstall flow.- Prefer the personal marketplace file for the default scaffolded flow.- Read the personal marketplace name with  `python3 scripts/read_marketplace_name.py` and use the printed value when constructing  `codex plugin add <plugin-name>@<marketplace-name>`.- For non-default marketplace files, use  `python3 scripts/read_marketplace_name.py --marketplace-path <path-to-marketplace.json>` to read  the name before constructing reinstall commands.- Do not tell the user to run `codex plugin marketplace add` for the default personal-marketplace  flow. That marketplace is discovered implicitly by Codex.- If the user specified a different marketplace path, make sure that marketplace is installed  before giving install or reinstall instructions. Non-default marketplace paths are not  discovered implicitly.- Use `codex plugin list` when the plugin lives in a different configured marketplace and you need  to confirm which marketplace is surfacing that plugin.- If a non-default local marketplace has not been configured yet, install it with  `codex plugin marketplace add <path-to-marketplace-root>` before telling the user to run  `codex plugin add <plugin-name>@<marketplace-name>`.- If the plugin is not in the personal marketplace file, confirm that the selected marketplace is  local before telling the user to reinstall from it.- If the selected marketplace is not local, stop and help the user resolve that mismatch rather  than pretending the normal local reinstall flow applies.- If the plugin source is not already the source referenced by the chosen marketplace entry, stop  and fix that first. This update flow does not rewrite marketplace entries. ## After Reinstall After reinstalling, prompt the user to start a new thread for testing. That is the safe boundary forpicking up the updated plugin and its MCP tools. 
Referenced from SKILL.md