Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .grok-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "prerenderbuddy",
"owner": {
"name": "Prerender Buddy",
"url": "https://prerenderbuddy.com"
},
"description": "Official Prerender Buddy tools for public crawler diagnostics and optional workspace evidence.",
"plugins": [
{
"name": "prerenderbuddy",
"source": "./plugins/prerenderbuddy",
"description": "Audit crawler visibility and optionally review authenticated Prerender Buddy workspace evidence.",
"version": "0.2.1"
}
]
}
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Pro users can optionally set `PRERENDER_BUDDY_API_KEY` in the agent host environ
- Node.js 20 or newer
- `npx`
- A client that supports Agent Plugins, Agent Skills, or MCP
- Codex and Claude Code are additionally supported through native manifests
- Codex, Claude Code, and Grok Build are additionally supported through native manifests

## Package compatibility

Expand All @@ -34,6 +34,7 @@ Pro users can optionally set `PRERENDER_BUDDY_API_KEY` in the agent host environ
| Agent Plugins 1.0 | `plugin.json`, `skills/`, `mcp.json` | Portable package included |
| Codex and ChatGPT | `.codex-plugin/plugin.json`, `.mcp.json` | Local alpha tested in Codex |
| Claude Code | `.claude-plugin/plugin.json`, `.mcp.json` | Packaged; native CLI validation pending |
| Grok Build | `.grok-plugin/plugin.json`, `.mcp.json` | Native manifest included; Claude-compatible install also works |

Agent Plugins standardizes package discovery, not marketplace publication. Availability in VS Code, Cursor, GitHub Copilot, Kiro, ChatGPT, Codex, or another compatible client still depends on that client's installation and distribution support.

