skillcask 0.10.5 → 0.10.6

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
@@ -47,7 +47,8 @@ The tap was `puniserv/tap` before 0.10.5. If you installed from it, move to the
47
47
  (your app settings stay):
48
48
 
49
49
  ```sh
50
- brew uninstall skillcask-app skillcask # skillcask alone if you have no app
50
+ brew uninstall --cask puniserv/tap/skillcask-app # skip if you have no app
51
+ brew uninstall puniserv/tap/skillcask
51
52
  brew untap puniserv/tap
52
53
  brew install getresponse/tap/skillcask getresponse/tap/skillcask-app
53
54
  ```
@@ -189,7 +190,8 @@ allow-ranges = true # false: every version must be exact
189
190
  packagist = true # false: drop the implicit Packagist repository
190
191
  github-requires = false # true: dependencies may come from GitHub or git URLs
191
192
  allow-sources = ["acme", "own", "packagist", "github"] # only these sources; default: all
192
- deny-patterns = false # true: risky patterns in new skill text fail instead of warning
193
+ deny-patterns = false # true: risky patterns and invisible characters in new skill text fail instead of warning
194
+ deny-packages = ["evil/*"] # refused by name from any source, also in a lock; default: none
193
195
  ```
194
196
 
195
197
  ### Agents
@@ -227,18 +229,28 @@ Constraints follow Composer semantics: `^0.3` means `>=0.3.0 <0.4.0`, `~1.2` mea
227
229
 
228
230
  ### Allowed sources and policy for every project
229
231
 
230
- `allow-sources` lists the only places skills may come from: repository names, `packagist`,
231
- `github`, or `https://` URL prefixes (`https://api.github.com/repos/acme/` allows one GitHub
232
- organisation). Other repositories get no request, and `install` refuses a lock entry from them,
233
- also with `--frozen`, so a committed lock cannot bring them back. Dependencies follow the same
234
- rule.
232
+ `allow-sources` lists the only places skills may come from: repository names, `packagist`, `github`,
233
+ or `https://` URL prefixes (`https://api.github.com/repos/acme/` allows one GitHub organisation).
234
+ End a prefix with `/` (`https://gitlab.example.com/`): an entry without one also names a registry
235
+ declared at exactly that URL, whose archives may then come from any host. Other repositories get no
236
+ request, and `install` refuses a lock entry from them, also with `--frozen`, so a committed lock
237
+ cannot bring them back. Dependencies follow the same rule.
238
+
239
+ `deny-packages` refuses packages by name, `vendor/name` or a whole `vendor/*`, whatever source
240
+ serves them (a GitHub `owner/repo` counts as `owner/repo`). A plain git entry is matched by its key
241
+ in `skills.toml`, which the project picks, so limit git URLs with `allow-sources`. It is checked
242
+ before any download and again on every lock entry, so it also stops a dependency or a committed
243
+ lock. Enforced in `config.toml`, the list is a floor: a project may add packages to it, not drop
244
+ any.
235
245
 
236
246
  Policy can also come from `config.toml` next to the global manifest (`~/.config/skillcask`) and
237
247
  from the environment. The first layer that sets a key wins:
238
248
 
239
249
  1. `SKILLCASK_ALLOW_SOURCES`, `SKILLCASK_MIN_RELEASE_AGE`, `SKILLCASK_ALLOW_RANGES`,
240
- `SKILLCASK_PACKAGIST`, `SKILLCASK_GITHUB_REQUIRES`, `SKILLCASK_DENY_PATTERNS` (overriding an
241
- enforced key prints a warning);
250
+ `SKILLCASK_PACKAGIST`, `SKILLCASK_GITHUB_REQUIRES`, `SKILLCASK_DENY_PATTERNS`,
251
+ `SKILLCASK_DENY_PACKAGES` (lists comma-separated; against an enforced key only a stricter value
252
+ is accepted: a longer cooldown, `deny-patterns` on, the others off, narrower sources, more
253
+ denied packages);
242
254
  2. keys `config.toml` lists in `enforce`: a project that sets them otherwise fails;
