skillcask 0.7.0 → 0.9.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 +62 -11
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -135,7 +135,7 @@ local = ".skills" # project skills
|
|
|
135
135
|
min-release-age = "3d" # cooldown for add/update; "0" disables
|
|
136
136
|
allow-ranges = true # false: every version must be exact
|
|
137
137
|
packagist = true # false: drop the implicit Packagist repository
|
|
138
|
-
github-requires = false # true: dependencies may come from GitHub
|
|
138
|
+
github-requires = false # true: dependencies may come from GitHub or git URLs
|
|
139
139
|
allow-sources = ["acme", "own", "packagist", "github"] # only these sources; default: all
|
|
140
140
|
deny-patterns = false # true: risky patterns in new skill text fail instead of warning
|
|
141
141
|
```
|
|
@@ -161,6 +161,9 @@ follow `config.toml`.
|
|
|
161
161
|
# ~/.config/skillcask/config.toml
|
|
162
162
|
[agents]
|
|
163
163
|
targets = ["claude", "kiro"]
|
|
164
|
+
|
|
165
|
+
[search]
|
|
166
|
+
skills-sh = true # search also asks skills.sh (it receives the query); written by search --remember
|
|
164
167
|
```
|
|
165
168
|
|
|
166
169
|
When a target is dropped, the next `install` removes the links skillcask made there; `doctor`
|
|
@@ -222,6 +225,7 @@ version: 1.2.0
|
|
|
222
225
|
requires:
|
|
223
226
|
acme/security-review: ^1.0
|
|
224
227
|
github:mattpocock/skills/pr: main
|
|
228
|
+
"git:https://git.example.com/team/skills.git#review": ^2.0
|
|
225
229
|
---
|
|
226
230
|
```
|
|
227
231
|
|
|
@@ -229,7 +233,7 @@ requires:
|
|
|
229
233
|
cooldown, same hashes, one version per package (the highest one every requirer accepts). They
|
|
230
234
|
stay out of `skills.toml`; the lock records each package's `requires` and switches to
|
|
231
235
|
`version = 2`. A dependency is looked up only in your repositories, in order, then Packagist;
|
|
232
|
-
a `github:` one needs `github-requires = true`. `remove` drops dependencies nobody needs any
|
|
236
|
+
a `github:` or `git:<url>[#skill]` one needs `github-requires = true`. `remove` drops dependencies nobody needs any
|
|
233
237
|
more, and `status` shows them as `via <requirer>`.
|
|
234
238
|
|
|
235
239
|
### Name conflicts
|
|
@@ -261,13 +265,16 @@ skillcask -g install --frozen # e.g. from a dotfiles repository
|
|
|
261
265
|
- Skills go to `~/.agents/skills` (read by most agents), with links in `~/.claude/skills`
|
|
262
266
|
(`[agents] targets`, see Agents). Links are absolute, so a symlinked
|
|
263
267
|
`~/.claude` works. `[agents] local` does not apply.
|
|
264
|
-
- Personal skills you wrote by hand stay where they are and are not linked anywhere.
|
|
268
|
+
- Personal skills you wrote by hand stay where they are and are not linked anywhere. `status`
|
|
269
|
+
lists them, and copies other tools put in a target, as `not managed`; `status --json` names the
|
|
270
|
+
source `npx skills` recorded for one. `skillcask -g add --adopt <source>` moves such a skill to
|
|
271
|
+
`~/.config/skillcask/adopted/` and installs the package's skill of the same name in its place.
|
|
265
272
|
- The list of managed paths is `~/.agents/skills/.skillcask-installed`, local to the machine;
|
|
266
273
|
nothing touches git.
|
|
267
274
|
|
|
268
275
|
### Commands
|
|
269
276
|
|
|
270
|
-
Every command except `publish` and `
|
|
277
|
+
Every command except `publish`, `validate` and `projects` takes `-g, --global`.
|
|
271
278
|
|
|
272
279
|
| Command | |
|
|
273
280
|
|---|---|
|
|
@@ -278,20 +285,26 @@ Every command except `publish` and `validate` takes `-g, --global`.
|
|
|
278
285
|
| `remove <vendor/name>…` | Drop from manifest and lock; delete files, links and gitignore lines. |
|
|
279
286
|
| `install [--frozen]` | Install the lock. `--frozen` (implied by `CI`) fails when the lock is out of date. |
|
|
280
287
|
| `update [vendor/name…] [--diff]` | Re-resolve within constraints. `--diff` prints what changes in each updated or added package; it does not ask before installing. |
|
|
281
|
-
| `outdated [--strict]` | Newer versions,
|
|
282
|
-
| `diff [vendor/name] [--to constraint]` | Unified diff of skill files from the locked version to the one `update` would lock, see below. |
|
|
283
|
-
| `info <vendor/name[@constraint]\|github:owner/repo\|skill>` | A package's skills, versions, description, license and requirements, or which package installs a skill. |
|
|
284
|
-
| `status` | Exit 1 when manifest, lock or installed files disagree. |
|
|
288
|
+
| `outdated [--strict]` | Newer versions, when cooled-down ones become eligible, and GitHub or git tags moved since they were locked. `--strict` exits 1 when `update` would lock a newer version. |
|
|
289
|
+
| `diff [vendor/name] [--to constraint\|--from old.lock]` | Unified diff of skill files from the locked version to the one `update` would lock, or from an older lock to `skills.lock`, see below. |
|
|
290
|
+
| `info <vendor/name[@constraint]\|github:owner/repo\|git:url\|skill>` | A package's skills, versions, description, license and requirements, or which package installs a skill. |
|
|
291
|
+
| `status` | Exit 1 when manifest, lock or installed files disagree. Also lists the repositories in use (name, type, URL without credentials) and whether `allow-sources` admits each. |
|
|
285
292
|
| `doctor [--fix]` | Broken or committed links, stale gitignore block, modified skills; lists each check it ran. |
|
|
286
|
-
| `
|
|
293
|
+
| `audit [--json\|--sarif]` | What each installed skill reaches (commands, hosts, paths, env vars, scripts) and its findings: modified files, risky lines, invisible characters. Exit 1 on any finding. |
|
|
294
|
+
| `search <query> [--skills-sh\|--no-skills-sh [--remember]]` | Packagist (`type=ai-agent-skill`) and skill packages of the other repositories, GitLab included; with skills.sh on, also the GitHub skills it lists, as `github:owner/repo/skill` with their install count. skills.sh is off until you turn it on, since it receives the query: the first search in a terminal asks once, `--remember` saves a flag's choice, both in `config.toml`. |
|
|
287
295
|
| `auth set\|remove <host>` | Keep a registry token in git's credential helper (Keychain, Credential Manager, libsecret). |
|
|
288
296
|
| `publish --vendor v --base-url URL --out DIR [--inline] [--dist-url TPL] [paths…]` | Build a static Composer repository from a monorepo. |
|
|
289
297
|
| `validate [paths…]` | Check `SKILL.md` files against the Agent Skills spec, see below. |
|
|
298
|
+
| `projects [dirs…]` | Directories that hold `skills.toml` under the given ones (default: the current one), up to 6 levels down; hidden directories, `node_modules`, `vendor`, `target` and `Library` are skipped. |
|
|
299
|
+
| `ui` | A terminal UI over the commands above: skills with their state and updates, `info`, SKILL.md and `audit` per skill, add, adopt, update (diff first), remove, doctor, a filter of the list, search of the registries (and skills.sh, asked once), the repositories in use (`R`) and a projects picker; `g` switches between the project and `--global`. |
|
|
290
300
|
| `<other>` | Runs `skillcask-<other>` from `PATH`, like git and cargo plugins. |
|
|
291
301
|
|
|
292
|
-
`status`, `outdated`, `info`, `search` and `
|
|
302
|
+
`status`, `outdated`, `info`, `search`, `doctor`, `audit` and `projects` take `--json`: one JSON document on one line of
|
|
293
303
|
stdout, with the same exit code; warnings and errors stay on stderr. Package text in it is
|
|
294
|
-
escaped as in the terminal (`<U+202E>`).
|
|
304
|
+
escaped as in the terminal (`<U+202E>`). `status --json` has `repositories`
|
|
305
|
+
(`[{"name", "type", "url", "allowed"}]`); `search --json` results carry `source` (the repository
|
|
306
|
+
name, or `skills.sh`) and `installs`, and the document has `"skills-sh": true|false|null` (`null`:
|
|
307
|
+
never decided). For example `skillcask outdated --json | jq
|
|
295
308
|
'.packages[] | select(.within != .locked)'`.
|
|
296
309
|
|
|
297
310
|
Exit codes: 0 ok, 1 manifest/lock/status problems, 2 authentication, 3 network, 4 hash mismatch,
|
|
@@ -322,6 +335,26 @@ before it writes the lock, then installs without asking: run `skillcask diff` fi
|
|
|
322
335
|
and decide. A scheduled CI job can run `skillcask outdated --strict` (exit 1 when something is to
|
|
323
336
|
update), then `skillcask update --diff` and open a pull request with the output.
|
|
324
337
|
|
|
338
|
+
**Reviewing a lock change:** `skillcask diff --from old.lock` prints the same diff from the
|
|
339
|
+
versions in another lock to those in `skills.lock`, plus the packages it drops, so a reviewer
|
|
340
|
+
sees the skill text a pull request brings in instead of new versions and hashes. Each new dist
|
|
341
|
+
is verified against `skills.lock` as `install` would, and the policy decides which repositories
|
|
342
|
+
may be fetched. skillcask does not run git; the job fetches the old lock:
|
|
343
|
+
|
|
344
|
+
```yaml
|
|
345
|
+
# GitLab CI: print the diff in the merge request pipeline
|
|
346
|
+
skills-diff:
|
|
347
|
+
rules:
|
|
348
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
349
|
+
changes: [skills.lock]
|
|
350
|
+
script:
|
|
351
|
+
- git fetch --depth 1 origin "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"
|
|
352
|
+
- git show FETCH_HEAD:skills.lock | skillcask diff --from -
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
`--from -` reads the old lock from stdin. On GitHub the same lines run in a `pull_request` job with `$GITHUB_BASE_REF`; posting the
|
|
356
|
+
output as a comment is up to the CI.
|
|
357
|
+
|
|
325
358
|
**Where a skill comes from:** `skillcask info vendor/name` shows the package's skills with their
|
|
326
359
|
descriptions, its versions, description, license, `abandoned` and `requires`, for the locked
|
|
327
360
|
version or else the newest one `add` would take (`@constraint` for another); `info
|
|
@@ -432,6 +465,24 @@ too young falls back to an older commit when the server supports partial fetches
|
|
|
432
465
|
Skills that teach shell setup trigger some of these legitimately, so they are warnings. With
|
|
433
466
|
`deny-patterns = true` under `[policy]` (or enforced in `config.toml`) they fail the command
|
|
434
467
|
with exit 1 and nothing is written.
|
|
468
|
+
- `skillcask audit` reviews what is installed now, every skill in `.agents/skills` and the project
|
|
469
|
+
skills: the commands its shell code blocks run, the hosts of its URLs, the paths in the home
|
|
470
|
+
directory or under system roots, the environment variables it reads and the files an agent could
|
|
471
|
+
run. That is read from the text, so it is a hint for review, not a sandbox. It also reports a
|
|
472
|
+
locked skill that differs from the lock, and every risky line and invisible character above,
|
|
473
|
+
with no limit per file, and exits 1 on any of them. `--sarif` prints a SARIF 2.1.0 log for code
|
|
474
|
+
scanning, e.g. in GitHub Actions:
|
|
475
|
+
|
|
476
|
+
```yaml
|
|
477
|
+
- uses: puniserv/skillcask@v0.8.0
|
|
478
|
+
with:
|
|
479
|
+
args: install --frozen
|
|
480
|
+
- run: skillcask audit --sarif > skills.sarif
|
|
481
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
482
|
+
if: always()
|
|
483
|
+
with:
|
|
484
|
+
sarif_file: skills.sarif
|
|
485
|
+
```
|
|
435
486
|
- Plain git sources pin the commit; the lock's `dist-sha256` hashes the commit's file list
|
|
436
487
|
(path, mode, sha256 of the content), so it does not depend on how a server packs objects.
|
|
437
488
|
- `min-release-age` for GitHub sources uses times GitHub sets: release publication for tags,
|
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.9.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.9.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.9.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.9.0",
|
|
108
108
|
"volta": {
|
|
109
109
|
"node": "18.14.1",
|
|
110
110
|
"npm": "9.5.0"
|