Skip to content

feat: adds Claude Desktop marketplace support - #7152

Merged
akshaydeo merged 1 commit into
devfrom
feat/09-14-feat_adds_claude_desktop_marketplace_support
Sep 14, 2026
Merged

akshaydeo merged 1 commit into
devfrom
feat/09-14-feat_adds_claude_desktop_marketplace_support

Conversation

@danpiths

Copy link
Copy Markdown
Collaborator

Summary

Add Git-backed Claude Desktop and Cowork marketplace registration for skills
stored in Bifrost, while preserving the existing Claude Code marketplace flow.

Changes

Claude Code can register the existing marketplace through its direct JSON URL:

/api/skills/serve/claude-code/.claude-plugin/marketplace.json

Claude Desktop and Cowork use a different contract. Their marketplace form
expects a cloneable Git repository URL and rejects the direct JSON URL. It also
requires a full non-GitHub Git URL to look like a repository URL, including the
.git suffix.

This PR adds the following endpoint:

/api/skills/serve/claude-code.git

The endpoint implements the two Git smart HTTP requests used during a clone:

GET  /api/skills/serve/claude-code.git/info/refs?service=git-upload-pack
POST /api/skills/serve/claude-code.git/git-upload-pack

The generated repository contains one file:

.claude-plugin/
└── marketplace.json

Each marketplace entry continues to point to the existing per-skill Git
repository. Skill data is not copied into the marketplace repository.

Claude Desktop / Cowork
        │
        │ git clone /api/skills/serve/claude-code.git
        ▼
.claude-plugin/marketplace.json
        │
        │ source.url
        ▼
/api/skills/serve/claude-code/plugins/bifrost-<skill-name>
        │
        │ git clone
        ▼
.claude-plugin/plugin.json
skills/<skill-name>/SKILL.md

The existing Claude marketplace JSON generation is now shared by both delivery
paths:

                         ┌─ direct JSON response for Claude Code
marketplace JSON builder ┤
                         └─ generated Git repository for Desktop/Cowork

The Skills Repository UI now offers three registration choices:

  • Claude Desktop / Cowork copies the Git repository URL.
  • Claude Code copies the existing CLI command.
  • Codex copies the existing CLI command.

Git remains an optional runtime dependency. If an image does not contain Git,
Bifrost keeps the existing behavior of not registering Git-backed marketplace
and plugin routes. Images that need this feature must install Git separately.

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Chore/CI

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (React)
  • Docs

How to test

Automated verification

From transports/:

go test ./bifrost-http/handlers \
  -run 'Test(SkillsServingGenericFileDownloadDecodesEncodedPathParams|ClaudeMarketplaceGitRepoContainsMarketplaceAndCloneablePlugin)$'

The new test starts an HTTP server and performs two real Git clones. It verifies
that:

  1. the Claude marketplace repository clones successfully;
  2. .claude-plugin/marketplace.json exists;
  3. the catalog advertises the expected per-skill Git URL;
  4. the advertised plugin repository clones successfully;
  5. .claude-plugin/plugin.json and skills/<skill-name>/SKILL.md exist; and
  6. the original raw marketplace JSON endpoint still works.

From ui/:

npx oxlint app/workspace/skills-repo/components/skillListView.tsx

Expected result: zero errors. The file currently reports two pre-existing
unused-parameter warnings unrelated to this PR.

Manual Claude Desktop / Cowork verification

Run Bifrost from an image that contains Git, then verify the endpoint directly:

git clone http://localhost:8080/api/skills/serve/claude-code.git

The clone should contain .claude-plugin/marketplace.json.

Then:

  1. open the Bifrost Skills Repository;
  2. select Register as Marketplace;
  3. copy the Claude Desktop / Cowork URL;
  4. in Claude, open Customize → Plugins → Personal plugins;
  5. add a marketplace from a repository and paste the copied URL;
  6. install and enable a Bifrost skill; and
  7. start a new chat and invoke the skill with its / command.

This flow was tested with:

http://localhost:8080/api/skills/serve/claude-code.git

