Skip to content

Add Codex plugin marketplace support - #47

Open
shaonrh wants to merge 1 commit into
quay:mainfrom
shaon:codex-plugin-support
Open

Add Codex plugin marketplace support#47
shaonrh wants to merge 1 commit into
quay:mainfrom
shaon:codex-plugin-support

Conversation

@shaonrh

@shaonrh shaonrh commented Jun 17, 2026

Copy link
Copy Markdown

No description provided.

@fullsend-ai-review

fullsend-ai-review Bot commented Jun 17, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 5:49 PM UTC · Completed 6:01 PM UTC
Commit: cf87d33 · View workflow run →

@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Walkthrough

Adds Codex plugin support to the ai-helpers repository by introducing .codex-plugin/plugin.json manifests for the dev, jira, and openshift-testing plugins and a new .agents/plugins/marketplace.json registry. Build and doc scripts are updated to resolve plugin metadata from .codex-plugin first with .claude-plugin fallback. Documentation across README, PLUGINS.md, and docs/data.json is updated to reflect both Codex and Claude Code installation paths.

Changes

Codex Plugin Integration

Layer / File(s) Summary
Codex plugin manifests and marketplace registry
.agents/plugins/marketplace.json, plugins/dev/.codex-plugin/plugin.json, plugins/jira/.codex-plugin/plugin.json, plugins/openshift-testing/.codex-plugin/plugin.json
Adds per-plugin .codex-plugin/plugin.json manifests defining name, version, skills path, capabilities, and default prompts. Registers all three plugins in a new .agents/plugins/marketplace.json with installation: "AVAILABLE" and authentication: "ON_INSTALL" policies.
Script updates for dual plugin metadata discovery
scripts/build-website.py, scripts/generate_plugin_docs.py
build-website.py now loads the marketplace from .agents/plugins/marketplace.json with fallback to .claude-plugin/marketplace.json, handles source as string or object, and prefers .codex-plugin/plugin.json over .claude-plugin/plugin.json for each plugin. generate_plugin_docs.py applies the same discovery order change and updates the generated PLUGINS.md intro text.
Documentation and metadata updates
README.md, PLUGINS.md, docs/data.json, Makefile
README gains a Codex installation section, updated project structure diagram showing .agents/ and .codex-plugin/ directories, and a Codex subsection in the Adoption Guide. Plugin descriptions in docs/data.json are revised. PLUGINS.md intro and the Makefile header comment are reworded to use ai-helpers branding.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Makefile (1)

51-63: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Update new-plugin target to align with the new Codex plugin structure.

The new-plugin target creates only .claude-plugin/ directories and registers plugins in .claude-plugin/marketplace.json (line 57), but this PR introduces .codex-plugin/plugin.json manifests and .agents/plugins/marketplace.json as the new marketplace registry. Developers using make new-plugin will create plugins that don't follow the new structure being established by this PR.

Consider updating the target to:

  1. Create both .codex-plugin/ and .claude-plugin/ directories for dual-agent support, or
  2. Update to create only .codex-plugin/ and register in .agents/plugins/marketplace.json, or
  3. Document in the Makefile which plugin structure is current and update the target accordingly.
🤖 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 `@Makefile` around lines 51 - 63, The new-plugin target creates plugins using
the old .claude-plugin/ structure and registers them in
.claude-plugin/marketplace.json, but the PR introduces a new .codex-plugin/
structure with .agents/plugins/marketplace.json as the marketplace registry.
Update the new-plugin target to align with the new plugin structure by either
creating both .codex-plugin/ and .claude-plugin/ directories for backwards
compatibility, or migrate entirely to create only .codex-plugin/ and register in
.agents/plugins/marketplace.json. Ensure the mkdir command creates the
appropriate directories, the plugin.json is written to the correct location, and
the Python script updates the correct marketplace.json file.
🧹 Nitpick comments (1)
.agents/plugins/marketplace.json (1)

1-44: 💤 Low value

Schema deviation from marketplace template.

The marketplace config deviates from the template schema in .claude-plugin/marketplace.json.template in three ways:

  1. Missing owner.name field: The template defines owner.name (template lines 3-4), but this file uses interface.displayName instead (lines 3-5). The build script has a fallback chain that handles this gracefully (build-website.py:170-174), so this works but differs from the documented contract.

  2. Plugin source format: Each plugin uses an object format {"source": "local", "path": "..."} (lines 9-12, 21-24, 33-36), whereas the template shows a simple string path "./plugins/example-plugin". The build script correctly handles both (build-website.py:182-185), but document whether the object format is the new Codex standard.

  3. Missing per-plugin description: The template includes a description field for each plugin entry (template line 11), but this file omits it. The build script falls back to reading descriptions from each plugin's plugin.json (build-website.py:210), so metadata is not lost, but the schema is inconsistent.

Consider either updating the template to match the new Codex schema or adding the missing fields for consistency. The current implementation is functional due to robust fallback logic.

