skillcask 0.4.1 → 0.6.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 +102 -8
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -77,7 +77,6 @@ skills.lock # lock, commit it
|
|
|
77
77
|
.agents/skills/<name>/ # installed skill (gitignored)
|
|
78
78
|
.agents/skills/.skillcask-installed # what this machine installed (gitignored)
|
|
79
79
|
.claude/skills/<name> -> ../../.agents/skills/<name>
|
|
80
|
-
.junie/skills/<name> -> ../../.agents/skills/<name>
|
|
81
80
|
.gitignore # managed block
|
|
82
81
|
```
|
|
83
82
|
|
|
@@ -108,7 +107,7 @@ github = { type = "github", url = "https://api.github.com" } # GitHub Enterpri
|
|
|
108
107
|
"anthropics/skills" = { github = true, skills = ["pdf"] } # default branch
|
|
109
108
|
|
|
110
109
|
[agents]
|
|
111
|
-
targets = ["
|
|
110
|
+
targets = ["claude", "kiro"] # agent names or paths with a "/"; default: config.toml, else ["claude"]
|
|
112
111
|
local = ".skills" # project skills
|
|
113
112
|
|
|
114
113
|
[policy]
|
|
@@ -119,6 +118,32 @@ github-requires = false # true: dependencies may come from GitHub
|
|
|
119
118
|
allow-sources = ["acme", "own", "packagist", "github"] # only these sources; default: all
|
|
120
119
|
```
|
|
121
120
|
|
|
121
|
+
### Agents
|
|
122
|
+
|
|
123
|
+
Most agents read `.agents/skills` themselves (Codex, Copilot, Cursor, Gemini CLI, OpenCode, Amp,
|
|
124
|
+
Junie, Devin/Windsurf, Roo Code, Cline, Goose, Factory, Mistral Vibe), so they need no link.
|
|
125
|
+
`[agents] targets` lists the agents that need one, by name, or any directory as a path with a `/`:
|
|
126
|
+
|
|
127
|
+
| Name | Project | Home (`--global`) |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| `claude` | `.claude/skills` | `~/.claude/skills` |
|
|
130
|
+
| `kiro` | `.kiro/skills` | `~/.kiro/skills` |
|
|
131
|
+
| `junie` | store | `~/.junie/skills` |
|
|
132
|
+
| `codex`, `copilot`, `cursor`, `gemini`, `opencode`, `amp`, `devin`, `roo`, `cline`, `goose`, `factory`, `vibe` | store | store |
|
|
133
|
+
|
|
134
|
+
Set the list once in `config.toml` next to the global manifest; a `skills.toml` that sets
|
|
135
|
+
`targets` replaces it. Manifests from before 0.6.0 carry an explicit list: delete the line to
|
|
136
|
+
follow `config.toml`.
|
|
137
|
+
|
|
138
|
+
```toml
|
|
139
|
+
# ~/.config/skillcask/config.toml
|
|
140
|
+
[agents]
|
|
141
|
+
targets = ["claude", "kiro"]
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
When a target is dropped, the next `install` removes the links skillcask made there; `doctor`
|
|
145
|
+
reports them. `status` prints the targets, where they came from and the directories they link.
|
|
146
|
+
|
|
122
147
|
Constraints follow Composer semantics: `^0.3` means `>=0.3.0 <0.4.0`, `~1.2` means
|
|
123
148
|
`>=1.2 <2.0`, and pre-releases are only selected when the constraint names a stability
|
|
124
149
|
(`^1.0@beta`).
|
|
@@ -148,6 +173,18 @@ allow-sources = ["https://gitlab.example.com/", "github"]
|
|
|
148
173
|
enforce = ["allow-sources"]
|
|
149
174
|
```
|
|
150
175
|
|
|
176
|
+
An enforced `min-release-age` also applies to a repository's own `min-release-age`: a project
|
|
177
|
+
may only make it longer. Exceptions, by URL prefix, stay in `config.toml`:
|
|
178
|
+
|
|
179
|
+
```toml
|
|
180
|
+
[policy]
|
|
181
|
+
min-release-age = "3d"
|
|
182
|
+
enforce = ["min-release-age"]
|
|
183
|
+
|
|
184
|
+
[policy.repository-min-release-age]
|
|
185
|
+
"https://gitlab.example.com/" = "0" # internal skills, reviewed in merge requests
|
|
186
|
+
```
|
|
187
|
+
|
|
151
188
|
`config.toml` and the environment take URL prefixes, not repository names, since a name means
|
|
152
189
|
whatever a project calls it. `skillcask status` prints each key that is set and where it came
|
|
153
190
|
from.
|
|
@@ -199,8 +236,8 @@ skillcask -g install --frozen # e.g. from a dotfiles repository
|
|
|
199
236
|
|
|
200
237
|
- `skills.toml`, `skills.lock` and an optional `auth.json` live in `~/.config/skillcask`
|
|
201
238
|
(`$XDG_CONFIG_HOME/skillcask`; `SKILLCASK_HOME` overrides both). Keep them in your dotfiles.
|
|
202
|
-
- Skills go to `~/.agents/skills` (read by
|
|
203
|
-
|
|
239
|
+
- Skills go to `~/.agents/skills` (read by most agents), with links in `~/.claude/skills`
|
|
240
|
+
(`[agents] targets`, see Agents). Links are absolute, so a symlinked
|
|
204
241
|
`~/.claude` works. `[agents] local` does not apply.
|
|
205
242
|
- Personal skills you wrote by hand stay where they are and are not linked anywhere.
|
|
206
243
|
- The list of managed paths is `~/.agents/skills/.skillcask-installed`, local to the machine;
|
|
@@ -208,7 +245,7 @@ skillcask -g install --frozen # e.g. from a dotfiles repository
|
|
|
208
245
|
|
|
209
246
|
### Commands
|
|
210
247
|
|
|
211
|
-
Every command except `publish` takes `-g, --global`.
|
|
248
|
+
Every command except `publish` and `validate` takes `-g, --global`.
|
|
212
249
|
|
|
213
250
|
| Command | |
|
|
214
251
|
|---|---|
|
|
@@ -217,13 +254,16 @@ Every command except `publish` takes `-g, --global`.
|
|
|
217
254
|
| `add github:<owner/repo>[/skill][@version-or-ref]` | The same from a GitHub repository, see below. |
|
|
218
255
|
| `remove <vendor/name>…` | Drop from manifest and lock; delete files, links and gitignore lines. |
|
|
219
256
|
| `install [--frozen]` | Install the lock. `--frozen` (implied by `CI`) fails when the lock is out of date. |
|
|
220
|
-
| `update [vendor/name…]` | Re-resolve within constraints. |
|
|
221
|
-
| `outdated` | Newer versions, and when cooled-down ones become eligible. |
|
|
257
|
+
| `update [vendor/name…] [--diff]` | Re-resolve within constraints. `--diff` prints what changes in each updated or added package; it does not ask before installing. |
|
|
258
|
+
| `outdated [--strict]` | Newer versions, and when cooled-down ones become eligible. `--strict` exits 1 when `update` would lock a newer version. |
|
|
259
|
+
| `diff [vendor/name] [--to constraint]` | Unified diff of skill files from the locked version to the one `update` would lock, see below. |
|
|
260
|
+
| `info <vendor/name[@constraint]\|github:owner/repo\|skill>` | A package's skills, versions, description, license and requirements, or which package installs a skill. |
|
|
222
261
|
| `status` | Exit 1 when manifest, lock or installed files disagree. |
|
|
223
|
-
| `doctor [--fix]` | Broken or committed links, stale gitignore block, modified skills. |
|
|
262
|
+
| `doctor [--fix]` | Broken or committed links, stale gitignore block, modified skills; lists each check it ran. |
|
|
224
263
|
| `search <query>` | Packagist (`type=ai-agent-skill`) and skill packages of the other repositories, GitLab included. |
|
|
225
264
|
| `auth set\|remove <host>` | Keep a registry token in git's credential helper (Keychain, Credential Manager, libsecret). |
|
|
226
265
|
| `publish --vendor v --base-url URL --out DIR [--inline] [--dist-url TPL] [paths…]` | Build a static Composer repository from a monorepo. |
|
|
266
|
+
| `validate [paths…]` | Check `SKILL.md` files against the Agent Skills spec, see below. |
|
|
227
267
|
| `<other>` | Runs `skillcask-<other>` from `PATH`, like git and cargo plugins. |
|
|
228
268
|
|
|
229
269
|
Exit codes: 0 ok, 1 manifest/lock/status problems, 2 authentication, 3 network, 4 hash mismatch,
|
|
@@ -234,6 +274,37 @@ the next step on a `hint:` line. For coding agents, `--agent` or `SKILLCASK_AGEN
|
|
|
234
274
|
uncoloured, tab-separated output with only the rows that need action; it is on by itself when
|
|
235
275
|
`AI_AGENT` or `CLAUDECODE=1` is set, unless `SKILLCASK_AGENT=0`.
|
|
236
276
|
|
|
277
|
+
A failed connection, HTTP 429 or a 5xx response is retried twice, after 1 s and 2 s or after the
|
|
278
|
+
`Retry-After` seconds the server sends. A `Retry-After` above 60 s, a spent GitHub rate limit, a
|
|
279
|
+
timeout or a TLS error fails at once.
|
|
280
|
+
|
|
281
|
+
`add`, `update` and `outdated` warn about a package its registry marks `abandoned` and name the
|
|
282
|
+
replacement when there is one (and it is a valid package name). Installing from the lock does not ask the registry.
|
|
283
|
+
|
|
284
|
+
**Reviewing an update:** a skill is a prompt, so read what changes before you take it.
|
|
285
|
+
`skillcask diff` prints a unified diff of the skill files, from the locked version to the one
|
|
286
|
+
`update` would lock (newest within the constraint, past the cooldown), for every entry in
|
|
287
|
+
`skills.toml` with a newer version; `diff vendor/name --to 2.0.0` compares one package with
|
|
288
|
+
another version. A package new to the lock, such as a dependency a new version adds, is shown as
|
|
289
|
+
all added. Nothing is installed or written. Control characters, bidi controls and other
|
|
290
|
+
invisible characters in the diff are shown as `<U+XXXX>` (a carriage return too, when the line
|
|
291
|
+
ends change), and invisible characters in changed files are warned about. Files over 1 MiB or
|
|
292
|
+
10,000 lines print `Files differ (too large to show)`. `update --diff` prints the same diff
|
|
293
|
+
before it writes the lock, then installs without asking: run `skillcask diff` first to review
|
|
294
|
+
and decide. A scheduled CI job can run `skillcask outdated --strict` (exit 1 when something is to
|
|
295
|
+
update), then `skillcask update --diff` and open a pull request with the output.
|
|
296
|
+
|
|
297
|
+
**Where a skill comes from:** `skillcask info vendor/name` shows the package's skills with their
|
|
298
|
+
descriptions, its versions, description, license, `abandoned` and `requires`, for the locked
|
|
299
|
+
version or else the newest one `add` would take (`@constraint` for another); `info
|
|
300
|
+
github:owner/repo` lists the skills of a GitHub repository before you add it. `skillcask info
|
|
301
|
+
<skill>` names the package that installs an installed skill and the `skills.toml` entry, or the
|
|
302
|
+
chain of `requires`, that brings it in.
|
|
303
|
+
|
|
304
|
+
**Merge conflicts in `skills.lock`:** a lock with conflict markers fails with a hint. Resolve
|
|
305
|
+
`skills.toml`, keep either side of the lock (`git checkout --theirs skills.lock`) and run
|
|
306
|
+
`skillcask install`: it locks the entries from the other side that the kept lock lacks.
|
|
307
|
+
|
|
237
308
|
### Skills from GitHub and skills.sh
|
|
238
309
|
|
|
239
310
|
[skills.sh](https://skills.sh) lists skills as `owner/repo/skill`, for example
|
|
@@ -291,6 +362,13 @@ what you picked.
|
|
|
291
362
|
and paths that collide by case or Unicode form fail a skill that contains them, and are
|
|
292
363
|
skipped outside the selected skills.
|
|
293
364
|
- No package code runs, ever. No telemetry.
|
|
365
|
+
- `add` and `update` (and `install` when it resolves) warn about characters a reviewer cannot
|
|
366
|
+
see in the text files of new content: bidi controls (`U+202A`-`U+202E`, `U+2066`-`U+2069`,
|
|
367
|
+
`U+200E`, `U+200F`, `U+061C`), zero-width characters (`U+200B`-`U+200D`, `U+2060`, `U+FEFF`) and
|
|
368
|
+
Unicode tags (`U+E0000`-`U+E007F`), as `warning: acme/x: skills/foo/SKILL.md:12: U+202E
|
|
369
|
+
RIGHT-TO-LEFT OVERRIDE`, at most five per file. A leading byte order mark and a zero width
|
|
370
|
+
joiner inside an emoji are not reported; right-to-left and Indic text can trigger warnings.
|
|
371
|
+
Installing from the lock does not warn again.
|
|
294
372
|
- `min-release-age` for GitHub sources uses times GitHub sets: release publication for tags,
|
|
295
373
|
push times from the Activity API for branches. A tag without a release, or a ref GitHub lists no
|
|
296
374
|
pushes for, falls back to commit dates, which the committer sets; reviewing what `add`/`update`
|
|
@@ -319,6 +397,22 @@ This writes `packages.json`, `p2/acme/<name>.json` and deterministic zips under
|
|
|
319
397
|
versions are immutable, and re-running on unchanged skills changes no file. Serve the directory
|
|
320
398
|
over HTTPS.
|
|
321
399
|
|
|
400
|
+
Check the skills before publishing; `validate` exits 1 on any error and warns about invisible
|
|
401
|
+
Unicode, as `add` does:
|
|
402
|
+
|
|
403
|
+
```sh
|
|
404
|
+
skillcask validate skills/
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
It follows the [Agent Skills specification](https://agentskills.io/specification): `name` 1-64
|
|
408
|
+
lowercase letters, digits and single hyphens, equal to the directory name; `description` 1-1024
|
|
409
|
+
characters; `compatibility` at most 500. Without paths it searches the current directory.
|
|
410
|
+
`publish` skips a `SKILL.md` without `name` or `version` and names it in a warning.
|
|
411
|
+
|
|
412
|
+
To retire a skill, publish a new version with `deprecated: true`, or `deprecated: vendor/name`
|
|
413
|
+
naming its replacement, in the frontmatter. It becomes Composer's `abandoned`, and consumers see a
|
|
414
|
+
warning on `add`, `update` and `outdated`.
|
|
415
|
+
|
|
322
416
|
Hosts that cannot serve `/` inside file names (GitLab's Generic Package Registry) take a single
|
|
323
417
|
file instead:
|
|
324
418
|
|
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.6.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.6.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.6.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.6.0",
|
|
108
108
|
"volta": {
|
|
109
109
|
"node": "18.14.1",
|
|
110
110
|
"npm": "9.5.0"
|