Repository navigation
Move the shipped plugin into plugin/ - #52
Merged
Merged
Conversation
Keep dev tooling, CI, and docs at the repository root. Marketplace catalogs point at plugin/ so client installs resolve that directory. Co-authored-by: Teal Larson <LARSON.TEAL@GMAIL.COM>
teallarson
marked this pull request as ready for review
October 22, 2026 20:03
…er-96e0 # Conflicts: # dev/scripts/generate-manifests.mjs # dev/test/generate-manifests.test.mjs Co-authored-by: Teal Larson <LARSON.TEAL@GMAIL.COM>
Contributor
There was a problem hiding this comment.
Cursor Bugbot reviewed f71c2a3 with no findings, and check passed. Approved automatically because teallarson has write access.
Cursor's local loader reads .cursor-plugin/plugin.json in the folder it was given. Generate that manifest and its hooks file with paths into plugin/, so a plain clone loads. Marketplace source stays plugin. Co-authored-by: Teal Larson <LARSON.TEAL@GMAIL.COM>
Contributor
There was a problem hiding this comment.
Cursor Bugbot reviewed dba4ac4 with no findings, and check passed. Approved automatically because teallarson has write access.
teallarson
enabled auto-merge (squash)
October 22, 2026 21:38
kamath
approved these changes
Oct 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Linear ticket: none
What/why
People who install Arcade get the plugin directory only. Skills, the gateway, the operator, and client manifests still install the same way. Dev tooling, tests, and CI stay in the repository and are no longer part of the installed tree.
Cursor team import of
https://github.com/ArcadeAI/arcade-pluginstill works. Claude Code, Codex, Copilot CLI, and VS Code Chat: Install Plugin From Source still install from that repository URL. An individual Cursor install can clone the repository into~/.cursor/plugins/local/arcade-plugin. The root.cursor-plugin/plugin.jsonpoints intoplugin/, so the local loader reads the skills and the session hook. Copyingplugin/into~/.cursor/plugins/local/arcadestill works.Codebase changes
Shipped files move under
plugin/: manifests, skills, agents, commands, hooks, client folders, assets,VERSION,README.md, and a copy ofLICENSE. The generator writes those outputs with aplugin/prefix and keeps.claude-plugin/marketplace.json(source./plugin) and a new.cursor-plugin/marketplace.json(sourceplugin) at the repository root. ChatGPT ZIP entries stay relative to the plugin root.dev/remains the package root. The generator also writes a repo-root.cursor-plugin/plugin.jsonand.cursor-plugin/hooks.jsonso a plain clone loads in Cursor's local plugins directory; marketplace source staysplugin.Additional notes
After release, directory listings need the new path: Claude directory plugin path
plugin; Copilot external plugin pathpluginon a new tag or SHA; Cursor logo URL underplugin/assets/logo.png; x.ai catalog entry pathplugin.No
.agents/plugins/marketplace.json. Codex still installs from.claude-plugin/marketplace.json, and that path is whatverify:codexexercises..github/workflows/check.ymlhas no separate generated-file step;npm testrunsgenerate --check.Local checks from
dev/, afternpm ci:npm run generatethennpm run generate -- --check(clean),npm test(205 passed, 2 skipped, 0 failed),npm run typecheck, andnpm run verify(Claude validate--stricton the marketplace and onplugin/, Claude install, Cursor validator, Codex, Copilot). Cursor's validator warns thathooks/hooks.jsonis absent; hooks stay in the client folders. That validator follows marketplace sourcepluginand does not read the repo-root Cursor manifest.Appendix: install paths after
plugin/Checked against current client docs and, where a CLI is in
dev/node_modules, against this checkout. Cursor's IDE and VS Code were not launched here.Cursor local clone loads. Test plugins locally treats each folder in
~/.cursor/plugins/localas the plugin root and looks for.cursor-plugin/plugin.json, then.claude-plugin/plugin.json, thenplugin.json. The repo-root.cursor-plugin/plugin.jsonpoints skills, agents, commands, rules, and the logo intoplugin/..cursor-plugin/hooks.jsonrunsplugin/hooks/session-start.mjs. A clone at~/.cursor/plugins/local/arcade-pluginloads. Copying onlyplugin/still loadsplugin/.cursor-plugin/plugin.json. Symlinks out ofplugins/localstay ignored.Public docs in ArcadeAI/docs
content/docs/get-started/agent-plugin/index.mdxcan keep cloning into~/.cursor/plugins/local/arcade-plugin, then Developer: Reload Window. To update,git pullin that clone and reload. This repo'sdocs/install/cursor.mdsays the same.Cursor team import stays. Paste
https://github.com/ArcadeAI/arcade-plugin. How resolution works: sourcepluginloadsplugin/.cursor-plugin/plugin.json.verify:cursorpassed on this tree.VS Code Install Plugin From Source stays. Pasting
https://github.com/ArcadeAI/arcade-pluginstill installs Arcade. In current VS CodepluginInstallService.ts,_doInstallFromSourcescans marketplace files, including.claude-plugin/marketplace.json, and installs those plugins when the scan returns any.parsePluginSource/normalizeMarketplacePathturns source./plugininto relative pathplugin.getPluginInstallUrijoins that path onto the clone. The root-manifest fallback runs only when the scan returns no plugins.chat.pluginLocationsstill has to name theplugindirectory (plugin/plugin.json).docs/install/vscode.mdstates both.Claude Code, Codex, and Copilot CLI marketplace add stay. Each command adds this repository and installs
arcade@arcade. Source./pluginis the plugin directory from the repository root (Claude marketplace reference; Copilot marketplace source, where./pluginandpluginare the same directory).claude plugin marketplace addof this checkout, thenclaude plugin install arcade@arcade, installedarcade@arcade0.8.1 withskills/try-arcade/SKILL.mdand without repository-rootAGENTS.mdordev/.codex plugin marketplace addof this checkout, thencodex plugin add arcade@arcade, loaded thearcadeMCP server and both skills from the plugin directory.copilot plugin marketplace addof this checkout, thencopilot plugin install arcade@arcade. The CLI reported the plugin loaded live fromplugin/and loaded the MCP server and both skills.plugins1.3.4discoveron this checkout found one local plugin,arcade, with 2 skills, 3 commands, and 1 agent, via.claude-plugin/marketplace.jsonsource./plugin.Note
Medium Risk
Broad layout change to install paths, generated manifests, and client verify flows; wrong marketplace or Cursor root manifests would break installs without affecting runtime auth or gateway behavior.
Reviewed by Cursor Bugbot for commit dba4ac4. Bugbot is set up for automated code reviews on this repo. Configure here.