Package the repo as an Agent Plugins plugin for ChatGPT and Codex - #24
Merged
Merged
Conversation
The Plugin Directory that ChatGPT and Codex share reads the vendor-neutral Agent Plugins format: a root plugin.json, with skills discovered from skills/. That is already this repo's layout, so one manifest makes the same commit installable in both ecosystems. Adds: - plugin.json, with OpenAI install-surface copy under extensions.com.openai. No version field, matching the repo's versionless convention; the schema makes it optional and hosts fall back to 1.0.0. - .agents/plugins/marketplace.json, so `codex plugin marketplace add owid/skills` resolves the repo itself as a source. - a make validate check of plugin.json against the published schema, which neither skills-ref nor `claude plugin validate` looks at. Nothing here submits to the public Plugin Directory; that needs identity verification, test cases and per-version review, and would collide with shipping on every commit. This only enables repo and local installs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The install section had grown around packaging formats rather than around the person reading it: Claude Code, then "ChatGPT and Codex" as one lump, then everything else. Someone using the ChatGPT app had to work out that a Codex CLI command was the step they needed, and someone using the Claude app found nothing at all — its apps don't read plugin marketplaces, they take one skill at a time as a zip. Now there is a routing table and a section per client: Claude Code, Codex, the ChatGPT app (developer mode, the Work switcher, and the workspace-marketplace route for reaching colleagues without it), and the Claude app (enable code execution, zip each skill folder, upload). Verified the zip layout the Claude app wants — `zip -r x.zip x` from inside skills/ puts SKILL.md exactly one level down, as its docs require. The Claude app runs skills in a sandbox rather than on your machine, so its prerequisites differ from the table above it; that is flagged as unverified rather than asserted. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
"Productivity" was a placeholder: it was the only value OpenAI's docs exemplified, and the PR flagged it as unverified because no published enumeration of categories exists. The categories in use are observable, though. Across the 180 plugins in the curated directory cached locally by the Codex CLI, eleven distinct values appear: Productivity, Developer Tools, Finance, Business & Operations, Data & Analytics, Communication, Education & Research, Creativity, Travel, Security and Other. (A twelfth, Engineering, shows up only in OpenAI's own bundled marketplace, so it may not be available to third parties.) Of those, the peer sets decide it. Data & Analytics is BI tooling you point at your own data — Hex, MotherDuck, Amplitude, Mixpanel, PostHog. Education & Research is published sources you go to for material — Zotero, Factiva, scite, policynote. Searching and citing a research publisher's charts belongs with the second group. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ChatGPT and Codex now share one Plugin Directory, and it reads the vendor-neutral Agent Plugins format: a root
plugin.json, with skills discovered fromskills/. That is already this repo's layout, so a single manifest makes the same commit installable in both ecosystems. This adds that manifest plus a repo-scoped catalog, socodex plugin marketplace add owid/skillsresolves this repo as a plugin source. No skill content changes.Skim — the whole diff is manifests and docs. The one thing worth a considered opinion is the note under "Decisions".
How it works
plugin.jsoncarries portable identity (name, description, author, license) at the root and OpenAI's install-surface copy underextensions.com.openai.interface— display name, categories, starter prompts. Skills need no registration there: the format discovers everything underskills/, and askillsdeclaration is explicitly ignored for packages that have a root manifest. So adding a skill still means editing exactly one list, the Claude one..agents/plugins/marketplace.jsonis the catalog entry pointing at the repo root (source.path: "./"). Without it the repo is a plugin but not a source, andcodex plugin marketplace add owid/skillshas nothing to resolve.Two deliberate omissions:
versionfield. The schema makes it optional and hosts fall back to1.0.0, so the repo's versionless convention survives intact rather than acquiring a semver counter nobody would remember to bump.main. This PR only enables repo and local installs, which have no gatekeeper.make validategains a fourth check:plugin.jsonagainst the published schema. Worth its own check because the schema setsadditionalProperties: false, so a typo'd key doesn't degrade — it makes the whole manifest unreadable — and neitherskills-refnorclaude plugin validatelooks at this file.Verified
Installed from this branch with the Codex CLI and confirmed all four skills land in the plugin cache:
Also verified the local-path route (a personal
~/.agents/plugins/marketplace.jsonpointing at a worktree) resolves — its paths turn out to be relative to$HOME, which the docs don't state.Not verified: the ChatGPT desktop app's own install UI, and
category: "Productivity"/capabilities: ["Read"]— those are the only values the docs exemplify, and I found no published enumeration to check them against. Both are cosmetic if wrong.Decisions worth a second look
Installing this way copies the whole repo into the user's plugin cache,
evals/included — the plugin root is the repo root, same as the existing Claude marketplace entry, so this is not a regression. Eval prose still cannot reach an agent's context (skills are read only fromskills/), but it does land on disk. If we'd rather it didn't, the fix is aplugins/owid/subdirectory with the skills inside, which changes both manifests and every install path in the README. I'd leave it, but it's a real call.README: one install route per client
A follow-up commit reorganises the install section around the reader rather than the packaging format. It now has a routing table and a section each for Claude Code, Codex, the ChatGPT app and the Claude app.
Two gaps that reorganising exposed, both now covered: someone using the ChatGPT app previously had to infer that a Codex CLI command was the step they needed, and had no pointer to developer mode, the Work switcher, or the workspace-marketplace route that lets an admin reach colleagues without it. And the Claude app had no route at all — its apps don't read plugin marketplaces, they take one skill at a time as a zip. Verified that
zip -r x.zip xfrom insideskills/produces the layout its docs require, withSKILL.mdone level down.The Claude app runs skills in a sandbox rather than on the reader's machine, so its prerequisites differ from the table above it. That is flagged as unverified rather than asserted.
Context for whoever picks this up
plugin.jsonis a bet on more than ChatGPT.🤖 Generated with Claude Code