skillshop 2.0.0 → 2.2.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.
Files changed (62) hide show
  1. package/README.md +273 -100
  2. package/agents-content/000_communication-writing.block.md +11 -0
  3. package/agents-content/001_external-actions.block.md +9 -0
  4. package/agents-content/AGENTS.md +11 -0
  5. package/package.json +6 -3
  6. package/skills-content/architecture-scanner/SKILL.md +274 -0
  7. package/skills-content/architecture-scanner/files.json +10 -0
  8. package/skills-content/architecture-scanner/scan.sh +823 -0
  9. package/skills-content/change-review/SKILL.md +76 -0
  10. package/skills-content/change-review/agents/openai.yaml +4 -0
  11. package/skills-content/changelog/SKILL.md +99 -0
  12. package/skills-content/changeset/changeset.md +80 -0
  13. package/skills-content/code-buddy/SKILL.md +136 -0
  14. package/skills-content/design-system-catalog/SKILL.md +106 -0
  15. package/skills-content/design-system-catalog/extract-components.mjs +441 -0
  16. package/skills-content/design-system-catalog/generate-catalog.sh +255 -0
  17. package/skills-content/flare/SKILL.md +96 -0
  18. package/skills-content/grilling/SKILL.md +31 -0
  19. package/skills-content/install-sigmap/SKILL.md +97 -0
  20. package/skills-content/one-shot/SKILL.md +51 -0
  21. package/skills-content/release/SKILL.md +128 -0
  22. package/skills-content/shadow-clone/SKILL.md +228 -0
  23. package/skills-content/shadow-clone/extract-signatures.mjs +202 -0
  24. package/skills-content/shadow-clone/scan-repo.mjs +343 -0
  25. package/skills-content/ship/SKILL.md +95 -0
  26. package/skills-content/shots/SKILL.md +89 -0
  27. package/skills-content/shots/agents/openai.yaml +4 -0
  28. package/skills-content/skillshop/SKILL.md +157 -0
  29. package/skills-content/skillz/SKILL.md +15 -0
  30. package/skills-content/transcript-clean/SKILL.md +55 -0
  31. package/skills-content/transcript-edit/SKILL.md +80 -0
  32. package/skills-content/vitest/GENERATION.md +5 -0
  33. package/skills-content/vitest/SKILL.md +52 -0
  34. package/skills-content/vitest/references/advanced-environments.md +264 -0
  35. package/skills-content/vitest/references/advanced-projects.md +300 -0
  36. package/skills-content/vitest/references/advanced-type-testing.md +237 -0
  37. package/skills-content/vitest/references/advanced-vi.md +249 -0
  38. package/skills-content/vitest/references/core-cli.md +166 -0
  39. package/skills-content/vitest/references/core-config.md +174 -0
  40. package/skills-content/vitest/references/core-describe.md +193 -0
  41. package/skills-content/vitest/references/core-expect.md +219 -0
  42. package/skills-content/vitest/references/core-hooks.md +244 -0
  43. package/skills-content/vitest/references/core-test-api.md +233 -0
  44. package/skills-content/vitest/references/features-concurrency.md +250 -0
  45. package/skills-content/vitest/references/features-context.md +238 -0
  46. package/skills-content/vitest/references/features-coverage.md +207 -0
  47. package/skills-content/vitest/references/features-filtering.md +211 -0
  48. package/skills-content/vitest/references/features-mocking.md +265 -0
  49. package/skills-content/vitest/references/features-snapshots.md +207 -0
  50. package/skills-content/workleaf/SKILL.md +77 -0
  51. package/skills-content/worklog/SKILL.md +145 -0
  52. package/skills-content/worklog/references/summary-format.md +114 -0
  53. package/skills-content/worktree/SKILL.md +71 -0
  54. package/src/agents-instructions.js +256 -0
  55. package/src/cli.js +87 -23
  56. package/src/import.js +12 -7
  57. package/src/index.js +1 -0
  58. package/src/legacy-agents-content.js +36 -0
  59. package/src/legacy-cli.js +1822 -0
  60. package/src/library.js +9 -0
  61. package/src/specifier.js +11 -0
  62. package/src/user-install.js +48 -0