243
255
  3. `[policy]` in `skills.toml`;
244
256
  4. the other keys of `config.toml`, as defaults.
@@ -250,6 +262,10 @@ allow-sources = ["https://gitlab.example.com/", "github"]
250
262
  enforce = ["allow-sources"]
251
263
  ```
252
264
 
265
+ `"github"` in an enforced `allow-sources` is public GitHub (`https://api.github.com/repos/`):
266
+ `SKILLCASK_GITHUB_API` and `GITHUB_API_URL` do not move it. For GitHub Enterprise, enforce its
267
+ prefix, e.g. `"https://ghe.example.com/api/v3/repos/"`.
268
+
253
269
  An enforced `min-release-age` also applies to a repository's own `min-release-age`: a project
254
270
  may only make it longer. Exceptions, by URL prefix, stay in `config.toml`:
255
271
 
@@ -262,6 +278,19 @@ enforce = ["min-release-age"]
262
278
  "https://gitlab.example.com/" = "0" # internal skills, reviewed in merge requests
263
279
  ```
264
280
 
281
+ `enforce` stops a project and its dependencies from loosening the policy for what they resolve, and
282
+ a lock entry from a source outside an enforced `allow-sources`, or younger than an enforced or
283
+ environment `min-release-age`, from installing. The environment, which a project's CI configuration
284
+ also sets, may only make an enforced key stricter. A pinned version is not scanned again for `deny-
285
+ patterns`, and its release time is what the lock says. Under `allow-sources`, a GitHub or git entry
286
+ downloads only from its repository, and a registry the list admits only by a prefix only from inside
287
+ the list; the archive URL of Packagist or a registry the list names (or gives by its exact URL,
288
+ without a trailing `/`) is what the lock says, so review lock changes. `enforce` does not stop the
289
+ person running skillcask: `SKILLCASK_HOME`, `XDG_CONFIG_HOME` or `HOME` can point at a config
290
+ without it. For a rule nobody may skip, run `skillcask install --frozen` as a required check on pull
291
+ requests, with the policy in the job's environment and `.github/workflows/` protected (CODEOWNERS or
292
+ a required workflow), since a pull request runs its own copy of the workflow.
293
+
265
294
  `config.toml` and the environment take URL prefixes, not repository names, since a name means
266
295
  whatever a project calls it. `skillcask status` prints each key that is set and where it came
267
296
  from.
@@ -342,7 +371,7 @@ Every command except `publish`, `validate` and `projects` takes `-g, --global`.
342
371
  | `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. |
343
372
  | `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. |
344
373
  | `doctor [--fix]` | Broken or committed links, stale gitignore block, modified skills; lists each check it ran. |
345
- | `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. |
374
+ | `audit [--json\|--sarif] [--advisories]` | What each installed skill reaches (commands, hosts, paths, env vars, scripts) and its findings: modified files, risky lines, invisible characters; with `--advisories` also published security advisories and abandoned packages. Exit 1 on any finding. |
346
375
  | `config [key [value…]] [--unset] [--json]` | Settings with where each comes from: `[policy]` and `[agents] targets` of `skills.toml`, or with `-g` of `config.toml` (also `policy.enforce` and `search.skills-sh`). `config policy.min-release-age 5d` sets a key, `--unset` removes it, each checked before the file is written; `config edit` opens the file in `$VISUAL`/`$EDITOR` and checks it afterwards. |
