skillcask 0.1.0 → 0.1.2

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
@@ -8,31 +8,63 @@ version constraints and commits a lock with content hashes. In CI it does frozen
8
8
  fail on drift, and it links every skill into each agent's skill directory. It ships as a single
9
9
  static binary with no runtime, so it works in a repository in any language.
10
10
 
11
- Skills are distributed through the Composer repository protocol. Packagist serves public skills;
12
- GitLab's Composer registry, Satis, Private Packagist or the static repository built by
13
- `skillcask publish` serve private ones. skillcask does not need PHP or Composer.
11
+ Skills come from Composer repositories or straight from GitHub. Packagist serves public skill
12
+ packages; GitLab's Composer registry, Satis, Private Packagist or the static repository built by
13
+ `skillcask publish` serve private ones. Any GitHub repository with `SKILL.md` files works too,
14
+ which covers most of what [skills.sh](https://skills.sh) lists. skillcask does not need PHP,
15
+ Composer or Node.
14
16
 
15
17
  ## Install
16
18
 
19
+ **macOS, Linux**
20
+
17
21
  ```sh
18
- brew install puniserv/tap/skillcask # macOS, Linux
19
- npm install -g skillcask # or: bun add -g skillcask
20
- npx skillcask install --frozen # or: bunx skillcask …, no global install
21
- cargo install skillcask
22
+ brew install puniserv/tap/skillcask
23
+ # or, without Homebrew:
24
+ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/puniserv/skillcask/releases/latest/download/skillcask-installer.sh | sh
25
+ ```
26
+
27
+ **Windows (PowerShell)**
28
+
29
+ ```powershell
30
+ powershell -ExecutionPolicy Bypass -c "irm https://github.com/puniserv/skillcask/releases/latest/download/skillcask-installer.ps1 | iex"
31
+ ```
32
+
33
+ The two installer scripts download the binary for your platform from the latest release and put
34
+ it in `~/.cargo/bin` (`%USERPROFILE%\.cargo\bin` on Windows).
35
+
36
+ **npm, bun**
37
+
38
+ ```sh
39
+ npm install -g skillcask # global
40
+ bun add -g skillcask # global, bun
41
+ npx skillcask install --frozen
42
+ bunx skillcask install --frozen
22
43
  ```
23
44
 
24
45
  The npm package is a thin wrapper that downloads the release binary for your platform from
25
- GitHub. It does not check a checksum itself; where that matters, install the binary directly
26
- and verify it.
46
+ GitHub. It does not check a checksum itself; where that matters, use Homebrew or a release
47
+ archive and verify it.
48
+
49
+ **Cargo**
27
50
 
28
- Prebuilt binaries for macOS, Linux and Windows are on the
51
+ ```sh
52
+ cargo install --locked skillcask
53
+ ```
54
+
55
+ **Release archives** for macOS, Linux and Windows are on the
29
56
  [releases page](https://github.com/puniserv/skillcask/releases), with sha256 checksums and GitHub
30
- build provenance attestations (`gh attestation verify <file> -R puniserv/skillcask`).
57
+ build provenance attestations:
58
+
59
+ ```sh
60
+ gh attestation verify skillcask-x86_64-unknown-linux-gnu.tar.xz -R puniserv/skillcask
61
+ ```
31
62
 
32
63
  ## Use
33
64
 
34
65
  ```sh
35
66
  skillcask add netresearch/agent-jira-skill # resolve, write skills.toml + skills.lock, install
67
+ skillcask add github:mattpocock/skills/tdd # one skill from a GitHub repository
36
68
  skillcask install --frozen # CI: install exactly the lock or exit non-zero
37
69
  skillcask status # manifest vs lock vs installed files
38
70
  ```
@@ -65,6 +97,8 @@ acme = { type = "composer", url = "https://git.example.com/api/v4/group/42/-/pac
65
97
  "netresearch/agent-jira-skill" = "^3.34"
66
98
  "acme/agents-md" = { version = "^1.0", repository = "acme" }
67
99
  "acme/review" = { version = "1.4.2", repository = "acme", skills = ["review"] }
100
+ "mattpocock/skills" = { github = true, version = "^1.3", skills = ["tdd", "grill-me"] }
101
+ "anthropics/skills" = { github = true, skills = ["pdf"] } # default branch
68
102
 
69
103
  [agents]
70
104
  targets = [".claude/skills", ".junie/skills"]
@@ -86,6 +120,7 @@ Constraints follow Composer semantics: `^0.3` means `>=0.3.0 <0.4.0`, `~1.2` mea
86
120
  |---|---|
87
121
  | `init` | Create `skills.toml`. |
88
122
  | `add <vendor/name>[@constraint] [--repository r]` | Resolve, lock and install. |
123
+ | `add github:<owner/repo>[/skill][@version-or-ref]` | The same from a GitHub repository, see below. |
89
124
  | `remove <vendor/name>…` | Drop from manifest and lock; delete files, links and gitignore lines. |
90
125
  | `install [--frozen]` | Install the lock. `--frozen` (implied by `CI`) fails when the lock is out of date. |
91
126
  | `update [vendor/name…]` | Re-resolve within constraints. |
@@ -99,6 +134,49 @@ Constraints follow Composer semantics: `^0.3` means `>=0.3.0 <0.4.0`, `~1.2` mea
99
134
  Exit codes: 0 ok, 1 manifest/lock/status problems, 2 authentication, 3 network, 4 hash mismatch,
100
135
  5 IO or archive error.
101
136
 
137
+ ### Skills from GitHub and skills.sh
138
+
139
+ [skills.sh](https://skills.sh) lists skills as `owner/repo/skill`, for example
140
+ `mattpocock/skills/grill-me`. Put `github:` in front and add it:
141
+
142
+ ```sh
143
+ skillcask add github:mattpocock/skills/grill-me # one skill
144
+ skillcask add github:mattpocock/skills/tdd # a second one from the same repository
145
+ skillcask add github:anthropics/skills # every skill in the repository
146
+ ```
147
+
148
+ All skills of one repository share one entry in `skills.toml`:
149
+
150
+ ```toml
151
+ "mattpocock/skills" = { github = true, version = "^1.3", skills = ["grill-me", "tdd"] }
152
+ ```
153
+
154
+ Which version you get:
155
+
156
+ - **Repository with version tags** (`v1.3.1`): `add` writes `version = "^<major.minor>"`, like
157
+ for Composer packages, and `update` moves within it. The release time of a tag is its commit
158
+ date.
159
+ - **Repository without tags**: the entry follows the default branch; `ref = "main"` names a
160
+ branch, tag or commit instead. The lock pins the commit sha, so `install` keeps installing that
161
+ commit until you run `update`.
162
+ - `@` picks explicitly: `github:owner/repo@^2.0` (version tags), `github:owner/repo@main` or
163
+ `@<commit sha>` (ref).
164
+ - With `policy.allow-ranges = false` a branch counts as a range: `add` writes the full commit sha
165
+ as `ref`, and a hand-written branch name is rejected.
166
+
167
+ Skills are found by their `SKILL.md` anywhere in the repository, except inside another skill.
168
+ The install name is the frontmatter `name`; when that is not a valid name (`Jira Automation`), the
169
+ directory name is used. `skills = [...]` takes these names.
170
+
171
+ GitHub allows 60 anonymous API requests per hour. `add`, `update` and `outdated` use a few per
172
+ entry; `install` from the lock uses none, it downloads the pinned archive. Set `GITHUB_TOKEN`
173
+ (GitHub Actions has one) or Composer's `"github-oauth": {"github.com": "<token>"}` in `auth.json`
174
+ for a higher limit and for private repositories. `SKILLCASK_GITHUB_API` points at GitHub
175
+ Enterprise (`https://ghe.example.com/api/v3`).
176
+
177
+ skills.sh itself is not queried: its API needs a Vercel token. Search on the website, then add
178
+ what you picked.
179
+
102
180
  ## Security
103
181
 
104
182
  - The lock pins the version, the commit reference, the sha256 of the downloaded archive and
@@ -110,6 +188,9 @@ Exit codes: 0 ok, 1 manifest/lock/status problems, 2 authentication, 3 network,
110
188
  No symlink is ever written from a package. Size and file count are capped (`--max-download`,
111
189
  `--max-unpacked`, `--max-files`).
112
190
  - No package code runs, ever. No telemetry.
191
+ - `min-release-age` for GitHub sources reads commit dates, which the committer sets. A
192
+ backdated commit passes the cooldown; reviewing what `add`/`update` change in `skills.lock` is
193
+ the real check there.
113
194
  - Credentials come from Composer's `auth.json` / `COMPOSER_AUTH` (`http-basic`, `bearer`,
114
195
  `gitlab-token`, `gitlab-oauth`) and are never printed. In GitLab CI use `http-basic` with the
115
196
  user `gitlab-ci-token` and the password `$CI_JOB_TOKEN`.
@@ -19,7 +19,7 @@
19
19
  "hasInstallScript": true,
20
20
  "license": "MIT OR Apache-2.0",
21
21
  "name": "skillcask",
22
- "version": "0.1.0"
22
+ "version": "0.1.2"
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.1.0"
51
+ "version": "0.1.2"
52
52
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/puniserv/skillcask/releases/download/v0.1.0"
3
+ "https://github.com/puniserv/skillcask/releases/download/v0.1.2"
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.1.0",
107
+ "version": "0.1.2",
108
108
  "volta": {
109
109
  "node": "18.14.1",
110
110
  "npm": "9.5.0"