package/README.md CHANGED
@@ -1,168 +1,341 @@
1
1
  # Skillshop
2
2
 
3
- Skillshop is infrastructure for **building and consuming skill libraries**. It is not a bundled personal skill catalog.
3
+ Skillshop installs and manages agent skills. Its CLI includes a bundled skill registry, with the same named install, update, and agent configuration commands as the earlier `skillz` CLI. It also lets project owners export skills from their own npm packages. A skill is a directory containing `SKILL.md` and any supporting files.
4
4
 
5
- A skill is addressed by a portable component specifier:
5
+ The command is `skillshop`; `sk` runs the same CLI. The previous `skillz` command is no longer an executable alias. Existing `.skillz-lock` and `~/.skillz` state remain readable.
6
6
 
7
- ```text
8
- skill:clips
9
- skill:loopz
10
- skill:design-review
7
+ ## For users: manage skills
8
+
9
+ ### Install and configure Skillshop
10
+
11
+ ```bash
12
+ npm install --global skillshop
13
+ skillshop init
14
+ ```
15
+
16
+ `skillshop init` asks which agents you use and saves their destinations in `~/.skillshop/config.json`. It is optional for project skill installs: without saved agent selection, Skillshop uses the nearest existing `.agents`, `.github`, or `.codex` directory and falls back to project-root `.agents/skills`. Run `skillshop init` to choose system-wide defaults; change that selection later with `skillshop config agents`. Codex and OpenCode use `.agents/skills` inside projects and `~/.agents/skills` for user-level installs. Copilot and Claude use their own skill directories. Shared destinations get one copy.
17
+
18
+ ### Install a named skill
19
+
20
+ List the skills bundled with Skillshop, then install one:
21
+
22
+ ```bash
23
+ skillshop list
24
+ skillshop one-shot
25
+ # Equivalent: skillshop install one-shot
26
+ ```
27
+
28
+ Run a project install inside a Git repository. Skillshop copies the skill into each configured project destination and records managed copies in `.skillshop-lock`. It also installs the `skillshop` guidance skill. The lockfile and managed skill directories go into the repository's local Git exclude file, leaving unrelated skill directories alone.
29
+
30
+ To install a named skill for your user account instead:
31
+
32
+ ```bash
33
+ skillshop one-shot --global
34
+ # Equivalent: sk install one-shot --global
35
+ ```
36
+
37
+ For Codex or OpenCode, this writes `~/.agents/skills/one-shot`. A global install replaces an existing skill directory with that name, including local edits and extra files. Global installs use `~/.skillshop/global-skills.json` for bookkeeping. Except for `skillshop upgrade`, ordinary non-agent-instruction CLI runs reconcile recorded installations. Upgrade skips reconciliation in the old process and refreshes changed copies from the newly installed package in a fresh process. Agent instruction commands also bypass reconciliation and do not install the bundled registry.
38
+
39
+ ### Update or remove skills
40
+
41
+ ```bash
42
+ skillshop update
43
+ skillshop update one-shot
44
+ skillshop update --push
45
+ skillshop uninstall one-shot
46
+ skillshop uninstall one-shot --global
47
+ ```
48
+
49
+ `update` replaces skills managed in the current project's lockfile. `update --push` updates registered projects. Neither command updates global copies; reinstall a global skill by name with `--global`. Project uninstall removes only a skill recorded in `.skillshop-lock`. Global uninstall removes the named skill from configured user directories.
50
+
51
+ ### Upgrade Skillshop
52
+
53
+ ```bash
54
+ skillshop upgrade
55
+ ```
56
+
57
+ The command upgrades the npm installation that supplied the invoked CLI. A project-local installation updates Skillshop in the owning npm project and preserves the dependency section where it is already declared. It refreshes only that project's recorded Skillshop-managed skill copies. A global installation updates its npm prefix, then refreshes recorded global copies and copies in registered projects; it does not update those projects' package manifests. Running from a source checkout keeps the historical global-install behavior and does not edit the checkout's package manifest.
58
+
59
+ After npm succeeds, the newly installed CLI runs in a fresh process and refreshes only existing copies recorded in `.skillshop-lock` or `~/.skillshop/global-skills.json` whose bundled skill version changed. Same-version copies retain their local bodies. A changed-version replacement overwrites local edits in that managed copy; make durable edits in the bundled source. Deleted paths are pruned from ownership records instead of recreated. Unmanaged directories and package-import snapshots are not adopted. An npm install failure stops before copy refresh; a later refresh failure reports that Skillshop was upgraded and gives a nonzero result with the partial-refresh summary.
60
+
61
+ `skillshop init` is optional. It configures agent destinations and is not required to upgrade Skillshop. The upgrade command never initializes, renders, or rewrites project `AGENTS.md` files or instruction templates.
62
+
63
+ An exact version such as `skillshop one-shot@2026.8.21` checks the currently bundled version. It does not fetch a historical release. Use `skillshop migrate` to discover older lockfiles and register their repositories.
64
+
65
+ ### Manage agent instructions
66
+
67
+ ```bash
68
+ skillshop agents
69
+ skillshop agents init
70
+ skillshop agents --check
71
+ skillshop agents --global
11
72
  ```
12
73
 
13
- The library owns where its `SKILL.md` lives. Consumers only depend on the `skill:*` name.
74
+ There are two local modes. Plain `skillshop agents` keeps the bounded legacy behavior for an uninitialized project: it updates the nearest existing `AGENTS.md` within the selected boundary, or creates one at the boundary root if none exists. After project sources are initialized, plain `skillshop agents` renders them instead. The global command remains separate and updates the supported user instruction files.
14
75
 
15
- ## The model
76
+ Initialize project-owned instructions with `skillshop agents init`. The neutral starter template is `.agents/instructions/AGENTS.template.md`; put source blocks beside it as `*.block.md`. Skillshop renders these sources into a distinct managed region in the project-root `AGENTS.md`. Existing user text and prior Skillshop managed guidance are preserved. Edit the template and source blocks, not the generated region. Repeated `skillshop agents init` leaves existing sources alone. If an initialized project's template is removed, `skillshop agents` reports an error rather than restoring bundled personal guidance. Symlinked source, template, block, or output path components are rejected, including dangling links.
16
77
 
17
- A producer package keeps a source manifest:
78
+ The default boundary is the nearest Git repository or worktree root. Outside Git, the current working directory is the boundary. Use `--project <directory>` to choose another boundary; a relative path is resolved from the command's current directory. This is required when a nested project inside a larger repository should own its own output. Put all three explicit-boundary scripts in `packages/app/package.json` so init, rendering, and checking stay in that package:
18
79
 
19
80
  ```json
