Follows the cross-vendor Agent Plugins 1.0.0 standard
(github.com/agentplugins/agent-plugins-spec), which Codex CLI adopted
2026-08-07. Per the standard, this manifest needs only name — no
"skills" key, since Agent Plugins is specified to auto-discover a
sibling skills/ directory. Manually verified against Codex CLI
0.151.0 (codex --version): install and discovery both work — see
"Verification status" below.
Codex CLI's plugin CLI is marketplace-based: codex plugin add installs
a plugin from a marketplace root that Codex has already been told about, not
from a bare plugin directory. This repository is already a valid marketplace
root, because its .claude-plugin/marketplace.json is a manifest format
Codex CLI reads, so no extra manifest is needed.
-
Register this repository as a Codex marketplace and install the plugin:
codex plugin marketplace add "$(pwd)" codex plugin add adr-toolkit@adr-toolkit-marketplaceThe marketplace name (
adr-toolkit-marketplace) is the"name"field of.claude-plugin/marketplace.json;codex plugin marketplace addprints it on success, andcodex plugin marketplace listshows it later. -
Confirm Codex lists
adr-toolkitas installed and enabled:codex plugin list
-
Optionally run
python skills/adr-toolkit/scripts/adr.py preflight --jsonfrom your target repository to confirm the script layer works standalone.
No symlink step is required. Registering the repository root as the
marketplace means Codex reads .claude-plugin/plugin.json as the plugin
manifest, and Agent Plugins' sibling-skills/-directory discovery finds the
real skills/adr-toolkit/ package next to it directly — verified below by
installing with no adapters/codex/skills/ symlink present at all.
Design spec §17.2 originally planned every harness adapter as a
self-contained plugin directory: adapters/codex/.codex-plugin/plugin.json
as that harness's own manifest, with adapters/codex/skills/adr-toolkit
symlinked in as its required sibling skills/ directory
(ln -s ../../../skills/adr-toolkit adapters/codex/skills/adr-toolkit), so
each adapter would work if pointed at directly.
That plan does not hold for Codex specifically: codex plugin marketplace add
rejects a bare single-plugin directory —
$ codex plugin marketplace add "$(pwd)/adapters/codex"
Error: invalid marketplace file `<repo-root>/adapters/codex`: marketplace root does not contain a supported manifest
— because only the repository root carries a marketplace manifest
(.claude-plugin/marketplace.json). So adapters/codex/.codex-plugin/plugin.json
and its sibling symlink are never read by the verified install path above;
they exist only for structural consistency with the Gemini and Antigravity
adapters' self-contained layout, and in case a future Codex version accepts a
bare plugin directory as a marketplace root. If you want that manifest to
resolve correctly on its own regardless, create the symlink manually:
mkdir -p adapters/codex/skills
ln -s "$(pwd)/skills/adr-toolkit" adapters/codex/skills/adr-toolkitThis is not committed to the repo — committing a real symlink breaks on
Windows checkouts that don't have core.symlinks enabled, which this
project's CI can't assume. .gitignore already ignores
adapters/codex/skills/adr-toolkit so a git add -A cannot commit it by
accident.
Manually verified against Codex CLI 0.151.0 (codex --version), run
throughout with an isolated CODEX_HOME=$(mktemp -d) so no state was
written to the real ~/.codex.
$ codex plugin marketplace add "$(pwd)"
Added marketplace `adr-toolkit-marketplace` from <repo-root>.
Installed marketplace root: <repo-root>
$ codex plugin add adr-toolkit@adr-toolkit-marketplace --json
{
"pluginId": "adr-toolkit@adr-toolkit-marketplace",
"name": "adr-toolkit",
"marketplaceName": "adr-toolkit-marketplace",
"version": "0.2.0",
"installedPath": "<CODEX_HOME>/plugins/cache/adr-toolkit-marketplace/adr-toolkit/0.2.0",
"authPolicy": "ON_INSTALL"
}
$ codex plugin list
Marketplace `adr-toolkit-marketplace`
<repo-root>/.claude-plugin/marketplace.json
PLUGIN STATUS VERSION PATH
adr-toolkit@adr-toolkit-marketplace installed, enabled 0.2.0 <repo-root>
The installed snapshot under <CODEX_HOME>/plugins/cache/ carries the
whole skills/adr-toolkit/ package, and the script layer was run directly
out of it against a scratch git repository, producing correct "ok": true
output for preflight, init --dir docs/decisions, and
validate --dir docs/decisions.
Re-verified with no adapters/codex/skills/ symlink present at all: the
same three commands above still succeed and preflight --json still returns
"ok": true from the installed snapshot, confirming the symlink step this
README previously listed as install step 1 played no part in the working
flow.
Two details worth knowing:
- A marketplace root, not a plugin directory, is what you register.
Pointing
codex plugin marketplace addat a bare single-plugin directory (this adapter's ownadapters/codex/, or its.codex-plugin/) fails withmarketplace root does not contain a supported manifest. That is Codex's documented marketplace model, not a defect; the repo root is the correct thing to register, and it works. - The version Codex reports comes from the plugin manifest it reads.
Installing from this repo's root reports the version in
.claude-plugin/plugin.json, which is kept in sync withskills/adr-toolkit/VERSIONbyscripts/sync_version.py --check. The adapter-local.codex-plugin/plugin.jsonintentionally has noversionfield because the verified install path does not read it.