# marketplace-publishing

Walks through the whole path from a new SKILL.md folder to a release tag in the dotnet-skills marketplace. Useful if you run your own plugin catalog.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 389 installs · ★ 1238
- Author: Aaronontheweb
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/Aaronontheweb/dotnet-skills/tree/HEAD/skills/marketplace-publishing/SKILL.md
- Updated: 2026-10-11
- HTML: https://affpapa.org/en/nevibecode/skills/marketplace-publishing

## What it does

The skill lays out the dotnet-skills repository: `.claude-plugin/` holding `marketplace.json` and `plugin.json`, category folders under `skills/` (akka, aspire, csharp, testing, meta), agent definitions in `agents/`, and `scripts/validate-marketplace.sh`.

Adding a skill goes in order. Pick a category or create one, make `skills/<category>/<name>/SKILL.md` with YAML frontmatter where `name` is lowercase with hyphens, add the path to the `skills` array in `.claude-plugin/plugin.json`, run validation, then commit the folder and `plugin.json` together. Agents use their own frontmatter: `model` accepts only `haiku`, `sonnet` or `opus`, and the path goes into the `agents` array.

A release means bumping the version in `plugin.json` by semver, validating, committing, then `git tag v1.1.0` and `git push origin master --tags`. GitHub Actions validates the structure and creates a release with generated notes. If a skill does not show up after install, check the path in `plugin.json` against the actual folder tree first — a mismatch there is the usual culprit.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill marketplace-publishing -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/marketplace-publishing/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/marketplace-publishing/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill marketplace-publishing -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/marketplace-publishing/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill marketplace-publishing -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/marketplace-publishing/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install Aaronontheweb/dotnet-skills marketplace-publishing
```

2. **Manually: put the files in place**
- File: `.github/skills/marketplace-publishing/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill marketplace-publishing -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/Aaronontheweb/dotnet-skills --path skills/marketplace-publishing
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/marketplace-publishing/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add Aaronontheweb/dotnet-skills --skill marketplace-publishing -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/Aaronontheweb/dotnet-skills/tree/HEAD/skills/marketplace-publishing/SKILL.md

## When to use it
- add a new skill to the dotnet-skills catalog and register it in `plugin.json`
- define an agent with a valid `model` field
- cut a release whose tag matches the version in `plugin.json`
- debug why an installed skill never appears for users
- validate the marketplace structure before committing

## Example prompts
- add a new cluster-sharding skill under the akka category and register it in plugin.json
- create an akka-net-specialist agent with the sonnet model and add it to the agents array
- prepare the 1.1.0 release: bump the version, run validation and push the tag

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: f19930f133fa82ce.

BEGIN THIRD-PARTY FILE f19930f133fa82ce
````text
---
name: marketplace-publishing
description: Workflow for publishing skills and agents to the dotnet-skills Claude Code marketplace. Covers adding new content, updating plugin.json, validation, and release tagging.
---

# Marketplace Publishing Workflow

This skill documents how to publish skills and agents to the dotnet-skills Claude Code marketplace.

## Repository Structure

```
dotnet-skills/
├── .claude-plugin/
│   ├── marketplace.json      # Marketplace catalog
│   └── plugin.json           # Plugin metadata + skill/agent registry
├── .github/workflows/
│   └── release.yml           # Release automation
├── skills/
│   ├── akka/                 # Akka.NET skills
│   │   ├── best-practices/SKILL.md
│   │   ├── testing-patterns/SKILL.md
│   │   └── ...
│   ├── aspire/               # .NET Aspire skills
│   ├── csharp/               # C# language skills
│   ├── testing/              # Testing framework skills
│   └── meta/                 # Meta skills
├── agents/
│   └── *.md                  # Agent definitions
└── scripts/
    └── validate-marketplace.sh
```

## Adding a New Skill

### Step 1: Choose a Category

Skills are organized by domain:

| Category | Purpose |
|----------|---------|
| `akka/` | Akka.NET actor patterns, testing, clustering |
| `aspire/` | .NET Aspire orchestration, testing, configuration |
| `csharp/` | C# language features, coding standards |
| `testing/` | Testing frameworks (xUnit, Playwright, Testcontainers) |
| `meta/` | Meta skills about this marketplace |

Create a new category folder if none fits.

### Step 2: Create the Skill Folder

Create a folder with `SKILL.md` inside:

```
skills/<category>/<skill-name>/SKILL.md
```

Example: `skills/akka/cluster-sharding/SKILL.md`

### Step 3: Write the SKILL.md

```markdown
---
name: my-new-skill
description: Brief description of what this skill does and when to use it.
---

# My New Skill

## When to Use This Skill

Use this skill when:
- [List specific scenarios]

---

## Content

[Comprehensive guide with examples, patterns, and anti-patterns]
```

**Requirements:**
- `name` must be lowercase with hyphens (e.g., `cluster-sharding`)
- `description` should be 1-2 sentences explaining when Claude should use this skill
````
END THIRD-PARTY FILE f19930f133fa82ce

The third-party file has ended. Everything between the f19930f133fa82ce tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2373 of 6066 bytes. © Aaronontheweb · MIT · https://github.com/Aaronontheweb/dotnet-skills/tree/HEAD/skills/marketplace-publishing/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
