Codex でローカルマーケットプレイスを作って、独自プラグインを置いてみよう

Codex は、カスタマイズに使えるものとして、カスタムプロンプト、MCP、Skills と様々な広がりをみせてきた。これ系で新しめの機能に Marketplace と Plugin がある。今回は Marketplace をローカルに作成し、プラグインを配置してみる。
Marketplace というのは Plugin の一覧を配布する機能で、公式の Marketplace が Codex App に搭載されているので見たことがある人もいると思う。ちなみに、いつからこの機能があったのだろうと改めて調べてみたら3月26日だった。結構最近である。
確かに以前は単独で Skill を入れたり MCP サーバを入れたりしていたように思う。ちなみに Plugin というのは「スキル、アプリ連携、MCPサーバーをCodex用の再利用可能なワークフローのバンドル」とのことである。
この Plugin は Marketplace を使って GUI にて簡単にインストールすることができるようになっている。 config.toml に設定を書くみたいな作業からは解放されるわけだ。ということで今回は Plugin を作ってみる。加えてローカルに Marketplace を用意してその Plugin 一覧を表示してみる。
Marketplace および Plugin の作り方については以下の公式ドキュメントにて詳しく解説されている。
Local Marketplace を用意してみる
Local Marketplace は $REPO_ROOT/.agents/plugins/marketplace.json を用意しリポジトリのルートで codex plugin marketplace add . を実行すると追加することができる。例えば以下の Local Marketplace は2個のプラグインを含んでいる。
marketplace.json
{
"name": "local-codex-marketplace",
"interface": {
"displayName": "Local Codex Marketplace"
},
"plugins": [
{
"name": "hello-codex",
"source": {
"source": "local",
"path": "./plugins/hello-codex"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
},
{
"name": "quick-checklist",
"source": {
"source": "local",
"path": "./plugins/quick-checklist"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}
これを Local Marketplace としてインストールすると以下のように Codex App 上で確認することができる。

インストールされている Plugin がカルーセルでグラフィカルに表示されていたり、インストールボタンがあったりとなかなか作った後の満足感が高い。どうやらこういう感じでいろいろなプロジェクトで使う共通プラグインを社内で整備していけば環境を共有しやすいかもしれないと思った。
ちなみに marketplace.json にはいくつかの固定値をとる設定があるが、これらは以下のコードにて役割を確認することができるので、気になった方はチェックしてみよう。
- Default new entries to:
- `policy.installation: "AVAILABLE"`
- `policy.authentication: "ON_INSTALL"`
- Override defaults only when the user explicitly specifies another allowed value.
- Allowed `policy.installation` values:
- `NOT_AVAILABLE`
- `AVAILABLE`
- `INSTALLED_BY_DEFAULT`
- Allowed `policy.authentication` values:
- `ON_INSTALL`
- `ON_USE`
簡単な Plugin を作ってみよう
プラグインは、前述のドキュメントを参考に、以下のような構造で用意する。
plugins/hello-codex
├── .codex-plugin
│ └── plugin.json
├── README.md
└── skills
└── hello-codex
└── SKILL.md
plugin.json は Plugin のメタデータを記述する場所で、各 Plugin に必ず必要。サンプル的なプロジェクトではこんな風な設定を記述している。 brandColor は設定してあると Marketplace のカルーセルのプラグイン名が指定の色になるというくらいしか確認できていないが、いずれ違う UI になったときには大きく反映がされるかもしれない。
plugin.json
{
"name": "hello-codex",
"version": "0.1.0",
"description": "A minimal sample plugin for verifying a local Codex marketplace.",
"author": {
"name": "Local Codex Marketplace"
},
"license": "MIT",
"keywords": [
"sample",
"marketplace",
"codex"
],
"skills": "./skills/",
"interface": {
"displayName": "Hello Codex",
"shortDescription": "Verify a local Codex marketplace.",
"longDescription": "A minimal sample plugin for verifying a local Codex marketplace.",
"developerName": "Local Codex Marketplace",
"category": "Productivity",
"capabilities": [
"Read"
],
"defaultPrompt": [
"Use Hello Codex to verify this local marketplace."
],
"brandColor": "#10A37F"
}
}
今回用意した Skill はテキストを表示するだけの機能を持っている。内容は好きに書き換えて試してみよう。
SKILL.md
---
name: hello-codex
description: Return a short greeting from the local Codex marketplace sample plugin.
---
When this skill is invoked, respond exactly with:
```text
Hello from the local Codex marketplace. This is the Hello Codex sample plugin.
```
Do not call external services, request configuration, or add extra explanation.
インストールは専用の画面が用意されていて、なかなか楽しい

この Plugin は Skills を一つ持っているのみ。ロゴなどは設定していないが Marketplace 上では独自のアイコンがあたっており、このあたりの仕組みは調べてみたがわからなかった。Plugin のメタデータによってアイコンが変わるのかもしれない。
