feat: add claude and codex plugins

Merged
KR
13d ago
+3318-34

The e2e skills install only through npx skills add or e2e init, so Codex and Claude Code have no plugin to install them from, and nothing to submit to either app's plugin directory.

  • One plugin package, plugins/e2e/, holds both skills (e2e, create-verification-skill). It ships no MCP server; the server still comes from the project's e2e dependency.
  • Both apps install it from this repo: .agents/plugins/marketplace.json (Codex) and .claude-plugin/marketplace.json (Claude) point at ./plugins/e2e. Install it as e2e@e2e.
  • skills/ is still where the skills are written. scripts/sync-plugin.ts copies them into the plugin, prunes copies whose source is gone, writes LICENSE and the Claude manifest from the Codex one, and sets both manifests' version to the runner's.
  • pnpm plugins:check is part of pnpm check and spec.yml, so a skill edit that wasn't synced fails CI.
  • version-packages runs the sync. Claude caches installs by version, so the plugin needs a new version with every release or installs never update.
  • Written by hand in the plugin: the Codex manifest apart from version, assets/, and each skill's agents/openai.yaml (Codex UI metadata).
  • The example skill under create-verification-skill now has SKILL.example.md as its entry point, so neither app picks it up as a third skill.
flowchart LR
  S[skills/] -->|pnpm plugins:sync| P[plugins/e2e/skills/]
  C[.codex-plugin/plugin.json] -->|sync| CL[.claude-plugin/plugin.json]
  R[packages/e2e version] -->|sync| C
  P --> M1[.agents/plugins/marketplace.json]
  P --> M2[.claude-plugin/marketplace.json]

Skill and docs changes that come with it:

  • The Claude Code MCP command is now claude mcp add --scope project e2e -- npx e2e mcp everywhere: docs, skill, e2e mcp --help, and init's hint. A user-scope server runs npx e2e mcp in whatever directory Claude starts in.
  • Codex MCP setup is documented as a project .codex/config.toml entry (docs/reference/mcp.mdx, docs/coding-agents.mdx, skills/e2e/references/mcp.md). init does not register Codex.
  • The skill points to npx e2e guide <topic> when the plugin's copy and the installed package differ, and runs e2e feedback --dry-run, then sends only once the user agrees.

Verified

Ran it locally: yes

  • claude plugin validate ./plugins/e2e and claude plugin validate ./ pass.
  • Claude Code with an empty config directory: claude plugin marketplace add ./ and claude plugin install e2e@e2e succeed, and the installed skills match plugins/e2e/skills/. A claude -p --plugin-dir ./plugins/e2e session lists /e2e:e2e and /e2e:create-verification-skill, loads e2e:e2e, reads references/mcp.md from the plugin, and quotes the project-scope command.
  • Codex 0.162.1 with an empty CODEX_HOME: codex plugin marketplace add ./ and codex plugin add e2e@e2e succeed. codex plugin list shows e2e@e2e installed, enabled 0.20.0. The app-server's skills/list returns exactly e2e:e2e and e2e:create-verification-skill with their display names and icons. A model session was not run: the OpenAI account was out of quota.
  • npx skills add . --list, with and without --full-depth, still offers only skills/*; the plugin copies do not show up as duplicates.
  • scripts/sync-plugin.ts on a scratch copy: deleting a skill and a reference makes --check exit 1 and list the stale files; sync removes them with no empty directories left; a new skill without agents/openai.yaml fails the check.
  • The built e2e mcp --help prints claude mcp add --scope project e2e -- npx e2e mcp.
  • Docs pages render in mint dev: the plugin install accordion on /coding-agents and the Codex block on /reference/mcp.

Written by Claude Opus 5.5 in Claude Code (T3 Code), reviewed by Claude Fable.