20
81
  {
21
- "schemaVersion": 1,
22
- "exports": {
23
- "skill:clips": "./.agents/skills/clips",
24
- "skill:loopz": "./.agents/skills/loopz"
82
+ "scripts": {
83
+ "agents": "skillshop agents --project .",
84
+ "agents:init": "skillshop agents init --project .",
85
+ "agents:check": "skillshop agents --check --project ."
25
86
  }
26
87
  }
27
88
  ```
28
89
 
29
- `skillshop build` validates each directory and generates a package-facing `skillshop.manifest.mjs`. It also adds the standard `./skillshop` package export and, when `package.json#files` is present, ensures the exported skill directories are shipped.
90
+ For a local project dependency, add Skillshop as a development dependency and opt into rendering through explicit scripts:
91
+
92
+ ```bash
93
+ npm install --save-dev skillshop
94
+ ```
95
+
96
+ ```json
97
+ {
98
+ "scripts": {
99
+ "agents": "skillshop agents",
100
+ "agents:init": "skillshop agents init",
101
+ "agents:check": "skillshop agents --check"
102
+ }
103
+ }
104
+ ```
105
+
106
+ Run `npm run agents:init` once, edit the project sources, then run `npm run agents`. `npm run agents:check` exits successfully when the generated region in the working tree matches the current sources; it does not inspect Git's index or commit. CI can run `npm ci` followed by `npm run agents:check`. Commit the npm manifest and lockfile, `.agents/instructions/AGENTS.template.md`, its source blocks, and the rendered root `AGENTS.md`. There is no install hook: initialization and rendering happen only when the scripts are run.
107
+
108
+ Project and bundled source templates support explicit includes:
109
+
110
+ ```markdown
111
+ {{ include "020_testing.block.md" }}
112
+
113
+ {{ blocks }}
114
+ ```
115
+
116
+ Use `{{ include "020_testing.block.md" }}` or `{{ include '020_testing.block.md' }}` for named blocks. The older `{{ fragments["020_testing.block.md"] }}` and single-quoted lookup forms remain supported. `{{ blocks }}` inserts the remaining fragments in filename order, excluding every explicitly included file even when its include appears later in the template. Repeated includes render at each position. Fragment contents are inserted literally; placeholder-looking text inside a block is not evaluated recursively. Invalid expressions and missing fragments fail before generated output is written.
117
+
118
+ These expressions apply to source templates only. Skillshop does not interpret them in destination instruction files or sibling fragments.
119
+
120
+ ### Use skills from another package
121
+
122
+ A distributor can declare which exported skills a global npm install should place in your user skill directory:
123
+
124
+ ```bash
125
+ npm install --global @example/skill-library
126
+ ```
127
+
128
+ Those declared skills are copied during the package's install script. This package installer targets `~/.agents/skills` by default, independently of the agents selected with `skillshop init`. Updating the package replaces the same named user skills. If scripts are disabled, run `skillshop install-user /path/to/installed-package` manually.
129
+
130
+ To copy one exported skill into a project instead:
131
+
132
+ ```bash
133
+ npm install @example/skill-library skillshop
134
+ npx skillshop import @example/skill-library:review
135
+ ```
136
+
137
+ The `library:skill` argument names an installed package and one skill it exports. The command copies the skill to `.agents/skills/review` in the current project. Use `--to` for another destination or `--global` to copy it to `~/.agents/skills/review`. This is a snapshot. Reimport with `--force` to replace an existing project copy. `skillshop resolve @example/skill-library:review` reports its source location without copying it.
138
+
139
+ ### Example: one user, two scopes
140
+
141
+ Suppose you use Codex and work in `~/work/sample-app`, which is already a Git repository. Select Codex when `skillshop init` prompts, then install one bundled skill for every project and another only for this app:
142
+
143
+ ```bash
144
+ skillshop init
145
+ skillshop one-shot --global
146
+ cd ~/work/sample-app
147
+ skillshop changelog
148
+ ```
149
+
150
+ The global command writes `~/.agents/skills/one-shot/SKILL.md`. The project command writes `.agents/skills/changelog/SKILL.md` and `.agents/skills/skillshop/SKILL.md` inside `sample-app`, then records both managed skills in `.skillshop-lock`. It does not copy `one-shot` into the project. Running `skillshop update` in `sample-app` refreshes the locked project skills; run `skillshop one-shot --global` again to replace the global copy.
30
151
 
31
- This makes a skill library behave like a component package: producers export named components; applications resolve or materialize only the components they choose.
152
+ Package imports are separate from this lockfile workflow. `import` copies a snapshot from another package; `skillshop update` does not refresh that snapshot. `export` names a skill for consumers of a package and does not install it anywhere.
32
153
 
33
- ## Explicit export boundary
154
+ ## For project owners: distribute skills
34
155
 
35
- `skillshop.library.json` is the **only** skill export definition. The `exports` map is an allowlist, not a directory scan. In particular, `.agents/skills/` is just a possible source/install location: a repository can contain any number of valid `SKILL.md` files there without publishing any of them.
156
+ ### 1. Export the skills
157
+
158
+ In an npm package, put each skill in a directory with a `SKILL.md`. For example:
159
+
160
+ ```text
161
+ my-library/
162
+ package.json
163
+ .agents/skills/review/SKILL.md
164
+ .agents/skills/triage/SKILL.md
165
+ ```
36
166
 
37
- - `skillshop init` creates an empty `exports: {}` map; it does not discover or publish skills.
38
- - `skillshop build` requires that source manifest and generates entries only for explicitly named local exports and re-exports. Missing manifests fail validation; empty manifests publish zero skills.
39
- - `skillshop resolve` and `skillshop import` reject unlisted `skill:*` names, even when their files are present on disk.
40
- - `skillshop export` and `skillshop unexport` explicitly change that public surface. Removing an export does not delete the repository's local skill files.
41
- - Aggregators must also explicitly list every upstream skill they re-export; importing a dependency does not re-export its entire library.
167
+ For example, `.agents/skills/review/SKILL.md` could contain:
42
168
 
43
- Skillshop only adds **declared local skill directories** to its managed `package.json#files` entries. Its export allowlist governs the Skillshop API, not arbitrary physical file access: if your own package `files` patterns include other private skills, npm may still publish those files. Keep such paths out of broad package globs if they must not ship.
169
+ ```markdown
170
+ ---
171
+ name: review
172
+ description: Review a proposed code change
173
+ ---
174
+
175
+ # Review
176
+
177
+ Read the diff, identify concrete defects, and cite the affected files.
178
+ ```
179
+
180
+ Keep any references or scripts needed by the skill beside its `SKILL.md`; Skillshop copies the whole directory.
181
+
182
+ Add Skillshop, initialize the export list, and name the skill you want to publish:
183
+
184
+ ```bash
185
+ npm install skillshop
186
+ npx skillshop library init
187
+ npx skillshop export skill:review ./.agents/skills/review
188
+ npx skillshop export skill:triage ./.agents/skills/triage
189
+ ```
44
190
 
45
- A library can also re-export another library's skill without copying its source:
191
+ This writes `skillshop.library.json`:
46
192
 
47
193
  ```json
48
194
  {
49
195
  "schemaVersion": 1,
50
196
  "exports": {
51
- "skill:clips": {
52
- "from": "@dfosco/clips",
53
- "skill": "skill:clips"
54
- }
197
+ "skill:review": "./.agents/skills/review",
198
+ "skill:triage": "./.agents/skills/triage"
55
199
  }
56
200
  }
57
201
  ```
58
202
 
59
- The upstream package must be a runtime dependency or a non-optional peer dependency so the generated manifest can safely load its standard `<package>/skillshop` export.
203
+ The `exports` map is an explicit allowlist. Skillshop does not scan your repository for other skills. `skillshop export` also builds the library; run `skillshop build` after editing the JSON by hand. The build generates `skillshop.manifest.mjs`, adds the package's `./skillshop` export, and includes declared local skill directories in `package.json#files` when that field exists. Commit the resulting package files with your source.
60
204
 
61
- ## CLI
205
+ ### 2. Declare user-level installation, if needed
62
206
 
63
- Initialize a library:
207
+ To copy selected skills during a global npm install, add `skillshop.userInstall` and the generic lifecycle command to the distributor's `package.json`:
64
208
 
65
- ```bash
66
- skillshop init
209
+ ```json
210
+ {
211
+ "name": "@example/skill-library",
212
+ "version": "1.0.0",
213
+ "dependencies": {
214
+ "skillshop": "^2.1.0"
215
+ },
216
+ "files": [],
217
+ "scripts": {
218
+ "prepack": "skillshop build",
219
+ "postinstall": "skillshop install-user . --if-global"
220
+ },
221
+ "skillshop": {
222
+ "userInstall": ["skill:review"]
223
+ }
224
+ }
67
225
  ```
68
226
 
69
- Export skills:
227
+ Every `userInstall` entry must be unique and appear in `skillshop.library.json`. In this example, `skill:review` installs for the user on a global npm install. `skill:triage` remains available for explicit project imports. The runtime dependency makes the `skillshop` command available to npm's `postinstall` script. `--if-global` skips the user copy on a project-local install. npm's `--ignore-scripts` skips `postinstall` entirely.
70
228
 
71
- ```bash
72
- skillshop export skill:clips ./.agents/skills/clips
73
- skillshop export skill:loopz ./.agents/skills/loopz
74
- skillshop export skill:clips --from @dfosco/clips
75
- skillshop list
76
- skillshop validate
77
- skillshop build
78
- ```
229
+ An install replaces each declared destination directory. If a later release removes a name from `userInstall`, Skillshop does not delete a copy previously installed in a user's directory.
79
230
 
80
- Consume a skill from an installed package or a local package directory:
231
+ ### 3. Check and pack the package
81
232
 
82
233
  ```bash
83
- skillshop resolve @dfosco/clips skill:clips
84
- skillshop import @dfosco/clips skill:clips --to .agents/skills/clips
234
+ npx skillshop library list
235
+ npx skillshop validate
236
+ npx skillshop build
237
+ npm pack --dry-run
85
238
  ```
86
239
 
87
- `--force` replaces an existing import target. Without `--force`, the CLI does not overwrite an existing skill directory.
240
+ Check that the npm package contains `skillshop.manifest.mjs`, every exported `SKILL.md`, and any assets those skills need. The export list controls what Skillshop can resolve; it does not prevent your own broad `files` patterns from publishing other files. A real `npm pack` and global install from its tarball are useful checks before a release.
88
241
 
89
- **Imports are snapshots:** `importSkill` copies the complete skill directory to the destination. Imported files do not depend on the source package afterward and are never changed or deleted by a later `unexport`. To apply an updated source, the consumer must import it again explicitly.
242
+ After checking the tarball, publish the package with `npm publish`. Use `npm publish --access public` for a public scoped package.
90
243
 
91
- For applications that update only files owned by a skill while preserving local additions, the SDK also supports `merge: true`:
244
+ ### Example: what happens after publication
92
245
 
93
- ```js
94
- const result = await importSkill({
95
- library: '/path/to/a/skill-library',
96
- specifier: 'skill:clips',
97
- targetDir: '.agents/skills/clips',
98
- merge: true,
99
- });
100
- // result.installed and result.updated indicate newly copied or changed files.
246
+ With the two-skill package above published as `@example/skill-library`, a global install copies only the declared `skill:review` to the user's skill directory:
247
+
248
+ ```bash
249
+ npm install --global @example/skill-library
250
+ # ~/.agents/skills/review/SKILL.md now comes from the package
101
251
  ```
102
252
 
103
- The merge mode overlays source files and leaves unrelated destination files untouched. It is opt-in; the normal import still refuses an existing destination unless `overwrite: true` is set.
253
+ An application that needs `skill:triage` can install the package locally and copy that exported skill into its own repository:
104
254
 
105
- ## SDK
255
+ ```bash
256
+ cd ~/work/sample-app
257
+ npm install @example/skill-library skillshop
258
+ npx skillshop import @example/skill-library:triage
259
+ ```
106
260
 
107
- Skillshop exports the builder and consumer capabilities as normal application modules:
261
+ After the distributor publishes an update, reinstalling the package globally replaces the user's `review` directory. The application's `triage` snapshot stays as it was until the application updates the package and imports again with `--force`. The two installation paths are independent.
108
262
 
109
- ```js
110
- import { exportSkill, reexportSkill, buildSkillLibrary } from 'skillshop/export';
111
- import { resolveSkill, importSkill } from 'skillshop/import';
112
- ```
263
+ ### Re-export a skill from another library
113
264
 
114
- Build a library programmatically:
265
+ A package can expose a selected upstream skill under its own name:
115
266
 
116
- ```js
117
- exportSkill({
118
- root: process.cwd(),
119
- specifier: 'skill:clips',
120
- source: './.agents/skills/clips',
121
- });
267
+ ```bash
268
+ npm install @example/upstream
269
+ npx skillshop export skill:review --from @example/upstream --skill skill:review
270
+ ```
122
271
 
123
- reexportSkill({
124
- root: process.cwd(),
125
- specifier: 'skill:loopz',
126
- from: '@dfosco/clips',
127
- });
272
+ The resulting export in `skillshop.library.json` is:
128
273
 
129
- buildSkillLibrary(process.cwd());
274
+ ```json
275
+ {
276
+ "skill:review": {
277
+ "from": "@example/upstream",
278
+ "skill": "skill:review"
279
+ }
280
+ }
130
281
  ```
131
282
 
132
- Resolve without copying, which is useful for applications such as Hypercanvas:
283
+ That object is one entry inside the manifest's `exports` map. The upstream package must be a runtime dependency or a non-optional peer dependency. Re-exporting is explicit; depending on another library does not expose all of its skills.
133
284
 
134
- ```js
135
- const clips = await resolveSkill({
136
- library: '@dfosco/clips',
137
- specifier: 'skill:clips',
138
- });
285
+ ## CLI and JavaScript API
139
286
 
140
- console.log(clips.manifestPath);
287
+ ```text
288
+ skillshop init
289
+ skillshop config agents
290
+ skillshop list
291
+ skillshop <name> [--global]
292
+ skillshop install <name> [--global]
293
+ skillshop update [name]
294
+ skillshop update --push
295
+ skillshop uninstall <name> [--global]
296
+ skillshop agents init [--project <directory>]
297
+ skillshop agents [--project <directory>] [--check]
298
+ skillshop agents --global
299
+ skillshop migrate [root ...]
300
+ skillshop library init
301
+ skillshop library list
302
+ skillshop export skill:<name> <directory>
303
+ skillshop export skill:<name> --from <package> [--skill skill:<source-name>]
304
+ skillshop unexport skill:<name>
305
+ skillshop validate
306
+ skillshop build
307
+ skillshop resolve <library>:<skill>
308
+ skillshop import <library>:<skill> [--global] [--to <directory>] [--force]
309
+ skillshop install-user [package-dir] [--if-global] [--to <skills-dir>]
141
310
  ```
142
311
 
143
- Or materialize the complete skill component:
312
+ `init` and `list` keep their bundled-registry meanings. `library init`, `library list`, `validate`, and `build` operate on the package library in the current directory. In a `library:skill` reference, `library` can be an installed package name or a local package directory. `import` defaults to `.agents/skills/<skill>`; `--global` replaces `~/.agents/skills/<skill>`. `unexport` changes the package's public skill list; it does not delete the source directory. Remove a skill from `userInstall` before unexporting it.
313
+
314
+ Applications can use the same operations without invoking the CLI:
144
315
 
145
316
  ```js
146
- await importSkill({
147
- library: '@dfosco/clips',
148
- specifier: 'skill:loopz',
149
- targetDir: '.agents/skills/loopz',
150
- });
317
+ import { exportSkill, reexportSkill, buildSkillLibrary } from 'skillshop/export';
318
+ import { resolveSkill, importSkill } from 'skillshop/import';
319
+ import { installDeclaredUserSkills } from 'skillshop/user-install';
151
320
  ```
152
321
 
153
- ## Package contract
322
+ For example, an application can read an exported skill directly from an installed package, or copy it into a workspace it manages:
154
323
 
155
- Published libraries expose one standard package subpath:
324
+ ```js
325
+ import { readFile } from 'node:fs/promises';
326
+ import { resolveSkill, importSkill } from 'skillshop/import';
156
327
 
157
- ```text
158
- <package>/skillshop
159
- ```
328
+ const reference = '@example/skill-library:triage';
329
+ const { manifestPath } = await resolveSkill({ reference });
330
+ const instructions = await readFile(manifestPath, 'utf8');
331
+ // Pass instructions to your agent runtime.
160
332
 
161
- Skillshop generates that manifest. Consumers therefore do not need package-specific JS exports such as `clipsSkill` or `loopzSkill`.
333
+ await importSkill({
334
+ reference,
335
+ overwrite: true,
336
+ });
337
+ ```
162
338
 
163
- The producer package, a personal library, and an application are separate concerns:
339
+ `resolveSkill` leaves the skill inside the installed package. `importSkill` copies its complete directory, including files alongside `SKILL.md`. Set `overwrite: true` only when the application intends to replace an existing destination.
164
340
 
165
- - **Skillshop** defines the protocol and tooling.
166
- - **Clips** can export `skill:clips` and `skill:loopz`.
167
- - **A personal library** can aggregate local skills and re-export `skill:*` components from packages such as Clips without vendoring them.
168
- - **Hypercanvas** can optionally resolve/import Clips workflow skills for Squads.
341
+ `importSkill({ overwrite: true })` replaces a destination. Its optional `merge: true` mode overlays packaged files and preserves unrelated destination files. User-level installation always uses replacement, even when called through `installDeclaredUserSkills`.
@@ -0,0 +1,11 @@
1
+ ## Communication and writing
2
+
3
+ - Write directly and concisely. Prefer short, distinct sentences over long compound ones.
4
+ - Do not overuse em dashes. There are periods, commas, semicolons, and exclamation marks. Use them.
5
+ - Remove hedges and filler that add no information. Keep technical terms when they add precision.
6
+ - Avoid exact counts unless the number matters. "All the callers" is usually better than "all 4 callers."
7
+ - Short, natural reactions are fine. Use "Good catch!" rather than an inflated response.
8
+ - Avoid throat clearing, restating the question, routine process narration, and closing offers. Brief accountability or correction is fine when it helps the reader.
9
+ - Do not explain in prose what a table or diff already makes clear.
10
+ - State genuine uncertainty briefly. Do not add defensive caveats or pre-empt objections nobody raised.
11
+ - Brevity must not hide important behavior, risk, uncertainty, or evidence.
@@ -0,0 +1,9 @@
1
+ ### Approval for external actions
2
+
3
+ All external actions require explicit approval before proceeding. Even on autopilot mode, do not post without explicit written authorizaton from the user.
4
+
5
+ - Before posting or editing a PR comment, review reply, issue comment, Slack message, or other external message, show me the exact draft and get an explicit OK. This includes edits to existing messages.
6
+ - Before resolving review threads, requesting reviewers, or changing other visible review state, describe the exact action and get an explicit OK.
7
+ - Create an issue, epic, or PR only when I explicitly request it. Before opening one, show me its proposed title and body and get an explicit OK.
8
+ - A direct request to update an existing PR or issue body authorizes that update without another approval. Fetch the latest body from the host immediately before editing it.
9
+ - Pushing requested commits does not require another approval.
@@ -0,0 +1,11 @@
1
+ ### Baseline tone
2
+
3
+ This applies to every text that you write.
4
+
5
+ Adopt a skeptical, questioning approach. Don't default to praise, criticize my ideas, provide counterpoints, dig deeper. I need you to find the blind spots in my thinking and account for them, in a straight shooting and constructive way.
6
+
7
+ Don't overuse adjectives, don't compliment or criticize my arguments in a personalized way, just attend to the facts and topics. Tell it like it is; don't sugar-coat responses. Also don't explicitly mention you're NOT praising me or actively say you're “getting to the point”. Don't comment on your tone at all.
8
+
9
+ When explaining things, provide depth of concepts, be extensive, with context, clarity and explanation of concepts along the way.
10
+
11
+ {{ blocks }}
package/package.json CHANGED
@@ -1,20 +1,23 @@
1
1
  {
2
2
  "name": "skillshop",
3
- "version": "2.0.0",
4
- "description": "Build, export, resolve, and import portable agent skill libraries",
3
+ "version": "2.2.0",
4
+ "description": "Build, export, resolve, and install portable agent skill libraries",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "skillshop": "./src/cli.js",
8
- "skillz": "./src/cli.js"
8
+ "sk": "./src/cli.js"
9
9
  },
10
10
  "exports": {
11
11
  ".": "./src/index.js",
12
12
  "./library": "./src/library.js",
13
13
  "./export": "./src/export.js",
14
14
  "./import": "./src/import.js",
15
+ "./user-install": "./src/user-install.js",
15
16
  "./specifier": "./src/specifier.js"
16
17
  },
17
18
  "files": [
19
+ "agents-content/",
20
+ "skills-content/",
18
21
  "src/",
19
22
  "README.md"
20
23
  ],