Claude registered the marketplace, installed the plugin, loaded its skill, and
invoked it through / successfully.

Screenshots/Recordings

NA

Breaking changes

  • Yes
  • No

The existing Claude Code and Codex marketplace URLs remain unchanged.

Related issues

NA

Security considerations

Marketplace and plugin serving routes remain public because Git marketplace URLs
cannot carry credentials safely. This matches the existing skills-serving
behavior. The Git implementation remains read-only and only exposes
git-upload-pack; it does not support pushes.

Plugins are executable instructions loaded by client applications. Users should
only install skills from Bifrost instances they trust.

Checklist

  • I read docs/contributing/README.md and followed the guidelines
  • I added/updated tests where appropriate
  • I updated documentation where needed
  • I verified builds succeed (Go and UI)
  • I verified the CI pipeline passes locally if applicable

@danpiths
danpiths requested a review from akshaydeo September 14, 2026 14:21
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

Copy link
Copy Markdown
Collaborator Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@coderabbitai

coderabbitai Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: a4513ba9-7f53-4836-9ec9-e664ade53821

📥 Commits

Reviewing files that changed from the base of the PR and between 3a4168e and 99d2321.

📒 Files selected for processing (3)
  • transports/bifrost-http/handlers/skills_serving.go
  • transports/bifrost-http/handlers/skills_serving_test.go
  • ui/app/workspace/skills-repo/components/skillListView.tsx

Included review availability: 9 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 10 reviews per hour.


📝 Summary

Summary by CodeRabbit

  • New Features
    • Added Git-based marketplace access for Claude Desktop and Cowork, enabling marketplace cloning through a dedicated URL.
    • Claude marketplace repositories now include cloneable plugin content and required marketplace files.
    • Marketplace registration options now provide the appropriate Claude Desktop/Cowork Git URL alongside Claude Code and Codex commands.
    • Updated marketplace controls to clearly indicate whether users should copy a URL or command.

Walkthrough

Claude marketplace serving now supports Git smart HTTP cloning. Marketplace JSON generation returns reusable bytes with propagated errors. Integration tests validate repository and plugin cloning. The workspace UI displays the new Git URL.

Changes

Claude marketplace Git access

Layer / File(s) Summary
Marketplace JSON builder
transports/bifrost-http/handlers/skills_serving.go
Claude marketplace generation now returns serialized JSON bytes. Skill-list and version lookup errors propagate to the HTTP caller.
Git smart HTTP serving
transports/bifrost-http/handlers/skills_serving.go, transports/bifrost-http/handlers/skills_serving_test.go
The Claude marketplace exposes .git/info/refs and .git/git-upload-pack routes. The handler assembles and serves the marketplace repository. Integration tests clone the marketplace and referenced plugin, validate required files, and check the JSON endpoint.
Workspace registration UI
ui/app/workspace/skills-repo/components/skillListView.tsx
The marketplace popover includes the Claude Desktop/Cowork Git URL. URL and CLI entries use a shared value field and explicit accessibility labels.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ClaudeDesktopCowork
  participant ClaudeMarketplaceGitHandler
  participant GitSmartHTTP
  ClaudeDesktopCowork->>ClaudeMarketplaceGitHandler: Clone Claude marketplace Git URL
  ClaudeMarketplaceGitHandler->>GitSmartHTTP: Request marketplace repository data
  GitSmartHTTP-->>ClaudeDesktopCowork: Return Git smart HTTP data
Loading

Merge Risk: ⚪ Minimal · up to 99d23

The Git marketplace routes and UI availability handling match the intended behavior, so the change is ready for normal merge checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary change: Claude Desktop marketplace support. It is concise and directly related to the Git-backed marketplace functionality.
Description check ✅ Passed The description is complete and follows the repository template. It explains the purpose, implementation, affected areas, testing steps, UI behavior, breaking-change status, security considerations, a…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/09-14-feat_adds_claude_desktop_marketplace_support

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

akshaydeo commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Merge activity

  • Sep 14, 2:34 PM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Sep 14, 2:35 PM UTC: @akshaydeo merged this pull request with Graphite.