🤖 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 @.agents/plugins/marketplace.json around lines 1 - 44, Update the
marketplace.json file to align with the template schema by making three changes:
First, replace the interface.displayName field with an owner object containing a
name field matching the template structure. Second, simplify the source field in
each plugin entry (dev, jira, and openshift-testing) from the object format with
source and path properties to a simple string path value. Third, add a
description field to each of the three plugin entries to match the template
definition. These changes ensure consistency with the documented schema while
maintaining the metadata currently provided through fallback mechanisms.
🤖 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 `@docs/data.json`:
- Line 7: The description property in the data.json file enumerates various
skills in a comma-separated list but omits "debug-playwright" even though this
skill is defined as a separate entry elsewhere in the file. Add
"debug-playwright" to the skill enumeration in the description string to
maintain consistency between the documentation and the actual skill definitions
in the JSON structure.

---

Outside diff comments:
In `@Makefile`:
- Around line 51-63: The new-plugin target creates plugins using the old
.claude-plugin/ structure and registers them in .claude-plugin/marketplace.json,
but the PR introduces a new .codex-plugin/ structure with
.agents/plugins/marketplace.json as the marketplace registry. Update the
new-plugin target to align with the new plugin structure by either creating both
.codex-plugin/ and .claude-plugin/ directories for backwards compatibility, or
migrate entirely to create only .codex-plugin/ and register in
.agents/plugins/marketplace.json. Ensure the mkdir command creates the
appropriate directories, the plugin.json is written to the correct location, and
the Python script updates the correct marketplace.json file.

---

Nitpick comments:
In @.agents/plugins/marketplace.json:
- Around line 1-44: Update the marketplace.json file to align with the template
schema by making three changes: First, replace the interface.displayName field
with an owner object containing a name field matching the template structure.
Second, simplify the source field in each plugin entry (dev, jira, and
openshift-testing) from the object format with source and path properties to a
simple string path value. Third, add a description field to each of the three
plugin entries to match the template definition. These changes ensure
consistency with the documented schema while maintaining the metadata currently
provided through fallback mechanisms.
🪄 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: Organization UI

Review profile: CHILL

Plan: Enterprise

Run ID: 781fc797-8e96-4633-a481-12ed2b6bd478

📥 Commits

Reviewing files that changed from the base of the PR and between a64a73e and cf87d33.

📒 Files selected for processing (10)
  • .agents/plugins/marketplace.json
  • Makefile
  • PLUGINS.md
  • README.md
  • docs/data.json
  • plugins/dev/.codex-plugin/plugin.json
  • plugins/jira/.codex-plugin/plugin.json
  • plugins/openshift-testing/.codex-plugin/plugin.json
  • scripts/build-website.py
  • scripts/generate_plugin_docs.py
📜 Review details
🔇 Additional comments (18)
plugins/dev/.codex-plugin/plugin.json (1)

1-27: LGTM!

plugins/jira/.codex-plugin/plugin.json (1)

1-26: LGTM!

plugins/openshift-testing/.codex-plugin/plugin.json (1)

1-26: LGTM!

scripts/build-website.py (5)

163-165: LGTM!


170-174: LGTM!


182-185: LGTM!


188-190: LGTM!


210-210: LGTM!

scripts/generate_plugin_docs.py (2)

79-81: LGTM!


149-149: LGTM!

README.md (3)

139-165: LGTM!


169-178: LGTM!


28-44: Codex CLI command syntax is correct.

The command codex plugin marketplace add . referenced in line 37 is the valid syntax for adding a local plugin marketplace to Codex using the current directory shorthand.

PLUGINS.md (1)

3-3: LGTM!

docs/data.json (3)

3-3: LGTM!


86-86: LGTM!


146-146: LGTM!

Makefile (1)

1-1: LGTM!

