Skip to content

feat(openai): plugin for ChatGPT and Codex in the shared skills layout - #2

Open
imoital wants to merge 15 commits into
feat/shared-descriptionfrom
feat/openai
Open

imoital wants to merge 15 commits into
feat/shared-descriptionfrom
feat/openai

Conversation

@imoital

@imoital imoital commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

Moves the OpenAI host in. This is the second host after Claude (#1) and is independent of it. Whichever PR merges second needs a small rebase of the release-please files and the README hosts list.

What changes

  • platforms/openai/, from openai-zenrows v0.1.8:
    • plugin.json, including the whole extensions.com.openai block (listing, review test cases, publication);
    • mcp.json, with OAuth DCR;
    • the README;
    • the getting-started slot;
    • vars.yaml: host "the model", host_full "ChatGPT and Codex", connection "Zenrows plugin".
  • Host tooling stays in the host's folder. platforms/<host>/scripts/ is reserved, like skills/, and never ships:
    • platforms/openai/scripts/validate.mjs holds OpenAI's submission limits, moved from openai-zenrows. npm run validate runs it on dist/openai.
    • platforms/openai/scripts/package.sh builds the upload ZIP. Run it with npm run package -- openai. Hosts without one are told they need no packaging.
  • The schema check ignores extensions on an MCP server entry. That's where OpenAI declares OAuth, and the Agent Plugins MCP schema doesn't list it.
  • release-please package dist/openai starts at 0.1.8.
  • The contact email is now integrations@zenrows.com.

What users will see

Small changes:

  • the getting-started description now says "in ChatGPT and Codex";
  • the 401 hint says "reconnect Zenrows the same way as above" instead of "from the Zenrows plugin".

Checked

  • dist/openai vs openai-zenrows: the only differences are the two above, plus the email, repository and maintainer commands in the README.
  • render --check and validate pass. dist/copilot is unchanged.
  • The ZIP has the same file list as the old package.sh output.
  • A too-long shortDescription makes validate fail through the OpenAI check.
  • A stray file in platforms/openai/scripts/ also makes validate fail.

Not in this PR

  • Submitting stays manual through the OpenAI portal.
  • openai-zenrows itself is unchanged.

platforms/<host>/scripts/ is now reserved like skills/: render never copies it
into dist/. npm run validate runs platforms/<host>/scripts/validate.mjs on
dist/<host> when it exists, and npm run package -- <host> runs its package.sh.

The schema check also ignores "extensions" on an MCP server entry, where
OpenAI declares OAuth; the Agent Plugins MCP schema doesn't list it.
Moves openai-zenrows (v0.1.8) into platforms/openai with its listing and
review fields, OAuth mcp.json and the getting-started slot. Its submission
checks and ZIP build move to platforms/openai/scripts. The getting-started
description now names ChatGPT and Codex. Contact email is
integrations@zenrows.com.
@imoital

imoital commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator Author

Diff with the original repo

ZenRows/openai-zenrows at 63e8ce5 → dist/openai in this PR. That's what users of this host would get, compared with what they have today.

Changed or added (3 files): README.md, plugin.json, skills/getting-started/SKILL.md

Not carried over into the plugin:

  • .github/workflows/validate.yml: replaced by the repo CI (render --check + validate, which runs the OpenAI checks)
  • .gitignore: repo-level .gitignore
  • CHANGELOG.md: not kept: release notes go on the GitHub releases (skip-changelog)
  • scripts/package.sh: now platforms/openai/scripts/package.sh (npm run package -- openai)
  • scripts/validate.mjs: now platforms/openai/scripts/validate.mjs, run by npm run validate
Full diff (66 lines)
diff --git a/openai-zenrows/README.md b/dist/openai/README.md
index c70a347..2fd9f43 100644
--- a/openai-zenrows/README.md
+++ b/dist/openai/README.md
@@ -30,18 +30,18 @@ The plugin sends the URLs and options you ask the model to fetch to Zenrows, whi
 ## Support
 
 - Documentation: [docs.zenrows.com](https://docs.zenrows.com)
-- Contact: [success@zenrows.com](mailto:success@zenrows.com)
+- Contact: [integrations@zenrows.com](mailto:integrations@zenrows.com)
 
 ## For maintainers
 
 The package follows OpenAI's [plugin package format](https://developers.openai.com/plugins/build/plugins): a root `plugin.json` (Agent Plugins schema, with the listing, review and publication fields under `extensions.com.openai`), a root `mcp.json`, `skills/` and `assets/`.
 
 ```
-node scripts/validate.mjs    # checks the documented submission limits
-bash scripts/package.sh      # validates, then builds dist/zenrows-<version>.zip
+npm run validate              # includes the submission limits, from platforms/openai/scripts/validate.mjs
+npm run package -- openai     # validates, then builds .cache/packages/openai-zenrows-<version>.zip
 ```
 
-`scripts/validate.mjs` encodes the limits from OpenAI's [manifest field reference](https://developers.openai.com/plugins/deploy/submission#automatically-provide-submission-and-review-information) and [submission error reference](https://developers.openai.com/plugins/deploy/submission-errors). CI runs it on every push.
+`platforms/openai/scripts/validate.mjs` in [zenrows-integrations](https://github.com/ZenRows/zenrows-integrations) encodes the limits from OpenAI's [manifest field reference](https://developers.openai.com/plugins/deploy/submission#automatically-provide-submission-and-review-information) and [submission error reference](https://developers.openai.com/plugins/deploy/submission-errors). CI runs it on every push.
 
 Things to know before submitting:
 
diff --git a/openai-zenrows/plugin.json b/dist/openai/plugin.json
index a10d893..4201c92 100644
--- a/openai-zenrows/plugin.json
+++ b/dist/openai/plugin.json
@@ -5,11 +5,11 @@
   "description": "Live web data for ChatGPT and Codex: read pages, extract structured data, run batch jobs and site crawls, and drive hosted browser sessions through the Zenrows MCP server.",
   "author": {
     "name": "Zenrows",
-    "email": "success@zenrows.com",
+    "email": "integrations@zenrows.com",
     "url": "https://www.zenrows.com"
   },
   "homepage": "https://docs.zenrows.com",
-  "repository": "https://github.com/ZenRows/openai-zenrows",
+  "repository": "https://github.com/ZenRows/zenrows-integrations",
   "license": "MIT",
   "keywords": ["web-scraping", "data-extraction", "browser-automation", "crawl", "mcp", "zenrows"],
   "extensions": {
diff --git a/openai-zenrows/skills/getting-started/SKILL.md b/dist/openai/skills/getting-started/SKILL.md
index 329cb77..85b3e3d 100644
--- a/openai-zenrows/skills/getting-started/SKILL.md
+++ b/dist/openai/skills/getting-started/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: getting-started
-description: First-run setup and troubleshooting for the Zenrows plugin. Use when the plugin was just installed, a Zenrows tool is missing or "not available", Zenrows returns a 401 or AUTH003, the Zenrows account needs connecting, or the user asks whether Zenrows is set up. Not for normal scraping tasks once the plugin works (use scrape-webpage).
+description: First-run setup and troubleshooting for the Zenrows plugin in ChatGPT and Codex. Use when the plugin was just installed, a Zenrows tool is missing or "not available", Zenrows returns a 401 or AUTH003, the Zenrows plugin needs sign-in, or the user asks whether Zenrows is set up. Not for normal scraping tasks once the plugin works (use scrape-webpage).
 ---
 
 # Getting started
@@ -16,7 +16,7 @@ First confirm the Zenrows tools (`scrape`, `browser_*`) are available in this se
 - Tools missing entirely: the Zenrows account is not connected yet. Ask the user to connect it from the Zenrows plugin, sign in to Zenrows and approve access.
 - Tools present: call `scrape(url='https://httpbin.io/get', response_type='plaintext')` and branch:
   - 200 with a body: Zenrows is working. Go to step 2.
-  - 401 or `AUTH003`: the sign-in is missing or no longer valid. Ask the user to reconnect their Zenrows account from the Zenrows plugin, then retry. Do not ask for an API key.
+  - 401 or `AUTH003`: the sign-in is missing or no longer valid. Ask the user to reconnect Zenrows the same way as above, then retry. Do not ask for an API key.
   - `AUTH004` or `AUTH014`: Zenrows is connected, but the account's credits or this API key's credit cap are used up. Reconnecting won't help. Tell the user to check their usage and plan in the Zenrows dashboard.
 
 ## 2. First successful scrape

tedi-z
tedi-z previously approved these changes Nov 5, 2026
# Conflicts:
#	CONTRIBUTING.md
#	package.json
@imoital
imoital requested a review from a team as a code owner November 9, 2026 08:49
platforms/<host>/scripts/ is now reserved like skills/: render never copies it
into dist/. npm run validate runs platforms/<host>/scripts/validate.mjs on
dist/<host> when it exists, and npm run package -- <host> runs its package.sh.
shared/text/<name>.md holds one fact in plain text. A skill inlines it with
{{< name}}; code uses {{text:name}}, a quoted string literal. using-zenrows
and extract-structured-data now take AUTH004, AUTH014, AUTH006 and REQS007's
page_not_recognised from there; every plugin renders byte-identically.
Validate fails on a snippet with markdown, more than one line, or no user.

kind: code in vars.yaml makes a host whose output isn't a plugin (code for
another project, or a marketplace listing): it ships only its own files, with
{{...}} filled in .ts/.js too, no skills, LICENSE, assets or plugin.json, keeps
its README out of dist, needs no release-please entry yet, and may keep a
scripts/check.sh.
Per-host scripts (validate.mjs, package.sh, npm run package) are only used by
the OpenAI plugin, and check.sh and the AUTH/REQS007 snippets only by the
Activepieces piece: they stay with those hosts. What's left is what any code
host needs: kind: code, and shared/text with {{< name}} and {{text:name}}.
Comments and CONTRIBUTING describe any code host, a piece or a listing.
@imoital
imoital requested a review from tedi-z November 10, 2026 11:45
# Conflicts:
#	CONTRIBUTING.md
#	scripts/lib.mjs
#	scripts/validate.mjs
scripts/ is the host's own and never ships; validate.mjs and package.sh keep their meaning, and anything else is the host's to run. No allow-list to extend per tool.
…at/openai

# Conflicts:
#	CONTRIBUTING.md
#	scripts/lib.mjs
The host keeps only its own sections in platforms/openai/readme/, and its manifests use the shared description.
@imoital
imoital changed the base branch from main to feat/shared-description November 13, 2026 17:58

This branch has not been deployed

No deployments
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.

2 participants