Skip to content

feat(plugin-dev): unify plugin creation across runtimes with multi-format#252

Merged
amondnet merged 3 commits into
mainfrom
amondnet/plugin-creator
Jul 7, 2026
Merged

feat(plugin-dev): unify plugin creation across runtimes with multi-format#252
amondnet merged 3 commits into
mainfrom
amondnet/plugin-creator

Conversation

@amondnet

@amondnet amondnet commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Makes plugin-dev the 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

  • Add /plugin-dev:multi-format command — wraps the existing Codex/Antigravity/Cursor manifest generator so it can be invoked directly on any plugin directory.
  • Add plugin-authoring skill — teaches the "author once in Claude Code format → multi-format" workflow so the pattern is discoverable and reusable beyond this one command.
  • Chain /plugin-dev:scaffold into 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.
  • Bump plugin-dev to 1.1.0 and regenerate its own Codex/Cursor manifests to reflect the above.

Note on a pre-existing validation quirk: plugin-dev uses a root-level plugin.json (the Antigravity manifest). Since Claude Code also expects manifest content, but at .claude-plugin/plugin.json, running claude 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

  • PR title follows Conventional Commits
  • Tests added or updated, and the suite passes (bun run test)
  • Lint/format pass (bun run lint)
  • Documentation updated if behavior changed (README.md, CHANGELOG.md)
  • No breaking change, or a BREAKING CHANGE: note is included (none)

Summary by cubic

Unifies plugin creation across runtimes by making plugin-dev author-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

    • Added /plugin-dev:multi-format to generate Codex, Antigravity, and Cursor manifests, plus .agents/plugins/marketplace.json and .cursor-plugin/marketplace.json for local plugins.
    • Added plugin-authoring skill to teach the author-once → multi-format workflow and marketplace wiring.
    • Chained /plugin-dev:scaffold into the generator so fresh plugins work across all runtimes.
    • Bumped plugin-dev to 1.1.0 and regenerated its Codex/Cursor manifests.
  • Migration

    • Author only the Claude manifest; do not hand-edit generated manifests or marketplace files.
    • Add the plugin to .claude-plugin/marketplace.json before running /plugin-dev:multi-format, and scope commits to the intended plugin(s).
    • Run /plugin-dev:multi-format after scaffolding or edits to keep runtimes in sync.

Written for commit f48f841. Summary will update on new commits.

Summary by CodeRabbit

  • New Features

    • Added guidance for a new multi-format generation command that creates plugin manifests for multiple runtimes from a single source.
    • Introduced a new plugin-authoring workflow for creating and maintaining plugins across runtimes.
  • Documentation

    • Expanded plugin-dev docs with updated scaffolding steps, validation guidance, and multi-runtime manifest instructions.
    • Added changelog entry for the new release.
  • Chores

    • Updated plugin manifest versions to 1.1.0.

…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
@vercel

vercel Bot commented Jul 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
claude-code-plugins Ready Ready Preview, Comment Jul 7, 2026 3:55am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR documents a new /plugin-dev:multi-format command for generating Codex/Antigravity/Cursor manifests from a Claude Code source of truth, adds a plugin-authoring skill, updates scaffold and README workflow docs, adds a changelog entry, and bumps plugin manifest versions to 1.1.0.

Changes

Plugin-dev multi-format documentation and version bump

Layer / File(s) Summary
multi-format command documentation
plugins/plugin-dev/commands/multi-format.md
New doc describing generator invocation, per-runtime outputs, diff scoping, and validation guidance.
Scaffold command workflow updates
plugins/plugin-dev/commands/scaffold.md
Scaffold now treats Claude Code as source of truth, adds a manifest-generation step, and reorders after-scaffolding checklist.
Plugin-authoring skill documentation
plugins/plugin-dev/skills/plugin-authoring/SKILL.md
New skill doc detailing multi-runtime authoring workflow, companion files, prohibited edits, and related references.
README feature and workflow documentation
plugins/plugin-dev/README.md
Adds Multi-Runtime Manifests feature bullet, command section, and reordered Development Workflow steps.
Changelog and version bumps
plugins/plugin-dev/CHANGELOG.md, plugins/plugin-dev/.codex-plugin/plugin.json, plugins/plugin-dev/.cursor-plugin/plugin.json, plugins/plugin-dev/plugin.json
Adds 1.1.0 changelog entry and bumps version fields across manifests.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • pleaseai/claude-code-plugins#240: Directly related as this PR's documentation references the Cursor-aware multi-format implementation and manifest generation introduced there.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: unifying plugin creation across runtimes via the multi-format workflow.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch amondnet/plugin-creator

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

