Content
<div align="center">
# codex-plugins-for-claude-code
Run OpenAI's role-specific Codex plugins — Sales, Data Analytics,<br>
Product Design, and Financial Markets — natively in Claude Code.
[](LICENSE)
[](https://github.com/openai/role-specific-plugins)
[](#verification-status)
[](#verification-status)
</div>
```
/plugin marketplace add spacemata/codex-plugins-for-claude-code
/plugin install data-analytics@codex-plugins-for-claude-code
```
<p align="center">
<img src="docs/demo-wau-drop.png" alt="Line chart produced by the ported data-analytics plugin: mobile drove the entire WAU drop in the week of Jun 1, 2026" width="760">
</p>
<p align="center">
<em>Real output from the verification run: the ported data-analytics plugin diagnosing a planted metric drop in a synthetic dataset, end to end inside Claude Code — routed by its <code>index</code> skill, preflighted by <code>user-context</code>, charted via its static delivery path.</em>
</p>
This is an unofficial port of [openai/role-specific-plugins](https://github.com/openai/role-specific-plugins), converted to the Claude Code plugin layout and distributed as a Claude Code plugin marketplace. It is not affiliated with or endorsed by OpenAI. The upstream plugins are MIT-licensed; this port preserves the upstream copyright notice (see `LICENSE`) and is generated from upstream commit `ebf5795` by a deterministic conversion script.
## Install
In Claude Code:
```
/plugin marketplace add spacemata/codex-plugins-for-claude-code
/plugin install data-analytics@codex-plugins-for-claude-code
```
Or from the command line:
```bash
claude plugin marketplace add spacemata/codex-plugins-for-claude-code
claude plugin install data-analytics@codex-plugins-for-claude-code
```
Available plugins: `data-analytics`, `sales`, `product-design`, `financial-markets`. Each plugin is a set of interdependent skills built around a router skill (`index`) and a persistent-context skill (`user-context`); install whole plugins rather than copying individual skills.
`claude plugin validate` reports a warning per plugin about an unknown `interface` field. This is intentional: the field carries upstream display metadata that Claude Code documents as ignored at load time, and parts of the upstream tooling read it.
## Verification status
Every claim below corresponds to a check actually performed on this port (Claude Code 2.1.175, macOS). Anything not listed here has not been verified.
| Plugin | Skills | Verified | Not verified |
| --- | --- | --- | --- |
| data-analytics | 15 + 1 MCP server | Manifest validation; install; all skills discovered; `index` routing to a focused skill; `user-context` preflight execution and state persistence; end-to-end analysis on a synthetic CSV (correct root-cause diagnosis + annotated PNG chart); MCP server connects, lists 5 tools, and returns structured JSON on calls | Workflows against real warehouses/BI tools (BigQuery, Snowflake, Databricks, etc.) |
| sales | 20 | Manifest validation; install; all skills discovered; state scripts (init/preflight) run against the isolated state path | Domain workflows; `salesforce`/`hubspot`/`zoominfo` skills require those integrations and were not exercised |
| product-design | 11 | Manifest validation; install; all skills discovered; state scripts run | Domain workflows |
| financial-markets | 23 | Manifest validation; install; all skills discovered; state scripts run | Domain workflows; market-data-dependent skills were not exercised |
## What is different from upstream
All differences are mechanical patches applied by `scripts/port.mjs` (never hand-edits). Summary:
- Layout: each plugin gets a generated `.claude-plugin/plugin.json` derived from its `.codex-plugin/plugin.json` (`apps`, `mcpServers`, `skills` pointer fields dropped; everything else preserved). A `.claude-plugin/marketplace.json` is generated at the repo root.
- State isolation: Codex stores plugin state under `$CODEX_HOME` (default `~/.codex`). The port renames the variable to `CODEX_PORT_HOME` and moves the default to `~/.claude/codex-plugins-for-claude-code`, so it never reads or writes a real Codex installation's state. Verified on a machine with a live Codex install: `~/.codex` received zero writes.
- MCP config: the Data Analytics widget server path is anchored with `${CLAUDE_PLUGIN_ROOT}` so it resolves from the installed plugin location.
- Excluded files: `.app.json` (ChatGPT/Codex connector bindings), `.codex-plugin/` (replaced by the generated manifest), and `agents/openai.yaml` (Codex agent metadata). The one script that read `.app.json` at runtime is patched to treat its absence as "no connectors configured".
## Known platform differences (by design, not bugs)
- Connectors: in Codex these plugins bind to ChatGPT workspace connectors (Slack, Salesforce, Google Drive, ...). Claude Code has no equivalent; the skills' own guardrails make them stop and ask when a required source is unavailable. Bring your own MCP servers for equivalent sources.
- Widgets: the Data Analytics MCP server is built for MCP Apps (inline interactive charts in Codex/ChatGPT). Claude Code does not render that UI; the tools still work and return structured JSON, and the skills' static delivery surfaces (PNG via the bundled Seaborn templates, static HTML, notebooks) are first-class and verified.
- Automations: skill references to Codex scheduled automations (`automation.toml`) have no Claude Code runtime and are inert.
## State and privacy
Plugin state (saved source preferences, onboarding progress, semantic-layer registry) lives in local Markdown/JSON files under `~/.claude/codex-plugins-for-claude-code` (override with `CODEX_PORT_HOME`). Nothing is sent anywhere; delete that directory to reset.
## Re-porting from upstream
```bash
node scripts/port.mjs
```
The script fetches the pinned upstream commit, regenerates `plugins/` from scratch, applies the patch list, and fails loudly if upstream drift makes any patch stop matching. To track a newer upstream, bump `UPSTREAM_SHA` in `scripts/port.mjs`, re-run, and re-verify (see `CLAUDE.md`).
## Maintenance
Maintained on a best-effort basis. Upstream tracking is intentionally cheap: the whole conversion is regenerated by one script, so syncing to a newer upstream commit is a small, reviewable change. Issues and PRs are welcome; fixes to converted content belong in the port script, not in `plugins/`.
## License
MIT. Upstream code copyright OpenAI; port modifications copyright spacemata. See `LICENSE`.