@akshaydeo
akshaydeo merged commit 87fa69a into dev Sep 14, 2026
14 of 15 checks passed
@akshaydeo
akshaydeo deleted the feat/09-14-feat_adds_claude_desktop_marketplace_support branch September 14, 2026 14:35
akshaydeo pushed a commit that referenced this pull request Sep 14, 2026
## Summary

Document how to register the Bifrost Skills Repository as a personal marketplace
in Claude Desktop and Cowork, install a plugin, and invoke its skill.

## Changes

The Skills Repository guide previously documented marketplace registration for
Claude Code and Codex, but it did not explain the different flow used by Claude
Desktop and Cowork.

Claude Code accepts the marketplace JSON URL through its CLI:

```text
claude plugin marketplace add \
  <bifrost-url>/api/skills/serve/claude-code/.claude-plugin/marketplace.json
```

Claude Desktop and Cowork instead expect a Git repository URL in the app:

```text
<bifrost-url>/api/skills/serve/claude-code.git
```

The guide now walks through that app flow:

```text
Bifrost Skills Repository
        │
        │ Copy "Claude Desktop / Cowork" URL
        ▼
Claude: Customize → Plugins → Add marketplace
        │
        │ Paste URL and sync
        ▼
bifrost-skills marketplace
        │
        │ Install and enable a plugin
        ▼
New chat or Cowork task → type / → select the skill
```

It includes screenshots for each point where the user moves between Bifrost and
Claude:

1. copying the Git URL from Bifrost;
2. opening Claude's **Add marketplace** action;
3. entering the repository URL;
4. choosing a Bifrost plugin;
5. confirming the plugin is installed and enabled; and
6. selecting the installed skill from the `/` command menu.

For example, a Bifrost skill named `unslop` can be installed through the
`bifrost-all-skills` plugin and then selected as:

```text
bifrost-all-skills:unslop
```

The documentation also calls out two operational boundaries:

- Git must be available in the Bifrost runtime image for marketplace serving.
- This is a personal marketplace flow. Organization-managed Claude marketplaces
  use Anthropic's GitHub integration and do not accept an arbitrary Bifrost Git
  URL.

## Type of change

- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [x] Documentation
- [ ] Chore/CI

## Affected areas

- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [x] Docs

## How to test

1. Preview `docs/features/skills-repository.mdx` in the documentation site.
2. Open **Register Bifrost as a marketplace**.
3. Confirm the Claude Desktop and Cowork instructions appear before the existing
   Claude Code and Codex commands.
4. Confirm all six screenshots render in this order:
   - Bifrost marketplace URL
   - Claude **Add marketplace** menu
   - Claude marketplace URL dialog
   - Bifrost plugin list
   - installed and enabled plugin
   - `/` command menu
5. Follow the documented flow against a Bifrost server whose runtime image
   contains Git.
6. Confirm Claude syncs the marketplace, installs the selected plugin, and lists
   its skill after typing `/` in a new chat or Cowork task.

Expected flow:

```text
<your-bifrost-url>/api/skills/serve/claude-code.git
  → Sync succeeds
  → Bifrost plugins appear
  → Plugin installs and enables
  → Skill appears in the / menu
```

No new configuration or environment variables are introduced.

## Screenshots/Recordings

The guide includes screenshots of the complete Claude Desktop marketplace setup
and skill invocation flow under `docs/media/skills-repository/`.

## Breaking changes

- [ ] Yes
- [x] No

This changes documentation only.

## Related issues

Documents the Claude Desktop and Cowork support added in #7152.

## Security considerations

The screenshots use a localhost URL and do not contain credentials, account
names, organization names, or customer hostnames.

The guide retains Claude's trust boundary: users should install plugins only
from Bifrost instances they trust. It also distinguishes personal marketplace
registration from organization-managed marketplace syncing.

## Checklist

- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [x] I verified the CI pipeline passes locally if applicable
@akshaydeo akshaydeo mentioned this pull request Sep 15, 2026
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.

3 participants