@skillsmith/cli 0.8.8 → 0.8.9
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/CHANGELOG.md +96 -0
- package/README.md +11 -5
- package/dist/.skillsmith-dist-hash +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli.js +3760 -2058
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,102 @@ All notable changes to `@skillsmith/cli` are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## v0.8.9
|
|
8
|
+
|
|
9
|
+
- **Feature**: SMI-6343 Wave 3 -- tamper-check classification (#2710)
|
|
10
|
+
- **Added**: `skillsmith update` now refuses to force-install over an already-corrupt manifest
|
|
11
|
+
entry — before overwriting the currently-installed skill, it runs the same shared tamper-
|
|
12
|
+
check classification `skill_outdated` uses and skips (rather than updates) any entry
|
|
13
|
+
classified `local-drift`, `identity-mismatch`, or `unknown`, naming the reason in a new
|
|
14
|
+
`Skipped` bucket in the update summary (SMI-6343 Wave 3). `sklx list --outdated` similarly
|
|
15
|
+
no longer reports `hasUpdates: true` for a `local-drift`/owner-mismatch/path-unresolved
|
|
16
|
+
entry — only the two signals that don't require a network call (this scan is offline by
|
|
17
|
+
design); a signal-2-only (front-matter) corruption still surfaces through `skill_outdated`.
|
|
18
|
+
- **Fix**: `skills-directory.ts`'s `hasUpdates` computation (read by `sklx list --outdated`)
|
|
19
|
+
previously read a nonexistent `contentHash`/`originalContentHash` field off the *parsed
|
|
20
|
+
SKILL.md* object instead of the manifest entry, so it always fell back to comparing a fresh
|
|
21
|
+
on-disk hash against `skill_versions`' pre-fix metadata-proxy hash and could not correctly
|
|
22
|
+
report `hasUpdates: true` (SMI-6343 Wave 2). Now reads the manifest's real recorded install
|
|
23
|
+
hash and compares it via the shared `compareSkillContentHashes()` comparator, matching the
|
|
24
|
+
MCP server's `skill_outdated`/`skill_updates` tools.
|
|
25
|
+
- **Fix**: `utils/manifest.ts`'s `saveManifest()` — a homedir-derived manifest write with no
|
|
26
|
+
path-override parameter — now refuses to touch a manifest inside the real user home while
|
|
27
|
+
running under vitest, via `@skillsmith/core`'s newly-exported `assertNotRealUserHome()`
|
|
28
|
+
(SMI-6343 Wave 1 follow-up, adversarial review). Previously the test-run `$HOME` sandbox
|
|
29
|
+
was this write path's only protection.
|
|
30
|
+
- **Fix**: `skillsmith registry --help` now states that publishing and listing are MCP-only
|
|
31
|
+
today (`private_registry_publish`/`private_registry_manage`), pointing at those tools and
|
|
32
|
+
the private-registry docs page — matching already-shipped website copy. Two external
|
|
33
|
+
testers had each independently read the silent absence of `registry publish`/`list` as an
|
|
34
|
+
accidental gap; no new CLI subcommands (full CLI parity is tracked separately) (SMI-6266
|
|
35
|
+
Wave 8, SMI-6278)
|
|
36
|
+
- **Fix**: The MCP config snippet for Google Antigravity now sets `SKILLSMITH_CLIENT: "antigravity"`,
|
|
37
|
+
so copying it verbatim installs skills to AntiGravity's own directory instead of silently
|
|
38
|
+
falling back to Claude Code's default — the same fix Cursor got earlier. `command`/`args`
|
|
39
|
+
stay plain `npx` (AntiGravity has no known `npx`-resolution problem, unlike Cursor) (SMI-6266
|
|
40
|
+
Wave 7, SMI-6277)
|
|
41
|
+
- **Feature**: `skillsmith whoami` now shows your live effective license tier (and, when the
|
|
42
|
+
live check returns one, your per-minute API rate limit) alongside the existing masked-key/
|
|
43
|
+
session display, resolved via the same credential-aware `resolveEffectiveTier()` live check
|
|
44
|
+
`audit advisories`/`diff`/`pin`/`audit-collisions` already use (SMI-6271) — previously
|
|
45
|
+
`whoami` showed no tier information at all. Reuses the existing `formatTierBadge()` tier-badge
|
|
46
|
+
formatting rather than reimplementing it. Unlike those gating commands, a transient live-check
|
|
47
|
+
failure here does not block the command (this is a display command, not a gate) — it shows a
|
|
48
|
+
"could not verify" message instead of ever displaying a fabricated tier, since a single-shot
|
|
49
|
+
CLI invocation has no cached last-known tier to fall back to (SMI-6266 Wave 2, SMI-6272)
|
|
50
|
+
- **Feature**: `install`/`update`/`remove` gain a new `--scope <global|workspace>` flag
|
|
51
|
+
(ADR-139, SMI-6274 Wave 4) — `workspace` resolves against the nearest ancestor workspace
|
|
52
|
+
marker or `.git` root instead of the client's home-anchored global directory, creating the
|
|
53
|
+
workspace skills directory if none exists yet (the only path allowed to create one implicitly).
|
|
54
|
+
Precedence: `--scope` > `SKILLSMITH_SCOPE` env var > per-client `~/.skillsmith/config.json`
|
|
55
|
+
default > auto-detecting an EXISTING workspace directory > global (unchanged default — no
|
|
56
|
+
existing install moves, nothing changes for anyone who doesn't opt in). `remove`/`update` now
|
|
57
|
+
resolve against the exact `(scope, client, name)` triple rather than "whichever scope happened
|
|
58
|
+
to match by name." `list` now scans every client's workspace directory (not just Claude Code's
|
|
59
|
+
repo-local one) alongside every global directory, labels each row's scope, and marks a skill
|
|
60
|
+
present on disk with no manifest entry `[untracked]` instead of silently omitting it —
|
|
61
|
+
`remove`/`update` now adopt such a skill (reconstructing a manifest entry from disk) instead of
|
|
62
|
+
requiring `--force`. `agent install --scope workspace` can bootstrap AntiGravity as a target in
|
|
63
|
+
a fresh repo by creating `.agents/skills`. `getLocalSkillsDir()` is now a deprecated thin
|
|
64
|
+
wrapper delegating to the new resolver (also fixing a real bug: it previously never walked up
|
|
65
|
+
from `cwd`, so `list` run from a repo subdirectory silently missed the repo-root
|
|
66
|
+
`.claude/skills`)
|
|
67
|
+
|
|
68
|
+
- **Fix**: `skillsmith diagnose` now checks whether your Cursor MCP registration (both the
|
|
69
|
+
global `~/.cursor/mcp.json` and any project-scoped copy) is on the current, working config
|
|
70
|
+
shape and tells you how to fix it if not — previously nothing detected this at all once the
|
|
71
|
+
MCP server failed to even start, since the CLI's own update-nudge only fires from inside a
|
|
72
|
+
running MCP process (GH#2368, SMI-6279)
|
|
73
|
+
|
|
74
|
+
- **Fix**: `audit advisories`, `diff`, `pin`, `config get/set audit_mode`, and `audit-collisions`
|
|
75
|
+
now correctly recognize a personal `SKILLSMITH_API_KEY` or a logged-in `skillsmith login`
|
|
76
|
+
session — previously they only ever checked `SKILLSMITH_LICENSE_KEY` (an offline license key
|
|
77
|
+
almost nobody uses), so an Enterprise customer using either of the two common auth methods was
|
|
78
|
+
always reported as Community tier (GH#2508, GH#2509, SMI-6271). Live tier verification now
|
|
79
|
+
fails closed on a network/timeout error rather than silently passing or downgrading a real
|
|
80
|
+
paying customer
|
|
81
|
+
|
|
82
|
+
- **Fix**: `skillsmith login` (device-code flow) now refuses cleanly for SSO-provisioned users
|
|
83
|
+
instead of silently logging into the wrong account. Prints the server's refusal message and
|
|
84
|
+
points to the personal-API-key alternative (`/account/cli-token/` + `SKILLSMITH_API_KEY`).
|
|
85
|
+
Server-supplied error text is sanitized (control characters, bidi-override characters) before
|
|
86
|
+
being written to the terminal. Part of SMI-6206.
|
|
87
|
+
|
|
88
|
+
- **Breaking**: `sync` (and `sync config --enable`) now require Team+ tier — Community and
|
|
89
|
+
Individual tiers can no longer bulk-download the skill registry. The registry has grown far
|
|
90
|
+
larger than this feature was designed for (hundreds of thousands of records, still growing),
|
|
91
|
+
with no size warning or cost boundary until now. Enforced both client-side (fast, friendly
|
|
92
|
+
failure) and server-side (a new `registry-sync` Edge Function, so a direct API call or an
|
|
93
|
+
older CLI can't bypass the gate). Before syncing, the CLI now shows a live record count
|
|
94
|
+
fetched from the registry and asks for confirmation — pass `-y`/`--yes` to skip the prompt for
|
|
95
|
+
scripted/automated use (`--json` implies `--yes`). No deprecation window; see ADR-136 for the
|
|
96
|
+
full rationale (SMI-6236). Adversarial security review before merge found and fixed a real
|
|
97
|
+
regression in the client-side gate: it originally resolved tier from `SKILLSMITH_LICENSE_KEY`
|
|
98
|
+
only, which a user authenticated via the documented `skillsmith login` flow never has set —
|
|
99
|
+
such a user would have been incorrectly blocked as "community" even on a real Team plan. The
|
|
100
|
+
gate now resolves tier from whichever credential the sync request actually authenticates
|
|
101
|
+
with, deferring to the server's own response when it can't be resolved offline
|
|
102
|
+
|
|
7
103
|
## v0.8.8
|
|
8
104
|
|
|
9
105
|
- **Fix**: logout/whoami now detect JWT device-code sessions (#2578)
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Part of Skillsmith: a registry for sharing, scanning, and tracking agent skills
|
|
|
8
8
|
|
|
9
9
|
## Contents
|
|
10
10
|
|
|
11
|
-
- [What's New](#whats-new-in-
|
|
11
|
+
- [What's New](#whats-new-in-v089)
|
|
12
12
|
- [Installation](#installation)
|
|
13
13
|
- [Commands](#commands)
|
|
14
14
|
- [inventory](#inventory)
|
|
@@ -16,7 +16,7 @@ Part of Skillsmith: a registry for sharing, scanning, and tracking agent skills
|
|
|
16
16
|
- [Examples](#examples)
|
|
17
17
|
- [Privacy & Data Handling](#privacy--data-handling)
|
|
18
18
|
|
|
19
|
-
## What's New in v0.8.
|
|
19
|
+
## What's New in v0.8.9
|
|
20
20
|
|
|
21
21
|
- **Multi-client targeting fixed across the board**: `install`, `list`, `remove`, `update`, `sync`, and `search -i`'s install action now all honor `SKILLSMITH_CLIENT`/`--client` consistently — previously several of these silently acted on the Claude Code directory regardless of the flag or env var.
|
|
22
22
|
- **`update` no longer fails after a fresh install**: now resolves the installed skill's registry source from the manifest `install` already writes, instead of a dead-code path that could never find it.
|
|
@@ -59,7 +59,7 @@ npm update -g @skillsmith/cli
|
|
|
59
59
|
npm install -g @skillsmith/cli@latest
|
|
60
60
|
|
|
61
61
|
# Using npx always gets the latest
|
|
62
|
-
npx @skillsmith/cli@latest
|
|
62
|
+
npx @skillsmith/cli@latest --version
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
## Command Alias
|
|
@@ -432,12 +432,15 @@ skillsmith import --topic claude-skill --max 500
|
|
|
432
432
|
|
|
433
433
|
### sync
|
|
434
434
|
|
|
435
|
-
Synchronize your local skill database with the live Skillsmith registry.
|
|
435
|
+
Synchronize your local skill database with the live Skillsmith registry (Team+ tier). The registry holds hundreds of thousands of skills, so `sync` shows a live record count and asks for confirmation before downloading — pass `-y`/`--yes` to skip the prompt for scripted or automated use (e.g. running the CLI on a Team's own cloud instance to maintain a shared local mirror).
|
|
436
436
|
|
|
437
437
|
```bash
|
|
438
438
|
# Sync skills from registry (differential - only changes)
|
|
439
439
|
skillsmith sync
|
|
440
440
|
|
|
441
|
+
# Skip the confirmation prompt (automation)
|
|
442
|
+
skillsmith sync --yes
|
|
443
|
+
|
|
441
444
|
# Force full sync (ignore last sync time)
|
|
442
445
|
skillsmith sync --force
|
|
443
446
|
|
|
@@ -448,6 +451,7 @@ skillsmith sync --dry-run
|
|
|
448
451
|
**Options:**
|
|
449
452
|
- `-f, --force` - Force full sync, ignore last sync timestamp
|
|
450
453
|
- `--dry-run` - Preview changes without writing to database
|
|
454
|
+
- `-y, --yes` - Skip the confirmation prompt (for automation; also implied by `--json`)
|
|
451
455
|
- `-d, --db <path>` - Database path
|
|
452
456
|
- `--json` - Output results as JSON
|
|
453
457
|
|
|
@@ -489,7 +493,7 @@ Configure automatic sync settings.
|
|
|
489
493
|
# Show current configuration
|
|
490
494
|
skillsmith sync config --show
|
|
491
495
|
|
|
492
|
-
# Enable automatic background sync
|
|
496
|
+
# Enable automatic background sync (Team+ tier)
|
|
493
497
|
skillsmith sync config --enable
|
|
494
498
|
|
|
495
499
|
# Disable automatic sync
|
|
@@ -841,6 +845,8 @@ skillsmith search --interactive
|
|
|
841
845
|
|
|
842
846
|
### Keep Skills Up-to-Date
|
|
843
847
|
|
|
848
|
+
`sync` and background auto-sync require Team+ tier — see [sync](#sync) above.
|
|
849
|
+
|
|
844
850
|
```bash
|
|
845
851
|
# Sync with the live registry
|
|
846
852
|
skillsmith sync
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
f62a85156479633b6e42bda2582af08b36eacf4c
|