Skip to content

chore: make the Claude plugin self-contained for directory validation - #1041

Merged
Zach Dunn (zachdunn) merged 1 commit into
mainfrom
claude/connectors-directory-timeout-0c7016
Sep 26, 2026
Merged

Zach Dunn (zachdunn) merged 1 commit into
mainfrom
claude/connectors-directory-timeout-0c7016

Conversation

@zachdunn

Copy link
Copy Markdown
Member

Why

Validating buildinternet/uploads in the Claude plugin directory's submission form timed out. The marketplace entry used source: "./", so the directory treated the whole monorepo (1,400+ files) as the plugin. Even if validation had finished, the monorepo would break the plugin-folder file limits (512 files, 256 KiB per file, no video binaries). buildinternet/releases-cli hit the same problem and fixed it the same way (releases-cli#423–#428).

What changed

  • Self-contained plugin folder. plugins/claude/uploads/ now holds the manifest, icon.svg, .mcp.json, the pre-PR hook, the three skills, and the README: 9 files. .claude-plugin/marketplace.json points source there and drops the inline skills/mcpServers.
  • Skills: root stays canonical, the plugin gets a generated copy. Root skills/ is still what the Agent Plugins spec, Codex, npx skills add, and the web worker read. The spec has no skills-path field, and a Claude plugin can't reference files outside its folder or use symlinks. pnpm plugin-skills:sync writes the copy; a new CI step (pnpm plugin-skills:check) fails on drift.
  • Manifest. Adds displayName plus docs, support, privacy, and terms URLs. The icon is found at .claude-plugin/icon.svg by default.
  • Hook. The Claude plugin's hook runs sh ${CLAUDE_PLUGIN_ROOT}/hooks/pre-pr-screenshot.sh in exec form, because the directory's subfolder rules want plain ${CLAUDE_PLUGIN_ROOT} paths. Codex keeps the root hooks/hooks.json.
  • README. The plugin README is now installer-facing and has a data and network access section. It covers the MCP server, the CLI API, and GitHub comments, and says that the hook asks the API about staged files on gh pr create.
  • Root plugin.json extension paths, the version sync/check scripts, AGENTS.md, docs/releasing.md, and a patch changeset for @uploads/plugin.

Verification

  • claude plugin validate plugins/claude/uploads and claude plugin validate . (marketplace) both pass with no warnings.
  • pnpm plugin-version:check, pnpm plugin-skills:check, and pnpm changeset:lint pass.
  • npx skills add . --list lists each skill once, with no duplicates from the copy.

After merge

Re-run Validate in the directory form with repository buildinternet/uploads and plugin path plugins/claude/uploads. If the portal flags the hook, drop hooks/ from the plugin folder.

The marketplace entry used source "./", so the Claude plugin directory
treated the whole monorepo (1,400+ files) as the plugin and validation
timed out. The plugin now lives in plugins/claude/uploads with its own
manifest, icon, .mcp.json, hook, and skills, and the marketplace points
source at that folder.

Root skills/ stays canonical for the Agent Plugins spec, Codex,
`npx skills add`, and the web worker. The plugin folder carries a
generated copy (pnpm plugin-skills:sync), and CI fails on drift
(pnpm plugin-skills:check), because a plugin can't reference files
outside its folder and the directory rejects symlinks.

The manifest gains displayName and docs, support, privacy, and terms
URLs; the plugin README gains a data and network access section. The
hook runs a script by ${CLAUDE_PLUGIN_ROOT} path in exec form.
@changeset-bot

changeset-bot Bot commented Sep 26, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 0b5ce33

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@uploads/plugin Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Sep 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (2)
  • coderabbit:review
  • review
🚫 Excluded labels (none allowed) (1)
  • wip

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 430e302e-5fad-4f53-b4a1-f2e7a96b0f0c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
uploads-auth 0b5ce33 Sep 26 2026, 02:48 PM

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
uploads-web 0b5ce33 Commit Preview URL

Branch Preview URL
Sep 26 2026, 02:49 PM

@zachdunn
Zach Dunn (zachdunn) merged commit 79a2ca1 into main Sep 26, 2026
5 checks passed
@zachdunn
Zach Dunn (zachdunn) deleted the claude/connectors-directory-timeout-0c7016 branch September 26, 2026 14:56
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