skillcask 0.10.4 → 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 +74 -20
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ Composer or Node.
|
|
|
19
19
|
**macOS, Linux**
|
|
20
20
|
|
|
21
21
|
```sh
|
|
22
|
-
brew install
|
|
22
|
+
brew install getresponse/tap/skillcask
|
|
23
23
|
# or, without Homebrew:
|
|
24
24
|
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/GetResponse/skillcask/releases/latest/download/skillcask-installer.sh | sh
|
|
25
25
|
```
|
|
@@ -36,13 +36,23 @@ it in `~/.cargo/bin` (`%USERPROFILE%\.cargo\bin` on Windows).
|
|
|
36
36
|
**Desktop app (macOS 14+ only for now)**
|
|
37
37
|
|
|
38
38
|
```sh
|
|
39
|
-
brew install
|
|
39
|
+
brew install getresponse/tap/skillcask getresponse/tap/skillcask-app
|
|
40
40
|
skillcask app # or open Skillcask from Applications
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
Install with the full names: Homebrew loads a third-party tap's cask only when it is named in full
|
|
44
44
|
(or listed by `brew trust`); after that, `brew upgrade` takes the short name.
|
|
45
45
|
|
|
46
|
+
The tap was `puniserv/tap` before 0.10.5. If you installed from it, move to the new name once
|
|
47
|
+
(your app settings stay):
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
brew uninstall --cask puniserv/tap/skillcask-app # skip if you have no app
|
|
51
|
+
brew uninstall puniserv/tap/skillcask
|
|
52
|
+
brew untap puniserv/tap
|
|
53
|
+
brew install getresponse/tap/skillcask getresponse/tap/skillcask-app
|
|
54
|
+
```
|
|
55
|
+
|
|
46
56
|
Without Homebrew:
|
|
47
57
|
|
|
48
58
|
```sh
|
|
@@ -180,7 +190,8 @@ allow-ranges = true # false: every version must be exact
|
|
|
180
190
|
packagist = true # false: drop the implicit Packagist repository
|
|
181
191
|
github-requires = false # true: dependencies may come from GitHub or git URLs
|
|
182
192
|
allow-sources = ["acme", "own", "packagist", "github"] # only these sources; default: all
|
|
183
|
-
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
|
|
184
195
|
```
|
|
185
196
|
|
|
186
197
|
### Agents
|
|
@@ -218,18 +229,28 @@ Constraints follow Composer semantics: `^0.3` means `>=0.3.0 <0.4.0`, `~1.2` mea
|
|
|
218
229
|
|
|
219
230
|
### Allowed sources and policy for every project
|
|
220
231
|
|
|
221
|
-
`allow-sources` lists the only places skills may come from: repository names, `packagist`,
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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.
|
|
226
245
|
|
|
227
246
|
Policy can also come from `config.toml` next to the global manifest (`~/.config/skillcask`) and
|
|
228
247
|
from the environment. The first layer that sets a key wins:
|
|
229
248
|
|
|
230
249
|
1. `SKILLCASK_ALLOW_SOURCES`, `SKILLCASK_MIN_RELEASE_AGE`, `SKILLCASK_ALLOW_RANGES`,
|
|
231
|
-
`SKILLCASK_PACKAGIST`, `SKILLCASK_GITHUB_REQUIRES`, `SKILLCASK_DENY_PATTERNS
|
|
232
|
-
enforced key
|
|
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);
|
|
233
254
|
2. keys `config.toml` lists in `enforce`: a project that sets them otherwise fails;
|
|
234
255
|
3. `[policy]` in `skills.toml`;
|
|
235
256
|
4. the other keys of `config.toml`, as defaults.
|
|
@@ -241,6 +262,10 @@ allow-sources = ["https://gitlab.example.com/", "github"]
|
|
|
241
262
|
enforce = ["allow-sources"]
|
|
242
263
|
```
|
|
243
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
|
+
|
|
244
269
|
An enforced `min-release-age` also applies to a repository's own `min-release-age`: a project
|
|
245
270
|
may only make it longer. Exceptions, by URL prefix, stay in `config.toml`:
|
|
246
271
|
|
|
@@ -253,6 +278,19 @@ enforce = ["min-release-age"]
|
|
|
253
278
|
"https://gitlab.example.com/" = "0" # internal skills, reviewed in merge requests
|
|
254
279
|
```
|
|
255
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
|
+
|
|
256
294
|
`config.toml` and the environment take URL prefixes, not repository names, since a name means
|
|
257
295
|
whatever a project calls it. `skillcask status` prints each key that is set and where it came
|
|
258
296
|
from.
|
|
@@ -333,7 +371,7 @@ Every command except `publish`, `validate` and `projects` takes `-g, --global`.
|
|
|
333
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. |
|
|
334
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. |
|
|
335
373
|
| `doctor [--fix]` | Broken or committed links, stale gitignore block, modified skills; lists each check it ran. |
|
|
336
|
-
| `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. |
|
|
337
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. |
|
|
338
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`. |
|
|
339
377
|
| `auth set\|remove <host>` | Keep a registry token in git's credential helper (Keychain, Credential Manager, libsecret). |
|
|
@@ -525,25 +563,41 @@ too young falls back to an older commit when the server supports partial fetches
|
|
|
525
563
|
| tells the agent to ignore its instructions | "ignore (all) previous/prior instructions", "disregard all previous/prior" |
|
|
526
564
|
|
|
527
565
|
Skills that teach shell setup trigger some of these legitimately, so they are warnings. With
|
|
528
|
-
`deny-patterns = true` under `[policy]` (or enforced in `config.toml`) they
|
|
529
|
-
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.
|
|
530
568
|
- `skillcask audit` reviews what is installed now, every skill in `.agents/skills` and the project
|
|
531
569
|
skills: the commands its shell code blocks run, the hosts of its URLs, the paths in the home
|
|
532
570
|
directory or under system roots, the environment variables it reads and the files an agent could
|
|
533
|
-
run. That is read from the text, so it is a hint for review, not a sandbox
|
|
534
|
-
locked skill that differs from the lock, and
|
|
535
|
-
with no limit per file, and exits 1 on any of
|
|
536
|
-
|
|
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:
|
|
537
587
|
|
|
538
588
|
```yaml
|
|
539
|
-
- uses: GetResponse/skillcask@v0.
|
|
589
|
+
- uses: GetResponse/skillcask@v0.10.5
|
|
540
590
|
with:
|
|
541
591
|
args: install --frozen
|
|
542
|
-
- 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
|
|
543
595
|
- uses: github/codeql-action/upload-sarif@v3
|
|
544
596
|
if: always()
|
|
545
597
|
with:
|
|
546
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
|
|
547
601
|
```
|
|
548
602
|
- Plain git sources pin the commit; the lock's `dist-sha256` hashes the commit's file list
|
|
549
603
|
(path, mode, sha256 of the content), so it does not depend on how a server packs objects.
|
|
@@ -619,7 +673,7 @@ on the formula; name both, since Homebrew loads from a third-party tap only what
|
|
|
619
673
|
or what `brew trust` lists:
|
|
620
674
|
|
|
621
675
|
```sh
|
|
622
|
-
brew install
|
|
676
|
+
brew install getresponse/tap/skillcask getresponse/tap/skillcask-app
|
|
623
677
|
```
|
|
624
678
|
|
|
625
679
|
Every release also has `Skillcask-X.Y.Z-macos-universal.zip`, signed with a Developer ID and
|
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.10.
|
|
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.
|
|
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.
|
|
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.
|
|
107
|
+
"version": "0.10.6",
|
|
108
108
|
"volta": {
|
|
109
109
|
"node": "18.14.1",
|
|
110
110
|
"npm": "9.5.0"
|