feat(plugin-dev): unify plugin creation across runtimes with multi-format#252
Conversation
…across runtimes - add /plugin-dev:multi-format command wrapping the Codex/Antigravity/Cursor manifest generator - add plugin-authoring skill teaching the author-once → multi-format workflow - chain /plugin-dev:scaffold into the multi-format generator so a new plugin loads in all four runtimes - bump plugin-dev to 1.1.0 and regenerate Codex/Cursor manifests
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughThis PR documents a new ChangesPlugin-dev multi-format documentation and version bump
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🔍 Tessl Skill Review
|
Up to standards ✅🟢 Issues
|
|
Warning Gemini encountered an error creating the review. You can try again by commenting |
Greptile SummaryThis PR makes
Confidence Score: 5/5This PR is safe to merge — all changes are documentation, skill definitions, command markdown files, and version bumps with no executable logic. The change is entirely documentation and declarative plugin manifests. The new command and skill files give correct, ordered instructions (marketplace entry before generator run), the duplicate generator invocation flagged in prior review has been resolved, and the three version bumps are consistent across all manifest files. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Author plugin in Claude Code format\n.claude-plugin/plugin.json] --> B[Register in\n.claude-plugin/marketplace.json]
B --> C[Run bun scripts/cli.ts multi-format\n via /plugin-dev:multi-format]
C --> D[.codex-plugin/plugin.json\n+ .mcp.json]
C --> E[root plugin.json\n+ mcp_config.json\n+ hooks.json\nAntigravity]
C --> F[.cursor-plugin/plugin.json]
C --> G[.agents/plugins/marketplace.json\nCodex marketplace]
C --> H[.cursor-plugin/marketplace.json\nCursor marketplace]
C --> I{Unrelated drift\nin diff?}
I -->|Yes| J[git restore\nunchanged plugins]
I -->|No| K[Validate & commit]
J --> K
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[Author plugin in Claude Code format\n.claude-plugin/plugin.json] --> B[Register in\n.claude-plugin/marketplace.json]
B --> C[Run bun scripts/cli.ts multi-format\n via /plugin-dev:multi-format]
C --> D[.codex-plugin/plugin.json\n+ .mcp.json]
C --> E[root plugin.json\n+ mcp_config.json\n+ hooks.json\nAntigravity]
C --> F[.cursor-plugin/plugin.json]
C --> G[.agents/plugins/marketplace.json\nCodex marketplace]
C --> H[.cursor-plugin/marketplace.json\nCursor marketplace]
C --> I{Unrelated drift\nin diff?}
I -->|Yes| J[git restore\nunchanged plugins]
I -->|No| K[Validate & commit]
J --> K
Reviews (2): Last reviewed commit: "chore: update agent memory" | Re-trigger Greptile |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
plugins/plugin-dev/commands/scaffold.md (1)
201-205: 📐 Maintainability & Code Quality | 🔵 TrivialKeep the root-manifest exception scoped to legacy plugins.
This section is about scaffolding new plugins, but it currently makes root
plugin.jsonsound like a normal choice. New plugins should still start with.claude-plugin/plugin.json; mention rootplugin.jsononly as a legacy exception.Suggested wording tweak
-The plugin is authored in Claude Code format (`.claude-plugin/plugin.json`, or a root-level -`plugin.json` for plugins that also serve as the Antigravity manifest). +The plugin is authored in Claude Code format (`.claude-plugin/plugin.json`); only legacy +exceptions such as `plugin-dev` and `bun` use a root-level `plugin.json`.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@plugins/plugin-dev/commands/scaffold.md` around lines 201 - 205, Update the “Generate Multi-Runtime Manifests” guidance in scaffold.md so new plugins are directed to use .claude-plugin/plugin.json as the default source of truth, and mention root-level plugin.json only as a legacy Antigravity-manifest exception. Keep the wording scoped to the existing manifest-scaffolding section and adjust the description around the manifest path choice accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/plugin-dev/skills/plugin-authoring/SKILL.md`:
- Around line 1-4: Update the SKILL.md frontmatter so the skill name uses gerund
form and add the required allowed-tools entry. Adjust the metadata in the Plugin
Authoring (Multi-Runtime) skill header to follow the repo convention for skills
under plugins/*/skills/*/SKILL.md, keeping the existing description intact while
fixing the frontmatter fields.
---
Nitpick comments:
In `@plugins/plugin-dev/commands/scaffold.md`:
- Around line 201-205: Update the “Generate Multi-Runtime Manifests” guidance in
scaffold.md so new plugins are directed to use .claude-plugin/plugin.json as the
default source of truth, and mention root-level plugin.json only as a legacy
Antigravity-manifest exception. Keep the wording scoped to the existing
manifest-scaffolding section and adjust the description around the manifest path
choice accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 62122f19-53e6-47c8-8419-95a911b6d626
📒 Files selected for processing (8)
plugins/plugin-dev/.codex-plugin/plugin.jsonplugins/plugin-dev/.cursor-plugin/plugin.jsonplugins/plugin-dev/CHANGELOG.mdplugins/plugin-dev/README.mdplugins/plugin-dev/commands/multi-format.mdplugins/plugin-dev/commands/scaffold.mdplugins/plugin-dev/plugin.jsonplugins/plugin-dev/skills/plugin-authoring/SKILL.md
There was a problem hiding this comment.
1 issue found across 8 files
Confidence score: 3/5
- In
plugins/plugin-dev/commands/multi-format.md, step 10 runs the generator before the new plugin is added tomarketplace.json; becausegenerateMultiFormat()depends on marketplace metadata likecategory, a first-time plugin run can fail or produce incomplete output for new plugin authors—reorder the steps so marketplace wiring happens before generation (or add a guard/fallback) before merging.
Architecture diagram
sequenceDiagram
participant User as Developer
participant ClaudeCode as Claude Code
participant PluginDev as plugin-dev
participant Generator as Multi-Format Generator
participant FileSystem as File System
Note over User,FileSystem: PR introduces unified author-once workflow
alt New Plugin via /plugin-dev:scaffold
User->>ClaudeCode: /plugin-dev:scaffold <name>
ClaudeCode->>PluginDev: Execute scaffold command
PluginDev->>FileSystem: Create Claude Code manifest & structure
FileSystem-->>PluginDev: Files written
Note over PluginDev,Generator: Chained: scaffold triggers multi-format
else Existing Plugin via /plugin-dev:multi-format
User->>ClaudeCode: /plugin-dev:multi-format [plugin]
ClaudeCode->>PluginDev: Execute multi-format command
end
PluginDev->>Generator: Run "bun scripts/cli.ts multi-format"
Generator->>FileSystem: Read all local plugin Claude manifests
FileSystem-->>Generator: Manifest data for each plugin
Note over Generator,FileSystem: Generates per plugin (only changed files written)
Generator->>FileSystem: Write .codex-plugin/plugin.json (+ .mcp.json if MCP)
Generator->>FileSystem: Write root plugin.json + mcp_config.json + hooks.json (Antigravity)
Generator->>FileSystem: Write .cursor-plugin/plugin.json
Generator->>FileSystem: Write .agents/plugins/marketplace.json (Codex)
Generator->>FileSystem: Write .cursor-plugin/marketplace.json (Cursor)
FileSystem-->>Generator: Write confirmations (wrote/up-to-date/skipped)
Generator-->>PluginDev: Result summary
PluginDev-->>ClaudeCode: Completion status
Note over User,ClaudeCode: Developer scopes the diff to intended plugin(s)
ClaudeCode-->>User: "Plugin manifests regenerated. Git restore unrelated files."
opt Validation
User->>ClaudeCode: /plugin-dev:validate
ClaudeCode->>PluginDev: Validate structure & manifests
PluginDev->>FileSystem: Check files
FileSystem-->>PluginDev: Validation results
PluginDev-->>ClaudeCode: Status
ClaudeCode-->>User: "All valid / Warnings (see pre-existing quirk)"
end
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
|



