* Add Codex plugin packaging
* Wire Codex plugin into skill-sync + release pipeline; bring to parity
The Codex plugin packaging lived outside the Claude plugin's release flow, so its
bundled skills and version drifted (134 skills @ 1.2.4 vs Claude's 136 @ 1.2.18).
This puts both packagings on one pipeline:
- plugin/sync-skills.sh now rebuilds BOTH plugin/skills/ (Claude) and
plugins/tooluniverse/skills/ (Codex) from the canonical skills/ tree; Codex
drops Claude-Code-specific skills (tooluniverse-claude-code-plugin).
- scripts/release-plugin.sh now also bumps plugins/tooluniverse/.codex-plugin/
plugin.json on release, so Codex's version tracks Claude's.
One-time parity:
- Codex skills resynced (135 = 136 user-facing minus the Claude-only skill);
adds tooluniverse-peptide-target-deorphanization, drops stale entries.
- Codex plugin.json 1.2.4 -> 1.2.18 to match the current release.
- Restored skills/tooluniverse-custom-tool/references/json-tool.md: PR #194 edited
only the Claude plugin copy, leaving the source missing the API-key declaration
docs, which any resync would otherwise drop.
Codex auto-upgrades owner/repo Git marketplaces on startup, so this reaches Codex
users on next launch; Claude users get it via the version bump.
* Fix Codex skill sync: delegate to the Codex-specific normalizer
The prior pipeline commit rebuilt plugins/tooluniverse/skills/ with the same
filter as the Claude copy, which left in the disable-model-invocation marker
(rejected by Codex validation; 133 skills) and descriptions over Codex's
1024-char limit (4 skills). Have plugin/sync-skills.sh delegate the Codex copy to
scripts/sync-codex-plugin-skills.sh — which strips the marker and compacts long
descriptions — instead of duplicating and diverging from that logic. Also add an
evals/ exclude to the Codex sync so dev eval scaffolding does not ship, matching
the Claude filter.
* Run the Codex plugin packaging test in CI
tests/test_codex_plugin.py lived at the tests/ top level, outside pytest.ini's
testpaths (tests/unit, tests/integration, tests/tools), so CI never collected it
— its per-skill assertions (description <= 1024 chars, disable-model-invocation
not set) silently never ran, which is why the earlier broken Codex skill regen
passed CI. Move it under tests/unit/, fix the repo-root parents[] depth, and mark
it unit so the Codex skill set is validated on every run.
* Rename Codex marketplace from tooluniverse-local to tooluniverse
The catalog name/displayName carried a 'local' suffix left over from local-dir
testing, but this is the published GitHub marketplace users add via
`codex plugin marketplace add mims-harvard/ToolUniverse`. Drop the misleading
'local' so it lists as 'tooluniverse' / 'ToolUniverse'.
* Update Codex plugin README: add install steps, point sync at the shared script
- Add an Install section (codex plugin marketplace add mims-harvard/ToolUniverse
+ codex plugin add tooluniverse) — the README had no end-user install steps.
- Point the Development sync at plugin/sync-skills.sh, the unified entry point
that rebuilds BOTH the Claude and Codex skill copies; the old instruction ran
only the Codex-specific sync, so following it left the Claude copy stale.
* Version plugins as <package MAJOR.MINOR>.<plugin revision>
Tie both plugin versions to the PyPI package's MAJOR.MINOR while letting them
carry an independent PATCH (the plugin revision). release-plugin.sh now derives
the next version from pyproject.toml's MAJOR.MINOR and bumps the plugin PATCH
(resetting to .0 when the package's MAJOR.MINOR advances), instead of bumping the
plugin's own semver freely. This keeps Claude + Codex plugin versions coherent
with the package they serve while a skill-only change ships as a PATCH bump —
without forcing an empty PyPI package release.
* Update RELEASING.md for the package-tracked plugin version scheme
Document the <package MAJOR.MINOR>.<plugin revision> scheme, the 4 bumped plugin
manifests (Codex included), and that both Claude (version-driven) and Codex
(git-driven) plugins auto-update — replacing the stale level-based / 3-manifest /
Claude-only instructions.
* Add tooluniverse-codex-plugin install skill (Codex-only)
A one-step install + troubleshooting guide for the ToolUniverse plugin on OpenAI
Codex, mirroring tooluniverse-claude-code-plugin but adapted to Codex's commands
(codex plugin marketplace add / plugin add -m), startup auto-upgrade behavior,
and MCP-via-uvx model — and noting Codex ships MCP tools + skills only (no slash
commands). Symmetric to the Claude install skill: plugin/sync-skills.sh now
excludes it from the Claude packaging, while the Codex sync includes it (and
drops the Claude-only tooluniverse-claude-code-plugin). Description tuned via the
skill-creator trigger optimizer (perfect precision; install-skill recall is
inherently low and largely platform-bound).