From 3ff5e8ad750e6ef4f9dc517befce3ed7d1c6c92e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Blon=C4=8F=C3=A1k?= Date: Fri, 11 Sep 2026 15:54:47 +0200 Subject: [PATCH] added codex plugin manifests and skill metadata The Nette plugins now provide Codex-specific discovery and presentation metadata while sharing their existing skill instructions and references with Claude Code. Codex can discover all four plugins through the existing nette marketplace. Changes: - Added .codex-plugin/plugin.json manifests for nette, nette-dev, nette-lint, and php-fixer, including presentation metadata and starter prompts. Skill-bearing plugins explicitly reference ./skills/. - Added agents/openai.yaml display names and short descriptions for all 24 skills. - Preserved explicit-only invocation of install-php-fixer through Codex's allow_implicit_invocation policy and the existing Claude Code flag. - Adapted PHP fixer guidance to distinguish verified Claude Code hook behavior from unverified Codex automation and document manual ECS use. - Documented Codex marketplace registration, listing, installation, and skill invocation. Clarified that the catalog name is nette, independent of the checkout directory or branch, so the install ID is nette@nette. Validation: - Codex CLI listed all four plugins with --marketplace nette --available. - Plugin validation passed for nette, nette-dev, and nette-lint. - YAML UI metadata checks passed for all 24 skills. - git diff --check passed. Known limitations: - Automatic linting and fixing hooks still target Claude Code Edit/Write events. Codex hook execution and end-to-end installation were not tested. - The bundled Codex plugin validator rejects the preserved disable-model-invocation: true field in install-php-fixer; the php-fixer plugin needs an installation check in the target Codex client. - The standalone skill validator also rejects that Claude-specific field and angle brackets in five existing skill descriptions. These existing instructions were preserved. --- plugins/nette-dev/.codex-plugin/plugin.json | 30 ++++++++++++++++ .../skills/commit-messages/agents/openai.yaml | 3 ++ .../php-coding-standards/agents/openai.yaml | 3 ++ .../skills/php-doc/agents/openai.yaml | 3 ++ .../phpstan-analysis/agents/openai.yaml | 3 ++ plugins/nette-lint/.codex-plugin/plugin.json | 30 ++++++++++++++++ plugins/nette/.codex-plugin/plugin.json | 35 +++++++++++++++++++ .../frontend-development/agents/openai.yaml | 3 ++ .../skills/latte-templates/agents/openai.yaml | 3 ++ .../skills/neon-format/agents/openai.yaml | 3 ++ .../nette-architecture/agents/openai.yaml | 3 ++ .../skills/nette-caching/agents/openai.yaml | 3 ++ .../nette-components/agents/openai.yaml | 3 ++ .../nette-configuration/agents/openai.yaml | 3 ++ .../skills/nette-database/agents/openai.yaml | 3 ++ .../skills/nette-forms/agents/openai.yaml | 3 ++ .../skills/nette-http/agents/openai.yaml | 3 ++ .../skills/nette-mail/agents/openai.yaml | 3 ++ .../skills/nette-routing/agents/openai.yaml | 3 ++ .../skills/nette-schema/agents/openai.yaml | 3 ++ .../skills/nette-security/agents/openai.yaml | 3 ++ .../skills/nette-tester/agents/openai.yaml | 3 ++ .../skills/nette-upgrading/agents/openai.yaml | 3 ++ .../skills/nette-utils/agents/openai.yaml | 3 ++ .../skills/tracy-debugging/agents/openai.yaml | 3 ++ plugins/php-fixer/.codex-plugin/plugin.json | 28 +++++++++++++++ .../skills/install-php-fixer/SKILL.md | 4 +-- .../install-php-fixer/agents/openai.yaml | 6 ++++ .../php-fixer/skills/php-auto-fixer/SKILL.md | 6 +++- .../skills/php-auto-fixer/agents/openai.yaml | 3 ++ readme.md | 35 ++++++++++++++++++- 31 files changed, 239 insertions(+), 4 deletions(-) create mode 100644 plugins/nette-dev/.codex-plugin/plugin.json create mode 100644 plugins/nette-dev/skills/commit-messages/agents/openai.yaml create mode 100644 plugins/nette-dev/skills/php-coding-standards/agents/openai.yaml create mode 100644 plugins/nette-dev/skills/php-doc/agents/openai.yaml create mode 100644 plugins/nette-dev/skills/phpstan-analysis/agents/openai.yaml create mode 100644 plugins/nette-lint/.codex-plugin/plugin.json create mode 100644 plugins/nette/.codex-plugin/plugin.json create mode 100644 plugins/nette/skills/frontend-development/agents/openai.yaml create mode 100644 plugins/nette/skills/latte-templates/agents/openai.yaml create mode 100644 plugins/nette/skills/neon-format/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-architecture/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-caching/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-components/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-configuration/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-database/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-forms/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-http/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-mail/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-routing/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-schema/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-security/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-tester/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-upgrading/agents/openai.yaml create mode 100644 plugins/nette/skills/nette-utils/agents/openai.yaml create mode 100644 plugins/nette/skills/tracy-debugging/agents/openai.yaml create mode 100644 plugins/php-fixer/.codex-plugin/plugin.json create mode 100644 plugins/php-fixer/skills/install-php-fixer/agents/openai.yaml create mode 100644 plugins/php-fixer/skills/php-auto-fixer/agents/openai.yaml diff --git a/plugins/nette-dev/.codex-plugin/plugin.json b/plugins/nette-dev/.codex-plugin/plugin.json new file mode 100644 index 0000000..ef133f3 --- /dev/null +++ b/plugins/nette-dev/.codex-plugin/plugin.json @@ -0,0 +1,30 @@ +{ + "name": "nette-dev", + "version": "1.2.0", + "description": "Coding standards and conventions for Nette Framework contributors", + "author": { + "name": "David Grudl" + }, + "keywords": [ + "php", + "nette", + "coding-standards", + "phpdoc", + "contributor" + ], + "skills": "./skills/", + "interface": { + "displayName": "Nette Contributor Tools", + "shortDescription": "Coding conventions for Nette contributors", + "developerName": "David Grudl", + "category": "Developer Tools", + "longDescription": "Coding standards and conventions for Nette Framework contributors", + "defaultPrompt": [ + "Use $phpstan-analysis to investigate PHPStan errors in this project." + ], + "capabilities": [ + "Read", + "Write" + ] + } +} diff --git a/plugins/nette-dev/skills/commit-messages/agents/openai.yaml b/plugins/nette-dev/skills/commit-messages/agents/openai.yaml new file mode 100644 index 0000000..3ae4d11 --- /dev/null +++ b/plugins/nette-dev/skills/commit-messages/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Commit Messages" + short_description: "Write commits using Nette repository conventions" diff --git a/plugins/nette-dev/skills/php-coding-standards/agents/openai.yaml b/plugins/nette-dev/skills/php-coding-standards/agents/openai.yaml new file mode 100644 index 0000000..95b3e76 --- /dev/null +++ b/plugins/nette-dev/skills/php-coding-standards/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "PHP Coding Standards" + short_description: "Apply Nette PHP formatting and naming conventions" diff --git a/plugins/nette-dev/skills/php-doc/agents/openai.yaml b/plugins/nette-dev/skills/php-doc/agents/openai.yaml new file mode 100644 index 0000000..ed86fbb --- /dev/null +++ b/plugins/nette-dev/skills/php-doc/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "PHP Documentation" + short_description: "Write concise phpDoc using Nette conventions" diff --git a/plugins/nette-dev/skills/phpstan-analysis/agents/openai.yaml b/plugins/nette-dev/skills/phpstan-analysis/agents/openai.yaml new file mode 100644 index 0000000..d7e817a --- /dev/null +++ b/plugins/nette-dev/skills/phpstan-analysis/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "PHPStan Analysis" + short_description: "Resolve PHPStan errors and maintain type tests" diff --git a/plugins/nette-lint/.codex-plugin/plugin.json b/plugins/nette-lint/.codex-plugin/plugin.json new file mode 100644 index 0000000..38d8144 --- /dev/null +++ b/plugins/nette-lint/.codex-plugin/plugin.json @@ -0,0 +1,30 @@ +{ + "name": "nette-lint", + "version": "1.1.0", + "description": "Automatic validation of PHP, Latte, NEON and JavaScript/TypeScript files after each edit. These hooks target Claude Code Edit/Write events; Codex hook compatibility is not verified.", + "author": { + "name": "David Grudl" + }, + "keywords": [ + "php", + "nette", + "latte", + "neon", + "lint", + "validation" + ], + "interface": { + "displayName": "Nette Lint", + "shortDescription": "File validation hooks for Claude Code", + "developerName": "David Grudl", + "category": "Developer Tools", + "longDescription": "Automatic validation of PHP, Latte, NEON and JavaScript/TypeScript files after each edit. These hooks target Claude Code Edit/Write events; Codex hook compatibility is not verified.", + "defaultPrompt": [ + "Explain the bundled lint hooks and how to run equivalent project checks manually." + ], + "capabilities": [ + "Read", + "Write" + ] + } +} diff --git a/plugins/nette/.codex-plugin/plugin.json b/plugins/nette/.codex-plugin/plugin.json new file mode 100644 index 0000000..3d7c1f1 --- /dev/null +++ b/plugins/nette/.codex-plugin/plugin.json @@ -0,0 +1,35 @@ +{ + "name": "nette", + "version": "1.2.0", + "description": "Conventions and best practices for Nette Framework, Latte templating engine, and NEON configuration format", + "author": { + "name": "David Grudl" + }, + "keywords": [ + "php", + "nette", + "latte", + "neon", + "framework", + "mvc", + "templates", + "forms", + "database", + "di" + ], + "skills": "./skills/", + "interface": { + "displayName": "Nette Framework", + "shortDescription": "Nette, Latte and NEON development skills", + "developerName": "David Grudl", + "category": "Developer Tools", + "longDescription": "Conventions and best practices for Nette Framework, Latte templating engine, and NEON configuration format", + "defaultPrompt": [ + "Use $nette-architecture to review my Nette application structure." + ], + "capabilities": [ + "Read", + "Write" + ] + } +} diff --git a/plugins/nette/skills/frontend-development/agents/openai.yaml b/plugins/nette/skills/frontend-development/agents/openai.yaml new file mode 100644 index 0000000..67fc221 --- /dev/null +++ b/plugins/nette/skills/frontend-development/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Frontend Development" + short_description: "Build Nette frontends with Vite, Naja and Tailwind" diff --git a/plugins/nette/skills/latte-templates/agents/openai.yaml b/plugins/nette/skills/latte-templates/agents/openai.yaml new file mode 100644 index 0000000..0018f17 --- /dev/null +++ b/plugins/nette/skills/latte-templates/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Latte Templates" + short_description: "Create Latte templates, layouts and snippets" diff --git a/plugins/nette/skills/neon-format/agents/openai.yaml b/plugins/nette/skills/neon-format/agents/openai.yaml new file mode 100644 index 0000000..72c17fc --- /dev/null +++ b/plugins/nette/skills/neon-format/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "NEON Format" + short_description: "Write and validate NEON configuration files" diff --git a/plugins/nette/skills/nette-architecture/agents/openai.yaml b/plugins/nette/skills/nette-architecture/agents/openai.yaml new file mode 100644 index 0000000..b271dbe --- /dev/null +++ b/plugins/nette/skills/nette-architecture/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Architecture" + short_description: "Design Nette presenters, modules and applications" diff --git a/plugins/nette/skills/nette-caching/agents/openai.yaml b/plugins/nette/skills/nette-caching/agents/openai.yaml new file mode 100644 index 0000000..f875819 --- /dev/null +++ b/plugins/nette/skills/nette-caching/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Caching" + short_description: "Use Nette cache storage, dependencies and invalidation" diff --git a/plugins/nette/skills/nette-components/agents/openai.yaml b/plugins/nette/skills/nette-components/agents/openai.yaml new file mode 100644 index 0000000..2e95dc3 --- /dev/null +++ b/plugins/nette/skills/nette-components/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Components" + short_description: "Build Nette components, signals and AJAX snippets" diff --git a/plugins/nette/skills/nette-configuration/agents/openai.yaml b/plugins/nette/skills/nette-configuration/agents/openai.yaml new file mode 100644 index 0000000..f23ce98 --- /dev/null +++ b/plugins/nette/skills/nette-configuration/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Configuration" + short_description: "Configure Nette DI services and autowiring" diff --git a/plugins/nette/skills/nette-database/agents/openai.yaml b/plugins/nette/skills/nette-database/agents/openai.yaml new file mode 100644 index 0000000..599ed82 --- /dev/null +++ b/plugins/nette/skills/nette-database/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Database" + short_description: "Work with Nette Explorer, entities and queries" diff --git a/plugins/nette/skills/nette-forms/agents/openai.yaml b/plugins/nette/skills/nette-forms/agents/openai.yaml new file mode 100644 index 0000000..cba97b4 --- /dev/null +++ b/plugins/nette/skills/nette-forms/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Forms" + short_description: "Build and validate forms with Nette Forms" diff --git a/plugins/nette/skills/nette-http/agents/openai.yaml b/plugins/nette/skills/nette-http/agents/openai.yaml new file mode 100644 index 0000000..319f324 --- /dev/null +++ b/plugins/nette/skills/nette-http/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette HTTP" + short_description: "Handle Nette requests, responses, sessions and cookies" diff --git a/plugins/nette/skills/nette-mail/agents/openai.yaml b/plugins/nette/skills/nette-mail/agents/openai.yaml new file mode 100644 index 0000000..6987c61 --- /dev/null +++ b/plugins/nette/skills/nette-mail/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Mail" + short_description: "Compose and send email with Nette Mail" diff --git a/plugins/nette/skills/nette-routing/agents/openai.yaml b/plugins/nette/skills/nette-routing/agents/openai.yaml new file mode 100644 index 0000000..e45ee0e --- /dev/null +++ b/plugins/nette/skills/nette-routing/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Routing" + short_description: "Configure Nette routes and troubleshoot URL generation" diff --git a/plugins/nette/skills/nette-schema/agents/openai.yaml b/plugins/nette/skills/nette-schema/agents/openai.yaml new file mode 100644 index 0000000..8fb1b18 --- /dev/null +++ b/plugins/nette/skills/nette-schema/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Schema" + short_description: "Validate and normalize data with Nette Schema" diff --git a/plugins/nette/skills/nette-security/agents/openai.yaml b/plugins/nette/skills/nette-security/agents/openai.yaml new file mode 100644 index 0000000..5f07bdc --- /dev/null +++ b/plugins/nette/skills/nette-security/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Security" + short_description: "Implement Nette authentication and authorization" diff --git a/plugins/nette/skills/nette-tester/agents/openai.yaml b/plugins/nette/skills/nette-tester/agents/openai.yaml new file mode 100644 index 0000000..11ca170 --- /dev/null +++ b/plugins/nette/skills/nette-tester/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Tester" + short_description: "Write and debug tests using Nette Tester" diff --git a/plugins/nette/skills/nette-upgrading/agents/openai.yaml b/plugins/nette/skills/nette-upgrading/agents/openai.yaml new file mode 100644 index 0000000..3a84e65 --- /dev/null +++ b/plugins/nette/skills/nette-upgrading/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Upgrading" + short_description: "Migrate retired Nette APIs to their current equivalents" diff --git a/plugins/nette/skills/nette-utils/agents/openai.yaml b/plugins/nette/skills/nette-utils/agents/openai.yaml new file mode 100644 index 0000000..ad4f634 --- /dev/null +++ b/plugins/nette/skills/nette-utils/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Nette Utils" + short_description: "Use Nette utilities for strings, files and collections" diff --git a/plugins/nette/skills/tracy-debugging/agents/openai.yaml b/plugins/nette/skills/tracy-debugging/agents/openai.yaml new file mode 100644 index 0000000..acee85b --- /dev/null +++ b/plugins/nette/skills/tracy-debugging/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "Tracy Debugging" + short_description: "Debug PHP errors with Tracy BlueScreen and Tracy Bar" diff --git a/plugins/php-fixer/.codex-plugin/plugin.json b/plugins/php-fixer/.codex-plugin/plugin.json new file mode 100644 index 0000000..a3d8304 --- /dev/null +++ b/plugins/php-fixer/.codex-plugin/plugin.json @@ -0,0 +1,28 @@ +{ + "name": "php-fixer", + "version": "1.1.0", + "description": "Nette coding standard installation and PHP fixer guidance. Automatic fixing hooks target Claude Code; Codex hook compatibility is not verified.", + "author": { + "name": "David Grudl" + }, + "keywords": [ + "php", + "coding-standards", + "fixer" + ], + "skills": "./skills/", + "interface": { + "displayName": "PHP Fixer", + "shortDescription": "Nette coding standard setup and fixer guidance", + "developerName": "David Grudl", + "category": "Developer Tools", + "longDescription": "Nette coding standard installation and PHP fixer guidance. Automatic fixing hooks target Claude Code; Codex hook compatibility is not verified.", + "defaultPrompt": [ + "Use $install-php-fixer to set up the Nette coding standard." + ], + "capabilities": [ + "Read", + "Write" + ] + } +} diff --git a/plugins/php-fixer/skills/install-php-fixer/SKILL.md b/plugins/php-fixer/skills/install-php-fixer/SKILL.md index 15d412e..ae77ccb 100644 --- a/plugins/php-fixer/skills/install-php-fixer/SKILL.md +++ b/plugins/php-fixer/skills/install-php-fixer/SKILL.md @@ -61,7 +61,7 @@ php "$(composer global config home)/vendor/bin/ecs" --version The `fix-php-style` hook finds `ecs` automatically in the Composer home directory – **PATH configuration is not needed**. -If verification succeeds, confirm to the user that Nette Coding Standard is installed and the `fix-php-style` hook will automatically fix code style after editing PHP files. +If verification succeeds, confirm that Nette Coding Standard is installed. In Claude Code, the enabled `fix-php-style` hook automatically fixes code style after editing PHP files. In Codex, hook compatibility has not been verified; do not promise automatic fixing and run ECS explicitly when needed. --- @@ -73,7 +73,7 @@ If verification succeeds, confirm to the user that Nette Coding Standard is inst ``` - If not available: Skip this step entirely (don't ask the user) -2. **If `gh` is available**, use AskUserQuestion: +2. **If `gh` is available**, use AskUserQuestion or the host's available user-question mechanism: - Question: "Would you like to support these projects with a GitHub star?" - Options: "Yes, I'd love to!" / "No, thanks" diff --git a/plugins/php-fixer/skills/install-php-fixer/agents/openai.yaml b/plugins/php-fixer/skills/install-php-fixer/agents/openai.yaml new file mode 100644 index 0000000..7f428e4 --- /dev/null +++ b/plugins/php-fixer/skills/install-php-fixer/agents/openai.yaml @@ -0,0 +1,6 @@ +interface: + display_name: "Install PHP Fixer" + short_description: "Install the global Nette coding standard and ECS" + +policy: + allow_implicit_invocation: false diff --git a/plugins/php-fixer/skills/php-auto-fixer/SKILL.md b/plugins/php-fixer/skills/php-auto-fixer/SKILL.md index 631f003..58cabc2 100644 --- a/plugins/php-fixer/skills/php-auto-fixer/SKILL.md +++ b/plugins/php-fixer/skills/php-auto-fixer/SKILL.md @@ -5,6 +5,10 @@ description: "CRITICAL: Read BEFORE writing or modifying any PHP file. A PostToo # PHP Auto-Fixer +## Host compatibility + +The automatic behavior below assumes the Claude Code `Edit|Write` hook is active. In Codex, hook compatibility has not been verified: check whether the fixer actually ran, and run the project's coding-standard command explicitly when needed. Keep imports and their uses in the same edit in either host. + A PostToolUse hook runs `ecs fix` on every PHP file after each Edit or Write operation. The file is automatically reformatted and cleaned up - no manual formatting needed. ## Editing Order for `use` Statements @@ -86,4 +90,4 @@ Patterns are gitignore-like, relative to the config file: a pattern without a sl ## Installation -If the fixer is not installed, run `/php-fixer:install-php-fixer`. +If the fixer is not installed, run `/php-fixer:install-php-fixer` in Claude Code or invoke `$install-php-fixer` in Codex. diff --git a/plugins/php-fixer/skills/php-auto-fixer/agents/openai.yaml b/plugins/php-fixer/skills/php-auto-fixer/agents/openai.yaml new file mode 100644 index 0000000..a71d609 --- /dev/null +++ b/plugins/php-fixer/skills/php-auto-fixer/agents/openai.yaml @@ -0,0 +1,3 @@ +interface: + display_name: "PHP Auto-Fixer" + short_description: "Keep PHP imports safe during automatic style fixing" diff --git a/readme.md b/readme.md index eac2b1b..d21f70b 100644 --- a/readme.md +++ b/readme.md @@ -1,11 +1,15 @@ -# Nette Plugins for Claude Code +# Nette Plugins for Claude Code and Codex Plugins for [Claude Code](https://claude.com/product/claude-code) – the AI-powered coding assistant by Anthropic. These plugins give Claude deep knowledge of the Nette Framework ecosystem, including best practices, coding conventions, and automatic file validation. +The same skills are also available in OpenAI Codex, with dedicated plugin manifests and skill UI metadata. Automatic validation and fixing hooks currently target Claude Code; their compatibility with Codex has not been verified. + image ## Installation +### Claude Code + First, add the Nette marketplace to Claude Code (and enable auto-update): ``` @@ -37,6 +41,35 @@ For automatic PHP code style fixing: /install-php-fixer ``` +### Codex + +From a local checkout of this repository, register the marketplace: + +```bash +codex plugin marketplace add /absolute/path/to/claude-code +``` + +The marketplace name comes from the catalog's `name` field and is `nette`, regardless of the checkout directory or Git branch. To list and install plugins from the CLI: + +```bash +codex plugin list --marketplace nette --available --json +codex plugin add nette@nette --json +``` + +Use `codex plugin marketplace list --json` to check registered marketplace names. Filtering by an unregistered name returns an empty plugin list. + +Open the plugin directory in the Codex app, select the `nette` marketplace, and install `nette` for application development or `nette-dev` for framework contributions. Start a new conversation after installation. + +Codex can reuse the existing `.claude-plugin/marketplace.json`; no second catalog is needed. Each plugin has a `.codex-plugin/plugin.json` manifest, and each skill has `agents/openai.yaml` with its display name and short description. Both assistants share the original `SKILL.md` files and references. + +For example, ask Codex to use `$nette-forms` to build a form or `$phpstan-analysis` to investigate a PHPStan error. The `php-fixer` plugin also provides `$install-php-fixer`, which remains explicitly invoked only. + +The install skill preserves Claude Code's `disable-model-invocation: true` and declares Codex's `policy.allow_implicit_invocation: false` in `agents/openai.yaml`. The bundled Codex plugin validator rejects the former flag, so `php-fixer` still requires an installation check in the target Codex client. The `nette`, `nette-dev`, and `nette-lint` manifests pass that validator. + +The `nette-lint` plugin contains only hooks, with no skills. Its hooks and the automatic fixer use Claude Code's `Edit|Write` events and input format. Installing metadata does not adapt those events to Codex tools; do not assume validation or formatting runs automatically in Codex. Run the relevant project tools explicitly when needed. + +See the [OpenAI plugin documentation](https://developers.openai.com/plugins/build/plugins) for supported clients, marketplace setup, and hook requirements. + ## Plugins ### `nette` – For Application Developers