🔍 Tessl Skill Review

plugins/plugin-dev/skills/plugin-authoring/SKILL.md

⚠️ Error: - Reviewing skill...
✘ Skill validation failed


To improve your score, point your agent at the Tessl optimization guide. Need help? Jump on our Discord.

Feedback

Report issues with this review at tesslio/skill-review, or send private feedback from your terminal with tessl feedback.

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Warning

Gemini encountered an error creating the review. You can try again by commenting /gemini review.

@amondnet
amondnet marked this pull request as ready for review July 7, 2026 03:20
@greptile-apps

greptile-apps Bot commented Jul 7, 2026

Copy link
Copy Markdown

Greptile Summary

This PR makes plugin-dev the single entry point for a "write once, run on four runtimes" plugin authoring workflow. It wires an existing multi-format generator into both a new /plugin-dev:multi-format command and a plugin-authoring skill, updates /plugin-dev:scaffold to chain into that generator, bumps the plugin to 1.1.0, and regenerates its own Codex/Cursor manifests.

  • New /plugin-dev:multi-format command (commands/multi-format.md) — documents how to run bun scripts/cli.ts multi-format, scope the diff, and validate results; includes a prominent warning to wire the marketplace entry before running for new plugins.
  • New plugin-authoring skill (skills/plugin-authoring/SKILL.md) — distills the author-once → multi-format workflow into a reusable skill, covering the root-level plugin.json special case and companion files needed for new plugins.
  • Updated scaffold.md Step 10 — integrates marketplace wiring (before the generator run) and multi-format generation into the scaffold flow, consolidating what had been a duplicated generator invocation.

Confidence Score: 5/5

This 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

Filename Overview
plugins/plugin-dev/commands/multi-format.md New command file that documents the multi-format generator workflow; clear, well-structured, and addresses the marketplace-entry-ordering requirement for new plugins.
plugins/plugin-dev/skills/plugin-authoring/SKILL.md New skill file teaching the author-once → multi-format workflow; covers root-level plugin.json special case, companion files for new plugins, and a clear "what NOT to do" section.
plugins/plugin-dev/commands/scaffold.md Step 10 added to wire marketplace entry before generator run, correctly ordering marketplace wiring ahead of multi-format execution and removing the previously flagged duplicate generator invocation.
plugins/plugin-dev/README.md New /plugin-dev:multi-format section added and workflow steps renumbered to include the generate step; consistent with the new command and skill documentation.
plugins/plugin-dev/CHANGELOG.md 1.1.0 changelog entry correctly documents all additions and changes introduced by this PR.

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
Loading
%%{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
Loading

Reviews (2): Last reviewed commit: "chore: update agent memory" | Re-trigger Greptile

Comment thread plugins/plugin-dev/commands/multi-format.md Outdated
Comment thread plugins/plugin-dev/commands/scaffold.md Outdated
Comment thread plugins/plugin-dev/commands/scaffold.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
plugins/plugin-dev/commands/scaffold.md (1)

201-205: 📐 Maintainability & Code Quality | 🔵 Trivial

Keep the root-manifest exception scoped to legacy plugins.

This section is about scaffolding new plugins, but it currently makes root plugin.json sound like a normal choice. New plugins should still start with .claude-plugin/plugin.json; mention root plugin.json only 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

📥 Commits

Reviewing files that changed from the base of the PR and between ca50a8a and 455b260.

📒 Files selected for processing (8)
  • plugins/plugin-dev/.codex-plugin/plugin.json
  • plugins/plugin-dev/.cursor-plugin/plugin.json
  • plugins/plugin-dev/CHANGELOG.md
  • plugins/plugin-dev/README.md
  • plugins/plugin-dev/commands/multi-format.md
  • plugins/plugin-dev/commands/scaffold.md
  • plugins/plugin-dev/plugin.json
  • plugins/plugin-dev/skills/plugin-authoring/SKILL.md

Comment thread plugins/plugin-dev/skills/plugin-authoring/SKILL.md

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 to marketplace.json; because generateMultiFormat() depends on marketplace metadata like category, 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
Loading

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread plugins/plugin-dev/commands/multi-format.md
@amondnet
amondnet merged commit 5fc454e into main Jul 7, 2026
13 checks passed
@amondnet
amondnet deleted the amondnet/plugin-creator branch July 7, 2026 04:00
@sonarqubecloud

sonarqubecloud Bot commented Jul 7, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant