@nano-step/skill-manager 5.1.0 → 5.2.0
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/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/skills/blog-workflow/SKILL.md +522 -0
- package/skills/blog-workflow/skill.json +16 -0
- package/skills/comprehensive-feature-builder/SKILL.md +558 -0
- package/skills/comprehensive-feature-builder/skill.json +9 -0
- package/skills/idea-workflow/SKILL.md +229 -0
- package/skills/idea-workflow/skill.json +14 -0
- package/skills/reddit-workflow/SKILL.md +187 -0
- package/skills/reddit-workflow/skill.json +14 -0
- package/skills/security-workflow/SKILL.md +258 -0
- package/skills/security-workflow/skill.json +15 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +309 -0
- package/skills/skill-creator/references/metadata-quality-criteria.md +76 -0
- package/skills/skill-creator/references/plugin-marketplace-hosting.md +101 -0
- package/skills/skill-creator/references/plugin-marketplace-overview.md +55 -0
- package/skills/skill-creator/references/plugin-marketplace-schema.md +88 -0
- package/skills/skill-creator/references/plugin-marketplace-sources.md +103 -0
- package/skills/skill-creator/references/plugin-marketplace-troubleshooting.md +80 -0
- package/skills/skill-creator/references/script-quality-criteria.md +106 -0
- package/skills/skill-creator/references/structure-organization-criteria.md +114 -0
- package/skills/skill-creator/references/token-efficiency-criteria.md +74 -0
- package/skills/skill-creator/references/validation-checklist.md +83 -0
- package/skills/skill-creator/scripts/encoding_utils.py +36 -0
- package/skills/skill-creator/scripts/init_skill.py +308 -0
- package/skills/skill-creator/scripts/package_skill.py +115 -0
- package/skills/skill-creator/scripts/quick_validate.py +69 -0
- package/skills/skill-creator/skill.json +14 -0
- package/skills/team-workflow/SKILL.md +227 -0
- package/skills/team-workflow/skill.json +15 -0
- package/skills/ui-ux-pro-max/SKILL.md +292 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/ui-ux-pro-max/skill.json +16 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Plugin Marketplace Hosting & Distribution
|
|
2
|
+
|
|
3
|
+
## GitHub (Recommended)
|
|
4
|
+
|
|
5
|
+
1. Create repository for marketplace
|
|
6
|
+
2. Add `.claude-plugin/marketplace.json` with plugin definitions
|
|
7
|
+
3. Share: users add with `/plugin marketplace add owner/repo`
|
|
8
|
+
|
|
9
|
+
**Benefits:** Built-in version control, issue tracking, team collaboration.
|
|
10
|
+
|
|
11
|
+
## Other Git Services
|
|
12
|
+
|
|
13
|
+
GitLab, Bitbucket, self-hosted servers all work:
|
|
14
|
+
|
|
15
|
+
```shell
|
|
16
|
+
/plugin marketplace add https://gitlab.com/company/plugins.git
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Private Repositories
|
|
20
|
+
|
|
21
|
+
### Manual Installation/Updates
|
|
22
|
+
|
|
23
|
+
Claude Code uses existing git credential helpers. If `git clone` works in terminal, it works in Claude Code.
|
|
24
|
+
|
|
25
|
+
Common credential helpers:
|
|
26
|
+
- `gh auth login` for GitHub
|
|
27
|
+
- macOS Keychain
|
|
28
|
+
- `git-credential-store`
|
|
29
|
+
|
|
30
|
+
### Background Auto-Updates
|
|
31
|
+
|
|
32
|
+
Set authentication token in environment:
|
|
33
|
+
|
|
34
|
+
| Provider | Environment Variables | Notes |
|
|
35
|
+
|-----------|------------------------------|------------------------------|
|
|
36
|
+
| GitHub | `GITHUB_TOKEN` or `GH_TOKEN` | Personal or GitHub App token |
|
|
37
|
+
| GitLab | `GITLAB_TOKEN` or `GL_TOKEN` | Personal or project token |
|
|
38
|
+
| Bitbucket | `BITBUCKET_TOKEN` | App password or repo token |
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Require Marketplaces for Team
|
|
45
|
+
|
|
46
|
+
Add to `.claude/settings.json`:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"extraKnownMarketplaces": {
|
|
51
|
+
"company-tools": {
|
|
52
|
+
"source": {
|
|
53
|
+
"source": "github",
|
|
54
|
+
"repo": "your-org/claude-plugins"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"enabledPlugins": {
|
|
59
|
+
"code-formatter@company-tools": true,
|
|
60
|
+
"deployment-tools@company-tools": true
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Managed Marketplace Restrictions
|
|
66
|
+
|
|
67
|
+
Admins use `strictKnownMarketplaces` in managed settings:
|
|
68
|
+
|
|
69
|
+
| Value | Behavior |
|
|
70
|
+
|---------------------|---------------------------------------------|
|
|
71
|
+
| Undefined (default) | No restrictions, users can add any |
|
|
72
|
+
| Empty array `[]` | Complete lockdown, no new marketplaces |
|
|
73
|
+
| List of sources | Users can only add from allowlist |
|
|
74
|
+
|
|
75
|
+
### Allow Specific Marketplaces Only
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"strictKnownMarketplaces": [
|
|
80
|
+
{ "source": "github", "repo": "acme-corp/approved-plugins" },
|
|
81
|
+
{ "source": "url", "url": "https://plugins.example.com/marketplace.json" }
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Allow All from Internal Server (Regex)
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"strictKnownMarketplaces": [
|
|
91
|
+
{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Test Locally Before Distribution
|
|
97
|
+
|
|
98
|
+
```shell
|
|
99
|
+
/plugin marketplace add ./my-local-marketplace
|
|
100
|
+
/plugin install test-plugin@my-local-marketplace
|
|
101
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Plugin Marketplace Overview
|
|
2
|
+
|
|
3
|
+
Build and host plugin marketplaces to distribute Claude Code extensions across teams and communities.
|
|
4
|
+
|
|
5
|
+
## What is a Plugin Marketplace
|
|
6
|
+
|
|
7
|
+
A plugin marketplace is a catalog that lets you distribute plugins to others. Marketplaces provide:
|
|
8
|
+
- Centralized discovery
|
|
9
|
+
- Version tracking
|
|
10
|
+
- Automatic updates
|
|
11
|
+
- Support for multiple source types (git repositories, local paths, etc.)
|
|
12
|
+
|
|
13
|
+
## Creating & Distributing a Marketplace
|
|
14
|
+
|
|
15
|
+
1. **Create plugins**: Build plugins with commands, agents, hooks, MCP servers, or LSP servers
|
|
16
|
+
2. **Create marketplace file**: Define `marketplace.json` listing plugins and sources
|
|
17
|
+
3. **Host the marketplace**: Push to GitHub, GitLab, or another git host
|
|
18
|
+
4. **Share with users**: Users add with `/plugin marketplace add` and install individual plugins
|
|
19
|
+
|
|
20
|
+
## Directory Structure
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
my-marketplace/
|
|
24
|
+
├── .claude-plugin/
|
|
25
|
+
│ └── marketplace.json # Required: marketplace catalog
|
|
26
|
+
└── plugins/
|
|
27
|
+
└── my-plugin/
|
|
28
|
+
├── .claude-plugin/
|
|
29
|
+
│ └── plugin.json # Plugin manifest
|
|
30
|
+
└── skills/
|
|
31
|
+
└── my-skill/
|
|
32
|
+
└── SKILL.md
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Marketplace File Location
|
|
36
|
+
|
|
37
|
+
Create `.claude-plugin/marketplace.json` in repository root.
|
|
38
|
+
|
|
39
|
+
## User Commands
|
|
40
|
+
|
|
41
|
+
- Add marketplace: `/plugin marketplace add owner/repo` or `/plugin marketplace add ./local-path`
|
|
42
|
+
- Install plugin: `/plugin install plugin-name@marketplace-name`
|
|
43
|
+
- Update marketplace: `/plugin marketplace update`
|
|
44
|
+
- Validate: `/plugin validate .` or `claude plugin validate .`
|
|
45
|
+
|
|
46
|
+
## Related References
|
|
47
|
+
|
|
48
|
+
- Schema details: `references/plugin-marketplace-schema.md`
|
|
49
|
+
- Plugin sources: `references/plugin-marketplace-sources.md`
|
|
50
|
+
- Hosting & distribution: `references/plugin-marketplace-hosting.md`
|
|
51
|
+
- Troubleshooting: `references/plugin-marketplace-troubleshooting.md`
|
|
52
|
+
|
|
53
|
+
## Official Documentation
|
|
54
|
+
|
|
55
|
+
https://code.claude.com/docs/en/plugin-marketplaces.md
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Plugin Marketplace Schema
|
|
2
|
+
|
|
3
|
+
## Marketplace JSON Structure
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"name": "company-tools",
|
|
8
|
+
"owner": {
|
|
9
|
+
"name": "DevTools Team",
|
|
10
|
+
"email": "devtools@example.com"
|
|
11
|
+
},
|
|
12
|
+
"metadata": {
|
|
13
|
+
"description": "Brief marketplace description",
|
|
14
|
+
"version": "1.0.0",
|
|
15
|
+
"pluginRoot": "./plugins"
|
|
16
|
+
},
|
|
17
|
+
"plugins": [...]
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Required Fields
|
|
22
|
+
|
|
23
|
+
| Field | Type | Description | Example |
|
|
24
|
+
|-----------|--------|------------------------------------------|----------------|
|
|
25
|
+
| `name` | string | Marketplace identifier (kebab-case) | `"acme-tools"` |
|
|
26
|
+
| `owner` | object | Maintainer info (name required, email optional) | |
|
|
27
|
+
| `plugins` | array | List of available plugins | |
|
|
28
|
+
|
|
29
|
+
## Reserved Names
|
|
30
|
+
|
|
31
|
+
Cannot use: `claude-code-marketplace`, `claude-code-plugins`, `claude-plugins-official`, `anthropic-marketplace`, `anthropic-plugins`, `agent-skills`, `life-sciences`. Names impersonating official marketplaces also blocked.
|
|
32
|
+
|
|
33
|
+
## Optional Metadata
|
|
34
|
+
|
|
35
|
+
| Field | Type | Description |
|
|
36
|
+
|------------------------|--------|------------------------------------------------|
|
|
37
|
+
| `metadata.description` | string | Brief marketplace description |
|
|
38
|
+
| `metadata.version` | string | Marketplace version |
|
|
39
|
+
| `metadata.pluginRoot` | string | Base directory for relative plugin source paths|
|
|
40
|
+
|
|
41
|
+
## Plugin Entry Schema
|
|
42
|
+
|
|
43
|
+
### Required Plugin Fields
|
|
44
|
+
|
|
45
|
+
| Field | Type | Description |
|
|
46
|
+
|----------|----------------|------------------------------------------------|
|
|
47
|
+
| `name` | string | Plugin identifier (kebab-case) |
|
|
48
|
+
| `source` | string\|object | Where to fetch plugin (path, github, url) |
|
|
49
|
+
|
|
50
|
+
### Optional Plugin Fields
|
|
51
|
+
|
|
52
|
+
| Field | Type | Description |
|
|
53
|
+
|---------------|---------|-----------------------------------------------------|
|
|
54
|
+
| `description` | string | Brief plugin description |
|
|
55
|
+
| `version` | string | Plugin version |
|
|
56
|
+
| `author` | object | Plugin author (name required, email optional) |
|
|
57
|
+
| `homepage` | string | Plugin homepage or docs URL |
|
|
58
|
+
| `repository` | string | Source code repository URL |
|
|
59
|
+
| `license` | string | SPDX license identifier (MIT, Apache-2.0, etc.) |
|
|
60
|
+
| `keywords` | array | Tags for discovery and categorization |
|
|
61
|
+
| `category` | string | Plugin category for organization |
|
|
62
|
+
| `tags` | array | Tags for searchability |
|
|
63
|
+
| `strict` | boolean | If true (default), plugin needs own plugin.json |
|
|
64
|
+
|
|
65
|
+
### Component Configuration Fields
|
|
66
|
+
|
|
67
|
+
| Field | Type | Description |
|
|
68
|
+
|--------------|----------------|----------------------------------------|
|
|
69
|
+
| `commands` | string\|array | Custom paths to command files/dirs |
|
|
70
|
+
| `agents` | string\|array | Custom paths to agent files |
|
|
71
|
+
| `hooks` | string\|object | Hooks configuration or path |
|
|
72
|
+
| `mcpServers` | string\|object | MCP server configurations or path |
|
|
73
|
+
| `lspServers` | string\|object | LSP server configurations or path |
|
|
74
|
+
|
|
75
|
+
## Example Plugin Entry
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"name": "code-formatter",
|
|
80
|
+
"source": "./plugins/formatter",
|
|
81
|
+
"description": "Automatic code formatting on save",
|
|
82
|
+
"version": "2.1.0",
|
|
83
|
+
"author": { "name": "DevTools Team" },
|
|
84
|
+
"license": "MIT",
|
|
85
|
+
"keywords": ["formatting", "linting"],
|
|
86
|
+
"strict": false
|
|
87
|
+
}
|
|
88
|
+
```
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Plugin Marketplace Sources
|
|
2
|
+
|
|
3
|
+
## Source Types
|
|
4
|
+
|
|
5
|
+
### Relative Paths (Local)
|
|
6
|
+
|
|
7
|
+
For plugins in same repository:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"name": "my-plugin",
|
|
12
|
+
"source": "./plugins/my-plugin"
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Note:** Relative paths only work when users add marketplace via Git. For URL-based distribution, use GitHub, npm, or git URL sources.
|
|
17
|
+
|
|
18
|
+
### GitHub Repositories
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"name": "github-plugin",
|
|
23
|
+
"source": {
|
|
24
|
+
"source": "github",
|
|
25
|
+
"repo": "owner/plugin-repo"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Pin to specific branch, tag, or commit:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"name": "github-plugin",
|
|
35
|
+
"source": {
|
|
36
|
+
"source": "github",
|
|
37
|
+
"repo": "owner/plugin-repo",
|
|
38
|
+
"ref": "v2.0.0",
|
|
39
|
+
"sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
| Field | Type | Description |
|
|
45
|
+
|--------|--------|------------------------------------------------------|
|
|
46
|
+
| `repo` | string | Required. GitHub repo in `owner/repo` format |
|
|
47
|
+
| `ref` | string | Optional. Git branch or tag |
|
|
48
|
+
| `sha` | string | Optional. Full 40-char git commit SHA |
|
|
49
|
+
|
|
50
|
+
### Git Repositories (GitLab, Bitbucket, etc.)
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"name": "git-plugin",
|
|
55
|
+
"source": {
|
|
56
|
+
"source": "url",
|
|
57
|
+
"url": "https://gitlab.com/team/plugin.git"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
| Field | Type | Description |
|
|
63
|
+
|-------|--------|---------------------------------------------|
|
|
64
|
+
| `url` | string | Required. Full git URL (must end with .git) |
|
|
65
|
+
| `ref` | string | Optional. Git branch or tag |
|
|
66
|
+
| `sha` | string | Optional. Full 40-char git commit SHA |
|
|
67
|
+
|
|
68
|
+
## Advanced Plugin Entry Example
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"name": "enterprise-tools",
|
|
73
|
+
"source": {
|
|
74
|
+
"source": "github",
|
|
75
|
+
"repo": "company/enterprise-plugin"
|
|
76
|
+
},
|
|
77
|
+
"description": "Enterprise workflow automation tools",
|
|
78
|
+
"version": "2.1.0",
|
|
79
|
+
"commands": [
|
|
80
|
+
"./commands/core/",
|
|
81
|
+
"./commands/enterprise/"
|
|
82
|
+
],
|
|
83
|
+
"agents": ["./agents/security-reviewer.md"],
|
|
84
|
+
"hooks": {
|
|
85
|
+
"PostToolUse": [{
|
|
86
|
+
"matcher": "Write|Edit",
|
|
87
|
+
"hooks": [{
|
|
88
|
+
"type": "command",
|
|
89
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
|
|
90
|
+
}]
|
|
91
|
+
}]
|
|
92
|
+
},
|
|
93
|
+
"mcpServers": {
|
|
94
|
+
"enterprise-db": {
|
|
95
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
|
|
96
|
+
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"strict": false
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Key variable:** `${CLAUDE_PLUGIN_ROOT}` - Use in hooks and MCP configs to reference files within plugin's installation directory (plugins are copied to cache when installed).
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Plugin Marketplace Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Marketplace Not Loading
|
|
4
|
+
|
|
5
|
+
**Symptoms:** Can't add marketplace or see plugins
|
|
6
|
+
|
|
7
|
+
**Solutions:**
|
|
8
|
+
- Verify marketplace URL is accessible
|
|
9
|
+
- Check `.claude-plugin/marketplace.json` exists at specified path
|
|
10
|
+
- Validate JSON syntax: `claude plugin validate .` or `/plugin validate .`
|
|
11
|
+
- For private repos, confirm access permissions
|
|
12
|
+
|
|
13
|
+
## Marketplace Validation Errors
|
|
14
|
+
|
|
15
|
+
Run `claude plugin validate .` or `/plugin validate .` from marketplace directory.
|
|
16
|
+
|
|
17
|
+
### Common Errors
|
|
18
|
+
|
|
19
|
+
| Error | Cause | Solution |
|
|
20
|
+
|-------|-------|----------|
|
|
21
|
+
| `File not found: .claude-plugin/marketplace.json` | Missing manifest | Create `.claude-plugin/marketplace.json` with required fields |
|
|
22
|
+
| `Invalid JSON syntax: Unexpected token...` | JSON syntax error | Check for missing/extra commas, unquoted strings |
|
|
23
|
+
| `Duplicate plugin name "x" found` | Two plugins share same name | Give each plugin unique `name` value |
|
|
24
|
+
| `plugins[0].source: Path traversal not allowed` | Source path contains `..` | Use paths relative to marketplace root without `..` |
|
|
25
|
+
|
|
26
|
+
### Warnings (Non-blocking)
|
|
27
|
+
|
|
28
|
+
- `Marketplace has no plugins defined`: Add at least one plugin to `plugins` array
|
|
29
|
+
- `No marketplace description provided`: Add `metadata.description`
|
|
30
|
+
- `Plugin "x" uses npm source...`: Use `github` or local path sources instead
|
|
31
|
+
|
|
32
|
+
## Plugin Installation Failures
|
|
33
|
+
|
|
34
|
+
**Symptoms:** Marketplace appears but installation fails
|
|
35
|
+
|
|
36
|
+
**Solutions:**
|
|
37
|
+
- Verify plugin source URLs are accessible
|
|
38
|
+
- Check plugin directories contain required files
|
|
39
|
+
- For GitHub sources, ensure repos are public or you have access
|
|
40
|
+
- Test plugin sources manually by cloning/downloading
|
|
41
|
+
|
|
42
|
+
## Private Repository Authentication Fails
|
|
43
|
+
|
|
44
|
+
### Manual Installation
|
|
45
|
+
|
|
46
|
+
- Verify authentication: `gh auth status` for GitHub
|
|
47
|
+
- Check credential helper: `git config --global credential.helper`
|
|
48
|
+
- Try cloning repository manually
|
|
49
|
+
|
|
50
|
+
### Background Auto-Updates
|
|
51
|
+
|
|
52
|
+
- Verify token set: `echo $GITHUB_TOKEN`
|
|
53
|
+
- Check token permissions (read access to repository)
|
|
54
|
+
- GitHub: ensure `repo` scope for private repos
|
|
55
|
+
- GitLab: ensure at least `read_repository` scope
|
|
56
|
+
- Verify token not expired
|
|
57
|
+
|
|
58
|
+
## Relative Paths Fail in URL-based Marketplaces
|
|
59
|
+
|
|
60
|
+
**Symptoms:** Added via URL (like `https://example.com/marketplace.json`), plugins with `"./plugins/my-plugin"` fail with "path not found"
|
|
61
|
+
|
|
62
|
+
**Cause:** URL-based marketplaces only download `marketplace.json` file, not plugin files.
|
|
63
|
+
|
|
64
|
+
**Solutions:**
|
|
65
|
+
- Use external sources (GitHub, npm, git URL) instead of relative paths:
|
|
66
|
+
```json
|
|
67
|
+
{ "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } }
|
|
68
|
+
```
|
|
69
|
+
- Use Git-based marketplace (clones entire repo, relative paths work)
|
|
70
|
+
|
|
71
|
+
## Files Not Found After Installation
|
|
72
|
+
|
|
73
|
+
**Symptoms:** Plugin installs but references to files fail, especially files outside plugin directory
|
|
74
|
+
|
|
75
|
+
**Cause:** Plugins copied to cache directory. Paths like `../shared-utils` won't work.
|
|
76
|
+
|
|
77
|
+
**Solutions:**
|
|
78
|
+
- Use symlinks (followed during copying)
|
|
79
|
+
- Restructure so shared directory is inside plugin source path
|
|
80
|
+
- Reference: Plugin caching and file resolution docs
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Script Quality Criteria
|
|
2
|
+
|
|
3
|
+
Scripts provide deterministic reliability and token efficiency.
|
|
4
|
+
|
|
5
|
+
## When to Include Scripts
|
|
6
|
+
|
|
7
|
+
- Same code rewritten repeatedly
|
|
8
|
+
- Deterministic operations needed
|
|
9
|
+
- Complex transformations
|
|
10
|
+
- External tool integrations
|
|
11
|
+
|
|
12
|
+
## Cross-Platform Requirements
|
|
13
|
+
|
|
14
|
+
**Prefer:** Node.js or Python
|
|
15
|
+
**Avoid:** Bash scripts (not well-supported on Windows)
|
|
16
|
+
|
|
17
|
+
If bash required, provide Node.js/Python alternative.
|
|
18
|
+
|
|
19
|
+
## Testing Requirements
|
|
20
|
+
|
|
21
|
+
**Mandatory:** All scripts must have tests
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Run tests before packaging
|
|
25
|
+
python -m pytest scripts/tests/
|
|
26
|
+
# or
|
|
27
|
+
npm test
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Tests must pass. No skipping failed tests.
|
|
31
|
+
|
|
32
|
+
## Environment Variables
|
|
33
|
+
|
|
34
|
+
Respect hierarchy (first found wins):
|
|
35
|
+
|
|
36
|
+
1. `process.env` (runtime)
|
|
37
|
+
2. `$HOME/.claude/skills/<skill-name>/.env` (skill-specific)
|
|
38
|
+
3. `$HOME/.claude/skills/.env` (shared skills)
|
|
39
|
+
4. `$HOME/.claude/.env` (global)
|
|
40
|
+
5. `./.claude/skills/${SKILL}/.env` (cwd)
|
|
41
|
+
6. `./.claude/skills/.env` (cwd)
|
|
42
|
+
7. `./.claude/.env` (cwd)
|
|
43
|
+
|
|
44
|
+
**Implementation pattern (Python):**
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from dotenv import load_dotenv
|
|
48
|
+
import os
|
|
49
|
+
|
|
50
|
+
# Load in reverse order (last loaded wins if not set)
|
|
51
|
+
load_dotenv('$HOME/.claude/.env')
|
|
52
|
+
load_dotenv('$HOME/.claude/skills/.env')
|
|
53
|
+
load_dotenv('$HOME/.claude/skills/my-skill/.env')
|
|
54
|
+
load_dotenv('./.claude/skills/my-skill/.env')
|
|
55
|
+
load_dotenv('./.claude/skills/.env')
|
|
56
|
+
load_dotenv('./.claude/.env')
|
|
57
|
+
# process.env already takes precedence
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Documentation Requirements
|
|
61
|
+
|
|
62
|
+
### .env.example
|
|
63
|
+
Show required variables without values:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
API_KEY=
|
|
67
|
+
DATABASE_URL=
|
|
68
|
+
DEBUG=false
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### requirements.txt (Python)
|
|
72
|
+
Pin major versions:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
requests>=2.28.0
|
|
76
|
+
python-dotenv>=1.0.0
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### package.json (Node.js)
|
|
80
|
+
Include scripts:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"scripts": {
|
|
85
|
+
"test": "jest"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Manual Testing
|
|
91
|
+
|
|
92
|
+
Before packaging, test with real use cases:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Example: PDF rotation script
|
|
96
|
+
python scripts/rotate_pdf.py input.pdf 90 output.pdf
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Verify output matches expectations.
|
|
100
|
+
|
|
101
|
+
## Error Handling
|
|
102
|
+
|
|
103
|
+
- Clear error messages
|
|
104
|
+
- Graceful failures
|
|
105
|
+
- No silent errors
|
|
106
|
+
- Exit codes: 0 success, non-zero failure
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Structure & Organization Criteria
|
|
2
|
+
|
|
3
|
+
Proper structure enables discovery and maintainability.
|
|
4
|
+
|
|
5
|
+
## Required Directory Layout
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
.claude/skills/
|
|
9
|
+
└── skill-name/
|
|
10
|
+
├── SKILL.md # Required, uppercase
|
|
11
|
+
├── scripts/ # Optional: executable code
|
|
12
|
+
├── references/ # Optional: documentation
|
|
13
|
+
└── assets/ # Optional: output resources
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## SKILL.md Requirements
|
|
17
|
+
|
|
18
|
+
**File name:** Exactly `SKILL.md` (uppercase)
|
|
19
|
+
|
|
20
|
+
**YAML Frontmatter:** Required at top
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
---
|
|
24
|
+
name: skill-name
|
|
25
|
+
description: Under 200 chars, specific triggers
|
|
26
|
+
license: Optional
|
|
27
|
+
version: Optional
|
|
28
|
+
---
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Resource Directories
|
|
32
|
+
|
|
33
|
+
### scripts/
|
|
34
|
+
Executable code for deterministic tasks.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
scripts/
|
|
38
|
+
├── main_operation.py
|
|
39
|
+
├── helper_utils.py
|
|
40
|
+
├── requirements.txt
|
|
41
|
+
├── .env.example
|
|
42
|
+
└── tests/
|
|
43
|
+
└── test_main_operation.py
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### references/
|
|
47
|
+
Documentation loaded into context as needed.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
references/
|
|
51
|
+
├── api-documentation.md
|
|
52
|
+
├── schema-definitions.md
|
|
53
|
+
└── workflow-guides.md
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### assets/
|
|
57
|
+
Files used in output, not loaded into context.
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
assets/
|
|
61
|
+
├── templates/
|
|
62
|
+
├── images/
|
|
63
|
+
└── boilerplate/
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## File Naming
|
|
67
|
+
|
|
68
|
+
**Format:** kebab-case, descriptive
|
|
69
|
+
|
|
70
|
+
**Good:**
|
|
71
|
+
- `api-endpoints-authentication.md`
|
|
72
|
+
- `database-schema-users.md`
|
|
73
|
+
- `rotate-pdf-script.py`
|
|
74
|
+
|
|
75
|
+
**Bad:**
|
|
76
|
+
- `docs.md` - not descriptive
|
|
77
|
+
- `apiEndpoints.md` - wrong case
|
|
78
|
+
- `1.md` - meaningless
|
|
79
|
+
|
|
80
|
+
## Cleanup
|
|
81
|
+
|
|
82
|
+
After initialization, delete unused example files:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Remove if not needed
|
|
86
|
+
rm -rf scripts/example_script.py
|
|
87
|
+
rm -rf references/example_reference.md
|
|
88
|
+
rm -rf assets/example_asset.txt
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Scope Consolidation
|
|
92
|
+
|
|
93
|
+
Related topics should be combined into single skill:
|
|
94
|
+
|
|
95
|
+
**Consolidate:**
|
|
96
|
+
- `cloudflare` + `cloudflare-r2` + `cloudflare-workers` → `devops`
|
|
97
|
+
- `mongodb` + `postgresql` → `databases`
|
|
98
|
+
|
|
99
|
+
**Keep separate:**
|
|
100
|
+
- Unrelated domains
|
|
101
|
+
- Different tech stacks with no overlap
|
|
102
|
+
|
|
103
|
+
## Validation
|
|
104
|
+
|
|
105
|
+
Run packaging script to check structure:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
scripts/package_skill.py <skill-path>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Checks:
|
|
112
|
+
- SKILL.md exists
|
|
113
|
+
- Valid frontmatter
|
|
114
|
+
- Proper directory structure
|