Skip to content

feat: Codex marketplace support, README rebuild, code-intelligence doctor#2

Merged
antonbabenko merged 6 commits into
masterfrom
docs/readme-rebuild
May 16, 2026
Merged

feat: Codex marketplace support, README rebuild, code-intelligence doctor#2
antonbabenko merged 6 commits into
masterfrom
docs/readme-rebuild

Conversation

@antonbabenko
Copy link
Copy Markdown
Owner

Summary

Six commits on docs/readme-rebuild:

  1. docs: rebuild README - pitch, per-plugin cards, npx-first install, Author section, cut duplicate versioning
  2. feat: Codex marketplace support - .agents/plugins/marketplace.json + plugins/code-intelligence/.codex-plugin/plugin.json (mirrors the Claude manifest; inline plugin uses a local subdir source, not the repo-root ./ blocked by Marketplace local plugin path "./" cannot reference the repository root openai/codex#17066)
  3. ci: release syncs .codex-plugin/plugin.json version; validate.yml fails on Codex-manifest version drift
  4. docs: CLAUDE.md / CONTRIBUTING.md document the Codex manifest in the release + version-sync model; marketplace.json em dash -> ASCII
  5. feat: /code-intelligence:doctor command - checks rg + language servers on PATH with install hints, READY/DEGRADED verdict, optional consent-gated GitHub star (no state file, gh api only on explicit Yes)
  6. fix: release CHANGELOG generation is now markdownlint-clean (stable # Changelog H1, single blank lines, * bullets, idempotent/self-repairing); existing CHANGELOG normalized

Codex CLI specifics (no plugin install subcommand; category is a free string; repo-root .agents/plugins/marketplace.json is read by codex plugin marketplace add) were verified with Codex itself.

Release impact

PRs are squash-merged and the squash subject drives the per-plugin release pipeline. Keep the squash subject unscoped (e.g. feat: ..., no (code-intelligence) scope) so this merges with no version bump / no release - that is the intent here. Use a feat(code-intelligence): ... subject only if a code-intelligence release is actually wanted.

Test plan

  • markdownlint-cli2 over README.md CONTRIBUTING.md plugins/**/*.md -> 0 errors (CHANGELOG fix verified; previously 3 MD0xx failures)
  • Both Codex JSON manifests valid; versions synced 0.2.0 across .claude-plugin manifest, SKILL.md, .codex-plugin/plugin.json
  • Codex local source is a subdir (./plugins/code-intelligence), not repo-root ./ (not hit by Marketplace local plugin path "./" cannot reference the repository root openai/codex#17066)
  • All 5 embedded workflow Python blocks compile; simulated release keeps CHANGELOG lint-clean and idempotent; simulated validate version-sync gate passes
  • doctor.md frontmatter valid (name, description, allowed-tools: Bash, AskUserQuestion); ASCII clean
  • tests/baseline-scenarios.md retains ## Scenario (now 4), ## Running These Tests, ### Success Criteria (validate.yml gate green)
  • Manual (cannot run a slash command in CI): in Claude Code run /code-intelligence:doctor - confirm rg/LSP status + install hints, READY/DEGRADED verdict, star asked once after checks, no state file, gh api only on explicit Yes

Notes

  • Codex has no slash-command mechanism (plugins expose skills, not commands), so /code-intelligence:doctor is Claude Code only.
  • terraform-skill is external; its env checks belong in its own repo - the doctor command intentionally checks only code-intelligence's generic prerequisites.

…plicate versioning

- H1 'Agent Plugins for AI Coding Agents'; add Agent Skills, Claude Code, CI badges
- Install section above Plugins; collapsible <details> per host (Gemini CLI,
  Cursor, Copilot, OpenCode, Codex, Antigravity, npx skills, Manual)
- one-sentence what+why per plugin as cards; remove duplicated failure-mode prose
- remove standalone Versioning section (lives in CONTRIBUTING.md / CLAUDE.md)
- add Author section (Anton Babenko, LinkedIn)
- inline vs external install paths kept distinct on non-Claude hosts
- .markdownlint.jsonc: allow only <details>/<summary> for the collapsible blocks

No plugin scope: release pipeline is a deliberate no-op.
- .agents/plugins/marketplace.json: Codex marketplace mirroring the Claude
  manifest (code-intelligence local subdir source, terraform-skill url pin
  v1.8.0); category Title-cased per Codex (marketplace category overrides
  plugin manifest)
- plugins/code-intelligence/.codex-plugin/plugin.json: Codex per-plugin
  manifest, skills ./skills, version 0.2.0 (synced with SKILL.md and the
  Claude manifest)
- README: Codex badge, project framing (Agent Plugins = Claude Code + Codex
  marketplace), Codex install block (marketplace add + /plugins TUI; no
  plugin install subcommand exists), Codex details retitled as clone
  fallback, naming proofread to 'Agent Plugins'

Codex CLI specifics verified via Codex (codex 0.130.0): no stable
plugin-install subcommand, category is a free string, repo-root
.agents/plugins/marketplace.json is read by 'codex plugin marketplace add'.
No plugin scope: release pipeline is a no-op.
automated-release.yml: on a per-plugin bump, also rewrite
plugins/<plugin>/.codex-plugin/plugin.json version (step 2b) when that
manifest exists, so Codex/Claude/SKILL.md versions never diverge. The
existing 'git add plugins' already stages it. Header comment updated.

validate.yml: extend the marketplace<->SKILL.md version-sync gate to also
require .codex-plugin/plugin.json version == marketplace version when the
file is present, so drift fails a PR.

Both checks are optional-by-presence: plugins without a Codex manifest are
unaffected. No plugin scope: release pipeline no-op.
- CLAUDE.md / CONTRIBUTING.md: release pipeline and CI version-sync now
  also cover plugins/<plugin>/.codex-plugin/plugin.json; 'never hand-edit
  versions' extended to it
- .claude-plugin/marketplace.json: replace em dash with ' - ' (ASCII)
- README.md: user copy edits (badge order, plugin section formatting)
- plugins/code-intelligence/commands/doctor.md: /code-intelligence:doctor
  checks rg + language servers on PATH with per-OS install hints, prints a
  READY/DEGRADED verdict tied to the skill's degradation tier, then an
  optional consent-gated GitHub star (gh api only on explicit Yes, manual
  link otherwise, no state file written)
- baseline-scenarios.md: add Scenario 4 covering the command (consent gate,
  statelessness) - keeps the CONTRIBUTING add-a-scenario rule and the
  validate.yml section gate satisfied
- README: one discovery line under the code-intelligence card

Claude Code only (Codex plugins expose skills, not commands). No plugin
scope: release pipeline is a no-op.
The release step prepended new entries above the '# Changelog' H1,
producing MD041 (first line not H1), MD012 (double blanks), and MD004
(mixed bullet styles) - which failed validate.yml's markdownlint on every
PR touching plugins/**.

- automated-release.yml: keep a stable '# Changelog' + preamble on top,
  insert new version sections below it; single blank-line separators; '*'
  bullets only; idempotent and self-repairing for a malformed file.
- plugins/code-intelligence/CHANGELOG.md: one-time normalize to the clean
  shape (v0.2.0 entry preserved; stale superseded '## [Unreleased]'
  scaffold dropped).

Unscoped: release pipeline no-op.
@antonbabenko antonbabenko merged commit fc383cc into master May 16, 2026
1 check passed
@antonbabenko antonbabenko deleted the docs/readme-rebuild branch May 16, 2026 21:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant