Skip to content

fix(marketplace): use object source so Claude Cowork remote sync succeeds (#2542)#2555

Open
gaurav0107 wants to merge 2 commits into
affaan-m:mainfrom
gaurav0107:fix/2542-marketplace-sync-cowork-object-source
Open

fix(marketplace): use object source so Claude Cowork remote sync succeeds (#2542)#2555
gaurav0107 wants to merge 2 commits into
affaan-m:mainfrom
gaurav0107:fix/2542-marketplace-sync-cowork-object-source

Conversation

@gaurav0107

Copy link
Copy Markdown
Contributor

Fixes #2542

What Changed

.claude-plugin/marketplace.json — the single plugin entry's source changes
from the string "./" to the object form:

"source": { "source": "github", "repo": "affaan-m/ECC" }

Plus a regression assertion in tests/plugin-manifest.test.js.

Why This Change

Adding the ECC marketplace in Claude Desktop (CoWork) fails with:

Marketplace Sync failed. Check the repository-URL and try again.

The manifest itself is not broken: a local /plugin marketplace add affaan-m/ECC (and https://github.com/affaan-m/ECC) in the Claude Code CLI
succeeds, and claude plugin validate .claude-plugin/marketplace.json
passes. The failure is specific to CoWork's remote sync, which clones the
repo server-side and validates with a stricter rule. Its logs
(~/Library/Logs/Claude/claude.ai-web.log) report:

MARKETPLACE_ERROR:REMOTE_SYNC_FAILED [remoteMarketplaceOps] sync did not succeed
(status: failed_content): {"plugins":[{"name":"ecc","error":"External plugin
sources must be objects with a 'source' field (github, url, or git-subdir)."}]}

Remote sync rejects string/relative plugin sources; it requires each
plugin's source to be an object whose source field is one of github,
url, or git-subdir. The local CLI tolerates the "./" shorthand — which is
exactly why the CLI works while CoWork does not. The ECC plugin lives at the
repository root, so github (whole-repo) is the correct object source; no
path/git-subdir is needed.

This is the same class of fix applied for Codex in #2128 (which moved
.agents/plugins/marketplace.json off a "./" root source), now applied to the
Claude manifest. Confirmed against the same failure/fix pattern reported in
other plugin repos (e.g. Kntnt/kntnt-text-skills#46, Kntnt/kntnt-code-skills#11).

Testing Done

  • node tests/plugin-manifest.test.js → 64 passed (incl. new #2542
    source-shape assertion and all existing marketplace/version assertions).
  • node tests/docs/install-identifiers.test.js → 26 passed.
  • node scripts/ci/validate-install-manifests.js → OK.
  • node tests/ci/validators.test.js → 166 passed.
  • claude plugin validate .claude-plugin/marketplace.json → Validation passed.
  • Regression (local CLI, isolated CLAUDE_CONFIG_DIR):
    claude plugin marketplace add <clone> → Successfully added; then
    claude plugin install ecc@ecc → Successfully installed. No regression to the
    local add/install path.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)

Security & Quality Checklist

  • Change is limited to a manifest field + a test assertion; no executable
    code paths touched.
  • All other manifest fields unchanged (name, version, description, author,
    keywords, category, tags, strict).
  • No secrets, tokens, or new dependencies introduced.
  • Object source pins to public GitHub coordinates matching this repo.

Documentation

No docs change required — install identifiers (ecc@ecc) and the documented
/plugin marketplace add https://github.com/affaan-m/ECC flow are unchanged;
only the resolution shape used by CoWork's remote sync is corrected. Existing
install-identifiers doc tests remain green.

…eeds (affaan-m#2542)

Adding the ECC marketplace in Claude Desktop (Cowork) fails with "Marketplace
Sync failed. Check the repository-URL and try again." Cowork's remote
(server-side clone) sync rejects string/relative plugin sources:

  External plugin sources must be objects with a 'source' field
  (github, url, or git-subdir).

The local `/plugin marketplace add` in the Claude Code CLI tolerates the "./"
shorthand, which is why the CLI succeeds while Cowork fails. Convert the single
plugin entry's source from "./" to the github object form. The ecc plugin lives
at the repo root, so github (whole-repo) is the correct object source; no path
or git-subdir is needed. All other fields (name, version, description, ...) are
unchanged.

Adds a regression assertion in tests/plugin-manifest.test.js that the Claude
marketplace source stays an object (github|url|git-subdir), mirroring the
existing affaan-m#2128 Codex source-shape guard.
@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2e852032-cee7-440b-859b-58576afd085c

📥 Commits

Reviewing files that changed from the base of the PR and between 54077be and 591b9bc.

📒 Files selected for processing (1)
  • .claude-plugin/marketplace.json
📜 Recent review details
⏰ Context from checks skipped due to timeout. (27)
  • GitHub Check: Test (windows-latest, Node 22.x, yarn)
  • GitHub Check: Test (windows-latest, Node 22.x, npm)
  • GitHub Check: Test (macos-latest, Node 22.x, bun)
  • GitHub Check: Test (macos-latest, Node 20.x, pnpm)
  • GitHub Check: Test (windows-latest, Node 20.x, npm)
  • GitHub Check: Test (macos-latest, Node 22.x, pnpm)
  • GitHub Check: Test (macos-latest, Node 20.x, yarn)
  • GitHub Check: Test (windows-latest, Node 18.x, pnpm)
  • GitHub Check: Test (windows-latest, Node 22.x, pnpm)
  • GitHub Check: Test (ubuntu-latest, Node 22.x, npm)
  • GitHub Check: Test (windows-latest, Node 20.x, yarn)
  • GitHub Check: Test (ubuntu-latest, Node 22.x, yarn)
  • GitHub Check: Test (windows-latest, Node 18.x, yarn)
  • GitHub Check: Test (ubuntu-latest, Node 20.x, bun)
  • GitHub Check: Test (windows-latest, Node 20.x, pnpm)
  • GitHub Check: Test (ubuntu-latest, Node 22.x, pnpm)
  • GitHub Check: Test (ubuntu-latest, Node 18.x, pnpm)
  • GitHub Check: Test (windows-latest, Node 18.x, npm)
  • GitHub Check: Test (ubuntu-latest, Node 20.x, pnpm)
  • GitHub Check: Test (ubuntu-latest, Node 22.x, bun)
  • GitHub Check: Test (ubuntu-latest, Node 20.x, yarn)
  • GitHub Check: Greptile Review
  • GitHub Check: Test (ubuntu-latest, Node 18.x, yarn)
  • GitHub Check: Test (ubuntu-latest, Node 18.x, npm)
  • GitHub Check: Test (ubuntu-latest, Node 20.x, npm)
  • GitHub Check: Test (ubuntu-latest, Node 18.x, bun)
  • GitHub Check: Coverage
🔇 Additional comments (1)
.claude-plugin/marketplace.json (1)

13-16: LGTM!


📝 Walkthrough

Summary by CodeRabbit

  • Improvements
    • Updated the Claude marketplace plugin listing to reference its GitHub repository as the source.
  • Tests
    • Added automated validation to ensure the marketplace plugin manifest’s source field uses the supported structured format, including correct repo details for the GitHub source.

Walkthrough

The Claude marketplace manifest now points to the GitHub repository through a structured source object. Tests validate the object format, supported source providers, and expected repository.

Changes

Claude marketplace integration

Layer / File(s) Summary
GitHub source format and validation
.claude-plugin/marketplace.json, tests/plugin-manifest.test.js
The ecc plugin source uses { source: "github", repo: "affaan-m/ECC" }, with tests validating the source object and repository.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: affaan-m

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the manifest source-format fix that enables Claude remote sync.
Description check ✅ Passed The description matches the change and explains the CoWork sync failure it fixes.
Linked Issues check ✅ Passed The PR addresses #2542 by switching the marketplace source to the supported GitHub object form and adding coverage.
Out of Scope Changes check ✅ Passed The changes stay within the manifest fix and regression test, with no unrelated scope introduced.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@gaurav0107
gaurav0107 marked this pull request as ready for review July 23, 2026 20:53
@gaurav0107
gaurav0107 requested a review from affaan-m as a code owner July 23, 2026 20:53
@greptile-apps

greptile-apps Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes a CoWork remote marketplace sync failure by changing the ecc plugin's source field from the string shorthand "./" to the object form { "source": "github", "repo": "affaan-m/ECC" } required by the server-side validator. A matching regression test is added to prevent regressing to a string source.

  • .claude-plugin/marketplace.json: source updated from "./" to { "source": "github", "repo": "affaan-m/ECC" } — the only valid form accepted by CoWork's strict remote-sync validator.
  • tests/plugin-manifest.test.js: New #2542 regression assertion verifies the source is an object with a valid source field and the correct repo value, guarding against future regressions.

Confidence Score: 5/5

Safe to merge — a minimal, targeted fix to a single manifest field with a well-scoped regression test.

The change touches only one JSON field in a manifest file and adds one regression test. The fix is mechanically correct (object source with valid github type and matching repo coordinate), the test assertions cover all three valid source field values and pin the GitHub repo name, and the PR description confirms the existing test suite passes end-to-end with no regression to the local CLI path.

No files require special attention.

Important Files Changed

Filename Overview
.claude-plugin/marketplace.json Changes the source field for the ecc plugin entry from the string "./" to the object form { "source": "github", "repo": "affaan-m/ECC" }, which is required for Claude CoWork remote sync to succeed.
tests/plugin-manifest.test.js Adds a regression test (#2542) that asserts plugins[0].source is an object with a valid source field (github, url, or git-subdir) and, when github, verifies the repo value matches this repository. Test coverage is thorough.

Sequence Diagram

sequenceDiagram
    participant Dev as Developer
    participant CLI as Claude Code CLI
    participant CoWork as Claude CoWork (Remote)
    participant GH as GitHub (affaan-m/ECC)

    Dev->>CLI: /plugin marketplace add affaan-m/ECC
    CLI->>CLI: Validate marketplace.json (local, lenient)
    CLI-->>Dev: Success (string "./" tolerated)

    Dev->>CoWork: Add ECC marketplace (remote sync)
    CoWork->>GH: Clone repo server-side
    CoWork->>CoWork: Validate marketplace.json (strict)
    Note over CoWork: Before fix: source = "./" REJECTED<br/>After fix: source = {source:"github", repo:"affaan-m/ECC"} ACCEPTED
    CoWork-->>Dev: Sync succeeded (after fix)
Loading

Reviews (2): Last reviewed commit: "Merge remote-tracking branch 'upstream/m..." | Re-trigger Greptile

…e-sync-cowork-object-source

# Conflicts:
#	.claude-plugin/marketplace.json

@daltino daltino left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR fixes an issue with Claude Cowork's remote sync by updating the plugin source in marketplace.json to an object rather than a string, which matches the expected format for remote marketplace syncing. It also adds a test to validate this behavior moving forward, ensuring the source field is properly configured. The changes are clear, minimal, and align well with the contribution guidelines and repository's focus on reliable workflows.

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.

Marketplace sync fails in Claude Desktop (Cowork)

2 participants