Expand Down Expand Up @@ -84,6 +85,26 @@ Agent Plugins support is currently in preview. Add `kopachlager/prerenderbuddy-p

Claude Code packaging is included but still awaits native CLI validation. Do not interpret portable packaging as automatic listing in any client marketplace.

### Grok Build

Grok Build reads the Claude-compatible plugin and the native `.grok-plugin` manifest.

```sh
grok plugin marketplace add kopachlager/prerenderbuddy-plugins
grok plugin install prerenderbuddy --trust
```

Or add the local MCP server without the plugin package:

```sh
grok mcp add prerenderbuddy -- npx --yes @prerenderbuddy/mcp@0.2.0
```

### Grok Bot

Grok on grok.com, iOS, and Android does not run local `npx` plugins. Add a custom MCP connector at [grok.com/connectors](https://grok.com/connectors) pointing at a public HTTPS Streamable HTTP URL from `@prerenderbuddy/mcp@0.2.1 --http`. See the [MCP README](https://github.com/kopachlager/prerenderbuddy-mcp#streamable-http--grok-bot).


## Privacy and safety

Public audit mode has no credentials, hosted API dependency, analytics, or telemetry. Optional workspace mode sends the configured key only to the documented Prerender Buddy Developer API and remains subject to API-side plan, scope, site-limit, and workspace checks. Fetched pages and saved/provider evidence are untrusted input.
Expand Down
5 changes: 3 additions & 2 deletions docs/release-readiness.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ This document separates implemented compatibility from external publication and
- Local `@prerenderbuddy/mcp@0.2.0` stdio server.
- Optional read-only Pro workspace evidence through the scoped Developer API.
- Agent Plugins 1.0 root manifest and MCP configuration.
- Native Codex and Claude Code manifests.
- Codex and Claude marketplace descriptors.
- Native Codex, Claude Code, and Grok Build manifests.
- Codex, Claude, and Grok marketplace descriptors.
- Portable/native manifest parity validation.
- Vendored Agent Plugins 1.0 schemas with automated JSON Schema validation.
- Node.js 20, 22 and 24 CI matrix.
Expand All @@ -24,6 +24,7 @@ This document separates implemented compatibility from external publication and
- Codex plugin validation passes.
- Local Codex installation and cache refresh pass.
- MCP initialization and required tool discovery pass.
- Grok Build plugin validation passes for the native package.
- Dependency audit reports no known vulnerabilities.

## External gates before public release
Expand Down
21 changes: 21 additions & 0 deletions plugins/prerenderbuddy/.grok-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "prerenderbuddy",
"version": "0.2.1",
"description": "Audit public crawler visibility and optionally review authenticated Prerender Buddy workspace evidence.",
"author": {
"name": "Prerender Buddy",
"url": "https://prerenderbuddy.com"
},
"homepage": "https://prerenderbuddy.com/developer-tools",
"repository": "https://github.com/kopachlager/prerenderbuddy-plugins",
"license": "Apache-2.0",
"keywords": [
"crawler",
"seo",
"mcp",
"indexing",
"visibility"
],
"skills": "./skills/",
"mcpServers": "./.mcp.json"
}
2 changes: 1 addition & 1 deletion plugins/prerenderbuddy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ This package contains:
- one public crawler-visibility Agent Skill;
- one authenticated workspace-review Agent Skill;
- a local Prerender Buddy MCP server configuration;
- native compatibility manifests for Codex and Claude Code.
- native compatibility manifests for Codex, Claude Code, and Grok Build.

The MCP server runs through `npx --yes @prerenderbuddy/mcp@0.2.0`. It requires Node.js 20 or newer. Its three public audit tools need no account, API key, analytics, or telemetry. When `PRERENDER_BUDDY_API_KEY` is available to the MCP process, it also registers read-only workspace tools backed by the scoped Pro Developer API. Restart the agent host after adding or changing the key.

Expand Down
11 changes: 10 additions & 1 deletion scripts/validate.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,26 @@ const fail = (message) => {

const codex = await readJson("plugins/prerenderbuddy/.codex-plugin/plugin.json");
const claude = await readJson("plugins/prerenderbuddy/.claude-plugin/plugin.json");
const grok = await readJson("plugins/prerenderbuddy/.grok-plugin/plugin.json");
const portable = await readJson("plugins/prerenderbuddy/plugin.json");
const portableMcp = await readJson("plugins/prerenderbuddy/mcp.json");
const nativeMcp = await readJson("plugins/prerenderbuddy/.mcp.json");
const portablePluginSchema = await readJson("schemas/agent-plugins/1.0.0/plugin.schema.json");
const portableMcpSchema = await readJson("schemas/agent-plugins/1.0.0/mcp.schema.json");
const codexMarketplace = await readJson(".agents/plugins/marketplace.json");
const claudeMarketplace = await readJson(".claude-plugin/marketplace.json");
const grokMarketplace = await readJson(".grok-plugin/marketplace.json");
const evals = await readJson("evals/crawler-visibility-audit.json");
const workspaceEvals = await readJson("evals/workspace-discoverability-review.json");

for (const manifest of [codex, claude]) {
for (const manifest of [codex, claude, grok]) {
if (manifest.name !== "prerenderbuddy") fail("Plugin names must match.");
if (manifest.mcpServers !== "./.mcp.json") fail("Manifest must use the shared MCP config.");
if (manifest.skills !== "./skills/") fail("Manifest must use the shared skills directory.");
}
if (!/^0\.2\.1(?:\+codex\.[0-9]+)?$/.test(codex.version)) fail("Unexpected Codex plugin version.");
if (claude.version !== "0.2.1") fail("Unexpected Claude plugin version.");
if (grok.version !== "0.2.1") fail("Unexpected Grok plugin version.");
if (portable.version !== "0.2.1") fail("Unexpected portable plugin version.");

const ajv = new Ajv2020({ allErrors: true, strict: true });
Expand Down Expand Up @@ -79,6 +82,12 @@ if (claudeMarketplace.plugins?.[0]?.name !== "prerenderbuddy") fail("Claude mark
if (claudeMarketplace.plugins?.[0]?.source !== "./plugins/prerenderbuddy") {
fail("Claude marketplace source is incorrect.");
}
if (grokMarketplace.plugins?.[0]?.name !== "prerenderbuddy") fail("Grok marketplace plugin name is incorrect.");
if (grokMarketplace.plugins?.[0]?.source !== "./plugins/prerenderbuddy") {
fail("Grok marketplace source is incorrect.");
}
if (grokMarketplace.name !== "prerenderbuddy") fail("Unexpected Grok marketplace name.");
if (JSON.stringify(grok) !== JSON.stringify(claude)) fail("Grok and Claude plugin manifests must match.");
if (codexMarketplace.name !== "prerenderbuddy") fail("Unexpected Codex marketplace name.");
if (claudeMarketplace.name !== "prerenderbuddy") fail("Unexpected Claude marketplace name.");
if (!Array.isArray(evals.cases) || evals.cases.length < 6) fail("Evaluation coverage is incomplete.");
Expand Down
Loading