347
376
  | `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 (no query needed), both in `config.toml`. |
348
377
  | `auth set\|remove <host>` | Keep a registry token in git's credential helper (Keychain, Credential Manager, libsecret). |
@@ -534,25 +563,41 @@ too young falls back to an older commit when the server supports partial fetches
534
563
  | tells the agent to ignore its instructions | "ignore (all) previous/prior instructions", "disregard all previous/prior" |
535
564
 
536
565
  Skills that teach shell setup trigger some of these legitimately, so they are warnings. With
537
- `deny-patterns = true` under `[policy]` (or enforced in `config.toml`) they fail the command
538
- with exit 1 and nothing is written.
566
+ `deny-patterns = true` under `[policy]` (or enforced in `config.toml`) they, and the invisible
567
+ characters above, fail the command with exit 1 and nothing is written.
539
568
  - `skillcask audit` reviews what is installed now, every skill in `.agents/skills` and the project
540
569
  skills: the commands its shell code blocks run, the hosts of its URLs, the paths in the home
541
570
  directory or under system roots, the environment variables it reads and the files an agent could
542
- run. That is read from the text, so it is a hint for review, not a sandbox. It also reports a
543
- locked skill that differs from the lock, and every risky line and invisible character above,
544
- with no limit per file, and exits 1 on any of them. `--sarif` prints a SARIF 2.1.0 log for code
545
- scanning, e.g. in GitHub Actions:
571
+ run. That is read from the text, so it is a hint for review, not a sandbox, and a skill without
572
+ findings is not known to be safe. It also reports a locked skill that differs from the lock, and
573
+ every risky line and invisible character above, with no limit per file, and exits 1 on any of
574
+ them.
575
+ - `skillcask audit --advisories` also asks the sources of the locked packages what is published
576
+ about them: security advisories from a Composer repository that offers them (Packagist does) and
577
+ from a GitHub repository's security advisories, matched against the locked version, and
578
+ packages marked abandoned. An entry locked at a commit has no version to match, so only
579
+ advisories published after that commit count. A source that cannot be read fails the run;
580
+ packages whose source publishes no advisories, and plain git entries, are listed as unchecked.
581
+ Plain `audit` stays offline. To warn users of
582
+ your skill, publish a GitHub security advisory on its repository (for a Composer package, with
583
+ the `composer` ecosystem and the package name, so Packagist lists it too).
584
+ - `--sarif` prints a SARIF 2.1.0 log for code scanning, e.g. in GitHub Actions. Scripts a skill
585
+ bundles with their own dependencies (`package.json`, `requirements.txt`) are not covered by
586
+ `--advisories`; [OSV-Scanner](https://github.com/google/osv-scanner) checks those:
546
587
 
547
588
  ```yaml
548
- - uses: GetResponse/skillcask@v0.8.0
589
+ - uses: GetResponse/skillcask@v0.10.5
549
590
  with:
550
591
  args: install --frozen
551
- - run: skillcask audit --sarif > skills.sarif
592
+ - run: skillcask audit --advisories --sarif > skills.sarif
593
+ env:
594
+ GITHUB_TOKEN: ${{ github.token }} # anonymous GitHub API calls are limited to 60 an hour
552
595
  - uses: github/codeql-action/upload-sarif@v3
553
596
  if: always()
554
597
  with:
555
598
  sarif_file: skills.sarif
599
+ # optional, needs osv-scanner on PATH (e.g. google/osv-scanner-action): dependencies of bundled scripts
600
+ - run: osv-scanner scan source -r .agents/skills
556
601
  ```
557
602
  - Plain git sources pin the commit; the lock's `dist-sha256` hashes the commit's file list
558
603
  (path, mode, sha256 of the content), so it does not depend on how a server packs objects.
@@ -19,7 +19,7 @@
19
19
  "hasInstallScript": true,
20
20
  "license": "MIT OR Apache-2.0",
21
21
  "name": "skillcask",
22
- "version": "0.10.5"
22
+ "version": "0.10.6"
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.10.5"
51
+ "version": "0.10.6"
52
52
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/GetResponse/skillcask/releases/download/v0.10.5"
3
+ "https://github.com/GetResponse/skillcask/releases/download/v0.10.6"
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.10.5",
107
+ "version": "0.10.6",
108
108
  "volta": {
109
109
  "node": "18.14.1",
110
110
  "npm": "9.5.0"