feat: package the boxel-cli plugin for OpenAI Codex - #5645
Conversation
Add a .codex-plugin/plugin.json manifest generated from the Claude Code manifest by build-plugin.ts, a repo-level Codex marketplace manifest at .agents/plugins/marketplace.json, and bump both plugin manifests together in the publish workflow. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…face block The README claimed the commands under commands/ were Claude Code-only. Codex does reach them: it converts a plugin's commands to skills at install time, named source-command-<name>. That conversion drops any command whose generated skill would exceed 4000 bytes, silently and with no warning, which leaves out the four largest — boxel-create-card, boxel-edit-template, boxel-sync-workspace, and distill-learnings. Restaging them as skills in this package would put the fix in the wrong layer. commands/ is imported from cardstack/boxel-skills, which owns the skill-versus-command split; this package copies that decision. They reach Codex when they are skills upstream, so the README records the gap and where it belongs instead. The Codex manifest also gains the interface block — display name, short and long description, category, site — so the plugin renders with its name rather than bare next to the curated plugins. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ad872da to
8468621
Compare
The workflow commands are being deleted upstream, so the README and the syncCodexManifest docstring no longer describe Codex's commands-to-skills conversion or which commands its size limit excluded. Codex plugins have no commands slot; skills/ is the whole surface. Also corrects the manual-install snippet: it symlinked each skill into ~/.agents/skills, and Codex does not follow symlinked skill directories, so nothing loaded. It copies now. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codex packaging is about skills; the README and the syncCodexManifest docstring no longer explain what Codex does or doesn't do with a commands directory. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 80275c343a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Packages the existing boxel-cli skill set for OpenAI Codex alongside the existing Claude Code plugin, aiming to keep manifests versioned and metadata-aligned while sharing the same skills/ directory.
Changes:
- Extend
pnpm build:pluginto also sync.codex-plugin/plugin.jsonfrom the Claude manifest. - Add Codex-facing marketplace manifest at
.agents/plugins/marketplace.jsonand document Codex installation/usage. - Update the publish workflow to bump the version in both Claude and Codex plugin manifests.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/boxel-cli/scripts/build-plugin.ts | Adds Codex manifest sync to the existing plugin skill synopsis generation script. |
| packages/boxel-cli/plugin/README.md | Updates plugin documentation to cover both Claude Code and OpenAI Codex installation/usage. |
| packages/boxel-cli/plugin/.codex-plugin/plugin.json | Introduces the Codex plugin manifest (generated/synced by build:plugin). |
| .github/workflows/boxel-cli-publish.yml | Versions Claude + Codex manifests together during automated publish. |
| .agents/plugins/marketplace.json | Adds Codex marketplace entry pointing at the existing plugin directory. |
Suppressed comments (1)
packages/boxel-cli/scripts/build-plugin.ts:243
- [Claude Code 🤖] The final status message still talks about “synopsis” even though this script can also update
plugin/.codex-plugin/plugin.json, so the output is misleading when the only change is the manifest sync.
console.log(
changed === 0
? 'Plugin synopsis already up to date.'
: `Plugin synopsis regenerated (${changed} file${changed === 1 ? '' : 's'} changed).`,
);
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Fail rather than silently mis-derive the Codex description: the regex replace was a no-op if the Claude description were reworded, which would have carried "Claude Code" into the Codex manifest. It now asserts the prefix and throws with the constant to update. Fill in the manifest fields the curated Codex plugins all carry — interface.capabilities, interface.defaultPrompt, and the marketplace entry's policy and category. Install works without them on 0.146.0, but they are documented fields and other ingestion paths may validate. Clarify the invocation naming: Codex namespaces the skills boxel-cli:<name> and invokes with $, while the /boxel-cli:<name> form in the tables is Claude Code's. Also drops "synopsis" from the build's final message, which now covers the manifest sync too. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codex reads the same SKILL.md format Claude Code does, so the existing skills work there unchanged — this packages them. A
.codex-plugin/plugin.jsonsits next to.claude-plugin/plugin.json, both pointing at the sameskills/directory, and a Codex marketplace manifest at.agents/plugins/marketplace.jsonmirrors the Claude one, so Codex users install the same way.pnpm build:plugingenerates the Codex manifest from the Claude one and the publish workflow versions both, so they can't drift. The manifest carries aninterfaceblock so the plugin renders with its name rather than bare.Verified against Codex 0.146.0 by installing from a local marketplace.