skillcask 0.1.2 → 0.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/README.md +59 -4
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -75,6 +75,7 @@ skillcask status # manifest vs lock vs installed fil
|
|
|
75
75
|
skills.toml # manifest, commit it
|
|
76
76
|
skills.lock # lock, commit it
|
|
77
77
|
.agents/skills/<name>/ # installed skill (gitignored)
|
|
78
|
+
.agents/skills/.skillcask-installed # what this machine installed (gitignored)
|
|
78
79
|
.claude/skills/<name> -> ../../.agents/skills/<name>
|
|
79
80
|
.junie/skills/<name> -> ../../.agents/skills/<name>
|
|
80
81
|
.gitignore # managed block
|
|
@@ -84,7 +85,9 @@ Project skills live in `.skills/<name>/SKILL.md` (`[agents] local`). skillcask l
|
|
|
84
85
|
into the store (`.agents/skills/<name> -> ../../.skills/<name>`) and from there into every agent
|
|
85
86
|
directory. These links are committed, so they work in every clone. A directory written by hand
|
|
86
87
|
straight into `.agents/skills/` is linked the same way. A project skill with the same name as a
|
|
87
|
-
locked one is an error.
|
|
88
|
+
locked one is an error. When a skill with the same name exists in your home (`~/.claude/skills`,
|
|
89
|
+
`~/.agents/skills`, …), `install` and `doctor` print a warning: Claude Code runs the personal one,
|
|
90
|
+
Codex lists both.
|
|
88
91
|
|
|
89
92
|
### skills.toml
|
|
90
93
|
|
|
@@ -97,7 +100,7 @@ acme = { type = "composer", url = "https://git.example.com/api/v4/group/42/-/pac
|
|
|
97
100
|
"netresearch/agent-jira-skill" = "^3.34"
|
|
98
101
|
"acme/agents-md" = { version = "^1.0", repository = "acme" }
|
|
99
102
|
"acme/review" = { version = "1.4.2", repository = "acme", skills = ["review"] }
|
|
100
|
-
"mattpocock/skills" = { github = true, version = "^1.3", skills = ["tdd", "
|
|
103
|
+
"mattpocock/skills" = { github = true, version = "^1.3", skills = ["tdd", "code-review"], rename = { code-review = "mp-code-review" } }
|
|
101
104
|
"anthropics/skills" = { github = true, skills = ["pdf"] } # default branch
|
|
102
105
|
|
|
103
106
|
[agents]
|
|
@@ -114,8 +117,43 @@ Constraints follow Composer semantics: `^0.3` means `>=0.3.0 <0.4.0`, `~1.2` mea
|
|
|
114
117
|
`>=1.2 <2.0`, and pre-releases are only selected when the constraint names a stability
|
|
115
118
|
(`^1.0@beta`).
|
|
116
119
|
|
|
120
|
+
### Name conflicts
|
|
121
|
+
|
|
122
|
+
Skills have no namespaces: an agent knows a skill by its name. Two skills with the same name in
|
|
123
|
+
one project are an error. Install one of them under another name with `rename`:
|
|
124
|
+
|
|
125
|
+
```toml
|
|
126
|
+
"mattpocock/skills" = { github = true, rename = { code-review = "mp-code-review" } }
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
skillcask then installs `.agents/skills/mp-code-review` and changes the `name:` line in its
|
|
130
|
+
`SKILL.md`; the lock records the original name and the hash of the renamed copy. Nothing else in
|
|
131
|
+
the skill changes, so text that mentions the old name (`/code-review`) stays as it is.
|
|
132
|
+
`add`, `install` and `update` offer the rename when they hit a conflict in a terminal.
|
|
133
|
+
|
|
134
|
+
### Personal skills (`--global`)
|
|
135
|
+
|
|
136
|
+
`skillcask --global` (`-g`) manages skills for your user instead of a project, with the same
|
|
137
|
+
manifest, lock and verification:
|
|
138
|
+
|
|
139
|
+
```sh
|
|
140
|
+
skillcask -g add github:mattpocock/skills/grill-me
|
|
141
|
+
skillcask -g install --frozen # e.g. from a dotfiles repository
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
- `skills.toml`, `skills.lock` and an optional `auth.json` live in `~/.config/skillcask`
|
|
145
|
+
(`$XDG_CONFIG_HOME/skillcask`; `SKILLCASK_HOME` overrides both). Keep them in your dotfiles.
|
|
146
|
+
- Skills go to `~/.agents/skills` (read by Codex), with links in `~/.claude/skills` and
|
|
147
|
+
`~/.junie/skills` (`[agents] targets`, relative to home). Links are absolute, so a symlinked
|
|
148
|
+
`~/.claude` works. `[agents] local` does not apply.
|
|
149
|
+
- Personal skills you wrote by hand stay where they are and are not linked anywhere.
|
|
150
|
+
- The list of managed paths is `~/.agents/skills/.skillcask-installed`, local to the machine;
|
|
151
|
+
nothing touches git.
|
|
152
|
+
|
|
117
153
|
### Commands
|
|
118
154
|
|
|
155
|
+
Every command except `publish` takes `-g, --global`.
|
|
156
|
+
|
|
119
157
|
| Command | |
|
|
120
158
|
|---|---|
|
|
121
159
|
| `init` | Create `skills.toml`. |
|
|
@@ -128,7 +166,7 @@ Constraints follow Composer semantics: `^0.3` means `>=0.3.0 <0.4.0`, `~1.2` mea
|
|
|
128
166
|
| `status` | Exit 1 when manifest, lock or installed files disagree. |
|
|
129
167
|
| `doctor [--fix]` | Broken or committed links, stale gitignore block, modified skills. |
|
|
130
168
|
| `search <query>` | Packagist (`type=ai-agent-skill`) and listed private packages. |
|
|
131
|
-
| `publish --vendor v --base-url URL --out DIR [paths…]` | Build a static Composer repository from a monorepo. |
|
|
169
|
+
| `publish --vendor v --base-url URL --out DIR [--inline] [--dist-url TPL] [paths…]` | Build a static Composer repository from a monorepo. |
|
|
132
170
|
| `<other>` | Runs `skillcask-<other>` from `PATH`, like git and cargo plugins. |
|
|
133
171
|
|
|
134
172
|
Exit codes: 0 ok, 1 manifest/lock/status problems, 2 authentication, 3 network, 4 hash mismatch,
|
|
@@ -187,6 +225,9 @@ what you picked.
|
|
|
187
225
|
- Archives with absolute paths, `..`, devices or symlinks that leave their skill are rejected.
|
|
188
226
|
No symlink is ever written from a package. Size and file count are capped (`--max-download`,
|
|
189
227
|
`--max-unpacked`, `--max-files`).
|
|
228
|
+
- File names must be valid on every OS: Windows-reserved names, `<>:"|?*\`, control characters
|
|
229
|
+
and paths that collide by case or Unicode form fail a skill that contains them, and are
|
|
230
|
+
skipped outside the selected skills.
|
|
190
231
|
- No package code runs, ever. No telemetry.
|
|
191
232
|
- `min-release-age` for GitHub sources reads commit dates, which the committer sets. A
|
|
192
233
|
backdated commit passes the cooldown; reviewing what `add`/`update` change in `skills.lock` is
|
|
@@ -211,9 +252,23 @@ This writes `packages.json`, `p2/acme/<name>.json` and deterministic zips under
|
|
|
211
252
|
versions are immutable, and re-running on unchanged skills changes no file. Serve the directory
|
|
212
253
|
over HTTPS.
|
|
213
254
|
|
|
255
|
+
Hosts that cannot serve `/` inside file names (GitLab's Generic Package Registry) take a single
|
|
256
|
+
file instead:
|
|
257
|
+
|
|
258
|
+
```sh
|
|
259
|
+
skillcask publish --inline --vendor acme --out composer/ skills/ \
|
|
260
|
+
--dist-url 'https://git.example.com/api/v4/projects/7/packages/generic/{vendor}-{name}/{version}/{name}-{version}.zip'
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
`--inline` puts every package into `packages.json` and writes no `p2/`. Upload each
|
|
264
|
+
`dist/<vendor>/<name>/<version>.zip` to the URL the template gives, and commit `packages.json` to
|
|
265
|
+
a repository. A repository `url` with a query string is used as given, so clients can read the
|
|
266
|
+
file through the GitLab raw files API
|
|
267
|
+
(`.../repository/files/composer%2Fpackages.json/raw?ref=main`) with a `gitlab-token`.
|
|
268
|
+
|
|
214
269
|
## Design
|
|
215
270
|
|
|
216
|
-
See [docs/
|
|
271
|
+
See [docs/specs/2026-10-19-skillcask-v1.md](docs/specs/2026-10-19-skillcask-v1.md).
|
|
217
272
|
|
|
218
273
|
## License
|
|
219
274
|
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"hasInstallScript": true,
|
|
20
20
|
"license": "MIT OR Apache-2.0",
|
|
21
21
|
"name": "skillcask",
|
|
22
|
-
"version": "0.
|
|
22
|
+
"version": "0.2.0"
|
|
23
23
|
},
|
|
24
24
|
"node_modules/detect-libc": {
|
|
25
25
|
"engines": {
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
50
|
"requires": true,
|
|
51
|
-
"version": "0.
|
|
51
|
+
"version": "0.2.0"
|
|
52
52
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"artifactDownloadUrls": [
|
|
3
|
-
"https://github.com/puniserv/skillcask/releases/download/v0.
|
|
3
|
+
"https://github.com/puniserv/skillcask/releases/download/v0.2.0"
|
|
4
4
|
],
|
|
5
5
|
"bin": {
|
|
6
6
|
"skillcask": "run-skillcask.js"
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"zipExt": ".tar.xz"
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
|
-
"version": "0.
|
|
107
|
+
"version": "0.2.0",
|
|
108
108
|
"volta": {
|
|
109
109
|
"node": "18.14.1",
|
|
110
110
|
"npm": "9.5.0"
|