skillcask 0.6.0 → 0.7.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 CHANGED
@@ -60,6 +60,27 @@ build provenance attestations:
60
60
  gh attestation verify skillcask-x86_64-unknown-linux-gnu.tar.xz -R puniserv/skillcask
61
61
  ```
62
62
 
63
+ **GitHub Actions**
64
+
65
+ ```yaml
66
+ permissions:
67
+ contents: read
68
+ attestations: read # for the provenance check
69
+ steps:
70
+ - uses: actions/checkout@<sha>
71
+ - uses: puniserv/skillcask@<commit sha of a release tag> # vX.Y.Z
72
+ with:
73
+ version: X.Y.Z # needed when the action is pinned to a sha, not a tag
74
+ args: install --frozen # default
75
+ # working-directory: .
76
+ # verify-attestation: "true" # default
77
+ ```
78
+
79
+ The action downloads the release archive for the runner (Linux x64 and arm64, macOS, Windows
80
+ x64), checks its sha256 and its build provenance attestation, puts `skillcask` on `PATH` and runs
81
+ it with `args`. It runs no other action. Used at a tag (`@vX.Y.Z`) it takes the version from the
82
+ tag.
83
+
63
84
  ## Use
64
85
 
65
86
  ```sh
@@ -116,6 +137,7 @@ allow-ranges = true # false: every version must be exact
116
137
  packagist = true # false: drop the implicit Packagist repository
117
138
  github-requires = false # true: dependencies may come from GitHub
118
139
  allow-sources = ["acme", "own", "packagist", "github"] # only these sources; default: all
140
+ deny-patterns = false # true: risky patterns in new skill text fail instead of warning
119
141
  ```
120
142
 
121
143
  ### Agents
@@ -160,8 +182,8 @@ Policy can also come from `config.toml` next to the global manifest (`~/.config/
160
182
  from the environment. The first layer that sets a key wins:
161
183
 
162
184
  1. `SKILLCASK_ALLOW_SOURCES`, `SKILLCASK_MIN_RELEASE_AGE`, `SKILLCASK_ALLOW_RANGES`,
163
- `SKILLCASK_PACKAGIST`, `SKILLCASK_GITHUB_REQUIRES` (overriding an enforced key prints a
164
- warning);
185
+ `SKILLCASK_PACKAGIST`, `SKILLCASK_GITHUB_REQUIRES`, `SKILLCASK_DENY_PATTERNS` (overriding an
186
+ enforced key prints a warning);
165
187
  2. keys `config.toml` lists in `enforce`: a project that sets them otherwise fails;
166
188
  3. `[policy]` in `skills.toml`;
167
189
  4. the other keys of `config.toml`, as defaults.
@@ -252,6 +274,7 @@ Every command except `publish` and `validate` takes `-g, --global`.
252
274
  | `init` | Create `skills.toml`. |
253
275
  | `add <vendor/name>[@constraint] [--repository r]` | Resolve, lock and install. |
254
276
  | `add github:<owner/repo>[/skill][@version-or-ref]` | The same from a GitHub repository, see below. |
277
+ | `add git:<https-url>[@version-or-ref]` | The same from any git repository over HTTPS, see below. |
255
278
  | `remove <vendor/name>…` | Drop from manifest and lock; delete files, links and gitignore lines. |
256
279
  | `install [--frozen]` | Install the lock. `--frozen` (implied by `CI`) fails when the lock is out of date. |
257
280
  | `update [vendor/name…] [--diff]` | Re-resolve within constraints. `--diff` prints what changes in each updated or added package; it does not ask before installing. |
@@ -266,6 +289,11 @@ Every command except `publish` and `validate` takes `-g, --global`.
266
289
  | `validate [paths…]` | Check `SKILL.md` files against the Agent Skills spec, see below. |
267
290
  | `<other>` | Runs `skillcask-<other>` from `PATH`, like git and cargo plugins. |
268
291
 
292
+ `status`, `outdated`, `info`, `search` and `doctor` take `--json`: one JSON document on one line of
293
+ 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>`). For example `skillcask outdated --json | jq
295
+ '.packages[] | select(.within != .locked)'`.
296
+
269
297
  Exit codes: 0 ok, 1 manifest/lock/status problems, 2 authentication, 3 network, 4 hash mismatch,
270
298
  5 IO or archive error.
271
299
 
@@ -345,8 +373,29 @@ entry; `install` from the lock uses none, it downloads the pinned archive. Set `
345
373
  for a higher limit and for private repositories. `SKILLCASK_GITHUB_API` points at GitHub
