Skip to content

Commit aa2ee59

Browse files
committed
require tags with component type; add 'other' type to existing plugins
- Make tags required with at least one component type in validation - Add 'other' type tag to plugins missing a canonical type - Update CONTRIBUTING.md, PR templates, and site filters - Simplify tag filter logic (remove __other__ pseudo-tag) - Sort 'other' category last in UI
1 parent b99a87c commit aa2ee59

19 files changed

Lines changed: 102 additions & 67 deletions

.claude-plugin/marketplace.json

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@
103103
"aws",
104104
"location",
105105
"maps",
106-
"geospatial"
106+
"geospatial",
107+
"other"
107108
],
108109
"license": "MIT"
109110
},
@@ -239,7 +240,8 @@
239240
"tags": [
240241
"aws",
241242
"amplify",
242-
"fullstack"
243+
"fullstack",
244+
"other"
243245
],
244246
"license": "MIT"
245247
},
@@ -266,7 +268,8 @@
266268
"sam",
267269
"api gateway",
268270
"eventbridge",
269-
"step functions"
271+
"step functions",
272+
"other"
270273
],
271274
"license": "MIT"
272275
},
@@ -1046,7 +1049,8 @@
10461049
"tutorial",
10471050
"learning",
10481051
"spaced-repetition",
1049-
"education"
1052+
"education",
1053+
"other"
10501054
],
10511055
"license": "MIT"
10521056
},
@@ -1089,7 +1093,8 @@
10891093
"code-review",
10901094
"quality",
10911095
"knowledge-management",
1092-
"image-generation"
1096+
"image-generation",
1097+
"other"
10931098
],
10941099
"license": "MIT"
10951100
},
@@ -1306,7 +1311,8 @@
13061311
"aurora",
13071312
"dsql",
13081313
"serverless",
1309-
"postgresql"
1314+
"postgresql",
1315+
"other"
13101316
],
13111317
"license": "MIT"
13121318
},
@@ -1366,7 +1372,8 @@
13661372
"aws",
13671373
"deploy",
13681374
"infrastructure",
1369-
"cdk"
1375+
"cdk",
1376+
"other"
13701377
],
13711378
"license": "MIT"
13721379
},
@@ -2232,7 +2239,8 @@
22322239
"plugin",
22332240
"workflow",
22342241
"planning",
2235-
"execution"
2242+
"execution",
2243+
"other"
22362244
],
22372245
"license": "MIT"
22382246
},
@@ -2255,7 +2263,8 @@
22552263
"plugin",
22562264
"workflow",
22572265
"planning",
2258-
"execution"
2266+
"execution",
2267+
"other"
22592268
],
22602269
"license": "MIT"
22612270
},
@@ -2909,7 +2918,8 @@
29092918
"aws",
29102919
"gcp",
29112920
"migration",
2912-
"infrastructure"
2921+
"infrastructure",
2922+
"other"
29132923
],
29142924
"license": "MIT"
29152925
},
@@ -3602,7 +3612,8 @@
36023612
"aws",
36033613
"sagemaker",
36043614
"machine-learning",
3605-
"generative-ai"
3615+
"generative-ai",
3616+
"other"
36063617
],
36073618
"license": "MIT"
36083619
},

.github/PULL_REQUEST_TEMPLATE/add-plugin.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
**Plugin name:**
44
**Source:** <!-- e.g. GitHub repo, Git URL, npm package -->
55
**License:** <!-- e.g. MIT, Apache-2.0 -->
6-
**Category:**
6+
**Category:** <!-- one of: development, testing, devops, security, documentation, productivity, data, design, other -->
7+
**Type / tags:** <!-- must include ≥1 of: skills, agents, hooks, commands, mcp-servers, lsp-servers, integration, other. Free-form descriptors allowed alongside, e.g. ["skills", "python"] -->
8+
9+
> **Using `other`?** If you set the category or a type tag to `other` because nothing else fits, please briefly explain why in the description below — it helps us decide whether to add a new category/type later.
710
811
### Checklist
912

@@ -12,6 +15,8 @@
1215
- [ ] Plugin has a `README.md`
1316
- [ ] Plugin has a `LICENSE`
1417
- [ ] Plugin name is kebab-case
18+
- [ ] `category` is set to one of the allowed values
19+
- [ ] `tags` includes at least one component type (skills/agents/hooks/commands/mcp-servers/lsp-servers/integration/other)
1520
- [ ] Plugin file added to `plugins/` directory (do not edit `marketplace.json`)
1621
- [ ] Tested locally with `/plugin marketplace add` and `/plugin install`
1722

.github/PULL_REQUEST_TEMPLATE/update-plugin.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- [ ] Version bump
1010
- [ ] Description change
1111
- [ ] Category change
12+
- [ ] Tags / type change
1213
- [ ] Source change (e.g. moved repo, switched to npm)
1314
- [ ] Author/metadata update
1415
- [ ] Other <!-- If other, please describe in "Reason for update" below -->
@@ -23,3 +24,5 @@
2324
### Reason for update
2425

