Add multi-marketplace plugin catalog for browse CLI#2254
Conversation
Mirror the stripe/link-cli plugin layout so browse can be distributed through Claude Code, Cursor, Codex/OpenAI, generic agents, and (best-effort) Grok marketplaces. Skill-only plugin (no MCP server); shared skill + assets symlinked into plugins/browse. Adds sync-plugin-version script and pins all manifests to the CLI package version. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
There was a problem hiding this comment.
2 issues found across 16 files
Confidence score: 3/5
- In
packages/cli/.codex-plugin/plugin.json, the requiredversionfield is missing, which can cause plugin validation or catalog publishing to fail if merged as-is — add the manifestversionbefore merging. - In
packages/cli/plugins/README.md, the bundled-skill install instruction usesnpx skills add browse, which can mislead users into a broken setup path and increase support churn — update the docs to the CLI wrapper command (or equivalent path+flags) before merging.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/cli/plugins/README.md">
<violation number="1" location="packages/cli/plugins/README.md:57">
P2: Install command is incorrect for bundled skill flow. Use the documented CLI wrapper (or equivalent path+flags), not `npx skills add browse`.</violation>
</file>
<file name="packages/cli/.codex-plugin/plugin.json">
<violation number="1" location="packages/cli/.codex-plugin/plugin.json:3">
P2: Codex plugin manifest is missing required `version`, which can break validation/publishing for this catalog entry.</violation>
</file>
Architecture diagram
sequenceDiagram
participant Dev as Developer
participant CLIRoot as packages/cli/
participant PluginDir as plugins/browse/
participant Skills as skills/browse/
participant Assets as assets/
participant Script as scripts/sync-plugin-version.js
Note over Dev,Script: NEW: Multi-marketplace plugin catalog structure
Dev->>CLIRoot: Create catalog manifests
CLIRoot->>CLIRoot: .claude-plugin/marketplace.json
CLIRoot->>CLIRoot: .cursor-plugin/marketplace.json
CLIRoot->>CLIRoot: .codex-plugin/plugin.json
CLIRoot->>CLIRoot: .grok-plugin/plugin.json
CLIRoot->>CLIRoot: .agents/plugins/marketplace.json
Note over CLIRoot,PluginDir: Catalog manifests reference plugin directory
CLIRoot->>PluginDir: Point to plugins/browse/ as source
PluginDir->>PluginDir: .claude-plugin/plugin.json
PluginDir->>PluginDir: .codex-plugin/plugin.json
PluginDir->>PluginDir: .cursor-plugin/plugin.json
PluginDir->>PluginDir: .grok-plugin/plugin.json
Note over PluginDir,Skills: Symlinks for single source of truth
PluginDir->>Skills: skills -> ../../skills (symlink)
Skills-->>PluginDir: Resolved SKILL.md
PluginDir->>Assets: assets -> ../../assets (symlink)
Assets-->>PluginDir: Resolved browse.svg
Note over Dev,Script: Version synchronization flow
Dev->>CLIRoot: Run pnpm sync-plugin-version
CLIRoot->>Script: Execute sync-plugin-version.js
Script->>CLIRoot: Read version from package.json
CLIRoot-->>Script: version string
Script->>Skills: Update version in SKILL.md frontmatter
alt Version changed
Skills-->>Script: Confirm update
else Already current
Skills-->>Script: No change needed
end
loop For each marketplace
Script->>PluginDir: Update plugin.json version field
PluginDir-->>Script: Confirm update or skip
end
Note over Dev,Assets: Agent marketplace discovery flow
alt Claude Code agent
Dev->>CLIRoot: claude plugin validate .
CLIRoot->>PluginDir: Resolve browse source
PluginDir-->>CLIRoot: Plugin metadata + skills
CLIRoot-->>Dev: Validation result
else Cursor agent
Dev->>CLIRoot: Cursor reads .cursor-plugin/marketplace.json
CLIRoot->>PluginDir: Resolve plugin path
PluginDir-->>CLIRoot: Plugin manifest
else Codex/OpenAI agent
Dev->>CLIRoot: Agent reads .codex-plugin/plugin.json
CLIRoot->>PluginDir: Resolve skills path
PluginDir-->>CLIRoot: Skill definition
end
Note over CLIRoot,Assets: Grok plugin flagged as best-effort
Note over CLIRoot,PluginDir: All actions run through browse CLI binary - no MCP server
Reply with feedback, questions, or to request a fix.
Fix all with cubic | Re-trigger cubic
| ```bash | ||
| browse skills install | ||
| # or | ||
| npx skills add browse |
There was a problem hiding this comment.
P2: Install command is incorrect for bundled skill flow. Use the documented CLI wrapper (or equivalent path+flags), not npx skills add browse.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/cli/plugins/README.md, line 57:
<comment>Install command is incorrect for bundled skill flow. Use the documented CLI wrapper (or equivalent path+flags), not `npx skills add browse`.</comment>
<file context>
@@ -0,0 +1,75 @@
+```bash
+browse skills install
+# or
+npx skills add browse
+```
+
</file context>
| npx skills add browse | |
| browse skills install |
| @@ -0,0 +1,38 @@ | |||
| { | |||
| "name": "browse", | |||
| "description": "Unified Browserbase CLI for browser automation and cloud APIs", | |||
There was a problem hiding this comment.
P2: Codex plugin manifest is missing required version, which can break validation/publishing for this catalog entry.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/cli/.codex-plugin/plugin.json, line 3:
<comment>Codex plugin manifest is missing required `version`, which can break validation/publishing for this catalog entry.</comment>
<file context>
@@ -0,0 +1,38 @@
+{
+ "name": "browse",
+ "description": "Unified Browserbase CLI for browser automation and cloud APIs",
+ "author": {
+ "name": "Browserbase",
</file context>
|
@justinemach can you research if grok plugins are a thing / if there's a way to do them? If not, let's remove the metadata |
We definitely need a clean "slug" to install plugins similar to how other agent plugins do it - I would check the format in http://github.com/browserbase/skills and see what feels ergonomic + the best way to do that, given that this lives in the stagehand repo |
|
It sounds like Link CLI exposes both MCP and CLI in their plugin setup - why do they do this (is it to make adoption as easy as possible)? Should we also plug our hosted Browserbase MCP here? |
What
Adds a plugin catalog for the
browseCLI (packages/cli) so it can be distributed through every major agent plugin marketplace, modeled on stripe/link-cli's layout.Marketplaces covered
.claude-plugin/marketplace.json→plugins/browse.cursor-plugin/marketplace.json→plugins/browse.codex-plugin/plugin.json(richinterfaceblock).agents/plugins/marketplace.json.grok-plugin/plugin.json— best-effort placeholder; xAI has no published plugin-marketplace spec yet (mirrors the Codex schema, flagged in a_comment)Layout
plugins/browse/with per-marketplaceplugin.jsonfiles.skills/browse/SKILL.mdandassets/browse.svgare symlinked intoplugins/browse/(the docs-recommended way to share files across plugins) — single source of truth, no duplication.scripts/sync-plugin-version.js(+pnpm sync-plugin-version) pins every manifest and the skill to the CLI'spackage.jsonversion.plugins/README.mddocuments the catalog.Notes / decisions
browseis a CLI + skill, somcpServers/.mcp.jsonare omitted; the plugin exposes./skills/and actions run through thebrowsebinary.packages/cli(not the repo root), so/plugin marketplace add browserbase/stagehandwon't auto-resolve it — install via local path or a future root pointer. Happy to add a root-levelmarketplace.jsonif we want one-line git installs.claude plugin validate .andclaude plugin validate ./plugins/browseboth pass.Open questions for review
.grok-plugin, or drop it until a real spec exists?assets/browse.svgis a placeholder.🤖 Generated with Claude Code