346
374
  Enterprise (`https://ghe.example.com/api/v3`).
347
375
 
348
- skills.sh itself is not queried: its API needs a Vercel token. Search on the website, then add
349
- what you picked.
376
+ skills.sh itself is not queried: its API is undocumented and may change without notice. Search
377
+ on the website, then add what you picked.
378
+
379
+ ### Skills from any git repository
380
+
381
+ GitLab, Bitbucket, Azure DevOps, Gitea or a self-hosted server work without a Composer registry:
382
+
383
+ ```sh
384
+ skillcask add git:https://gitlab.example.com/acme/skills.git
385
+ skillcask add git:https://gitlab.example.com/acme/skills.git@main
386
+ ```
387
+
388
+ ```toml
389
+ "acme/skills" = { git = "https://gitlab.example.com/acme/skills.git", version = "^1.0" }
390
+ ```
391
+
392
+ Versions, `ref` and `skills = [...]` work as for GitHub; the entry is named after the last two
393
+ parts of the URL. skillcask speaks git's HTTPS protocol itself: no git binary runs, so no hook or
394
+ filter of the repository can. It fetches the one commit it needs and checks every file against
395
+ the commit's object ids. Credentials come from the same places as for registries (`auth.json`,
396
+ the credential helper, `$CI_JOB_TOKEN` in GitLab CI). Git servers keep no release or push times,
397
+ so `min-release-age` uses commit dates, which the committer sets; a branch whose newest commit is
398
+ too young falls back to an older commit when the server supports partial fetches (`filter`).
350
399
 
351
400
  ## Security
352
401
 
@@ -369,6 +418,22 @@ what you picked.
369
418
  RIGHT-TO-LEFT OVERRIDE`, at most five per file. A leading byte order mark and a zero width
370
419
  joiner inside an emoji are not reported; right-to-left and Indic text can trigger warnings.
371
420
  Installing from the lock does not warn again.
421
+ - The same commands warn about lines that usually mean harm, as `warning: acme/x:
422
+ skills/foo/SKILL.md:12: downloads code into a shell`, at most five per file:
423
+
424
+ | Warning | Matches (case-insensitive) |
425
+ |---|---|
426
+ | downloads code into a shell | `curl`, `wget`, `irm`, `iwr`, `Invoke-WebRequest` or `Invoke-RestMethod` piped (`\|`) into `sh`, `bash`, `zsh`, `dash`, `iex`, `Invoke-Expression`, `python`, `perl`, `ruby` or `node`, also after `sudo` |
427
+ | decodes base64 and runs it | `base64 -d`, `base64 --decode`, `b64decode` or `FromBase64String` with a pipe into a shell, `eval`, `exec(` or `iex` |
428
+ | reads SSH keys | `~/.ssh`, `$HOME/.ssh`, `id_rsa`, `id_ed25519` |
429
+ | reads system account files | `/etc/passwd`, `/etc/shadow` |
430
+ | tells the agent to ignore its instructions | "ignore (all) previous/prior instructions", "disregard all previous/prior" |
431
+
432
+ Skills that teach shell setup trigger some of these legitimately, so they are warnings. With
433
+ `deny-patterns = true` under `[policy]` (or enforced in `config.toml`) they fail the command
434
+ with exit 1 and nothing is written.
435
+ - Plain git sources pin the commit; the lock's `dist-sha256` hashes the commit's file list
436
+ (path, mode, sha256 of the content), so it does not depend on how a server packs objects.
372
437
  - `min-release-age` for GitHub sources uses times GitHub sets: release publication for tags,
373
438
  push times from the Activity API for branches. A tag without a release, or a ref GitHub lists no
374
439
  pushes for, falls back to commit dates, which the committer sets; reviewing what `add`/`update`
@@ -19,7 +19,7 @@
19
19
  "hasInstallScript": true,
20
20
  "license": "MIT OR Apache-2.0",
21
21
  "name": "skillcask",
22
- "version": "0.6.0"
22
+ "version": "0.7.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.6.0"
51
+ "version": "0.7.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.6.0"
3
+ "https://github.com/puniserv/skillcask/releases/download/v0.7.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.6.0",
107
+ "version": "0.7.0",
108
108
  "volta": {
109
109
  "node": "18.14.1",
110
110
  "npm": "9.5.0"