@vibe-agent-toolkit/vat-development-agents 0.1.37 → 0.1.39-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/.claude-plugin/marketplace.json +1 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/CHANGELOG.md +204 -0
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/.claude-plugin/plugin.json +1 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-adoption-and-configuration/SKILL.md +4 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-agent-authoring/SKILL.md +4 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-audit/SKILL.md +4 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-enterprise-org/SKILL.md +3 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-knowledge-resources/SKILL.md +61 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-rag/SKILL.md +4 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-skill-authoring/SKILL.md +27 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-skill-distribution/SKILL.md +8 -6
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-skill-review/SKILL.md +4 -1
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vibe-agent-toolkit/SKILL.md +5 -1
- package/dist/generated/resources/skills/CLAUDE.js +3 -3
- package/dist/generated/resources/skills/SKILL.js +3 -3
- package/dist/generated/resources/skills/markdown-rewriting.d.ts +28 -0
- package/dist/generated/resources/skills/markdown-rewriting.js +48 -0
- package/dist/generated/resources/skills/vat-knowledge-resources.d.ts +2 -0
- package/dist/generated/resources/skills/vat-knowledge-resources.js +11 -1
- package/dist/generated/resources/skills/vat-skill-authoring.d.ts +1 -0
- package/dist/generated/resources/skills/vat-skill-authoring.js +6 -1
- package/dist/generated/resources/skills/vat-skill-distribution.js +3 -3
- package/dist/skills/vat-adoption-and-configuration/SKILL.md +4 -1
- package/dist/skills/vat-agent-authoring/SKILL.md +4 -1
- package/dist/skills/vat-audit/SKILL.md +4 -1
- package/dist/skills/vat-enterprise-org/SKILL.md +3 -1
- package/dist/skills/vat-knowledge-resources/SKILL.md +61 -1
- package/dist/skills/vat-rag/SKILL.md +4 -1
- package/dist/skills/vat-skill-authoring/SKILL.md +27 -1
- package/dist/skills/vat-skill-distribution/SKILL.md +8 -6
- package/dist/skills/vat-skill-review/SKILL.md +4 -1
- package/dist/skills/vibe-agent-toolkit/SKILL.md +5 -1
- package/package.json +4 -4
- package/dist/.claude/plugins/marketplaces/vat-skills/plugins/vibe-agent-toolkit/skills/vat-skill-distribution/resources/marketplace-distribution.md +0 -427
- package/dist/skills/vat-skill-distribution/resources/marketplace-distribution.md +0 -427
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vat-knowledge-resources
|
|
3
|
-
description: Use when working with VAT resource collections, per-directory
|
|
3
|
+
description: Use when working with VAT resource collections, per-directory
|
|
4
|
+
frontmatter schema validation, link validation, or the vat resources command.
|
|
5
|
+
Covers collection configuration, schema mapping, and validation modes.
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# VAT Resources: Collections & Frontmatter Validation
|
|
@@ -91,6 +93,24 @@ Absolute URLs in URI-reference fields feed into the existing external URL health
|
|
|
91
93
|
|
|
92
94
|
Opt-out: `checkFrontmatterLinks: false` per collection, or `--no-check-frontmatter-links` on the CLI.
|
|
93
95
|
|
|
96
|
+
## Per-code severity and allow (`resources.validation`)
|
|
97
|
+
|
|
98
|
+
Every resources finding is a registry code (e.g. `LINK_BROKEN_FILE`, `FRONTMATTER_SCHEMA_ERROR`, `EXTERNAL_URL_DEAD`) with a default severity. Tune them per-code under `resources.validation`:
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
resources:
|
|
102
|
+
validation:
|
|
103
|
+
severity:
|
|
104
|
+
EXTERNAL_URL_DEAD: ignore # silence dead external links entirely
|
|
105
|
+
LINK_UNKNOWN: error # promote unclassified links to build-failing
|
|
106
|
+
allow:
|
|
107
|
+
LINK_TO_GITIGNORED: # keyed by code; value is a list of allow entries
|
|
108
|
+
- paths: ["docs/internal/**"]
|
|
109
|
+
reason: "internal-only notes, intentionally gitignored"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`severity` accepts `error | warning | info | ignore`. External-URL findings default to `warning` and never fail the build on their own — promote them to `error` here if you want network checks to gate CI. `allow` is keyed by code; each entry's `paths` (glob list, default `**/*`) and `reason` suppress that code for matching files rather than disabling it globally. Add `expires` (a date string) to flag the allowance for re-review.
|
|
113
|
+
|
|
94
114
|
## Annotating Frontmatter Schemas with Zod 4
|
|
95
115
|
|
|
96
116
|
If your project generates JSON Schemas from Zod (via `z.toJSONSchema()`), annotate frontmatter fields that hold links with the appropriate `format` so VAT's link validator picks them up:
|
|
@@ -111,6 +131,46 @@ const PrdFrontmatter = z.object({
|
|
|
111
131
|
|
|
112
132
|
**Tip:** `format` is advisory in JSON Schema; pair it with a `pattern` regex when you also need parse-time rejection of invalid inputs.
|
|
113
133
|
|
|
134
|
+
## URI-references in frontmatter
|
|
135
|
+
|
|
136
|
+
VAT validates frontmatter fields whose schema position has `format: uri-reference`
|
|
137
|
+
(or `uri`, `iri-reference`, `iri`) against the same rules as body links:
|
|
138
|
+
|
|
139
|
+
- Leading-`/` is RFC 3986 §4.2 absolute-path reference — resolved against
|
|
140
|
+
the project root. Same semantics as body links.
|
|
141
|
+
- Anchor fragments and external URLs are accepted; broken local refs error.
|
|
142
|
+
- Inline comments on URI-ref fields are **preserved** when any tool rewrites
|
|
143
|
+
the file via `openFrontmatter` (VAT packager, hand-rolled adopter scripts).
|
|
144
|
+
|
|
145
|
+
Example:
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
---
|
|
149
|
+
parent_spec: /docs/specs/foo.md # the spec this one supersedes
|
|
150
|
+
adrs-cited:
|
|
151
|
+
- /docs/adrs/0007-storage.md # primary reference
|
|
152
|
+
- /docs/adrs/0011-snapshot.md # impacted by storage choice
|
|
153
|
+
---
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Schema:
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"type": "object",
|
|
161
|
+
"properties": {
|
|
162
|
+
"parent_spec": { "type": "string", "format": "uri-reference" },
|
|
163
|
+
"adrs-cited": {
|
|
164
|
+
"type": "array",
|
|
165
|
+
"items": { "type": "string", "format": "uri-reference" }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
For tools that **modify** frontmatter (not just validate it), see
|
|
172
|
+
[[markdown-rewriting]].
|
|
173
|
+
|
|
114
174
|
## Validation Output
|
|
115
175
|
|
|
116
176
|
```yaml
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vat-rag
|
|
3
|
-
description: Use when running `vat rag index` / `vat rag query` or configuring
|
|
3
|
+
description: Use when running `vat rag index` / `vat rag query` or configuring
|
|
4
|
+
RAG for agent context — covers the CLI commands, native embedding providers
|
|
5
|
+
and vector store support, chunking, custom metadata, and extension points for
|
|
6
|
+
adding new backends.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# VAT RAG: Indexing and Querying Markdown with Native Providers
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vat-skill-authoring
|
|
3
|
-
description: Use when authoring or revising a SKILL.md file — frontmatter, body
|
|
3
|
+
description: Use when authoring or revising a SKILL.md file — frontmatter, body
|
|
4
|
+
structure, references, packagingOptions (linkFollowDepth,
|
|
5
|
+
excludeReferencesFromBundle), and validation overrides. Paired with
|
|
6
|
+
vat-skill-review for pre-publication checks.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# VAT Skill Authoring: SKILL.md Structure and Packaging
|
|
@@ -34,6 +37,29 @@ Best practices for `description`:
|
|
|
34
37
|
- Write in third person. First-person ("I can...") and conversational second-person ("You can use...") fire `SKILL_DESCRIPTION_WRONG_PERSON`.
|
|
35
38
|
- Keep under 250 characters so the Claude Code `/skills` listing doesn't truncate the tail (target ≤200 for safety, ≤130 if shipping a large skill collection). The hard schema limit is 1024.
|
|
36
39
|
|
|
40
|
+
## Cross-document references in SKILL.md frontmatter
|
|
41
|
+
|
|
42
|
+
When SKILL.md frontmatter references other documents (parent specs, ADRs,
|
|
43
|
+
related skills), use **leading-`/`** URI-references:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
---
|
|
47
|
+
parent_spec: /docs/specs/foo.md
|
|
48
|
+
related-skills:
|
|
49
|
+
- /packages/foo/resources/skills/bar/SKILL.md
|
|
50
|
+
---
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
These resolve against the project root per RFC 3986 §4.2 (same rule VAT
|
|
54
|
+
applies to body links). Source-relative paths (`../../docs/foo.md`) also
|
|
55
|
+
work but are fragile when skills move.
|
|
56
|
+
|
|
57
|
+
If a tool needs to programmatically rewrite these references — e.g., when
|
|
58
|
+
moving a file — load [[markdown-rewriting]] for the canonical pattern.
|
|
59
|
+
Never use `gray-matter`, `front-matter`, or `js-yaml` directly for SKILL.md
|
|
60
|
+
edits; they silently drop frontmatter comments. ESLint enforces this for
|
|
61
|
+
VAT-internal code.
|
|
62
|
+
|
|
37
63
|
## Body Structure
|
|
38
64
|
|
|
39
65
|
- Lead with a short orientation paragraph: what the skill owns and when to reach for it.
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vat-skill-distribution
|
|
3
|
-
description: Use when setting up `vat build`, configuring plugin distribution
|
|
3
|
+
description: Use when setting up `vat build`, configuring plugin distribution
|
|
4
|
+
(marketplace, plugins, managed settings), npm publishing with postinstall
|
|
5
|
+
hooks, or `vat verify` — the full pipeline from skill source to installed
|
|
6
|
+
plugin.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# VAT Distribution: Build, Publish & Install
|
|
@@ -304,9 +307,9 @@ Start a new Claude Code session to confirm skills load. See the [Marketplace Dis
|
|
|
304
307
|
|
|
305
308
|
VAT supports two versioning models for a marketplace:
|
|
306
309
|
|
|
307
|
-
**Single-version (default for skills-only marketplaces).** No `version` is declared on individual plugins. All plugins inherit the root `package.json:version`. This is the model used by `vibe-agent-toolkit`
|
|
310
|
+
**Single-version (default for skills-only marketplaces).** No `version` is declared on individual plugins. All plugins inherit the root `package.json:version`. This is the model used by `vibe-agent-toolkit` — the marketplace is treated as one release artifact.
|
|
308
311
|
|
|
309
|
-
**Per-plugin versioning** (multi-plugin marketplaces with independent release cadences). Each plugin declares its own `version`. Recommended when topical plugins under one marketplace evolve on independent timelines
|
|
312
|
+
**Per-plugin versioning** (multi-plugin marketplaces with independent release cadences). Each plugin declares its own `version`. Recommended when topical plugins under one marketplace evolve on independent timelines.
|
|
310
313
|
|
|
311
314
|
#### Where to declare a per-plugin version
|
|
312
315
|
|
|
@@ -334,7 +337,6 @@ If both declare a version, marketplace config wins and VAT logs a reconciliation
|
|
|
334
337
|
For each plugin with a resolved version:
|
|
335
338
|
|
|
336
339
|
- The published `.claude-plugin/marketplace.json` includes the per-plugin `version` field on each plugin entry.
|
|
337
|
-
- After the publish-branch push succeeds, VAT pushes a `<plugin>-v<version>` tag to the **source repo** (not the marketplace branch) — e.g., `ai-digest-v0.2.0`. "Source repo" means the working directory where you invoke `vat claude marketplace publish` (i.e., `process.cwd()`); if you invoke from a subdirectory of a worktree, tags land in the containing repo, not the subdirectory. Tag-push failures log a warning but do not roll back the publish.
|
|
338
340
|
- If `<plugin.source>/CHANGELOG.md` exists in source (or the marketplace plugin entry's `changelog` field points to a file), it is bundled into the published marketplace at `plugins/<name>/CHANGELOG.md`, alongside the marketplace-level CHANGELOG.
|
|
339
341
|
|
|
340
342
|
The marketplace-level CHANGELOG (under `publish.changelog` in the config) continues to work unchanged.
|
|
@@ -355,7 +357,7 @@ plugins:
|
|
|
355
357
|
|
|
356
358
|
#### Backwards compatibility
|
|
357
359
|
|
|
358
|
-
Marketplaces with no per-plugin version anywhere are unaffected. The root `package.json` version flows through to every plugin, the published `marketplace.json` either omits per-plugin `version` or includes the same value for all plugins
|
|
360
|
+
Marketplaces with no per-plugin version anywhere are unaffected. The root `package.json` version flows through to every plugin, and the published `marketplace.json` either omits per-plugin `version` or includes the same value for all plugins.
|
|
359
361
|
|
|
360
362
|
## Step 5: User Install
|
|
361
363
|
|
|
@@ -468,4 +470,4 @@ everything (minus `skills/` and `.claude-plugin/`), merges author `plugin.json`
|
|
|
468
470
|
VAT-owned identity fields, and applies any `files[]` mappings for artifacts built
|
|
469
471
|
outside the plugin dir.
|
|
470
472
|
|
|
471
|
-
See [docs/guides/marketplace-distribution.md](
|
|
473
|
+
See [docs/guides/marketplace-distribution.md]() section "Full-plugin authoring".
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vat-skill-review
|
|
3
|
-
description: Use when reviewing a skill before publication or running `vat skill
|
|
3
|
+
description: Use when reviewing a skill before publication or running `vat skill
|
|
4
|
+
review`. Pre-publication quality checklist grouped into general (all skills)
|
|
5
|
+
and CLI-backed items, tied to VAT validation codes and Anthropic's
|
|
6
|
+
skill-authoring best practices.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Skill Quality Checklist (vat skill review)
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: vibe-agent-toolkit
|
|
3
|
-
description: Use when starting VAT work or deciding which VAT sub-skill applies.
|
|
3
|
+
description: Use when starting VAT work or deciding which VAT sub-skill applies.
|
|
4
|
+
Router that points at sub-skills for adoption, skill/agent authoring, audit,
|
|
5
|
+
distribution, RAG, knowledge resources, skill review, and enterprise org
|
|
6
|
+
admin.
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# Vibe Agent Toolkit
|
|
@@ -38,6 +41,7 @@ Poor fits:
|
|
|
38
41
|
| `vat rag index` / `vat rag query`, embedding providers, vector stores, chunking | `vibe-agent-toolkit:vat-rag` |
|
|
39
42
|
| Pre-publication quality review, `vat skill review`, validation-code triage | `vibe-agent-toolkit:vat-skill-review` |
|
|
40
43
|
| Anthropic Admin API: org users, cost/usage, workspace skills, `ANTHROPIC_ADMIN_API_KEY` | `vibe-agent-toolkit:vat-enterprise-org` |
|
|
44
|
+
| Programmatic markdown/frontmatter edits — moving files, updating references, schema-evolution migrations; comment-preserving FrontmatterEditor + rewriteBodyLinks | `vibe-agent-toolkit:markdown-rewriting` |
|
|
41
45
|
|
|
42
46
|
## CLI Surface at a Glance
|
|
43
47
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/vat-development-agents",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.39-rc.1",
|
|
4
4
|
"description": "VAT development agents - dogfooding the vibe-agent-toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -67,13 +67,13 @@
|
|
|
67
67
|
"postinstall": "vat claude plugin install --npm-postinstall || exit 0"
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@vibe-agent-toolkit/agent-schema": "0.1.
|
|
71
|
-
"@vibe-agent-toolkit/cli": "0.1.
|
|
70
|
+
"@vibe-agent-toolkit/agent-schema": "0.1.39-rc.1",
|
|
71
|
+
"@vibe-agent-toolkit/cli": "0.1.39-rc.1",
|
|
72
72
|
"yaml": "^2.8.2"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@types/node": "^25.0.3",
|
|
76
|
-
"@vibe-agent-toolkit/resource-compiler": "0.1.
|
|
76
|
+
"@vibe-agent-toolkit/resource-compiler": "0.1.39-rc.1",
|
|
77
77
|
"ts-patch": "^3.2.1",
|
|
78
78
|
"typescript": "^5.7.3"
|
|
79
79
|
},
|
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
# Marketplace Distribution
|
|
2
|
-
|
|
3
|
-
**Guide for building, validating, and publishing Claude plugin marketplaces.**
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
A Claude plugin marketplace is a Git repository containing `.claude-plugin/marketplace.json` and plugin directories. Marketplaces are the distribution unit for Claude Code (via `/plugin marketplace add`) and Cowork (via GitHub App sync). VAT supports three modes of marketplace management.
|
|
8
|
-
|
|
9
|
-
## Three Marketplace Modes
|
|
10
|
-
|
|
11
|
-
| Mode | Description | VAT commands |
|
|
12
|
-
|------|-------------|-------------|
|
|
13
|
-
| **Built** | Source repo with skills → `vat build` → publish to `claude-marketplace` branch | `vat build`, `vat validate`, `vat claude marketplace publish` |
|
|
14
|
-
| **Separate repo** | Source repo → `vat build` → publish to a different Git repo | Same as Built (remote configured in YAML) |
|
|
15
|
-
| **Manual/native** | The repo IS the marketplace — no build step | `vat validate` (with config) or `vat claude marketplace validate` (without config) |
|
|
16
|
-
|
|
17
|
-
## Distribution Surfaces
|
|
18
|
-
|
|
19
|
-
Custom skills and plugins **do not sync across Claude surfaces**. Each surface is independent:
|
|
20
|
-
|
|
21
|
-
| Surface | Source | Scope | Marketplace format? |
|
|
22
|
-
|---------|--------|-------|---------------------|
|
|
23
|
-
| **Claude Code** | Git repo with `marketplace.json` | Self-service install | Yes |
|
|
24
|
-
| **Cowork (claude.ai)** | Admin UI → GitHub App sync from private repo | Org-wide, admin-controlled | Yes (same format) |
|
|
25
|
-
| **Skills API** | `POST /v1/skills` multipart upload | Workspace-wide | No (direct API upload) |
|
|
26
|
-
| **Claude Code (managed)** | `managed-settings.json` via MDM | Per-machine, IT-managed | Yes (marketplace ref in settings) |
|
|
27
|
-
|
|
28
|
-
Public and private GitHub marketplaces use the **same format**. The only difference is authentication (private repos require `GITHUB_TOKEN` or `GH_TOKEN` for auto-updates).
|
|
29
|
-
|
|
30
|
-
## Marketplace Structure
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
marketplace-repo/ # or claude-marketplace branch
|
|
34
|
-
├── .claude-plugin/
|
|
35
|
-
│ └── marketplace.json # marketplace manifest (required)
|
|
36
|
-
├── plugins/
|
|
37
|
-
│ └── plugin-name/
|
|
38
|
-
│ ├── .claude-plugin/
|
|
39
|
-
│ │ └── plugin.json # plugin manifest (required)
|
|
40
|
-
│ ├── skills/
|
|
41
|
-
│ │ └── skill-name/
|
|
42
|
-
│ │ ├── SKILL.md
|
|
43
|
-
│ │ └── references/
|
|
44
|
-
│ ├── commands/ # slash commands (*.md)
|
|
45
|
-
│ ├── agents/ # agent definitions (*.md)
|
|
46
|
-
│ └── hooks/ # hooks.json
|
|
47
|
-
├── CHANGELOG.md # marketplace changelog
|
|
48
|
-
├── README.md # marketplace "storefront" for GitHub
|
|
49
|
-
└── LICENSE # required for distribution
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Versioning Strategy
|
|
53
|
-
|
|
54
|
-
**Marketplace version is the distribution version.** One version for the whole marketplace.
|
|
55
|
-
|
|
56
|
-
| Artifact | Versioned? | Required? | Source |
|
|
57
|
-
|----------|-----------|-----------|--------|
|
|
58
|
-
| Marketplace | Yes | Yes (error if missing) | `package.json` or config |
|
|
59
|
-
| Plugin | Yes | Yes (error if missing) | Defaults to marketplace version |
|
|
60
|
-
| Skill | No | N/A | Tracked by marketplace version |
|
|
61
|
-
|
|
62
|
-
Skills are not independently versioned by VAT. The SKILL.md frontmatter spec has no version field. Skill changes are tracked at the marketplace level.
|
|
63
|
-
|
|
64
|
-
Plugin version defaults to the marketplace version when not explicitly set. The top-level version defaults to `package.json` when available.
|
|
65
|
-
|
|
66
|
-
## Branch Convention
|
|
67
|
-
|
|
68
|
-
**Default publish branch: `claude-marketplace`** — analogous to GitHub Pages' `gh-pages`.
|
|
69
|
-
|
|
70
|
-
- Source code and SDLC on `main` (tests, lint, CI, PRs)
|
|
71
|
-
- Built marketplace artifacts on `claude-marketplace` (clean, generated)
|
|
72
|
-
- Extensible: `claude-marketplace-beta`, `claude-marketplace-next` for staging channels
|
|
73
|
-
- Configurable via `publish.branch` in config or `--branch` flag
|
|
74
|
-
|
|
75
|
-
**Default-branch-only surfaces:** Both Cowork (claude.ai) and Claude Enterprise GitHub sync read from the repository's **default branch only** — they cannot target a specific branch. This means the branch-based publish pattern (`claude-marketplace` / `claude-marketplace-next`) does not work for these surfaces.
|
|
76
|
-
|
|
77
|
-
**Workaround: dedicated marketplace repo.** Create a separate repository where the default branch (`main`) IS the marketplace. Configure `publish.remote` to point to this repo:
|
|
78
|
-
|
|
79
|
-
```yaml
|
|
80
|
-
publish:
|
|
81
|
-
remote: https://github.com/org/my-marketplace-repo.git
|
|
82
|
-
branch: main
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
This keeps your source code and SDLC on the original repo while the marketplace repo contains only the published artifacts.
|
|
86
|
-
|
|
87
|
-
**Enterprise lockdown:** `managed-settings.json` supports `ref` on marketplace sources:
|
|
88
|
-
|
|
89
|
-
```json
|
|
90
|
-
{
|
|
91
|
-
"strictKnownMarketplaces": [
|
|
92
|
-
{ "source": "github", "repo": "acme/plugins", "ref": "claude-marketplace" }
|
|
93
|
-
]
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Configuration
|
|
98
|
-
|
|
99
|
-
In `vibe-agent-toolkit.config.yaml`:
|
|
100
|
-
|
|
101
|
-
```yaml
|
|
102
|
-
version: 1
|
|
103
|
-
|
|
104
|
-
claude:
|
|
105
|
-
marketplaces:
|
|
106
|
-
my-marketplace:
|
|
107
|
-
owner:
|
|
108
|
-
name: Your Name or Org
|
|
109
|
-
publish:
|
|
110
|
-
branch: claude-marketplace # default
|
|
111
|
-
remote: origin # git remote name, or full URL for cross-repo publish
|
|
112
|
-
changelog: docs/marketplace-changelog.md
|
|
113
|
-
readme: docs/marketplace-readme.md
|
|
114
|
-
license: mit # SPDX identifier or file path
|
|
115
|
-
sourceRepo: false # optional linkback in commit metadata
|
|
116
|
-
plugins:
|
|
117
|
-
- name: my-plugin
|
|
118
|
-
description: What this plugin does
|
|
119
|
-
skills: "*" # or list: ["skill-a", "skill-b"]
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### License field
|
|
123
|
-
|
|
124
|
-
The `license` field accepts:
|
|
125
|
-
- **SPDX identifier string** (e.g., `mit`, `apache-2.0`, `gpl-3.0`) — generates standard license text with owner name and current year
|
|
126
|
-
- **File path** (e.g., `./LICENSE` or `docs/LICENSE-ENTERPRISE`) — copies the file as-is
|
|
127
|
-
|
|
128
|
-
Strings are validated against known SPDX identifiers. Paths are distinguished by containing `/` or `.` characters.
|
|
129
|
-
|
|
130
|
-
## Changelog
|
|
131
|
-
|
|
132
|
-
Each marketplace maintains its own `CHANGELOG.md` following [Keep a Changelog](https://keepachangelog.com/) format. The marketplace release cadence may differ from source package releases.
|
|
133
|
-
|
|
134
|
-
- Author maintains the changelog source file in the repo (path configured in YAML)
|
|
135
|
-
- On publish, it's copied to `CHANGELOG.md` in the published tree
|
|
136
|
-
- The `[Unreleased]` section is required for publish — the command refuses if empty
|
|
137
|
-
- On publish, `[Unreleased]` is stamped with version + date
|
|
138
|
-
- The changelog delta becomes the Git commit message body
|
|
139
|
-
|
|
140
|
-
Categories: `Added`, `Changed`, `Removed`, `Fixed`, `Security`.
|
|
141
|
-
|
|
142
|
-
## Publish Flow
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
# 1. Build marketplace artifacts
|
|
146
|
-
vat build
|
|
147
|
-
|
|
148
|
-
# 2. Validate everything
|
|
149
|
-
vat validate
|
|
150
|
-
|
|
151
|
-
# 3. Publish to claude-marketplace branch
|
|
152
|
-
vat claude marketplace publish
|
|
153
|
-
|
|
154
|
-
# Or dry-run first
|
|
155
|
-
vat claude marketplace publish --dry-run
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**What publish does:**
|
|
159
|
-
|
|
160
|
-
1. Verifies `vat build` output exists
|
|
161
|
-
2. Checks marketplace changelog has `[Unreleased]` content
|
|
162
|
-
3. Composes the publish tree (marketplace artifacts + CHANGELOG.md + README.md + LICENSE)
|
|
163
|
-
4. Creates a single squashed commit: `publish v{version}` with changelog delta as body
|
|
164
|
-
5. Pushes to the configured branch/remote
|
|
165
|
-
|
|
166
|
-
**Flags:**
|
|
167
|
-
- `--dry-run` — compose and show diff, don't push
|
|
168
|
-
- `--branch <name>` — override configured branch
|
|
169
|
-
- `--force` — force-push (first publish or recovery only)
|
|
170
|
-
|
|
171
|
-
**Commit history:** Each publish adds one commit. The `claude-marketplace` branch accumulates a clean release timeline — `git log` shows the version history of the marketplace.
|
|
172
|
-
|
|
173
|
-
## CI/CD: Cross-Repo Publishing
|
|
174
|
-
|
|
175
|
-
When publishing to a **separate repository** (via `publish.remote`), the default `GITHUB_TOKEN` in GitHub Actions is scoped to the source repo and cannot push to the target. You need a Personal Access Token (PAT) or fine-grained token with write access to the marketplace repo.
|
|
176
|
-
|
|
177
|
-
**Setup:**
|
|
178
|
-
|
|
179
|
-
1. Create a PAT with `contents: write` permission on the marketplace repo
|
|
180
|
-
2. Store it as a repository secret (e.g., `MARKETPLACE_GITHUB_PUSH_TOKEN`)
|
|
181
|
-
3. Expose it as `GH_TOKEN` in your workflow — `vat claude marketplace publish` uses `GH_TOKEN` (or `GITHUB_TOKEN`) to authenticate pushes
|
|
182
|
-
|
|
183
|
-
```yaml
|
|
184
|
-
# .github/workflows/marketplace-publish.yml
|
|
185
|
-
- name: Publish marketplace
|
|
186
|
-
env:
|
|
187
|
-
GH_TOKEN: ${{ secrets.MARKETPLACE_GITHUB_PUSH_TOKEN }}
|
|
188
|
-
run: |
|
|
189
|
-
vat build
|
|
190
|
-
vat claude marketplace publish --branch main
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**Why a separate token?** GitHub Actions' built-in `GITHUB_TOKEN` has repo-scoped permissions and cannot push to other repositories. This is a standard pattern for any cross-repo CI operation.
|
|
194
|
-
|
|
195
|
-
## Validation
|
|
196
|
-
|
|
197
|
-
### With config (`vat validate`)
|
|
198
|
-
|
|
199
|
-
When marketplace config exists, `vat validate` orchestrates in dependency order:
|
|
200
|
-
|
|
201
|
-
1. `resources validate` — links, frontmatter, schemas
|
|
202
|
-
2. `skills validate` — SKILL.md structure, frontmatter
|
|
203
|
-
3. `marketplace validate` — marketplace.json, plugin.json, structure
|
|
204
|
-
|
|
205
|
-
Each layer fails fast — bad links block skill validation, bad skills block marketplace validation.
|
|
206
|
-
|
|
207
|
-
### Without config (`vat claude marketplace validate`)
|
|
208
|
-
|
|
209
|
-
Standalone validation for manual/native marketplaces. Uses the same discovery logic as `vat audit` but with **strict expectations** — this must be a valid marketplace:
|
|
210
|
-
|
|
211
|
-
| Check | `vat audit` (liberal) | `marketplace validate` (strict) |
|
|
212
|
-
|-------|----------------------|--------------------------------|
|
|
213
|
-
| Missing version | Warning | Error |
|
|
214
|
-
| Missing LICENSE | Ignored | Error |
|
|
215
|
-
| Bad plugin.json | Warning | Error |
|
|
216
|
-
| Missing README | Ignored | Warning |
|
|
217
|
-
| Missing CHANGELOG | Ignored | Warning |
|
|
218
|
-
| Bad SKILL.md | Warning | Error |
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
# Validate a marketplace directory or repo
|
|
222
|
-
vat claude marketplace validate .
|
|
223
|
-
vat claude marketplace validate path/to/marketplace
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## Examples
|
|
227
|
-
|
|
228
|
-
### Built mode: monorepo publishes to same repo
|
|
229
|
-
|
|
230
|
-
```yaml
|
|
231
|
-
# vibe-agent-toolkit.config.yaml
|
|
232
|
-
claude:
|
|
233
|
-
marketplaces:
|
|
234
|
-
vat-skills:
|
|
235
|
-
owner:
|
|
236
|
-
name: vibe-agent-toolkit contributors
|
|
237
|
-
publish:
|
|
238
|
-
changelog: docs/marketplace-changelog.md
|
|
239
|
-
readme: docs/marketplace-readme.md
|
|
240
|
-
license: mit
|
|
241
|
-
plugins:
|
|
242
|
-
- name: vibe-agent-toolkit
|
|
243
|
-
description: Development agents and skills
|
|
244
|
-
skills: "*"
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
```bash
|
|
248
|
-
vat build && vat validate && vat claude marketplace publish
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
Consumers install via:
|
|
252
|
-
```
|
|
253
|
-
/plugin marketplace add owner/repo#claude-marketplace
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### Separate repo: private source, public marketplace
|
|
257
|
-
|
|
258
|
-
```yaml
|
|
259
|
-
# vibe-agent-toolkit.config.yaml in private source repo
|
|
260
|
-
claude:
|
|
261
|
-
marketplaces:
|
|
262
|
-
acme-skills:
|
|
263
|
-
owner:
|
|
264
|
-
name: Acme Corp
|
|
265
|
-
publish:
|
|
266
|
-
remote: git@github.com:acme/acme-skills-marketplace.git
|
|
267
|
-
changelog: docs/marketplace-changelog.md
|
|
268
|
-
readme: docs/marketplace-readme.md
|
|
269
|
-
license: apache-2.0
|
|
270
|
-
plugins:
|
|
271
|
-
- name: acme-tools
|
|
272
|
-
description: Acme engineering tools
|
|
273
|
-
skills: "*"
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### Manual/native: repo IS the marketplace
|
|
277
|
-
|
|
278
|
-
No `vat build`, no publish. Author maintains `marketplace.json` and plugin directories directly. Validate with:
|
|
279
|
-
|
|
280
|
-
```bash
|
|
281
|
-
# With vibe-agent-toolkit.config.yaml
|
|
282
|
-
vat validate
|
|
283
|
-
|
|
284
|
-
# Without config
|
|
285
|
-
vat claude marketplace validate .
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Testing Your Marketplace
|
|
289
|
-
|
|
290
|
-
After publishing, test the marketplace locally before sharing with users. This flow validates the full consumer experience — clone, install, and skill loading.
|
|
291
|
-
|
|
292
|
-
### Test flow
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
# 1. Add the marketplace (uses the published branch)
|
|
296
|
-
claude plugin marketplace add owner/repo#claude-marketplace
|
|
297
|
-
|
|
298
|
-
# 2. Install the plugin from the marketplace
|
|
299
|
-
claude plugin install my-plugin@my-marketplace
|
|
300
|
-
|
|
301
|
-
# 3. Validate the installed plugin
|
|
302
|
-
claude plugin validate ~/.claude/plugins/cache/my-marketplace/my-plugin/<version>
|
|
303
|
-
|
|
304
|
-
# 4. List plugins and verify status
|
|
305
|
-
claude plugin list
|
|
306
|
-
|
|
307
|
-
# 5. Start a new Claude Code session — skills should appear in /skill-name
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### What to verify
|
|
311
|
-
|
|
312
|
-
- **Marketplace add** succeeds and `known_marketplaces.json` shows the correct source
|
|
313
|
-
- **Plugin install** resolves the correct version from plugin.json
|
|
314
|
-
- **All skills** are present in the cache directory
|
|
315
|
-
- **`claude plugin validate`** passes on the installed plugin
|
|
316
|
-
- **`claude plugin list`** shows the plugin as enabled
|
|
317
|
-
- **Skills load** in a new session (check the system reminder for skill names)
|
|
318
|
-
|
|
319
|
-
### Updating after changes
|
|
320
|
-
|
|
321
|
-
After publishing a new version:
|
|
322
|
-
|
|
323
|
-
```bash
|
|
324
|
-
# Update the marketplace cache
|
|
325
|
-
claude plugin marketplace update my-marketplace
|
|
326
|
-
|
|
327
|
-
# Update the installed plugin
|
|
328
|
-
claude plugin update my-plugin@my-marketplace
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
### Known issues
|
|
332
|
-
|
|
333
|
-
**Name collision on marketplace add (Claude Code v2.1.81):** If a marketplace with the same `name` field already exists (e.g., previously registered via npm), `claude plugin marketplace add` reports success but silently reuses the old source in `known_marketplaces.json`. The workaround is to remove the old marketplace first, then add:
|
|
334
|
-
|
|
335
|
-
```bash
|
|
336
|
-
claude plugin marketplace remove my-marketplace
|
|
337
|
-
claude plugin marketplace add owner/repo#branch
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Verify by checking `~/.claude/plugins/known_marketplaces.json` to confirm the source switched to `github`.
|
|
341
|
-
|
|
342
|
-
**`claude plugin validate` rejects `$schema` key (Claude Code v2.1.81):** The marketplace validator treats `$schema` as an unrecognized key, even though Anthropic's own official marketplace uses it. This does not affect runtime behavior — the marketplace installs and works correctly. This is a Claude Code validation bug, not a marketplace authoring issue.
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
## Full-plugin authoring
|
|
346
|
-
|
|
347
|
-
`vat claude plugin build` ships any Claude Code plugin asset — not just skills. Drop the plugin under `plugins/<name>/` in the same native layout Claude Code expects, declare it in `vibe-agent-toolkit.config.yaml`, and `vat claude plugin build` assembles the output from that plugin's own directory. Pool skills (from the top-level `skills:` discovery) are still imported into the plugin via the `skills:` selector — the plugin directory and the pool skills are both sources, composed into one bundle.
|
|
348
|
-
|
|
349
|
-
### Layout
|
|
350
|
-
|
|
351
|
-
```
|
|
352
|
-
plugins/<name>/
|
|
353
|
-
.claude-plugin/
|
|
354
|
-
plugin.json # author-supplied metadata; VAT merges on top
|
|
355
|
-
commands/ # slash commands (*.md)
|
|
356
|
-
hooks/
|
|
357
|
-
hooks.json # hook registry (JSON; parse-only validated)
|
|
358
|
-
agents/ # subagent definitions (*.md)
|
|
359
|
-
.mcp.json # MCP server config (JSON; parse-only validated)
|
|
360
|
-
scripts/ # arbitrary scripts (tree-copied verbatim)
|
|
361
|
-
skills/ # plugin-local SKILL.md files — tree-copied verbatim
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
Everything under `plugins/<name>/` is tree-copied to `dist/.claude/plugins/marketplaces/<mp>/plugins/<name>/`, except:
|
|
365
|
-
|
|
366
|
-
- `.claude-plugin/` — owned by the `plugin.json` merge-write (see "plugin.json merge")
|
|
367
|
-
|
|
368
|
-
Tree-copy respects `.gitignore` (safe: `node_modules/`, build detritus never ship). `plugins/<name>/skills/` is just a regular tree-copied directory — drop raw `SKILL.md` files there and they ship as-is.
|
|
369
|
-
|
|
370
|
-
### Minimum content — empty-plugin guard
|
|
371
|
-
|
|
372
|
-
Every declared plugin must supply at least one of:
|
|
373
|
-
|
|
374
|
-
- a `plugins/<name>/` directory on disk (or an alternate `source:` override pointing at one), **or**
|
|
375
|
-
- a non-empty `files: [{ source, dest }, ...]` mapping, **or**
|
|
376
|
-
- a non-empty `skills:` selector that matches at least one pool skill.
|
|
377
|
-
|
|
378
|
-
A plugin with none of these is rejected with the empty-plugin guard.
|
|
379
|
-
|
|
380
|
-
### `source` override
|
|
381
|
-
|
|
382
|
-
```yaml
|
|
383
|
-
claude:
|
|
384
|
-
marketplaces:
|
|
385
|
-
mp1:
|
|
386
|
-
owner: { name: Example }
|
|
387
|
-
plugins:
|
|
388
|
-
- name: my-plugin
|
|
389
|
-
skills: []
|
|
390
|
-
source: custom/path/to/my-plugin # default: plugins/my-plugin
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
### `files[]` — compiled artifacts outside the plugin dir
|
|
394
|
-
|
|
395
|
-
Use `files: [{ source, dest }]` to inject build artifacts (compiled hooks, generated configs) into the plugin output:
|
|
396
|
-
|
|
397
|
-
```yaml
|
|
398
|
-
plugins:
|
|
399
|
-
- name: my-plugin
|
|
400
|
-
skills: []
|
|
401
|
-
files:
|
|
402
|
-
- source: dist/hooks/compiled-hook.mjs # relative to project root
|
|
403
|
-
dest: hooks/compiled-hook.mjs # relative to plugin output dir
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
`dest` cannot escape the plugin output dir and cannot target `.claude-plugin/plugin.json` (owned by merge-write). Overwrites are allowed and logged at info level.
|
|
407
|
-
|
|
408
|
-
### `plugin.json` merge rules
|
|
409
|
-
|
|
410
|
-
VAT writes `.claude-plugin/plugin.json` last, merging the author's `.claude-plugin/plugin.json` (if present) with VAT-owned identity fields:
|
|
411
|
-
|
|
412
|
-
- **VAT wins** on `name`, `version`, `author` (shallow replace — mismatches produce warnings, never errors).
|
|
413
|
-
- **Author wins** on all other keys (`keywords`, `repository`, `homepage`, `license`, …).
|
|
414
|
-
- **Description chain:** `config.description ?? author.description ?? "${name} plugin"`.
|
|
415
|
-
- `version` falls back to the author's value when VAT has no version (no `package.json`).
|
|
416
|
-
|
|
417
|
-
### Ordering contract
|
|
418
|
-
|
|
419
|
-
`vat claude plugin build` runs per plugin in this order:
|
|
420
|
-
|
|
421
|
-
1. Discovery + validators (case-match, `hooks.json`/`.mcp.json` parse, empty-plugin guard)
|
|
422
|
-
2. Tree-copy `plugins/<name>/` verbatim (skips `.claude-plugin/`, respects `.gitignore`)
|
|
423
|
-
3. Pool-skill import via the plugin's `skills:` selector (from `dist/skills/`)
|
|
424
|
-
4. `files[]` mapping (may overwrite tree-copied files; logged at info)
|
|
425
|
-
5. `.claude-plugin/plugin.json` merge-write (always last, always wins)
|
|
426
|
-
|
|
427
|
-
**Run order:** `vat skills build && vat claude plugin build`. The plugin build reads pre-built pool skills from `dist/skills/` and raw plugin-local skills directly from `plugins/<name>/skills/`.
|