2526
<!-- Why is this change needed? -->
27+
28+
> **Switching to `other`?** If you're changing the category or a type tag to `other`, please explain why none of the existing options fit.

.github/workflows/validate-plugin.yml

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,42 @@ jobs:
8282
;;
8383
esac
8484
85-
# Validate tags (optional field)
86-
if jq -e '.tags' "$f" >/dev/null 2>&1; then
87-
valid_tags="skills agents hooks commands mcp-servers lsp-servers integration"
88-
for tag in $(jq -r '.tags[]' "$f" 2>/dev/null); do
89-
if ! echo "$valid_tags" | grep -qw "$tag"; then
90-
echo " ERROR: Invalid tag '$tag'. Must be one of: $valid_tags"
91-
errors=$((errors + 1))
92-
fi
93-
done
94-
fi
95-
96-
category=$(jq -r '.category // empty' "$f")
85+
# Category: required, must be from the allowed list
9786
valid_categories="development testing devops security documentation productivity data design other"
98-
if [ -n "$category" ] && ! echo "$valid_categories" | grep -qw "$category"; then
87+
category=$(jq -r '.category // empty' "$f")
88+
if [ -z "$category" ]; then
89+
echo " ERROR: Missing required field 'category'. Must be one of: $valid_categories"
90+
errors=$((errors + 1))
91+
elif ! echo "$valid_categories" | grep -qw "$category"; then
9992
echo " ERROR: Invalid category '$category'. Must be one of: $valid_categories"
10093
errors=$((errors + 1))
10194
fi
95+
96+
# Tags: required, must contain at least one component-type tag.
97+
# Free-form descriptive tags are allowed alongside the type tag.
98+
valid_types="skills agents hooks commands mcp-servers lsp-servers integration other"
99+
if ! jq -e '.tags' "$f" >/dev/null 2>&1; then
100+
echo " ERROR: Missing required field 'tags'. Must include at least one component type: $valid_types"
101+
errors=$((errors + 1))
102+
else
103+
tag_count=$(jq -r '.tags | length' "$f")
104+
if [ "$tag_count" -eq 0 ]; then
105+
echo " ERROR: 'tags' is empty. Must include at least one component type: $valid_types"
106+
errors=$((errors + 1))
107+
else
108+
has_type=0
109+
for tag in $(jq -r '.tags[]' "$f" 2>/dev/null); do
110+
if echo "$valid_types" | grep -qw "$tag"; then
111+
has_type=1
112+
break
113+
fi
114+
done
115+
if [ "$has_type" -eq 0 ]; then
116+
echo " ERROR: 'tags' must include at least one component type: $valid_types"
117+
errors=$((errors + 1))
118+
fi
119+
fi
120+
fi
102121
done
103122
104123
if [ "$errors" -gt 0 ]; then

CONTRIBUTING.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ With the following content:
3434

3535
### Tags
3636

37-
The `tags` field is optional but recommended. It tells users what components your plugin provides. Use one or more of:
37+
The `tags` field is **required** and must include **at least one** of the component types below. It tells users what your plugin provides:
3838

3939
- `skills` — skill directories with `SKILL.md`
4040
- `agents` — subagent markdown files
@@ -43,6 +43,9 @@ The `tags` field is optional but recommended. It tells users what components you
4343
- `mcp-servers` — MCP server configurations
4444
- `lsp-servers` — language server configurations
4545
- `integration` — external tool integrations (not a Claude Code plugin per se)
46+
- `other` — anything that doesn't fit the categories above
47+
48+
You may also add free-form descriptive tags alongside the type tag (e.g. `["skills", "python", "aws"]`).
4649

4750
<details>
4851
<summary>Alternative sources (Git URL, Git subdirectory, npm)</summary>

plugins/amazon-location-service.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
"aws",
1717
"location",
1818
"maps",
19-
"geospatial"
19+
"geospatial",
20+
"other"
2021
],
2122
"license": "MIT"
2223
}

plugins/aws-amplify.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"tags": [
1616
"aws",
1717
"amplify",
18-
"fullstack"
18+
"fullstack",
19+
"other"
1920
],
2021
"license": "MIT"
2122
}

plugins/aws-serverless.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
"sam",
2222
"api gateway",
2323
"eventbridge",
24-
"step functions"
24+
"step functions",
25+
"other"
2526
],
2627
"license": "MIT"
2728
}

plugins/coding-tutor.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
"tutorial",
1919
"learning",
2020
"spaced-repetition",
21-
"education"
21+
"education",
22+
"other"
2223
],
2324
"license": "MIT"
2425
}

plugins/compound-engineering.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
"code-review",
2020
"quality",
2121
"knowledge-management",
22-
"image-generation"
22+
"image-generation",
23+
"other"
2324
],
2425
"license": "MIT"
2526
}

0 commit comments

Comments
 (0)