Files
Eddie 9e1ca6496b feat(codex): add Codex CLI native marketplace support for all 142 plugins (#83)
Add .codex-plugin/plugin.json manifests for every plugin (derived from
.claude-plugin/ manifests) and .agents/plugins/marketplace.json (Codex's
standard marketplace location). Codex CLI users can now install plugins
natively via Added marketplace `claude-skills` from https://github.com/secondsky/claude-skills.git.
Installed marketplace root: /Users/eddie/.codex/.tmp/marketplaces/claude-skills.

New files:
- scripts/generate-codex-manifests.sh — derives Codex manifests from Claude
  manifests (Claude remains source of truth)
- schemas/codex-plugin.schema.json + codex-marketplace.schema.json — AJV
  validation for generated Codex artifacts
- 142 × .codex-plugin/plugin.json — one per plugin
- .agents/plugins/marketplace.json — Codex marketplace catalog

Changed:
- scripts/sync-plugins.sh — syncs .codex-plugin/ version in lockstep pass
- scripts/generate-marketplace.sh — calls generate-codex-manifests.sh after
  regenerating the Claude marketplace
- scripts/validate-json-schemas.sh — validates Codex schemas alongside Claude
- package.json — added validate:codex + generate:codex scripts
- README/CHANGELOG/CLAUDE.md/PROJECT_STRUCTURE.md — Codex CLI now ✅ Native
- Version bump 3.6.2 → 3.6.3 (all 142 plugins + both marketplaces + package.json)

Not carried into Codex: commands/ and agents/ arrays (no Codex equivalent;
use Codex /import for that). mcpServers carried through where present (3 nuxt
plugins).

Fixes stale delegate-my-work/.codex-plugin/plugin.json (was 3.4.0).
2026-08-06 17:30:58 +02:00

130 lines
4.0 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://github.com/secondsky/claude-skills/schemas/codex-plugin.schema.json",
"title": "Codex CLI Plugin Schema",
"description": "JSON schema for validating .codex-plugin/plugin.json files. Derived from .claude-plugin/plugin.json by generate-codex-manifests.sh. Based on the OpenAI Codex CLI plugin specification.",
"type": "object",
"required": ["name", "version", "description", "author"],
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z0-9-]+$",
"description": "Plugin name in kebab-case (REQUIRED)."
},
"version": {
"type": "string",
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$",
"description": "Semantic version (major.minor.patch). Must be valid semver."
},
"description": {
"type": "string",
"minLength": 10,
"maxLength": 500,
"description": "Brief explanation of plugin purpose."
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Author name (REQUIRED)."
},
"email": {
"type": "string",
"format": "email",
"description": "Author email."
},
"url": {
"type": "string",
"format": "uri",
"description": "Author URL."
}
},
"required": ["name"],
"additionalProperties": false
},
"license": {
"type": "string",
"minLength": 1,
"description": "License identifier (e.g. MIT, Apache-2.0)."
},
"repository": {
"type": "string",
"description": "Source code URL."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"uniqueItems": true,
"description": "Discovery tags."
},
"skills": {
"type": "string",
"description": "Path to skills directory (Codex auto-discovers SKILL.md files)."
},
"mcpServers": {
"description": "MCP server config — path string, array of paths, or inline config.",
"oneOf": [
{ "type": "string" },
{ "type": "array", "items": { "type": "string" } },
{ "type": "object" }
]
},
"interface": {
"type": "object",
"description": "UX metadata for the Codex plugin browser.",
"properties": {
"displayName": {
"type": "string",
"minLength": 1,
"description": "Human-readable plugin name."
},
"shortDescription": {
"type": "string",
"description": "One-line summary (shown in list views)."
},
"longDescription": {
"type": "string",
"description": "Full description (shown in detail view)."
},
"developerName": {
"type": "string",
"description": "Developer/organization name."
},
"category": {
"type": "string",
"description": "Plugin category (freeform string)."
},
"capabilities": {
"type": "array",
"items": { "type": "string" },
"description": "What the plugin can do (e.g. Read, Write, Interactive)."
},
"defaultPrompt": {
"type": "array",
"items": { "type": "string", "maxLength": 128 },
"maxItems": 3,
"description": "Suggested starter prompts (max 3, 128 chars each)."
},
"websiteURL": { "type": "string", "format": "uri" },
"privacyPolicyURL": { "type": "string", "format": "uri" },
"termsOfServiceURL": { "type": "string", "format": "uri" },
"brandColor": { "type": "string" },
"logo": { "type": "string" },
"logoDark": { "type": "string" },
"screenshots": {
"type": "array",
"items": { "type": "string" }
}
},
"additionalProperties": true
}
}
}