Summary
Makes
plugin-devthe entry point for a unified, Claude-Code-centric plugin authoring workflow: author a plugin once in Claude Code's format, then run a multi-format generator to produce the Codex, Antigravity, and Cursor manifests from it. Previously this generator existed but wasn't surfaced as part of the authoring flow — this PR wires it in as a command and teaches it as a skill.Changes
/plugin-dev:multi-formatcommand — wraps the existing Codex/Antigravity/Cursor manifest generator so it can be invoked directly on any plugin directory.plugin-authoringskill — teaches the "author once in Claude Code format → multi-format" workflow so the pattern is discoverable and reusable beyond this one command./plugin-dev:scaffoldinto the multi-format generator — a newly scaffolded plugin is now immediately loadable in all four runtimes (Claude Code, Codex, Antigravity, Cursor) instead of Claude Code only.plugin-devto 1.1.0 and regenerate its own Codex/Cursor manifests to reflect the above.Note on a pre-existing validation quirk:
plugin-devuses a root-levelplugin.json(the Antigravity manifest). Since Claude Code also expects manifest content, but at.claude-plugin/plugin.json, runningclaude plugin validate plugins/plugin-dev/reports a directory-level error due to this collision. Validating the manifest file directly (claude plugin validate plugins/plugin-dev/.claude-plugin/plugin.json) passes cleanly. This condition predates this PR and is not introduced by it.Related issue
N/A — no linked issue.
Checklist
bun run test)bun run lint)BREAKING CHANGE:note is included (none)Summary by cubic
Unifies plugin creation across runtimes by making
plugin-devauthor-once in Claude Code format and generating Codex, Antigravity, Cursor, and local marketplace files. New and scaffolded plugins now load in all four runtimes with one flow.New Features
/plugin-dev:multi-formatto generate Codex, Antigravity, and Cursor manifests, plus.agents/plugins/marketplace.jsonand.cursor-plugin/marketplace.jsonfor local plugins.plugin-authoringskill to teach the author-once → multi-format workflow and marketplace wiring./plugin-dev:scaffoldinto the generator so fresh plugins work across all runtimes.plugin-devto1.1.0and regenerated its Codex/Cursor manifests.Migration
.claude-plugin/marketplace.jsonbefore running/plugin-dev:multi-format, and scope commits to the intended plugin(s)./plugin-dev:multi-formatafter scaffolding or edits to keep runtimes in sync.Written for commit f48f841. Summary will update on new commits.
Summary by CodeRabbit
New Features
Documentation
Chores