Comment thread docs/data.json
{
"name": "dev",
"description": "Ralph Loop development lifecycle: start, code, pr, poll, ci, backport, work",
"description": "Ralph Loop development lifecycle: ticket assignment through merge-ready PR. Includes start, code, pr, poll, ci, backport, work, grill-with-docs, to-prd, to-issues, and handoff.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add "debug-playwright" to the skill list in the description.

The description lists skills but omits "debug-playwright", which is defined as a skill at lines 34-37. For consistency and discoverability, include it in the enumeration.

📝 Suggested fix
-      "description": "Ralph Loop development lifecycle: ticket assignment through merge-ready PR. Includes start, code, pr, poll, ci, backport, work, grill-with-docs, to-prd, to-issues, and handoff.",
+      "description": "Ralph Loop development lifecycle: ticket assignment through merge-ready PR. Includes start, code, pr, poll, ci, backport, work, grill-with-docs, to-prd, to-issues, handoff, and debug-playwright.",
🤖 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 `@docs/data.json` at line 7, The description property in the data.json file
enumerates various skills in a comma-separated list but omits "debug-playwright"
even though this skill is defined as a separate entry elsewhere in the file. Add
"debug-playwright" to the skill enumeration in the description string to
maintain consistency between the documentation and the actual skill definitions
in the JSON structure.

Comment thread README.md
## Installation

### Via Lola (recommended)
### Via Codex Plugin

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

do we want to keep the instructions for Lola?

@bcaton85 bcaton85 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

approved, minor comment

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

High

  • [protected-path] scripts/build-website.py, scripts/generate_plugin_docs.py — These files are under scripts/, a protected path requiring human approval. The PR has no linked issue and no PR body explaining why these governance/infrastructure files are being modified. Human review of these changes is required regardless of other findings.
    Remediation: Link an issue to this PR that documents the rationale for modifying scripts under protected paths, or add a PR description explaining the changes.

Medium

  • [logic-error] scripts/build-website.py:163 — The new .agents/plugins/marketplace.json has no owner key. The fallback logic resolves to interface.displayName"Quay AI Helpers", silently changing the website data owner field from "quay" (old format) to "Quay AI Helpers". This appears intentional (consistent with docs/data.json change) but should be confirmed.
    Remediation: Verify the owner value change is intentional. If it should remain "quay", add an explicit owner field to .agents/plugins/marketplace.json.

  • [architectural-misalignment] .agents/plugins/marketplace.json — Enhancement 001 (draft) establishes a dual-distribution model (Claude native + Lola). This PR introduces a third distribution format (Codex) without updating the enhancement document to explain how it fits.
    Remediation: Update Enhancement 001 to document Codex's role in the distribution model.

  • [scope-creep] README.md — The README changes reposition the project from Claude Code-specific to multi-agent, promote Codex as the primary installation method, and relabel Lola as secondary. This goes beyond adding Codex support and changes the project's identity.
    Remediation: Document the repositioning decision in a linked issue, or limit README changes to adding Codex as an additional option without demoting Lola.

  • [naming-inconsistency] .agents/plugins/marketplace.json — Two marketplace.json files now exist with different schemas (.claude-plugin/marketplace.json with owner.name / string source, and .agents/plugins/marketplace.json with interface.displayName / nested source). The relationship between them is undocumented.
    Remediation: Document the migration path or add comments explaining which file serves which platform.

  • [stale-path-reference] enhancements/001-workflow-architecture.md:63 — References .claude-plugin/plugin.json as the plugin manifest location (lines 63, 93, 99, 105, 110). While .claude-plugin files still exist, the PR positions .codex-plugin as the primary format. The enhancement should mention both.
    Remediation: Update Enhancement 001 to reference both .claude-plugin and .codex-plugin formats.

  • [stale-reference] Makefile:51 — The new-plugin target creates only .claude-plugin/plugin.json and updates only .claude-plugin/marketplace.json. New plugins created via make new-plugin will lack Codex manifests.
    Remediation: Update the new-plugin target to also create .codex-plugin/plugin.json and update .agents/plugins/marketplace.json.

  • [stale-reference] scripts/apply-branding.py:102 — Hardcodes .claude-plugin/marketplace.json and plugins/example-plugin/.claude-plugin/plugin.json. Not updated for new Codex paths.
    Remediation: Update apply-branding.py to also target the new paths.

Low

  • [stale-reference] .skillsaw.yaml:8 — Linter comment references .claude-plugin/plugin.json. The files still exist so the linter passes, but this may need updating if .claude-plugin is ever removed.
  • [error-handling-gap] scripts/build-website.py:175source['path'] uses bracket notation; a dict without path would raise KeyError.
  • [path-traversal] scripts/build-website.pysource.path from marketplace.json is joined with base_path without canonicalization. Low risk since the file is repo-controlled.
  • [missing-authorization] No linked issue for a non-trivial change (201 additions across 10 files). Process concern.
  • [metadata-completeness] .agents/plugins/marketplace.json — Plugin entries omit description fields present in the old marketplace format. Handled by build-website.py fallback.

Info

  • [documentation-style] README.md:28 — Three installation methods (Codex, Lola, Claude native) without guidance on when to use each.
  • [tier-validation] PR title understates the scope. Actual changes include new directory structure, new plugin format, build script updates, README repositioning, and branding changes.

@fullsend-ai-review fullsend-ai-review 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.

See the review comment for full details.

Comment thread scripts/build-website.py
# Get repository root (parent of scripts directory)
base_path = Path(__file__).parent.parent
marketplace_file = base_path / ".claude-plugin" / "marketplace.json"
marketplace_file = base_path / ".agents" / "plugins" / "marketplace.json"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

[medium] logic-error

The new .agents/plugins/marketplace.json has no 'owner' key. The fallback logic resolves owner to 'Quay AI Helpers' (from interface.displayName), silently changing the website data owner from 'quay' to 'Quay AI Helpers'.

Suggested fix: Verify the owner value change is intentional. If it should remain 'quay', add an explicit owner field to .agents/plugins/marketplace.json.

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

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants